Обзор инструментов безопасности Android 5.0 Lollipop

Безопасность Андроид 5.0

Безопасность Android

Lollipop — самое значительное обновление Android со времен Ice Cream Sandwitch. Программисты Google переработали многие компоненты системы, полностью изменили интерфейс, добавили так давно ожидаемые функции из кастомных прошивок и версий системы разных производителей. Но едва ли не наибольшее количество изменений компания внесла в компоненты системы, отвечающие за безопасность смартфона и пользовательских данных.

Безопасность Android: История

Для Google безопасность Android всегда играла далеко не последнюю роль. С самых первых версий Android был снабжен набором мощных средств защиты, среди которых можно отметить сандбоксинг приложений, систему разграничения полномочий, единый RPC-механизм для всех приложений и системы (Binder), язык программирования с проверкой границ буферов, контролируемую среду исполнения (dalvik) и, конечно же, повсеместное использование цифровых подписей (в том числе для исполняемого кода).

Безопасность Android 5.0 Lollipop
Безопасность Android 5.0 Lollipop

С каждым новым релизом механизмы безопасности дорабатывались и расширялись. Сначала Google занялась проблемами переполнения буфера и интегрировала наработки проекта OpenBSD в свою системную библиотеку Bionic (реализации функций dmalloc и calloc, Android 1.5), затем добавила поддержку бита No execute (NX) в 2.3, модифицировала систему сборки исходников для поддержки опций компилятора -fstack-protector и Wformat-security -Werror=format-security (защита от срыва стека и ошибок форматирования строк).

В версии 3.0 появилась встроенная функция шифрования всех пользовательских данных, основанная на проверенном годами и сотнями тысяч пользователей модуле Linux-ядра dm-crypt.

В Android 4.0 — так давно ожидаемый в корпоративном секторе API KeyChain, позволяющий устанавливать в систему и использовать сторонние цифровые сертификаты.

В 4.1 была интегрирована функция шифрования установленных приложений (в первую очередь для защиты от копирования) и поддержка хардварного шифрования с помощью HAL-библиотеки keymaster (в зависимости от производителя она может использовать тот или иной механизм шифрования, например M-Shield в чипах серии ОМАР4, на котором базировался Galaxy Nexus).

Шифрование андроид
Включаем шифрование данных                          Выбираем пользователя

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

В ноябре того же года был запущен сервис онлайн-проверки программ на вирусы прямо на устройстве пользователя. Изначально он работал только на 4.2, но к июлю 2013-го был интегрирован в пакет Google Services и стал доступен для всех устройств от 2.3 и выше.

Начиная с апреля 2014-го проверка выполняется не только на этапе установки приложения, но и периодически для всего установленного софта. Для борьбы с SMS-троянами в Android 4.2 была интегрирована функция принудительного подтверждения отправки СМС на короткие номера.

Другим новшеством Android 4.2 стала интеграция в ОС подсистемы мандатного контроля доступа SELinux, которая изначально работала исключительно в «разрешающем режиме» (permissive mode), а в 4.4 была переведена в режим enforcing, но с использованием всего нескольких контекстов безопасности для низкоуровневых компонентов системы, что не слишком повышало защищенность. В качестве дополнительной меры в 4.3 был запрещен запуск Setuid бинарников из каталога /system и задействована полномочий (capabilities) ядра Linux для системных компонентов.

В целом за шесть лет развития Android Google проделала серьезную работу по улучшению общей безопасности системы, не скатившись при этом до уровня Apple с ее методом тотальной блокировки всего и вся. Операционная система осталась гибкой, полностью подчиненной пользователю, но при этом достаточно безопасной для того, чтобы не возникало необходимости установки антивирусов и «включения режима параноика».

Тем не менее оказалось, что планы Google простираются гораздо дальше того, что уже сделано. Android 5.0 включает в себя столько security specific новшеств, что дальше, кажется, уже некуда. Но начнем с двух главных героев новостей: шифрования, которое заставляет девайсы тормозить после обновления до 5.0, и SELinux, который ломает root.

шифрование данных андроид
Включаем шифрование данных

Шифрование по умолчанию

В очередной раз следуя нога в ногу за Apple, Google внедряет в Android функциональность, которая совсем недавно появилась в iOS. На этот раз речь идет о шифровании свежекупленного устройства — начиная с Lollipop, все пользовательские настройки и данные в каталоге /data, а вместе с ними и внутренняя (эмулируемая) карта памяти будут шифроваться в режиме реального времени без ведома пользователя.

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

  • для защиты ключа шифрования (Master Key) будет использован случайно сгенерированный ключ вместо ключа, полученного из PIN-кода экрана блокировки;
  • этот случайный ключ (Key Encryption Key, КЕК) теперь может храниться в области памяти, защищенной с помощью реализованного в процессоре механизма Trusted Execution Environment (l ЕЕ), такого, например, как Qualcomm Secure Execution Environment.

Другими словами, возможность расшифровки данных теперь доступна только одному небольшому компоненту ОС, а именно HAL-библиотеке masterkey, работающей с ТЕЕ. Ни пользователь, ни другие части системы не смогут получить ключ шифрования в ее обход, так же как это не получится сделать человеку, который попытается снять дамп памяти напрямую с чипов NAND.

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

Во всем остальном реализация шифрования осталась на прежнем уровне. Это поблочное шифрование раздела /data с помощью модуля dm-crypt и алгоритма AES-128 в режиме СВС с задействованием функции ESSIV:SHA256 для получения векторов инициализации (IV). Сам ключ шифрования защищен с помощью КЕК-ключа, который может быть или получен из PIN-кода с помощью прогонки через функцию script, или сгенерирован случайным образом и сохранен в ТЕЕ. При этом, если юзер купит смартфон на базе Android 5.0 с активированным по умолчанию шифрованием и затем установит PIN-код, последний также будет использован для генерации КЕК.

Функция script для получения ключа из PIN-кода используется начиная с Android 4.4 и заменяет применявшийся ранее алгоритм PBKDF2. Последний оказался уязвимым для подбора на GPU (6-значный цифровой PIN за 10 с, 6-значный знаковый — 4 ч с помощью hashcat), тогда как script, по заявлению создателей, увеличивает время подбора примерно в 20 ООО раз и вообще не подходит для GPU по причине высоких требований к памяти.

Безопасность Андроид
Безопасность Андроид

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

Seandroid

Технология SELinux, разработанная Агентством национальной безопасности США, уже давно используется во многих корпоративных и настольных дистрибутивах для защиты от самых разных видов атак. Одно из основных применений SELinux — это ограничение приложениям доступа к ресурсам ОС и данным других приложений. С помощью SELinux можно, например, сделать так, чтобы сервер Apache имел доступ только к определенным файлам и диапазону портов, не мог запускать бинарники помимо заранее оговоренных и имел ограниченный доступ к системным вызовам. По сути, SELinux запирает приложение в песочницу, серьезно ограничивая возможности того, кто сможет его взломать.

Вскоре после появления на свет Android разработчики SELinux начали проект SEAndroid с целью перенести систему в мобильную операционную систему  и разработать ряд SELinux-правил для зашиты ее компонентов. Начиная с версии 4.2, наработки этого проекта входят в состав Android, но на первых порах (версия 4.2-4.3) используются исключительно для сбора информации о поведении компонентов системы (с целью последующего составления правил). В версии 4.4 Google перевела систему в активный режим, но с мягкими ограничениями для нескольких системных демонов (installd, netd, void и zygote). На полную же катушку SELinux заработал только в 5.0.

В Android 5.0 предусмотрено более 60 доменов SELinux (проще говоря — правил ограничений) почти для каждого системного компонента, начиная от первичного процесса init и заканчивая пользовательскими приложениями. На практике это означает, что многие векторы атак на Android, которые в прошлом использовались как самими юзерами для получения root, так и разного рода малварью, более не актуальны.

Так, уязвимость CVE-2011-1823, имевшая место во всех версиях Android до 2.3.4 и позволяющая вызвать memory corruption в демоне void, а далее передать управление шеллу с правами root (эксплойт Gingerbreak), не могла бы быть использована, будь она найдена в 5.0 — здесь, согласно правилам SELinux, void не имеет права запускать другие бинарники. То же самое справедливо и в отношении уязвимости CVE-2014-3100 в Android 4.3, позволяющей вызвать переполнение буфера в демоне keystore, и 70% других уязвимостей.

SELinux значительно снижает риск того, что устройством завладеют через эксплуатацию уязвимостей в низкоуровневых компонентах системы (многочисленных написанных на С и C++ демонах, исполняемых от имени root), но в то же время затрудняет получение root, так сказать, «для себя». Более того, отныне права root сами по себе не гарантируют полного контроля над системой, так как для SELinux нет разницы между обычным юзером и суперпользователем.

безопасность андроид устройств

К счастью, это ограничение довольно легко обойти, если заставить приложения с поддержкой root выполнять привилегированные действия в неограниченном SELinux-контексте init. Такая функциональность реализована в SuperSU с версии 2.23 (посредством прокси, который запускается на раннем этапе загрузки, работает в контексте init и исполняет команды, принятые от бинарника su). Однако для его установки нужен кастомный recovery, который, в свою очередь, может быть установлен либо после «получения полноценного root» на устройстве (проблема курицы и яйца), либо после разблокировки загрузчика.

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

Гостевой режим

Многопользовательский режим в Android появился еще в версии 4.2, но на протяжении развития четвертой ветки ОС оставался доступен только для планшетов (с возможностью включения на смартфоне с помощью хаков, например приложения 4.2 Multiple User Enabler). В 4.3 в его реализации появилась функция ограничения юзеров в полномочиях, что можно было использовать для запрета звонков, СМС и других возможностей девайса.

В Lollipop многопользовательский режим распространился также и на смартфоны, причем с несколькими весьма интересными доработками.

Первая из них — это так называемый гостевой режим, специальный пользовательский профиль, который самоуничтожается после возвращения к основному или любому другому профилю. По сути, это быстрый и простой способ получить доступ к чистой ОС, например для того, чтобы «дать позвонить» или провести эксперимент.

Второе новшество — это screen pinning, функция, не относящаяся напрямую к многопользовательскому режиму, но преследующая ту же цель. Она позволяет заблокировать экран на одном приложении без возможности получить доступ к домашнему экрану, «шторке» и другой функциональности ОС. Функция активируется в разделе «Безопасность» в настройках, далее необходимо запустить нужное приложение, нажать кнопку переключения между приложениями и тапнуть по значку в нижней правой части превью.

Для выхода из режима screen pinning достаточно одну-две секунды удерживать ту же кнопку переключения между приложениями. Однако устройство можно защитить, если установить PIN-код или графический ключ на экран блокировки и отметить соответствующую галочку при закреплении приложения на экране. В этом случае юзер не сможет получить доступ к ОС без ввода PIN’a или ключа.

Справедливости ради стоит отметить, что подобная функциональность, включая гостевые аккаунты и блокировку на приложении, уже существовала во многих доступных в маркете приложениях, однако 99% из них использовали концепцию «рабочий стол внутри приложения», то есть, по сути, вообще не изолировали пользовательские аккаунты от основной системы. Более продвинутая технология входит в состав системы безопасности Samsung Knox. Она позволяет запустить чистую ОС рядом с основной и полностью отрезать системы друг от друга, но доступна только в смартфонах и планшетах соответствующей марки.

Smart Lock

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

Однако в этот раз все намного проще. Smart Lock — это не что иное, как возможность автоматического отключения защиты экрана блокировки после подключения к одному из Bluetooth-устройств (умные часы, автомагнитола, TV Box), касания смартфоном NFC-метки или на основе местоположения. Фактически это официальная реализация функций, которые уже несколько лет доступны в сторонних приложениях, прошивках от производителей (мотороловский Trusted Bluetooth, например), Tasker, приложениях для Pebble и других умных часов (приложение SWApp Link).

Smart Lock Android 5.0 Lollipop
Настройки Smart Lock            В Андроид 5.0 Webview

Теперь функциональность этих приложений доступна в самой прошивке, а все, что остается сделать юзеру, — это установить на экран блокировки PIN-код или ключ, активировать Smart Lock в настройках безопасности (раздел Trusted Agents) и добавить доверенные Bluetooth-устройства, NFC-теги или места.

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

Обновляемый WebView

С первых версий Android включал в себя компонент WebView на базе WebKit, позволяющий сторонним приложениям использовать HTML/JS-движок для отображения контента. На нем же базировалось большинство сторонних браузеров. В KitKat WebView был серьезно модернизирован и заменен на движок из проекта Chromium (версии 33 в Android 4.4.3), что позволило разработчикам получить доступ к последним наработкам Google в области отображения веб-контента.

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

Начиная с Lollipop, WebView не просто базируется на Chromium, но и умеет обновляться через Google Play (в автоматическом режиме, незаметно для юзера). Это значит, что независимо от используемой версии Android разработчики приложений теперь всегда будут иметь дело с последней версией HTML/ JS-движка, включающей все последние нововведения. Но что более важно, Google теперь сможет закрывать уязвимости в движке так же быстро, как уязвимости в Google Chrome для Андроид. Всё что потребуется от пользователя, — это подключенный к сети смартфон с Андроид 5.0 или выше.

Kill Switch

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

Начиная с Android 5.0, сервис также включает в себя функцию Factory Reset Protection. После ее активации возможность сброса до заводских настроек будет заблокирована паролем, что, по мнению Google, будет препятствовать полноценному использованию смартфона или его продаже. Ведь однажды привязанный к аккаунту Google смартфон уже не может быть отвязан без сброса настроек.

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

Другие улучшения Android 5.0

  • Интеграция с ChromeOS. Братская ОС уже научилась получать уведомления от Android и запускать Android-приложения, а теперь она умеет автоматически впускать юзера, если рядом находится его телефон (этакий Smart Lock наоборот).
  • Улучшения в поддержке HTTPS и TLS/SSL. В Android 5.0 теперь включена поддержка TLSv1.1 и TLSv1.2. При согласовании ключей по возможности используется опция Forward Secrecy. Добавлена поддержка алгоритма AES-GCM, а ущербные в плане безопасности алгоритмы шифрования/хеширования (MD5, 3DES) отключены.
Автоматический логин в ChromeOS
Автоматический логин в ChromeOS
  • PIE везде. Android теперь явно требует, чтобы все нативные бинарники были скомпилированы с поддержкой PIE (Position-Independent Executables).
  • Расширенная поддержка FORTIFY_SOURCE. Такие функции, как stpcpy(), stpncpy(), read(), recvfrom(), FD_CLR(), FD_SET() и FDJSSET(), теперь также защищены с помощью механизма FORTIFY_SOURCE компилятора GCC (защита от срыва стека). Начальная поддержка FORTIFY_SOURCE появилась еще в Android 4.2.
В отличие от Linux, в хидере зашифрованного раздела Android нет М05-суммы ключа шифрования. Google убрала его намеренно, чтобы усложнить подбор пароля от ключа.

Выводы

Google не только сделала Android 5.0 таким, каким его хотят видеть пользователи и производители смартфонов, но и приложила все усилия для того, чтобы решить две основные проблемы безопасности: уберечь смартфон от посторонних глаз и защитить от уязвимости к атакам, направленным на получение прав root. Эффективны ли эти улучшения, покажет время, но уже сейчас можно точно сказать что последняя версия Андроид Lollipop — является самой защищенной.

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

Один комментарий

  1. Джеймс Бонд

    Спасибо за статью, очень полезная и нужная информация для всех.

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

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