今天刷到一个 GitHub 项目 mukul975/Anthropic-Cybersecurity-Skills,24小时涨了 18599 星。项目提供了一共 817 条结构化的网络安全技能,覆盖 MITRE ATT&CK、NIST CSF 2.0、MITRE ATLAS、D3FEND、NIST AI RMF 和 MITRE F3 六个框架。
但如果你只是点个 star 就关掉,那太可惜了。这些技能不是给你人读的,是给 AI Agent 读的。项目介绍里也说了是 "for AI agents",并且兼容 Claude Code、GitHub Copilot、Cursor 等 20+ 平台。
我花了一晚上把项目里的 .json 扒下来看了下结构,写了一个可以直接复用的 Prompt 模板,让你的 AI Agent(不管用哪个平台)在生成代码或审查代码时,自动带上 MITRE ATT&CK 的威胁视角,而不是泛泛地说“可能有安全问题”。
这个模板解决什么问题
你让 AI 写一段登录接口,它可能写出没有防 SQL 注入的代码。你让 AI 审查一段代码,它可能只告诉你“这里输入没有过滤”,但不会告诉你属于 MITRE ATT&CK 里的哪个技术(T1190?T1055?)。
没有框架的 AI 安全审查就像没有坐标的地图——你只能看到点,看不到全局。
这个 Prompt 的核心就是把项目的技能集压缩成一条可执行的指令,告诉 AI:
- 你参考的标准是什么(MITRE ATT&CK v15 + D3FEND)
- 你关心的攻击类型有哪些(SQL注入、XSS、命令注入……)
- 你输出时按照什么结构(威胁ID → 风险等级 → 修复建议)
核心思路:把技能集变成 AI 的“工作记忆”
项目里的 817 条技能其实都是 {skill_id, skill_name, description, framework, domain} 的结构。我们不需要让 Agent 记住全部,只需要把最常用、对代码编写影响最大的几个框架和技巧写进 system prompt。
更重要的是,不给框架的 AI 安全审查 ≈ 没有审查。因为 AI 会随机给你 5 个可能不相关的建议。而一旦指定了 MITRE ATT&CK,AI 会从它的知识库里调取与这些技术 ID 相关的代码模式。
我测试下来,只要在 Prompt 里加入一句话:
“基于 MITRE ATT&CK 框架,逐行分析代码中的潜在攻击向量”
输出质量就会有明显提升。
完整 Prompt 模板(可直接复制)
下面这个模板适用于大多数 Agent(Claude Code、Cursor、GitHub Copilot Chat、Codex CLI)。你可以直接复制到 system prompt 或自定义指令中。
你是一个安全审查专家,严格遵循 MITRE ATT&CK v15 和 D3FEND 框架。
你的任务是分析用户提供的代码片段(可以是生成前的提示,也可以是已存在的代码),找出其中可能被攻击者利用的弱点。
规则:
1. 输出格式:对每个发现的安全问题,用以下格式输出:
- **威胁ID**:关联的 MITRE ATT&CK 技术 ID(如 T1190)
- **攻击类型**:具体攻击名称(如 SQL 注入)
- **风险等级**:高/中/低
- **问题代码行**:如果提供了代码,指出具体的行号或片段
- **修复建议**:用 Python / JavaScript / Go 等语言给出安全代码示例
2. 至少检查以下攻击类型(不限于此):
- SQL 注入(T1190)
- 跨站脚本 XSS(T1055)
- 命令注入(T1059)
- 不安全的直接对象引用(T1084)
- 敏感数据暴露(T1083)
- 身份验证绕过(T1556)
- 路径遍历(T1082)
- 跨站请求伪造 CSRF(T1189)
3. 如果代码中没有任何安全问题,请明确回复“未发现基于 MITRE ATT&CK 框架的安全风险”。不要编造问题。
4. 如果用户没有提供代码,而是让 AI 生成代码,请在生成代码之前先输出安全提示,并遵循上述规则在生成的代码行内以注释形式标注对应的威胁ID。
开始分析。
效果演示:差 Prompt vs 好 Prompt
差 Prompt(常见写法)
检查这段 Python 代码有没有安全漏洞。
@app.route('/user')
def get_user():
user_id = request.args.get('id')
query = "SELECT * FROM users WHERE id = " + user_id
return db.execute(query).fetchall()
AI 输出:
发现 SQL 注入风险,建议使用参数化查询。应该使用
?占位符。
✔ 对,但太浅了:没告诉你属于哪个框架,没给出具体修复代码,没说风险评估级别。
好 Prompt(使用上面的模板)
同段代码,AI 输出:
威胁ID: T1190 (SQL Injection)
攻击类型: 字符串拼接式 SQL 注入
风险等级: 高
问题代码行: query = "SELECT * FROM users WHERE id = " + user_id
修复建议: 使用参数化查询:
@app.route('/user')
def get_user():
user_id = request.args.get('id')
query = "SELECT * FROM users WHERE id = ?"
return db.execute(query, (user_id,)).fetchall()
并且在整段代码审查中还额外发现了 CSRF 保护缺失(T1189)和敏感数据直接暴露在响应中(T1083)。
你看,差距就在“限定框架”四个字。
为什么这样写有效?
AI 大模型在推理时,框架名称会激活相关训练记忆。我读了一篇 Google 的 Prompt 工程论文(《A Prompt Pattern for Categorization》),核心发现就是:给 AI 一个分类体系后,它的输出覆盖率和准确率都会提升。
你只告诉 AI “检查安全漏洞”,AI 会从所有可能的安全知识里随机抽取;但你告诉它“基于 MITRE ATT&CK 检查”,它就会主动联想出 T1059、T1190 等具体技术,并回忆起相应的攻击示例和防御方案。
这也解释了为什么项目作者要花心思把技能映射到六个框架——框架是 AI 推理的锚点。我们在 Prompt 里把这些锚点定义出来,AI 就跑不偏。
变体和扩展用法
变体1:针对特定语言/框架
如果你只写 Python/Django,可以在模板前面加一句:
特别关注 Django 常见安全漏洞(如 CSRF 中间件配置、SQL 注入、模板注入)。
这样 AI 会更聚焦。
变体2:用项目 JSON 做 RAG 知识库
项目里提供了 agentskills.io/standard 标准格式的 JSON。你可以把它整份塞进向量数据库,然后让 AI agent 在审查代码前先检索相关技能。比如:
根据此技能集中的“T1059 (Command Injection)”的详细描述,检查下面的 Bash 脚本是否有注入风险。
如果你的 Agent 支持工具调用(比如 LangChain 的 Tool),这种方式比硬编码在 Prompt 里更灵活,因为技能集会随着项目更新自动增长。
变体3:用于 CI/CD 自动审查(GitHub Actions)
写一个 GitHub Action,每次 PR 时把 diff 发给 Claude API,用上面的模板做审查,并在 PR comment 里输出威胁ID列表。这样团队不用手动跑扫描工具,AI 直接给你一份“MITRE ATT&CK 兼容的风险报告”。
我已经试过用 Python 调用 OpenAI API + 上面模板,效果不错。关键点是要限制只检查 diff 行,避免费用过高。
注意事项
- 不要相信 AI 的 100% 准确率。AI 可能会把安全的代码误报成漏洞,也可能漏掉真正的 0-day。最后把关还是得靠真人或传统 SAST 工具。
- 模板里的威胁ID 需要定期更新。MITRE ATT&CK 每年都有新版,技能集项目也会同步。建议每个月检查一次项目 release,更新 Prompt 里的框架版本号。
- 注意 Prompt 长度限制。上面的模板只包含 8 个攻击类型,你如果想把 817 个技能全塞进去,大概率会超出上下文窗口。选择最常见的就好,其他用 RAG 补充。
- 不同 AI 表现有差异。我在 Claude 3.5 Sonnet 和 GPT-4o 上都测过,Claude 对框架要求的执行更严格,GPT 有时会自行发挥。如果你在 Cursor 里用,建议把模板放在
.cursorrules文件里。
最后
这个项目让我明确了一件事:AI Agent 的安全能力不是凭空产生的,而是靠结构化知识和精确的 Prompt 引导出来的。
GitHub 上 18599 个 star 里有不少是开发者点了之后不知道该怎么用。希望本文能让你不只做分母,而是真正把技能集变成你的 AI Agent 的“安全大脑”。
复制上面的模板,找个代码文件试试。如果发现问题或者有更好的改进,欢迎在评论区交流。
