infosecbhanu/adversary-intel

GitHub: infosecbhanu/adversary-intel

一个独立的主动威胁情报平台,通过多层指纹识别和数据枢纽分析,在公开情报源之前追踪并构建对手 C2 基础设施图谱。

Stars: 1 | Forks: 0

# adversary-intel 用于主动追踪对手基础设施的独立威胁情报平台。 灵感来自 [ThreatSignal — Tracking Adversary Infrastructure: Beyond the IoC](https://www.threatsignal.in/post/tracking-adversary-infrastructure) 中的方法论。 与其被动地接收公开的威胁情报源,这个平台让你能够**生产**威胁情报——在任何公开情报源出现之前,构建出对手 C2 集群的内部基础设施图谱。 ## 架构 ``` adversary-intel/ ├── adversary_intel/ │ ├── core/ # Active fingerprinting (JARM, favicon, TLS, HTTP, pDNS) │ ├── scanning/ # Internet-wide scan pivots (Shodan, Censys, crt.sh) │ ├── intel/ # Enrichment (WHOIS, ASN, VirusTotal) │ ├── feeds/ # Threat feed integrations │ │ ├── anomali.py # Anomali ThreatStream (commercial) │ │ ├── misp.py # MISP (open source) │ │ ├── opencti.py # OpenCTI (open source) │ │ ├── otx.py # AlienVault OTX (free) │ │ ├── securitytrails.py # SecurityTrails pDNS + WHOIS pivot (free tier) │ │ └── abusech.py # MalwareBazaar, URLhaus, Feodo, ThreatFox, SSLBL (free) │ ├── graph/ # NetworkX infrastructure graph │ ├── detection/ # Sigma rule + Nuclei template generation │ ├── reporting/ # IOC export (JSON, CSV, MISP, STIX 2.1, TXT) │ ├── workflows/ # End-to-end C2 hunt workflow │ └── api/ # FastAPI REST API ├── output/ │ ├── hunts/ # Per-hunt session reports + IOC exports │ │ └── 45_142_212_31/ # Live hunt: vpnplus.ru operator cluster │ └── rules/ # Generated Sigma + Nuclei rules ├── templates/ │ ├── sigma/ # Built-in Sigma detection rules │ └── nuclei/ # Built-in Nuclei templates └── tests/ ``` ## 它的功能 ### 指纹识别 | 模块 | 技术 | 扩展追踪 | |--------|-----------|-------| | `core/jarm.py` | 主动 TLS 指纹识别(10 个探测 → 62 字符哈希) | Shodan/Censys 上的 `ssl.jarm:` | | `core/tls_cert.py` | X.509 证书提取(CN, SANs, serial, fingerprint) | Shodan 上的 `ssl.cert.fingerprint:` | | `core/favicon.py` | MurmurHash3 favicon 哈希 | Shodan/FOFA 上的 `http.favicon.hash:` | | `core/http_fp.py` | HTTP 响应指纹识别(headers, body hash, title) | 复合 Shodan 查询 | | `core/passive_dns.py` | pDNS 历史记录 + 批量激活检测 | Validin, SecurityTrails, VirusTotal | ### 情报 | 模块 | 来源 | 费用 | |--------|--------|------| | `intel/whois.py` | WHOIS + SecurityTrails 枢纽分析 | 提供免费层级 | | `intel/asn.py` | ASN/托管集群 + 无敌 ASN 标记 | 免费 (BGP.tools) | | `intel/virustotal.py` | VT 沙箱 C2 提取、JARM、pDNS、信誉度 | 免费层级 | | `scanning/crtsh.py` | 用于钓鱼基础设施的 CT 日志监控 | 免费 | ### 威胁情报源(无密钥情报源始终活跃) | 情报源 | 是否需要密钥 | 覆盖范围 | |------|-------------|--------| | MalwareBazaar | 否 | 恶意软件样本 + C2 配置 | | URLhaus | 否 | 恶意 URL | | Feodo Tracker | 否 | 僵尸网络 C2 IP(Emotet, QakBot, IcedID) | | ThreatFox | 否 | IOC 数据库 | | SSLBL | 否 | 恶意 TLS 证书黑名单 | | AlienVault OTX | 是(免费) | 社区威胁脉冲 | | VirusTotal | 是(免费) | 文件/IP/域名信誉度 | | Anomali ThreatStream | 是(商业) | 企业威胁情报 | | MISP | 是(自托管) | 共享平台 | | OpenCTI | 是(自托管) | STIX 2.1 CTI 平台 | ## 快速开始 ``` git clone https://github.com/YOUR_USERNAME/adversary-intel cd adversary-intel pip install -e ".[dev]" cp .env.example .env # 使用您的 API keys 编辑 .env(基本使用仅需 Shodan + VT) ``` ### CLI 用法 ``` # 从 seed IP 进行完整的端到端 hunt adversary-intel hunt 45.142.212.31 # 从 malware hash 进行 hunt(首先通过 VT sandbox 提取 C2) adversary-intel hunt abc123...sha256hash --seed-type hash # 对主机进行 JARM fingerprint adversary-intel jarm 45.142.212.31 # 分析 TLS certificate adversary-intel cert malicious-c2.example.com # Passive DNS 历史 + 批量激活 adversary-intel pdns 45.142.212.31 adversary-intel pdns evil-domain.com # WHOIS pivot adversary-intel whois evil-domain.com # 用于 Shodan pivot 的 Favicon hash adversary-intel favicon https://target.com # CT log 监控(在首次 phish 之前发现 phishing infra) adversary-intel ct-monitor targetorg.com # 检查所有 feeds 中的 indicator adversary-intel feeds check 45.142.212.31 adversary-intel feeds recent # 生成 Sigma rules adversary-intel sigma --jarm 07d14d16d21d21d00042d41d00041de5fb3038104f457d92ba02e9311512c2 adversary-intel sigma --ips "1.2.3.4,5.6.7.8" # 启动 REST API adversary-intel serve ``` ### REST API ``` adversary-intel serve # → http://localhost:8000/docs ``` 核心端点: ``` POST /jarm { "host": "45.142.212.31" } POST /cert { "host": "evil.com" } POST /favicon { "target": "https://evil.com" } POST /pdns { "query": "45.142.212.31" } POST /whois ?domain=evil.com POST /ct-monitor { "query": "%.targetorg.com" } POST /feeds/check { "indicator": "45.142.212.31" } POST /shodan/jarm ?jarm=07d14d... POST /sigma/jarm { "jarm": "07d14d...", "title": "Cobalt Strike" } POST /hunt { "seed": "45.142.212.31" } ← full async hunt GET /hunt/{job_id} ← poll for results ``` ### Python API ``` from adversary_intel.workflows.c2_hunt import C2Hunter from adversary_intel.models import NodeType hunter = C2Hunter(output_dir="./output") result = hunter.hunt("45.142.212.31", NodeType.IP) print(f"Nodes discovered: {result.nodes_discovered}") print(f"Previously unreported: {result.unreported_nodes}") print(f"JARM clusters: {result.jarm_clusters}") print(f"Sigma rules: {len(result.sigma_rules)}") ``` ## 狩猎方法论 此工具实现了 ThreatSignal 文章中的扩展追踪链: ``` Seed IP / Domain / Hash │ ├─ JARM fingerprint → "probably Cobalt Strike/Sliver" │ ├─ Shodan JARM pivot → 34 IPs sharing fingerprint │ └─ filter CDN ASNs → 19 candidates │ ├─ VirusTotal cross-ref → 6 known, 13 UNREPORTED │ ├─ TLS cert pivot → 11/19 share cert template │ └─ confirms single → deployment cluster │ ├─ Passive DNS → 9 domains activated same 48h window │ └─ batch activation → operator fingerprint │ ├─ WHOIS clustering → same registrar + nameserver pair │ └─ confirmed: → same operator as known campaign │ ├─ ASN analysis → bulletproof hosting flagged │ └─ Rule generation ├─ Sigma rules → SIEM detection └─ Nuclei templates → automated scanning ``` **输出:** 基础设施图谱(JSON/GEXF/HTML),Sigma 规则,Nuclei 模板。 在任何 IP 出现在公开情报源之前,所有 13 个未报告的 IP 都已加入检测。 ## API 密钥 | 平台 | 密钥 | 获取方式 | |----------|-----|--------| | Shodan | `SHODAN_API_KEY` | [shodan.io](https://shodan.io) — $49/月或免费开发者版 | | Censys | `CENSYS_API_ID` + `CENSYS_API_SECRET` | [censys.io](https://censys.io) — 免费研究员层级 | | VirusTotal | `VIRUSTOTAL_API_KEY` | [virustotal.com](https://virustotal.com) — 免费 4 次请求/分钟 | | OTX | `OTX_API_KEY` | [otx.alienvault.com](https://otx.alienvault.com) — 免费 | | SecurityTrails | `SECURITYTRAILS_API_KEY` | [securitytrails.com](https://securitytrails.com) — 免费层级 | | Validin | `VALIDIN_API_KEY` | [validin.com](https://validin.com) | | Anomali | `ANOMALI_USERNAME` + `ANOMALI_API_KEY` | [anomali.com](https://anomali.com) — 提供试用 | | MISP | `MISP_URL` + `MISP_KEY` | 自托管:[github.com/MISP/MISP](https://github.com/MISP/MISP) | | OpenCTI | `OPENCTI_URL` + `OPENCTI_TOKEN` | 自托管或 [filigran.io](https://filigran.io) | 无密钥情报源(始终活跃):MalwareBazaar, URLhaus, Feodo Tracker, ThreatFox, SSLBL, crt.sh ## 内置检测模板 ### Sigma 规则 (`templates/sigma/`) - `cobalt_strike_jarm.yml` — CS 默认 JARM 检测 - `ja3_c2_detection.yml` — 针对 CS/Sliver/Metasploit 的 JA3 指纹匹配 ### Nuclei 模板 (`templates/nuclei/`) - `cobalt_strike_multi_signal.yaml` — JARM + HTTP 404 模式(低误报率) - `sliver_c2_detection.yaml` — Sliver C2 JARM 检测 ## MITRE ATT&CK 覆盖范围 | 技术 | ID | 追踪方法 | |-----------|----|--------------------| | 通过 HTTP/S 的 C2 | T1071.001 | JARM + HTTP 响应指纹识别 | | 加密 C2 | T1573.002 | JA3/JA3S + TLS 证书分析 | | 获取基础设施 | T1583 | WHOIS 批量注册检测 | | 损害基础设施 | T1584 | pDNS 历史记录 + 激活集群 | | 动态解析 | T1568 | 被动 DNS 枢纽链 | | 协议隧道 | T1572 | JARM TLS 协议栈指纹识别 | ## 示例:实战狩猎 — 45.142.212.31(vpnplus.ru 操作者集群) ``` adversary-intel hunt 45.142.212.31 ``` **调查结果摘要**(狩猎 `HUNT-20260614-001`): | 指标 | 类型 | 置信度 | 备注 | |-----------|------|-----------|-------| | `45.142.212.31` | IP | 高 | 种子;Aeza Group AS210644;CN=invalid2.invalid;SNI 规避 | | `194.87.27.217` | IP | 高 | Timeweb CZ;被 MalwareURL + SOCRadar 标记 | | `77.73.132.40` | IP | 高 | Timeweb KZ;Yahoo 证书欺骗;rocshers.cloud, onypy.com | | `194.67.71.147` | IP | 中 | REG.RU RU;被 ESET 标记;Sliver JARM 前缀匹配 | | `vpnplus.ru` | 域名 | 高 | 10-IP 轮换集群;REGRU-RU / ns1.reg.ru 指纹 | | `panel.vpnplus.ru` | 域名 | 高 | OVH FR 上的 C2/VPN 管理面板 | | `tgbot.vpnplus.ru` | 域名 | 中 | 疑似 Telegram C2 频道 | | `80E5CABDF41B68E0BA718F4A1224EFA3` | 证书序列号 | 高 | CN=invalid2.invalid 自签名 | | `onypy.com` | 域名 | 中 | 在两个集群 IP 间共享 — 跨集群链接 | **操作者指纹:** - 注册商:**REGRU-RU**,域名服务器:**ns1.reg.ru / ns2.reg.ru** - 控制平面:**135.125.181.208** (OVH FR) — 托管所有 vpnplus.ru 面板/机器人子域名 + mantpartners.com - Telegram 机器人基础设施:`tgbot.vpnplus.ru`, `bot.vpnplus.ru` - 规避手段:端口 443 在明文 HTTP 上呈现 Google HTTP 重定向;TLS 层显示自签名 `invalid2.invalid` 证书(SNI 路由伪装) 完整的狩猎输出位于 `output/hunts/45_142_212_31/`:JSON 报告、CSV IOC 列表、MISP 事件、STIX 2.1 包、Sigma 规则、Nuclei 模板。 ### 报告 API ``` from adversary_intel.reporting import HuntReport, IOCExporter from pathlib import Path report = HuntReport( hunt_id="HUNT-001", seed="45.142.212.31", seed_type="ip", started_at="2026-06-14T00:00:00Z", cluster_name="vpnplus.ru Operator Cluster", ) report.add_ip("194.87.27.217", malicious=True, tags=["timeweb", "socradar"]) report.add_domain("vpnplus.ru", malicious=True, tags=["pivot-domain"]) report.add_cert_serial("80E5CABDF41B68E0BA718F4A1224EFA3", cn="invalid2.invalid") exporter = IOCExporter(report) paths = exporter.save_all(Path("./output/hunts/my_hunt")) # 写入:report.json, iocs.csv, iocs_malicious.txt, misp_event.json, stix_bundle.json ``` ## 测试 ``` pytest tests/ -v ``` ## 许可证 MIT
标签:AV绕过, FastAPI, GitHub, IP 地址批量处理, 图谱分析, 基础设施追踪, 威胁情报, 开发者工具, 攻击面测绘, 特征指纹, 特权检测, 网络测绘, 逆向工具