Namanbhatt-01/VirusTotal_Scanner

GitHub: Namanbhatt-01/VirusTotal_Scanner

一款模块化的恶意文件扫描与威胁情报引擎,支持多源情报查询、进程关联分析,并通过 Slack 进行加密告警通知。

Stars: 0 | Forks: 0

# 🛡️ 企业级 VirusTotal 扫描器 **模块化威胁情报与操作系统关联引擎** [![Python 3.12](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/release/python-3120/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Author: Naman Bhatt](https://img.shields.io/badge/Author-Naman%20Bhatt-red)](https://github.com/Namanbhatt-01) VirusTotal Scanner 是一款高性能、模块化的安全工具,专为本地文件分类处理和进程关联而设计。与简单的脚本不同,本项目实现了生产级架构,用于监控文件系统、查询多源威胁情报 (TI),并通过企业级 Slack Webhooks 提供可操作的警报。 ## 🏗️ 架构概述 本项目遵循**模块化领域架构**,将扫描引擎与 API 集成及警报逻辑分离开来。 ``` graph TD A[main.py CLI] --> B[config/settings.py] B --> C[core/engine.py] subgraph "Data Pipeline" C --> D[utils/file_ops.py: SHA256] D --> E[core/cache.py: Encrypted Cache] end subgraph "Intelligence Sources" E --> F[integrations/virustotal.py] E --> G[integrations/malshare.py] E --> H[integrations/valhalla.py] end subgraph "Correlation & Response" C --> I[core/process.py: psutil] I --> J[notifiers/slack.py] end ``` ## 💎 安全工程亮点 本项目旨在展示高级安全工程能力: * **模块化扩展性:** 采用插件式架构构建。添加新的威胁情报源(如 CrowdStrike 或 AlienVault)无需对核心引擎进行任何更改。 * **加密的本地状态:** 扫描历史记录存储在 **AES-256 加密缓存** (`history.cache`) 中。这确保了恶意软件无法篡改扫描器的内存,也无法通过编辑本地历史记录来“加白”自身。 * **资源效率:** 为文件哈希实现了**分块二进制读取**。这使得扫描器能够在低资源系统(如 8GB 的 M1 Mac)上处理 20GB 以上的文件,而不会导致内存耗尽。 * **操作完整性:** 使用 **Pydantic** 对环境变量和 API payload 进行严格的类型验证,防止在自动化环境中发生常见的运行时故障。 * **操作系统关联:** 超越简单的哈希匹配,该工具将文件与活动的系统进程进行关联,识别恶意二进制文件当前是否正在内存中执行。 ## 🚀 部署与安装 ### 1. 前置条件 * Python 3.11+ * VirusTotal API Key (免费版) * Slack Incoming Webhook URL ### 2. 设置 ``` # 克隆并进入 repository git clone https://github.com/Namanbhatt-01/VirusTotal_Scanner.git cd VirusTotal_Scanner # 创建并激活 virtual environment python -m venv venv source venv/bin/activate # On Windows use: venv\Scripts\activate # 安装 dependencies pip install -r requirements.txt ``` ### 3. 配置 在根目录下创建一个 `.env` 文件: ``` VT_API_KEY=your_virustotal_api_key SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URL ``` ## 🛠️ 使用与演示 ### 基础扫描 扫描特定文件或目录: ``` python main.py -p ./downloads ``` ### 专业演示(“捕捉”恶意软件) 为了在面试期间演示该工具的有效性: 1. 在测试文件夹上启动扫描器:`python main.py -p ./scans` 2. 下载 [EICAR 测试文件](https://www.eicar.org/?page_id=3950)。 3. 将该文件移动到 `./scans` 中。 4. **结果:** 在你的 Slack 频道中观察即时的**恶意文件警报**。 ### CLI 参数与操作 扫描器支持多种高级标志以自定义其行为: | 标志 | 描述 | 默认值 | | :--- | :--- | :--- | | `-p`, `--paths` | 要监控的文件夹/文件列表 | 必填 | | `-i`, `--stop_interval` | 扫描周期之间的等待时间(分钟) | `0.0` | | `-f`, `--cycles` | 要运行的周期数(`0` 表示无限) | `0` | | `-w`, `--slack_webhook` | 覆盖 Slack Webhook URL | 来自 `.env` | | `--no_upload` | 跳过将未知文件上传至 VT | `True` | | `--debug` | 启用详细日志记录以进行故障排除 | `False` | **示例:生产环境监控** ``` python main.py -p /var/log /home/user/downloads -i 15 --cycles 0 ``` *此命令每隔 15 分钟无限期监控两个敏感目录。* ## 🧠 设计哲学:为什么选择这种架构? 安全脚本编写中一个常见的错误是编写“意大利面条式代码”(单个超长文件)。本项目采用**模块化设计模式**进行工程构建,具体原因有三个: 1. **关注点分离:** 引擎 (`core/`) 不关心数据从*哪里*来,也不关心警报*如何*发送。这允许你只需更改一个独立的文件,就能将 Slack 替换为 Microsoft Teams,或将 VirusTotal 替换为 CrowdStrike。 2. **弹性:** 如果 VirusTotal API 宕机,本地**加密缓存**和 **Valhalla/MalShare** 集成将继续提供价值。系统设计为能够优雅地失败。 3. **可测试性:** 每个模块(哈希、API、日志记录)都可以独立测试,这是任何用于真实 SOC 环境的工具的必要条件。 ## 🚀 未来路线图:下一步计划是什么? 本项目在不断发展中。计划中的未来增强功能包括: * **[ ] 自动隔离:** 自动将恶意文件移动到具有 `000` 权限的受限目录中。 * **[ ] YARA 集成:** 添加基于特征的扫描,以检测未知的恶意软件模式。 * **[ ] Web 仪表板:** 基于 Streamlit 的 UI,用于可视化全局扫描统计信息和威胁趋势。 * **[ ] SIEM 导出:** 原生集成 Splunk (HEC) 和 Wazuh (基于 Agent),适用于企业 SOC 环境。 ## 🕵️ 面试常见问题 (安全工程深入探讨) **问:为什么使用 SHA-256 而不是 MD5?** **问:你如何处理 API 速率限制?** **问:为什么对本地缓存使用 AES-256?它能防止篡改吗?** **问:你为什么选择平面文件而不是像 PostgreSQL 这样的数据库?** **问:如果扫描一个 50GB 的文件会发生什么?** ## 📚 参考与资源 * [VirusTotal API v3 文档](https://docs.virustotal.com/reference/overview) * [Slack Incoming Webhooks 指南](https://api.slack.com/messaging/webhooks) * [EICAR 标准反恶意软件测试文件](https://www.eicar.org/) * [Python Pydantic 文档](https://docs.pydantic.dev/latest/) ## 📊 技术栈 * **逻辑:** Python 3 (面向对象) * **验证:** Pydantic (类型安全) * **网络:** Requests (REST API 集成) * **操作系统/取证:** Psutil (进程关联) * **密码学:** PyCryptodome (AES-256) * **警报:** Slack Webhooks (企业级通知) ## 📄 许可证 本项目采用 MIT 许可证授权 - 详情请参阅 [LICENSE](LICENSE) 文件。 由 **Naman Bhatt** 使用 🛡️ 开发。
标签:AES-256加密, Ask搜索, DNS 反向解析, HTTP工具, MalShare, Python, SHA256, Slack通知, VirusTotal, 企业安全, 哈希校验, 威胁关联, 威胁情报, 子域名变形, 字符串匹配, 安全工程, 开发者工具, 恶意软件扫描, 插件架构, 文件分类, 无后门, 端点安全, 网络信息收集, 网络安全, 网络资产管理, 补丁管理, 进程关联, 隐私保护, 高级威胁防御