学习owasp agent应用安全top 10.

ASI01: Agent Goal Hijack

agent目标劫持,简单讲,就是让agent去干了不是它本来要做的事。
以官方文档中的一些例子来看:

  1. 比如在rag场景中,比如网页中隐藏的prompt,造成的间接prompt注入,或者rag文档里面包含prompt,造成间接的prompt注入,让agent窃取数据或者错误使用可用的工具等
  2. 比如公司外部沟通渠道发来的信息,如email、日历工具、聊天等,包含间接prompt注入命令,劫持公司内部的agent,将敏感信息外发出去
  3. 恶意的prompt覆盖,让金融agent给攻击者汇款
  4. 间接注入,导致agent产生错误的信息,影响商业决策

案例:

  1. EchoLeak - 攻击者发送包含prompt的邮件,让Microsoft 365 Copilot执行隐藏的prompt,将email、聊天信息等内容发送出去
  2. Operator prompt 注入 - 攻击者在网页中包含隐藏prompt,Operator agent在进行搜索或者rag时,执行了攻击者的prompt,访问了内部页面、暴露了用户数据
  3. 目标修改 - 攻击者在日历中创建恶意prompt,导致定时修改数据优先级等
  4. 攻击ChatGPT用户 - 恶意的google doc文档,用户执行时,恶意获取用户信息或者造成用户做出错误的决定

预防缓解措施:

  1. 不信任所有用户输入,包括用户输入、上传的文档或者获取的第三方内容。对输入进行验证或prompt注入防护处理
  2. 只给agent低权限,需要高权限或者产生重大影响的任务需要人工介入
  3. 锁定agent的system prompt。对prompt的修改需要走配置管理或者人工介入
  4. 运行时,在产生较大影响或者目标修改操作时,验证用户目标与agent目标是否一致。增加验证、记录、审计等
  5. 在构建智能体时,应考虑采用“意图胶囊”这一新兴模式,该模式将声明的目标、约束和上下文绑定至每个执行周期的签名封包内,以限制运行时的行为。使用意图胶囊,将用户指令、约束等生成胶囊并加密,并且每次操作的时候,都进行验证。
  6. 过滤、验证所有的数据
  7. 使用日志、并持续监控
  8. 持续的红队测试进行目标覆盖并验证回滚机制
  9. 将agent加入内部威胁项目,监控这些agent是否访问敏感数据、非目标行为,并进行调查

ASI02: Tool Misuse and Exploitation

工具误用与利用 例子:

  1. 过度权限工具访问 - 比如email总结agent可用在没有用户确认的情况下发送或者删除邮件
  2. 超范围工具访问 - 比如agent只需要Opportunity记录,但是实际访问到任意记录
  3. 转发未验证的数据 - 比如agent将未验证的模型输出转发给shell,比如rm删除命令,误用数据库管理工具删除数据库数据
  4. 不安全的浏览 - 比如研究用agent访问恶意链接下载恶意软件或者执行隐藏的prompt
  5. 循环放大 - 规划工具频繁调用昂贵的api,造成ddos或者账单爆炸
  6. 外部数据工具投毒:恶意第三方内容驱使工具执行不安全操作

案例:

  1. 工具投毒 - 攻击者攻击mcp工具,比如MCP tool descriptors, schemas, metadata, or routing information,来让agent执行恶意操作
  2. 间接注入造成工具调用 - 攻击者在pdf中插入恶意命令,agent执行该恶意命令
  3. 超权限api - 比如用来查看订单历史的agent,也可以用来发送退款
  4. 内部查询泄露数据到外部 - 攻击者组合内部信息获取agent和email agent,将内部信息泄露出去
  5. 工具伪造 - 比如在解析工具时,恶意的工具被优先解析到,比如恶意的是report,而实际的是report_finance
  6. 工具组合绕过edr - 攻击者通过组合多个合法工具,绕过edr检测
  7. 正常工具误用 - 比如编程的agent可以调用ping工具,但是攻击者可以使用这个工具进行dns数据传输

预防缓解措施:

  1. agent最小权限、工具最小权限
  2. action级别的验证和批准 - 敏感操作需要验证
  3. 沙盒执行命令、出网网络白名单
  4. 策略增强 - 对每一步的输出进行验证,验证意图和参数
  5. 工具额度限制
  6. 短时权限 - 仅提供临时权限,任务执行后失效
  7. 语义防火墙 - 对工具名称和版本进行验证,对工具调用进行语义验证
  8. 记录、监控、检测