Filtro delle chiamate di sistema della GPU

Android 16 QPR2 introduce una macro SELinux per proteggere i driver del kernel. Questa macro blocca in produzione le IOCTL con limitazioni, come le IOCTL deprecate o quelle destinate allo sviluppo dei driver del kernel. Limita inoltre le IOCTL utilizzate per la profilazione dei driver alla shell o alle app di cui è possibile eseguire il debug. Utilizza questa macro per migliorare la sicurezza del tuo dispositivo.

Implementazione

Per proteggere il dispositivo con un filtraggio granulare delle syscall, richiama la macro set_xperm_filter nella SEPolicy del dispositivo, ad esempio:

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

La definizione della macro per set_xperm_filter è in system/sepolicy/public/te_macros.

La macro consente unpriv_ioctls, blocca restricted_ioctls e limita instrumentation_ioctls al processo shell o alle app debuggable. Il filtro si applica alle applicazioni che iniziano da un target_sdk specificato.

Questa funzionalità è stata implementata sui dispositivi Pixel che utilizzano la GPU Mali (Pixel 6-9). Arm ha fornito la classificazione ufficiale delle proprie IOCTL in Documentation/ioctl-categories.rst della release r54p2. Questo elenco continuerà a essere aggiornato nelle future release dei driver.

Test

Per verificare il comportamento del driver del kernel:

  • Verifica che il driver non blocchi le IOCTL legittime delle applicazioni e

  • Verifica che le applicazioni non attendibili non possano eseguire le IOCTL di strumentazione e quelle con limitazioni.