Android Applications Pentesting

Support HackTricks

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

Android Applications Basics

Preporučuje se da započnete čitanje ove stranice kako biste saznali o najvažnijim delovima vezanim za Android bezbednost i najopasnijim komponentama u Android aplikaciji:

Android Applications Basics

ADB (Android Debug Bridge)

Ovo je glavni alat koji vam je potreban za povezivanje sa android uređajem (emuliranim ili fizičkim). ADB omogućava kontrolu uređaja preko USB ili mreže sa računara. Ova alatka omogućava kopiranje fajlova u oba pravca, instalaciju i deinstalaciju aplikacija, izvršavanje shell komandi, pravljenje rezervnih kopija podataka, čitanje logova, između ostalih funkcija.

Pogledajte sledeću listu ADB Commands da biste naučili kako koristiti adb.

Smali

Ponekad je zanimljivo modifikovati kod aplikacije kako biste pristupili skrivenim informacijama (možda dobro obfuskovanim lozinkama ili zastavicama). Tada bi moglo biti zanimljivo dekompilirati apk, modifikovati kod i ponovo ga kompajlirati. U ovom tutorijalu možete naučiti kako dekompilirati APK, modifikovati Smali kod i ponovo kompajlirati APK sa novom funkcionalnošću. Ovo može biti veoma korisno kao alternativa za nekoliko testova tokom dinamičke analize koji će biti predstavljeni. Tada, uvek imajte na umu ovu mogućnost.

Other interesting tricks

adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
  • Spojite sve delove i osnovne apk-ove sa APKEditor:

mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk

# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed

Staticka Analiza

Prvo, za analizu APK-a trebate pogledati Java kod koristeći dekompajler. Molimo, pročitajte ovde da biste pronašli informacije o različitim dostupnim dekompajlerima.

Traženje zanimljivih informacija

Samo gledajući stringove APK-a možete tražiti lozinke, URL-ove (https://github.com/ndelphit/apkurlgrep), api ključeve, enkripciju, bluetooth uuids, tokene i sve što je zanimljivo... potražite čak i backdoor-e za izvršavanje koda ili backdoor-e za autentifikaciju (hardkodirane admin kredencijale za aplikaciju).

Firebase

Obratite posebnu pažnju na firebase URL-ove i proverite da li je loše konfigurisano. Više informacija o tome šta je Firebase i kako ga iskoristiti ovde.

Osnovno razumevanje aplikacije - Manifest.xml, strings.xml

Istraživanje _Manifest.xml** i **strings.xml_** datoteka može otkriti potencijalne sigurnosne ranjivosti**. Ove datoteke se mogu pristupiti koristeći dekompajlere ili preimenovanjem ekstenzije APK datoteke u .zip i zatim raspakivanjem.

Ranjivosti identifikovane iz Manifest.xml uključuju:

  • Debuggable aplikacije: Aplikacije postavljene kao debuggable (debuggable="true") u Manifest.xml datoteci predstavljaju rizik jer omogućavaju veze koje mogu dovesti do eksploatacije. Za dalju razumevanje kako iskoristiti debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploataciji debuggable aplikacija na uređaju.

  • Podešavanja rezervne kopije: Atribut android:allowBackup="false" treba eksplicitno postaviti za aplikacije koje se bave osetljivim informacijama kako bi se sprečile neovlašćene rezervne kopije podataka putem adb, posebno kada je usb debugging omogućen.

  • Mrežna sigurnost: Prilagođene konfiguracije mrežne sigurnosti (android:networkSecurityConfig="@xml/network_security_config") u res/xml/ mogu specificirati sigurnosne detalje kao što su pinovi sertifikata i podešavanja HTTP saobraćaja. Primer je omogućavanje HTTP saobraćaja za određene domene.

  • Izvezene aktivnosti i servisi: Identifikacija izvezenih aktivnosti i servisa u manifestu može istaknuti komponente koje bi mogle biti zloupotrebljene. Dalja analiza tokom dinamičkog testiranja može otkriti kako iskoristiti ove komponente.

  • Content Providers i FileProviders: Izloženi content provider-i mogli bi omogućiti neovlašćen pristup ili modifikaciju podataka. Konfiguracija FileProvider-a takođe treba biti pažljivo ispitana.

  • Broadcast Receivers i URL sheme: Ove komponente se mogu iskoristiti za eksploataciju, sa posebnim naglaskom na to kako se URL sheme upravljaju za ranjivosti unosa.

  • SDK verzije: Atributi minSdkVersion, targetSDKVersion i maxSdkVersion ukazuju na podržane Android verzije, ističući važnost ne podržavanja zastarelih, ranjivih Android verzija iz sigurnosnih razloga.

Iz strings.xml datoteke, osetljive informacije kao što su API ključevi, prilagođene sheme i druge beleške programera mogu se otkriti, naglašavajući potrebu za pažljivim pregledom ovih resursa.

Tapjacking

Tapjacking je napad gde se maliciozna aplikacija pokreće i pozicionira iznad aplikacije žrtve. Kada vidljivo prikrije aplikaciju žrtve, njen korisnički interfejs je dizajniran na način da prevari korisnika da interaguje s njom, dok zapravo prosleđuje interakciju aplikaciji žrtve. U suštini, to je oslepljivanje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve.

Pronađite više informacija u:

Tapjacking

Preuzimanje zadataka

Aktivnost sa launchMode postavljenim na singleTask bez definisanog taskAffinity je ranjiva na preuzimanje zadataka. To znači da se aplikacija može instalirati i ako se pokrene pre stvarne aplikacije, mogla bi preuzeti zadatak stvarne aplikacije (tako da će korisnik interagovati sa malicioznom aplikacijom misleći da koristi pravu).

Više informacija u:

Android Task Hijacking

Nesigurno skladištenje podataka

Interno skladište

U Androidu, datoteke smeštene u interno skladište su dizajnirane da budu pristupačne isključivo od strane aplikacije koja ih je napravila. Ova sigurnosna mera je sprovedena od strane Android operativnog sistema i obično je adekvatna za sigurnosne potrebe većine aplikacija. Međutim, programeri ponekad koriste režime kao što su MODE_WORLD_READABLE i MODE_WORLD_WRITABLE da omoguće deljenje datoteka između različitih aplikacija. Ipak, ovi režimi ne ograničavaju pristup ovim datotekama od strane drugih aplikacija, uključujući potencijalno maliciozne.

  1. Staticka analiza:

  • Osigurajte da se korišćenje MODE_WORLD_READABLE i MODE_WORLD_WRITABLE pažljivo ispita. Ovi režimi mogu potencijalno izložiti datoteke neprikladnom ili neovlašćenom pristupu.

  1. Dinamička analiza:

  • Proverite dozvole postavljene na datotekama koje kreira aplikacija. Konkretno, proverite da li su neke datoteke postavljene da budu čitljive ili zapisive globalno. Ovo može predstavljati značajan sigurnosni rizik, jer bi omogućilo bilo kojoj aplikaciji instaliranoj na uređaju, bez obzira na njen izvor ili nameru, da čita ili modifikuje ove datoteke.

Eksterno skladište

Kada se radi o datotekama na eksternom skladištu, kao što su SD kartice, treba preduzeti određene mere opreza:

  1. Pristupačnost:

  • Datoteke na eksternom skladištu su globalno čitljive i zapisive. To znači da bilo koja aplikacija ili korisnik može pristupiti ovim datotekama.

  1. Sigurnosne brige:

  • S obzirom na lakoću pristupa, savetuje se da se ne čuvaju osetljive informacije na eksternom skladištu.

  • Eksterno skladište može biti uklonjeno ili dostupno bilo kojoj aplikaciji, što ga čini manje sigurnim.

  1. Rukovanje podacima iz eksternog skladišta:

  • Uvek izvršite validaciju unosa na podacima preuzetim iz eksternog skladišta. Ovo je ključno jer su podaci iz nepouzdanog izvora.

  • Čuvanje izvršnih ili klasa datoteka na eksternom skladištu za dinamičko učitavanje se snažno ne preporučuje.

  • Ako vaša aplikacija mora preuzeti izvršne datoteke iz eksternog skladišta, osigurajte da su ove datoteke potpisane i kriptografski verifikovane pre nego što se dinamički učitaju. Ovaj korak je vitalan za održavanje sigurnosne integriteta vaše aplikacije.

Eksterno skladište može biti pristupačno u /storage/emulated/0, /sdcard, /mnt/sdcard

Počevši od Android 4.4 (API 17), SD kartica ima strukturu direktorijuma koja ograničava pristup aplikaciji na direktorijum koji je specifično za tu aplikaciju. Ovo sprečava malicioznu aplikaciju da dobije pristup za čitanje ili pisanje datoteka druge aplikacije.

Osetljivi podaci pohranjeni u čistom tekstu

  • Deljene preferencije: Android omogućava svakoj aplikaciji da lako sačuva xml datoteke na putanji /data/data/<packagename>/shared_prefs/ i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.

  • Baze podataka: Android omogućava svakoj aplikaciji da lako sačuva sqlite baze podataka na putanji /data/data/<packagename>/databases/ i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli.

Slomljeni TLS

Prihvati sve sertifikate

Iz nekog razloga, ponekad programeri prihvataju sve sertifikate čak i ako, na primer, ime hosta ne odgovara sa linijama koda kao što je sledeća:

SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.

Broken Cryptography

Loši procesi upravljanja ključevima

Neki programeri čuvaju osetljive podatke u lokalnoj memoriji i šifruju ih sa ključem koji je hardkodiran/predvidljiv u kodu. To ne bi trebalo da se radi jer bi neki proces obrnute inženjeringa mogao omogućiti napadačima da izvuku poverljive informacije.

Korišćenje nesigurnih i/ili zastarelih algoritama

Programeri ne bi trebali koristiti zastarele algoritme za obavljanje provera autorizacije, čuvanje ili slanje podataka. Neki od ovih algoritama su: RC4, MD4, MD5, SHA1... Ako se hash koriste za čuvanje lozinki, na primer, treba koristiti hash koji je otporan na brute-force sa solju.

Ostale provere

  • Preporučuje se da se obfuskira APK kako bi se otežao posao obrnute inženjeringa napadačima.

  • Ako je aplikacija osetljiva (kao što su bankarske aplikacije), treba da izvrši svoje provere da vidi da li je mobilni uređaj root-ovan i da deluje u skladu s tim.

  • Ako je aplikacija osetljiva (kao što su bankarske aplikacije), treba da proveri da li se koristi emulator.

  • Ako je aplikacija osetljiva (kao što su bankarske aplikacije), treba da proveri svoju integritet pre izvršavanja kako bi se uverila da nije modifikovana.

  • Koristite APKiD da proverite koji je kompajler/paker/obfuskator korišćen za izradu APK-a.

React Native Application

Read the following page to learn how to easily access javascript code of React applications:

React Native Application

Xamarin Applications

Read the following page to learn how to easily access C# code of a xamarin applications:

Xamarin Apps

Superpacked Applications

According to this blog post superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to execute the application and gather the decompressed files from the filesystem.

Automated Static Code Analysis

The tool mariana-trench is capable of finding vulnerabilities by scanning the code of the application. This tool contains a series of known sources (that indicates to the tool the places where the input is controlled by the user), sinks (which indicates to the tool dangerous places where malicious user input could cause damages) and rules. These rules indicates the combination of sources-sinks that indicates a vulnerability.

With this knowledge, mariana-trench will review the code and find possible vulnerabilities on it.

Secrets leaked

An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as https://github.com/dwisiswant0/apkleaks

Bypass Biometric Authentication

Bypass Biometric Authentication (Android)

Other interesting functions

  • Izvršavanje koda: Runtime.exec(), ProcessBuilder(), native code:system()

  • Slanje SMS-ova: sendTextMessage, sendMultipartTestMessage

  • Nativne funkcije deklarisane kao native: public native, System.loadLibrary, System.load

Other tricks

content:// protocol

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!


Dinamička analiza

Prvo, potrebna vam je okruženje gde možete instalirati aplikaciju i sve potrebne alate (Burp CA cert, Drozer i Frida uglavnom). Stoga, uređaj koji je root-ovan (emuliran ili ne) je izuzetno preporučen.

Online dinamička analiza

You can create a free account in: https://appetize.io/. This platform allows you to upload and execute APKs, so it is useful to see how an apk is behaving.

You can even see the logs of your application in the web and connect through adb.

Thanks to the ADB connection you can use Drozer and Frida inside the emulators.

Lokalna dinamička analiza

Korišćenje emulatore

  • Android Studio (Možete kreirati x86 i arm uređaje, a prema ovimnajnovijim x86 verzijama podržavaju ARM biblioteke bez potrebe za sporim arm emulatorom).

  • Learn to set it up in this page:

AVD - Android Virtual Device
  • Genymotion (Besplatna verzija: Personal Edition, potrebno je da napravite nalog. Preporučuje se da preuzmete verziju SA VirtualBox kako biste izbegli potencijalne greške.)

  • Nox (Besplatno, ali ne podržava Frida ili Drozer).

When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible.

To install google services (like AppStore) in Genymotion you need to click on the red marked button of the following image:

Also, notice that in the configuration of the Android VM in Genymotion you can select Bridge Network mode (this will be useful if you will be connecting to the Android VM from a different VM with the tools).

Koristite fizički uređaj

Potrebno je aktivirati debugging opcije i bilo bi dobro ako možete root-ovati uređaj:

  1. Podešavanja.

  2. (Od Android 8.0) Izaberite Sistem.

  3. Izaberite O telefonu.

  4. Pritisnite Broj izrade 7 puta.

  5. Vratite se i naći ćete Opcije za programere.

Kada instalirate aplikaciju, prva stvar koju treba da uradite je da je isprobate i istražite šta radi, kako funkcioniše i da se upoznate sa njom. Preporučujem da izvršite ovu inicijalnu dinamičku analizu koristeći MobSF dinamičku analizu + pidcat, tako da ćemo moći da naučimo kako aplikacija funkcioniše dok MobSF prikuplja mnogo zanimljivih podataka koje možete kasnije pregledati.

Neprikazano curenje podataka

Logovanje

Programeri bi trebali biti oprezni da ne izlažu informacije za debagovanje javno, jer to može dovesti do curenja osetljivih podataka. Preporučuju se alati pidcat i adb logcat za praćenje logova aplikacije kako bi se identifikovale i zaštitile osetljive informacije. Pidcat je omiljen zbog svoje jednostavnosti korišćenja i čitljivosti.

Note that from later newer than Android 4.0, applications are only able to access their own logs. So applications cannot access other apps logs. Anyway, it's still recommended to not log sensitive information.

Keširanje Copy/Paste Bufe

Androidov okvir zasnovan na clipboard-u omogućava funkcionalnost kopiranja i lepljenja u aplikacijama, ali predstavlja rizik jer druge aplikacije mogu pristupiti clipboard-u, potencijalno izlažući osetljive podatke. Ključno je onemogućiti copy/paste funkcije za osetljive delove aplikacije, kao što su podaci o kreditnim karticama, kako bi se sprečilo curenje podataka.

Logovi grešaka

Ako aplikacija pukne i sačuva logove, ovi logovi mogu pomoći napadačima, posebno kada aplikaciju nije moguće obrnuti inženjering. Da biste umanjili ovaj rizik, izbegavajte logovanje prilikom grešaka, a ako logovi moraju biti poslati preko mreže, osigurajte da se šalju putem SSL kanala radi sigurnosti.

Kao pentester, pokušajte da pogledate ove logove.

Podaci o analitici poslati trećim stranama

Aplikacije često integrišu usluge poput Google Adsense, što može nenamerno curiti osetljive podatke zbog nepravilne implementacije od strane programera. Da biste identifikovali potencijalna curenja podataka, preporučuje se da presretnete saobraćaj aplikacije i proverite da li se šalju osetljive informacije trećim stranama.

SQLite DBs

Većina aplikacija će koristiti internu SQLite bazu podataka za čuvanje informacija. Tokom pentesta obratite pažnju na baze podataka koje su kreirane, imena tabela i kolona i sve podatke koji su sačuvani jer biste mogli pronaći osetljive informacije (što bi bila ranjivost). Baze podataka bi trebale biti locirane u /data/data/the.package.name/databases kao /data/data/com.mwr.example.sieve/databases.

Ako baza podataka čuva poverljive informacije i je šifrovana, ali možete pronaći lozinku unutar aplikacije, to je i dalje ranjivost.

Enumerišite tabele koristeći .tables i enumerišite kolone tabela koristeći .schema <table_name>.

Drozer (Eksploatacija aktivnosti, provajdera sadržaja i usluga)

From Drozer Docs: Drozer allows you to assume the role of an Android app and interact with other apps. It can do anything that an installed application can do, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. . Drozer is s useful tool to exploit exported activities, exported services and Content Providers as you will learn in the following sections.

Eksploatacija eksportovanih aktivnosti

Read this if you want to refresh what is an Android Activity. Also remember that the code of an activity starts in the onCreate method.

Zaobilaženje autorizacije

Kada je aktivnost eksportovana, možete pozvati njen ekran iz spoljne aplikacije. Stoga, ako je aktivnost sa osetljivim informacijama eksportovana, mogli biste zaobići mehanizme autentifikacije da biste joj pristupili.

Learn how to exploit exported activities with Drozer.

You can also start an exported activity from adb:

  • PackageName is com.example.demo

  • Exported ActivityName is com.example.test.MainActivity

adb shell am start -n com.example.demo/com.example.test.MainActivity

NAPOMENA: MobSF će detektovati kao malicioznu upotrebu singleTask/singleInstance kao android:launchMode u aktivnosti, ali zbog ovoga, očigledno je da je ovo opasno samo na starim verzijama (API verzije < 21).

Imajte na umu da zaobilaženje autorizacije nije uvek ranjivost, to zavisi od načina na koji zaobilaženje funkcioniše i koje informacije su izložene.

Curjenje osetljivih informacija

Aktivnosti takođe mogu vraćati rezultate. Ako uspete da pronađete izvezenu i nezaštićenu aktivnost koja poziva setResult metodu i vraća osetljive informacije, dolazi do curenja osetljivih informacija.

Tapjacking

Ako tapjacking nije sprečen, mogli biste zloupotrebiti izvezenu aktivnost da naterate korisnika da izvrši neočekivane radnje. Za više informacija o šta je Tapjacking pratite link.

Eksploatacija Content Providers - Pristup i manipulacija osetljivim informacijama

Pročitajte ovo ako želite da osvežite šta je Content Provider. Content providers se osnovno koriste za deljenje podataka. Ako aplikacija ima dostupne content providers, možda ćete moći da izvučete osetljive podatke iz njih. Takođe je zanimljivo testirati moguće SQL injekcije i Path Traversals jer bi mogli biti ranjivi.

Saznajte kako da eksploatišete Content Providers sa Drozer-om.

Eksploatacija Servisa

Pročitajte ovo ako želite da osvežite šta je Service. Zapamtite da akcije Servisa počinju u metodi onStartCommand.

Servis je osnovno nešto što može primati podatke, obrađivati ih i vraćati (ili ne) odgovor. Dakle, ako aplikacija izlaže neke servise, trebali biste proveriti kod da biste razumeli šta radi i testirati ga dinamički za izvlačenje poverljivih informacija, zaobilaženje mera autentifikacije... Saznajte kako da eksploatišete Servise sa Drozer-om.

Eksploatacija Broadcast Receivers

Pročitajte ovo ako želite da osvežite šta je Broadcast Receiver. Zapamtite da akcije Broadcast Receiver-a počinju u metodi onReceive.

Broadcast receiver će čekati na određenu vrstu poruke. U zavisnosti od toga kako receiver obrađuje poruku, mogao bi biti ranjiv. Saznajte kako da eksploatišete Broadcast Receivers sa Drozer-om.

Možete ručno tražiti deep links, koristeći alate kao što je MobSF ili skripte poput ove. Možete otvoriti deklarisani scheme koristeći adb ili pregledač:

adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

Napomena da možete izostaviti ime paketa i mobilni uređaj će automatski pozvati aplikaciju koja treba da otvori tu vezu.

<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>

Izvršeni kod

Da biste pronašli kod koji će biti izvršen u aplikaciji, idite na aktivnost koju poziva deeplink i potražite funkciju onNewIntent.

Osetljive informacije

Svaki put kada pronađete deep link, proverite da ne prima osetljive podatke (kao što su lozinke) putem URL parametara, jer bi bilo koja druga aplikacija mogla da se pretvara da je deep link i ukrade te podatke!

Parametri u putanji

Trebalo bi da proverite i da li neki deep link koristi parametar unutar putanje URL-a kao što je: https://api.example.com/v1/users/{username}, u tom slučaju možete primorati putanju da pređe na nešto poput: example://app/users?username=../../unwanted-endpoint%3fparam=value. Imajte na umu da ako pronađete ispravne krajnje tačke unutar aplikacije, možda ćete moći da izazovete Open Redirect (ako je deo putanje korišćen kao naziv domena), preuzimanje naloga (ako možete da modifikujete podatke o korisnicima bez CSRF tokena i ranjiva krajnja tačka koristi ispravnu metodu) i bilo koju drugu ranjivost. Više informacija o ovome ovde.

Još primera

Jedan zanimljiv izveštaj o bug bounty o linkovima (/.well-known/assetlinks.json).

Neuspeh inspekcije i verifikacije transportnog sloja

  • Sertifikati se ne proveravaju uvek pravilno od strane Android aplikacija. Uobičajeno je da ove aplikacije zanemaruju upozorenja i prihvataju samopotpisane sertifikate ili, u nekim slučajevima, vraćaju se na korišćenje HTTP veza.

  • Pregovori tokom SSL/TLS rukovanja su ponekad slabi, koristeći nesigurne kriptografske suite. Ova ranjivost čini vezu podložnom napadima čoveka u sredini (MITM), omogućavajući napadačima da dekriptuju podatke.

  • Curjenje privatnih informacija je rizik kada aplikacije autentifikuju koristeći sigurne kanale, ali zatim komuniciraju preko nesigurnih kanala za druge transakcije. Ovaj pristup ne štiti osetljive podatke, kao što su sesijski kolačići ili podaci o korisnicima, od presretanja od strane zlonamernih entiteta.

Verifikacija sertifikata

Fokusiraćemo se na verifikaciju sertifikata. Integritet sertifikata servera mora biti verifikovan kako bi se poboljšala sigurnost. Ovo je ključno jer nesigurne TLS konfiguracije i prenos osetljivih podataka preko nekriptovanih kanala mogu predstavljati značajne rizike. Za detaljne korake o verifikaciji sertifikata servera i rešavanju ranjivosti, ovaj resurs pruža sveobuhvatne smernice.

SSL Pinning

SSL Pinning je mera sigurnosti gde aplikacija proverava sertifikat servera u odnosu na poznatu kopiju smeštenu unutar same aplikacije. Ova metoda je ključna za sprečavanje MITM napada. Implementacija SSL Pinning-a se snažno preporučuje za aplikacije koje obrađuju osetljive informacije.

Inspekcija saobraćaja

Da biste inspekciju HTTP saobraćaja, potrebno je instalirati sertifikat alata za proxy (npr. Burp). Bez instalacije ovog sertifikata, kriptovani saobraćaj možda neće biti vidljiv kroz proxy. Za vodič o instalaciji prilagođenog CA sertifikata, kliknite ovde.

Aplikacije koje ciljaju API nivo 24 i više zahtevaju izmene u Network Security Config-u kako bi prihvatile CA sertifikat proxy-a. Ovaj korak je ključan za inspekciju kriptovanog saobraćaja. Za uputstva o izmeni Network Security Config-a, pogledajte ovaj tutorijal.

Obilaženje SSL Pinning-a

Kada je SSL Pinning implementiran, obilaženje postaje neophodno za inspekciju HTTPS saobraćaja. Različite metode su dostupne za ovu svrhu:

  • Automatski modifikujte apk da obidjete SSLPinning koristeći apk-mitm. Najveća prednost ove opcije je što vam neće biti potreban root da obidjete SSL Pinning, ali ćete morati da obrišete aplikaciju i ponovo instalirate novu, a to neće uvek funkcionisati.

  • Možete koristiti Frida (o kojoj se govori u nastavku) da obidjete ovu zaštitu. Ovde imate vodič za korišćenje Burp+Frida+Genymotion: https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/

  • Takođe možete pokušati da automatski obidjete SSL Pinning koristeći objection: objection --gadget com.package.app explore --startup-command "android sslpinning disable"

  • Takođe možete pokušati da automatski obidjete SSL Pinning koristeći MobSF dinamičku analizu (objašnjeno u nastavku)

  • Ako i dalje mislite da postoji neki saobraćaj koji ne presrećete, možete pokušati da prosledite saobraćaj do burp-a koristeći iptables. Pročitajte ovaj blog: https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62

Traženje uobičajenih web ranjivosti

Važno je takođe tražiti uobičajene web ranjivosti unutar aplikacije. Detaljne informacije o identifikaciji i ublažavanju ovih ranjivosti su van okvira ovog sažetka, ali su opširno pokrivene drugde.

Frida

Frida je alat za dinamičku instrumentaciju za programere, inženjere obrnutog inženjeringa i istraživače bezbednosti. Možete pristupiti pokrenutim aplikacijama i povezati metode u vreme izvođenja da promenite ponašanje, promenite vrednosti, izvučete vrednosti, pokrenete različit kod... Ako želite da radite pentesting Android aplikacija, morate znati kako koristiti Frida.

Dump Memorija - Fridump

Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemoničke fraze.

Korišćenjem Fridump3 možete dumpovati memoriju aplikacije sa:

# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

Ovo će isprazniti memoriju u ./dump folder, i tamo možete pretraživati sa nečim poput:

strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

Osetljivi podaci u Keystore-u

U Androidu, Keystore je najbolje mesto za čuvanje osetljivih podataka, međutim, uz dovoljno privilegija, još uvek je moguće pristupiti mu. Kako aplikacije obično čuvaju osetljive podatke u čistom tekstu, pentestovi bi trebali proveriti to kao root korisnik ili neko ko ima fizički pristup uređaju mogao bi biti u mogućnosti da ukrade ove podatke.

Čak i ako aplikacija čuva podatke u keystore-u, podaci bi trebali biti enkriptovani.

Da biste pristupili podacima unutar keystore-a, možete koristiti ovaj Frida skript: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

Zaobilaženje otiska prsta/bio-metrike

Korišćenjem sledećeg Frida skripta može biti moguće zaobići autentifikaciju otiskom prsta koju Android aplikacije mogu izvoditi kako bi zaštitile određena osetljiva područja:

frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

Pozadine Slike

Kada stavite aplikaciju u pozadinu, Android čuva snimak aplikacije tako da kada se vrati u fokus, počinje da učitava sliku pre aplikacije, tako da izgleda kao da je aplikacija učitana brže.

Međutim, ako ovaj snimak sadrži osetljive informacije, neko ko ima pristup snimku može ukrasti te informacije (napomena: potrebno je imati root pristup da biste mu pristupili).

Snimci se obično čuvaju na: /data/system_ce/0/snapshots

Android pruža način da se spreči snimanje ekrana postavljanjem FLAG_SECURE parametra rasporeda. Korišćenjem ove oznake, sadržaj prozora se tretira kao siguran, sprečavajući da se pojavi na snimcima ekrana ili da se vidi na nesigurnim ekranima.

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Android Application Analyzer

Ovaj alat može pomoći u upravljanju različitim alatima tokom dinamičke analize: https://github.com/NotSoSecure/android_application_analyzer

Intent Injection

Programeri često kreiraju proxy komponente kao što su aktivnosti, servisi i prijemnici emitovanja koji obrađuju ove Intente i prosleđuju ih metodama kao što su startActivity(...) ili sendBroadcast(...), što može biti rizično.

Opasnost leži u omogućavanju napadačima da aktiviraju neizvezene komponente aplikacije ili pristupe osetljivim provajderima sadržaja preusmeravanjem ovih Intenta. Značajan primer je WebView komponenta koja konvertuje URL-ove u Intent objekte putem Intent.parseUri(...) i zatim ih izvršava, što može dovesti do zlonamernih Intent injekcija.

Essential Takeaways

  • Intent Injection je sličan problemu Open Redirect na webu.

  • Eksploati uključuju prosleđivanje Intent objekata kao dodataka, koji mogu biti preusmereni da izvrše nesigurne operacije.

  • Može izložiti neizvezene komponente i provajdere sadržaja napadačima.

  • Konverzija URL-a u Intent u WebView može olakšati nepredviđene radnje.

Android Client Side Injections and others

Verovatno znate o ovim vrstama ranjivosti sa weba. Morate biti posebno oprezni sa ovim ranjivostima u Android aplikaciji:

  • SQL Injection: Kada se bavite dinamičkim upitima ili Content-Providers, osigurajte da koristite parametarske upite.

  • JavaScript Injection (XSS): Proverite da li je podrška za JavaScript i Plugin onemogućena za bilo koje WebViews (onemogućena po defaultu). Više informacija ovde.

  • Local File Inclusion: WebViews bi trebale imati onemogućen pristup sistemu datoteka (omogućen po defaultu) - (webview.getSettings().setAllowFileAccess(false);). Više informacija ovde.

  • Eternal cookies: U nekoliko slučajeva kada Android aplikacija završi sesiju, kolačić nije opozvan ili može čak biti sačuvan na disku.


Pridružite se HackenProof Discord serveru da komunicirate sa iskusnim hakerima i lovcima na greške!

Hacking Insights Uključite se u sadržaj koji se bavi uzbuđenjem i izazovima hakovanja.

Real-Time Hack News Budite u toku sa brzim svetom hakovanja kroz vesti i uvide u realnom vremenu.

Latest Announcements Budite informisani o najnovijim nagradama za greške i važnim ažuriranjima platforme.

Pridružite nam se na Discord i počnite da sarađujete sa vrhunskim hakerima danas!

Automatic Analysis

Static analysis

Procena ranjivosti aplikacije koristeći lep web-baziran frontend. Takođe možete izvršiti dinamičku analizu (ali morate pripremiti okruženje).

docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest

Notice that MobSF can analyse Android(apk), IOS(ipa) and Windows(apx) applications (Windows aplikacije moraju biti analizirane sa MobSF instaliranim na Windows hostu). Also, if you create a ZIP file with the source code if an Android or an IOS app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also.

MobSF also allows you to diff/Compare analysis and to integrate VirusTotal (you will need to set your API key in MobSF/settings.py and enable it: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE). You can also set VT_UPLOAD to False, then the hash will be upload instead of the file.

Assisted Dynamic analysis with MobSF

MobSF can also be very helpful for dynamic analysis in Android, but in that case you will need to install MobSF and genymotion in your host (a VM or Docker won't work). Napomena: Prvo treba da pokrenete VM u genymotion i onda MobSF. The MobSF dynamic analyser can:

  • Dump application data (URLs, logs, clipboard, screenshots made by you, screenshots made by "Exported Activity Tester", emails, SQLite databases, XML files, and other created files). All of this is done automatically except for the screenshots, you need to press when you want a screenshot or you need to press "Exported Activity Tester" to obtain screenshots of all the exported activities.

  • Capture HTTPS traffic

  • Use Frida to obtain runtime information

From android versions > 5, it will automatically start Frida and will set global proxy settings to capture traffic. It will only capture traffic from the tested application.

Frida

By default, it will also use some Frida Scripts to bypass SSL pinning, root detection and debugger detection and to monitor interesting APIs. MobSF can also invoke exported activities, grab screenshots of them and save them for the report.

To start the dynamic testing press the green bottom: "Start Instrumentation". Press the "Frida Live Logs" to see the logs generated by the Frida scripts and "Live API Monitor" to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing "Start Instrumentation"). MobSF also allows you to load your own Frida scripts (to send the results of your Friday scripts to MobSF use the function send()). It also has several pre-written scripts you can load (you can add more in MobSF/DynamicAnalyzer/tools/frida_scripts/others/), just select them, press "Load" and press "Start Instrumentation" (you will be able to see the logs of that scripts inside "Frida Live Logs").

Moreover, you have some Auxiliary Frida functionalities:

  • Enumerate Loaded Classes: It will print all the loaded classes

  • Capture Strings: It will print all the capture strings while using the application (super noisy)

  • Capture String Comparisons: Could be very useful. It will show the 2 strings being compared and if the result was True or False.

  • Enumerate Class Methods: Put the class name (like "java.io.File") and it will print all the methods of the class.

  • Search Class Pattern: Search classes by pattern

  • Trace Class Methods: Trace a whole class (see inputs and outputs of all methods of th class). Remember that by default MobSF traces several interesting Android Api methods.

Once you have selected the auxiliary module you want to use you need to press "Start Intrumentation" and you will see all the outputs in "Frida Live Logs".

Shell

Mobsf also brings you a shell with some adb commands, MobSF commands, and common shell commands at the bottom of the dynamic analysis page. Some interesting commands:

help
shell ls
activities
exported_activities
services
receivers

HTTP alati

Kada se http saobraćaj uhvati, možete videti ružan prikaz uhvaćenog saobraćaja na "HTTP(S) Saobraćaj" donjem delu ili lepši prikaz u "Start HTTPTools" zelenom dugmetu. Iz druge opcije, možete poslati uhvaćene zahteve na proksije kao što su Burp ili Owasp ZAP. Da biste to uradili, uključite Burp --> isključite Intercept --> u MobSB HTTPTools izaberite zahtev --> pritisnite "Send to Fuzzer" --> izaberite adresu proksija (http://127.0.0.1:8080\).

Kada završite dinamičku analizu sa MobSF, možete pritisnuti na "Start Web API Fuzzer" da fuzz-ujete http zahteve i tražite ranjivosti.

Nakon izvođenja dinamičke analize sa MobSF, podešavanja proksija mogu biti pogrešno konfigurisana i nećete moći da ih popravite iz GUI-a. Možete popraviti podešavanja proksija tako što ćete:

adb shell settings put global http_proxy :0

Assisted Dynamic Analysis with Inspeckage

Možete preuzeti alat sa Inspeckage. Ovaj alat koristi neke Hooks da vam omogući da znate šta se dešava u aplikaciji dok vršite dinamičku analizu.

Ovo je sjajan alat za izvođenje statičke analize sa GUI-jem

Ovaj alat je dizajniran da traži nekoliko ranjivosti vezanih za sigurnost Android aplikacija, bilo u izvor kodu ili pakovanim APK-ima. Alat je takođe sposoban da kreira "Proof-of-Concept" deployable APK i ADB komande, da iskoristi neke od pronađenih ranjivosti (Izložene aktivnosti, intencije, tapjacking...). Kao i sa Drozer-om, nije potrebno root-ovati test uređaj.

pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

  • Prikazuje sve ekstrahovane datoteke radi lakšeg referenciranja

  • Automatski dekompajlira APK datoteke u Java i Smali format

  • Analizira AndroidManifest.xml za uobičajene ranjivosti i ponašanje

  • Staticka analiza izvornog koda za uobičajene ranjivosti i ponašanje

  • Informacije o uređaju

  • i još mnogo toga

reverse-apk relative/path/to/APP.apk

SUPER je aplikacija za komandnu liniju koja se može koristiti na Windows, MacOS X i Linux, koja analizira .apk datoteke u potrazi za ranjivostima. To radi dekompresovanjem APK-ova i primenom niza pravila za otkrivanje tih ranjivosti.

Sva pravila su centrirana u rules.json datoteci, a svaka kompanija ili tester može kreirati svoja pravila za analizu onoga što im je potrebno.

Preuzmite najnovije binarne datoteke sa stranice za preuzimanje

super-analyzer {apk_file}

StaCoAn je crossplatform alat koji pomaže programerima, lovcima na greške i etičkim hakerima u izvođenju static code analysis na mobilnim aplikacijama.

Koncept je da prevučete i ispustite datoteku vaše mobilne aplikacije (datoteka .apk ili .ipa) na StaCoAn aplikaciju i ona će generisati vizuelni i prenosivi izveštaj za vas. Možete prilagoditi postavke i liste reči kako biste dobili prilagođeno iskustvo.

Preuzmite najnovije izdanje:

./stacoan

AndroBugs Framework je sistem za analizu ranjivosti na Androidu koji pomaže programerima ili hakerima da pronađu potencijalne sigurnosne ranjivosti u Android aplikacijama. Windows izdanja

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn je alat čija je glavna svrha da detektuje i upozori korisnika na potencijalno zloćudno ponašanje koje razvija Android aplikacija.

Detekcija se vrši statističkom analizom Dalvik bytecode-a aplikacije, predstavljenog kao Smali, uz pomoć biblioteke androguard.

Ovaj alat traži uobičajeno ponašanje "loših" aplikacija kao što su: Ekstrakcija telekomunikacionih identifikatora, presretanje audio/video toka, modifikacija PIM podataka, izvršavanje proizvoljnog koda...

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA je Mobila Aplikacija Reverzno inženjerstvo i Analiza Framework. To je alat koji okuplja često korišćene alate za reverzno inženjerstvo i analizu mobilnih aplikacija, kako bi pomogao u testiranju mobilnih aplikacija protiv OWASP mobilnih bezbednosnih pretnji. Njegov cilj je da olakša ovaj zadatak i učini ga prijatnijim za programere mobilnih aplikacija i stručnjake za bezbednost.

Može da:

Koodous

Koristan za otkrivanje malvera: https://koodous.com/

Obfuskacija/Deobfuskacija koda

Imajte na umu da zavisno od usluge i konfiguracije koju koristite za obfuskaciju koda. Tajne mogu ili ne moraju biti obfuskirane.

Sa Wikipedia: ProGuard je open source alat za komandnu liniju koji smanjuje, optimizuje i obfuskira Java kod. U stanju je da optimizuje bajtkod kao i da detektuje i ukloni neiskorišćene instrukcije. ProGuard je besplatan softver i distribuira se pod GNU General Public License, verzija 2.

ProGuard se distribuira kao deo Android SDK-a i pokreće se prilikom izgradnje aplikacije u režimu objavljivanja.

Pronađite vodič korak po korak za deobfuskaciju apk-a na https://blog.lexfo.fr/dexguard.html

(Prema tom vodiču) Poslednji put kada smo proveravali, Dexguard način rada je bio:

  • učitati resurs kao InputStream;

  • proslediti rezultat klasi koja nasleđuje FilterInputStream da bi ga dekriptovali;

  • uraditi neku beskorisnu obfuskaciju da bi se izgubilo nekoliko minuta vremena od reverzera;

  • proslediti dekriptovani rezultat ZipInputStream-u da bi dobili DEX datoteku;

  • konačno učitati dobijeni DEX kao Resurs koristeći metodu loadDex.

DeGuard preokreće proces obfuskacije koji izvode Android alati za obfuskaciju. Ovo omogućava brojne analize bezbednosti, uključujući inspekciju koda i predikciju biblioteka.

Možete da otpremite obfuskovani APK na njihovu platformu.

To je generički android deobfuskator. Simplify virtuelno izvršava aplikaciju da bi razumeo njeno ponašanje i zatim pokušava da optimizuje kod tako da se ponaša identično, ali je lakše za razumevanje ljudima. Svaka vrsta optimizacije je jednostavna i generička, tako da nije važno koja specifična vrsta obfuskacije se koristi.

APKiD vam daje informacije o kako je APK napravljen. Identifikuje mnoge kompilatore, pakere, obfuskatore i druge čudne stvari. To je PEiD za Android.

Manual

Pročitajte ovaj tutorijal da naučite neke trikove o kako da reverzujete prilagođenu obfuskaciju

Labs

AndroL4b je Android bezbednosna virtuelna mašina zasnovana na ubuntu-mate koja uključuje kolekciju najnovijih framework-a, tutorijala i labova od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera.

References

Yet to try

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

Support HackTricks

Last updated