关于 analyzing-indicators-of-compromise
面向安全分析师的 IOC 分析技能,提供从分类、跨来源情报丰富到置信度评估和记录的流程。强调多来源核验与分析师判断,不应单独用于高风险拦截决策。
主要功能
- 01IOC 分类与安全去武器化
- 02VirusTotal 等多源情报丰富
- 03MISP 活动关联与基础设施分析
- 04分级置信度和处置建议
- 05记录调查结果并导出 STIX
适用场景
- 01快速分诊钓鱼邮件或告警中的 IOC
- 02摄取前评估批量情报源指标
- 03为事件调查补充网络指标上下文
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill analyzing-indicators-of-compromise安装后在 Claude Code 中输入/analyzing-indicators-of-compromise确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
分析失陷指标
适用场景
在以下情况下使用此技能:
- 钓鱼邮件或警报产生了需要快速分诊的 IOC(URL、IP 地址、文件哈希)
- 自动化情报源提供了大量 IOC,需要在导入拦截控制措施前进行置信度评分
- 事件调查需要对观察到的网络痕迹进行上下文丰富
不要单独使用此技能来做高风险拦截决策——务必将自动化丰富与分析师判断结合起来,尤其是在涉及共享基础设施(CDN、云服务提供商)时。
前提条件
- VirusTotal API 密钥(免费版或 Enterprise),用于多款杀毒引擎和沙箱查询
- AbuseIPDB API 密钥,用于 IP 信誉检查
- MISP 实例或 TIP,用于与已知攻击活动交叉比对
- 安装了
requests和vt-py库的 Python,或带有预置连接器的 SOAR 平台
工作流
步骤 1:规范化并分类 IOC 类型
在进行丰富之前,对每个 IOC 进行分类:
- IPv4/IPv6 地址:检查是否为 RFC 1918 私有地址(跳过外部丰富),验证格式
- 域名/FQDN:为安全处理而进行去武装(
evil[.]com),通过 tldextract 提取注册域名 - URL:分别提取域名和路径;检查是否为重定向器
- 文件哈希:识别哈希类型(MD5/SHA-1/SHA-256);优先使用 SHA-256 以确保唯一性
- 电子邮件地址:拆分为域名(检查 MX/DMARC)和本地部分,以便进行模式分析
在文档中对 IOC 进行去武装(将 . 替换为 [.],将 :// 替换为 [://]),以防意外点击。
步骤 2:多源丰富
VirusTotal(文件哈希、URL、IP、域名):
import vt
client = vt.Client("YOUR_VT_API_KEY")
# File hash lookup
file_obj = client.get_object(f"/files/{sha256_hash}")
detections = file_obj.last_analysis_stats
print(f"Malicious: {detections['malicious']}/{sum(detections.values())}")
# Domain analysis
domain_obj = client.get_object(f"/domains/{domain}")
print(domain_obj.last_analysis_stats)
print(domain_obj.reputation)
client.close()
AbuseIPDB(IP 地址):
import requests
response = requests.get(
"https://api.abuseipdb.com/api/v2/check",
headers={"Key": "YOUR_KEY", "Accept": "application/json"},
params={"ipAddress": "1.2.3.4", "maxAgeInDays": 90}
)
data = response.json()["data"]
print(f"Confidence: {data['abuseConfidenceScore']}%, Reports: {data['totalReports']}")
MalwareBazaar(文件哈希):
response = requests.post(
"https://mb-api.abuse.ch/api/v1/",
data={"query": "get_info", "hash": sha256_hash}
)
result = response.json()
if result["query_status"] == "ok":
print(result["data"][0]["tags"], result["data"][0]["signature"])
步骤 3:通过攻击活动归因提供上下文
查询 MISP,查找与该 IOC 匹配的现有事件:
from pymisp import PyMISP
misp = PyMISP("https://misp.example.com", "API_KEY")
results = misp.search(value="evil-domain.com", type_attribute="domain")
for event in results:
print(event["Event"]["info"], event["Event"]["threat_level_id"])
检查 Shodan 中的 IP 上下文(托管服务提供商、开放端口、横幅信息),以判断该 IP 是否属于防弹托管服务或合法云服务提供商(存在误报风险)。
步骤 4:分配置信度评分和处置方式
应用分级决策框架:
- 拦截(高置信度 ≥ 70%):VT 上 ≥15 个杀毒引擎检出,AbuseIPDB 评分 ≥70,匹配已知恶意软件家族或攻击活动
- 监控/警报(中等置信度 40–69%):5–14 个杀毒引擎检出,AbuseIPDB 评分中等,未归因到攻击活动
- 列入白名单/调查(低置信度 <40%):≤4 个杀毒引擎检出,没有滥用报告,属于合法服务(Google、Cloudflare CDN IP)
- 误报:合法业务服务被错误标记;记录并从未来的警报中排除
步骤 5:记录并分发
在 TIP/MISP 中记录调查结果,包括:
- 收集到的所有丰富数据(时间戳、来源、评分)
- 处置决定及理由
- 已采取的拦截措施(防火墙、代理、DNS 黑洞)
- 相关事件工单编号
导出为 STIX 指标对象,并适当设置置信度字段。
核心概念
| 术语 | 定义 |
|---|---|
| IOC | 失陷指标——表明可能发生失陷的可观察网络或主机痕迹 |
| 丰富 | 从多个情报来源为原始 IOC 添加上下文数据的过程 |
| 去武装 | 修改 IOC(将 . 替换为 [.]),以防在文档中意外触发 |
| 误报率 | 被错误标记为恶意的良性痕迹所占百分比;对调整拦截阈值至关重要 |
| 黑洞 | 将恶意域名查询重定向到良性 IP 的 DNS 服务器,以便在不完全拦截流量的情况下进行检测 |
| TTL | IOC 在拦截控制措施中的生存时间;IP 指标应在 30 天后过期,域名应在 90 天后过期 |
工具与系统
- VirusTotal:多引擎恶意软件扫描和威胁情报平台,集成了 70 多个 AV 引擎、沙箱报告和社区评论
- AbuseIPDB:由社区维护的 IP 信誉数据库,提供 90 天的滥用报告历史记录
- MalwareBazaar (abuse.ch):免费的恶意软件哈希库,包含 YARA 规则关联和恶意软件家族标签
- URLScan.io:免费的 URL 分析服务,可捕获屏幕截图、DOM 和网络请求,用于钓鱼 URL 分析
- Shodan:提供全互联网扫描数据,包括托管服务提供商、开放端口和横幅信息,用于丰富 IP 信息
常见误区
- 封禁共享基础设施:CDN IP(Cloudflare 104.21.x.x、AWS CloudFront)可能合法托管恶意内容,但封禁该 IP 会影响数千个合法网站。
- 过度执着于 VT 评分:VT 检测数较低并不代表无害——零日恶意软件和定制 APT 工具起初的评分通常为 0。请检查沙箱行为、MISP 和被动 DNS。
- 未对 IOC 进行去武器化处理:在电子邮件或 Confluence 文档中粘贴有效 IOC,可能触发自动 URL 扫描器或钓鱼工具。
- 没有过期策略:没有 TTL 的 IOC 会无限期积累在阻止列表中;当基础设施被合法用户重新利用时,会产生误报。
- 过度依赖单一来源:VirusTotal 汇总了 AV 的判断,但这些判断可能全都错误,或滞后于新出现的恶意软件。对于高风险决策,请使用 3 个以上的独立来源。
评论
支持 Markdown