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, 主机入侵检测, 哈希校验, 安全规则引擎, 无后门, 系统运维, 逆向工具