Filtrowanie wywołań systemowych GPU

W Androidzie 16 QPR2 dodaliśmy makro SELinux, aby zwiększyć bezpieczeństwo sterowników jądra. To makro blokuje w środowisku produkcyjnym ograniczone kody IOCTL, takie jak przestarzałe kody IOCTL lub kody IOCTL do tworzenia sterowników jądra. Ogranicza też IOCTL do profilowania sterowników do aplikacji powłoki lub aplikacji, które można debugować. Użyj tego makra, aby zwiększyć bezpieczeństwo urządzenia.

Implementacja

Aby wzmocnić ochronę urządzenia za pomocą szczegółowego filtrowania wywołań systemowych, wywołaj makro set_xperm_filter w zasadach SEPolicy urządzenia, na przykład:

# 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)

Definicja makra dla set_xperm_filter znajduje się w system/sepolicy/public/te_macros.

Makro umożliwia unpriv_ioctls, blokuje restricted_ioctls i ogranicza instrumentation_ioctls do procesu shell lub aplikacji debuggable. Filtr dotyczy aplikacji, które rozpoczynają się w określonym target_sdk.

Ta funkcja została wdrożona na urządzeniach Pixel z procesorem graficznym Mali (Pixel 6–9). Firma Arm udostępniła oficjalną klasyfikację swoich IOCTL w Documentation/ioctl-categories.rst wersji r54p2. Ta lista będzie aktualizowana w przyszłych wersjach sterowników.

Test

Aby sprawdzić działanie sterownika jądra:

  • Sprawdź, czy sterownik nie blokuje prawidłowych kodów IOCTL aplikacji.

  • Sprawdź, czy niezaufane aplikacje nie mogą wykonywać instrumentacji ani ograniczonych wywołań IOCTL.