reverse-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
# 威胁情报 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 共用):
|
||||
|
||||
```sh
|
||||
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|sha1|sha256>`(返回 `{sha256s, reports[]}`,reports 含 verdict) |
|
||||
| 概览 | `GET /overview/<sha256>` |
|
||||
| 报告摘要 | `GET /report/<id>/summary` |
|
||||
| 提交文件 | `POST /submit/file`(multipart,需 default 及以上权限 key) |
|
||||
|
||||
```sh
|
||||
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` |
|
||||
|
||||
```sh
|
||||
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 常用提取
|
||||
|
||||
```sh
|
||||
# 检测统计(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]] 衔接)
|
||||
@@ -0,0 +1,37 @@
|
||||
# 威胁情报查询工具特有坑与边界
|
||||
|
||||
## 数据质量:无结果 ≠ 干净
|
||||
|
||||
- **私有/未收录样本查不到是常态**:VT 只有公开库——检测数 0 或 not found 只标"未见记录"并注明查询时间,用行为证据([[re-behavior]] / [[re-mem-forensics]])下结论
|
||||
- **hash 误报**:单厂商签名粒度粗,聚合统计不加权——"恶意"判定要求多厂商一致 + 家族标签 + 行为证据;改名/拼接样本的旧 hash 命中要核对内容(重算 sha256 比对)
|
||||
- **沙箱报告假阴性**:反沙箱样本在公开沙箱里休眠/走正常分支——报告"无恶意行为"不代表真实环境无行为;结合真实环境动态分析交叉验证
|
||||
|
||||
## 隐私与数据公开
|
||||
|
||||
- **上传即公开**:VT/Any.run/hybrid-analysis 的免费通道默认公开报告——内部/客户样本上传前确认归属与数据策略(VT 企业私有 API、脱敏后上传、或选 private 分析选项)
|
||||
- **查询也算数据暴露**:API 查询行为与 key 关联——批量查询内部基础设施前评估暴露面
|
||||
- 拿不准先问归属方,不做默认上传([[re-analyze/platform-tips]] 敏感数据处理原则)
|
||||
|
||||
## API 配额与限速
|
||||
|
||||
- **VT 免费 key**:有日配额与分钟限速,返回 403(无效/配额)与 429(限速)——脚本循环内 sleep(如 15 秒),聚合用 /search 少发请求,jq 只取所需字段
|
||||
- **hybrid-analysis**:restricted key 只能查不能提交/下载;`/search/hash` 返回体含当前限额(Api-Limits 头)——超额先等重置
|
||||
- **MISP**:配额取决于实例配置(无统一限速),但大结果集(不设 limit)会拖垮实例——查询带 `limit` + `page` 分页
|
||||
|
||||
## API 版本与端点漂移
|
||||
|
||||
- **VT v2 → v3**:v2 的 `/vtapi/v2/*` 与 `/graph` 路径已废弃;v3 统一 `/api/v3/`,鉴权头 `x-apikey`——旧脚本 404 先查端点是否 v3 化(如 graphs 复数)
|
||||
- **MISP 响应结构版本差异**:restSearch 响应从 `{"response": [...]}` 演变(老版本 `.response[0].Event` 直接对象、新版本数组包一层)——jq 用 `.response[]?.Event` 兼容展开;以实例实际返回为准
|
||||
- **hybrid-analysis**:`POST /search/hash` 已标记弃用(被 `GET /search/hash` 取代);`/report/summary` 弃用(用 `/report/<id>/summary`);`/report/{id}/dropped-files` 被 `-v2` 取代——按 v2.x 现文档写脚本
|
||||
- **Any.run**:API 端点与鉴权以官方文档(any.run/api-documentation)为准,不同套餐能力不同——脚本化前先核对
|
||||
|
||||
## 关联误判边界
|
||||
|
||||
- **graph/关联样本是启发式**:同 C2/同签名/同互斥体命中不代表同一家族——关联强度分级写报告(强=多属性一致,弱=单属性巧合)
|
||||
- **家族名口径不一**:不同厂商对同一家族命名不同——以多厂商一致名称为准,报告里注明判定依据
|
||||
- **时间漂移**:历史检测/解析记录会随时间变化(下架/改名)——结论记录查询时间,复查时重新拉取
|
||||
|
||||
## 使用注意
|
||||
|
||||
- 查询证据链:值 + 来源 + 查询时间戳逐条入档([[re-triage]] 惯例)
|
||||
- 外部情报是佐证不是结论:最终判定以本地静态/动态证据为准([[re-analyze/analysis-contract]])
|
||||
Reference in New Issue
Block a user