SkeinLLC/serpens-scout
GitHub: SkeinLLC/serpens-scout
一款将公开 APT 研究报告转化为可重复 IOC 研究流程的威胁情报工具,支持跨来源指标比对、被动 DNS 丰富和本地文件扫描。
Stars: 0 | Forks: 0
# Serpens Scout
Serpens Scout 将公开的 Unit 42 Screening Serpens 报告转化为一个可重复的研究 pipeline。它执行四项任务:
1. 获取 Unit 42 报告以及一份涵盖相同 2026 年活动的 Check Point 一手来源报告。
2. 对域名和 SHA-256 哈希进行标准化处理,然后报告存在于第二个来源但不在 Unit 42 中的 indicators。
3. 使用被动 DNS 和可选的 GitHub Code Search 来丰富结果,并测试 AppDomainManager 配置检测背后的误报假设。
4. 扫描本地文件和归档文件以查找具备特定值的 `.config` 组合,然后导出 JSON、defanged Markdown 和 STIX 2.1。
该工具绝不会连接到可疑的命令与控制系统、提交 URL 进行扫描、下载恶意软件或执行样本。代码中的网络访问仅限于已知的研究和供应商服务。
## 为什么开发此工具
第一个 Project Meridian 原型会生成查询,但故意不进行网络调用。它什么也发现不了。Serpens Scout 执行受限的被动收集,并保留以下各项之间的区别:
- 由 Unit 42 确认的 indicator;
- 由另一个一手来源添加的 indicator;
- 关于共享托管的 DNS 观测结果;以及
- 需要分析师审查的候选项。
生成报告中的“新”是指**相对于 Unit 42 IOC 列表的新增**。它并不意味着是新注册的、以前未知的,或是由 Skein LLC 独立归因的。
## 安装
```
git clone https://github.com/SkeinLLC/serpens-scout.git
Set-Location .\serpens-scout
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"
```
## 运行研究 pipeline
```
serpens-scout hunt --out research\latest
```
要添加采样的 GitHub 配置 baseline,请公开一个具有公共代码读取权限的 token。该 token 绝不会被写入输出中。
```
$env:GITHUB_TOKEN = gh auth token
serpens-scout hunt --out research\latest --github-limit 40
Remove-Item Env:\GITHUB_TOKEN
```
输出:
- `findings.md`:已对网络 indicators 进行 defang 处理的人工阅读报告。
- `findings.json`:包含操作值的机器可读证据。
- `serpens.stix.json`:用于 TIP 导入的 STIX 2.1 indicators。
- `github-baseline.json`:当 token 可用时的采样公共配置结果。
## 扫描目录或归档
```
serpens-scout scan C:\path\to\software --out scan.json
serpens-scout scan C:\path\to\delivery.zip --out archive-scan.json
```
归档读取器会限制嵌套深度、提取大小和压缩率。它不会将归档成员写入磁盘。
## 检测模型
AppDomainManager 是合法的 .NET 功能。仅匹配 tag 名称会产生大量噪音。Serpens Scout 会评估以下关键值:
- 自定义的 `appDomainManagerType` 和 assembly;
- 通过 `privatePath` 进行本地探测;
- `etwEnable enabled="false"`;
- `bypassTrustedAppStrongNames enabled="true"`;
- `publisherPolicy apply="no"`;以及
- `requiredRuntime safemode="true"`。
`rules/yara/` 中的 YARA 规则遵循相同的关注值的逻辑。公开的 GitHub 搜索显示,合法配置中包含多个具有安全值的 tag 名称,这就是为什么最初仅基于存在性的规则不适合部署的原因。
## 仓库结构
```
src/serpens_scout/ collector, scanner, STIX, and CLI
rules/ YARA, Sigma, and Defender XDR KQL
tests/ offline tests and safe fixtures
docs/methodology.md evidence model and research limits
docs/skein-tip.md STIX import notes
research/ dated, reproducible run receipts
```
## 来源与处理
- [Unit 42:追踪伊朗 APT Screening Serpens 的 2026 年间谍活动](https://unit42.paloaltonetworks.com/tracking-iran-apt-screening-serpens/)
- [Check Point Research:Fast and Furious - 伊朗冲突期间的 Nimbus Manticore 行动](https://research.checkpoint.com/2026/fast-and-furious-nimbus-manticore-operations-during-the-iranian-conflict/)
两个来源均为公开。叙述性输出为 TLP:CLEAR 并已进行 defang 处理。机器文件保留了公开的操作 indicators,以便检测和 STIX 模式保持可用。
## 状态
日期为 [2026 年 7 月 17 日的研究回执](research/2026-07-17/findings.md) 发现了 9 个明确的域名新增,对 Unit 42 中一个格式错误的域名的可能修正,以及 Check Point 的 IOC 集中 15 个 SHA-256 的新增。十个有效的差异域名中有八个返回了被动 DNS 答案。包含 40 个文件的公开 GitHub 样本没有产生可疑的值组合,尽管有三个文件包含合法的 AppDomainManager 上下文,还有一个不是有效的 XML。
在审查其来源和范围之前,请将每个跨源差异视为分析线索。共享的 Azure 地址是观测结果,而不是独立的恶意 IP indicators。
标签:IOC分析, IP 地址批量处理, Python, STIX, 威胁情报, 开发者工具, 无后门, 知识库安全, 网络信息收集, 被动探测, 逆向工具