28 декабря 2017

Android Oreo: безопасности много не бывает

По материалам Android Developers Blog

Android Oreo буквально напичкан усовершенствованиями в области безопасности. В течение последних месяцев много рассказывалось, что делалось в этой области на платформе Android и в ее приложениях: от возможности более безопасно ставить приложения, отказа от ненадежных сетевых протоколов, обеспечения большего пользовательского контроля над идентификаторамизащиты ядраупрощения получения обновлений Android и до удвоения выплат по Android Security Rewards. Теперь, когда вышел Oreo, настало время взглянуть изнутри, чего удалось достичь в целом.

Расширенная поддержка аппаратной безопасности

Android уже поддерживал доверенную загрузку (Verified Boot), которая создана специально для того, чтобы не давать устройствам загружаться с поддельным софтом. А в Android Oreo была добавлена эталонная реализация для Verified Boot, работающая с Project Treble, она получила название Android Verified Boot 2.0 (AVB). В AVB есть пара классных функций, чтобы упростить получение обновлений и сделать их более безопасными. К ним относится в том числе защита от отката. Защита от отката разработана для того, чтобы устройство не могло загрузиться, если версию ОС откатили к более старой, что может сделать его уязвимым для угроз. Для того, чтобы это стало возможным, устройства сохраняют версию ОС при помощи безопасной среды исполнения (Trusted Execution Environment,TEE), подписывая данные. Pixel 2 и Pixel 2 XL обладают этой защитой, а другим производителям устройств рекомендуется добавлять эту функцию в свои новые аппараты.

Oreo также включает в себя новый слой аппаратных абстракций (Hardware Abstraction Layer, HAL) OEM Lock, который дает производителям устройств большую свободу в выборе того, как защитить устройство, будь оно заблокированным, разблокированным или без возможности блокировки. К примеру, новые устройства Pixel используют этот HAL, чтобы передавать команды в загрузчик. Загрузчик анализирует эти команды, когда устройство загружается в следующий раз, и определяет, должны ли произойти изменения в блокировке, которые надежно хранятся в RPMB (Replay Protected Memory Block). Если ваше устройство украли, эти меры призваны помочь сохранить ваши данные и помешать перезагрузить аппарат. Этот новый HAL поддерживает даже перенос блокировки при смене «железа».

Что касается аппаратной части, Google вкладывает средства в поддержку защищенного от взлома «железа», например, модуля безопасности, который стоит в любом Pixel 2 и Pixel 2 XL. Это физический чип, который способен предотвратить многие программные и аппаратные атаки, а также устойчив к физическому проникновению. Модуль безопасности предотвращает получение кода шифрования без наличия пароля к устройству и ограничивает число попыток разблокировки, что делает невозможными многие попытки взлома в силу временных ограничений.

В то время как аппараты Pixel обладают специальным модулем безопасности, все новые устройства с сервисами Google и Android Oreo на борту должны проходить аттестацию ключа. Это предоставляет механизм жесткой проверки идентификаторов, таких как идентификаторы устройств и компонентов.

Были добавлены и новые функции для корпоративных устройств. В рабочих профилях ключи шифрования исключаются из оперативной памяти в случае, когда профиль отключен или администратор вашей компании удаленно закрывает доступ к профилю. Это позволяет обеспечивать безопасность корпоративных данных в неактивном состоянии.

Повышение безопасности платформы и изоляция процессов

В рамках Project Treble фреймворк Android был переработан, чтобы процесс получения обновлений был проще и стоил меньше для производителей устройств.  Это разделение кода платформы и модифицированного кода производителя  также было осуществлено для повышения безопасности. Следуя принципу минимальной привилегии, эти HAL работают в собственной среде и имеют доступ только к абсолютно необходимым драйверам и разрешениям.

Далее в продолжение работы над защитой хранилища медиа, начатой в Android Nougat, в Oreo убрали большую часть прямого доступа к аппаратной части из медиа фреймворков, результатом стала лучшая изоляция. Более того, для всех медиакомпонентов была внедрена CFI (Control Flow Integrity). Большая часть уязвимостей сейчас реализуется посредством разрушения нормального потока управления приложения, которое начинает проявлять вредоносную активность, используя все свои привилегии. CFI – это мощный механизм безопасности, который не позволяет вносить произвольные изменения в исходный граф потока управления скомпилированного двоичного файла, что значительно осложняет осуществление подобных атак.

Вдобавок к этим изменениям в архитектуре и CFI в Android Oreo есть еще ряд полезных усовершенствований безопасности платформы:

  • Фильтрация Seccomp: делает ряд неиспользуемых системных вызовов недоступными для приложений, так что они не могут быть использованы потенциально вредоносными приложениями;
  • Защищенная пользовательская копия: недавнее исследование уязвимых мест в безопасности на Android показало, что недействительная или отсутствующая проверка границ имела место примерно в  45% уязвимостей ядра. Поэтому функцию проверки границ портировали в ядра Android от  3.18 и выше, что затрудняет использование уязвимостей, а также помогает разработчикам выявлять проблемы и исправлять баги в своем коде;
  • Эмуляция PAN (Privileged Access Never): также портирована в ядра от 3.18 и выше, функция не позволяет ядру получать доступ напрямую к пользовательскому пространству и гарантирует, что разработчики будут использовать для доступа к нему защищенные функции;
  • Рандомизация размещения адресного пространства в ядре (Kernel Address Space Layout Randomization, KASLR): поскольку Android много лет поддерживает в пользовательском пространстве рандомизацию размещения адресного пространства, KASLR была портирована для того, чтобы  уменьшить уязвимости в ядрах Android от 4.4 и выше. Работа KASLR состоит в том, чтобы случайным образом изменяя место кода ядра при каждой загрузке, сделать атаки, основанные на повторном использовании кода, менее вероятными и труднее осуществимыми, в особенности удаленно.

Безопасность приложений и изменения в идентификаторе устройства

Приложения Android с мгновенным запуском (Instant Apps) работают в ограниченном пространстве, ограничивающем разрешения и возможности, такие как чтение списка приложений на устройстве или передача чистого трафика. Будучи представленными во время релиза Android Oreo, Instant Apps поддерживают устройства на Android Lollipop и выше.

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

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

Перенос статических значений Android ID и Widevine в значения приложений, что позволяет ограничить использование атрибутов устройства и неперенастраиваемых идентификаторов.

В соответствии с требованием по анонимности IETF RFC 7844, значение net.hostname теперь пустое и DHCP клиент больше не отправляет имя хоста.

Для приложений, которые требуют ID устройства, был создан Build.getSerial() API, который защищает его помимо разрешений.

Вместе со специалистами по безопасности из Лионского университета и ряда других организаций была разработана надежная система рандомизации МАС адресов для сканирования траффика Wi-Fi на множестве аппаратных платформ.

Разработчики Android Oreo обещают в дальнейшем продолжить усовершенствования системы безопасности, в том числе и на основе отзывов и предложений пользователей.

Читайте также