YDSantos12/blast-radius
GitHub: YDSantos12/blast-radius
BLAST-RADIUS是一款后渗透取证工具,用于分析开发工作站的安全风险。
Stars: 2 | Forks: 2
# BLAST-RADIUS
针对受损开发工作站的凭据清单与撤销计划。
凌晨 3 点,当开发者执行了一个恶意的 npm 包或安装了受损的 VS Code 扩展时,在任何警报触发之前,主机就已经被攻陷了。EDR 会记录下它执行了什么——进程、hash、命令行。但没有一个能提供分析师真正需要的信息:用户拥有哪些凭据,每项凭据在外部能解锁什么,以及应该按什么顺序撤销。分析师通常需要花费 2 到 6 个小时手动重建这个清单,而与此同时 token 却依然有效。
## 它的功能
collector 会枚举受损用户可访问的每一项凭据——它是什么、在哪里、能解锁什么。engine 会生成 Burn List:一份按优先级排序的 HTML 报告,包含每项凭据的确切撤销步骤,此外如果该机器已成为新一轮攻击的源头,它还能检测到攻击的横向传播。
清单涵盖:
- npm token
- GitHub PAT 和 OAuth token
- SSH 私钥
- AWS IAM 凭据
- Azure 和 GCP token
- PyPI token
- Docker registry 凭据
- VS Code 扩展密钥 (state.vscdb)
- 环境变量
- Windows Credential Manager
- 嵌入了 token 的 git 仓库远程 URL
## Burn List
Burn List 是 engine 的输出——一个可以在任何浏览器中打开的 HTML 文件,无需依赖互联网连接。每项凭据都会被归入以下四个级别之一,并按紧急程度排序。
- **立即撤销** — 高权限凭据,需在继续调查前撤销:GitHub PAT、具有活动连接且无 passphrase 的 SSH 密钥、长期的 AWS IAM 密钥、具有发布权限的 npm token。
- **轮换** — 中等权限。在同一 IR 会话中进行轮换。
- **审计** — 在事件时间窗口内,检查相关的仓库和 pipeline 是否有未经授权的更改。
- **监控** — 低风险,或者在 v0.1 版本中无法解析出外部权限。
如果该机器发布了包、注册了 GitHub Actions 的 self-hosted runner、注入了 workflow 文件,或者创建了用于数据外传的仓库——报告会在单独的章节中将其标记出来。每一项事件都包含严重程度和所需采取的操作。这一点至关重要,因为受损的机器可能就是下一波攻击的源头。
BLAST-RADIUS 不会试图证明数据发生了外传。它采用 Zero Trust (NIST SP 800-207) 的“ assume-breach ”(假设已沦陷)原则:受损用户进程可访问的所有内容都将被视为已暴露。优先级的撤销策略与 NIST SP 800-61 (Incident Response) 的遏制阶段保持一致。
## 用法
### 收集(在受损机器上)
将二进制文件传输到已隔离的主机。以受损用户的身份执行——**不要**以 SYSTEM 或管理员身份运行。凭据存储的作用域仅限于用户;以 SYSTEM 身份运行会导致收集不完整。
`-window` 标志接收 ISO 8601 UTC 格式的事件窗口开始时间戳。如果省略,默认值为 24 小时前——在开始之前,请根据真实的事件发生时间进行更正。
```
# Windows
.\blast-radius-collector-windows-amd64.exe -verbose -window 2026-06-01T03:00:00Z
```
```
# macOS (v0.2)
./blast-radius-collector-darwin-amd64 -verbose -window 2026-06-01T03:00:00Z
```
通过加密通道将 `collection--.json` 文件传输到分析师的机器上。该文件以明文形式包含所有环境变量。嵌入了 token 的 git 仓库远程 URL(`https://TOKEN@github.com/...`)同样会在不做脱敏处理的情况下保存,以便 engine 提取出 token。
### 分析(在分析师的机器上)
```
pip install -r engine/requirements.txt
cd engine
python main.py analyze ../path/to/collection.json
```
要覆盖在收集阶段定义的事件时间窗口:
```
python main.py analyze ../path/to/collection.json \
--window-start 2026-06-01T03:00:00Z
```
结果将生成为当前目录下的 `burnlist--.html`。
## 部署
**物理访问。** 使用存有二进制文件的 U 盘。在受损机器上以受损用户的身份本地执行。
**EDR Live Response。** 大多数企业级 EDR 可以通过 agent 通道远程执行二进制文件:CrowdStrike RTR、Microsoft Defender Live Response、SentinelOne RSO、Kaspersky Execution Task。上传二进制文件,以用户身份执行,再通过同一通道取回 JSON。在执行之前,请将二进制文件的 hash 添加到 EDR 的排除项中——凭据枚举会触发行为检测。
**WinRM / SSH。** 如果主机尚未被隔离且远程管理可用,可通过 `Invoke-Command` 或 `ssh` 进行复制和执行。
每次收集都会包含 `meta.collector_hash`——即执行文件的 SHA-256 hash。在信任该收集结果之前,请将其与 release 中发布的 hash 进行比对验证。
## 编译
要从源代码编译:
### Collector (Go 1.22+)
```
git clone https://github.com/YDSantos12/blast-radius
cd blast-radius/collector
go mod tidy
```
```
# Windows
$env:GOOS="windows"; $env:GOARCH="amd64"
go build -ldflags="-s -w" -trimpath `
-o dist/blast-radius-collector-windows-amd64.exe ./cmd/collector
```
```
# macOS (Intel)
GOOS=darwin GOARCH=amd64 \
go build -ldflags="-s -w" -trimpath \
-o dist/blast-radius-collector-darwin-amd64 ./cmd/collector
# macOS (Apple Silicon)
GOOS=darwin GOARCH=arm64 \
go build -ldflags="-s -w" -trimpath \
-o dist/blast-radius-collector-darwin-arm64 ./cmd/collector
```
### Engine (Python 3.10+)
```
cd engine
pip install -r requirements.txt
python main.py analyze --help
```
## 限制
**收集过程无法证明数据外传。** BLAST-RADIUS 假设用户可访问的所有内容都已被读取。在没有文件读取 (file-read) 遥测技术(Sysmon 的默认配置不捕获此类数据)的 Windows 环境下,证明特定文件被特定进程读取是不可能的。这种“ assume-breach ”姿态采用了 Zero Trust (NIST SP 800-207) 原则,并与 NIST SP 800-61 (Incident Response) 的遏制阶段保持一致。
**在 v0.1 版本中未实现在线权限解析。** collector 不会保留原始的 token 值——脱敏后的值无法用于调用 GitHub 或 npm 的 API。GitHub token 会被默认归入“立即撤销”级别,无论其实际作用域如何。在线解析功能计划在 v0.2 版本中推出。
**collection.json 的信任边界。** engine 会完全信任接收到的 collection.json。如果文件中被篡改了 `context` 字段——例如在没有 passphrase 的 SSH 密钥中填入了 `has_passphrase: true`——将直接影响级别的分配。在正规的 IR 流程中,这不会造成问题。但如果对收集结果的真实性存疑,请独立核实高价值凭据。
**Windows Credential Manager 与浏览器凭据。** 受 DPAPI 保护的凭据需要用户的会话才能解密。collector 会记录其存在,但在没有解密密钥的情况下不会读取其值。这些存储区需要进行手动检查。
**macOS 支持将在 v0.2 版本中推出。** collector 可以编译为 darwin 版本,但 macOS 特有的路径——Keychain 和 VS Code 原生存储——在 v0.1 版本中尚未实现。
## 背景
2025 年 11 月,Shai-Hulud 2.0 蠕虫通过 `postinstall` 脚本感染了 npm 包,这些脚本会在开发者的主目录下执行 TruffleHog。找到的密钥随后被外传到名为“Sha1-Hulud: The Second Coming”的公开仓库中。随后,该主机会被注册为名为 SHA1HULUD 的 GitHub Actions self-hosted runner。BLAST-RADIUS 可以检测到 runner 痕迹、外传仓库的命名模式以及 TruffleHog 缓存的存在。
在 2025 年至 2026 年期间,GlassWorm 蠕虫通过 VS Code 扩展进行传播。不可见的 Unicode 字符隐藏了一个第二阶段的 loader。其 C2 通信通过 Solana 区块链和 Google Calendar 进行。它通过 Windows 的 Run 键实现持久化。BLAST-RADIUS 会对 VS Code 扩展的状态以及 Run 键的修改进行盘点记录。
## 截图
**正在受损机器上运行的 collector(已隔离的虚拟机,无网络连接)**

**完整的收集输出——模块、敏感数据警告及 JSON 路径**

**Burn List——包含收集元数据的文件头以及检测到传播的横幅**

**传播章节——识别出 SHA1HULUD runner 并关联至 Shai-Hulud 2.0**

**立即撤销级别的凭据——解析出权限的 npm token、AWS IAM 和 SSH 密钥**

MIT
BLAST-RADIUS 是一款取证辅助工具,而非法律仪器。Burn List 中的级别代表了在 Zero Trust (NIST SP 800-207) 的“ assume-breach ”原则下、应用于 NIST SP 800-61 (Incident Response) 遏制阶段时所作出的操作风险评估——它们不能作为发生受损或数据外传的证据。撤销决策应由分析师和 incident commander 负责。请勿在未经授权的主机上执行 collector。
标签:EVTX分析, StruQ, 事件响应, 凭据管理, 凭证收集, 安全, 库, 应急响应, 数字取证, 自动化脚本, 超时处理