StrandHogg 2.0 Exploit vysvetlené

StrandHogg 2.0 je nebezpečná nová zraniteľnosť systému Android. Tu je návod, ako to môže ovplyvniť používateľov a ako môžu vývojári pred ním chrániť svoje aplikácie.

Je 22:00. Viete, kde sú vaše aktivity? Existuje nová zraniteľnosť, ktorú je možné zneužiť na miliónoch zariadení s Androidom, a je tiež dosť nepríjemná. Stručne povedané, táto konštrukčná chyba umožňuje útočníkovi prezentovať svoju vlastnú aktivitu (stránku) nad inou aplikáciou, čo môže zmiasť používateľa, aby prezradil svoje súkromné ​​údaje. Zraniteľnosť bola nazvaná StrandHogg 2.0 a bola nedávno zverejnená Promonnórska bezpečnostná firma.

Zraniteľnosť StrandHogg 2.0 teoreticky postihuje všetky zariadenia so systémom Android, ktoré používajú verzie Androidu staré ako Honeycomb (3.0) a až po Android 9 Pie (9.0). Založený na najnovšie štatistiky distribúcie verzií systému Android, to znamená približne 91,8 % všetkých zariadení so systémom Android je zraniteľných voči StrandHogg 2.0. Zraniteľnosť bola priradená CVE-2020-0096 a dostal a

stupeň závažnosti „kritického“. Na fungovanie nevyžaduje žiadne špeciálne povolenia a môže fungovať takmer úplne bez interakcie používateľa. Jediné, čo musí používateľ urobiť, je otvoriť aplikáciu so skrytým škodlivým kódom, a potom je zraniteľný voči zneužitiu.

Promon bol taký láskavý, že nám poslal svoju aplikáciu proof of concept a jej zdrojový kód, aby sme mohli čo najlepšie vysvetliť, ako exploit funguje, prečo je pre používateľov dôležitý a ako môžu vývojári chrániť svoje aplikácie proti tomu.


Ako to funguje

Povedzme, že používate Gmail a kliknete na webový odkaz. Ak prejdete na obrazovku nedávnych aplikácií, môžete si všimnúť, že webová stránka sa zdá byť „vnútri“ Gmailu. Ukážka zobrazuje webovú stránku, ale ikona a názov aplikácie sú stále z Gmailu. Toto sa stane, keď aplikácia/aktivita spustí inú aplikáciu/aktivitu v rámci tej istej úlohy. Teraz si predstavte, že ste tento odkaz neotvorili zámerne. Zdá sa vám, že je to len súčasť aplikácie Gmail. Toto je správanie, ktoré využíva StrandHogg 2.0.

Budeme tu musieť vynechať nejaké detaily, ale tu je zhruba to, ako tento exploit funguje. V nasledujúcom prípade predpokladajme, že útočník chce získať prihlasovacie údaje používateľa Gmail.

  1. Používateľ si stiahne škodlivú aplikáciu (samozrejme bez toho, aby vedel, že je škodlivá) a otvorí ju.
  2. Na pozadí aplikácia otvorí Gmail, umiestni na ňu podobnú prihlasovaciu aktivitu a potom spustí ďalšiu aktivitu.
  3. Používateľ otvorí Gmail a uvidí, čo vyzerá ako prihlasovacia obrazovka Gmailu, ale v skutočnosti ide o phishingovú aktivitu útočníka.

Posledná aktivita spustená v kroku 2 môže byť čokoľvek, čo zabráni podozreniu. Aplikácia by mohla predstierať zlyhanie a vrátiť sa na domovskú obrazovku, alebo by sa mohla jednoducho otvoriť vo svojej hlavnej aktivite, akoby sa nič nestalo. Jediná podozrivá vec, ktorú môže používateľ vidieť, je veľa otváracích animácií pri spustení všetkých aktivít. Najhoršia časť: Nebude to ani vyzerať, akoby bol Gmail otvorený.

Zdroj: Promon

Samozrejme, že útočník môže urobiť viac, než len ukázať falošnú prihlasovaciu obrazovku. Škodlivá aplikácia by mohla namiesto toho zobraziť výzvu na získanie povolenia a oklamať používateľa, aby udelil nechcené povolenia. Zatiaľ čo vyžiadanie akýchkoľvek špeciálnych povolení, ako napríklad Prístupnosť, môže vyvolať podozrenie používateľa, je možné narobiť veľa škody s niečím, ako je Prístup k úložisku.


Technické kúsky

Táto ďalšia časť je prehľadom na vysokej úrovni o tom, ako StrandHogg 2.0 funguje. Promon nezverejní úplné podrobnosti ešte niekoľko mesiacov, takže nemôžeme presne povedať, ako je tento exploit implementovaný. Existuje však niekoľko technických detailov, o ktorých môžeme hovoriť.

Stručne povedané, StrandHogg 2.0 unesie Android Context.startActivities() Metóda API s použitím troch zámerov.

  • Prvý Intent je ten, ktorý spúšťa, v našom príklade, Gmail. Je označený s Intent.FLAG_ACTIVITY_NEW_TASK.
  • Druhý zámer je škodlivý. V našom príklade ide o aktivitu podobného prihlásenia. Tento zámer nemá žiadne príznaky.
  • Tretím zámerom je rozptýlenie. Zabezpečuje, aby používateľ nebol podozrivý z toho, že sa Gmail len náhodne otvára namiesto aplikácie, na ktorú klepol (t. j. tej, ktorá spustila útok). Je označený s Intent.FLAG_ACTIVITY_NEW_TASK.

Všetky tieto zámery sú potom odovzdané v poli do startActivities() metóda.

Kľúčom v tomto prípade je nedostatok príznakov druhého zámeru. Tým sme v podstate len replikovali príklad Gmailu zhora. Technicky je to úloha Gmailu, ale najvyššia aktivita je na útočníkovi. Keď používateľ potom klikne na ikonu domovskej obrazovky Gmailu, namiesto aktivity Gmailu sa zobrazí aktivita útočníka.


Dôkaz konceptu

S informáciami, ktoré nám spoločnosť Promon poslala, sme dokázali zopakovať ich proof of concept. Tu je záznam obrazovky zo Samsungu Galaxy Note8 so systémom Android 9 Pie, ktorý ho ukazuje v akcii.


Zmierňovacie techniky a problémy

Teraz jednoduchá replikácia vyššie uvedeného v kóde v skutočnosti nebude fungovať. Nie je to úplný príklad a existuje niekoľko ďalších vecí, ktoré musí útočník urobiť, aby to fungovalo, s ktorými sa nemôžeme podeliť. Nie je však ťažké ich uhádnuť sami, a to je súčasť toho, čo robí tento útok tak nebezpečným. StrandHogg 2.0 je pomerne ľahko implementovateľný exploit a je ťažké ho zmierniť.

Zmiernenie nemôže zahŕňať len zaradenie všetkých aplikácií, ktoré používajú, na čiernu listinu startActivities(), pretože existuje veľa legitímnych použití. Je tiež veľmi ťažké automatizovať detekčný algoritmus. Zlomyseľní vývojári môžu použiť najrôznejšie triky, aby ich implementáciu StrandHogg 2.0 efektívne zneviditeľnili pre služby ako Google Play Protect. StrandHogg 1.0 vyžadoval, aby útočník pridal atribút do súboru AndroidManifest.xml škodlivej aplikácie, ktorý bolo pomerne ľahké odhaliť. Na druhej strane StrandHogg 2.0 funguje výlučne v jazyku Java/Kotlin.

Ak vezmeme do úvahy zahmlievanie, reflexiu a dokonca len rôzne štýly kódovania, zdá sa nepraktické automaticky správne zisťovať aplikáciu využívajúcu tento exploit. A čo viac, ak je používateľ predmetom útoku StrandHogg 2.0, možno o tom ani nevie. Ak otvoríte Gmail a uvidíte jeho prihlasovaciu obrazovku, možno si myslíte, že platnosť vašej relácie vypršala a bez rozmýšľania zadajte svoje prihlasovacie údaje.

Keď sme kontaktovali Google so žiadosťou o odpoveď, hovorca ponúkol nasledujúce vyhlásenie:

„Oceňujeme prácu výskumníkov a vydali sme opravu problému, ktorý identifikovali. Okrem toho Google Play Protect zisťuje a blokuje škodlivé aplikácie vrátane tých, ktoré používajú túto techniku.“

Znie to dobre a dúfajme, že to bude mať aspoň nejaký účinok proti útokom StrandHogg 2.0. Za zmienku však stojí, že Google Play Protect nie odhaliť našu aplikáciu proof of concept ako škodlivú aj po vykonaní manuálneho skenovania.

Promon hovorí, že oni "nepozorovali žiadny skutočný malvér využívajúci zraniteľnosť StrandHogg 2.0“, ale neexistuje žiadna záruka, že toto je prvýkrát, čo bol exploit objavený. Z tohto dôvodu spoločnosť Promon odporúča, aby vývojári pokračovali a chránili svoje aplikácie nastavením aktivity spúšťača launchMode vlajka buď singleTask alebo singleInstance. Každý z týchto príznakov zabráni vkladaniu úloh, na čo sa spolieha StrandHogg 2.0. Ak však vaša Aktivita použije jeden z týchto príznakov, môže to spôsobiť problémy s určitými postupmi aplikácií, takže to nie je vždy žiaduce.

Promon tiež propaguje svoj vlastný produkt „In-App Protection by Promon SHIELD“, ktorý znie ako knižnica ktoré môžu vývojári aplikácií implementovať na monitorovanie úloh v procese vašej aplikácie a kontrolu, či nie sú nepravidelné vloženia. Pretože neexistuje žiadna skutočne účinná stratégia pre vývojárov alebo používateľov, je dosť dôležité, aby výrobcovia implementovali opravu na opravu tohto problému čo najskôr.

Našťastie spoločnosť Promon pred zverejnením tohto zneužitia dodržiavala pokyny na zodpovedné zverejnenie (a stále to nie je úplne verejné – Promon čaká 90 dní, kým úplne zverejní, ako StrandHogg 2.0 Tvorba). Spoločnosť Google odvtedy zálohovala opravy tohto exploitu pre Android 8.0 Oreo, Android 8.1 Oreo a Android 9 Pie s Úroveň opravy zabezpečenia systému Android (SPL) z mája 2020. Používatelia v systéme Android 10 a novších nie sú zraniteľní, aj keď si nie sme úplne istí, prečo je to tak. Pravdepodobne to má niečo spoločné s novými obmedzeniami systému Android 10, ktoré sa týkajú spúšťania aktivít a ako to spoločnosť Google integrovala do zásobníka úloh. Promon hovorí, že „v systéme Android 10 je útok úplne neúčinný a aktivity sú rozdelené do rôznych úloh a do samostatných zásobníkov úloh podľa adb shell dumpsys activity activities."

Ak výrobca vášho zariadenia stále poskytuje aktualizácie zabezpečenia (môžete si prečítať viac o ako tu funguje proces bezpečnostnej opravy), mali by ste ich čo najskôr nechať aktualizovať. V opačnom prípade si budete musieť dávať pozor na to, ktoré aplikácie sťahujete a spúšťate (hoci by ste to aj tak mali robiť).

Ďalšie podrobnosti a prípady použitia StrandHogg 2.0 nájdete na oficiálne oznámenie na webovej stránke Promon. Pre vývojárov vlastných ROM môžete nájsť príslušné potvrdenia AOSP na zabránenie útokom StrandHogg 2.0 tu a tu.


Časová os zverejnenia

Tu je časová os zverejnenia, ktorú Promon zdieľal vo svojom dokumente StandHogg 2.0:

  • 4. decembra 2019 – Problém nahlásený spoločnosti Google
  • 4. decembra 2019 – Zdieľal PoC „škodlivú aplikáciu“ a video so spoločnosťou Google
  • 4. decembra 2019 – Google potvrdil prijatie správy
  • 9. decembra 2019 – Google nastavil závažnosť nálezu ako „Kritické“
  • 9. decembra 2019 – Google potvrdzuje, že sú schopní problém reprodukovať
  • 14. februára 2020 – Informujeme Google, že 90-dňové zverejnenie sa blíži začiatkom marca, a žiadame o status na ich strane
  • 14. februára 2020 – Google odpovedá, že apríl je najskôr, ako môžu zaviesť opravu
  • 14. februára 2020 – Informujeme Google, že pracujeme na zmiernení
  • 14. februára 2020 – Google odpovedá. Pracujú na nápravách a pýtajú sa, či sa môžeme podeliť o zmiernenia, ktoré odporúčame
  • 17. februára 2020 – Informujeme Google, že zverejnenie môžeme odložiť do apríla. Žiadame o CVE číslo
  • 17. februára 2020 – Zdieľame naše stratégie zmierňovania, ako aj to, ako si predstavujeme zmiernenie platformy
  • 23. marca 2020 – Google odpovedá ID CVE (CVE-2020-0096)
  • 23. marca 2020 – Google odpovedá, že všeobecná dostupnosť opravy pre Android bude k dispozícii v máji
  • 23. marca 2020 – Google sa pýta, či zvážime odloženie zverejnenia na máj
  • 27. marca 2020 – Odpovedáme, že zverejnenie odložíme do mája
  • 22. apríla 2020 – Spoločnosť Google nás informuje, že májový bezpečnostný bulletin má obsahovať opravu tejto chyby zabezpečenia