实战Linux应急响应踩坑与深度反思
字数 1217 2025-08-09 13:33:49
Linux应急响应实战指南:从挖矿病毒到隐藏进程的全面处理
1. 应急响应基础流程
1.1 初步症状识别
- CPU异常:CPU利用率突然达到100%可能是挖矿病毒迹象
- 网络连接异常:检查异常外网连接,特别是国外IP
- 系统卡顿:无明显CPU异常但系统卡顿需考虑隐藏进程
1.2 威胁情报查询平台
- 奇安信威胁情报中心
- IBM X-Force Exchange
- VirusTotal
- 微步在线
2. 挖矿病毒处理
2.1 识别与终止
-
网络连接分析:
netstat -antp重点关注:
- 异常国外IP连接
- 非标准端口连接
-
进程分析:
top -c ps -aux --sort=-%cpu查找高CPU占用进程
-
终止恶意进程:
kill -9 <PID>
2.2 文件清理
-
查找恶意文件:
find / -name "*miner*" -o -name "*xmr*" -o -name "*monero*" find /tmp -type f -mtime -1 -
删除确认的恶意文件
2.3 爆破攻击分析
-
检查爆破记录:
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more -
登录成功分析:
grep "Accepted" /var/log/auth.log | awk '{print $1,$2,$3,$9,$11}' -
使用lastb检查异常登录:
lastb
3. 隐藏进程处理
3.1 动态链接库预加载检测
-
检查/etc/ld.so.preload:
cat /etc/ld.so.preload -
清除恶意预加载:
echo "" > /etc/ld.so.preload
3.2 进程组终止
-
查找进程组ID(PGID):
ps -eo pid,pgid,cmd | grep <可疑进程名> -
终止整个进程组:
kill -9 -<PGID>
4. 日志分析与取证
4.1 关键日志文件
/var/log/auth.log:认证相关日志/var/log/syslog:系统警告信息/var/log/cron:计划任务日志/var/log/wtmp:登录记录(使用last查看)/var/run/utmp:当前登录用户(使用who查看)
4.2 日志被篡改处理
-
识别日志清除:
- 日志文件突然变小或内容异常
- 大量乱码或空白内容
-
文件恢复尝试:
extundelete /dev/sda1 --restore-file /var/log/auth.log
5. 自动化检测工具
5.1 GScan工具
- 全自动Linux安全检测
- 可检测反弹shell等隐蔽后门
5.2 LinEnum
- 系统服务与漏洞扫描
- 提供全面系统状态报告
6. 防御加固措施
6.1 SSH防护
-
禁用root登录:
sed -i 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config -
更改SSH端口:
sed -i 's/#Port 22/Port 2222/g' /etc/ssh/sshd_config -
安装fail2ban:
apt install fail2ban
6.2 监控部署
-
进程监控:
atop -
文件完整性监控:
aide --init
7. 勒索病毒应对
7.1 识别特征
- 文件被加密并添加特定后缀
- 存在勒索信息文件(如README.txt)
- 包含联系邮箱或支付方式
7.2 应对策略
-
查找解密工具:
- 深信服千里目实验室公众号
- 安全响应及EDR知识赋能平台
- Freebuf等安全论坛
-
数据恢复尝试:
photorec /dev/sda1
8. 高级技巧
8.1 父子进程处理
#include <unistd.h>
#include <stdio.h>
int main() {
setbuf(stdout, NULL);
pid_t pid;
pid = fork();
if (pid == 0){
printf("child pid: %d\n", getpid());
while(1){
sleep(1);
printf("child\n");
}
} else {
printf("father pid %d\n", getpid());
while(1){
sleep(1);
printf("father\n");
}
}
}
编译后可用于测试进程终止效果
8.2 流量分析
from scapy.all import *
def packet_callback(packet):
data = bytes(packet[TCP].payload)
if b'User-Agent' in data:
for info in data.split(b'\n'):
User_A = b'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'
if User_A in info:
print(data.split(b'\n')[5])
print('msf后门控制中')
if __name__ == '__main__':
i = input('inet:')
sniff(filter='tcp', iface=i, prn=packet_callback, store=0)
9. 报告撰写要点
- 事件概述:简明描述事件性质
- 处理过程:详细记录响应步骤
- 发现与结论:明确攻击路径和影响
- 建议措施:具体可行的加固方案
- 附录:包含日志片段等证据
10. 总结与反思
- 全面性检查:不要满足于表面问题解决
- 持续监控:处理后需持续观察系统状态
- 知识积累:每次应急都是学习机会
- 防御优先:预防胜于应急响应
通过系统化的应急响应流程、深入的分析技术和全面的防御措施,可以有效应对Linux系统面临的各种安全威胁。