应急响应场景及排查思路
本文结合多个实际应急案例经验进行总结,整理 Linux 操作系统应急过程中的排查项以及各项的关注内容,结尾提供辅助工具。
1.通信端口
1.1. 推荐命令
(1)netstat -napt
1.2. 端口通信状态查看
重点关注本地端口、远程通信 IP 及端口、PID、进程名称,同时可通过连接状态来判断是临时连接还是长时间连接。
通常来讲,反弹 shell 的链接是长时间的连接,可以每间隔 60 秒查看一次,如果连续 2-3 次查看后依旧保持连接状态,则可判定为长期连接,需要重点关注。
1.3. 端口开放情况查看
这里我们需要关注端口开放情况以及本地端口与远程端口通信端口差异
查看端口开放情况是最基本的操作,排查是否有异常开放端口。
通信端口差异的排查原因是基于服务器与攻击者而控制端的连接方式,达到命令控制一般分为两种连接方式,正向连接与反向连接。
正向连接即为本地监听端口,这种情况下多数为 4 位数或以下的端口号,且因为监听端口号是人为设定所以端口号有序,例如 1234、 5555、888、666、6666、7788、99、123 等。
反向连接端口特征是 5 位数且端口号随机无规律可循,而远端通信端口号则是人为设定,有一定特征。
1.4. 进程名查看
这个比较好理解,不多做阐述,主要是看有没有特殊进程。
2.系统进程
2.1. 推荐命令
(1)ps -aux
(2)ps -ef
2.2. 进程排查流程
通过端口排查我们所发现的异常端口,可以通过排查进程进行详细确认,排查进程应养成习惯,无论是否找到异常端口对应的进程,都应该对所有的进程进行查看。
我们依照端口排查阶段所看到的本地跟远程的 888 端口通信为例来讲解,通信进程对应的PID 为 804。
在找出的结果中我们能详细的看到进程ID 所对应执行的命令,此处为bash -i。
使用ps -ef 的查看效果如下。
其实这种反弹shell 是最简单的,我们到这一步已经知道是如何反弹 shell 的了,只需要关闭对应进程即可。但是如果深度排查我们可以通过查看进程所产生的文件获取更多信息。
可以根据exe 与cwd 了解执行程序以及运行目录。
在通过ps -ef 查找对应进程后,还可以根据进程父ID 继续向上查找,结合对应进程的cwd 以及exe 找到执行文件。
在寻找文件的过程中可以参考文件修改时间以及文件名来快速定位,因为一些攻击者会把后门插入到正常的文件中。但是这里的文件修改时间只能作为参考,不能完全依赖。例如下图中的 hacker.sh 显示是最后一次修改是在 1937 年,但是很显然 1937 年的时候世界上没有电脑。
3.计划任务
3.1 推荐命令
(1)crontal -l
(2)crontal -u [username] -l
(3)vi
3.2 排查路径
需要使用vi 查看或者其他编辑器逐一排查,不要使用cat 查看。
/etc/crontab
/var/spool/cron
/etc/cron.d
/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
4.其他排查项
4.1. 用户排查
4.1.1.推荐命令
(1)cat /etc/passwd | grep -E "/bash$" && cat /etc/passwd | grep -E "/sh$"
推荐排查后使用再看一遍/etc/passwd 进行确认
4.2. 历史命令排查
4.2.1.推荐命令
(1)history
可结合关键字进行快速查找。
4.3. 日志排查
4.3.1.推荐命令
(1)cat
可根据实际情况去选择排查的日志文件。
4.4. 内存消耗排查
4.4.1.推荐命令
(1)free -h
(2)top + m 键
通过排查进程的内存损耗,快速判断是否有异常进行。一般在处理挖矿病毒的时候会参考这个结果。
4.5. 环境变量排查
4.5.1.推荐命令
(1)echo $PATH
查看系统变量有无异常。
4.6. 登录用户排查
4.6.1.推荐命令
(1)w
查看当前登录用户、登录IP、用户操作。
(2)last
查看用户登录记录以及IP
5.工具推荐
杀毒:河马杀毒 http://www.shellpub.com
系统排查:linpeas.sh