Следующая новость
Предыдущая новость

Android: универсальные прошивки Android 8, современные кликботы, взлом приложений и маленький сетевой пентест

06.12.2017 13:25
Android: универсальные прошивки Android 8, современные кликботы, взлом приложений и маленький сетевой пентест

Содержание статьи

  • Полезное
  • Почитать
  • Project Treble и развитие ядра Linux
  • Универсальные прошивки Android 8
  • Многоголовый троян в Google Play
  • Кликботы для Android
  • Малварь, использующая Toast-оверлеи
  • Взлом приложений через экспортированные компоненты
  • Исследование внутренней структуры бэкапов iOS
  • Как заставить приложения доверять левым сертификатам
  • ARM Cheatsheet
  • Скачать
  • Программирование
  • Google и Kotlin
  • Неочевидные возможности Kotlin
  • Простые советы по написанию лучшего кода
  • 10 библиотек, которые следует обязательно попробовать
  • Зависимость количества установок от размера приложения
  • История изменений Android 4.0–8.1
  • Библиотеки

Сегодня в выпуске: универсальные прошивки Android 8, многоголовые трояны и чат-боты, кликботы, эксплуатация уведомлений Android, взлом приложений через доверенные компоненты и, конечно же, маленький сетевой пентест: как заставить приложения доверять нам. Кодинг тоже не забыли: советы, библиотеки и Kotlin, мы любим его.

Полезное

  • Cloak-And-Dagger — исходники одной из атак класса Cloak & Dagger overlay. Это keylogger, реализованный с помощью SYSTEM_ALERT_WINDOW;
  • personal_script — набор авторских скриптов для IDA Pro, Frida, Burp Suite и 010 Editor;
  • krackattacks-scripts — набор скриптов для проверки устройств и точек доступа на уязвимость KRACK;
  • Evil-Droid — инструмент для внедрения зловредного кода в приложения под Android;
  • Droidefense — инструмент анализа малвари, привлекающий множество различных инструментов для разбора APK.
Droidefense

Почитать

Project Treble и развитие ядра Linux

Project Treble Brings Extended Linux Kernel Security Support to Combat Fragmentation — интересная история о том, как Google с помощью Android меняет всю экосистему Linux и основанных на нем устройств.

Суть в том, что у ядра Linux есть специальные LTS-версии, срок поддержки которых составляет два года. Новой функциональности в них не появляется, но баги продолжают исправляться. Эти LTS-версии используют разработчики серверных дистрибутивов Linux (потому что большое обновление ядра может что-то сломать), а также производители Android-устройств, а точнее SoC (потому что портировать новую версию ядра на SoC — не самая простая задача).

Так вот, Google договорилась с Linux Foundation о том, чтобы поддержка LTS-версий ядра продолжалась не два года, а целых шесть лет. Это означает, что мы можем рассчитывать на лучшую поддержку устройств со стороны производителей (теперь им не придется самим исправлять ошибки в уже не поддерживаемых LTS-ядрах), а также поддержку другой техники, основанной на Linux (роутеры, лампочки и прочий IoT). Ну и конечно же, это очень хороший знак для разработчиков серверных редакций дистрибутивов Linux.

Универсальные прошивки Android 8

A Revolution in Custom ROMs: How Project Treble makes Porting Android Oreo a 1 Day Job — интересная статья о том, насколько Project Treble упрощает портирование прошивок на устройство.

Напомню, что Project Treble — это инициатива Google, призванная унифицировать внутренние компоненты Android, которая должна четко разделить ОС на две независимые части: одна будет включать в себя ядро, драйверы и другие компоненты, необходимые для поддержки железа, а вторая — сам Android.

Идея в том, что интерфейс между этими двумя частями должен быть жестко определен и не изменяться со временем. Это позволит гораздо быстрее портировать новые версии Android на старые устройства: в теории ничего даже не нужно портировать, достаточно взять образ новой версии Android и прошить его на устройство.

До практики же дело пока не дошло — наработки Treble впервые появились в Android 8, последней версии ОС на данный момент. Зато на Android 8 работает уже несколько разных смартфонов с сильно отличающимися сборками Android. Что, если просто взять Android с одного смартфона и запустить его на другом? Поможет ли Treble здесь?

Как оказалось — да. Пользователь phhusson с форумов XDA за двадцать часов создал образ Android, который можно без всяких модификаций загрузить на разных устройствах: Huawei Mate 9, 8 Pro, Honor 9, Sony Xperia XZ1 Compact и Essential Phone (три разных производителя и два разных чипсета: HiSilicon Kirin 960 и Qualcomm Snapdragon 835).

Это означает, что в будущем вместо огромного количества сборок какой-либо кастомной прошивки Android для каждого устройства (каждая из которых требует десятков часов для портирования) мы увидим одну общую прошивку, которую можно будет установить на любой смартфон. Нечто сродни Linux или Windows: скачал с сайта и установил на любой смартфон.

Многоголовый троян в Google Play

Multi-stage malware sneaks into Google Play — разбор трояна Android/TrojanDropper.Agent.BKY, использующего технику скрытия от антивирусов и систем безопасности Google Play с помощью разделения на несколько стадий.

Сразу после запуска троян незаметно для пользователя расшифровывает, извлекает и запускает свою первую стадию, которая затем расшифровывает и запускает вторую. Она, в свою очередь, скачивает новое приложение с указанного URL и инициирует установку. Если пользователь соглашается установить и запустить APK (который выдает себя за Adobe Flash Player), расшифровывается и запускается четвертая стадия.

Четвертая стадия представляет собой классический банковский троян, который выводит на экран окна оверлеи с целью похитить учетные данные пользователей.

Интересно, что благодаря тому, что для скачивания четвертой стадии используется bit.ly, исследователям удалось узнать, сколько всего было обращений по этой ссылке, — около 3000.

Android: универсальные прошивки Android 8, современные кликботы, взлом приложений и маленький сетевой пентест
Четыре стадии трояна

Кликботы для Android

Clicking Bot Applications — большая статья о click fraud в среде Android, а если точнее — о зловредных приложениях, заражающих смартфоны, чтобы незаметно для пользователя кликать по рекламе. Статья рассматривает два типа подобных приложений: те, что используют сервисы Accessibility для получения возможности нажимать любые элементы интерфейса, и те, что используют API ViewGroup.dispatchTouchEvent, позволяющий приложению «кликнуть» на свои собственные элементы, то есть на рекламу, которую оно само же показывает.

Второй тип наиболее простой и примитивный. Рекламная сеть может легко отследить его, просто анализируя, с какой периодичностью делаются клики, по каким частям объявления, а также как они «выглядят»: давление, площадь, длительность нажатия и так далее.

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

Пример получения информации о клике пользователя в трояне com.life.read.physical.trian:

public class MainActivity extends SlidingFragmentActivity implements View.OnClickListener, View.OnTouchListener {      public boolean onTouch(View view, MotionEvent motionEvent) {         if(motionEvent.getAction() == 0) {             ClickSimulator.getMotionEventInfo(((Context)this), motionEvent);         }         return 0;     }      public class MotionEventInfo {         public static MotionEventInfo setInfo(String name) {             MotionEventInfo options;             try {                 options = new MotionEventInfo();                 JSONObject JSON_Obj = new JSONObject(name);                 options.deviceId = JSON_Obj.optInt("de");                 options.pressure = JSON_Obj.optDouble("pr");                 options.size = JSON_Obj.optDouble("si");                 options.xprecision = JSON_Obj.optDouble("xp");                 options.yprecision = JSON_Obj.optDouble("yp");                 options.metaState = JSON_Obj.optInt("me");                 options.edgeFlags = JSON_Obj.optInt("ed");             }             catch(Exception ex) {                 options = null;             }             return options;         }     } } 

Первый тип click fraud приложений использует сервис Accessibility, который позволяет изучать и нажимать на практически любые части любых приложений и самой системы. Такие приложения также могут приносить хозяину прибыль за счет установки рекламируемых приложений (installation fraud).

Однако у таких кликботов есть недостаток: они должны либо каким-то образом заставить пользователя включить свой сервис Accessibility, либо использовать атаку Cloak & Dagger, чтобы включить его незаметно. К счастью, немногие разработчики зловредов знают, как реализовать эту атаку.

Малварь, использующая Toast-оверлеи

Toast Overlay Weaponized to Install Several Android Malware — рассказ о малвари ANDROIDOS_TOASTAMIGO, первом трояне, использующем атаку Toast overlay для незаметной пользователю установки приложений на смартфон.

Toast overlay — атака, эксплуатирующая очень странную уязвимость Android, которая позволяет засунуть полноэкранное окно в маленькое информационное окошко, предназначенное для вывода информационных сообщений. Троян использует такое окно, чтобы перекрыть экран, а в это время открыть настройки и заставить пользователя нажать на определенные места (нажатие будет проходить «сквозь» окно), активируя таким образом сервис Accessibility.

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

Стоит отметить, что уязвимость Toast overlay была исправлена в сентябрьском обновлении Android.

Android: универсальные прошивки Android 8, современные кликботы, взлом приложений и маленький сетевой пентест
Принцип работы атаки Toast overlay

Взлом приложений через экспортированные компоненты

Hack Android Application Through Exposed Components — хорошая вводная статья о том, как взламывать приложения для Android с помощью торчащих наружу компонентов приложения: активностей, сервисов, intent-ресиверов, content-провайдеров.

Статья объясняет назначение каждого компонента, а затем на примере уязвимого приложения показывает, как распотрошить приложение с помощью apktool, а затем использовать инструмент Drozer, чтобы найти экспортированные компоненты.

Один из примеров — запуск скрытой активности напрямую, чтобы увидеть список сохраненных приложений:

adb shell am start -n <package_name>/<activity_name> 

Исследование внутренней структуры бэкапов iOS

Reverse Engineering the iOS Backup — исследование формата бэкапов iOS. Никаких откровений, просто список файлов, их содержимое и назначение. Можно добавить в закладки и открывать в случае необходимости.

Спойлер: фактически весь бэкап состоит из читаемых с помощью обычного редактора файлов .plist и баз данных SQLite, которые можно просмотреть с помощью любого менеджера БД.

Как заставить приложения доверять левым сертификатам

Bypassing Android’s Network Security Configuration — как обойти дефолтовый сетевой security-конфиг приложения, чтобы выполнить пентест.

В Android 7 появился механизм, названный Network Security Configuration. Он позволяет программистам изменять настройки безопасности подключения к сети через специальный XML-файл внутри APK. Этот же механизм заставляет все приложения, собранные для Android 7 и выше, доверять только системным сертификатам и, как следствие, не позволяет подсунуть собственный сертификат, чтобы выполнить анализ трафика.

Автор статьи предлагает два варианта решения этой проблемы: пересобрать приложение, добавив в него собственный security-конфиг, или использовать Frida, чтобы на лету модифицировать поведение Android в отношении данного приложения. Первый способ намного проще, но он не подойдет, если необходимо сохранить оригинальную цифровую подпись приложения (например, в случае, когда два приложения используют один приватный каталог).

Конфиг, заставляющий приложение доверять установленным пользователем сертификатам:

<?xml version="1.0" encoding="utf-8"?> <network-security-config>     <base-config>         <trust-anchors>             <certificates src="system"/>             <certificates src="user"/>         </trust-anchors>     </base-config> </network-security-config> 

ARM Cheatsheet

Android: универсальные прошивки Android 8, современные кликботы, взлом приложений и маленький сетевой пентест

Скачать

LineageOS for microG — сборка LineageOS (кастомной прошивки Android) со встроенными сервисами microG и маркетом F-Droid. Интересна она тем, что позволяет получить доступ к сервисам Google, не устанавливая на смартфон сами сервисы Google.

Зачем это нужно? Все просто: если ты прошьешь на смартфон стандартную сборку LineageOS, у тебя не будет доступа ни к маркету, ни к картам Google, а приложения не смогут получать push-уведомления. Чтобы все это заработало, нужно установить так называемый пакет GApps, содержащий сервисы Google.

Проблема в том, что даже минимальный вариант GApps весит больше 120 Мбайт, а полный — более 700 Мбайт. Также сервисы Google из GApps славятся своей любовью к оперативке и заряду батареи. А еще они закрыты, то есть о том, что они могут делать, знает только сама Google.

MicroG, с другой стороны, открыты, занимают всего четыре мега, не выжирают батарею и почти ничего не занимают в памяти. Говорят, что на microG можно запустить даже Play Маркет, но эту информацию я не проверял.

Программирование

Google и Kotlin

Update on Kotlin for Android — Google отчиталась о трех важных вещах, связанных с Kotlin.

  1. Они подготовили гайд по стилю кодирования на Kotlin. Ничего особо примечательного в нем нет, почти такие же рекомендации, как в случае с Java: всегда использовать фигурные скобки в if, ставить пробел после if, for и catch, не разделять пробелом имя объекта и метода и тому подобное.
  2. Они портировали некоторые свои примеры приложений на Kotlin.
  3. Добавили null-аннотации в 27-ю версию Support Library. Так что теперь Kotlin-программисты будут знать, является ли значение, возвращаемое стандартными библиотеками Google, nullable или нет.

Неочевидные возможности Kotlin

Advanced Kotlin tips — очередная подборка интересных, но неочевидных возможностей Kotlin. О некоторых из них мы уже рассказывали в прошлом выпуске: о локальных, инфиксных, инлайновых функциях, метках return. Из нового:

  • Ключевое слово tilerec — позволяет указать компилятору, что следующая функция вызывает себя и только себя (другими словами, она рекурсивная). Это позволяет применить оптимизации, заменяющие вызов метода на цикл:

    tailrec fun findFixPoint(x: Double = 1.0): Double                  = if (x == Math.cos(x)) x else findFixPoint(Math.cos(x)) 
  • Перегрузка операторов. Без комментариев:

    operator fun plus(time: Time) {     ... }  time1 + time2  

Простые советы по написанию лучшего кода

Simple but painful steps for writing a better code — четыре крайне простых, но действенных совета.

1. Прекрати создавать объекты внутри подсобных классов.

class VehiclesManager(val context: Context) {     fun getVehiclesNextToMe(): List<Vehicle> {         val api = VehiclesRetrofitApi(context)         val currentLocation = LocationProvider.currentLocation()          return api.getVehicles()             .filter { it.coordinates.distanceTo(currentLocation) < 100 }     } } 

Этот класс невозможно тестировать. Ему не нужен Context (ему нужен объект класса VehiclesRetrofitApi). Он намертво привязан к библиотеке Retrofit. Правильный вариант:

class VehiclesManager(val vehiclesApi: VehiclesRetrofitApi) {     fun getVehiclesNextToMe(): List<Vehicle> {         val currentLocation = LocationProvider.currentLocation()          return vehiclesApi.getVehicles()             .filter { it.coordinates.distanceTo(currentLocation) < 100 }     } } 

2. Не вызывай синглтоны напрямую. Передавай их как параметр конструкторам классов.

3. Перестань называть свои классы Manager, Handler, Controller и Processor. Такие слова в именах не несут никакого смысла, без них имя класса будет более понятным.

4. Перестань плодить классы-наследники. Во многих случаях это делает код менее читаемым и понятным.

10 библиотек, которые следует обязательно попробовать

10 Awesome Android libraries you definitely want to try. Честно говоря, эту статью надо видеть вживую, наслаждаясь прекрасными анимированными скриншотами, но все-таки сделаем небольшую выжимку:

  1. Lottie — библиотека получает на вход анимацию в формате Adobe After Effects и рендерит ее с помощью стандартных механизмов Android.
  2. StyleableToast — библиотека для показа кастомизируемых Toast-сообщений.
  3. CoordinatorTabLayout — смесь TabLayout и CoordinatorLayout.
  4. Material About — эффектный экран «Обо мне».
  5. SlidingRootNav — боковое меню (drawer) с интересным эффектом появления.
  6. InfiniteCycleViewPager — ViewPager с эффектом переключения View.
  7. JazzyViewPager — еще один ViewPager с различными эффектами переключения.
  8. Side-Menu.Android — боковое меню для выбора категорий.
  9. AwesomeBar — ActionBar + Drawer с красивыми эффектами.
  10. ShimmerRecyclerView — RecyclerView с показом загрузки элементов с помощью эффекта мерцания.

Зависимость количества установок от размера приложения

Shrinking APKs, growing installs — интересное исследование, посвященное влиянию размера приложения на желание пользователей его установить. Авторы выяснили, что каждое увеличение размера на 6 Мбайт ведет к падению количества установок на 1%. Причем в 30% случаев (для приложения размером 100 Мбайт) не отказываются от установки как таковой, а отменяют уже начавшуюся установку.

В первую очередь такие результаты связаны с недоступностью качественного интернета во многих местах планеты. Например, в Индии и Индонезии только 50% пользователей смартфонов имеют доступ к Wi-Fi. В африканских странах еще меньше.

Android: универсальные прошивки Android 8, современные кликботы, взлом приложений и маленький сетевой пентест
Зависимость желания установить приложение от снижения размера APK на 10 Мбайт

История изменений Android 4.0–8.1

AndroidSDKPoster — огромный настенный постер с историей изменений Android SDK 14–27. Смотреть в онлайне бесполезно, необходимо распечатывать PDF и вешать на стену. Размеры: A0 и A1.

Библиотеки

  • Time — простая Kotlin-библиотека, позволяющая писать 10.seconds вместо 10 * 1000, а также 10.hours, 5.minutes и так далее;
  • DownZ — HTTP-библиотека с возможностью кеширования JSON и изображений, отменой загрузки или выгрузки изображений;
  • RippleLayout — лейаут, создающий эффект волн на воде при прикосновении к любой своей части;
  • FastTextView — более быстрый и гибкий аналог TextView;
  • android-extensions — набор функций расширений для более эффективного программирования на Kotlin;
  • circle-menu-android — красивое прекрасно анимированное круговое меню;
  • CircularDialogs — анимированные круговые диалоги;
  • Serial — быстрая эффективная библиотека сериализации объектов (автор — Twitter);
  • PRDownloader — загрузчик файлов с функциями паузы, возобновления и одновременной загрузки.

Источник

Последние новости