Zannu-Opeyemi/Malware-Static-Analysis-Sandbox

GitHub: Zannu-Opeyemi/Malware-Static-Analysis-Sandbox

一个纯静态、零执行的 Python 恶意软件分析学习沙箱,通过哈希、元数据、熵、字符串提取和受限 YARA 风格匹配为文件生成保守的风险分诊报告。

Stars: 0 | Forks: 0

# 恶意软件静态分析沙箱 一个防御性的 Python 沙箱,用于在不执行提交文件的情况下,检查文件元数据、哈希值、可读字符串、上下文指标以及受限的 YARA 风格字面量规则。 ## 项目概述 恶意软件静态分析沙箱提供了一个透明的学习工作流程: 1. 接收一个明确的本地文件。 2. 强制执行可配置的大小限制。 3. 仅以字节形式读取文件。 4. 计算 MD5、SHA-1 和 SHA-256。 5. 识别基本的文件签名和元数据。 6. 计算字节熵。 7. 提取有边界的可读 ASCII 和 UTF-16LE 字符串。 8. 检测上下文可疑关键词。 9. 应用受限的 YARA 风格字面量规则。 10. 计算保守的审查分数。 11. 导出 JSON 和 Markdown 报告。 内置的样本是无害的文本文件。 ## 静态分析说明 静态分析在不运行文件的情况下对其进行检查。 本项目可以揭示: - 加密标识符 - 文件大小和文件扩展名 - 基本的 magic-byte 签名 - MIME 猜测 - 熵 - 人类可读的字符串 - 需要分析师关注的关键词 - 字面量规则匹配 静态分析无法可靠地确定文件被执行后的所有行为。编码、压缩、加密、打包、动态加载或依赖环境的内容可能会保持隐藏状态。 ## 安全架构 ``` flowchart LR File["Explicit local file"] Limit["Size and existence validation"] Bytes["Read bytes only"] Static["Hashes / metadata / strings / literals"] Score["Heuristic review score"] Reports["JSON / Markdown"] File --> Limit Limit --> Bytes Bytes --> Static Static --> Score Score --> Reports Execute["Execution / import / subprocess / detonation"] Execute -. "Prohibited" .-> Bytes ``` 分析路径不会: - 执行文件 - 将其作为代码导入 - 启动子进程 - 调用 shell - 发起网络请求 - 解压归档文件 - 模拟指令 - 修改被分析的文件 ## 功能 - Python 3.11+ - MD5 计算 - SHA-1 计算 - SHA-256 计算 - 流式哈希读取 - 文件名、扩展名和大小元数据 - 基本的 magic-byte 文件类型 - MIME 类型猜测 - 熵计算 - 扩展名/签名不匹配检测 - 有边界的 ASCII 字符串提取 - 有边界的 UTF-16LE 字符串提取 - 上下文可疑关键词检测 - 受限的 YARA 风格字面量匹配器 - 保守的风险评分 - JSON 报告 - Markdown 报告 - 良性样本 - 文件大小安全限制 - 单元测试 - 架构、安全、法律、威胁模型和作品集文档 ## 项目结构 ``` malware-static-analysis-sandbox/ ├── sandbox/ │ ├── __init__.py │ ├── hashing.py │ ├── strings.py │ ├── file_metadata.py │ ├── yara_scan.py │ ├── risk_score.py │ └── report_generator.py ├── sample_files/ │ └── benign/ │ ├── sample.txt │ └── indicator_training.txt ├── rules/ │ └── sample_rules.yar ├── reports/ ├── tests/ ├── docs/ │ ├── architecture.md │ ├── legal-scope.md │ ├── safe-handling-guide.md │ ├── threat-model.md │ └── portfolio-writeup.md ├── README.md ├── requirements.txt ├── main.py ├── AGENTS.md └── .gitignore ``` ## 安装 ### 环境要求 - Python 3.11 或更高版本 - Git 克隆: ``` git clone https://github.com/YOUR-USERNAME/malware-static-analysis-sandbox.git cd malware-static-analysis-sandbox ``` Windows PowerShell: ``` python -m venv .venv .\.venv\Scripts\Activate.ps1 python -m pip install --upgrade pip python -m pip install -r requirements.txt ``` Linux 或 macOS: ``` python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install -r requirements.txt ``` 运行时环境使用 Python 标准库。Pytest 是开发依赖项。 ## 用法 ### 生成 JSON ``` python main.py analyze --file sample_files/benign/sample.txt --output reports/sample_report.json ``` ### 生成 Markdown ``` python main.py analyze --file sample_files/benign/sample.txt --markdown reports/sample_report.md ``` ### 生成两种格式 ``` python main.py analyze --file sample_files/benign/sample.txt --output reports/sample_report.json --markdown reports/sample_report.md ``` ### 演示上下文指标 ``` python main.py analyze --file sample_files/benign/indicator_training.txt --output reports/indicator_training_report.json --markdown reports/indicator_training_report.md ``` 该样本是无害的文本。它特意提及了一些审查关键词,以演示误报和上下文处理。 ### 禁用受限规则匹配 ``` python main.py analyze --file sample_files/benign/sample.txt --no-rules --output reports/no_rules.json ``` ### 调整安全限制 ``` python main.py analyze --file sample_files/benign/sample.txt --max-size-mb 10 --min-string-length 6 --max-strings 100 --output reports/custom.json ``` 默认最大文件大小为 25 MiB。 ## 报告字段 ### 文件元数据 - 文件名 - 扩展名 - 文件大小 - 检测到的文件类型 - MIME 猜测 - 熵 - 创建和修改时间戳 - 扩展名不匹配 ### 哈希值 - MD5 - SHA-1 - SHA-256 包含 MD5 和 SHA-1 是为了识别和互操作性。SHA-256 因其更强的完整性识别能力而成为首选。 ### 字符串 - 最小长度 - 最大报告数量 - 去重后的可读字符串 字符串会被截断并限定边界。它们不会被执行。 ### 可疑指标 检测器会寻找以下审查类别: - 命令解释器名称 - 签名二进制代理名称 - 选定的进程/内存 API 名称 - 网络 URL 标记 - 编码内容标记 - Office 自动运行标记名称 关键词的存在并不能证明其行为。 ### 受限的 YARA 风格匹配 内置的匹配器仅支持: - 带引号的字面量字符串 - `nocase` - `ascii` - `any of them` - `all of them` 它不支持: - 正则表达式 - 十六进制模式 - 模块 - 导入 - 回调 - 完整的 YARA 语义 对于生产环境的 YARA 使用,请在适当的实验室内单独安装并验证官方引擎。 ### 风险评估 评分会考虑: - 关键词类别的数量 - 字面量规则匹配的数量 - 扩展名不匹配 - 熵 - 可执行签名 该分数是一种分诊辅助工具,而不是恶意软件的最终判定。 ## 样本结果 普通的良性样本预计会: - 被识别为纯文本 - 匹配训练标记规则 - 产生较低的审查分数 - 不包含可疑关键词类别 指标训练样本预计会: - 保持为纯文本 - 匹配两条训练规则 - 显示上下文关键词指标 - 产生中等审查分数 - 保持明确的良性 ## 测试 ``` python -m pytest -q ``` 验证结果: ``` 9 passed ``` 测试验证: - MD5、SHA-1 和 SHA-256 - ASCII 和 UTF-16LE 字符串 - 关键词计数和注意事项 - 风险评分 - 受限规则匹配 - 拒绝不支持的规则功能 - 必需的报告部分 - 非执行策略字段 - 拒绝过大的文件 ## 截图占位符 捕获: | 截图 | 证据 | |---|---| | `01-cli-help.png` | 安全警告和 CLI | | `02-benign-analysis.png` | 良性样本分析 | | `03-hashes.png` | MD5、SHA-1 和 SHA-256 | | `04-metadata.png` | 文件类型、大小、熵和不匹配 | | `05-strings.png` | 有边界的可读字符串 | | `06-indicators.png` | 上下文关键词发现 | | `07-rule-matches.png` | 受限的训练规则 | | `08-risk-score.png` | 评分原因和注意事项 | | `09-markdown-report.png` | 完整的静态报告 | | `10-tests-passing.png` | 单元测试 | 在公开截图中仅使用内置的良性样本。 ## 法律和安全范围 仅在以下情况下使用本项目: - 内置的良性样本 - 您创建的文件 - 您获得明确授权进行分析的文件 - 为合法防御性教育提供的培训工件 不要: - 执行未知文件 - 分析非法材料 - 处理被盗文件 - 将私有文件上传到公共服务 - 分享未经脱敏的可疑样本 - 创建或修改恶意软件 请阅读 [docs/legal-scope.md](docs/legal-scope.md) 和 [docs/safe-handling-guide.md](docs/safe-handling-guide.md)。 ## 局限性 - 无动态分析 - 无执行或引爆 - 无反汇编 - 无 PE 导入表解析器 - 无归档文件提取 - 无文档宏解析器 - 无反混淆 - 无网络行为 - 仅支持受限的规则语法 - 熵和关键词可能会产生误报 - 低分不能证明安全 - 高分不能证明是恶意软件 - 不能替代经过认证的恶意软件分析实验室 ## 未来改进 - 添加无需执行的 PE/ELF 头安全解析 - 添加加密报告签名 - 添加确定性样本 ID - 添加在显式配置背后的可选官方 YARA 集成 - 添加导入和节元数据 - 添加仅限本地的报告查看器 - 添加特定文件类型的静态解析器 - 添加模糊测试 - 添加 CI 依赖项审查 未来的改进必须保留默认的非执行和无网络策略。 ## 作品集说明 本项目演示了: - Python 二进制文件处理 - 加密哈希 - Magic-byte 签名 - 熵 - 字符串提取 - 指标分诊 - YARA 规则概念 - 风险沟通 - JSON 和 Markdown 报告 - Pytest - 威胁建模 - 安全的恶意软件处理 使用 [docs/portfolio-writeup.md](docs/portfolio-writeup.md) 作为可直接展示的案例研究。 ## 免责声明 本项目用于防御性教育。它无法确定文件是安全的还是恶意的,并且绝不能作为执行未知文件的理由。
标签:DAST, DNS 反向解析, Python, YARA, 云安全监控, 云资产可视化, 恶意软件分析, 文件分析, 无后门, 逆向工具, 静态分析