antwnakys/file-integrity-monitor

GitHub: antwnakys/file-integrity-monitor

一个仅用 Python 标准库实现的 Tripwire 式文件完整性监控器,通过 SHA-256 哈希基线检测文件篡改。

Stars: 0 | Forks: 0

# 🔎 file-integrity-monitor (fim) 一个**文件完整性监控器**:它记录目录的加密基线, 然后检测自那时起任何被**修改、添加或删除**的文件——这是 像 **Tripwire** 和 **AIDE** 这类基于主机的入侵检测工具背后的核心技术。 ``` Integrity check — /etc ------------------------------------------------ ! MODIFIED passwd + ADDED .hidden_cron - REMOVED app.conf ------------------------------------------------ ⚠ 3 change(s) detected (1 modified, 1 added, 1 removed). ``` ## 为什么文件完整性监控很重要 当攻击者进入系统时,他们会更改文件:修改 `/etc/passwd` 以添加账户,植入后门脚本,布置恶意的 cron 任务,或者用带有木马的系统二进制文件替换原文件。勒索软件会大量重写文件。甚至 粗心的管理员也可能通过未授权的配置编辑破坏生产环境。 已知良好哈希值的基线将所有这些转变为一个**可检测的事件**: 运行一次检查,任何偏离基线的行为都会立即显现出来。 **为什么使用哈希而不是时间戳?** 细心的攻击者会恢复文件的大小和 修改时间以隐藏更改。SHA-256 哈希比较的是*实际内容*, 因此即使大小和 mtime 看起来未变,单个字节的改变也会被捕获——这个工具明确测试了这种情况。 ## 用法 ``` # 1. 记录已知的良好 baseline(在干净的系统上执行此操作): python -m fim init /etc -b /root/etc.baseline.json # 2. 稍后 —— 或按计划 —— 检查是否被篡改: python -m fim check /etc -b /root/etc.baseline.json ``` `check` **在发现任何更改时以非零状态退出**,因此它可以直接放入 cron 任务中进行警报: ``` # 每小时检查一次;如果发生任何更改则发送电子邮件 0 * * * * python -m fim check /etc -b /root/etc.baseline.json || \ mail -s "FILE TAMPERING on $(hostname)" security@example.com ``` 将基线存储在受监控目录**之外**(或只读介质上), 这样攻击者就无法悄悄地重写它——尽管 `fim` 也会作为安全网将基线文件从其自身的快照中排除。 ## 工作原理 - **`baseline.py`** — 遍历目录树,并将每个文件的 SHA-256 和大小记录 到 JSON 快照中。分块读取文件(即使是超大文件也能保持内存占用恒定),并跳过 symlink(可能指向目录树之外)。 - **`compare.py`** — 通过对路径执行集合操作来对比两个快照,然后对两者中都存在的文件进行哈希比较,生成已添加 / 已移除 / 已修改的列表。 - **`cli.py`** — `init` / `check` 命令以及带颜色的报告。 ## 运行测试 ``` pip install pytest pytest ``` 测试套件会构建**真实的临时目录树**(pytest 的 `tmp_path`),并 测试哈希、快照、JSON 往返处理以及每种更改类型—— 包括“大小相同,一个字节不同”的规避情况。无网络连接,对临时目录之外也 没有任何影响。 ## 项目布局 ``` file-integrity-monitor/ ├── fim/ │ ├── baseline.py # hashing + snapshot build/save/load │ ├── compare.py # snapshot diff → added / removed / modified │ └── cli.py # init / check commands └── tests/ # pytest suite (tmp_path, no network) ``` ## 无外部依赖 仅使用 Python 标准库(`hashlib`, `os`, `json`)。仅在运行测试时需要 `pytest`。 ## 注意事项与限制 - 这是一个时间点完整性检查,而不是实时监控器——请将其与 cron 或 systemd timer 结合使用。 - 基线的可信度仅与获取基线时的系统一样可信;始终在已知干净的机器上建立 基线。 - 用于监控您自己的系统。 ## 许可证 [MIT](LICENSE) — 可自由使用、学习和在此基础上进行开发。
标签:Python, 主机入侵检测, 哈希校验, 安全规则引擎, 无后门, 系统运维, 逆向工具