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

  1. Зміст статті Сьогодні у випуску: універсальні прошивки Android 8, багатоголові трояни і чат-боти,...
  2. Почитати
  3. Project Treble і розвиток ядра Linux
  4. Універсальні прошивки Android 8
  5. Багатоголовий троян в Google Play
  6. Клікботи для Android
  7. Малваре, що використовує Toast-оверлеї
  8. Злом додатків через експортовані компоненти
  9. Дослідження внутрішньої структури резервних копій iOS
  10. Як змусити додатки довіряти лівим сертифікатами
  11. ARM Cheatsheet
  12. завантажити
  13. програмування
  14. Google і Kotlin
  15. Неочевидні можливості Kotlin
  16. Прості поради з написання кращого коду
  17. 10 бібліотек, які слід обов'язково спробувати
  18. Залежність кількості установок від розміру програми
  19. Історія змін Android 4.0-8.1
  20. бібліотеки

Зміст статті

Сьогодні у випуску: універсальні прошивки 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

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.

Принцип роботи атаки 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


завантажити

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 - чотири вкрай простих, але дієвих ради.

Порада перша: припини створювати об'єкти всередині підсобних класів. Наприклад, клас нижче неможливо тестувати:

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}}}

Порада друга: чи не викликай Сінглтон безпосередньо. Передавай їх як параметр конструкторам класів.

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

Порада четверта: перестань плодити класи-спадкоємці. У багатьох випадках це робить код менш читабельним і зрозумілим.

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. В африканських країнах ще менше.

Залежність бажання встановити додаток від зниження розміру 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 - завантажувач файлів з функціями паузи, відновлення і одночасного завантаження.
Що, якщо просто взяти Android з одного смартфона і запустити його на іншому?
Чи допоможе Treble тут?
Encoding = "utf-8"?
Навіщо це потрібно?