Files
reverse-skills-max/vendor-new/rev-skills/.claude/skills/re-ti/references/commands.md

4.7 KiB
Raw Blame History

威胁情报 API 端点速查与操作序列

查询源分工:VirusTotal(检测/关联主源)、hybrid-analysis(沙箱报告 API)、MISP(组织内部匹配)、Any.run(网页报告库,API 以官方文档为准)。所有端点以官方文档为最终依据(VT: docs.virustotal.com;MISP: 实例自身 /events/restSearch 行为;HA: hybrid-analysis.com/docs/api/v2)。

端点速查

VirusTotal API v3(鉴权头 x-apikey)

用途 端点
通用搜索(hash/域名/IP/URL) GET https://www.virustotal.com/api/v3/search?query=<值>
文件检测对象 GET https://www.virustotal.com/api/v3/files/<sha256>
域名对象 GET https://www.virustotal.com/api/v3/domains/<domain>
IP 对象 GET https://www.virustotal.com/api/v3/ip_addresses/<ip>
关联图(家族/基础设施) GET https://www.virustotal.com/api/v3/files/<sha256>/graphs(复数 graphs,v2 的 /graph 已废弃)
文件关联对象 GET https://www.virustotal.com/api/v3/files/<sha256>/related
文件行为摘要 GET https://www.virustotal.com/api/v3/files/<sha256>/behaviour_summary

通用请求模板(所有 GET 共用):

curl -s --request GET --url "<端点>" -H "x-apikey: $VT_API_KEY" | jq '.data.attributes | {last_analysis_stats, names, tags, popular_threat_category}'

hybrid-analysis API v2(鉴权头 api-key,base https://hybrid-analysis.com/api/v2)

用途 端点
按 hash 查报告 `GET /search/hash?hash=<md5
概览 GET /overview/<sha256>
报告摘要 GET /report/<id>/summary
提交文件 POST /submit/file(multipart,需 default 及以上权限 key)
curl -s -H "api-key: $HA_API_KEY" "https://hybrid-analysis.com/api/v2/search/hash?hash=<sha256>" | jq '{sha256s, verdicts: [.reports[].verdict]}'

MISP(鉴权头 Authorization: <API_KEY>)

用途 端点
按属性值搜事件 POST /events/restSearch(body: {"returnFormat":"json","value":"<值>"})
按属性值搜属性 POST /attributes/restSearch(同样式)
按标签过滤 body 加 "tags": ["tag1", "!tag2"](! 排除)
限制条数 body 加 "limit": 20, "page": 1
curl -s --request POST "https://<misp>/events/restSearch" \
  -H "Authorization: <MISP_API_KEY>" -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  --data-binary '{"returnFormat":"json","value":"<sha256>"}' \
  | jq '.response[]?.Event | {info, date, orgc}'

jq 常用提取

# 检测统计(malicious 计数与厂商数)
jq '.data.attributes.last_analysis_stats | {malicious, suspicious, undetected}'
# 首次/最后出现时间与提交名
jq '.data.attributes | {first_submission_date, last_submission_date, names: .names[0:3]}'
# graph 节点类型分布(关联来源)
jq '.data[].type' | sort | uniq -c | sort -rn

常用操作序列

1. 样本 hash 背景查询(第一步必做)

本地重算 sha256(与情报值核对)→ VT /search?query=<sha256> → 检测数 + tags + 家族
→ 无结果 → hybrid-analysis /search/hash 与 Any.run 网页再查 → 仍无 → 标"未见记录"+ 查询时间

2. 域名/IP 基础设施关联

VT /domains/<域名> 看解析记录与历史检测 → /ip_addresses/<ip> 看托管关系
→ VT hash 页关联样本(同 C2/同签名)→ 域名反查关联域名/样本 → 结果进 [[re-ioc]] 基础设施图

3. 家族归因(多源一致才定性)

VT tags + popular_threat_category + graph 关联 → hybrid-analysis verdict 对照
→ 多厂商一致 + 行为证据([[re-behavior]])→ 家族结论;单厂商命名只做参考

4. MISP 内部匹配(组织历史事件)

POST /events/restSearch value=<hash|域名|IP> → 命中则取 event ID/日期/orgc
→ 引用事件编号作为内部证据;未命中不阻塞外部情报结论

实现教训(内化)

  • 查询值先本地核验:重算 sha256 再查,防"错 hash 查空"浪费时间
  • 一次请求取全字段:jq 一次提取多个 attributes,别为每个字段单独请求(配额)
  • 批量查询循环内加 sleep(如 15 秒)并记录每个查询时间戳——证据链要求"什么时间查到什么"
  • 网页与 API 结果一致才落结论:API 返回结构与网页展示字段存在差异,敏感结论两边对照

使用注意

  • 上传/查询前确认数据公开策略(私有样本先问归属,见 gotchas)
  • 动态执行(提交沙箱)在 re-sandbox 内(re-analyze/platform-tips 最高原则)
  • 情报入报告:IOC 列表 + 来源(报告编号/event ID)+ 查询时间(re-ioc 衔接)