0x01.基本思路和思考逻辑
1 linux操作系统的日志记录特点
基本元素:
1.时间 2.地点 3.操作 4.身份
特点:
1.都是以文件格式直接写入的方式记录的
2.写入的程序是linux发行版的内核程序,由于其隐藏性所以达到windows中关闭日志记录的效果很难
3.所有的linux版本只要获得root权限即可全面管理所有的日志文件
2.操作linux系统时常用的组件
-
bash
-
系统服务和组件
-
ssh
3.总体思路
文件! 还是文件!
系统日志文件
bash文件
应用和服务日志文件
方法:
文件的修改就是日志的修改
覆写文件的重要性更重要
修改文件的时间就能隐藏修改日志的记录
4.注意事项
1.有的没有: 由于日志记录根据每个linux发行版本的不同,所以有些文件可能我讲的没有,有些我没讲的又有,所以操作日志重点应该看日志的标题和内容来判断日志的功能
2.不适用于"非linux:在实战中,如果遇到“像linux但又不是linux系统的东西的时候通常清理日志记录就不太有用了,比如Sas,, k8s,docker这种,由于这类应用的灵活性和部署需求 , 通常日志记录都会放在第三方平台
3.时间:linux清理痕迹同样是不能做到完美的,作为有经验的防守方可做查看文件的修改时间和操作系统时间操作相关的记录查看到痕迹清理的时间和特征
0x02.linux清理登录痕迹
1.日志的基本结构
/var/log/btmp 记录所有登录失败信息,使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,使用lastlog命令查看
/var/log/wtmp 记录所有用户的登录、注销信息,使用last命令查看
/var/log/utmp 记录当前已经登录的用户信息,使用w,who,users等命令查看
/var/log/secure 记录与安全相关的日志信息
/var/log/messages 记录系统启动后的信息和错误日志
2.日志相关
echo > /var/log/btmp 清空登录失败信息
lastb
echo > /var/log/wtmp 清空用户的登录、注销信息
last
清除用户最后—次登录时间:
echo > /var/log/lastlog
清除当前登录用户的信息:
echo > /var/log/utmp
清除安全日志记录:
cat /dev/null > /var/log/secure
清除系统日志记录:
cat /dev/null > /var/log/messages
#删除所有匹配到字符串的行,比如以当天日期或者自己的登录ip,以message举例,只要是日志都可以这样操作
sed -i '/12:20:10/'d /var/log/messages
#全局替换时间或者ip等关键字
sed -i 's/12:20:11/12.20:99/g' /var/log/messages
原内容 替换后的内容
3.ssh相关
.ssh下的known_hosts文件会自动保存ssh登录过这台机器的一些指纹
ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash -i (这样w就不会看到我们在线,也不会记录指纹了,历史记录也没看到)
说明:
-o UserKnownHostsFile=/dev/null #这个是knowhost的信息及公钥
-T user@host /bin/bash -i #不分配伪终端,但是给个bash的终端
0x03.linux清理操作痕迹
1.服务日志的修改
#使用grep-v来把我们的相关信息册除
cat /var/log/nginxlaccess.log | grep -v evil.php > tmp.log
删除带有evil.php这行的日志,然后备份到tmp.log下
#把修改过的日志覆盖到原日志文件
cat tmp.log > /var/log/nginxlaccess.log
2.bash相关
空格命令,这样这条命令就不会记录在history里面了
echo > ~/.bash_history 清空命令历史文件
kill -9 $$(好用) bash本身就是一个进程,命令是怎么记录呢?在你退出bash进程的一瞬间,记录下命令
history -c 清空内存中的命令历史
history -d 358 删除358行历史记录
vim /etc/profile
HISTSIZE=0 停止历史命令记录(实战不推荐,还要恢复)
set +o history(y) 设置当前shell内的命令不再进入日志中(会记录在history中)
set -o history 设置当前shell内的重新进入日志中 (不会记录)
3.文件覆写
大部分linux发行版都可以使用
单个文件:
shred -f -u -z -v -n 8 1.txt 在硬盘上复写8次删除
文件夹:
wipe -r /tmp/test
0x04.linux清理时间痕迹
1.初步修改文件时间
ls -la
touch -r 目标时间的文件 需要修改时间的文件
touch -r 1.txt 2.txt 需改后2.txt的时间就和1.txt相同了
touch -d "2018-04-18 08:00:00" install.log
-a︰仅修改access time
-c︰仅修改时间,而不建立文件
-d :后面可以接日期,也可以使用--date="日期或时间"-m:仅修改mtime
-t∶后面可以接时间,格式为[YYMMDDhhmm]
2.进一步修改文件时间
touch可以修改一个文件的三种时间属性,有一个最近改动的时间是无法修改的
解决办法:
修改操作系统时间为我们想要的时间,然后再修改文件时间,然后再恢复操作系统时间
date -s "20140712 16:43:53"
touch -r .ssh test.txt
hwclock --hctosys 恢复操作系统时间
0x05.linux痕迹清理总结
1.重点内容
- 理解linux日志的记录特征和位置
- bash痕迹的清理
- 文件!还是文件!
2.学习路径
- 蓝队安全事件排查
- linux文件操作相关
- linux操作系统的时间操作相关
3.实战经验
1.kill -9 $$和覆写文件在实战操作中很有用
⒉修改文件时间也很有用,但是要注意与其他痕迹清理知识结合
3.由于linux痕迹清理比windows操作更彻底,所以做好之后效果比windows会更好
4.再次提醒: "非linux"系统做这些基本没用