缓解过度的代理漏洞

OWASP 风险说明

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

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

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

  • 未经授权的系统访问:如果通过函数调用将设备的文件系统和存储资源或执行网络调用的能力暴露给模型,攻击者可能会使用提示注入来访问、修改或删除设备上的文件(例如用户文档、应用数据)或连接的网络资源。
  • 数据渗漏:如果应用使用函数调用来授予 LLM 对本地数据(例如 Room 数据库、SharedPreferences 或内部 API)的访问权限。恶意提示可能会诱骗模型检索敏感信息并将其传递给外部工具,例如电子邮件或网络请求函数。
  • 其他功能/系统遭到入侵:如果 LLM 可以控制其他功能(例如,使用隐式 intent 发送短信、拨打电话、在社交媒体上发帖、修改系统设置、进行应用内购买),攻击者可能会劫持这些功能来发送垃圾内容、散布虚假信息或执行未经授权的交易,从而直接导致经济损失或用户受到伤害。
  • 拒绝服务:如果 LLM 与公开数据库查询或网络请求的函数调用集成,恶意提示可能会反复触发这些操作。这可能会导致系统健康状况下降,例如电池电量消耗过快、数据流量超额或本地资源耗尽。

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

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

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

  • 提供最少的工具:LLM 应该只能访问在您的应用中完成其工作绝对需要的特定工具(函数、API、intent)。如果它不需要能够浏览网页或发送电子邮件,请不要向其公开这些功能。
  • 使用简单且用途单一的工具:设计范围有限且明确的工具。例如,提供仅读取特定类型的用户设置的工具,而不是接受开放式参数以访问多个数据源的通用工具。避免通过允许模型定义命令或实参来向 LLM 公开强大的系统级 API(例如 Runtime.getRuntime().exec())。

限制 AI 的功能

  • 精细的 Android 权限:当 LLM 触发的函数与 Android 系统资源或其他应用互动时,请验证您的应用是否仅请求并持有所需的最低 Android 权限。
  • 用户级权限:当 LLM 代表用户执行操作时,应使用该用户的特定权限和上下文。LLM 采取的行动必须是对特定用户命令的直接响应。

由人工负责(针对关键操作征求用户同意)

  • 需要用户批准:对于 LLM 可能建议或尝试执行的任何重要或有风险的操作(例如删除数据、进行应用内购买、发送消息、更改关键设置),始终需要在界面中使用确认对话框来征得用户明确批准。不妨将此视为需要经理批准重大决策。

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

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

摘要

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

其他资源