Anthropic-Cybersecurity-Skills 实战:用 Python Agent 自动化恶意软件事件响应(API 参考与源码解析)

发布时间:2026/9/12 2:00:22
Anthropic-Cybersecurity-Skills 实战:用 Python Agent 自动化恶意软件事件响应(API 参考与源码解析) Anthropic-Cybersecurity-Skills 实战用 Python Agent 自动化恶意软件事件响应API 参考与源码解析【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills导读conducting-malware-incident-response 是 Anthropic-Cybersecurity-Skills 仓库中面向恶意软件事件响应场景的技能包。本篇文章围绕其配套的 API Reference: Malware Incident Response Agent完整讲解该 Agent 的依赖环境、CLI 用法、六大核心函数与外部 API 集成方式并结合仓库内 agent.py 的实现代码逐行剖析其底层原理。读完后你将掌握如何对恶意样本本地哈希、如何通过 VirusTotal/MalwareBazaar/ThreatFox 完成家族归因与 IOC 扩充、如何调用 CrowdStrike Falcon 隔离失陷终端以及如何将结果汇总为企业级事件响应报告。一、Agent 定位把事件响应工作流编排成代码从 api-reference.md 的 Overview 可以看到这个 Agent 的核心目标非常聚焦自动完成恶意软件事件的初步处置triage覆盖从样本取证到终端隔离的完整闭环对样本文件计算哈希hash查询 VirusTotal 与 MalwareBazaar 获取家族归因family attribution从 ThreatFox 拉取该家族关联的 IOCC2 IP、域名、URL通过 CrowdStrike 对失陷终端做网络隔离endpoint isolation生成事件响应报告IR report。这与 SKILL.md 中定义的六步工作流检测确认 → 影响面评估 → 遏制 → 分析 → 清除 → 恢复验证是一一对应的哈希与情报查询支撑Step 1 检测确认和Step 2 影响面评估CrowdStrike 隔离直接落地Step 3 遏制失陷系统报告生成则服务于后续的清除与恢复决策。也就是说这份 API Reference 描述的不是一个孤立的脚本而是把 SKILL.md 中人工步骤中可自动化的部分沉淀成了可重复执行、可被 AI Agent 直接调用的工具层。二、依赖与运行环境Agent 的外部依赖极简只有requests一个第三方包包名版本要求用途requests2.28与 VirusTotal、MalwareBazaar、ThreatFox、CrowdStrike 等 HTTP API 通信其余能力JSON 序列化、SHA-256/MD5 计算、参数解析、日志全部由 Python 标准库提供。在 agent.py 中可以看到其 import 结构import json import hashlib import logging import os import argparse from datetime import datetime import requests logging.basicConfig(levellogging.INFO, format%(asctime)s [%(levelname)s] %(message)s) logger logging.getLogger(__name__)运行前需确认 Python 环境满足requests2.28建议在专用虚拟环境中安装pip install requests2.28需要说明的是与 VirusTotal 通信必须有 API keyCrowdStrike 操作需要 Falcon 平台的 API token 与目标设备 IDMalwareBazaar 与 ThreatFox 的查询接口则无需认证。三、CLI 用法与参数说明文档给出的标准调用方式如下python agent.py --incident-id INC-001 --sample malware.exe --vt-key key \ --cs-token token --device-id id --output report.json从 agent.py 的argparse定义可以还原出完整参数表参数是否必填默认值说明--incident-id是—事件编号用于关联报告--sample否与--hash二选一—恶意样本文件路径提供时会对文件实时计算哈希--hash否与--sample二选一—直接传入已知的 SHA-256 哈希跳过本地哈希计算--vt-key否—VirusTotal API key缺失时跳过 VT 查询--cs-token否—CrowdStrike API token缺失时跳过隔离动作--device-id否—待隔离的 CrowdStrike 设备 ID--output否malware_ir_report.json报告输出文件路径调用链解析在 main() 中程序先根据--sample或--hash确定样本哈希随后按顺序执行 VirusTotal 查询、MalwareBazaar 查询、家族 IOCs 拉取仅当同时提供了--cs-token与--device-id时才执行终端隔离最后把全部结果汇总为 JSON 报告并写入--output指定文件。需要留意两个边界情形--sample与--hash都未提供时哈希为空情报查询全部跳过仅生成一份空壳报告当 MalwareBazaar 未能识别家族、VirusTotal 也无威胁标签时family为空字符串ThreatFox 的 IOC 检索会安全跳过见 agent.py。四、核心函数逐个解析4.1hash_file(file_path)— 本地样本取证该函数负责对恶意样本计算 SHA-256 与 MD5 双哈希是后续所有情报查询的入口。实现位于 agent.pydef hash_file(file_path): Compute SHA-256 and MD5 hashes of a file. sha256 hashlib.sha256() md5 hashlib.md5() with open(file_path, rb) as f: for chunk in iter(lambda: f.read(8192), b): sha256.update(chunk) md5.update(chunk) return {sha256: sha256.hexdigest(), md5: md5.hexdigest()}实现细节值得注意文件以8192 字节分块流式读取而不是一次性载入内存因此即便样本体积较大例如捆绑了合法安装器的巨型 dropper也不会耗尽内存同时分块方式保证两个哈希的增量计算完全一致。返回值结构为{sha256: ..., md5: ...}其中 SHA-256 是后续 VT/MalwareBazaar 查询使用的权威标识。4.2query_virustotal(file_hash, api_key)— VirusTotal v3 信誉查询该函数调用 VirusTotal v3 API 获取文件检测统计与威胁分类实现位于 agent.pydef query_virustotal(file_hash, api_key): Query VirusTotal for file hash reputation. url fhttps://www.virustotal.com/api/v3/files/{file_hash} headers {x-apikey: api_key} resp requests.get(url, headersheaders, timeout30) if resp.status_code 200: attrs resp.json()[data][attributes] stats attrs.get(last_analysis_stats, {}) result { hash: file_hash, malicious: stats.get(malicious, 0), undetected: stats.get(undetected, 0), total: sum(stats.values()), popular_threat_name: attrs.get(popular_threat_classification, {}).get(suggested_threat_label, ), type_description: attrs.get(type_description, ), first_seen: attrs.get(first_submission_date), tags: attrs.get(tags, []), } logger.info(VT: %s - %d/%d detections (%s), file_hash[:16], result[malicious], result[total], result[popular_threat_name]) return result return {hash: file_hash, error: resp.status_code}要点拆解鉴权方式请求头携带x-apikey值即 CLI 传入的--vt-key响应字段从last_analysis_stats提取malicious/undetected计数total为所有引擎判定结果之和即常见的 x/y engines 分母popular_threat_classification.suggested_threat_label提供社区通用威胁名是后续家族归因的重要候选type_description给出文件类型描述first_submission_date反映样本首次出现时间tags提供行为标签错误处理非 200 状态码时返回{hash: ..., error: status_code}避免异常中断主流程日志日志中只截取哈希前 16 个字符兼顾可读性与信息冗余度。4.3query_malwarebazaar(file_hash)— MalwareBazaar 家族归因MalwareBazaar 是 abuse.ch 提供的恶意样本元数据库无需认证即可查询。实现位于 agent.pydef query_malwarebazaar(file_hash): Query MalwareBazaar for sample metadata. url https://mb-api.abuse.ch/api/v1/ resp requests.post(url, data{query: get_info, hash: file_hash}, timeout30) result resp.json() if result.get(query_status) ok: sample result[data][0] return { hash: file_hash, family: sample.get(signature, unknown), file_type: sample.get(file_type, unknown), delivery_method: sample.get(delivery_method, unknown), tags: sample.get(tags, []), intelligence: sample.get(intelligence, {}), } return {hash: file_hash, status: not_found}要点拆解采用POST表单提交请求体为{query: get_info, hash: file_hash}signature字段给出样本的家族签名family是本节最关键的输出当样本未被收录或未归类时返回unknown返回的delivery_method与tags可直接补充到 SKILL.md Step 1 检测确认中关于投递方式如邮件附件的判断若查询失败query_status ! ok返回{hash: ..., status: not_found}主流程会基于该状态跳过 ThreatFox 检索。4.4query_threatfox_iocs(malware_family)— 家族 IOC 扩充确认家族后即可从 ThreatFox 拉取该家族全网关联的 IOCC2 IP、域名、URL 等实现位于 agent.pydef query_threatfox_iocs(malware_family): Search ThreatFox for IOCs associated with a malware family. url https://threatfox-api.abuse.ch/api/v1/ data {query: taginfo, tag: malware_family, limit: 50} resp requests.post(url, jsondata, timeout30) result resp.json() iocs [] if result.get(query_status) ok: for entry in result.get(data, []): iocs.append({ ioc: entry.get(ioc), ioc_type: entry.get(ioc_type), threat_type: entry.get(threat_type), malware: entry.get(malware_printable), confidence: entry.get(confidence_level), }) logger.info(ThreatFox: %d IOCs for family %s, len(iocs), malware_family) return iocs要点拆解使用taginfo查询模式以家族名作为tag默认limit50条每个 IOC 条目携带ioc值、ioc_type类型、threat_type威胁类型、malware_printable归属家族、confidence_level置信度这批 IOC 可直接用于 search_enterprise_iocs 的横向排查对应 SKILL.md Step 2 影响面评估中搜索指向已识别 C2 基础设施的其他内网主机通信这一动作。4.5isolate_endpoint_crowdstrike(api_base, token, device_id)— 终端隔离对失陷终端执行网络隔离调用 CrowdStrike Falcon 的 containment 动作实现位于 agent.pydef isolate_endpoint_crowdstrike(api_base, token, device_id): Isolate an infected endpoint via CrowdStrike Falcon API. headers {Authorization: fBearer {token}, Content-Type: application/json} resp requests.post( f{api_base}/devices/entities/devices-actions/v2?action_namecontain, headersheaders, json{ids: [device_id]}, timeout30, ) if resp.status_code 202: logger.info(Endpoint %s isolated via CrowdStrike, device_id) return True logger.error(Isolation failed for %s: %d, device_id, resp.status_code) return False要点拆解接口路径/devices/entities/devices-actions/v2动作类型通过查询参数action_namecontain指定即 Falcon 的网络包含/隔离鉴权方式Authorization: Bearer tokentoken 即 CLI 的--cs-token请求体{ids: [device_id]}支持单设备隔离从代码结构看也天然支持扩展为多设备列表成功判据HTTP 202Accepted视为隔离指令已受理函数返回True并进入报告的containment_actions列表其余状态码记录错误日志并返回False。在 main() 中默认api_base为https://api.crowdstrike.com。4.6search_enterprise_iocs(splunk_url, session_key, iocs)— 企业内网 IOC 横向排查隔离只是止血还需要判断恶意家族是否已扩散到其他主机。该函数将 ThreatFox 的 IOC 批量下发给 Splunk 做全企业检索实现位于 agent.pydef search_enterprise_iocs(splunk_url, session_key, iocs): Search Splunk for IOC matches across the enterprise. ioc_values [i.get(ioc, ) for i in iocs if i.get(ioc)] if not ioc_values: return [] search_terms OR .join([f{v} for v in ioc_values[:20]]) query fsearch index* ({search_terms}) | stats count by host, sourcetype | sort - count resp requests.post( f{splunk_url}/services/search/jobs, headers{Authorization: fSplunk {session_key}}, data{search: query, output_mode: json}, verifynot os.environ.get(SKIP_TLS_VERIFY, ).lower() true, timeout30, ) return resp.json() if resp.status_code 201 else []要点拆解查询构造只取前 20 个 IOC 用OR拼接并加引号包裹避免海量 IOC 导致搜索语句超限搜索模板为search index* (...) | stats count by host, sourcetype | sort - count按命中次数对主机和日志源排序直接给出哪台机器最可疑的优先级鉴权方式使用 Splunk 的Splunk session_key头需先通过/services/auth/login换取 session keyTLS 开关默认启用证书校验当环境变量SKIP_TLS_VERIFYtrue时跳过验证——这正是为实验室中使用自签名证书的 Splunk 实例预留的后门开关详见 agent.py 的注释成功判据Splunk 搜索任务创建接口成功返回 HTTP 201返回 JSON 载荷否则返回空列表。4.7generate_malware_ir_report(...)— 报告生成最后一步把所有中间结果聚合成结构化报告实现位于 agent.pydef generate_malware_ir_report(incident_id, hashes, vt_results, bazaar_results, family_iocs, containment): Generate a malware incident response report. report { incident_id: incident_id, timestamp: datetime.utcnow().isoformat(), sample_hashes: hashes, virustotal: vt_results, malwarebazaar: bazaar_results, malware_family: bazaar_results.get(family, vt_results.get(popular_threat_name, Unknown)), related_iocs: family_iocs[:20], containment_actions: containment, } family report[malware_family] detections vt_results.get(malicious, 0) print(fMALWARE IR REPORT - {incident_id}) print(fFamily: {family} | VT Detections: {detections} | Related IOCs: {len(family_iocs)}) return report注意家族名的优先级策略MalwareBazaar 的signature优先其次回退到 VirusTotal 的popular_threat_name最后兜底为Unknown——这种多源回退正是为了让 AI Agent 在没有单点情报的情况下仍能给出可用的归因结论。报告由 main() 以json.dump(report, f, indent2)落盘机器可读可直接喂给后续的处置决策流程。五、外部 API 集成一览下表汇总了该 Agent 依赖的全部外部服务与 api-reference.md 一致APIEndpoint鉴权用途VirusTotal v3/api/v3/files/{hash}API keyx-apikey文件信誉与检测统计MalwareBazaarhttps://mb-api.abuse.ch/api/v1/无样本元数据与家族归因ThreatFoxhttps://threatfox-api.abuse.ch/api/v1/无家族关联 IOC 检索CrowdStrike/devices/entities/devices-actions/v2Bearer token终端网络隔离Splunk/services/search/jobsSplunk session_key企业内网 IOC 横向排查四条情报/处置链路的分工非常清晰VirusTotal MalwareBazaar 负责这是什么检测与归因ThreatFox 负责它还有哪些同伙IOC 扩充CrowdStrike 负责立刻止血遏制Splunk 负责波及了谁影响面评估——恰好对应 SKILL.md 六步工作流中最需要自动化的四个环节。六、主流程编排一次完整的自动处置综合以上函数main() 的执行时序为解析 CLI 参数通过--sample实时哈希或--hash直接取得 SHA-256query_virustotal获取检测统计与威胁标签query_malwarebazaar获取家族签名依据家族名调用query_threatfox_iocs拉取最多 50 条关联 IOC若配置了 CrowdStrike 凭据执行isolate_endpoint_crowdstrike并记录遏制动作generate_malware_ir_report聚合结果并写入 JSON 文件。整条流水线的输出可直接映射为 SKILL.md 的 Output Format 中的机器可读部分malware_family、sample_hashes、related_iocs、containment_actions分别对应报告中的 Malware Family、File Hashes、IOCs、ERADICATION STATUS 各栏。也就是说Agent 的输出并非孤立的 JSON而是可以被上层 Agent 继续加工成人话版事件响应报告含时间线、清除状态、建议的半成品素材。七、框架映射与仓库生态定位该技能包在仓库的框架映射体系中不是孤立的SKILL.md 的 frontmatter 声明了 MITRE ATTCK 技术映射T1204 用户执行、T1027 混淆、T1055 进程注入、T1059 命令与脚本解释器、T1486 数据加密影响以及 NIST CSF 2.0RS.MA-01/RS.MA-02 缓解、RS.AN-03 分析、RC.RP-01 恢复计划与 D3FEND 防御技术文件元数据一致性校验、标识符分析、消息分析等在 attack-navigator-layer.json 中该技能与容器逃逸检测等技能共同挂在对应的 ATTCK 技术节点下说明它既是独立工具也是整个库从检测到处置链路中的一环仓库 README 将 817 个技能统一映射到 MITRE ATTCK、NIST CSF 2.0、MITRE ATLAS、D3FEND、NIST AI RMF 与 MITRE F3 六大框架本技能的 frontmatter 正是这一体系的具体落地。八、使用建议与注意事项授权边界本仓库 README 明确声明一切攻防与处置技能仅限用于已获授权的渗透测试、安全研究与防御教学场景恶意软件事件响应涉及对企业内网的真实隔离与取证动作务必在应急响应预案授权范围内执行。凭据管理--vt-key与--cs-token属于敏感凭据不应硬编码在命令行历史或 CI 日志中生产环境建议通过密钥管理服务注入环境变量后二次包装调用。错误容忍设计Agent 对每个外部 API 都做了失败降级——VT 返回错误对象、MalwareBazaar 返回not_found、ThreatFox 空列表、CrowdStrike 返回False——整体流程不会因单个情报源不可用而崩溃适合在真实事件中串接多源信息。Splunk 检索成本search_enterprise_iocs只取前 20 个 IOC 构造查询避免超大 OR 语句拖垮搜索任务SKIP_TLS_VERIFY开关仅应在自签名证书的隔离实验室环境开启。与人工流程互补Agent 擅长情报获取、哈希计算、隔离触发与报告聚合但清除eradication、镜像重建、72 小时监控等破坏性与判断性动作仍需由安全分析师按 SKILL.md 的 Step 5/Step 6 人工把关。总结api-reference.md 用一份精炼的 API 文档勾勒出了恶意软件事件响应 Agent 的完整能力边界依赖极简仅requests、编排清晰哈希 → 双情报源归因 → IOC 扩充 → 终端隔离 → 报告落盘、错误处理健壮逐源降级。配合 agent.py 的源码阅读你可以把它当作模板扩展出支持多设备隔离、企业内网扫描结果回填、甚至对接 MISP 进行 IOC 共享的更强版本——这正是将 SKILL.md 中的专家流程工程化为可复用自动化能力的正确姿势。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询