<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>OWASP on Hypho - AI Agent 技术博客</title><link>https://blog.hypho.cn/tags/owasp/</link><description>Recent content in OWASP on Hypho - AI Agent 技术博客</description><image><title>Hypho - AI Agent 技术博客</title><url>https://blog.hypho.cn/papermod-cover.png</url><link>https://blog.hypho.cn/papermod-cover.png</link></image><generator>Hugo -- 0.148.2</generator><language>zh-cn</language><lastBuildDate>Thu, 09 Apr 2026 20:01:17 +0800</lastBuildDate><atom:link href="https://blog.hypho.cn/tags/owasp/index.xml" rel="self" type="application/rss+xml"/><item><title>给 AI Agent 穿上盔甲：拆解开源八层安全防线的设计逻辑</title><link>https://blog.hypho.cn/posts/agentarmor-8-layer-security-framework/</link><pubDate>Thu, 09 Apr 2026 20:01:17 +0800</pubDate><guid>https://blog.hypho.cn/posts/agentarmor-8-layer-security-framework/</guid><description>以开源项目 AgentArmor 为锚点，拆解其提出的 8 层 Agent 安全架构，探讨在大模型能力爆发背景下，AI Agent 安全防护的工程化思路与行业现状。</description><content:encoded><![CDATA[<h2 id="一个真实的安全事件">一个真实的安全事件</h2>
<p>今年 2 月，安全研究员 Ilia Tishin 在自己的博客上记录了一次罕见的&quot;攻击&quot;经历<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>：有人利用 AI Agent 系统性地搜集他的个人信息，生成攻击性内容，并发布到公共平台上。整个过程不需要攻击者逐条干预每一个步骤——Agent 自主完成了从情报收集到内容分发的大部分工作。</p>
<p>这不是孤例。随着 AI Agent 框架（LangChain Agents、AutoGen、CrewAI、OpenClaw 等）的快速普及，越来越多的系统被赋予自主调用工具、读写文件、访问 API、甚至发布内容的能力。但这些能力的增加，也带来了前所未有的安全攻击面——<strong>而大多数开发者并非安全专家。</strong></p>
<p>这是一个典型的安全供需错配：框架把能力给了开发者，却把安全责任也一并丢给了开发者。</p>
<p>最近在 GitHub 上出现了一个值得关注的项目——<strong>AgentArmor</strong><sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>，它尝试用一套系统化的 8 层安全框架来解决这个问题。本文就来拆解它的设计逻辑，以及这背后反映出的 Agent 安全现状。</p>
<h2 id="为什么现有安全工具都是点方案">为什么现有安全工具都是&quot;点方案&quot;</h2>
<p>在 AgentArmor 之前，市面上的 AI 安全工具大多是单点出击：</p>
<ul>
<li><strong>输出过滤器</strong>：检测生成内容是否有毒</li>
<li><strong>Prompt 注入扫描器</strong>：检测输入中是否有注入攻击</li>
<li><strong>策略引擎</strong>：基于规则判断是否允许某操作</li>
</ul>
<p>这些工具各有价值，但<strong>无法组合成一个完整的安全系统</strong>。原因是：Agent 的数据流是端到端的——数据从外部输入（Ingestion），进入 LLM 处理（Context），转变成行动计划（Planning），执行操作（Execution），输出结果（Output），并可能与其他 Agent 通信（Inter-Agent）。在每一个阶段，数据都有不同的脆弱性。</p>
<p>点方案只能覆盖一个阶段，攻击者只需要找到你没有覆盖的那个阶段就可以突破。</p>
<h2 id="八层安全架构">八层安全架构</h2>
<p>AgentArmor 提出的核心思想是：<strong>为 Agent 的整个数据流设计 8 层纵深防御</strong>。</p>
<pre tabindex="0"><code class="language-mermaid" data-lang="mermaid">graph TD
    subgraph &#34;AgentArmor 8-Layer Defense&#34;
        L1[&#34;L1 Ingestion&lt;br/&gt;输入扫描：Prompt 注入检测&#34;]
        L2[&#34;L2 Storage&lt;br/&gt;存储安全：AES-256-GCM 加密&#34;]
        L3[&#34;L3 Context&lt;br/&gt;上下文隔离：指令-数据分离&#34;]
        L4[&#34;L4 Planning&lt;br/&gt;行动计划：风险评分&#34;]
        L5[&#34;L5 Execution&lt;br/&gt;执行控制：速率限制+人工审批&#34;]
        L6[&#34;L6 Output&lt;br/&gt;输出过滤：PII 脱敏&#34;]
        L7[&#34;L7 Inter-Agent&lt;br/&gt;多 Agent 通信：HMAC 认证&#34;]
        L8[&#34;L8 Identity&lt;br/&gt;身份与权限：JIT 权限 + 凭证轮换&#34;]
    end

    L1 --&gt; L2 --&gt; L3 --&gt; L4 --&gt; L5 --&gt; L6 --&gt; L7 --&gt; L8

    style L1 fill:#f59f00,color:#fff
    style L5 fill:#ef4444,color:#fff
    style L8 fill:#7c3aed,color:#fff
</code></pre><p>每一层都针对数据流中一个特定位置的特定威胁。</p>
<h3 id="l1ingestion输入扫描">L1：Ingestion（输入扫描）</h3>
<p>这是大多数现有安全工具聚焦的地方——检测用户输入中的 Prompt 注入和 jailbreak 攻击。</p>
<p>AgentArmor 在这一层识别 20+ 攻击模式，包括：经典 DAN（Do Anything Now）攻击、Unicode 隐写术（把恶意指令藏在特殊字符中）、多语言混淆注入等。</p>
<p>一个值得注意的设计决策：这一层<strong>不仅扫描 prompt 文本本身，还验证来源</strong>（Source Verification）。这是因为很多注入攻击来自 Agent 的工具返回结果——比如当 Agent 调用搜索工具后，搜索结果的页面内容中可能藏有注入指令。传统在 LLM 入口处做扫描无法覆盖这类攻击。</p>
<h3 id="l2storage存储安全">L2：Storage（存储安全）</h3>
<p>数据在向量数据库或内存中存储时的安全。</p>
<p>AgentArmor 使用 <strong>AES-256-GCM</strong> 做静态加密，并用 <strong>BLAKE3</strong> 做完整性校验。这意味着即使数据库被拖库，攻击者拿到的也是加密后的数据，且任何篡改都能被检测到。</p>
<p>对于企业内部场景，这一层常常被忽视——大多数团队的向量数据库配置是默认的，没有任何访问控制和加密。</p>
<h3 id="l3context上下文隔离">L3：Context（上下文隔离）</h3>
<p>这一层解决的是<strong>指令-数据混淆</strong>问题——也是最容易被忽视的 Agent 安全盲区之一。</p>
<p>当 Agent 在上下文中同时包含&quot;指令&quot;（做什么）和&quot;数据&quot;（操作什么）时，恶意数据可能通过上下文污染影响指令的执行。一个经典的类比是 SQL 注入：参数化和直接拼接的区别，就在于指令和数据是否被正确隔离。</p>
<p>Context 层的核心机制包括：</p>
<ul>
<li><strong>Canary Tokens</strong>：在上下文中植入不可见的标记，用于检测是否被异常读取</li>
<li><strong>Prompt Hardening</strong>：在将用户输入加入上下文前做预处理和隔离</li>
</ul>
<h3 id="l4planning行动计划验证">L4：Planning（行动计划验证）</h3>
<p>这是 AgentArmor 设计中最有启发性的一层——<strong>在 Agent 制定行动计划后、执行前，对其进行风险评估</strong>。</p>
<p>传统的访问控制是&quot;动词 × 资源&quot;的二维矩阵（比如 RBAC）。但对于 Agent 来说，同一个动词作用于不同的资源，风险差异巨大：</p>
<table>
  <thead>
      <tr>
          <th>操作</th>
          <th>风险分</th>
          <th>理由</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>read.file /data/notes.txt</code></td>
          <td>1</td>
          <td>只读普通文件</td>
      </tr>
      <tr>
          <td><code>read.file /etc/shadow</code></td>
          <td>9</td>
          <td>读取系统密码文件</td>
      </tr>
      <tr>
          <td><code>delete.file /tmp/cache.json</code></td>
          <td>3</td>
          <td>删除临时缓存</td>
      </tr>
      <tr>
          <td><code>delete.file /data/production.db</code></td>
          <td>10</td>
          <td>删除生产数据库</td>
      </tr>
  </tbody>
</table>
<p>AgentArmor 的 L4 实现了<strong>参数感知的风险评分</strong>——不仅看操作类型，还看操作目标。这是一个重要的设计进步，因为它把安全判断从&quot;能不能做这个操作&quot;变成了&quot;这个具体操作有多危险&quot;。</p>
<h3 id="l5execution执行控制">L5：Execution（执行控制）</h3>
<p>这一层负责在行动计划被批准后，<strong>实际执行时的安全控制</strong>。</p>
<p>核心机制包括：</p>
<ul>
<li><strong>网络出口控制</strong>：限制 Agent 可以访问的域名/IP</li>
<li><strong>速率限制</strong>：防止 Agent 在短时间内发起大量操作（比如暴力破解）</li>
<li><strong>人工审批门</strong>：高风险操作触发人工确认才能执行</li>
</ul>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># 人工审批门示例</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">execution_gate</span><span class="p">(</span><span class="n">action</span><span class="p">:</span> <span class="n">AgentAction</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">risk_score</span> <span class="o">=</span> <span class="n">calculate_risk</span><span class="p">(</span><span class="n">action</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">risk_score</span> <span class="o">&gt;=</span> <span class="n">HIGH_RISK_THRESHOLD</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># 发送审批请求给人工，等待确认</span>
</span></span><span class="line"><span class="cl">        <span class="n">approval</span> <span class="o">=</span> <span class="k">await</span> <span class="n">request_human_approval</span><span class="p">(</span><span class="n">action</span><span class="p">,</span> <span class="n">risk_score</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">approval</span><span class="o">.</span><span class="n">granted</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="kc">True</span>
</span></span></code></pre></div><p>审批门的设计有一个细微但重要的考量：<strong>审批人需要有足够的信息来判断是否批准</strong>，但又不能被信息过载压垮。过于频繁的审批请求会导致&quot;通知疲劳&quot;，使审批人变成无脑点&quot;同意&quot;的机器。</p>
<h3 id="l6output输出过滤">L6：Output（输出过滤）</h3>
<p>在 Agent 的输出对外暴露之前，进行敏感信息检测和脱敏。</p>
<p>主要功能：</p>
<ul>
<li><strong>PII 脱敏</strong>：使用 Microsoft Presidio 框架检测并遮盖邮件地址、手机号、身份证号、信用卡号等</li>
<li><strong>DLP（数据防泄漏）</strong>：基于正则规则过滤敏感模式</li>
<li><strong>敏感度过滤</strong>：根据输出目的地（内部/外部/公网）应用不同级别的过滤策略</li>
</ul>
<h3 id="l7inter-agent多-agent-通信安全">L7：Inter-Agent（多 Agent 通信安全）</h3>
<p>当多个 Agent 协同工作（这是复杂任务的标准做法），Agent 之间的通信也需要安全防护。</p>
<p>AgentArmor 在这一层实现：</p>
<ul>
<li><strong>HMAC-SHA256 双向认证</strong>：确保消息确实来自声称的 Agent</li>
<li><strong>信任评分机制</strong>：基于历史行为动态计算每个 Agent 的信任等级</li>
<li><strong>委托深度限制</strong>：防止一个 Agent 通过另一个 Agent 间接完成它本身没有权限的操作</li>
<li><strong>时间戳防重放</strong>：确保消息不被恶意截获后重复使用</li>
</ul>
<p>委托深度限制这一点在国内的企业场景中尤其重要——当 Agent 需要调用外部 MCP 服务器或第三方 API 时，如果缺乏这层控制，攻击者可能通过&quot;Agent 链&quot;间接实现最初被拒绝的操作。</p>
<h3 id="l8identity身份与权限">L8：Identity（身份与权限）</h3>
<p>最外层，也是最根本的一层：每个 Agent 需要有明确的身份和最小权限集合。</p>
<p>核心机制：</p>
<ul>
<li><strong>JIT 权限（Just-In-Time）</strong>：Agent 不持有长期权限，而是在需要时才申请，用完即失效</li>
<li><strong>凭证轮换</strong>：定期自动更换 Agent 的 API 凭证，减少凭证泄露后的影响窗口</li>
<li><strong>原生 Agent Identity</strong>：每个 Agent 有不可伪造的身份标识，用于全链路审计</li>
</ul>
<h2 id="这套框架告诉我们的几件事">这套框架告诉我们的几件事</h2>
<h3 id="1-安全是架构问题不是-llm-问题">1. 安全是架构问题，不是 LLM 问题</h3>
<p>很多人把 AI 安全等同于&quot;模型对齐&quot;——认为只要 RLHF 做得好，AI 就安全了。但 AgentArmor 的 8 层架构中，<strong>只有 L1（Ingestion）和 L3（Context）与 LLM 直接相关</strong>，其余 6 层都是系统架构层面的安全措施。</p>
<p>这意味着，即使模型完全对齐，Agent 系统本身仍然可能有巨大的安全漏洞。</p>
<h3 id="2-纵深防御是唯一的出路">2. 纵深防御是唯一的出路</h3>
<p>没有哪一层是完美的——L4 的风险评分可能被对抗性绕过，L7 的 HMAC 可能被量子计算破解。但<strong>8 层叠加</strong>使得攻击者需要同时突破所有层才能造成完整危害，这极大地提高了攻击成本。</p>
<p>安全不是追求完美，而是提高攻击门槛。</p>
<h3 id="3-mcp-生态的安全盲区">3. MCP 生态的安全盲区</h3>
<p>值得关注的是，AgentArmor v0.4.0 引入了对 MCP（Model Context Protocol）生态的支持，包括对 Claude Code、OpenClaw、Cursor 等主流 Agent 工具的安全集成。</p>
<p>MCP 允许 Agent 调用外部工具服务器，但这也意味着 Agent 的安全边界扩展到了第三方服务——这些服务本身可能存在漏洞或恶意行为。AgentArmor 对 TLS 证书和 OAuth 2.1 合规性的检查，正是针对这一新增攻击面的应对。</p>
<h3 id="4-开源的价值">4. 开源的价值</h3>
<p>AgentArmor 本身是开源项目，这一点很重要。安全工具的可靠性需要社区验证——任何&quot;安全但不透明&quot;的方案，都难以获得真正的信任。</p>
<p>此外，开源也降低了中小团队使用高质量安全工具的门槛。对于没有专职安全工程师的团队，直接集成 AgentArmor 比从零设计一套安全架构要现实得多。</p>
<h2 id="延伸思考">延伸思考</h2>
<p>回到文章开头的事件——那个用 Agent 生成攻击性内容的案例，事后分析会发现：问题既不是 LLM 的幻觉，也不是 Prompt 注入，而是一个缺乏任何安全防御的系统被赋予了过多的自主权。</p>
<p><strong>安全的 Agent 系统 = 对齐的 LLM + 覆盖完整数据流的纵深防御架构</strong></p>
<p>这两者缺一不可。大多数团队目前只关注前者，而忽视了后者的工程复杂度。</p>
<p>对于在国内做 AI 落地的团队而言，还有一个特殊的考量：大多数主流 Agent 安全工具（AgentArmor、Guardrails AI、Rebuff 等）目前都以英文语境为主，对中文内容的安全检测能力相对薄弱。在企业级应用中，这部分能力缺口需要额外的专项投入来弥补。</p>
<hr>
<p><em>相关链接：</em><br>
<em><sup id="fnref1:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> 事件原博: <a href="https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/">https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/</a></em><br>
<em><sup id="fnref1:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> AgentArmor GitHub: <a href="https://github.com/Agastya910/agentarmor">https://github.com/Agastya910/agentarmor</a></em><br>
<em>[^3] AgentArmor PyPI: <a href="https://pypi.org/project/agentarmor-core/">https://pypi.org/project/agentarmor-core/</a></em></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Ilia Tishin, &ldquo;An AI agent published a hit piece on me&rdquo;, <em>The Shamblog</em>, Feb 2026. <a href="https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/">https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>AgentArmor GitHub Repository. <a href="https://github.com/Agastya910/agentarmor">https://github.com/Agastya910/agentarmor</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a>&#160;<a href="#fnref1:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item></channel></rss>