网络安全

谷歌解释如何缩小 Android 图形处理单元的攻击面

谷歌与 Arm 合作提出了一种通过 SELinux 策略限制不必要的 IOCTL 命令,从而强化 Mali GPU 单元软件和固件的方法。指南包括创建渐进式策略、对命令进行分类,并在设备上强制执行之前进行测试。

2025-12-09
2 分钟阅读
7 浏览量
فريق تحرير certi.news
谷歌解释如何缩小 Android 图形处理单元的攻击面

谷歌建议,通过限制生产环境中应用程序不需要的 IOCTL 命令来缩小 Android 图形处理单元的攻击面,而不是仅依赖发现并修复单个漏洞。这一做法源于 Android 红队与 Arm 的合作,双方对 Mali GPU 及其驱动程序进行了分析,重点是使用 SELinux 防止访问不必要的功能。

由于图形处理单元日益复杂,并且在系统中拥有较高权限,它已成为攻击者颇具吸引力的目标,因此这一步骤具有重要的安全意义。根据该材料,自 2021 年以来,基于 Android 内核驱动程序的攻击利用中,大多数都针对图形处理单元,攻击主要集中在用户模式驱动程序(称为 UMD)与拥有较高权限的内核模式驱动程序(即 KMD)之间的接口。

为什么缩小攻击面是优先事项?

通过这一接口传入的恶意输入可能利用缺陷,导致内存损坏。谷歌认为,让不必要的路径无法访问,是提高防护水平的一种有效且通常更快速的方式,同时继续发现并修复软件错误。

与 Arm 开展的联合分析涵盖了 Mali 驱动程序,该驱动程序用于约 45% 的 Android 设备。分析帮助确定了攻击面中构成安全风险、但并非设备在生产环境中运行所必需的部分。因此,该策略重点关注 IOCTL 命令。IOCTL 命令代表图形处理单元驱动程序的输入和输出,因而是攻击面的重要组成部分。

在所提出的方法中,Mali 命令分为三类:

  • 不受限制的命令:正常运行所必需,对应用程序保持可用。
  • 测量和工具命令:由性能分析和调试工具使用,用于监控图形处理单元的性能。
  • 受限制的命令:生产应用程序不应使用,包括专为图形处理单元开发而设计的命令,以及当前设备 UMD 版本中已不再使用的旧命令。

该策略旨在阻止生产环境中的旧命令和调试命令,同时将测量命令限制为 shell 或带有可调试标记的应用程序使用。生产命令则继续对普通应用程序开放。

逐步推出 SELinux 策略

谷歌采用了渐进式方法,以降低影响合法应用程序的可能性。流程从一项可选策略开始,并创建了名为 gpu_harden 的新 SELinux 属性,用于阻止测量命令;随后将其应用于一组特定的系统应用程序,以测试其影响。在这一阶段,使用 allowxperm 规则记录访问尝试,而不是直接阻止访问,然后监控拒绝日志,以确认不会发生崩溃。

确认方法安全后,该策略转为更严格的默认模型,并创建了名为 gpu_debug 的域,允许访问测量命令。这样,应用程序默认受到保护,同时在特定情况下为开发者提供例外:

  • 在具有 root 权限的设备上运行应用程序。
  • 在应用程序清单文件中将 android:debuggable="true" 属性设为 true。
  • 在应用程序的 SELinux 策略中请求永久例外。

在设备上应用策略的步骤

谷歌提供这些指南,旨在帮助合作伙伴和更广泛的生态系统采用类似机制,同时将通用策略逻辑与每台设备或每个驱动程序的具体细节分离。流程首先是在 Android 平台级别的 system/sepolicy 中使用通用宏模块。该模块位于 /sepolicy/public/te_macros 文件中,允许设备策略传入应进行过滤的 IOCTL 命令列表。

该模块设计为允许所有应用程序,即 appdomain,访问不受限制的命令列表;并在应用程序可调试时,将敏感的测量命令限制为 shellrunas_app 等调试工具使用。它还会根据应用程序所针对的 SDK 版本阻止具有较高权限的命令,同时保持与旧版应用程序的兼容性。

随后,设备开发者在设备专用的 SELinux 策略目录中创建 ioctl_macros 文件,例如 device/your_company/your_device/sepolicy/ioctl_macros,然后定义图形处理单元驱动程序专用的命令列表。谷歌建议至少分别建立生产命令、测量命令和调试命令列表,并纳入驱动程序专用的十六进制 IOCTL 编号。

Arm 在 r54p2 版本的 Documentation/ioctl-categories.rst 文件中提供了其 IOCTL 命令的正式分类,并指出该列表将随着未来驱动程序版本的发布持续更新。

强制执行前的测试

下一步是在设备策略目录中创建 gpu.te 文件,通过该文件调用通用宏模块,并传入设备标签和预先定义的 IOCTL 列表,从而将策略应用于图形处理单元的设备节点。

谷歌强调,SELinux 策略的开发应当保持为一个包含测试、完善和强制执行的迭代过程。这种方法可以收集真实使用数据,发现可能需要例外处理的情况,并逐步扩大策略范围,而不是从一开始就强制实施广泛限制。

谷歌认为,缩小攻击面不仅能够防范已知漏洞,还可能使尚未被发现或未来可能出现的漏洞无法通过受限路径访问。扩大这一方法需要 Android、设备制造商和生态系统合作伙伴之间开展合作;Android 安全团队表示,他们致力于支持更广泛地采用这些措施。

新闻来源
Google Security Blog
查看原始来源 ↗
ف
作者

فريق تحرير certi.news

同一分类

你可能还喜欢

查看所有新闻