Защита ядра в Android 8 (Android Oreo)

Защита ядра в Android

За прошлый год более трети уязвимостей Android были найдены в ядре. 45% уязвимостей ядра, начиная с 2014 года, вызваны отсутствием проверки границ в функциях копирования данных из памяти ядра в память процесса и обратно. Патчи с решением данной проблемы были приняты в ядро Linux еще в 2016 году (Linux 4.8), но до Android они не дошли: здесь до сих пор используются ядра версий 3.18, 4.4 и других (в зависимости от чипсета). Google бэкпортировала исправления из Linux 4.8 в 3.18 и другие версии ядер Android. Теперь эти изменения доступны как часть Android 8.

Защита ядра в Android 8 (Android Oreo)

Другая связанная с ядром проблема — прямой доступ к памяти процессов из режима ядра. Хотя само ядро обычно не использует эту возможность, некорректно написанные драйверы могут это делать, что приводит к появлению уязвимостей. Для устранения этой проблемы в ARM v8.1 появился механизм PAN (Privileged Access Never), сходный по своей функциональности с системой SMAP (Supervisor Mode Access Prevention) в x86. Он запрещает обращаться к памяти процессов напрямую и принуждает использовать функции копирования памяти.

Процессоры архитектуры ARM v8.1 пока практически не распространены, поэтому разработчики Linux создали софтверный вариант той же функции. Он был интегрирован в Linux 4.3 для платформы ARM и в Linux 4.10 для ARM64. Google бэкпортировала этот механизм во все ядра Android начиная с 3.18.

Также ядра Android 4.4 и выше теперь включают в себя реализацию механизма KASLR (Kernel Address Space Layout Randomization), который рандомизирует участки расположения кода, хипа, данных ядра в памяти при каждой загрузке, делая атаки на ядро более сложными в реализации.

Все ядра 3.18 и выше теперь также включают в себя функцию post-init read-only memory, помечающую участки памяти, которые были доступны для записи во время инициализации ядра, как read-only уже после инициализации.

ВКонтакте
OK
Telegram
WhatsApp
Viber

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *