Содержание статьи
Если верить официальной статистике Google, на сегодняшний день среди версий Android наиболее распространена Nougat — редакция мобильной платформы за номером 7.0 и 7.1 установлена в совокупности на 28,2% устройств. Вторую позицию уверенно занимает Android 8.0 и 8.1 Oreo с показателем 21,5%. На третьем месте закрепилась шестая версия Marshmallow — она работает на 21,3% девайсов. Android 5.0 и 5.1 Lollipop установлены суммарно на 17,9% устройств, а замыкает группу лидеров Android 4.4 KitKat с показателем 7,6% пользователей.
Согласно информации с сайта cvedetails.com, на сегодняшний день в Android насчитывается 2146 уязвимостей, при этом число выявленных багов начало экспоненциально расти примерно с 2014 года.
Не так просто оценить, сколько из перечисленных устройств вовремя получили патчи безопасности, которые закрывают уязвимости, но это явно далеко не все из них. Мало того: не все уязвимости вообще оказываются закрытыми, тем более в старых версиях, официальная поддержка которых прекращена. Проблему усугубляют производители устройств, которые зачастую не торопятся выпускать обновления.
Самая первая уязвимость Android
Самая первая уязвимость Android была обнаружена еще в октябре 2008 года в прошивке коммуникатора HTC T-Mobile G1. При просмотре веб-страниц с определенным содержимым ошибка в ПО позволяла выполнить вредоносный код, отслеживающий использование клавиатуры гаджета. Теоретически таким образом можно было реализовать кейлоггер, фиксирующий нажатия кнопок, и собирать вводимую пользователем при веб-серфинге информацию. Эта уязвимость представляла опасность только для одной-единственной модели коммуникатора, но само ее наличие наглядно показало: Android — не настолько безопасная и защищенная система, как считалось ранее.
С ростом популярности операционной системы энтузиасты и исследователи отыскивали все новые и новые баги в различных ее версиях. Безусловно, в рамках одной статьи мы не сможем охватить все две тысячи с лишним уязвимостей, обнаруженных за все время существования Android. Поэтому сосредоточимся только на самых интересных и опасных из них, причем — только в актуальных на данный момент версиях Android (тех, что сейчас еще могут встретиться в жизни).
Самым «дырявым» оказалось четвертое поколение Android, начиная с версии 4.4 KitKat. С него, пожалуй, и начнем наш обзор уязвимостей, выявленных в разное время в этой платформе.
BlueBorne
- CVE: CVE-2017-1000251, CVE-2017-1000250, CVE-2017-0781, CVE-2017-0782, CVE-2017-0785 и CVE-2017-0783
- Уязвимые версии Android: 4.4.4, 5.0.2, 5.1.1, 6.0, 6.0.1, 7.0, 7.1.1, 7.1.2, 8.0
- Для эксплуатации требуется: атакующий должен находиться на расстоянии не более десяти метров от уязвимого устройства, а на уязвимом устройстве должен быть включен Bluetooth
- Возможный результат: выполнение произвольного кода с привилегиями ядра системы, утечка данных
Это не отдельная уязвимость, а целый набор ошибок в стеке Bluetooth современных операционных систем, среди которых числится и Android. Серьезные баги содержатся в коде системной функции l2cap_parse_conf_rsp
ядра Linux, причем их можно обнаружить во всех версиях ядра, начиная с 3.3. Если в системе включена защита от переполнения стека CONFIG_CC_STACKPROTECTOR
, их использование приводит к возникновению критической ошибки в работе ядра.
Уязвимость CVE-2017-1000251 выявлена в модуле ядра под названием L2CAP, который отвечает за работу стека протокола Bluetooth. Еще одна уязвимость в стеке этого протокола получила обозначение CVE-2017-0783. Если на атакуемом девайсе включена подсистема Bluetooth, с их помощью можно удаленно передать на него специальным образом сформированные пакеты информации. Такие пакеты могут содержать вредоносный код, который выполнится в Android с привилегиями ядра системы. При этом для реализации атаки не потребуется предварительно сопрягать устройства или включать на них режим обнаружения. Достаточно, чтобы атакующий находился на расстоянии не более десяти метров от уязвимого устройства.
Поскольку взаимодействующие с протоколом Bluetooth компоненты ОС по умолчанию имеют высокие системные привилегии, эксплуатация этих уязвимостей теоретически позволяет получить полный контроль над атакуемым смартфоном и планшетом, включая доступ к хранящимся на устройстве данным, подключенным сетям и файловой системе. Также с помощью BlueBorne технически можно реализовывать атаки типа man-in-the-middle.
К BlueBorne также относят уязвимость CVE-2017-1000250 в стеке BlueZ Linux-реализации протокола Service Discovery Protocol (SDP). Эксплуатация уязвимости CVE-2017-1000250 может привести к утечке данных. Уязвимости CVE-2017-0781, CVE-2017-0782 и CVE-2017-0785 относятся к самой ОС Android, при этом с помощью первых двух вредоносное приложение может получить в системе привилегии ядра, а последняя позволяет реализовать утечку данных.
Для устранения уязвимостей BlueBorne 9 сентября 2017 года компания Google выпустила обновление безопасности. Также они не страшны устройствам, на которых используется режим Bluetooth Low Energy.
Extra Field
- CVE: нет
- Уязвимые версии Android: 2.3, 4.0, 4.1, 4.2, 4.3, 4.4
- Для эксплуатации требуется: модифицированное приложение
- Возможный результат: выполнение произвольного кода
Все приложения для Android распространяются в формате .APK и представляют собой ZIP-архив с тем отличием, что они имеют специальную цифровую подпись. Внутри находятся необходимые для работы компоненты, которые в процессе установки приложения извлекаются, а их контрольные суммы проверяются по эталонным значениям. С помощью уязвимости Extra Field злоумышленник может изменить содержимое установочного пакета APK, не повредив его цифровую подпись.
Внутри архива .APK располагается файл classes.dex, в котором содержится скомпилированный код приложения и набор служебных полей. Среди них есть:
- поле, хранящее имя файла с расширением;
- размер файла;
- поле Extra Field, в котором записан сам исполняемый код;
- таблица со списком используемых им классов.
Если в поле заголовка записать исходное значение без первых трех байт, значение длины поля Extra Field также изменится, благодаря чему появляется возможность дописать туда произвольный код, например перечислить классы, используемые троянской частью приложения. После этого можно добавить в архив, помимо оригинального classes.dex, его вредоносную копию, часть кода которой будет храниться в «расширенном» поле Extra Field оригинального classes.dex. При установке программы система прочитает содержимое видоизмененных полей, и, поскольку в них перечислены классы из модифицированного classes.dex, на устройство будет установлен именно этот файл.
Таким образом, уязвимость позволяет «подсадить» троянца в любое легитимное приложение с валидной цифровой подписью, разве что размер вредоносного модуля будет ограничен максимальным размером файла classes.dex в 65 533 байт. Уязвимость была обнаружена в начале июля 2013 года и была устранена в версиях Android, выпущенных позже этой даты.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»