dst-port/illusion-MW-triage
GitHub: dst-port/illusion-MW-triage
轻量级恶意软件分诊沙箱,在隔离进程中动态运行样本并整合静态取证信号,输出映射到 MITRE ATT&CK 的评分判定结论。
Stars: 1 | Forks: 0
# Illusion 分类
轻量级恶意软件分诊沙箱。在隔离的进程中运行样本并收集动态与静态取证信息:释放的文件、网络连接、内存/核心转储、入口点代码片段、加壳/熵启发式分析、名称伪装检测、导入能力推断、归因哈希、文件 magic/提取以及可选的 YARA 匹配(文件 + 内存)。所有这些都将被整合为一个评分的、映射到 MITRE 的判定结论。
快速开始:
```
cargo test
cargo build --release
```
## 分析样本 (Linux)
```
RUST_LOG=info ./target/release/illusion_sandbox analyze ./samples/suspect \
--pcap --yara-rules /path/to/rules.yar
```
默认情况下,子进程会在 `firejail`(`--net=none --private`)下启动,并将报告写入 `runs/-/report.json`,同时包含 `stdout.txt`、`stderr.txt`、任何核心/内存转储以及捕获的流量。
`analyze` 选项:
- `--pcap` — 通过 `tcpdump` 进行尽力而为的数据包捕获(需要 `tcpdump` 和相应权限)。捕获是**可选的**:如果没有此标志,则不会执行捕获。
- `--yara-rules ` — 使用外部 `yara` CLI(或在使用 `--features yara` 构建时的 `yara` crate)扫描样本。规则会应用两次:一次针对磁盘上的文件(`evidence.yara_matches`),另一次针对捕获的内存/核心转储(`evidence.yara_memory_matches`),因此仅在运行时解包后才出现的签名依然能被捕获。
- `--output json` — 将完整的 `report.json` 打印到 stdout,而不是人类可读的摘要。
- `--out ` — 在分析后将运行目录重定位到 `` 下。
- `--test-mode` — 直接运行样本(无 `firejail`,无监控/转储线程)。适用于 CI 和自测。
- `--config ` — 从 TOML 配置文件加载运行选项(参见[配置](#configuration))。CLI 标志会覆盖文件中的设置。
## 监控目录
```
./target/release/illusion_sandbox watch ./inbox --poll-secs 5 --pcap \
--yara-rules /path/to/rules.yar
```
轮询 `inbox/` 以查找新文件,分析每个文件,并将处理后的文件移动到 `inbox/processed/`。`--pcap` 和 `--yara-rules` 会针对每个文件生效。
## 搜寻 / 隔离 (静态)
```
./target/release/illusion_sandbox hunt ./path1 ./path2 --quarantine \
--whitelist whitelist.toml
```
静态扫描文件/目录(加壳标记、熵、名称伪装、YARA),如果指定了 `--quarantine`,则会将可疑文件移动到 `quarantine/`。
JSON 报告会写入 `hunt_reports//hunt_report.json`。
## report.json 结构 (analyze / watch)
`report.json`(参见 `src/report.rs`)包含以下顶层字段:
- `schema_version` — 整数类型的报告模式版本(目前为 `1`),以便下游工具能够检测格式变化。
- `tool_version` — 生成该报告的分诊引擎的 crate 版本。
- `artifact` — 样本的 `name`、`sha256`。
- `verdict` — 评分后的判定结论(见下文)。
- `metrics` — 执行时间、跟踪的 PID 数量、瞬时释放文件数量。
- `evidence` — 收集到的所有信息:退出代码、stdout/stderr 代码片段、释放的文件、派生的进程、网络连接、核心/内存转储路径、入口点代码片段、`yara_matches` / `yara_memory_matches`、提取的 IOC,以及下文所述的全新 `capabilities`、`attribution` 和 `magic` 子报告。
这些取证字段(`capabilities`、`attribution`、`magic` 以及评分后的 `verdict`)仅由 `analyze`/`watch` 生成 — `hunt` 依然仅进行静态的加壳/熵/伪装/YARA 扫描,不会填充这些字段。
### 判定评分 (`src/verdict.rs`)
每个检测器都会报告一个具有固定*似然度*(即该信号单独出现时表明真实恶意程度的频率)的 `Signal`。引擎通过 noisy-OR 将一次运行中观察到的所有信号组合成单一的 `confidence`:
```
confidence = 1 - Π(1 - likelihood_i) over all signals i
```
因此,独立的弱信号会叠加成更强的判定结论,而不会因为任何单一信号限制得分。报告中的 `verdict` 包含:
- `status` — `"clean"`(干净)、`"suspicious"`(可疑)或 `"malicious"`(恶意)。
- `score` — 重新缩放至 0-100 的 `confidence`(四舍五入)。
- `confidence` — 原始的 0.0-1.0 noisy-OR 结果(保留 4 位小数)。
- `flags` — 简短的机器可解析令牌,每个信号一个(例如 `masquerade:artifact:bash:0.95`、`yara:Win32_Trojan`)。
- `reasons` — 每个信号一条记录:`signal`(标签)、`detail`(人类可读描述)、`likelihood`。
- `mitre` — 从每个贡献信号中提取的去重后的 MITRE ATT&CK 技术(`id`、`name`、`tactic`)。
阈值:`confidence >= 0.8` → `malicious`,`>= 0.2` → `suspicious`,否则为 `clean`。
识别的信号:内存/磁盘不匹配(运行时解包或注入)、样本/进程名称伪装成可信二进制文件、UPX/其他加壳标记、高文件熵、看似加壳的入口点、出站网络连接、YARA 匹配、字符串中的加密钱包 IOC、瞬时(先释放后删除)文件、导入的进程注入/反调试/键盘记录/持久化能力,以及内嵌(提取出的)可执行文件。
### 能力推断 (`src/capabilities.rs`)
提取导入的符号 — ELF 动态符号或 PE 导入表(通过 `goblin`) — 并将它们(不区分大小写,根据规则进行精确或子字符串匹配)与已知 API/libc 名称表进行匹配。匹配项会被分组到 `evidence.capabilities.capabilities` 中,每一项包含一个 `category`、人类可读的 `description`、触发它的 `matched_symbols` 以及映射到的 `mitre` 技术。识别的类别包括:`networking`、`crypto`、`process_injection`、`persistence`、`anti_debug`、`process_execution`、`dynamic_loading`、`keylogging`。`process_injection`、`anti_debug`、`keylogging` 和 `persistence` 还会直接输入到判定引擎中。
### 归因哈希 (`src/attribution.rs`)
`evidence.attribution` 始终包含模糊哈希,并且当样本是受支持的 PE/ELF 时,还会包含特定格式的哈希:
- `imphash` — 仅限 PE。基于按出现顺序排序的 `lowercased_dll.lowercased_function` 导入列表计算的 MD5 — 这与 VT 和大多数沙箱使用的构造方法相同,因此它应该与*针对按名称导入的*已发布 imphash 相匹配。仅有序号的导入会被哈希为 `ord`,因为不存在序号到名称的解析表,所以大量使用序号导入的样本将无法与 VT 的 imphash 完全匹配。
- `symhash` — 仅限 ELF。导入的动态符号名称列表经过排序、去重、小写化后计算的 MD5。
- `ssdeep` — 针对整个文件的上下文触发分段模糊哈希。
- `tlsh` — 针对整个文件的局部敏感模糊哈希(对于因过小或过于单一而无法构建 TLSH 的输入会省略)。
### 文件 magic 与提取 (`src/magic.rs`)
`evidence.magic` 通过其头部字节识别容器格式(`file_type` — `elf`、`pe`、`mz`、`macho`、`zip`、`pdf`、`gzip`、`7z`、`rar`、`png`、`cab`、`xz`、`script` 或 `unknown` — 已知情况下还会加上 `mime_hint`),然后:
- `embedded` — 通过对缓冲区的其余部分进行签名扫描(最多扫描 64 MiB,最多保留 64 个命中结果)发现的内嵌/提取文件:包含偏移量 + 上述相同格式集合的 `kind`。提取出的 `pe`/`elf` 会触发 `embedded_executable` 判定信号。
- `overlay` — 超出 PE(最后一个 section 的原始末尾)或 ELF(最后一个 section/segment 的末尾)结构末尾的尾部字节,当其超过 512 字节时,会报告为 `offset` + `size`。常见于附加的安装程序、自解压 payload 或垃圾填充。
## 配置
运行选项可以通过 TOML 文件提供,以替代或配合 CLI 标志使用。使用 `--config ` 传递;如果省略,则当工作目录中存在 `illusion.toml` 时会自动加载,否则应用内置默认值。CLI 标志优先于文件(布尔值会进行“或”运算,因此标志只能开启选项;`--yara-rules` 会覆盖文件中的值)。
```
test_mode = false
pcap = false
yara_rules = "/path/to/rules.yar"
timeout_secs = 30
max_output_bytes = 65536
```
请参阅 `illusion.example.toml`。所有键均为可选;缺失的键将回退到上述默认值。
## 打包
`scripts/package_release.sh` 会构建一个发行版,并将二进制文件归档到 `dist/` 中(Linux + 可选的 Windows GNU 交叉构建)。`dist/` 是生成的输出,不在 git 中跟踪。
```
./scripts/package_release.sh
```
## 特性 / 说明
- 通过外部 `yara` 二进制文件或 `yara` crate(`--features yara`)可选集成 YARA。规则路径通过 `YARA_RULES_PATH` 传递,并会针对文件和内存/核心转储进行扫描。
- 当设置了 `--pcap` 时,可使用 `tcpdump` 进行可选的 pcap 捕获。
- Windows 后端(`--features windows-backend`)添加了 Job object 生成器和 MiniDump/内存区域转储路径。
- 通过独立信号的 noisy-OR 组合,提供评分且映射到 MITRE ATT&CK 的判定结论(`src/verdict.rs`)。
- 能力推断(`src/capabilities.rs`)、归因哈希(`src/attribution.rs`:imphash/symhash/ssdeep/tlsh)以及文件 magic/提取(`src/magic.rs`)都会在 `analyze`/`watch` 时作为一部分自动运行,无需任何标志。
标签:DAST, Homebrew安装, Python安全, Rust, YARA, 云资产可视化, 可视化界面, 威胁情报, 安全, 开发者工具, 恶意软件分析, 沙箱, 网络信息收集, 网络流量审计, 超时处理, 通知系统