Безопасность на всех версиях Android

Безопасность на всех версиях Android

Тёмная Паутина ©

Начиная с первой версии, заканчивая последней.

Тёмная Паутина

Привет ещё раз, подписчики канала "Тёмная Паутина". Признавайтесь, кто из вас владелец ведра? В этой статье мы разберём безопастность системы вашего девайса и выясним - на самом деле ли Андроид настолько плох?

Первые времена

В Android 1.0 безопастность обеспечивается 5-ключевыми подсистемами:

  1. PIN-код экрана блокировки.
  2. Песочницы для приложений. Приложение имеет полный контроль над файлами своей песочницы (/data/data/имя.пакета), но не может получить доступ к системным файлам и файлам других приложений.
  3. Каждое приложение обязано указывать список нужных для его работы полномочий. Полномочия позволяют использовать те или иные системные API (доступ к камере, микрофону, сети и так далее).
  4. Приложения обязаны быть подписаны разработчика. Во время установки новой версии приложения система сверяет цифровые подписи старой и новой версий приложения и не допускает установку, если они не совпадают.
  5. Язык Ява и виртуальная машина обеспечивают защиту от многих типов атак, перед которыми уязвимы приложения на небезопасных языках, таких как C и C++. Переполнение буфера или повторное использование освобожденной памяти в Java невозможны в принципе.

Шифрование данных

Права доступа и другие ограничения времени исполнения — хорошая защита до тех пор, пока злоумышленник не получит физический доступ к устройству. Но что будет, если забытый пользователем смартфон попадет в руки подготовленного хакера? Многие устройства во времена первых версий ОС имели уязвимости в загрузчике или не блокировали его вовсе. Поэтому снять дамп NAND-памяти было проще простого.

Для борьбы с этой проблемой в Android 3.0 появилась встроенная функция шифрования данных, основанная на проверенном годами и сотнями тысяч пользователей модуле Linux-ядра dm-crypt. С Android 5 эта функция стала обязательной, то есть Google потребовала включить ее для всех устройств с поддержкой хардварного ускорения шифрования (это в первую очередь 64-битные процессоры ARM).

Вплоть до последнего времени Google позволяла производителям смартфонов использовать любой механизм шифрования, но с Android 10 FBE стало обязательным. Более того, начиная с Android 9 шифрование обязательно не только для устройств с хардварной поддержкой шифрования, но и вообще для всех устройств.

Доверенная загрузка

Еще в Android 4.4 Google реализовала механизм Verified Boot. Долгое время механизм находился в стадии развития и только с выпуском Android 7 научился полагаться на хардварное хранилище ключей (TEE) и запрещать загрузку при компрометации одного из компонентов (если этого захочет производитель устройства).

Начиная с Android 8 в составе Verified Boot появилась официальная реализация защиты от даунгрейда, когда система явно запрещает установку старых версий прошивок.

Защита от срыва стека

Шифрование данных и режим доверенной загрузки спасут от злоумышленника, который не сможет обойти экран блокировки и попытается снять дамп с уже выключенного устройства или загрузить устройство с альтернативной прошивкой. Но они не защитят от эксплуатации уязвимостей в уже работающей системе.

Весь низкоуровневый код Android с версии 1.5 собирается с применением механизма компилятора GCC ProPolice для защиты от срыва стека на этапе компиляции. Начиная с версии 2.3 в коде задействованы «железные» механизмы защиты от срыва стека (бит No eXecute (NX), доступный с ARMv6).

Начиная с восьмой версии Android собирают с применением технологии Control Flow Integrity (CFI), предназначенной для борьбы с эксплоитами, использующими технику ROP (Return Oriented Programming). При включении CFI компилятор строит граф вызовов функций и встраивает код сверки с этим графом перед каждым вызовом функции. Если вызов происходит по отклоняющемуся от графа адресу, приложение завершается.

Начиная с Android 10 медиакодеки используют аллокатор памяти Scudo, затрудняющий атаки типа use-after-free, double-free и переполнение буфера.

Google Play Protect

В феврале 2012 года Google включилась в борьбу со зловредными приложениями: начал работать сервис онлайн-проверки приложений Bouncer. Он запускал каждое публикуемое в Google Play приложение в эмуляторе и прогонял через многочисленные тесты в поисках подозрительного поведения.

Версия Play Store для Android 8 и выше показывает статус проверки приложения на странице приложения, а также выводит красивый зеленый щит с надписью «Все хорошо, парень, ты защищен» в списке установленных приложений.

Smart Lock

Сегодняшний пользователь привык к датчикам отпечатков пальцев и сканированию лица для разблокировки смартфона, но шесть лет назад заставить пользователя защитить смартфон с помощью PIN-кода или пароля было сложно. Поэтому инженеры Google создали не самую надежную (а в некоторых случаях и совсем ненадежную), но действенную систему под названием Smart Lock.

По словам Google, Smart Lock позволил поднять уровень использования паролей для блокировки экрана среди пользователей в два раза. Однако стоит иметь в виду, что из всех методов разблокировки, доступных в Smart Lock, более-менее надежным можно считать только разблокировку с помощью устройства Bluetooth. И это только в том случае, если твоя цель — защитить украденное устройство, а не отстаивать перед полицейским свое право на частную жизнь.

По словам Google, Smart Lock позволил поднять уровень использования паролей для блокировки экрана среди пользователей в два раза. Однако стоит иметь в виду, что из всех методов разблокировки, доступных в Smart Lock, более-менее надежным можно считать только разблокировку с помощью устройства Bluetooth. И это только в том случае, если твоя цель — защитить украденное устройство, а не отстаивать перед полицейским свое право на частную жизнь.

Kill Switch

В августе 2013 года Google запустила веб-сервис Android Device Manager, с помощью которого пользователи получили возможность заблокировать смартфон или сбросить его до заводских настроек. В качестве клиентской части на смартфоне сервис использовал обновляемый через Google Play компонент Google Play Services, поэтому функция стала доступна для любых устройств начиная с Android 2.3.

Проблема здесь только в том, что загрузчик большинства смартфонов можно разблокировать вполне официально. А после этого его можно полностью перепрошить.

Выводы

Усилия Google в итоге дали результат. Большую часть уязвимостей в смартфонах теперь находят не в самом Android, а в драйверах и прошивках конкретных устройств. По общему количеству уязвимостей Android уже плетется позади iOS, а цены за сами уязвимости в Android превысили цены за уязвимости в iOS.

Современный смартфон на Android (если, конечно, это не китайский ширпотреб) неприступен практически со всех сторон. С него не получится снять дамп памяти, его нельзя окирпичить, выполнить даунгрейд, взломать с помощью обхода экрана блокировки. Ослабить всю эту систему защиты способен лишь сам производитель устройства.


Report Page