Sanjay-Suresh2005/file-integrity-monitor

GitHub: Sanjay-Suresh2005/file-integrity-monitor

一款蓝队文件完整性监控工具,结合 VirusTotal 威胁情报和 ELK SIEM 实现实时文件变更检测、恶意软件识别与自动化告警。

Stars: 1 | Forks: 0

# 🛡️ 文件完整性监控 (FIM) 一款实时的蓝队安全工具,用于监控目录中的未经授权文件更改,结合 **VirusTotal 威胁情报**丰富事件信息,并将结构化审计日志发送至 **ELK stack SIEM**,配合自动化检测规则。 ![Python](https://img.shields.io/badge/Python-3.10+-blue?logo=python) ![Elastic](https://img.shields.io/badge/Elastic-9.4.1-yellow?logo=elasticsearch) ![Docker](https://img.shields.io/badge/Docker-Compose-blue?logo=docker) ![VirusTotal](https://img.shields.io/badge/VirusTotal-API%20v3-red) ![License](https://img.shields.io/badge/License-MIT-green) ## 📌 功能简介 - **实时检测**文件创建、修改、删除及重命名/移动事件 - 使用 SHA-256 对每个文件进行**哈希计算**,并与已知良好的基线进行比对 - 调用 **VirusTotal** API v3 查询每个新建或修改文件的威胁信誉 - 检测到恶意软件时,将日志严重性**升级**为 Critical(严重),并附加 ECS `threat.*` 字段 - 通过 Logstash 将结构化的 NDJSON 日志**传输**至 Elasticsearch - 通过 6 条 Kibana SIEM 检测规则进行**告警**,涵盖勒索软件、恶意软件植入、删除以及规避技术 ## 🏗️ 架构 ``` FIM_lab/ (monitored directory) │ ▼ monitor.py (Watchdog Observer) │ fires instantly on any file event ▼ event_processor.py (Non-blocking Queue) │ returns immediately, enqueues work ▼ Background Workers (4x daemon threads) ├── vt_client.py ──► VirusTotal API v3 (SHA-256 lookup) │ └── virustotal_cache (SQLite, 7-day TTL) ├── database.py ───► fim.db (SQLite audit trail) └── logger.py ─────► fim_events.log (ECS NDJSON) │ ▼ Logstash (Docker) │ ▼ Elasticsearch ──► Kibana SIEM (fim-events index) (6 detection rules) ``` ## 🚀 快速开始 ### 前置条件 - Python 3.10+ - Docker Desktop - VirusTotal API 密钥(免费版即可) ### 1. 克隆仓库 ``` git clone https://github.com/Sanjay-Suresh2005/file-integrity-monitor.git cd file-integrity-monitor ``` ### 2. 设置环境 **在 Windows 上(命令提示符):** ``` copy .env.example .env ``` **在 Linux/macOS 上:** ``` cp .env.example .env ``` 编辑 `.env` 并填入你的值: ``` VT_API_KEY=your_virustotal_api_key_here VT_ENABLED=true ELASTIC_PASSWORD=your_elastic_password_here ELASTICSEARCH_PASSWORD=your_elastic_password_here ``` ### 3. 安装 Python 依赖 ``` cd FIM_project pip install -r requirements.txt ``` ### 4. 启动 ELK stack ``` cd .. docker compose up -d ``` 等待约 60 秒,直到所有容器变为健康状态。Kibana 将可以通过 `http://localhost:5601` 访问。 ### 5. 运行 FIM agent ``` cd FIM_project python main.py ``` Agent 将执行以下操作: 1. 为受监控目录中的所有文件建立基线 2. 开始监控实时变更 3. 对每个新建或修改的文件查询 VirusTotal 4. 通过 Logstash 将事件发送至 Elasticsearch ## 📁 项目结构 ``` file-integrity-monitor/ ├── .env.example # Environment variable template ├── .gitignore ├── docker-compose.yml # ELK stack (Elastic 9.4.1) ├── FIM_project/ │ ├── main.py # Entry point: baseline + monitoring │ ├── config.py # Paths, settings, .env loader │ ├── hashing.py # SHA-256 + file metadata │ ├── database.py # SQLite: events, baseline, VT cache │ ├── vt_client.py # VirusTotal API v3 client │ ├── monitor.py # Watchdog filesystem observer │ ├── event_processor.py # Non-blocking worker queue engine │ ├── logger.py # ECS-compliant NDJSON logger │ ├── requirements.txt │ └── tests/ │ ├── test_fim_events.py # 11 unit + integration tests │ └── run_tests.py ├── logstash/ │ ├── fim_template.json # Elasticsearch index template │ └── pipeline/ │ └── logstash.conf # Logstash input/filter/output ├── kibana/ │ └── README_KIBANA_RULES.md # Detection rules documentation └── simulation/ ├── trigger_rule2_eicar.py # Simulate malware detection ├── trigger_rule4_ransomware.py # Simulate ransomware pattern ├── trigger_rule8_repeated.py # Simulate file tampering └── trigger_rule9_executable.py # Simulate malware drop ``` ## 🔍 VirusTotal 集成 每个 `file_created` 或 `file_modified` 事件都会触发 SHA-256 信誉查询: ``` New/modified file detected │ ▼ Check virustotal_cache (SQLite) │ ┌────┴────┐ Cache hit Cache miss < 7 days or expired │ │ │ ▼ │ GET /api/v3/files/{sha256} │ │ │ ┌──────┴──────┐ │ 404 (unknown) 200 (known) │ cache as clean cache result └────────┬─────────┘ │ malicious_count > 0? ┌────────┴────────┐ YES NO │ │ Escalate severity Standard log to Critical (7) severity: 1 Add threat.* fields Alert in Kibana ``` **缓存行为:** - 结果缓存 7 天 — 保护免费 API 额度(限制为 4 次请求/分钟) - HTTP 404(未知文件)将被缓存为安全 — 防止重复查询 - HTTP 429(频率限制)会被优雅处理 — 监控继续 uninterrupted ## 🚨 Kibana 检测规则 6 条涵盖全面威胁光谱的自定义 SIEM 规则: | 规则 | 严重性 | 触发条件 | |------|----------|---------| | FIM — 检测到恶意文件 (VirusTotal) | 🔴 Critical | VT 标记哈希为恶意 | | FIM — 频繁文件修改 (勒索软件模式) | 🔴 High | 同一主机在 1 分钟内发生 10 次以上修改 | | FIM — 受监控目录中文件被删除 | 🔴 High | 任何文件被删除 | | FIM — 植入可执行文件或脚本 | 🟡 Medium | 创建了 .exe .bat .ps1 .py .vbs .sh 文件 | | FIM — 文件被重命名或移动 | 🟡 Medium | 任何文件被重命名或移动 | | FIM — 同一文件被反复修改 | 🟡 Medium | 同一文件在 1 分钟内被修改 5 次以上 | 有关完整的规则查询和设置说明,请参阅 [`kibana/README_KIBANA_RULES.md`](kibana/README_KIBANA_RULES.md)。 ## 🧪 测试 ``` cd FIM_project python -m unittest tests/test_fim_events.py ``` 11 项测试涵盖: - 所有 4 种事件类型(创建、修改、删除、移动) - VT 缓存存储和 7 天过期机制 - 对 404、429 和网络超时的优雅处理 - 恶意情报丰富化 — 严重性升级,ECS threat 字段 ## 🎭 威胁模拟与规则测试 在 `simulation/` 目录内提供了一组自动化模拟脚本,以帮助验证您的 Kibana SIEM 检测规则并演示其功能。 确保 FIM agent 正在运行(在 `FIM_project/` 中执行 `python main.py`),然后从项目根目录执行以下任何命令: ### 1. 模拟恶意软件检测(规则 2) 写入标准的 EICAR 防病毒测试特征码。这将触发 VirusTotal 查询,将告警升级为 **Critical** 严重性,并附加 ECS 威胁情报块: ``` python simulation/trigger_rule2_eicar.py ``` ### 2. 模拟勒索软件模式(规则 4) 在几秒钟内快速创建/修改 12 个文件,以触发基于阈值的勒索软件活动规则: ``` python simulation/trigger_rule4_ransomware.py ``` ### 3. 模拟文件篡改(规则 8) 连续 6 次对单个文件附加更改,以触发频繁修改告警: ``` python simulation/trigger_rule8_repeated.py ``` ### 4. 模拟植入脚本/可执行文件(规则 9) 写入模拟的 PowerShell 脚本(`.ps1`)以触发脚本植入告警: ``` python simulation/trigger_rule9_executable.py ``` ## 🔧 技术栈 | 组件 | 技术 | |-----------|------------| | Agent 语言 | Python 3.10+ | | 文件系统监控 | Watchdog | | 威胁情报 | VirusTotal API v3 | | 本地存储 | SQLite | | 日志格式 | NDJSON / Elastic Common Schema (ECS) | | 日志提取 | Logstash 9.4.1 | | 搜索与存储 | Elasticsearch 9.4.1 | | SIEM 与仪表板 | Kibana 9.4.1 | | 容器化 | Docker Compose | ## ⚙️ 配置 所有设置均通过 `.env` 控制: | 变量 | 描述 | |----------|-------------| | `VT_API_KEY` | 您的 VirusTotal API 密钥 | | `VT_ENABLED` | 设置为 `true` 以启用威胁查询 | | `ELASTIC_PASSWORD` | Kibana 登录密码 | | `ELASTICSEARCH_PASSWORD` | Elasticsearch 内部密码 | 要禁用 VirusTotal(离线/物理隔离模式),请设置 `VT_ENABLED=false`。Agent 将在没有任何 API 调用的情况下继续监控和记录日志。 ⚠️ `docker-compose.yml` 中的 Kibana 加密密钥仅适用于 本地/实验室环境使用。在任何生产部署中,请将其替换为随机 32 个字符以上的字符串。 ## 📄 许可证 MIT License — 详情请参阅 [LICENSE](LICENSE)。
标签:Docker, ELK技术栈, Python, 内容过滤, 威胁情报, 安全运营, 安全防御评估, 开发者工具, 扫描框架, 无后门, 版权保护, 越狱测试, 逆向工具