如何排查导致RPM校验失败(md5、大小、时间变更)的文件篡改进程
RPM包文件篡改排查方案
事后溯源(已发生篡改场景)
- 先锁定篡改发生的精确时间范围:执行
stat 被篡改的文件路径,获取文件的修改时间(mtime),所有后续排查都围绕该时间点前后1小时的范围缩小目标。 - 排查系统操作日志
- 若提前开启了auditd服务,优先查询审计日志:执行
ausearch -f 被篡改的文件路径 --start '篡改时间前1小时' --end '篡改时间后10分钟',正常配置的auditd会直接记录修改该文件的进程PID、运行用户、父进程信息。 - 筛选系统常规日志:执行
grep -aE "(sudo|yum|rpm|wget|curl)" /var/log/messages /var/log/secure /var/log/cron | grep "篡改时间关键词",排查对应时间点有没有特权操作、软件包更新、定时任务触发记录。
- 若提前开启了auditd服务,优先查询审计日志:执行
- 排查用户操作与进程残留
- 导出所有特权用户的操作历史:
cat /root/.bash_history /home/*/.bash_history | grep -E "(vi|vim|echo|cp|mv|wget) 目标文件所在目录",匹配对应时间的手动修改操作。 - 若开启了进程记账服务(psacct),执行
lastcomm --since "篡改时间前1小时" | head -100,筛选对目标文件有写入权限的进程记录。
- 导出所有特权用户的操作历史:
- 排查自动执行逻辑
- 扫描所有定时任务:检查
/var/spool/cron/*、/etc/cron.d/*、/etc/cron.hourly/*等路径下的脚本,有没有自动替换、修改软件包文件的逻辑。 - 排查自启动服务:检查
/etc/rc.d/、/usr/lib/systemd/system/下的自启动项,排除服务启动时覆盖文件的可能。
- 扫描所有定时任务:检查
- 恶意程序排查
- 执行
rkhunter --check、chkrootkit扫描系统Rootkit、恶意后门,同时执行ls -la /proc/*/exe | grep deleted排查无对应二进制文件的可疑残留进程。
- 执行
事前捕获(未定位到进程,防止二次篡改)
如果现有日志不足以定位篡改进程,可以部署监控捕获下一次篡改行为:
- 配置auditd监控规则:执行
auditctl -w 被篡改文件路径 -p w -k php70_file_tamper,后续所有对该文件的修改操作都会被审计日志完整记录,篡改触发后执行ausearch -k php70_file_tamper即可直接获取进程信息。 - 配置inotify实时监控:后台执行
inotifywait -mq 被篡改文件路径 -e modify --format '%w%f %T' --timefmt '%F %T' >> /tmp/file_monitor.log,触发修改时自动联动ps auxf、lsof 被篡改文件路径记录当前操作进程的完整上下文。 - 兜底防护:如果确认该文件不会有合法变更,可执行
chattr +i 被篡改文件路径设置不可变属性,所有进程(包括root)都无法修改/删除该文件,尝试修改的操作会直接报错并在系统日志留下记录。
注意:排查过程中不要直接恢复或覆盖被篡改的文件,避免破坏篡改时间戳、残留属性等关键证据,建议先对被篡改文件做完整备份后再操作。
内容的提问来源于stack exchange,提问作者Hasan Aliyev
相关产品推荐
相关产品推荐

