GPU-Syscall-Filterung

Android 16 QPR2 fügt ein SELinux-Makro hinzu, um Kernel-Treiber zu härten. Dieses Makro blockiert eingeschränkte IOCTLs in der Produktion, z. B. veraltete IOCTLs oder solche für die Entwicklung von Kernel-Treibern. Außerdem werden IOCTLs für die Treiberprofilerstellung auf Shell- oder debugfähige Apps beschränkt. Verwenden Sie dieses Makro, um die Sicherheit Ihres Geräts zu erhöhen.

Implementierung

Wenn Sie Ihr Gerät mit einer detaillierten Syscall-Filterung härten möchten, rufen Sie das Makro set_xperm_filter in der SEPolicy Ihres Geräts auf, z. B.:

# set_xperm_filter(target_context, allowed_target, unpriv_ioctls, restricted_ioctls, instrumentation_ioctls)
# Allow targets to harden their IOCTL interfaces by specifying
# unprivileged, blocked, and instrumentation-specific IOCTLs for appdomain.
#
# Parameters:
#   target_context: The target context to apply the filter to.
#   allowed_target: Additional `appdomain` target to exempt from hardened policy.
#     Allows for an allowlist of services, or gating by a target SDK.
#   unpriv_ioctls: IOCTLs to allow across appdomain.
#   restricted_ioctls: IOCTLs to deny across appdomain.
#   instrumentation_ioctls: IOCTLs intended to be used in development.
#     IOCTLs will be allowed from `shell` or `debuggable` applications.

define(`unpriv_gpu_ioctls', `0x0000, 0x0001, 0x0002')
define(`restricted_ioctls', `0x1110, 0x1111, 0x1112')
define(`instrumentation_gpu_ioctls', `0x2220, 0x2221, 0x2222')
set_xperm_filter(
  gpu_device,
  untrusted_app_sdk_gate,
  unpriv_ioctls,
  restricted_ioctls,
  instrumentation_ioctls)

Die Makrodefinition für set_xperm_filter finden Sie unter system/sepolicy/public/te_macros.

Das Makro erlaubt unpriv_ioctls, blockiert restricted_ioctls und beschränkt instrumentation_ioctls auf den shell-Prozess oder debuggable-Apps. Der Filter gilt für Anwendungen, die ab einem bestimmten target_sdk gestartet werden.

Diese Funktion wurde auf Pixel-Geräten mit der Mali-GPU (Pixel 6–9) implementiert. Arm hat in der Version r54p2 eine offizielle Kategorisierung seiner IOCTLs in Documentation/ioctl-categories.rst bereitgestellt. Diese Liste wird auch in zukünftigen Treiberversionen gepflegt.

Test

So prüfen Sie das Verhalten des Kernel-Treibers:

  • Prüfen Sie, ob der Treiber keine legitimen Anwendungs-IOCTLs blockiert.

  • Prüfen Sie, ob nicht vertrauenswürdige Anwendungen keine Instrumentierungs- und eingeschränkten IOCTLs ausführen können.