Пояснення експлойту StrandHogg 2.0

click fraud protection

StrandHogg 2.0 — нова небезпечна вразливість Android. Ось як це може вплинути на користувачів і як розробники можуть захистити свої програми від цього.

Зараз 22:00. Чи знаєте ви, де ваша діяльність? Існує нова вразливість, якою можна скористатися на мільйонах пристроїв Android, до того ж досить неприємна. Коротше кажучи, цей недолік дизайну дозволяє зловмиснику представити свою власну активність (сторінку) поверх іншого додатка, потенційно збиваючи користувача з пантелику, змушуючи його надати свої особисті дані. Уразливість отримала назву StrandHogg 2.0 і нещодавно була розкрита Промон, норвезька охоронна фірма.

Уразливість StrandHogg 2.0 теоретично зачіпає всі Android-пристрої з версіями Android від Honeycomb (3.0) до Android 9 Pie (9.0). На основі статистика поширення останньої версії Android, це означає, що приблизно 91,8% усіх пристроїв Android уразливі до StrandHogg 2.0. Уразливість була призначена CVE-2020-0096 і отримав a ступінь тяжкості «критичний». Він не потребує спеціальних дозволів для роботи та може працювати майже повністю без участі користувача. Все, що користувачеві потрібно зробити, це відкрити програму з прихованим шкідливим кодом, і тоді він стає вразливим для експлуатації.

Promon був люб’язний надіслати нам свій додаток для підтвердження концепції та його вихідний код, щоб ми могли якнайкраще пояснити, як працює експлойт, чому він важливий для користувачів і як розробники можуть захистити свої програми проти цього.


Як це працює

Скажімо, ви використовуєте Gmail і натискаєте веб-посилання. Якщо ви перейдете на екран останніх програм, ви можете помітити, що веб-сторінка, здається, знаходиться «всередині» Gmail. У попередньому перегляді показано веб-сайт, але значок програми та назва досі з Gmail. Це те, що відбувається, коли програма/діяльність запускає іншу програму/діяльність у тому самому завданні. А тепер уявіть, що ви не навмисно відкривали це посилання. Вам здається, що це лише частина програми Gmail. Це поведінка, яку використовує StrandHogg 2.0.

Нам доведеться залишити тут деякі подробиці, але ось приблизно, як працює цей експлойт. Для наступного припустімо, що зловмисник хоче отримати ім’я користувача для входу в Gmail.

  1. Користувач завантажує шкідливу програму (звичайно, не знаючи, що вона шкідлива) і відкриває її.
  2. У фоновому режимі програма відкриває Gmail, розміщує поверх нього схожу дію входу, а потім запускає іншу дію.
  3. Користувач відкриває Gmail і бачить те, що виглядає як екран входу в Gmail, але насправді є фішинговою діяльністю зловмисника.

Остаточна активність, запущена на кроці 2, може бути будь-якою, що уникає підозр. Програма може імітувати збій і повернутися на головний екран або просто відкрити свою основну діяльність, ніби нічого не сталося. Єдине підозріле, що може побачити користувач, — це купа початкових анімацій під час запуску всіх дій. Найгірше: це навіть не буде виглядати так, ніби Gmail відкрито.

Джерело: Promon

Звичайно, зловмисник може зробити більше, ніж просто показати підроблений екран входу. Натомість шкідлива програма може надати запит на дозвіл, змусивши користувача надати небажані дозволи. Хоча запит будь-яких спеціальних дозволів, як-от доступність, може викликати підозру у користувача, можна завдати великої шкоди за допомогою чогось на зразок доступу до сховища.


Технічні моменти

Цей наступний розділ є оглядом високого рівня того, як працює StrandHogg 2.0. Promon не оприлюднить повну інформацію ще кілька місяців, тому ми не можемо розповісти, як саме реалізовано цей експлойт. Але є деякі технічні деталі, про які ми можемо поговорити.

У двох словах, StrandHogg 2.0 переймає Android Context.startActivities() Метод API із використанням трьох намірів.

  • Перший намір — це той, який запускає, у нашому прикладі, Gmail. Він позначений прапорцем Intent.FLAG_ACTIVITY_NEW_TASK.
  • Другий намір — зловмисний. У нашому прикладі це для подібної дії входу. Цей намір не має прапорів.
  • Третій намір - це відволікання. Це гарантує, що користувач не підозрює, що Gmail випадково відкривається замість програми, яку він торкнувся (тобто тієї, яка запускає атаку). Він позначений прапорцем Intent.FLAG_ACTIVITY_NEW_TASK.

Усі ці наміри потім передаються в масиві до startActivities() метод.

Ключовим тут є відсутність прапорів у другому намірі. Роблячи це, ми просто скопіювали приклад Gmail із вище. Технічно це завдання Gmail, але найвища активність належить зловмиснику. Коли користувач натискає піктограму домашнього екрана Gmail, замість активності Gmail відображається активність зловмисника.


Доказ концепції

Завдяки інформації, надісланій нам Promon, ми змогли відтворити їхнє підтвердження концепції. Ось запис екрану Samsung Galaxy Note8 під керуванням Android 9 Pie, який показує його в дії.


Методи пом'якшення та проблеми

Тепер просто повторити вищевказане в коді насправді не спрацює. Це не повний приклад, і є кілька інших речей, які зловмисник повинен зробити, щоб він запрацював, і ми не можемо поділитися ними. Але їх не особливо важко вгадати самостійно, і це частково робить цю атаку такою небезпечною. StrandHogg 2.0 — це відносно легкий експлойт для впровадження та складний для запобігання.

Пом’якшення не може включати лише внесення до чорного списку всіх програм, які використовують startActivities(), оскільки для нього існує багато законних застосувань. Також дуже важко автоматизувати алгоритм виявлення для нього. Зловмисні розробники можуть використовувати всілякі хитрощі, щоб зробити свою реалізацію StrandHogg 2.0 фактично невидимою для таких служб, як Google Play Protect. StrandHogg 1.0 вимагав від зловмисника додати атрибут у AndroidManifest.xml зловмисної програми, який було відносно легко виявити. З іншого боку, StrandHogg 2.0 повністю працює на Java/Kotlin.

Беручи до уваги обфускацію, відображення та навіть просто різні стилі кодування, здається непрактичним автоматично правильно виявляти програму, яка використовує цей експлойт. Більше того, якщо користувач є об’єктом атаки StrandHogg 2.0, він може навіть не знати. Якщо ви відкриваєте Gmail і бачите його екран входу, ви можете просто подумати, що ваш сеанс закінчився, і ввести свої дані для входу, не замислюючись.

Коли ми звернулися до Google, щоб отримати відповідь, речник зробив таку заяву:

«Ми цінуємо роботу дослідників і випустили виправлення проблеми, яку вони виявили. Крім того, Google Play Protect виявляє та блокує шкідливі програми, у тому числі ті, що використовують цю техніку».

Це звучить добре, і, сподіваємось, воно має хоч якийсь ефект проти атак StrandHogg 2.0. Однак варто зазначити, що Google Play Protect не визначити нашу програму для підтвердження концепції як зловмисну ​​навіть після сканування вручну.

Промон каже, що вони "не спостерігали реального шкідливого програмного забезпечення, яке використовує вразливість StrandHogg 2.0", але немає гарантії, що експлойт було виявлено вперше. З цієї причини Promon рекомендує розробникам захистити свої додатки, встановивши активність програми запуску launchMode прапор будь-якого singleTask або singleInstance. Будь-який із цих прапорів запобігатиме ін’єкції завдань, на що покладається StrandHogg 2.0. Однак якщо ваша діяльність використовує один із цих прапорців, це може спричинити проблеми з певними потоками програми, тому це не завжди бажано.

Promon також рекламує власний продукт «In-App Protection by Promon SHIELD», який схожий на бібліотеку які розробники додатків можуть застосувати для моніторингу завдань у процесі вашого додатка, щоб перевірити їх на нерегулярні вставки. Оскільки не існує справді ефективної стратегії пом’якшення наслідків для розробників чи користувачів, дуже важливо, щоб виробники якнайшвидше впровадили патч для вирішення цієї проблеми.

На щастя, Promon дотримувався вказівок щодо відповідального розкриття інформації, перш ніж оприлюднити цей експлойт (і це все ще не повністю публічно — Promon чекає 90 днів, перш ніж повністю розкрити, як StrandHogg 2.0 роботи). З тих пір Google портував виправлення для цього експлойта на Android 8.0 Oreo, Android 8.1 Oreo та Android 9 Pie з Травень 2020 р. Рівень виправлення безпеки Android (SPL). Користувачі Android 10 і новіших версій не вразливі, хоча ми не зовсім впевнені, чому це так. Ймовірно, це якось пов’язано з новими обмеженнями Android 10 щодо запуску дій і тим, як Google інтегрував це в стек завдань. Promon каже, що «на Android 10 атака абсолютно неефективна, і дії розбиваються на різні завдання та на окремі стеки завдань відповідно до adb shell dumpsys activity activities."

Якщо виробник вашого пристрою все ще надає оновлення безпеки (ви можете прочитати більше про як тут працює процес виправлення безпеки), ви повинні якнайшвидше допомогати їм отримати оновлення. В іншому випадку вам просто потрібно буде бути обережним, які програми ви завантажуєте та запускаєте (хоча ви все одно повинні це робити).

Щоб дізнатися більше та про випадки використання StrandHogg 2.0, перегляньте офіційне оголошення на сайті Promon. Для розробників спеціальних ПЗУ ви можете знайти відповідні коміти AOSP для запобігання атакам StrandHogg 2.0 тут і тут.


Графік розкриття інформації

Ось графік розкриття інформації, який Promon поділився у своєму документі StandHogg 2.0:

  • 4 грудня 2019 р – Повідомлено про проблему в Google
  • 4 грудня 2019 р – Поділився з Google PoC «шкідливим додатком» і відео
  • 4 грудня 2019 р – Google підтвердив отримання звіту
  • 9 грудня 2019 р – Google встановив серйозність знахідки як «Критична»
  • 9 грудня 2019 р – Google підтверджує, що вони можуть відтворити проблему
  • 14 лютого 2020 р – Ми повідомляємо Google, що на початку березня наближається 90-денний термін розкриття інформації, і просимо надати статус з їхнього боку
  • 14 лютого 2020 р – Google відповідає, що найшвидше запровадити виправлення – квітень
  • 14 лютого 2020 р – Ми повідомляємо Google, що працюємо над пом’якшенням
  • 14 лютого 2020 р – відповідає Google. Вони працюють над усуненням наслідків і запитують, чи можемо ми поділитися, які пом’якшення ми рекомендуємо
  • 17 лютого 2020 р – Ми повідомляємо Google, що можемо затримати розголошення до квітня. Ми запитуємо номер CVE
  • 17 лютого 2020 р – Ми ділимося своїми стратегіями пом’якшення, а також тим, як ми передбачаємо пом’якшення платформи
  • 23 березня 2020 р – Google відповідає ідентифікатором CVE (CVE-2020-0096)
  • 23 березня 2020 р – Google відповідає, що загальна доступність виправлення для Android буде доступна в травні
  • 23 березня 2020 р – Google запитує, чи будемо ми розглядати відкладення розкриття до травня
  • 27 березня 2020 р – Ми відповідаємо, що відкладемо розкриття до травня
  • 22 квітня 2020 р – Google повідомляє нам, що в травневому бюлетені безпеки планується виправлення вразливості