ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI 与 LLM 系统安全审计实战:基于 security-audit-skill 的提示注入、Agent 工具链与 MCP 威胁建模

AI 与 LLM 系统安全审计实战:基于 security-audit-skill 的提示注入、Agent 工具链与 MCP 威胁建模 AI 技能应用安全【免费下载链接】security-audit-skillA coding-agent skill for multi-phase security audits with independently verified, machine-readable findings项目地址https://gitcode.com/GitHub_Trending/se/security-audit-skill点击查看免费下载本篇技术指南讲解 skills/security-audit/AI-AND-LLM.md 这份面向「模型参与信任敏感决策」场景的专项攻击类文档它定义了一组区别于传统 Web 攻击类的上下文注入、记忆投毒、工具参数注入、动作绑定、MCP 身份混淆与输出泄露攻击类别并给出统一的验证规则。阅读本文后你可以在 coding-agent 的六阶段安全审计工作流中把该文档当作 companion block 原样注入 hunter/verifier 提示词对聊天机器人、RAG 流水线、持久化 Agent 记忆、工具调用循环、MCP 服务器与客户端等目标执行「有边界、有结果、可验证」的 LLM 专项审计。这份文档解决什么问题在 SKILL.md 定义的 security-audit skill 中ATTACK-CLASSES.md 提供了适用于普通 Web 应用、库、CLI、服务的基础攻击类注入、访问控制、资源与文件处理、密码学与秘密、业务逻辑、功能滥用与数据泄露、链式漏洞与信任边界、通配符、显而易见的问题。但当目标代码中有语言模型参与信任敏感决策时——例如模型输出被当作 SQL、shell、文件路径、URL 或特权 API 的输入检索结果进入他人会话上下文工具描述或 MCP 响应被当作策略——传统攻击类就不够了。AI-AND-LLM.md正是为此补充的模型专属委托层model-specific delegation layer。它的适用范围文档原话覆盖聊天机器人与助手、RAG 流水线、持久化 Agent 记忆、Agent/工具调用循环、MCP 服务器与客户端、用不可信输入拼装提示词的代码、以及消费模型输出并据此采取动作的代码。核心关注的数据流始终是untrusted content → model or memory → capability, authority, or sink即不可信内容 → 模型或记忆 → 能力、权威或 sink。文档明确要求与ATTACK-CLASSES.md配合使用而非替代它传输、访问控制、查询构造、文件系统使用、输出渲染仍然是普通信任边界本文件只覆盖模型委托这一层大型目标建议按「检索 / 记忆 / 工具分发 / MCP / 输出处理」切分给不同 hunter。在六阶段审计工作流中的位置这份文档不是独立运行的流程而是被 HUNTING.mdPhase 2 覆盖引导的猎捕波次和 RECONNAISSANCE.mdPhase 1 侦察与 companion 选择编排的 companion blockPhase 1侦察代理在架构摘要中记录「需要该 companion 的源可见信任边界」选择依据是侦察发现目标存在文档When to use this file描述的边界而不是因为语言/依赖名称出现RECONNAISSANCE.md 第 74-89 行明确禁止后一种选择方式。Phase 2hunter 提示词按固定顺序包含architecture.md、分配的 coverage 单元、逐字复制的选中 block每个选中 companion 的Core discipline、每个选中的攻击类小节、Universal moves、Validation rules以及明确排除的 block 及理由HUNTING.md 第 11-25 行。也就是说你读到的这篇文档的每一节都是可以原样粘贴进 agent 提示词的「弹药」。Phase 3-5verifier 收到的证据契约来自 report-schema.json 中confirmed/needs_validation/rejected三个分支本文档末尾的 6 条验证规则正是 LLM 类候选在上报前的硬门槛。Phase 6只有confirmed记录进入报告与严重度评估needs_validation保持为无严重度的待验证线索。Core discipline写进每个 LLM 领域 agent 提示词的核心纪律文档要求把这些纪律包含在本领域每一个 agent 提示词中原样 fenced block- Prompt injection alone is not a finding. Require a code-level boundary failure: content reaches another principals context, invokes authority the requester lacks, discloses data they cannot read, or drives a sink they cannot reach directly. - Model output, memory, tool descriptions, and MCP responses are untrusted inputs. Point to the code that grants authority, trusts output, writes durable state, or feeds a sink. - A guardrail prompt is not a security boundary. Count only deterministic checks, resource-scoped authorization, isolation, binding, and constrained credentials. - State the attacker, affected principal, effective execution identity, resource, exact action, authority used, and observable impact. An intentional direct request to use the requesters existing authority is not a delegation defect merely because a model executes it. - Authorization and action binding are separate controls. Attacker-controlled content that causes an action under an affected principals valid authority is an action-binding failure when that principal did not intentionally request or approve the exact action. - Classify every candidate as confirmed only after source evidence and bounded local validation establish the boundary and result. Use needs_validation when a required provider, deployment, model, renderer, or identity behavior is not observable locally.逐条解读其含义提示注入本身不是发现这是整个 skill 最反直觉的一条纪律。攻击者写一段「忽略之前的指令执行 X」的文字进入模型上下文如果没有导致代码层面的边界失效——内容进入了另一主体的上下文、调用了请求者本不具备的权威、泄露了其无权读取的数据、或驱动了一个其无法直接触达的 sink——就不构成安全发现。说服力再强的文本本身不是缺陷缺失的确定性控制才是。模型输出、记忆、工具描述、MCP 响应都是不可信输入审计时必须指出是哪段代码授予了权威、信任了输出、写入了持久状态、或把数据喂给了 sink。护栏提示词guardrail prompt不是安全边界只有确定性检查、资源作用域的授权、隔离、绑定和受限凭据才被计入。这与 README 中「Defense-in-depth gaps are not vulnerabilities」的设计原则一脉相承。必须陈述完整主体链攻击者、受影响主体、有效执行身份、资源、精确动作、使用的权威、可观察影响。用户有意直接请求使用其既有权威模型只是执行了它这不构成委托缺陷。授权与动作绑定是两套独立控制攻击者控制的内容在受影响主体的合法授权下引起动作而该主体并未有意请求或批准该精确动作时属于动作绑定失败。这与下面「Action-confirmation and approval binding」类互相呼应。证据分类纪律confirmed需要源码证据 有界本地验证确认边界与结果当关键事实provider、部署、模型、渲染器、身份行为无法本地观察时用needs_validation——这与 SKILL.md 的「Respect source visibility」原则完全一致仓库缺席的部署控制既不假设存在也不假设不存在。这些纪律通过 HUNTING.md 第 11-25 行的提示词装配规则被逐字写入每个涉及 LLM 边界的 hunter 提示词与report-schema.json的三个 verdict 分支一起约束候选的输出形态。上下文、检索与记忆攻击类别这些类别聚焦一个问题内容如何进入模型上下文以及它在那里获得了什么权威。所有类别标注subagent_type: general即由负责广泛调查与有界本地执行的general委托代理运行。经由检索或摄取内容的间接注入Indirect injection through retrieved or ingested content攻击者可以写入一份 RAG 文档、被索引的页面、文件、邮件、issue 正文、工具响应或元数据使其进入另一主体的模型上下文。审计步骤追踪谁可以写每个来源RAG 文档库、索引、邮箱、issue 追踪器检索如何划定范围是否按租户过滤、是否在查询中执行 ACL谁的会话消费该内容在该会话中启用了什么能力。隔离、资源授权、对消费主体意图的绑定要分别检查。缺陷是缺失的确定性控制而不是有说服力的文本本身——这条与 Core discipline 第 1 条完全一致。跨会话或跨租户上下文渗漏Cross-session or cross-tenant context bleed对话历史、嵌入向量、检索结果或提示缓存按键过宽。例如会话 ID 只包含会话而非用户租户字段存于对象上但某个查询路径没带共享缓存跨租户复用。验证要点租户和 ACL 过滤器必须存在于查询本身每一个缓存键都要检查会话键、嵌入键、检索结果键、提示缓存键对象上存了租户字段不等于强制实施——如果存在备选查询、共享缓存或批量路径漏掉了它就是缺陷。一个典型的审计路径是找到所有读取检索结果/嵌入缓存的代码比较其键空间与租户作用域再核对批量/导出路径是否走同一套过滤。持久化记忆投毒Persistent memory poisoning攻击者控制的内容或模型摘要被写入记忆之后塑造另一个任务、另一个用户或一个特权会话的决策。审查项谁可以创建、更新、合并、删除记忆条目记忆的来源provenance与租户范围低信任观察low-trust observations是否会变成持久的指令或事实检索时能否区分「用户偏好」与「工具策略」。文档给出了重要的反例边界用户有意保存、且仅用于该用户有意且被允许的请求的记忆不构成跨边界发现。也就是说记忆投毒类必须证明「攻击者可控的写入」「后续跨主体读取或特权决策」两个环节都成立单一环节不足以成文。提示角色与来源混淆Prompt role and provenance confusion提示词拼装让不可信文本伪装成系统消息、先前轮次、工具结果、策略或记忆记录。需要警惕的实现模式字符串拼接system user_content直接拼接无类型的历史记录把不同类型的消息混在一个数组里调用者可控的 role 字段客户端传入role: system序列化往返丢失来源标签把消息 JSON 序列化再反序列化后 role 信息丢失。确认的前提被伪造的来源标签改变了一个确定性信任决策或触达了一个有意义的能力。如果伪造来源对代码决策毫无影响则只是提示词工程问题不是发现。工具与动作攻击类别工具参数注入到下游 sinkTool-argument injection into a downstream sink模型产生的参数到达 SQL、shell、文件、URL 抓取或特权 API而handler 侧没有验证。关键方法论文档原话把工具 schema 当作输入解析层而不是安全控制从解码后的调用开始逐个字段追踪到 sink结构化输出structured output只是收窄了形状shape它不建立授权、安全路径、安全 URL 或查询语义。例如一个run_sql(query: string)工具即使有 JSON Schema 约束只要 handler 直接把query拼进 SQL 执行模型输出可能被检索内容污染就能驱动任意查询。审计时要看 handler 是否在 schema 校验之后再次验证值语义。过度代理与混淆代理权威Excessive agency and confused-deputy authorityAgent 使用服务身份或宽泛凭据而工具 handler 没有在命名资源上重新检查请求主体的权限。验证两点有效执行身份effective identity是什么——是请求者的身份还是服务身份调用者能否通过正常产品界面执行该精确操作文档给出的反例共享凭据 强制按用户查询范围per-user query scope不是缺陷。这条与 Core discipline 第 4 条配套模型执行用户有权执行的既有动作不是缺陷缺陷在于模型以超出请求者的权威执行了动作。动作确认与批准绑定Action-confirmation and approval binding用户批准了一个描述的动作但执行可能使用了被更改的参数、不同的资源、不同的主体或后来的模型轮次。文档列举的绑定维度意图或确认必须绑定到规范化后的工具名normalized tool name、完整参数对象complete argument object、请求者、目标、金额、过期时间、批成员资格batch membership。两个必须审查的场景确认后的变异用户批准「转账 100 给 A」执行时参数对象里金额或收款人被改重试与恢复会话一次批准不得授权一个被变异或重复的副作用——重试逻辑是否原样重放已批准的动作、恢复的会话是否继承旧批准。此外攻击者控制的内容在受害者合法授权下引起副作用即使通用授权允许受害者执行该操作只要受害者未有意请求或批准精确动作就构成动作绑定缺陷。工具 schema 与分发器不一致Tool-schema and dispatcher disagreementschema 接受了别名、额外字段、重复键、强制转换、嵌套自由对象或越界值而分发器/handler 对其解释不同。检查方法对比 schema 校验、规范化canonicalization、生成的绑定代码、handler 默认值四者在值变成资源选择器或安全相关选项的地方再次验证。典型例子schema 允许id字段为数字或字符串handler 用字符串比较而校验用数字比较导致1与1走不同路径或 schema 接受额外字段但 handler 把它们当作幂等键。无界委托动作循环Unbounded delegated action loops一个有界的请求可以排队发起重复的消费、发送、变更或外部 API 工作而没有每请求预算per-request budget每动作授权per-action authorization取消机制幂等性控制。审计重点是共享成本、配额、其他用户或持久状态的冲击。文档特别强调验证纪律不要通过耗尽服务来测试要用代码级核算code-level accounting和有界本地循环。MCP 与子代理信任类别子代理与 MCP 信任继承Sub-agent and MCP trust inheritance委托任务收到的是完整会话、凭据、记忆或能力而非完成任务所需的最小权威least authority。检查每次调用携带的主体与租户能力收窄capability narrowing是否存在凭据受众credential audience是否与目标服务匹配委托结果返回时是否被当作不可信输入。这与 HUNTING.md 中的任务工具机制相关skill 本身的委托就强调「独立的 scratch/ 与父级持有的 artifacts/」以及角色、写隔离、提示词、独立性边界——这条纪律在审计被审目标时同样适用。MCP 服务器与工具身份混淆MCP server and tool identity confusion调用或结果按攻击者可影响的名称路由服务器名、工具名、请求 ID、资源 URI 或模型选择的别名而不是按认证连接和未决请求路由。需要确认两个服务器能否声明同一工具或资源身份重连reconnect是否改变绑定关系一个服务器的响应能否满足另一个服务器的未决调用pending call。例如如果客户端用工具名作为键存储「未决请求 → 回调」而两个 MCP 服务器注册了同名工具攻击者服务器就能抢先应答受害者的未决调用。MCP 元数据与 schema 当策略MCP metadata and schema as policyMCP 对等端提供的工具描述、资源元数据、提示词、补全提示或 schema 被当作策略或授权信任。文档的定位很精确这些字段可以引导模型但不能授予能力。审计时找到当元数据与策略冲突时仍然权威的确定性元素确定性允许列表deterministic allowlist服务器身份检查server identity checkhandler 授权handler authorization。输出与泄露攻击类别不安全的输出渲染Insecure output rendering模型输出到达正在执行的 HTML、Markdown、模板、URL 或命令 sink而没有该 sink 要求的编码与策略。对浏览器渲染验证自动加载资源auto-loaded resources与 CSP 或净化措施——具体检查项在 CLIENT-SIDE.md该文件是浏览器源的 companion渲染器行为在仓库之外时候选标记为needs_validation——因为浏览器是否执行某标签/协议取决于渲染器版本与配置这属于「无法本地观察」的关键事实。敏感上下文提取Sensitive context extraction组装好的上下文包含凭据、另一用户的数据、私有源码或本身就授予访问权的策略值而用户可影响的输出暴露了它们。审计方法读提示词组装代码和数据抓取代码。文档的反例泄露不跨越数据边界的通用指令或行为不是发现。Universal moves适用于上述所有类别的通用动作文档给出三组通用打法可以注入任何 LLM 类 hunter先画四张图每个执行身份、每个能力、每个可写的上下文或记忆来源、每个输出目的地。然后把起点的主体连接到终点的权威。反向追溯从有副作用的工具出发向后经过分发器、schema、确认、模型上下文、检索、摄取从持久记忆读取出发向前追踪每个写入者。比较路径差异对同一动作比较直接、队列、重试、恢复、批量、委托六条路径。最强的门禁gate必须在参数定稿之后、每个副作用发生之前生效——重试/批量路径漏掉最强门禁正是动作绑定类的高发根因。Validation rules上报任何发现前的 6 条硬性验证规则文档规定在 LLM 领域上报任何发现之前必须应用以下规则这是 hunter 提示词的一部分也是 Phase 3 verifier 的复核依据命名被跨越的边界与可观察结果攻击者、受影响主体或共享资源、执行身份、目标、未授权或未请求的动作/泄露。混淆代理权威主张证明工具缺少请求者资源的授权且攻击者无法正常执行同一动作动作绑定主张则相反证明攻击者控制的内容在受影响主体权威下引起了该主体未有意请求或批准的动作——有效的通用授权不构成意图证据。记忆或检索主张同时引用攻击者可控的写入和后来的跨主体读取或特权决策没有可达消费者的共享记录不够。动作绑定确立有意请求或规范化后的已批准对象如有与 handler 实际使用的对象对比确认本地可观察的未请求动作、变更、重复或权威变化且不把测试扩展到有害执行schema 不一致则对比规范化校验对象与 handler 对象。MCP 身份主张验证认证连接、请求关联、工具命名空间、有效凭据需要外部服务器身份或部署路由时标记needs_validation。分类纪律confirmed只用于完整源码追踪 有意义结果needs_validation用于某个未解决的具体边界事实且必须说明解决它所需的有界本地或 owner 观察检查。这些规则与 VALIDATION-AND-REPORTING.md 的 verifier 契约一致verifier「从仓库源码和有界本地证据出发试图反驳候选」needs_validation永远不是投机想法的停车场而是「具体未解决的阻塞事实」。与结构化输出 schema 的衔接当 LLM 类候选通过上述验证规则后它必须被写成 report-schema.json 三个分支之一并由 validate-findings.cjs 校验node skill-dir/validate-findings.cjs output-dir/findings.json。与本领域最相关的约束confirmed必须含root_cause、intended_behavior、有序traceentrypoint → propagation → sink、evidence、conditions、目标中立的execution含payloads、instructions、非空observed_result、remediation、severity、confidenceoverall_severity不得超过已验证的impact。对 LLM 类发现execution应使用目标原生界面API/HTTP 输入、库调用、消息、文件 fixture 等而不是要求端点或线上环境。needs_validation必须含claimed_root_cause、trace、evidence、非空blockers、至少一个validation_plan.local或validation_plan.deployment不得有严重度、execution、remediation或已确认的根因。deployment是 owner 观察检查配置/身份/路由/策略/运行时事实不是对线上目标的探测。rejected记录被证伪的候选防止未来运行在无新证据时重复该主张。validate-findings.test.cjs 中的测试如「rejects severity above demonstrated impact」直接保障了「LLM 类发现不得夸大影响」这条纪律把impact.score设为medium而overall_severity设为high会被 validator 拒绝。该测试文件还覆盖了重复指纹、不安全源码路径包括 Windows 设备名CON/PRN/NUL等、控制字符注入到诊断输出等场景说明整个 skill 的输出层对「不可信内容进入信任敏感结构」本身也是对抗性设计的。与相邻 companion 的边界划分为了避免与仓库其他领域文档职责重叠AI-AND-LLM.md明确界定了边界浏览器渲染/客户端模型输出到达 DOM、postMessage、浏览器存储等浏览器侧 sink 时具体检查在 CLIENT-SIDE.md——AI 文档只负责指出「输出进入渲染 sink」这一环节并引用该文件浏览器执行行为超出仓库时标记needs_validation。传输/访问控制/查询构造/文件系统/输出渲染这些仍然是普通信任边界归 ATTACK-CLASSES.md 管理。例如检索 SQL 的查询构造走普通注入类模型上下文/记忆/工具委托这一层才走本文档。原生/webview 桥webview 桥的原生侧由 DESKTOP-MOBILE-AND-LOCAL-IPC.md 覆盖服务端 CSRF/会话/认证回调由 WEB-PROTOCOL-AND-AUTH.md 覆盖其提问角度是「HTTP/身份层能否混淆操作所属的主体、请求、保证级别或令牌」。审计一个 LLM 系统的完整操作路径结合本文档与 skill 六阶段流程对 LLM 目标发起专项审计的可执行路径是侦察Phase 1用 RECONNAISSANCE.md 的 Agent 1c 清单「模型上下文/工具参数」入口面盘点模型输入来源检索、记忆、工具响应、MCP、输出 sinkSQL、shell、文件、渲染、命令与并行路径按「检索 / 记忆 / 工具分发 / MCP / 输出处理」拆分 coverage 单元。猎捕Phase 2把本文档的Core discipline、命中的攻击类小节、Universal moves、Validation rules逐字复制进对应 hunter 提示词与 HUNTING.md 的核心猎捕方法一起执行hunter 只写自己的scratch/返回结构化 JSON。验证Phase 3-5fresh verifier 从源码与有界本地证据反驳每个候选只有完整源码追踪 本地可观察结果的才能confirmed关键部署/渲染器事实未决的保持needs_validation。上报Phase 6报告区分已确认发现与待验证线索needs_validation不分配严重度。关键要点速查提示注入不是发现必须有代码级边界失效进入他人上下文 / 调用无权权威 / 泄露不可读数据 / 驱动不可达 sink。模型输出、记忆、工具描述、MCP 响应 不可信输入。护栏提示词 ≠ 安全边界只认确定性检查、资源作用域授权、隔离、绑定、受限凭据。授权与动作绑定是两套控制合法授权下的未批准副作用 动作绑定失败。schema 是输入解析不是授权每个字段从解码调用追踪到 sink。记忆投毒需成对证据攻击者可控写入 可达的跨主体读取/特权决策缺一不可。MCP 按认证连接与未决请求路由不能按可影响的名称路由。confirmed需源码证据 有界本地验证needs_validation是具体未决事实无严重度。赞分享AI 技能应用安全【免费下载链接】security-audit-skillA coding-agent skill for multi-phase security audits with independently verified, machine-readable findings项目地址https://gitcode.com/GitHub_Trending/se/security-audit-skill点击查看免费下载相关推荐高精度数值计算mathjs中BigNumber、BigInt与Fraction的终极选型指南高精度数值计算mathjs中BigNumber、BigInt与Fraction的终极选型指南 在 JavaScript 中做高精度数值计算mathjs 提供科学计算007 安全审计 Skill 实战指南基于 STRIDE/PASTA 威胁建模与 6 阶段审计流程的纵深防御体系007 安全审计 Skill 实战指南基于 STRIDE/PASTA 威胁建模与 6 阶段审计流程的纵深防御体系 本文聚焦于 AASagentic awesAI 技能AI 插件cloudflare-security-audit 技能实战AI/LLM/Agent 攻击面安全审计方法论cloudflare security audit 技能实战AI/LLM/Agent 攻击面安全审计方法论 导读 本文以 AAS 仓库中 cloudflareAI 技能AI 插件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表