缓解过度的代理漏洞

OWASP 风险说明

过度自主性是一种漏洞,当大语言模型 (LLM) 被授予不必要或过于宽松的与其他系统交互的能力时,就会出现这种漏洞。当 LLM 可以调用外部工具、插件或函数(即具备“自主性”)时,此漏洞会使其能够执行意外的、未经授权的且可能有害的操作。攻击者可以利用此漏洞,通过使用提示注入或其他操纵技术来欺骗 LLM,使其将获得的代理权限用于恶意目的。核心问题不仅在于 LLM 可以采取行动,还在于这些行动的范围过广且控制不当。

Android 开发者为何应关注这些变化

在 Android 应用中向 LLM 授予过度的代理权限可能会导致严重的安全事件:

  • 未经授权的系统访问:如果 LLM 具有执行此操作的代理能力和相应的 Android 权限,攻击者可能会命令 LLM 访问、修改或删除本地 Android 设备上的文件(例如用户文档、应用数据)或连接的网络资源。
  • 数据渗出:LLM 可能会被诱骗从本地应用数据库(例如 Room)、SharedPreferences 或内部 API 读取敏感数据,然后将该信息渗出到外部来源(例如,使用 API 调用或电子邮件功能发送该信息)。模型还可能会泄露在训练阶段吸收的敏感信息,或用户在提示中提供的敏感信息。
  • 其他功能/系统遭到入侵:如果 LLM 可以控制其他功能(例如,使用隐式 intent 发送短信、拨打电话、在社交媒体上发帖、修改系统设置、进行应用内购买),攻击者可能会劫持这些功能来发送垃圾内容、散布虚假信息或执行未经授权的交易,从而导致直接的经济损失或用户伤害。
  • 拒绝服务:LLM 可能会被指示在应用内或针对后端服务重复执行资源密集型操作,例如运行复杂的数据库查询或以循环方式调用 API,从而导致应用无响应、电池电量耗尽、数据使用量过大,甚至导致后端系统拒绝服务。

面向 Android 应用开发者的缓解措施

针对 Android 应用中过度的代理行为的缓解措施侧重于对 LLM 可以访问或触发的每个工具和功能应用最小权限原则。

限制 AI 的工具箱(精细函数与开放式函数):

  • 提供最少的工具:LLM 应该只能访问在您的应用中完成其工作绝对需要的特定工具(函数、API、intent)。如果它不需要能够浏览网页或发送电子邮件,请不要向其公开这些功能。
  • 使用简单、单一用途的工具:最好为 LLM 提供只能执行一项特定操作(例如“读取特定类型的用户设置”)的工具,而不是可以执行任何操作(例如“执行任何 shell 命令”)的强大、开放式工具。

限制 AI 的功能

  • 精细的 Android 权限:当 LLM 触发的函数与 Android 系统资源或其他应用互动时,请验证您的应用是否仅请求并持有所需的最低 Android 权限。
  • 用户级权限:当 LLM 代表用户执行操作时,应使用该用户的特定权限和上下文,而不是使用范围更广、可能具有管理权限的应用级账号。这可验证 LLM 无法执行用户自己无法执行的任何操作。

始终由人来掌控(针对关键操作征求用户同意)

  • 需要用户批准:对于 LLM 可能建议或尝试执行的任何重要或有风险的操作(例如删除数据、进行应用内购买、发送消息、更改关键设置),请务必在界面中使用确认对话框,要求用户明确批准。这就像需要经理批准重大决策一样。

信任但验证(输入/输出验证和强大的后端)

  • 后端安全性:不要仅依赖 LLM 来决定是否允许某项操作。LLM 触发的函数连接到的任何后端服务或 API 都应具有自己的可靠身份验证、授权和输入验证机制,以仔细检查每个请求并验证其是否合法且在预期参数范围内。
  • 清理数据:与其他漏洞一样,务必要对输入到 LLM 中的数据和 LLM 为函数调用生成的参数进行清理和验证,以便在执行任何操作之前捕获任何恶意指令或意外输出。

摘要

过度自主性是一种严重漏洞,指 LLM 拥有过多的权限来与其他系统或函数互动,从而可能被诱骗执行有害操作。这可能会导致 Android 应用中出现未经授权的数据访问、系统入侵、经济损失或用户伤害。 缓解措施在很大程度上依赖于最小权限原则:严格限制 LLM 可用的工具和 Android 权限,验证每个工具是否具有最低限度的特定功能,并要求所有高影响操作都必须经过人工批准。

其他资源