Android: як Google стежить за тобою, нова атака Man-in-the-Disk і реверс вірусів

  1. Зміст статті
  2. Інструменти
  3. Почитати
  4. Google стежить за тобою
  5. «Новий» вектор атак: Man-in-the-Disk
  6. 47 вразливостей в пристроях Android
  7. Як реверс віруси
  8. Аналіз вихідного коду Android
  9. розробнику
  10. Онлайн-інструменти розробника Android
  11. Більш доброзичливий до мови Kotlin Android SDK
  12. Як правильно відповідати на відгуки в Play Store / App Store
  13. Приховані діаманти стандартної бібліотеки Kotlin
  14. Інструменти
  15. бібліотеки

Зміст статті

У цьому випуску: Google стежить за тобою, новий вектор атак на мобільні пристрої, реверс зашифрованих вірусів, аналіз вихідного коду Android на уразливості і 47 вразливостей в Android-пристроях. А також: кращі онлайн-інструменти розробника Android, приховані можливості Kotlin і свіжі бібліотеки для програмістів.

Інструменти

  • ARTist - DBI-фреймворк, подібний Frida, але використовує набагато більш цікавий метод модифікації програми: підміну скомпільованої на пристрої OAT-файлу програми на інший; більш детально описаний в документі, опублікованому на сайті Black Hat ;
  • House - чергова обгортка навколо Frida для новачків;
  • jelbrekTime - джейлбрейк для Apple watch S3 watchOS 4.1;
  • Sirius Obfuscator - обфуськатор вихідного коду на мові Swift.

Почитати

Google стежить за тобою

Google Data Collection - доповідь дослідників з університету Вандербільта, присвячений сервісів компанії Google, а точніше того, як компанія використовує ці сервіси для збору інформації про користувачів. Загальний висновок такий, що від Google не сховатися за всіх старань, а конкретні дані наступні:

  • смартфон Android в сплячому режимі з активованим браузером Google Chrome передає інформацію про місцезнаходження 340 раз на добу. В цілому смартфон з встановленим Chrome відправляє дані в 50 разів частіше, ніж iOS з Safari;
  • неактивне Android-пристрій взаємодіє з Google майже в десять разів частіше, ніж пристрій Apple взаємодіє з серверами Apple;
  • використовуючи рекламні мережі, Google може зв'язати анонімні дані з особистою інформацією користувача; наприклад, якщо шукати інформацію через Google, використовуючи браузер Firefox, Google може визначити, що той, хто шукає, - власник такого-то телефону;
  • більшу частину даних Google збирає в той час, коли користувач не взаємодіє безпосередньо з будь-яким з продуктів Google.
Кількість даних, відправлених Android і iOS в добу

«Новий» вектор атак: Man-in-the-Disk

Man-in-the-Disk: A New Attack Surface for Android Apps - так званий новий вектор атак на додатки для Android від компанії Check Point. Суть в тому, що в Android зовнішній накопичувач, а саме карта пам'яті (навіть якщо вона внутрішня), використовує файлову систему без поділу прав доступу, а значить, якщо один з додатків збереже щось на карту пам'яті, будь-яке інше додаток зможе це що -то переглянути / змінити.

Атака якраз і полягає в тому, що зловмисник створює додаток, яке затирає або підміняє чужі файли. Наприклад, можна викликати збій в Google Translate, Yandex Translate, Google Voice Typing і Google Text-to-Speech. Але, що більш цікаво, в деяких випадках можна підмінити встановлений додаток затрояненним варіантом. Наприклад, якщо програма зберігає файл свого поновлення на карту пам'яті, досить підмінити його, і як оновлення буде встановлено зовсім не те, що потрібно. Так, наприклад, можна зробити з Xiaomi Browser.

Варто відзначити, що це зовсім не новий вектор атак. Про цю проблему відомо з перших версій Android, тому Google завжди закликала розробників розглядати карту пам'яті як склад непотрібного мотлоху і не зберігати на ній нічого важливого. Так, її власний Google Translate падає при видаленні кеша, але що важливіше - розвантажити внутрішню пам'ять смартфона або захиститися від якихось незрозумілих людей, які захочуть упустити твій Google Translate?

47 вразливостей в пристроях Android

DEF CON 2018: Vulnerable Out of the Box - An Evaluation of Android Carrier Devices - дослідження компанії Kryptowire, присвячене пошуку вразливостей в Android-пристроях різних виробників: Alcatel, ASUS, LG, ZTE, Sony, Nokia, Orbic, Oppo, MXQ та інших.

Підсумок: в цілому знайдено 47 вразливостей, включаючи крах прошивки, очищення всіх даних користувача, приховане створення скріншотів і скрінкасти, отримання root, непомітну установку додатків, приховану відправку SMS і доступ до адресної книги.

Варто відзначити, що всі ці уразливості відсутні в чистому Android (тому, що встановлений на Google Pixel або Essential, наприклад) і виявлені в модифікованих виробником частинах прошивки і драйвери.

Як реверс віруси

Unpacking the Packed Unpacker - цікава презентація дівчата з команди Android Security Team і за сумісництвом розробника IDAPython про те, як отреверсіть додаток, запаковане зашифрованим пакером.

Головний інтерес тут, звичайно ж, не в унікальності матеріалу, а в його подачі. Незважаючи на те що це не стаття і не вайтпейпер, а всього лише набір слайдів, він легко читається і повністю вводить в курс справи: навіщо потрібні нативні бібліотеки, як вони використовуються в додатку, що таке формат JNI, як визначити, що бібліотека зашифрована ( відсутність JNI-функцій і повторюваний луп на початку), як зробити дешифратор (найпростіший варіант: переписати асемблерний код на Python і використовувати IDAPython, щоб дешифрувати код), як віруси перевіряють, що знаходяться в емуліруемой середовищі, і як цю перевірку обійти.

Наприклад, перевірка на запуск програми під управлінням Xposed робиться так:

  1. Пошук LIBXPOSED_ART.SO і XPOSEDBRIDGE.JAR в файлі / proc / self / maps (цей файл показує всі відображені в поточний процес файли, в тому числі бібліотеки).
  2. Пошук будь-якого з двох методів de / robv / android / xposed / XC_MethodHook, de / robv / android / xposed / XposedBridge за допомогою JNI-методу FindClass ().
Як віруси виконують перевірку на процесор

Аналіз вихідного коду Android

Перевірили за допомогою PVS-Studio вихідні коди Android, або Ніхто не ідеальний - стаття розробників статичного аналізатора PVS-Studio про перевірку вихідних текстів Android на наявність помилок. Результат досить очікуємо для такого обсягу коду.

  • Безглузді порівняння:

    pr2.mStretchMode == pr2.mStretchMode ns! = 1 || ns! = 1
  • Розіменування нульового покажчика:

    if (xmlProxyLib == nullptr) {ALOGE ( "effectProxy must contain a <% s>:% s", tag, dump (* xmlProxyLib)); return false; }
  • Приватний дані не затираються в пам'яті. Це вже більш складна помилка, коли програміст все робить правильно, затираючи пам'ять нулями в кінці роботи з важливими даними, але не враховує того факту, що компілятор, швидше за все, видалить операцію заповнення пам'яті нулями, як безглузду. Наприклад, в цьому випадку компілятор, найімовірніше, видалить звернення до функції memset:

    static void FwdLockGlue_InitializeRoundKeys () {unsigned char keyEncryptionKey [KEY_SIZE]; ... memset (keyEncryptionKey, 0, KEY_SIZE); // Zero out key data. }
  • Не враховується порядок обчислення аргументів. Ще один приклад незнання роботи компілятора, який може вважати аргументи функції в довільному порядку. У наступному прикладі функції readSigned будуть викликані в невизначеною послідовності:

    mHal.setLayerCursorPosition (...., readSigned (), readSigned ());

А також:

  • ігнорування результатів виконання функції;
  • код, який ніколи не виконується;
  • забутий break всередині switch;
  • повернення вже не існуючих даних;
  • вихід за кордон масиву;
  • повторне присвоювання змінної і інше.

Автор дослідження стверджує, що PVS-Studio виявив більш ніж одну потенційну вразливість на 4000 рядків коду. Однак варто мати на увазі, що мова саме про потенційних вразливості , В число яких входять, наприклад, завжди справжні або завжди помилкові умови. Іншими словами, це просто місця, на які програмістам варто звернути увагу.

розробнику

Онлайн-інструменти розробника Android

Awesome List Of Online Tools For Android Developers - список онлайн-інструментів, які стануть в нагоді будь-якому Android-розробнику.

Дизайн:

Розробка:

  • AndroidStarters - створює Android-проект на базі обраної архітектури в три кліка;
  • MaterialPalette - генератор кольорової палітри на базі Material Design;
  • Android Asset Studio - інструмент для швидкої генерації іконок;
  • Android SDK search - розширення Chrome для швидкого пошуку по документації Android SDK;
  • Gradle, please - вводиш назву бібліотеки, отримуєш рядок для вставки в build.gradle;
  • Kotlin extensions - список найкорисніших функцій-розширень Kotlin;
  • JsonStub - фейковий бекенд, здатний генерувати будь-які запити і відповіді JSON.

Тестування та впровадження:

  • APK method count - інструмент для підрахунку кількості методів в додатку, щоб переконатися, що не перетинаєш ліміт в 65K методів;
  • Appetize - інструмент для запуску додатків в браузері;
  • Appstore screenshot generator - генератор скріншотів з рамкою смартфона для Play Store;
  • App Launch Pad - схожий інструмент з більш цікавими варіантами оформлення.

продуктивність:

  • Android arsenal - список кращих інструментів і бібліотек з каталогізатором і пошуком;
  • Mindorks App Store - ще один подібний каталог;
  • Octotree - розширення Chrome для швидкої навігації по GitHub;
  • RegExr - потужний інструмент для роботи з регулярними виразами.
App Launch Pad

Більш доброзичливий до мови Kotlin Android SDK

Android Pie SDK is now more Kotlin-friendly - анонс нового Android SDK, що містить так звані Nullable-анотації для мови Kotlin. Такі анотації дозволяють компілятору (і середовищі розробки) Kotlin дізнатися, чи можуть повертаються об'єкти бути null. Важливі моменти:

  1. Анотації стосуються не всіх, а тільки найбільш використовуваних API.
  2. З метою сумісності компілятор буде видавати тільки попередження, а не помилки.
  3. Навіть якщо твій проект на Java, ти все одно отримаєш вигоду від нововведення: Android Studio буде попереджати тебе, наприклад, про передачу функції параметра Null, якщо аргумент позначений як і nullable.

Як увімкнути:

  1. Установи SDK Android API 28 за допомогою Tools → SDK Manager.
  2. Вкажи в build.gradle: compileSdkVersion 28.
  3. Обнови Kotlin до версії 1.2.60: Tools → Kotlin → Configure Kotlin Plugin Updates.

Як правильно відповідати на відгуки в Play Store / App Store

How to Reply to iOS and Google Play Reviews Like a Pro - 13 Power Tips You Should Always Keep In Mind - досить очевидна, але, можливо, корисна підбірка рад, як правильно відповідати на відгуки про програму.

  1. Відповідайте якомога швидше.
  2. Переконайтеся, що ви правильно зрозуміли те, що сказав користувач.
  3. Покажіть свою турботу про користувача.
  4. Відповідайте в стилі свого бренду: серйозним тоном, якщо це бізнес-додаток, або жартівливо в разі гри.
  5. Не використовуйте шаблонні відповіді.
  6. Чи не розтікатися мислію по древу.
  7. Не використовуйте слова з негативним відтінком: не можу, неможливо, ніколи.
  8. Не робіть помилок.
  9. Будьте чесні, пояснюйте причини і говорите про терміни.
  10. Чи не вибачайтеся без необхідності.
  11. Надайте можливість зв'язатися з вами безпосередньо.
  12. Придушіть свій гнів.
  13. Говоріть спасибі.

Fun fact: 77% користувачів читають хоча б один відгук перед установкою додатків, а 13% - як мінімум сім.

Приховані діаманти стандартної бібліотеки Kotlin

Hidden Gems In Kotlin StdLib - стаття про неочевидних і невідомих багатьом можливостях стандартної бібліотеки Kotlin.

  1. Клас String в Kotlin набагато більш розвинутою свого аналога в Java і дозволяє робити таке:

    val blank = "" .isBlank () // Also: CharSequence? .isNullOrBlank val first = "Adam.McNeilly" .substringBefore ( '.') // "Adam" val last = "Adam.McNeilly" .substringAfter ( '. ') // "McNeilly" val withSpaces = "1" .padStart (2) // "1" val endSpaces = "1" .padEnd (3,' 0 ') // "100" val dropStart = "Adam". drop (2) // "am" val dropEnd = "Adam" .dropLast (2) // "Ad" "A \ nB \ nC" .lines () // [A, B, C] "One.Two. Three ".substringAfterLast ( '.') //" Three "" One.Two.Three ".substringBeforeLast ( '.') //" One.Two "" ABCD ".zipWithNext () // [(A, B) , (B, C), (C, D)] val nullableString: String? = Null nullableString.orEmpty () // Повертає ""
  2. Колекції в Kotlin теж мають безліч зручних методів:

    myList.sort () myList.max () myList.min () myList.shuffle () myList.reverse () myList.swap (1, 2) myList.filter {} myList.filterNot {} myList.filterIsInstance () myList. filterNotNull {} myList.first {} // Також: indexOfFirst {} myList.firstOrNull {} myList.last {} // Також: indexOfLast {} myList.lastOrNull {} myList.single {} myList.singleOrNull {} myList.any {} myList.none {} myList.all {} myList.partition {} // Pair <List <T>, List <T >>
  3. Деструкція. Це вже вбудована можливість Kotlin, про яку автор все одно вирішив згадати, бо вважав важливою. Деструкція дозволяє замінити такий код:

    val coordinates = arrayOf (5, 10, 15) val x = coordinates [0] val y = coordinates [1] val z = coordinates [2]

    на такий:

    val coordinates = arrayOf (5, 10, 15) val (x, y, z) = coordinates

    Але що набагато важливіше, деструкція працює також щодо data-класів. І це дозволяє тобі повернути з функції два значення різних типів:

    data class Result (val result: Int, val status: Status) fun function (...): Result {return Result (result, status)} val (result, status) = function (...)

    Деструкції можна піддати також map:

    val actionsMap: Map <String, Action> = hashMapOf (...) for ((key, action) in actionsMap) {// ...}

Інструменти

  • GradientDrawableTuner - інструмент для швидкої генерації градієнтних Drawable, з можливістю подальшого збереження в XML-файл;
  • Language-Switcher-Tile - кнопка для меню швидких налаштувань, що дозволяє швидко перемикати мову пристрою (знадобиться для оцінки перекладів);
  • Detox - інструмент автоматизованого тестування інтерфейсу додатку.

бібліотеки

  • Listn - простий музичний плеєр, побудований на API SoundCloud;
  • CrunchyCalendar - календар в стилі Material Design з нескінченним скролінгом, вибором періодів і багатьма іншими функціями;
  • folding-cell-android - ефект складається аркуша паперу;
  • multiplatform-settings - мультиплатформенна бібліотека для збереження значень key: value, використовує SharedPreferences на Android і NSUserDefaults на iOS;
  • DrawableToolbox - бібліотека для створення Drawable потрібних форм і відтінків на льоту, без необхідності використання файлів drawable.xml;
  • twinkle - додає ефект мерехтіння до елементів інтерфейсу;
  • HorizontalCalendarView-Android - прокручуваний в сторону календар;
  • Flair - фреймворк для створення комплексних програм з різними архітектурами (MVC ready, MVP, MVVM, MVI);
  • Philology - бібліотека, що дозволяє поширювати переклади додатки окремо від самого додатка;
  • DroidArt - бібліотека для виконання складних маніпуляцій над текстом.
IsBlank () // Also: CharSequence?
ZipWithNext () // [(A, B) , (B, C), (C, D)] val nullableString: String?