Objašnjenje iskorištavanja StrandHogg 2.0

click fraud protection

StrandHogg 2.0 opasna je nova ranjivost Androida. Evo kako to može utjecati na korisnike i kako programeri mogu zaštititi svoje aplikacije od toga.

22:00 sata je. Znate li gdje su vaše aktivnosti? Postoji nova ranjivost koja se može iskoristiti na milijunima Android uređaja, a također je i prilično gadna. Ukratko, ova greška u dizajnu omogućuje napadaču da predstavi svoju aktivnost (stranicu) povrh druge aplikacije, potencijalno zbunjujući korisnika da oda svoje privatne podatke. Ranjivost je nazvana StrandHogg 2.0 i nedavno ju je otkrio Promocija, norveška zaštitarska tvrtka.

Ranjivost StrandHogg 2.0 teoretski utječe na sve Android uređaje s verzijama Androida starim od Honeycomb (3.0) do Android 9 Pie (9.0). Bazirano na statistika distribucije najnovije verzije Androida, to znači da otprilike 91,8% svih Android uređaja ranjivo je na StrandHogg 2.0. Ranjivost je dodijeljena CVE-2020-0096 i dobio je a stupanj ozbiljnosti "kritično". Ne zahtijeva nikakve posebne dozvole za rad i može funkcionirati gotovo u potpunosti bez interakcije korisnika. Sve što korisnik treba učiniti je otvoriti aplikaciju sa skrivenim zlonamjernim kodom i tada je ranjiv na iskorištavanje.

Promon je bio dovoljno ljubazan da nam pošalje svoju aplikaciju za dokaz koncepta i njen izvorni kod kako bismo mogli najbolje objasnite kako eksploatacija funkcionira, zašto je važna korisnicima i kako programeri mogu zaštititi svoje aplikacije protiv toga.


Kako radi

Recimo da koristite Gmail i kliknete web vezu. Ako odete na zaslon nedavnih aplikacija, možda ćete primijetiti da se web-stranica čini "unutar" Gmaila. Pregled prikazuje web mjesto, ali ikona i naziv aplikacije i dalje su s Gmaila. To je nešto što se događa kada aplikacija/aktivnost pokrene drugu aplikaciju/aktivnost u istom zadatku. Sada zamislite da niste namjerno otvorili tu poveznicu. Vama izgleda kao da je to samo dio aplikacije Gmail. Ovo je ponašanje koje StrandHogg 2.0 iskorištava.

Ovdje ćemo morati izostaviti neke pojedinosti, ali evo otprilike kako ovaj exploit funkcionira. Za sljedeće, pretpostavimo da napadač želi dobiti korisničku prijavu na Gmail.

  1. Korisnik preuzme zlonamjernu aplikaciju (naravno, ne znajući da je zlonamjerna) i otvori je.
  2. U pozadini, aplikacija otvara Gmail, stavlja na njega sličnu aktivnost prijave, a zatim pokreće drugu aktivnost.
  3. Korisnik otvara Gmail i vidi nešto što izgleda kao Gmailov ekran za prijavu, ali je zapravo napadačeva phishing aktivnost.

Konačna aktivnost pokrenuta u koraku 2 može biti bilo što što izbjegava sumnju. Aplikacija bi mogla odglumiti rušenje i vratiti se na početni zaslon ili se jednostavno otvoriti na svoju glavnu aktivnost kao da se ništa nije dogodilo. Jedina sumnjiva stvar koju bi korisnik mogao vidjeti je hrpa početnih animacija pri pokretanju svih aktivnosti. Najgori dio: neće izgledati da je Gmail otvoren.

Izvor: Promon

Naravno, napadač može učiniti više od pukog prikazivanja lažnog zaslona za prijavu. Zlonamjerna aplikacija bi umjesto toga mogla prikazati upit za dopuštenja, navodeći korisnika da da neželjena dopuštenja. Iako bi traženje bilo kakvih posebnih dopuštenja poput pristupačnosti moglo učiniti korisnika sumnjičavim, moguće je napraviti mnogo štete s nečim poput pristupa pohrani.


Tehnički dijelovi

Ovaj sljedeći odjeljak je pregled visoke razine o tome kako StrandHogg 2.0 radi. Promon neće objaviti potpune pojedinosti još nekoliko mjeseci, tako da ne možemo podijeliti točno kako je ovaj exploit implementiran. Ipak, postoje neki tehnički detalji o kojima možemo razgovarati.

Ukratko, StrandHogg 2.0 otima Android Context.startActivities() API metoda, koristeći tri namjere.

  • Prva namjera je ona koja pokreće, u našem primjeru, Gmail. Označeno je sa Intent.FLAG_ACTIVITY_NEW_TASK.
  • Druga namjera je zlonamjerna. U našem primjeru, to je za aktivnost podjednake prijave. Ova namjera nema zastavice.
  • Treća namjera je odvraćanje pažnje. Osigurava da korisnik nije sumnjičav zbog toga što se Gmail samo nasumično otvara umjesto aplikacije koju je dodirnuo (tj. one koja pokreće napad). Označeno je sa Intent.FLAG_ACTIVITY_NEW_TASK.

Sve ove namjere se zatim prosljeđuju u nizu u startActivities() metoda.

Nedostatak zastavica druge namjere je ovdje ključ. Čineći to, zapravo smo samo replicirali primjer Gmaila odozgo. Zadatak je tehnički Gmailov, ali najviša aktivnost je napadačeva. Kada korisnik zatim klikne ikonu početnog zaslona Gmaila, prikazuje se aktivnost napadača umjesto Gmailove.


Dokaz koncepta

S informacijama koje nam je Promon poslao, uspjeli smo replicirati njihov dokaz koncepta. Evo snimke zaslona sa Samsung Galaxy Note8 sa sustavom Android 9 Pie koja ga prikazuje u akciji.


Tehnike i problemi ublažavanja

Jednostavno repliciranje gore navedenog u kodu zapravo neće funkcionirati. To nije potpuni primjer, a postoji još nekoliko stvari koje napadač mora učiniti da bi uspio, a koje ne možemo podijeliti. Ali nije ih osobito teško sami pogoditi i to je dio onoga što ovaj napad čini tako opasnim. StrandHogg 2.0 relativno je jednostavan za implementaciju, a težak za ublažavanje.

Ublažavanje ne može uključivati ​​samo stavljanje na crnu listu svih aplikacija koje koriste startActivities(), jer postoji mnogo legitimnih upotreba za to. Također je jako teško automatizirati algoritam detekcije za to. Zlonamjerni programeri mogu upotrijebiti sve vrste trikova kako bi svoju implementaciju StrandHogg 2.0 učinili učinkovito nevidljivom uslugama kao što je Google Play Protect. StrandHogg 1.0 zahtijevao je od napadača da doda atribut u AndroidManifest.xml zlonamjerne aplikacije, što je bilo relativno lako otkriti. StrandHogg 2.0, s druge strane, u potpunosti funkcionira u Javi/Kotlin.

Uzimajući u obzir maskiranje, refleksiju, pa čak i samo različite stilove kodiranja, čini se nepraktičnim automatski ispravno detektirati aplikaciju koja koristi ovaj exploit. Štoviše, ako je korisnik predmet napada StrandHogg 2.0, možda čak i ne zna. Ako otvorite Gmail i vidite njegov zaslon za prijavu, mogli biste samo pomisliti da vam je sesija istekla i bez razmišljanja unijeti svoje podatke za prijavu.

Kad smo kontaktirali Google za odgovor, glasnogovornik je dao sljedeću izjavu:

"Cijenimo rad istraživača i objavili smo popravak za problem koji su identificirali. Osim toga, Google Play Protect otkriva i blokira zlonamjerne aplikacije, uključujući one koje koriste ovu tehniku."

Ovo zvuči dobro i nadamo se da ima barem neki učinak protiv napada StrandHogg 2.0. Ipak, vrijedi napomenuti da Google Play Protect nije otkriti našu aplikaciju za dokaz koncepta kao zlonamjernu, čak i nakon izvođenja ručnog skeniranja.

Promon kaže da su "nisu uočili nikakav zlonamjerni softver u stvarnom životu koji koristi ranjivost StrandHogg 2.0," ali nema jamstva da je ovo prvi put da je exploit otkriven. Iz tog razloga, Promon preporučuje razvojnim programerima da nastave i zaštite svoje aplikacije postavljanjem aktivnosti pokretača launchMode zastava bilo kojem singleTask ili singleInstance. Bilo koja od ovih oznaka spriječit će ubacivanje zadatka, na što se StrandHogg 2.0 oslanja. Međutim, upotreba jedne od ovih zastavica u vašoj aktivnosti može uzrokovati probleme s određenim tokovima aplikacije, pa to nije uvijek poželjno.

Promon također promovira svoj proizvod "In-App Protection by Promon SHIELD" koji zvuči poput knjižnice koje programeri aplikacija mogu implementirati za praćenje zadataka u procesu vaše aplikacije kako bi provjerili jesu li nepravilni umetanja. Budući da ne postoji istinski učinkovita strategija za razvojne programere ili korisnike, prilično je važno da proizvođači implementiraju zakrpu kako bi to popravili što prije.

Srećom, Promon je slijedio smjernice za odgovorno otkrivanje prije nego što je ovaj exploit objavio javnosti (i još uvijek nije u potpunosti javno—Promon čeka 90 dana prije nego što u potpunosti otkrije kako StrandHogg 2.0 djela). Google je od tada prenio zakrpe za ovaj exploit na Android 8.0 Oreo, Android 8.1 Oreo i Android 9 Pie s Razina sigurnosne zakrpe za Android (SPL) iz svibnja 2020.. Korisnici na Androidu 10 i novijim nisu ranjivi, iako nismo potpuno sigurni zašto je to tako. Vjerojatno ima neke veze s novim ograničenjima Androida 10 koja se tiču ​​pokretanja aktivnosti i kako je Google to integrirao u skup zadataka. Promon kaže da je "na Androidu 10 napad potpuno neučinkovit, a aktivnosti su podijeljene u različite zadatke i u zasebne nizove zadataka prema adb shell dumpsys activity activities."

Ako proizvođač vašeg uređaja još uvijek nudi sigurnosna ažuriranja (možete pročitati više o kako ovdje funkcionira proces sigurnosne zakrpe), trebali biste ih gnjaviti za ažuriranje što je prije moguće. U suprotnom, samo ćete morati paziti koje aplikacije preuzimate i pokrećete (iako biste to ionako trebali činiti).

Za više detalja i slučajeve korištenja StrandHogg 2.0, pogledajte službena objava na Promonovoj stranici. Za prilagođene ROM programere, možete pronaći relevantne AOSP obveze za sprječavanje napada StrandHogg 2.0 ovdje i ovdje.


Vremenska traka otkrivanja

Ovo je vremenski okvir za otkrivanje podataka koji je Promon podijelio u svom dokumentu StandHogg 2.0:

  • 4. prosinca 2019 – Prijavljen problem Googleu
  • 4. prosinca 2019 – Podijelio PoC «zlonamjernu aplikaciju» i video s Googleom
  • 4. prosinca 2019 – Google je potvrdio primitak izvješća
  • 9. prosinca 2019 – Google je postavio ozbiljnost nalaza kao «Kritično»
  • 9. prosinca 2019 – Google potvrđuje da je u stanju reproducirati problem
  • 14. veljače 2020 – Obavještavamo Google da se približava 90-dnevno otkrivanje podataka početkom ožujka i tražimo status s njihove strane
  • 14. veljače 2020 – Google odgovara da je travanj najranije što mogu izbaciti popravak
  • 14. veljače 2020 – Obavještavamo Google da radimo na ublažavanju
  • 14. veljače 2020 – odgovara Google. Rade na sanaciji i pitaju možemo li podijeliti koje mjere ublažavanja preporučujemo
  • 17. veljače 2020 – Obavještavamo Google da možemo zadržati otkrivanje do travnja. Tražimo CVE broj
  • 17. veljače 2020 – Dijelimo svoje strategije ublažavanja, kao i kako zamišljamo ublažavanje platforme
  • 23. ožujka 2020 – Google odgovara CVE ID-om (CVE-2020-0096)
  • 23. ožujka 2020 – Google odgovara da će opća dostupnost popravka za Android biti dostupna u svibnju
  • 23. ožujka 2020 – Google pita hoćemo li razmotriti odgodu otkrivanja do svibnja
  • 27. ožujka 2020 – Odgovaramo da ćemo odgoditi objavu do svibnja
  • 22. travnja 2020 – Google nas obavještava da bi svibanjski sigurnosni bilten trebao sadržavati zakrpu za ranjivost