Endurecimiento de Seguridad en GPU de Android: Reducción de la Superficie de Ataque con SELinux
Google y Arm implementan medidas de endurecimiento en la GPU Mali para Android, restringiendo IOCTLs de alto riesgo con SELinux y reduciendo vulnerabilidades.
Endurecimiento de Seguridad en GPU de Android: Un Esfuerzo Colaborativo para Reducir la Superficie de Ataque
El Equipo de Seguridad y Privacidad de Android de Google, en colaboración con Arm, ha implementado nuevas medidas de endurecimiento de seguridad para la GPU Mali, un componente utilizado en miles de millones de dispositivos Android en todo el mundo. La iniciativa busca reducir la superficie de ataque del controlador de la GPU mediante la restricción de acceso a IOCTLs (Controles de Entrada/Salida) de alto riesgo, utilizando políticas de SELinux (Security-Enhanced Linux).
¿Por qué es Importante la Seguridad de las GPU?
Las GPU se han convertido en un objetivo principal para los atacantes debido a su complejidad y acceso privilegiado al sistema. Desde 2021, la mayoría de los exploits basados en controladores del kernel de Android han tenido como blanco las GPU, en particular la interfaz entre el Controlador en Modo Usuario (UMD) y el Controlador en Modo Kernel (KMD). La entrada maliciosa puede explotar fallos en esta interfaz, lo que lleva a la corrupción de memoria y la compromisión del sistema.
Enfoque Técnico: Restricción de IOCTLs de GPU con SELinux
El Equipo Rojo de Android y Arm categorizaron los IOCTLs de la GPU Mali en tres grupos:
- IOCTLs sin Privilegios – Necesarios para el funcionamiento normal, accesibles para todas las aplicaciones.
- IOCTLs de Instrumentación – Utilizados para depuración y perfilado, restringidos a aplicaciones
shellodebuggable. - IOCTLs Restringidos – Obsoletos o solo para desarrollo, bloqueados en entornos de producción.
Para hacer cumplir estas restricciones, Google implementó un despliegue escalonado de políticas SELinux con el fin de minimizar interrupciones:
- Política Opt-In – Probada inicialmente en aplicaciones del sistema seleccionadas utilizando un nuevo atributo SELinux
gpu_harden. - Política Opt-Out – Aplicó el endurecimiento por defecto, permitiendo a los desarrolladores omitir las restricciones mediante:
- Dispositivos rooteados
android:debuggable="true"en el manifiesto de la aplicación- Excepciones permanentes en la política SELinux
Guía de Implementación para OEMs y Desarrolladores
Google ha proporcionado una guía paso a paso para que los socios adopten medidas de endurecimiento similares:
1. Utilizar la Macro de Endurecimiento a Nivel de Plataforma
Una nueva macro en system/sepolicy/public/te_macros permite el filtrado de IOCTLs específico para cada dispositivo:
- Permite IOCTLs sin privilegios para todas las aplicaciones (
appdomain). - Restringe IOCTLs de instrumentación a herramientas de depuración (
shell,runas_app). - Bloquea IOCTLs obsoletos según la versión del SDK objetivo.
2. Definir Listas de IOCTLs Específicas para el Dispositivo
Los OEMs deben crear un archivo ioctl_macros en el directorio de políticas SELinux de su dispositivo, categorizando los IOCTLs (por ejemplo, mali_production_ioctls, mali_instrumentation_ioctls).
Ejemplo:
define(`unpriv_gpu_ioctls', `0x0000, 0x0001, 0x0002')
define(`restricted_ioctls', `0x1110, 0x1111, 0x1112')
define(`instrumentation_gpu_ioctls', `0x2220, 0x2221, 0x2222')
La categorización oficial de IOCTLs de Arm está disponible en su documentación de la GPU r54p2.
3. Aplicar la Política al Dispositivo de GPU
Crear un archivo gpu.te en el directorio de políticas SELinux del dispositivo e invocar la macro de la plataforma con las listas de IOCTLs definidas.
4. Probar, Refinar y Aplicar
Seguir las mejores prácticas de desarrollo iterativo de políticas SELinux, auditando los registros de denegación para asegurar que no se interrumpan aplicaciones legítimas.
Impacto y Perspectivas Futuras
Este esfuerzo de endurecimiento reduce la superficie de ataque de las GPU Mali, protegiendo a los usuarios de vulnerabilidades conocidas y desconocidas. Al hacer que las vulnerabilidades sean inalcanzables, este enfoque proporciona beneficios de seguridad a largo plazo. Google alienta a los OEMs a adoptar estas medidas, reforzando la seguridad de las GPU en todo el ecosistema Android.
Documentación Oficial
- Macro de Endurecimiento SELinux: Filtrado de Syscalls de GPU
- Cambios de Comportamiento en Android 16: Filtrado de Syscalls de GPU
Agradecimientos
Un agradecimiento especial a Jeffrey Vander Stoep por sus contribuciones a esta iniciativa.