SuchirBob/Malware-SandBox-Basic
GitHub: SuchirBob/Malware-SandBox-Basic
一个基于 Python 的终端工具,在隔离虚拟机中执行可执行样本并监控其进程、网络、文件和 DNS 等运行时行为,生成带有风险评估的简易分析报告,主要用于教育目的的恶意软件行为分析学习。
Stars: 0 | Forks: 0
# 基础恶意软件沙箱
一个简单的、基于终端的 Python 工具,用于观察单个可执行文件的基本运行时行为 —— 包括新进程、网络连接、文件创建以及(可选的)DNS 请求 —— 适用于教育和防御性安全分析。
## ⚠️ 安全第一 — 使用前必读
**只能在隔离的、一次性的虚拟机中运行此工具以及使用它分析的任何样本:**
- 使用一个 **没有共享文件夹**、**没有剪贴板共享**,最好是 **仅主机网络或完全隔离的网络** 的 VM(或者完全没有网络,除非你特别想在像 INetSim 这样的受控虚假互联网设置或实验室网络中观察 C2/网络行为)。
- 在 **运行任何样本之前对 VM 进行快照**,以便之后可以干净地还原。
- **切勿**在你的宿主机或你关心的网络上运行不受信任的可执行文件。
- 此工具包含一次尽力而为的检查,如果当前系统看起来不是已识别的 VM,它会警告你 —— 但该检查只是个便利提醒,并非安全保证。你有责任自行验证真实的隔离性。
此工具不执行逆向工程,不使用机器学习,除了你的 VM 环境提供的限制外,也不试图包含、沙箱化或限制样本的执行 —— 它是一个**监控/观察框架**,而不是一个隔离机制。
## 功能
- 提示输入可执行文件的路径
- 计算并显示其 SHA256 哈希值
- 对进程、网络连接以及(可选的)监视文件夹进行“运行前”快照
- 运行该可执行文件
- 监控一段可配置的持续时间(默认为 20 秒)
- 对比系统状态差异以显示:
- 新进程
- 新网络连接
- 在监视文件夹中创建的新文件
- 运行期间发出的 DNS 请求(可选,需要 `scapy` + 数据包捕获权限;如果不可用则会优雅降级)
- 显示带有简单启发式风险评估的摘要
- 将带有时间戳的文本报告保存到 `reports/`
## 文件夹结构
```
Basic-Malware-Sandbox/
├── main.py # Starts the analysis (entry point)
├── monitor.py # Process, network, file, and DNS monitoring
├── hash.py # SHA256 calculation
├── runner.py # Executes the sample
├── utils.py # Helper functions
├── samples/ # Put test executables here
├── reports/ # Saved analysis reports land here
├── requirements.txt
└── README.md
```
## 安装
在你的隔离分析 VM 中:
```
pip install -r requirements.txt
```
可选附加项(仅当你需要 DNS 监控时):
```
pip install scapy
```
通过 `scapy` 进行的 DNS 监控通常需要:
- Linux/macOS:`libpcap`,并且通常需要以 root 用户身份运行(或授予 Python 解释器 `cap_net_raw` 权限)
- Windows:安装了 [Npcap](https://npcap.com/),并以管理员身份运行
如果未安装 `scapy` 或嗅探权限不可用,该工具只会报告无 DNS 数据,而不会崩溃。
## 用法
```
python main.py
```
示例会话:
```
========================================
Basic Malware Sandbox
========================================
Enter executable path:
samples/sample.exe
Calculating SHA256...
SHA256:
9c5f2f0a9b...
Folder to watch for new files (press Enter to skip):
/home/test/tmp
Monitoring duration in seconds (default 20):
20
Taking system snapshot...
Running sample...
Monitoring for 20 seconds...
----------------------------
New Processes
----------------------------
sample.exe
cmd.exe
----------------------------
Network Connections
----------------------------
142.250.xx.xx:443
----------------------------
Files Created
----------------------------
temp123.tmp
----------------------------
DNS Requests
----------------------------
(none observed / not available)
==========================
Analysis Summary
==========================
Processes Created : 2
Network Connections : 1
Files Created : 1
DNS Requests : 0
Risk Level : Medium
==========================
Report saved:
reports/report_001.txt
Analysis Complete.
```
## 风险级别是如何计算的
这是一个刻意设计的**非常简单的启发式方法** —— 一个粗略的讨论点,而非最终结论:
```
score = (new processes × 1) + (new connections × 2)
+ (new files × 1) + (dns requests × 2)
score == 0 -> Low
score in 1..5 -> Medium
score > 5 -> High
```
请随意在 `main.py`(`calculate_risk_level`)中调整权重/阈值,以满足你自己的分析需求。
## 局限性
- 这是一个**基础**沙箱,旨在用于学习和轻量级的防御性分诊 —— 它不能替代 Cuckoo/CAPE Sandbox 等工具、真正的 EDR 或手动逆向工程。
- 进程/连接归因是基于差异的(运行前 vs. 运行后),因此根据时机的不同,在轮询期间的监控窗口内完全启动并关闭的非常短暂的进程或连接可能仍然会被遗漏。
- DNS 监控是可选的且属于尽力而为;它需要额外的软件包和操作系统级别的数据包捕获权限。
- 这里的文件监控使用简单的目录列表差异对比。要进行更稳健的、事件驱动的监控,请接入 `watchdog` 而不是轮询 `os.listdir()`。
标签:DAST, Python, 动态分析沙箱, 恶意软件分析, 无后门, 系统运维, 行为监控, 逆向工具