Linux应急响应手册-5

Linux应急响应手册-5
本文来自NOP Team0x00 简介
持续性的挖矿、远控后门等可以通过直接排查发现,但是在实际工作中,很多恶意行为(访问恶意域名、连接恶意IP)只集中出现了几次,无法直接通过网络连接找到恶意进程及文件或者有些恶意程序处置结束后,无法确定是否已经清理完整
可以通过短时间/长时间网络监控来解决
0x01 确定目标域名或IP
如果目标域名或者IP是某一知名组织的,可以将该组织或者种类病毒的域名和IP都收集进行监控
0x02 修改域名解析记录
修改恶意域名的解析记录目的主要有两个:
- 阻断控制,防止二次伤害
- 得到固定的IP解析记录,防止攻击者把域名下架或者改变解析到的IP
修改域名解析记录有两个途径:
- 在内网DNS服务器中集中修改(如果内网有DNS服务器)
- 修改 hosts 文件 (推荐)
以恶意域名 du.testjj.com 为例
- 通过修改
/etc/hosts将 du.testjj.com 解析IP修改为 123.123.123.123
- 通过修改
0x03 设置监控程序
很多客户不允许在服务器上安装监控程序,但是对于可审计的脚本倒是可以在审计后执行,因此这里主要以脚本为主
Linux_Audit_Nop.sh
while true
do
sleep 0.1
pids=$(netstat -pantu | grep 123.123.123.123 | awk -F "/" '{print $1}' | awk -F " " '{print $NF}' | sort | uniq)
for one_pid in $pids
do
if [ $one_pid == "-" ]; then
continue
fi
echo "" >> $(pwd)/Audit_results.txt
echo "[ lsof -p $one_pid ]" >> $(pwd)/Audit_results.txt
lsof -p $one_pid >> $(pwd)/Audit_results.txt
echo "" >> $(pwd)/Audit_results.txt
echo "[ cat /proc/$one_pid/maps ]" >> $(pwd)/Audit_results.txt
cat /proc/$one_pid/maps >> $(pwd)/Audit_results.txt
echo "" >> $(pwd)/Audit_results.txt
echo "[ ls -al /proc/$one_pid/exe ]" >> $(pwd)/Audit_results.txt
ls -al /proc/$one_pid/exe >> $(pwd)/Audit_results.txt
done
if [ -f "$(pwd)/Audit_results.txt" ]; then
echo "Found it !"
exit
fi
done除了上述脚本以外,再推荐两款比较优秀的程序
- sysmon for linux
- auditd
sysmon for linux 原本是微软为 Windows 开发的监控程序,21年的时候做了 Linux 开源版
https://github.com/Sysinternals/SysmonForLinux
https://github.com/OpenSecureCo/Demos/blob/main/sysmonforlinux
auditd 集成在 Ubuntu 的软件库中,可以直接安装
https://linux.die.net/man/8/auditd
0x04 等待恶意程序执行
0x05 确定程序运行时间
查看程序运行时间
ps -w -eo pid,lstart,etime,cmd | grep <pid>
表示 1292 这个进程是在 2022年4月28日13:32:20 被创建的,已经运行了30分零2秒,具体执行的命令行为 /usr/sbin/sshd -D
与找到的恶意文件创建时间进行对比
stat xxx.shls -al xxx.sh
这个部分更多是为了验证发现的文件是否为当前程序的恶意文件,增加这个对比,可能会发现一些之前没有发现的蛛丝马迹
0x06 处理异常进程
恶意文件样本采样
scpscp -P 4588 remote@www.target.com:/usr/local/aaa /home/admin-P指定SSH端口 (注意大小写)- 从远程服务器将aaa下载到本地的 /home/admin
finalshell、xshell等集成工具python、php等程序起http服务nc
病毒在线分析
进程查杀
ps ajfx |
进程组 ID & 会话ID
在 Linux 中,常见的、关注更多的是 pid 和 ppid;
对于 PGID 和 SID 接触的应该不多,简单解释一下 PGID 和 SID。
当程序运行起来后,会产生一个主进程,并且分配一个进程 ID (PID),如果在运行期间,主进程又起了其他的进程,那么这个其他进程就是该主进程的子进程,同时会分配相应的进程 ID,并且设置其 PPID 的值为父进程的 PID。
而此时,父进程和其所有生成的子进程就会形成一个进程组,并且会被分配一个进程组 ID。
那什么又是会话 ID 呢?例如:当我们通过 ssh 连接远程服务器时,会获取到一个会话,同时会被分配一个会话 ID,而此时,由该会话发起的所有进程的会话 ID 都是一样的。(类似数据库一样,登录之后的所有行为,都被记录在同一张表中,如果要查询该会话所有记录,只需要
select * form table_name where PGID = xxxx即可查询该会话中的所有进程记录由上所述,如果挖矿程序有调用子进程,那么一定要以进程组为单位全部杀掉 。
守护进程
- 恶意文件为了保证自身的稳定持续运行,通常都会为程序设置一个守护进程。而杀掉守护进程和杀掉普通进程并没有什么区别,直接一起杀掉就可以。
线程查杀
- 在 Linux 中,线程的概念,其实就是轻量级的进程。
- 一些恶意程序将恶意代码做到了线程级别,也就是说,恶意程序宛若寄生虫一般附在了现有生产环境中的正常生产进程中,做成了一个线程;
- 以目前的技术手段来说,直接查杀一个正常业务进程中的线程风险很大;有很大的概率会把正常的业务进程搞崩。
- 如果真的遇到了线程级别的恶意程序,查杀之前一定需要和业主客户沟通确认并明确风险之后在进行操作。
- 杀线程的方法和杀进程一样:
ps -T -p pid |
其中 SPID 就是线程 ID,而 CMD 栏,则显示了线程名称。
# 除了ps命令之外,还有其他命令也可查看线程 |
0x07 删除恶意文件
通过进程pid以及/proc/ ,我们已经定位到了文件的具体位置,接下来就是删除恶意文件
当然在删除过程可能中会遇到一些阻力,常见的分为以下几种:
- 文件占用:
# 使用sudo rm -rf path/to/file 删除失败,提示进程被占用,可以使用以下方法排查: |
具体可以参考linux 文件属性与权限 - kzangv - 博客园
- 奇奇怪怪的名字导致无法删除:
从 Windos 向 Linux 传输的文件或者攻击者恶意制作的文件,会存在文件名乱码的情况,无法直接通过乱码的文件名进行删除,可以使用 inode 来确定文件名,之后删除
- a、b 解决办法
- 查看 inode 值:
ls -li eval.sh
- 查看 inode 值:
john@john:~/temp$ ls -li evil.sh |
- 删除文件
# 以inode值查找删除。(以上图12327526为例子) |
- 具体可参考:
linux连个文件都删除不了,什么鬼! - 烟雨星空 - 博客园
linux下利用inode删除指定文件文件 - 天生帅才 - 博客园
- 目录挂载导致无法删除以及相关解决办法
有些时候,当目录中没有文件,但是依然无法删除的时候,会显示 Device or resource busy
但是使用 lsof 进行查看,又发现并没有资源占用,此时需要考虑可能目录存在挂载点导致。
此时需要先将挂载取消,之后再删除该目录
sudo lsblk -a |
- 注意:/dev/sdb1 是演示机终端的情况,真实情况需要根据实际的情况进行更改,不可直接无脑复制该命令卸载。
- 解决办法👇—————👇
sudo umount /dev/sdb1 |
这样就成功删除了!
0x08 善后阶段
直接查看善后阶段即可
0x09 常规安全检查阶段
直接根据常规安全检查章节进行安全检查即可,目的是找出当前系统中存在的隐藏后门等










