Усиление безопасности GPU в Android: сокращение вектора атак с помощью SELinux
Google и Arm внедрили меры по защите Mali GPU в Android. Узнайте, как SELinux ограничивает опасные IOCTL-вызовы, снижая риски эксплуатации уязвимостей.
Усиление безопасности GPU в Android: совместные меры по сокращению вектора атак
Команда безопасности и конфиденциальности Android от Google в сотрудничестве с Arm внедрила новые меры по усилению защиты графического процессора Mali, используемого в миллиардах Android-устройств по всему миру. Инициатива направлена на сокращение вектора атак драйвера GPU путём ограничения доступа к высокорисковым IOCTL (Input/Output Controls) с помощью политик SELinux (Security-Enhanced Linux).
Почему безопасность GPU имеет значение
Графические процессоры стали основной мишенью для злоумышленников из-за своей сложности и привилегированного доступа к системе. С 2021 года большинство эксплойтов на основе драйверов ядра Android нацелены именно на GPU, особенно на интерфейс между драйвером пользовательского режима (UMD) и драйвером режима ядра (KMD). Вредоносные данные могут эксплуатировать уязвимости в этом интерфейсе, приводя к повреждению памяти и компрометации системы.
Технический подход: ограничение IOCTL-вызовов GPU с помощью SELinux
Команда Android Red Team и Arm разделили IOCTL-вызовы Mali GPU на три категории:
- Непривилегированные IOCTL – необходимы для нормальной работы, доступны всем приложениям.
- Инструментальные IOCTL – используются для отладки и профилирования, ограничены для приложений с правами
shellилиdebuggable. - Ограниченные IOCTL – устаревшие или предназначенные только для разработки, блокируются в производственных средах.
Для внедрения этих ограничений Google реализовал поэтапное развёртывание политик SELinux, чтобы минимизировать риски сбоев:
- Политика с возможностью включения – изначально тестировалась на отдельных системных приложениях с использованием нового атрибута SELinux
gpu_harden. - Политика с возможностью отключения – усиление защиты применялось по умолчанию, позволяя разработчикам обходить ограничения через:
- Рутированные устройства
- Параметр
android:debuggable="true"в манифесте приложения - Постоянные исключения в политиках SELinux
Руководство по внедрению для OEM-производителей и разработчиков
Google предоставил пошаговое руководство для партнёров по внедрению аналогичных мер защиты:
1. Использование макроса усиления защиты на уровне платформы
Новый макрос в system/sepolicy/public/te_macros позволяет фильтровать IOCTL-вызовы в зависимости от устройства:
- Разрешает непривилегированные IOCTL для всех приложений (
appdomain). - Ограничивает инструментальные IOCTL для средств отладки (
shell,runas_app). - Блокирует устаревшие IOCTL в зависимости от целевой версии SDK.
2. Определение списков IOCTL для конкретных устройств
OEM-производителям необходимо создать файл ioctl_macros в директории политик SELinux своего устройства, категоризировав IOCTL-вызовы (например, mali_production_ioctls, mali_instrumentation_ioctls).
Пример:
define(`unpriv_gpu_ioctls', `0x0000, 0x0001, 0x0002')
define(`restricted_ioctls', `0x1110, 0x1111, 0x1112')
define(`instrumentation_gpu_ioctls', `0x2220, 0x2221, 0x2222')
Официальная категоризация IOCTL от Arm доступна в документации по архитектуре GPU r54p2.
3. Применение политики к устройству GPU
Создайте файл gpu.te в директории политик SELinux устройства и вызовите платформенный макрос с определёнными списками IOCTL.
4. Тестирование, доработка и внедрение
Следуйте лучшим практикам итеративной разработки политик SELinux, анализируя логи отказов, чтобы убедиться в отсутствии нарушений работы легитимных приложений.
Влияние и перспективы
Эти меры по усилению защиты сокращают вектор атак графических процессоров Mali, защищая пользователей как от известных, так и неизвестных уязвимостей. Благодаря тому, что уязвимости становятся недоступными для эксплуатации, данный подход обеспечивает долгосрочные преимущества в области безопасности. Google призывает OEM-производителей внедрять эти меры для усиления защиты GPU во всей экосистеме Android.
Официальная документация
- Макрос усиления SELinux: фильтрация системных вызовов GPU
- Изменения в поведении Android 16: фильтрация системных вызовов GPU
Благодарности
Особая благодарность Джеффри Вандер Ступу за вклад в реализацию данной инициативы.