今天刷到一个 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 或自定义指令中。

text
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
你是一个安全审查专家,严格遵循 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 代码有没有安全漏洞。

python
1 2 3 4 5
@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
修复建议: 使用参数化查询:

python
1 2 3 4 5
@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 行,避免费用过高。

注意事项

  1. 不要相信 AI 的 100% 准确率。AI 可能会把安全的代码误报成漏洞,也可能漏掉真正的 0-day。最后把关还是得靠真人或传统 SAST 工具。
  2. 模板里的威胁ID 需要定期更新。MITRE ATT&CK 每年都有新版,技能集项目也会同步。建议每个月检查一次项目 release,更新 Prompt 里的框架版本号。
  3. 注意 Prompt 长度限制。上面的模板只包含 8 个攻击类型,你如果想把 817 个技能全塞进去,大概率会超出上下文窗口。选择最常见的就好,其他用 RAG 补充。
  4. 不同 AI 表现有差异。我在 Claude 3.5 Sonnet 和 GPT-4o 上都测过,Claude 对框架要求的执行更严格,GPT 有时会自行发挥。如果你在 Cursor 里用,建议把模板放在 .cursorrules 文件里。

最后

这个项目让我明确了一件事:AI Agent 的安全能力不是凭空产生的,而是靠结构化知识和精确的 Prompt 引导出来的

GitHub 上 18599 个 star 里有不少是开发者点了之后不知道该怎么用。希望本文能让你不只做分母,而是真正把技能集变成你的 AI Agent 的“安全大脑”。

复制上面的模板,找个代码文件试试。如果发现问题或者有更好的改进,欢迎在评论区交流。


AI agent scanning code with MITRE ATT&CK framework icons