Linux入侵痕迹清除姿势

本文记录Linux入侵痕迹清除思路、方法...

0x01 清除系统日志

1. 系统关键日志

日志文件 说明
/var/log/cron 系统定时任务相关日志
/var/log/secure 记录与安全相关的日志信息
/var/log/auth.log 记录系统授权信息,如用户登录和权限机制等
/var/log/btmp 记录所有登录失败信息,使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,使用lastlog命令查看
/var/log/wtmp 记录所有用户的登录、注销信息,使用last命令查看
/var/log/utmp 记录当前已经登录的用户信息,用w,who,users等命令来查询
/var/log/dmesg 开机时内核自检的信息
/var/log/messages 系统相关日志
/var/log/kern.log 内核日志

2. 清空日志文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1)通过重定向到空来清空日志

> /var/log/access.log # 清除web访问日志

2)将输出:或true内置命令重定向到文件

:> /var/log/secure # 清除安全日志记录
OR
true > /var/log/secure

3)cat/cp/dd命令结合/dev/null清空文件

/dev/null设备文件是一个特殊文件,可以注销(删除)发送给它的任何输入

cat /dev/null > /var/log/cron

cp /dev/null /var/log/cron

dd if=dev/null of=/var/log/cron # if表示输入文件,of引用输出文件

4) 使用echo命令清空文件

使用带有空字符串的echo命令,并将其重定向到文件,空字符串与null不同,字符串是一个对象,因为它可能是空的,而null意味着不存在对象

echo "" > access.log

echo > access.log

echo -n "" > access.log # 使用-n告知echo的标志不输出导致上一个命令中生成的空行的尾部换行符

5)使用truncate命令清空文件

截断命令有助于收缩或文件的大小扩大到规定的尺寸,可以使用-s指定文件大小的选项。要清空文件内容,可使用大小为0(零)

truncate -s 0 access.log

3. 删除/替换日志

全部清空日志,动静太大,可选择性删除/替换部分关键日志,隐藏痕迹

1
2
3
4
5
6
7
sed  -i '/攻击ip/d'  /var/log/secure    # 删除登录日志攻击ip所在的行

sed -i 's/192.168.1.1/127.0.0.1/g' /var/log/access.log # 全局替换访问IP地址

cat /var/log/nginx/access.log | grep -v shell.php > tmp.log # 删除入侵相关信息

cat tmp.log > /var/log/nginx/access.log/ # 把修改过的日志覆盖到原日志文件

0x02 清除历史命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1) 清除/部分删除历史命令

history -c && exit

vim ~/.bash_history

2)不记录历史命令

unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0

修改配置文件/etc/profile,不再保存命令记录:HISTSIZE=0

3)vim特性利用

:set history=0 # 设置vim不记录命令,vim会将命令历史记录,保存在viminfo文件中

vsp ~/.bash_history # 用vim的分屏功能打开命令记录文件.bash_history,编辑文件删除历史操作命令

:set history=0 # vim中执行不想让其他人看到的命令
:!command

0x03 文件删除工具

1. shred命令

shred 会覆盖文件来隐藏它的内容,也可以选择删除

1
2
3
4
5
6
$ shred -zvu -n  5 passwords.list

-z - 用零覆盖以隐藏碎片
-v - 显示操作进度
-u - 在覆盖后截断并删除文件
-n - 指定覆盖文件内容的次数(默认值为3)

2. wipe命令

wipe 命令可以安全地擦除磁盘中的文件,从而无法恢复删除的文件或目录内容

1
2
3
4
5
6
7
8
9
10
$ sudo apt-get install wipe   [Debian 及其衍生版]
$ sudo yum install wipe [基于 RedHat 的系统]

$ wipe -rfi private/* # 销毁 private 目录下的所有文件

$ wipe /dev/sda1 # 删除完整分区的内容

-r - 告诉 wipe 递归地擦除子目录
-f - 启用强制删除并禁用确认查询
-i - 显示擦除进度

3. Secure-Delete

Secure-Delete 是一组工具集合,提供srm、smem、sfill、sswap,4个安全删除文件的命令行工具

1
2
$ sudo apt-get install secure-delete   [Debian 及其衍生版]
$ sudo yum install secure-delete [基于 RedHat 的系统]

srm

1
2
3
4
$ srm -vz private/*

-v – 启用 verbose 模式
-z – 用0而不是随机数据来擦除最后的写入

sfill

sfill 是 secure-deletetion 工具包的一部分,是一个安全免费的磁盘和 inode 空间擦除器,它以安全的方法删除可用磁盘空间中的文件。sfill 会检查指定分区上的可用空间,并使用来自 /dev/urandom 的随机数据填充它

1
$ sudo sfill -v /home/username

sswap

sswap 以安全的方式删除 swap 分区上存在的数据,在使用 sswap 之前需卸载 swap 分区

1
2
3
4
$ cat /proc/swaps 
$ swapon # 检查分页和交换设备/文件是否已经使用
$ sudo swapoff /dev/sda6 # 禁用分页和交换设备/文件
$ sudo sswap /dev/sda6 # 命令要花费一些时间,默认要进行 38 遍擦除

sdmem

sdmem 是一个安全的内存擦除器,其设计目的是以安全的方式删除存储器(RAM)中的数据

1
$ sudo sdmem -f -v

4. dd命令

dd命令起初是用于磁盘克隆的,它用于将一个分区或者一个磁盘复制到另一个分区或者磁盘。但是它还可用于安全地清除硬盘或者分区的内容

1
2
3
sudo dd if=/dev/random of=/dev/sda

sudo dd if=/dev/zero of=要删除的文件 bs=大小 count=写入的次数

5. 隐藏远程SSH登录记录

隐身登录系统,不会被w、who、last等指令检测到

1
ssh -T [email protected] /bin/bash -i

不记录ssh公钥在本地.ssh目录中

1
ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash –i

0xFF Reference