Shaharmayster/Local-Malware-Analysis-Sandbox

GitHub: Shaharmayster/Local-Malware-Analysis-Sandbox

一个面向培训演示的本地恶意软件分析工作台,提供Docker隔离执行、会话管理、IOC提取、ATT&CK映射和完整分析师工作流功能。

Stars: 0 | Forks: 0

# 本地恶意软件分析沙箱 本地恶意软件分析沙箱是一个本地优先的分析师工作台,用于在 Docker 中运行安全的演示样本、收集遥测数据,并将结果作为完整的分析会话进行审查。它专为培训、原型设计和工作流演示而设计,让你在不构建完整引爆实验室的情况下,也能获得小型恶意软件分析控制台的体验。 该应用程序结合了 Flask UI、Docker 隔离的执行流程、会话存储、启发式评分、ATT&CK 映射、分析师注释和可导出的证据包。每次运行都会成为一个独立的会话,可以作为静态快照被重访、比较、基线化、搜索和共享。 ## 为什么开发这个项目 大多数轻量级恶意软件分析演示仅停留在“运行样本并打印一些输出”这一步。本项目则更进一步,模拟了周围的分析师工作流程: - 收集实时的进程、网络、文件和输出遥测数据 - 将每次运行保留为可重放的历史会话 - 从记录的活动中提取妥协指标 - 使用可编辑的规则对行为进行评分 - 将匹配的行为映射到 MITRE ATT&CK - 随时间比较运行情况并检测与基线的偏差 - 允许分析师附加备注、判定、标签和收藏 - 将证据打包成导出文件和静态快照 结果就是一个本地的分析师工作台,而不仅仅是一个单次运行的沙箱脚本。 ## 它的功能 ### 核心能力 - 运行安全的本地 `.py`、`.sh` 和 `.txt` 样本,支持可配置的超时和执行模式 - 在运行过程中将实时会话活动流式传输到工作台 - 记录文件更改、观察到的进程、出站网络活动、stdout 和 stderr - 提取 IOC,包括 URL、域名、IP、哈希、文件路径和进程命令 - 使用可编辑的启发式规则对记录的行为进行评分 - 将触发的规则和标签映射到 MITRE ATT&CK 技术 - 保存分析师备注、IOC 判定、标签、收藏和可重用的预设 - 构建特定于样本的或全局的基线,并检测会话之间的偏差 - 在评分、标签、文件、URL、进程和 ATT&CK 覆盖范围方面比较两个会话 - 跨标签、标签、指标、进程和文件搜索整个会话语料库 - 导出包、CSV、标准化 JSON 和静态 HTML 报告快照 ## 架构概览 ### 运行流程 ``` main.py -> ui/app.py -> Docker build / docker run -> sandbox/run.sh -> sandbox/analyze.py -> sandbox/runs//* ``` ### 高层组件 - `main.py` 启动应用程序,优先使用本地虚拟环境(如果可用),并在 `127.0.0.1` 上启动 Flask 服务器。 - `ui/app.py` 实现 Web UI、页面路由、JSON API、上传/启动/停止操作、安全标头、CSRF 保护和 Docker 编排。 - `ui/session_store.py` 负责会话持久化、样本管理、派生工件、评分、ATT&CK 映射、基线、警报、导出和搜索索引。 - `sandbox/run.sh` 在容器内启动分析器。 - `sandbox/analyze.py` 执行选定的样本,轮询进程和网络活动,捕获输出,计算文件更改,并编写原始分析摘要。 - `sandbox/Dockerfile` 定义用于隔离运行的本地沙箱镜像。 ## 用户界面指南 UI 被组织为一个分析师工作台,设有专门用于操作、审查、调整和历史分析的页面。 ### 工作台 主页是操作仪表板。 你在那里看到的: - 当前沙箱状态 - 用于启动新分析会话的启动表单 - 预设和执行模式控制 - 样本上传表单 - 当前或最近会话的实时时间线 - 最近会话的汇总指标 - 警报源和入门提示 - 进入报告和支持工作流的快速链接 典型用法: 1. 选择一个内置或上传的样本 2. 可选地应用预设或覆盖超时/模式 3. 启动分析 4. 在容器运行时观察实时时间线更新 ### 会话报告 会话报告是单次运行的中央调查视图。 它包括: - 严重性、评分、执行模式、超时和判定计数器 - 用于重放、包导出和快照下载的会话控制 - 用于加载与另一个会话差异的比较选择器 - 固定和标签管理 - 用于概览、时间线、回放、IOC、规则、工件、分析师备注和可选差异结果的选项卡视图 在报告中你可以: - 检查元数据和行为摘要 - 审查 ATT&CK 映射和匹配的规则 - 浏览提取的指标并记录 IOC 判定 - 预览会话中存储的工件 - 检查 stdout 和 stderr - 从会话创建基线 - 保存分析师备注和后续行动 ### 警报 警报页面聚合了本地数据集中的高信号会话。 警报生成自: - 高或严重严重性评分 - 基线偏差 - 已确认的 IOC 判定 每个警报都链接回原始会话报告。 ### 样本 样本页面是一个带有可重用配置文件的本地样本目录。 对于每个内置或上传的样本,你可以管理: - 描述 - 默认超时 - 默认执行模式 - 默认标签 - 链接的基线 这使得重复的演示运行保持一致,而无需每次重新输入运行选项。 ### 规则 规则页面是检测调整工作区。 它提供: - 直接编辑 `sandbox/rules.json` - 现有记录会话的评分预览 这对于在不改变历史会话数据的情况下迭代评分逻辑非常有用。 ### IOC 搜索 搜索页面查询由存储的运行构建的跨会话索引。 你可以搜索: - URL - 域名 - IP - 进程命令 - 标签 - 标签 - 哈希 - 文件路径 - 样本名称 结果直接链接回相关报告。 ### 比较 比较页面是两个记录会话的并排差异工作流。 它突出显示: - 评分差异 - 网络差异 - 更改的文件 - 添加和删除的标签 - 添加和删除的进程 - 添加和删除的 URL - ATT&CK 技术差异 它旨在用于回归分析、前后检查和面向基线的审查。 ## 分析生命周期 ### 启动运行 当运行开始时,应用程序: 1. 解析选定的样本及其配置文件默认值 2. 在 `sandbox/runs//` 下创建一个新的会话目录 3. 如果需要,构建 Docker 镜像 4. 使用选定的执行模式和超时启动容器 5. 将会话目录挂载为运行输出目标 ### 执行期间 在容器内,分析器: - 使用 Python 或 shell 入口点启动样本 - 轮询进程状态 - 轮询网络连接 - 捕获 stdout 和 stderr - 在执行前后对可写工作目录进行快照 - 计算文件更改增量 ### 执行后 应用程序派生并存储: - 提取的 IOC - 启发式评分和匹配的规则 - ATT&CK 映射 - 标准化导出数据 - CSV 导出 - 分析师附属文件 - 基线差异 - 快照 HTML - 搜索索引和警报状态 ## 会话存储模型 每个记录的运行存储在: `sandbox/runs//` 常见工件包括: - `metadata.json` 会话元数据,如样本标识、执行模式、超时、状态和时间戳。 - `events.jsonl` 分析期间捕获的原始按时间顺序排列的事件流。 - `summary.json` 包含文件更改、进程/网络总计和样本输出的执行摘要。 - `ioc.json` 提取的指标,如文件、哈希、URL、域名、IP 和进程命令。 - `score.json` 总分、严重性、匹配的规则、行为标签和 ATT&CK 技术。 - `notes.json` 分析师撰写的摘要、结论和后续步骤。 - `verdicts.json` 保存的 IOC 判定决定和评论。 - `explainability.json` 用于解释为何分配该评分的规则证据。 - `baseline_diff.json` 与适用基线的比较(如果存在)。 - `snapshot.html` 会话的静态独立 HTML 摘要。 - `artifacts/` 与运行相关的存储文件,包括复制的样本。 - `export/` 生成的导出文件,如标准化 JSON、CSV 和压缩的证据包。 全局状态存储在 `sandbox/state/` 下,包括: - 预设 - 基线 - 标签 - 收藏 - 警报 - ATT&CK 映射数据 - 搜索/会话索引状态 ## API 概述 项目为 UI 和本地自动化公开了 JSON 端点。 ### 状态和会话检索 - `GET /health` - `GET /api/current` - `GET /api/sessions` - `GET /api/sessions/` - `GET /api/sessions//events` - `GET /api/sessions//iocs` - `GET /api/sessions//score` ### 会话导出和工件 - `GET /api/sessions//export` - `GET /api/sessions//snapshot` - `GET /api/sessions//artifacts` ### 会话变更 - `POST /api/sessions//notes` - `POST /api/sessions//favorite` - `POST /api/sessions//labels` - `POST /api/sessions//verdicts` - `POST /api/sessions//replay` ### 分析和调整工作流 - `POST /upload` - `POST /start` - `POST /stop` - `GET/POST /api/baselines` - `GET/POST /api/rules` - `POST /api/rules/preview` - `GET/POST /api/presets` - `POST /api/samples//profile` ### 搜索、警报和比较 - `GET /api/search` - `GET /api/alerts` - `GET /api/samples` - `GET /api/sessions/compare` 所有更改状态的路由都受 CSRF 验证保护,以用于同源使用。 ## 仓库布局 ``` . ├── main.py ├── README.md ├── SECURITY.md ├── sandbox/ │ ├── .dockerignore │ ├── Dockerfile │ ├── analyze.py │ ├── run.sh │ ├── rules.json │ ├── runs/ │ │ └── .gitkeep │ ├── samples/ │ │ └── .gitkeep │ ├── logs/ │ │ └── .gitkeep │ ├── state/ │ │ └── .gitkeep │ └── sample_malware.py └── ui/ ├── app.py ├── session_store.py ├── requirements.txt ├── static/ │ └── style.css └── templates/ ├── alerts.html ├── compare.html ├── index.html ├── report.html ├── rules.html ├── samples.html └── search.html ``` ## 设置 ### 要求 - Python 3.8+ - Docker 及正在运行的本地守护进程 - `ui/requirements.txt` 中的依赖项 ### 安装依赖项 ``` .venv/bin/python -m pip install -r ui/requirements.txt ``` 如果你不想直接使用本地虚拟环境,`main.py` 在存在时仍会尝试优先使用它。 ### 配置本地应用密钥 在运行 UI 之前设置一个稳定的 Flask 密钥: ``` export FLASK_SECRET_KEY="replace-this-with-a-random-secret" ``` 在开发中,如果缺少此变量,应用将回退到临时密钥并打印警告。对于可重复的本地会话,请显式设置它。 ### 启动应用 ``` python3 main.py ``` 然后打开: `http://127.0.0.1:5000` 如果端口 `5000` 已被占用: ``` PORT=5050 python3 main.py ``` ### 可选环境变量 - `PORT` 覆盖监听端口。 - `MAX_CONTENT_LENGTH_MB` 设置 Flask 应用接受的最大上传大小。 - `SESSION_COOKIE_SECURE=1` 在本地通过 HTTPS 服务时将 session cookie 标记为安全。 - `APP_ENV=production` 要求显式的 `FLASK_SECRET_KEY` 并禁用开发回退。 ## 建议的工作流程 1. 启动应用并打开 Workbench 2. 选择内置样本或上传安全的演示样本 3. 选择超时、标签和执行模式 4. 启动分析并观察实时时间线 5. 打开生成的会话报告 6. 审查规则、ATT&CK 映射、工件和提取的 IOC 7. 保存备注、判定和标签 8. 创建基线或与另一个会话进行比较 9. 如果你需要便携式记录,请导出包或快照 ## 生成数据和仓库卫生 该仓库被有意配置为仅包含代码和文档。运行时数据在本地生成,不应提交。 忽略的运行时目录: - `sandbox/runs/` - `sandbox/state/` - `sandbox/samples/` - `sandbox/logs/` 忽略的本地工件还包括: - 虚拟环境 - Python 缓存目录 - 日志文件 - zip 导出 仓库仅在运行时目录中保留 `.gitkeep` 占位符,以便在不发布本地会话数据的情况下保留预期的结构。 ## 安全和安全说明 - 该应用默认为仅限本地,并绑定到 `127.0.0.1`。 - 本项目仅适用于安全的演示样本。 - 请勿使用此仓库运行真实的恶意软件。 - 容器隔离取决于本地 Docker 守护进程和主机配置。 - `network-disabled` 模式支持不应具有出站连接的运行。 - 会话工件、备注、判定和导出仅在本地主机操作假设下是可接受的。 实施发现和加固细节记录在 [SECURITY.md](SECURITY.md) 中。 ## 本项目不是什么 - 不是生产环境恶意软件引爆 - 不是具有身份验证和授权的多用户服务 - 不保证恶意样本的安全执行 - 不是加固沙箱产品的替代品 它是一个紧凑、可检查的本地工作台,用于安全分析演示和工作流探索。
标签:DAST, DNS 反向解析, DNS 解析, Docker 隔离, Flask UI, Homebrew安装, HTTP/HTTPS抓包, HTTP工具, IOC 提取, IP 地址批量处理, MITRE ATT&CK 映射, Python 沙箱, 危险评分, 启发式扫描, 命令与控制检测, 威胁情报, 子域名变形, 安全取证, 安全培训, 安全工作流, 开发者工具, 态势感知, 恶意软件分析, 指标提取, 本地沙箱, 样本分析, 网络安全, 网络安全审计, 网络流量分析, 自动化分析, 请求拦截, 调试辅助, 跨站脚本, 逆向工具, 防御规避检测, 隐私保护