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 沙箱, 危险评分, 启发式扫描, 命令与控制检测, 威胁情报, 子域名变形, 安全取证, 安全培训, 安全工作流, 开发者工具, 态势感知, 恶意软件分析, 指标提取, 本地沙箱, 样本分析, 网络安全, 网络安全审计, 网络流量分析, 自动化分析, 请求拦截, 调试辅助, 跨站脚本, 逆向工具, 防御规避检测, 隐私保护