Сегодня в выпуске: улучшения безопасности Android Q, обновления Android через Google Play, разбор DoS-эксплоита против почти всех смартфонов Samsung, исследование северокорейского клона игры Sim City, программирование интерфейса приложения без XML и головной боли, верификация целостности приложения, а также очередная подборка библиотек для программистов.
 

Почитать

 

Улучшения безопасности Android Q

Queue the Hardening Enhancements, What’s New in Android Q Security — две статьи инженеров Google о сделанных в Android Q улучшениях безопасности. Основные моменты:

  • Adiantum. С выпуском Android 7 Google ввела требование принудительного включения шифрования на всех новых устройствах с аппаратной поддержкой шифрования AES. Теперь благодаря разработанному в Google механизму шифрования Adiantum это требование распространяется и на все остальные смартфоны и планшеты. Реализация Adiantum базируется на применении быстрой хеш-функции NH, алгоритме аутентификации сообщений (MAC) Poly1305 и потоковом шифре XChaCha12, а также единоразовой операции на базе блочного шифра AES-256 для 16 байт в каждом блоке. В тестах на процессоре ARM Cortex-A7 Adiantum показывает пятикратное превосходство в скорости шифрования над AES-256-XTS.
  • Изоляция медиакодеков. В Android 7 Google вынесла медиасервер, отвечающий за обработку мультимедийных файлов, в изолированную песочницу с низкими правами доступа. В Android 8, в рамках проекта Treble, медиасервер был разделен на два компонента, работающих в изолированных песочницах. Однако набор софтверных кодеков оставался сплавлен с хардварными кодеками, которые, в свою очередь, имели доступ к драйверам. Все это приводило к тому, что баг в софтверном кодеке мог использоваться для получения контроля над драйвером медиаускорителя, и наоборот. В Android Q софтверные кодеки переехали в свою собственную песочницу.
  • Проверки на переполнение. Начиная с Android 7 инженеры Google постепенно внедряли функции проверки границ массивов и проверки на целочисленное переполнение с помощью компилятора LLVM (функции BoundSan и IntSan). В Android Q проверками удалось покрыть одиннадцать медиакодеков и стек Bluetooth. По словам разработчиков, уже существовавшие в Android 9 проверки позволили нейтрализовать одиннадцать различных уязвимостей.
  • Control Flow Integrity. В Android Q продолжили работать над внедрением функции CFI, которая строит граф вызовов функций и завершает процесс при выходе за его пределы. CFI позволяет предотвратить (или существенно усложнить) атаки, основанные на использовании ROP (Return Oriented Programming), когда эксплоит использует фрагменты кода уязвимого процесса для выполнения нужного действия (например, открытия шелла).
  • eXecute-Only Memory. В Android Q, работающем на платформе с процессорной архитектурой AArch64, код всех библиотек и бинарных файлов помечен как «только для исполнения». Так же как CFI, это делает атаки с использованием ROP более проблематичными, ведь атакующему теперь необходимо не только получить возможность передать управление нужному фрагменту кода, но и найти способ прочитать этот фрагмент.
  • Аллокатор Scudo. Для мультимедиакодеков Android Q теперь использует аллокатор памяти Scudo, затрудняющий атаки типа use-after-free, double-free и переполнение буфера.
Прогресс изоляции медиакодеков: от Android M до Q
Прогресс изоляции медиакодеков: от Android M до Q
 

Модульные обновления Android

Fresher OS with Projects Treble and Mainline — подробности проекта Mainline, позволяющего обновлять отдельные системные компоненты Android без обновления платформы целиком.

Обновления будут распространяться в специальном формате пакетов APEX, который вместо приложения содержит в себе определенный компонент системы. В данный момент таким компонентом может быть: мультимедийный кодек, мультимедийный фреймворк, DNS-резолвер, Conscrypt Java Security Provider, Documents UI, Permission Controller, ExtServices, данные часовых поясов, ANGLE (прослойка для трансляции вызовов OpenGL ES в OpenGL, Direct3D 9/11, Desktop GL и Vulkan), Module Metadata, сетевые компоненты, Captive Portal Login и настройки сетевого доступа.

Если один из этих компонентов потребует обновления или в нем будет найдена уязвимость, Google сможет оперативно выкатить фикс в Google Play, и его получат сразу все пользователи Android Q и выше.

Содержимое пакета APEX
Содержимое пакета APEX

Интересно, что APEX не производит обновление «на живую», когда старый компонент заменяется на новый. Раздел /system в Android недоступен для записи, поэтому APEX использует трюк с монтированием. Все файлы внутри пакета APEX находятся в образе файловой системы ext4. Когда происходит «установка» пакета, система монтирует этот образ поверх раздела /system в режиме bind. В результате файлы пакета как бы заменяют оригинальные файлы Android, хотя в реальности все остается на своих местах. Точно такой же трюк использует Magisk для установки модификаций Android без изменения раздела /system.

 

Как «окирпичить» любой смартфон Samsung

How to brick all Samsung phones — статья известного специалиста по IT-безопасности Эллиота Алдерсона (Elliot Alderson) о баге смартфонов Samsung, позволяющем стороннему разработчику залочить смартфон так, что им невозможно будет пользоваться.

Проблема заключается в приложении ContainerAgent, которое имеет ресивер SwitcherBroadcastReceiver, принимающий среди прочих интент com.samsung.android.knox.containeragent.LocalCommandReceiver.ACTION_COMMAND.

Объявление ресивера в манифесте
Объявление ресивера в манифесте

Декомпилировав код ресивера, можно выяснить, что при обработке интента проверяются значения com.samsung.android.knox.containeragent.LocalCommandReceiver.EXTRA_COMMAND_ID и android.intent.extra.user_handle. Если передать в первом 1001, а во втором 150 (идентификатор пользователя Knox User, который отвечает за защищенное хранилище данных), контейнер будет немедленно закрыт:

$ adb shell am broadcast -a com.samsung.android.knox.containeragent.LocalCommandReceiver.ACTION_COMMAND --ei "com.samsung.android.knox.containeragent.LocalCommandReceiver.EXTRA_COMMAND_ID" 1001 --ei "android.intent.extra.user_handle" 150

Если же передать 1001 и 0, произойдет немедленный переход на домашний экран:

$ adb shell am broadcast -a com.samsung.android.knox.containeragent.LocalCommandReceiver.ACTION_COMMAND --ei "com.samsung.android.knox.containeragent.LocalCommandReceiver.EXTRA_COMMAND_ID" 1002 --ei "android.intent.extra.user_handle" 0

Чтобы показать, как это можно использовать, Эллиот создал приложение, которое каждую секунду отправляет два этих интента и таким образом блокирует любые попытки использовать смартфон. Пользователь постоянно возвращается на домашний экран, а его защищенная папка, которую Samsung призывает использовать для хранения действительно важных данных, постоянно блокируется.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Check Also

Шах и мат! Как устроен нашумевший эксплоит checkm8 и как им воспользоваться

До недавнего времени джейлбрейка для iOS 13 не существовало. Точнее, до тех пор, пока хаке…

Оставить мнение