新工具:ficheck.py - SANS互联网风暴中心
发布日期:2025-07-24
最后更新:2025-07-24 03:07:53 UTC
作者:Jim Clausing(版本:1)
每当我教授FOR577课程时都会提到,自Gene Kim在30多年前首次发布Tripwire以来,我一直是文件完整性监控工具(FIM)的忠实粉丝。多年来我使用过多种工具,包括tripwire、OSSEC、samhain和aide等。我曾长期使用Michael A. Gumienny开发的fcheck Perl脚本(在Ubuntu上可通过apt包安装),因为它速度极快。但不幸的是,在Ubuntu 16.04到20.04之间的某个时间点(具体时间已记忆模糊),该工具在我管理的多个系统上运行速度大幅下降,从原来每天能运行4-6次变成有时需要超过24小时才能完成——这还只是针对特定目录而非整个系统的扫描。
虽然我从1989年就开始编写Perl脚本,但并没有花时间探究fcheck突然出现问题的原因。直到几个月前,我重新思考这个问题并决定用Python编写一个类似工具。今天发布的版本尚未完全完成(因此版本号为0.9.0),但已在约十几个系统(Debian和Ubuntu)上测试运行6个月,理论上任何搭载Python 3.9或更新版本的Linux系统都能运行。未来计划添加支持附加配置文件的功能(类似fcheck的.local.cfg),避免所有配置都需写入主配置文件。
我将这个工具命名为ficheck.py(文件完整性检查),既是对Gumienny先生原创工具的致敬(我承认直接借鉴了其配置文件和报告格式),也避免了名称冲突。该脚本在所有测试系统(包括公有云大型系统和内存极小的VM)上运行时间均低于90秒。同时发布的还有一个快速安装脚本,可配置基础设置、创建每2小时运行的cron任务,以及另一个工具mail_stuff.py——当stdin接收到ASCII或UTF-8字节时可通过mailx发送邮件。所有安装文件均存放在我的GitHub代码库中。
该工具监控以下内容:
- 文件创建与删除
- inode编号变更(即同名新文件)
- 文件大小、链接数、属主、属组、权限变更
- SHA2-256哈希值(针对小于500MB的文件,可通过命令行参数配置)
- 文件修改时间(MTime)
- 文件元数据(inode)变更时间(CTime)
- 若安装pystatx模块(参见去年mac_robber.py更新日志),还可监控文件创建时间(BTime)
我通常监控那些除非打补否则不会频繁变更的目录,并会排除正常操作中定期修改的文件。同时还添加了攻击者常用来隐藏恶意软件的目录(如/dev/shm)。检测到变更时会通过邮件发送报告截图。
参考链接:
- https://github.com/clausing/scripts/blob/master/ficheck.py
- https://github.com/clausing/scripts/blob/master/mail_stuff.py
- https://github.com/clausing/scripts/tree/master
Jim Clausing, GIAC GSE #26
jclausing –at– isc [dot] sans (dot) edu
关键词:文件完整性监控