Linux应急响应手册-1

Linux应急响应手册-1
本文来自NOP Team0x0-整体流程
0x1—挖矿事件应急响应处置方法
1.发掘寻找恶意域名(矿池地址)
- 根据内网 dns 服务器、dns 防火墙、边界防火墙、流量审计设备等相关设备获取
- 根据域名确认木马类型,可以从以下沙箱判定寻找
多沙箱检测,确保结果。
2.获取异常进程 pid
- cpu 占用
top -c -o %cpu-c参数显示进程的命令行参数
ps -eo pid ,ppid,%mem,%cpu,cmd --sort =-%cpu | head -n 5- 列出 cpu 占用前 5 的进程信息
- 内存占用
top -c -o %MEM-c参数显示进程的命令参数
ps -eo pid ,ppid,%mem,%cpu,cmd --sort =-%mem | head -n 5- 列出 内存占用前 5 的进程信息
- 网络占用
网络占用需借助第三方软件,之后使用 root 权限执行
Ubuntu/Debian 安装:
sudo apt install nethogs
Centos/RHEL 安装:sudo yum -y install epel-releasesudo yum -y install nethogs- 安装过程中若出现依赖问题,可使用
- f参数修复安装
安装完成之后执行:
sudo nethogssudo jnettop
nethogs、jnettop均可使用--help配合管道符、grep和head根据回显的提示给出相应的参数查看相关网络占用信息。
3.寻找恶意文件
- 经过上述步骤,基本上可以获取到异常占用进程 pid 或者与之相关的恶意执行命令和相关参数信息。
- 根据进程名字或者部分字符串获取 pid
pidof ‘name’ |
- 根据 pid 获取程序的详细信息:
lsof -p pid |
pwdx—— 获取该 pid 的进程启动的时候的目录;注意,该命令打印出的结果并不一定就是恶意程序的所在路径,只是启动恶意程序的路径;
cat /proc/pid/maps |
Ps:有些时候,无法通过 ps,top 等命令根据 pid 进行查询,可能是因为攻击者将
/proc/pid/进行了隐藏,具体的手段(猜测) 应该是通过以下方式实现的
mkdir .hidden |
- 根据 pid 查看由进程起的线程
ps H -T -p pid |
其中 SPID 就是线程 ID,而 CMD 一栏则显示了线程名称
top -H -p pid |
4.确认恶意程序/进程的运行时间
- 查看程序运行时间
ps -eo pid,lstart,etime,cmd | grep <pid>
上图表示 pid 为 1292 的进程是在 2022 年 4 月 28 日 13:32:20 被创建的。已经运行了 30 分零 2 秒,具体执行的命令行为 /usr/sbin/sshd -D
- 与找到的恶意文件创建时间做对比
stat xxxx.sh
- 查看恶意文件属性:
ls -la xxx.sh
该部分是为了验证定位到的文件是否为当前恶意程序的恶意文件,增加此对比,可能会发现一些之前没能发现蛛丝马迹
5.处理异常的进程
- 恶意文件样本采样
scp -P 4588 remote@RHOST_address:/file/to/patch/file /home/your/file/to/path |
或者使用finalshell、xshell等集成工具完成恶意文件样本采样。也可使用python、php等程序发起http服务。
根据信息安全工程师习惯或者业主要求/环境要求,灵活使用。
- 恶意样本分析溯源
| 在线分析平台 | ||
|---|---|---|
| PCHunter | 哈勃 | 奇安信云沙箱 |
| Virustotal | 魔盾 | 微步云沙箱 |
| jotti | HYBRID | 安恒威胁分析平台 |
| scanvir | 大圣云沙箱检测系统 | 360 威胁分析平台 |
- 寻找病毒 /类似病毒分析报告
| 病毒分析报告平台 | |
|---|---|
| 安全客 | 绿盟科技 |
| Freebuf | 安恒分析平台 |
| 深信服安全响应以及 EDR 知识赋能平台 | 火绒安全最新资讯 |
- 恶意进程查杀
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命令之外,还有其他命令也可查看线程 |
6.删除恶意文件
- 通过上述操作,我们已经定位到了文件具体位置并且杀掉了恶意程序,接下来就是删除恶意文件,当然在删除过程可能中会遇到一些阻力,常见的分为以下几种:
- 文件占用:
# 使用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 |
- 经过上述一套组合拳,基本可以解决 99%的难以删除的恶意文件。
- 若在删除过程中发现了 rm 命令无响应,可能是命令被污染;
- 解决办法:查看
/.bashrc 和/.zshrc 中是否被写入了 命令别名,使用 vim 打开配置文件,搜索/alias rm=查找是否存在别名命令。- 若未发现自定义命令,可直接复制整个纯净 linux 系统/usr/bin/rm & /usr/bin/chmod 目录覆盖问题主机同目录文件。
7.安全事件应急善后处理工作
- 经过上述全部的流程,已经完成了一次挖矿事件的处置。接下来就是事件善后处理、检查工作。
- 善后处理包括检查此主机是否有其他类型的被攻击痕迹,同网络下
其他主机是否有被攻击的痕迹等;- 将所有采集到的文件样本、进程、线程信息的截图留存,出具完整的应急事件响应报告。
整个安全事件善后处理工作包含的方面很多,将会单独写一篇安全事件善后处理工作细则出来,当我们应急响应工作完成之后,可根据《安全事件应急善后处理工作》继续进行全面、细致的检查。








