点击关注公众号,知识干货及时送达👇
1
前言
在入侵或测试某个系统或服务器的过程中,那么通常需要进行一系列的操作,如上传工具、创建文件、执行命令等。然而,在攻击结束后,如何清理入侵痕迹并避免被溯源,这其实是一个细致的技术活。
2
清除history记录
History记录原理:每当用户在shell中执行一个命令时,这个命令就会被记录下来,放置在缓存中,history
命令查看的也是缓存中的命令,当exit退出时系统会将缓存的命令写入history文件~/.bash_history
。如果在shell运行过程中kill掉其进程,则缓存命令不会写入history。
方法一:直接编辑history记录文件
编辑history记录文件,删除部分不想被保存的历史命令。
vim ~/.bash_history
方法二:直接编辑history记录文件
清除当前用户缓存的history命令记录,history命令本身不会被记录,但执行该命令之后的命令仍然会记录,所以要在退出前运行,不会删除history文件中的记录。
history -c
方法三:利用vim删除和执行命令
(1)利用vim特性删除历史命令
#使用vim打开一个文件
vi test.txt
# 设置vim不记录命令,Vim会将命令历史记录,保存在viminfo文件中。
:set history=0
# 用vim的分屏功能打开命令记录文件.bash_history,编辑文件删除历史操作命令
vsp ~/.bash_history
# 清除保存.bash_history文件即可。
(2)在vim中执行自己不想让别人看到的命令
:set history=0
:!command
方法四:清除当前session缓存的命令记录
通过修改配置文件/etc/profile,使系统不再保存命令记录。
HISTSIZE=0 #对历史命令记录数量的限制
HISTFILESIZE=0 #对history文件.bash_history行数的限制
方法五:设置不记录历史命令
登录后执行下面命令,不记录历史命令(.bash_history)
unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG
export HISTFILE=/dev/null
export HISTSIZE=0
export HISTFILESIZE=0
3
日志清除
在入侵目标系统之后,系统日志往往会记录下入侵者的一些操作行为和信息,例如登录时间、登录账号、访问文件等。因此,清除系统日志是非常关键的步骤。
Linux 系统存在多种日志文件,来记录系统运行过程中产生的日志。
日志 | 作用 |
---|---|
/var/log/btmp | 记录所有用户错误登录信息,二进制文件, 使用lastb命令查看 |
/var/log/lastlog | 记录系统中所有用户最后一次登录时间的日志,使用lastlog命令查看 |
/var/log/wtmp | 记录所有用户成功登录、注销信息,二进制文件,使用last命令查看 |
/run/utmp | 记录当前已经登录的用户信息,二进制文件,使用w、who、users等命令查看 |
/var/log/secure 或 /var/log/auth.log | 记录与安全相关的日志信息,涉及使用账户和密码登录的程序都会记录 |
/var/log/lastlog | 记录所有用户最后一次的登录时间的曰志,二进制文件,使用lastlog命令查看 |
/var/log/messages | 记录系统启动后的信息和错误日志 |
Linux中绝大多数应用的日志文件的默认路径存储路径都在/var/log/
目录下,比如:/var/log/apache2/access.log
、/var/log/nginx/access.log
,root权限直接可以查看并删改,而且不需要停止当前应用运行的服务,日志的删改方法都是相同的,如下:
(1)清空日志文件
这种方式可以清除日志文件中的所有记录,不留下任何痕迹,但是容易被察觉,一般不推荐使用。将日志文件全部删除即将空字符写入日志文件,需要root权限,
有五种命令可以实现:
cat /dev/null > filename
: > filename
> filename
echo "" > filename
echo > filename
区别:前三种命令是真正意义上的清空,清空文件后文件大小为0,后两种命令因为echo是命令输出一个字符串,所以清空文件后会留下一个换行符,文件大小为1byte。
清除相关日志信息:
清除登录系统失败的记录:echo > /var/log/btmp #查询不到登录失败信息
清除登录系统成功的记录:echo > /var/log/wtmp #查询不到登录成功的信息
清除用户最后一次登录时间:echo > /var/log/lastlog #lastlog命令
清除当前登录用户的信息:echo > /var/log/utmp #使用w,who,users等命令
清除安全日志记录:cat /dev/null > /var/log/secure
清除系统日志记录:cat /dev/null > /var/log/message
(2)删除/替换部分日志
日志文件全部被清空,太容易被管理员察觉了,如果只是删除或替换部分关键日志信息,那么就可以完美隐藏攻击痕迹。对于文本格式的日志文件,可以直接进入文件进行删改,也可以利用流编辑命令sed
删除文件中匹配的行:
# 删除所有匹配到字符串的行,比如以当天日期或者自己的登录ip
sed -i '/自己的ip/'d /var/log/messages
# 全局替换登录IP地址:
sed -i 's/192.168.2.1/192.168.1.1/g' secure
对于二进制日志文件,部分删除需要使用utmpdump
命令,utmpdump
可以将wtmp和utmp转换为文本文件,将文本文件编辑修改后恢复成二进制文件即可,如下面针对wtmp进行修改:
# 将二进制日志文件转换为可编辑的文本文件
utmpdump /var/log/wtmp >/var/log/wtmp.file
# 对文本文件进行编辑和修改
# 将编辑修改后的文本文件转换为二进制日志文件
utmpdump -r < /var/log/wtmp.file > /var/log/wtmp
(3)清除部分相关日志
# 使用grep -v来把我们的相关信息删除
cat /var/log/nginx/access.log | grep -v evil.php > tmp.log
# 把修改过的日志覆盖到原日志文件
cat tmp.log > /var/log/nginx/access.log
4
文件擦除
rm
、rmdir
删除的文件可以使用一些恢复工具轻松地找回,为避免数据被恢复,对于敏感文件和工具,应该使用覆写删除命令进行删除:
(1)shred命令
实现安全的从硬盘上擦除数据,默认覆盖3次,具体参数如下:
--help:显示shred命令的帮助信息。
-f, --force:强制执行,不提示用户确认信息。
-n, --iterations=N:指定要执行的覆盖次数,默认为3次。
-s, --size=N:指定每个覆盖块的大小,默认为512字节。
-u, --remove:在shred命令执行完之后,删除文件。
-v, --verbose:显示shred的详细进度信息。
-x, --exact:指定使用扩展的覆盖模式,包括对文件内部块排序和重复执行的策略。
-z, --zero:最后一次使用ascii的0x00进行覆盖以隐藏覆盖动作
使用示例:
# 将1.txt覆写6次后再填0x00,最后将其删除
[root@centos]# shred -f -u -z -v -n 8 1.txt # 或shred -zufvn 6 1.txt
#将file.txt覆盖一个10MB的随机字符串
[root@centos]# shred -s 10M -n 1 1.txt
#将1.txt使用扩展的覆盖模式,并在完成后删除它
[root@centos]# shred -xu 1.txt
(2)dd命令
dd 命令用于读取、转换并输出数据,也可用于安全地清除硬盘或者分区的内容。
使用方式如下:
[root@centos]# dd if=/dev/zero of=要删除的文件 bs=大小 count=写入的次数
5
隐藏远程SSH登陆记录
-
登录时不分配伪终端,在utmp、wtmp、btmp中不会有记录,不会被w、who、users、last、lastb命令发现:
ssh -T [email protected] /bin/bash -i
# -T:不分配伪终端
# -i:bash的参数,表示交互式shell
-
不记录ssh公钥在本地.ssh目录中
ssh -o UserKnownHostsFile=/dev/null -T [email protected] /bin/bash –i
# -o:options选择信息
6
总结
Linux入侵痕迹清理是入侵者必须掌握的技能之一。通过隐藏真实IP地址、清除系统日志、删除上传的工具和后门文件以及擦除入侵过程中产生的痕迹,入侵者可以有效地避免被溯源和追踪。
END
原文始发于微信公众号(希石安全团队):【后渗透】入侵痕迹清理之Linux篇
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论