Сегодня в выпуске: отличия облегченного Android Go от стандартного Android, новые механизмы защиты Android P, инструкция по внедрению обратного TCP-шелла в Android с помощью Frida, распознавание лиц и текста с помощью ML Kit, генерация кода Kotlin с помощью аннотаций и описание новейшего MotionLayout. А также: подборка ссылок на ресурсы, облегчающие дизайн UI, и 14 свежих библиотек.
 

Инструменты и ресурсы

  • XDebug — не новый, но весьма полезный модуль Xposed, который позволяет отлаживать любое установленное на смартфон приложение;
  • exploit_playground — подборка эксплоитов с комментариями.
 

Почитать

 

Чем отличается Android Go от обычного Android

Android Go — How does Google’s lightweight ecosystem compare to the original? — статья с описанием отличий облегченной версии Android от полноценной. Основные тезисы:

  • В отличие от устройств Android One, которые поставляются на рынок с «чистым Android», смартфоны на Android Go будут продаваться с модификациями и приложениями производителя смартфона (если он этого пожелает).
  • Единственное заметное пользователю отличие Android Go от обычного Android — дизайн окна запущенных приложений.
  • В Android Go отключены некоторые ненужные большинству пользователей функции: Daydream VR, функция разделения экрана, поддержка Android Auto и Android Wear, Android for Work.
  • По умолчанию в Android Go отключено шифрование, однако некоторые устройства позволят его включить.
  • Android Go гораздо более агрессивен в уничтожении фоновых приложений (он старается убрать из памяти все, что не связано с самой операционной системой).
  • В Android Go по умолчанию включен zRAM, сжимающий данные в оперативной памяти для ее экономии.
  • Некоторые предустановленные приложения Android Go — это веб-приложения; например, Gmail Go и Google Maps Go — это WebView, в котором открывается написанный на HTML5/JS интерфейс, причем Google Maps Go весит 1 Мбайт, а Gmail Go больше стандартного приложения Gmail.
  • Часть приложений из комплекта Android Go сильно урезаны: YouTube Go не поддерживает комментарии и не позволяет ставить лайки, Assistant Go не имеет каких-либо опций, другие, наоборот, предоставляют полный набор функций: Google Maps Go почти в точности повторяет оригинальное приложение.
Gmail Go и Google Maps Go

Gmail Go и Google Maps Go

Gmail Go и Google Maps Go
 

Новые защитные функции Android P

Compiler-based security mitigations in Android P — пост разработчиков Android с рассказом о том, какие функции компилятора LLVM/Clang они применили в Android P для защиты от разного вида атак.

1. Control Flow Integrity. В современных эксплоитах важным шагом часто бывает модификация указателей на функцию и адресов возврата. Она позволяет обойти ограничение на исполнение стека и сегмента данных с помощью переиспользования кусков самого приложения.

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

Разработчики Android уже включили CFI для нескольких системных компонентов в Android 8. В Android P покрытие расширилось и теперь включает в себя медиафреймворки, а также стек NFC и Bluetooth. Тестовая поддержка также реализована для ядра.

2. Integer Overflow Sanitization. Данная технология предназначена для защиты от целочисленного переполнения. Компилятор встраивает в результирующий код приложений функции проверки, которые используются для подтверждения, что исполняемая арифметическая операция не вызовет переполнения.

Впервые технология была использована в Android 7 для защиты медиастека, в котором обнаружили целый комплекс удаленных уязвимостей Stagefright. В Android P она также используется для защиты следующих компонентов: libui, libnl, libmediaplayerservice, libexif, libdrmclearkeyplugin и libreverbwrapper.

Код вызова функции с отключенным и включенным CFI
Код вызова функции с отключенным и включенным CFI
 

Обратный TCP-шелл с помощью Frida

Shellcoding an Arm64 In-Memory Reverse TCP Shell with Frida — статья с рассказом, как внедрить в Android обратный TCP-шелл с помощью Frida.

Это возможно благодаря классу Arm64Writer, который появился во Frida 10.4. Он позволяет записывать инструкции ARM64 прямо в память, а затем исполнять их. Чтобы создать обратный шелл, автор статьи написал его на языке ассемблера, а затем с помощью Arm64Write поместил в память процесса system_server (в Android это один из центральных компонентов операционной системы).

Часть кода обратного шелла:

var impl = Memory.alloc(Process.pageSize);
Memory.patchCode(impl, Process.pageSize, function (code) {
    var arm64Writer = new Arm64Writer(code, { pc: impl });
    // SUB             SP, SP, #0x50
    arm64Writer.putSubRegRegImm('sp', 'sp', 0x50);
    // STP             X29, X30, [SP, #0x40]
    arm64Writer.putStpRegRegRegOffset('x29', 'x30', 'sp', 0x40, 'pre-adjust');
    // ADD             X29, SP, #0x40
    arm64Writer.putAddRegRegImm('x29', 'sp', 0x40);

    ...

    arm64Writer.putRet();
    armWriter.flush();
});

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

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

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

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

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


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии