Android-toepassings Pentesting

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Android-toepassings Basiese beginsels

Dit word sterk aanbeveel om eers hierdie bladsy te lees om te weet oor die belangrikste dele wat verband hou met Android-sekuriteit en die gevaarlikste komponente in ’n Android-toepassing:

Android Applications Basics

ADB (Android Debug Bridge)

Dit is die hoof hulpmiddel wat jy nodig het om met ’n Android-toestel (gesimuleer of fisies) te verbind.
ADB allows to control devices either over USB or Network from a computer. Hierdie nutsprogram maak dit moontlik om lêers in beide rigtings te kopieer, apps te installeer en te verwyder, shell-opdragte uit te voer, data te rugsteun, logs te lees, en ander funksies.

Kyk na die volgende lys van ADB Commands om te leer hoe om adb te gebruik.

Smali

Soms is dit interessant om die aansoekkode te wysig om toegang te kry tot verborge inligting (miskien goed verhaspelde wagwoorde of flags). Dan kan dit interessant wees om die apk te dekompileer, die kode te wysig en weer te compileer.
In this tutorial you can learn how to decompile and APK, modify Smali code and recompile the APK with the new functionality. Dit kan baie nuttig wees as ’n alternatief vir verskeie toetse tydens die dinamiese analise wat aangebied gaan word. Hou hierdie moontlikheid dus altyd in gedagte.

Ander interessante truuks

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
  • Voeg alle splits en base apks saam met 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

Jezail rooted Android pentesting toolkit (REST API + web UI)

  • Loop op ’n rooted device (Magisk/rootAVD) en begin ’n HTTP server op tcp/8080 met ’n Flutter web UI en REST API.
  • Installeer die release APK met perms: adb install -g -r jezail.apk, en laai die app (server begin outomaties).
  • Endpoints: http://<device-ip>:8080/ (UI), http://<device-ip>:8080/api/json (API listing), http://<device-ip>:8080/api/swagger (Swagger).
  • Emulator port-forward om UI/API van die host te bereik: adb forward tcp:8080 tcp:8080 en browse dan na http://localhost:8080.

Android Enterprise & Work Profile Attacks

Android Enterprise Work Profile Bypass

Case Studies & Vulnerabilities

Air Keyboard Remote Input Injection

Android Rooting Frameworks Manager Auth Bypass Syscall Hook

Abusing Android Media Pipelines Image Parsers

Firmware Level Zygote Backdoor Libandroid Runtime

Static Analysis

Eerstens, om ’n APK te ontleed moet jy kyk na die Java code met ’n decompiler.
Lees asseblief hier om inligting te vind oor verskillende beskikbare decompilers.

Looking for interesting Info

Deur net na die strings van die APK te kyk, kan jy soek na passwords, URLs (https://github.com/ndelphit/apkurlgrep), api keys, encryption, bluetooth uuids, tokens en enige ander interessante dinge… kyk selfs vir code execution backdoors of authentication backdoors (hardgekodeerde admin credentials in die app).

Firebase

Gee spesiale aandag aan firebase URLs en kyk of dit verkeerd gekonfigureer is. Meer inligting oor wat Firebase is en hoe om dit te misbruik hier.

Basic understanding of the application - Manifest.xml, strings.xml

Die ondersoek van ’n toepassing se Manifest.xml en strings.xml lêers kan potensiële sekuriteitskwesbaarhede blootlê. Hierdie lêers kan benader word met decompilers of deur die APK se lêeruitbreiding na .zip te hernoem en dit uit te pak.

Vulnerabilities identified from the Manifest.xml include:

  • Debuggable Applications: Toepassings wat as debuggable gestel is (debuggable="true") in die Manifest.xml lêer is riskant aangesien hulle verbindings toelaat wat tot uitbuiting kan lei. Vir meer begrip oor hoe om debuggable toepassings uit te buit, verwys na ’n handleiding oor die vind en uitbuit van debuggable toepassings op ’n toestel.
  • Backup Settings: Die attribuut android:allowBackup="false" moet uitdruklik gestel word vir toepassings wat sensitiewe inligting hanteer om ongemagtigde data-backups via adb te voorkom, veral wanneer usb debugging aangeskakel is.
  • Network Security: Aangepaste netwerksekuriteitskonfigurasies (android:networkSecurityConfig="@xml/network_security_config") in res/xml/ kan sekuriteitsdetail soos sertifikaat pins en HTTP-verkeersinstellings spesifiseer. ’n Voorbeeld is om HTTP-verkeer vir spesifieke domeine toe te laat.
  • Exported Activities and Services: Om exported activities en services in die manifest te identifiseer kan komponente uitwys wat misbruik kan word. Verdere analise tydens dinamiese toetsing kan onthul hoe om hierdie komponente uit te buit.
  • Content Providers and FileProviders: Blootgestelde content providers kan ongemagtigde toegang of wysiging van data toelaat. Die konfigurasie van FileProviders moet ook noukeurig ondersoek word.
  • Broadcast Receivers and URL Schemes: Hierdie komponente kan gebruik word vir uitbuiting, met besondere aandag aan hoe URL schemes bestuur word betreffende invoer-kwesbaarhede.
  • SDK Versions: Die minSdkVersion, targetSDKVersion, en maxSdkVersion attributte dui die ondersteunde Android-weergawes aan, wat die belangrikheid beklemtoon om verouderde, kwesbare Android-weergawes nie te ondersteun nie vir sekuriteitsredes.

Uit die strings.xml lêer kan sensitiewe inligting soos API-sleutels, custom schemas en ander ontwikkelaarsnotas gevind word, wat die behoefte beklemtoon om hierdie hulpbronne noukeurig te hersien.

Tapjacking

Tapjacking is ’n aanval waar ’n kwaadwillige toepassing gelanceer word en homself bo-op ’n slagoffer-toepassing posisioneer. Sodra dit die slagoffer-app sigbaar bedek, is die gebruikerskoppelvlak so ontwerp dat dit die gebruiker mislei om daarmee te interaksie, terwyl dit die interaksie na die slagoffer-app deurgee.
Effektief, dit verblind die gebruiker sodat hulle nie weet dat hulle eintlik aksies op die slagoffer-app uitvoer nie.

Vind meer inligting in:

Tapjacking

Task Hijacking

’n activity met die launchMode gestel op singleTask sonder enige taskAffinity gedefinieer is vatbaar vir task Hijacking. Dit beteken dat ’n toepassing geïnstalleer kan word en as dit voor die werklike toepassing begin word, kan dit die taak van die werklike toepassing kap (sodat die gebruiker met die kwaadwillige toepassing sal interaksie hê terwyl hy dink hy gebruik die werklike een).

Meer inligting in:

Android Task Hijacking

Insecure data storage

Internal Storage

In Android is dit bedoel dat lêers wat in internal storage gestoor word eksklusief toeganklik is deur die app wat dit geskep het. Hierdie sekuriteitsmaatreël word deur die Android-bedryfstelsel afgedwing en is oor die algemeen voldoende vir die sekuriteitsbehoeftes van die meeste toepassings. Ontwikkelaars gebruik egter soms modes soos MODE_WORLD_READABLE en MODE_WORLD_WRITABLE om lêers tussen verskillende toepassings te deel. Hierdie modes beperk egter nie die toegang tot hierdie lêers deur ander toepassings nie, insluitend moontlik kwaadwillige eenhede.

  1. Static Analysis:
  • Verseker dat die gebruik van MODE_WORLD_READABLE en MODE_WORLD_WRITABLE noukeurig nagevors word. Hierdie modes kan moontlik lêers blootstel aan onbedoelde of ongemagtigde toegang.
  1. Dynamic Analysis:
  • Verifieer die permissions wat op lêers geskep deur die app gestel is. Kyk spesifiek of enige lêers gestel is om wêreldwyd leesbaar of skryfbaar te wees. Dit kan ’n beduidende sekuriteitsrisiko inhou, aangesien dit enige toepassing geïnstalleer op die toestel, ongeag oorsprong of bedoeling, in staat sou stel om hierdie lêers te lees of wysig.

External Storage

Wanneer jy met lêers op external storage werk, soos SD Cards, moet sekere voorsorgmaatreëls geneem word:

  1. Accessibility:
  • Lêers op external storage is wêreldwyd leesbaar en skryfbaar. Dit beteken enige toepassing of gebruiker kan toegang tot hierdie lêers kry.
  1. Security Concerns:
  • As gevolg van die maklike toegang, word dit aanbeveel nie om sensitiewe inligting op external storage te stoor nie.
  • External storage kan verwyder of deur enige toepassing genader word, wat dit minder veilig maak.
  1. Handling Data from External Storage:
  • Voer altyd invoervalidatie uit op data wat van external storage verkry is. Dit is kritiek omdat die data van ’n onbetroubare bron kom.
  • Dit word sterk ontmoedig om uitvoerbare of class lêers op external storage te stoor vir dinamiese laai.
  • As jou toepassing uitvoerbare lêers van external storage moet haal, verseker dat hierdie lêers onderteken en kriptografies geverifieer is voordat hulle dinamies gelaai word. Hierdie stap is deurslaggewend vir die instandhouding van die sekuriteitsintegriteit van jou toepassing.

External storage kan toeganklik wees in /storage/emulated/0 , /sdcard , /mnt/sdcard

Tip

Vanaf Android 4.4 (API 17) het die SD kaart ’n gidsstruktuur wat die toegang van ’n app tot die gids wat spesifiek vir daardie app is beperk. Dit voorkom dat ’n kwaadwillige toepassing lees- of skryf toegang tot ’n ander app se lêers kry.

Sensitive data stored in clear-text

  • Shared preferences: Android laat elke toepassing maklik toe om xml lêers te stoor in die pad /data/data/<packagename>/shared_prefs/ en soms is dit moontlik om sensitiewe inligting in duidelike teks in daardie vouer te vind.
  • Databases: Android laat elke toepassing maklik toe om sqlite databases te stoor in die pad /data/data/<packagename>/databases/ en soms is dit moontlik om sensitiewe inligting in duidelike teks in daardie vouer te vind.

Broken TLS

Accept All Certificates

Om een of ander rede aanvaar ontwikkelaars soms alle sertifikate selfs as byvoorbeeld die hostname nie ooreenstem nie, met reëls van kode soos die volgende een:

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

’n Goeie manier om dit te toets is om die verkeer te probeer vang deur ’n proxy soos Burp te gebruik sonder om die Burp CA op die toestel te autoriseer. Ook, jy kan met Burp ’n sertifikaat genereer vir ’n ander hostname en dit gebruik.

Gebroke Kriptografie

Swak sleutelbestuursprosesse

Sommige ontwikkelaars stoor sensitiewe data in lokale stoorplek en enkripteer dit met ’n sleutel wat hardcoded/predictable in die code is. Dit behoort nie gedoen te word nie aangesien ’n paar reversing kan toelaat dat aanvallers die vertroulike inligting onttrek.

Gebruik van onveilige en/of verouderde algoritmes

Ontwikkelaars moet nie deprecated algorithms gebruik om outorisasie checks uit te voer, data te store of te send nie. Van hierdie algoritmes is: RC4, MD4, MD5, SHA1… As hashes byvoorbeeld gebruik word om wagwoorde te stoor, moet hashes wat brute-force resistant is met salt gebruik word.

Ander kontroles

  • Dit word aanbeveel om die obfuscate the APK te gebruik om die reverse engineer se werk vir aanvallers moeiliker te maak.
  • As die app sensitief is (soos bank apps), moet dit sy own checks to see if the mobile is rooted uitvoer en dienooreenkomstig optree.
  • As die app sensitief is (soos bank apps), moet dit kontroleer of ’n emulator gebruik word.
  • As die app sensitief is (soos bank apps), moet dit check it’s own integrity before executing om te kontroleer of dit gemodifiseer is.
  • Gebruik APKiD om te kontroleer watter compiler/packer/obfuscator gebruik is om die APK te bou

React Native Application

Lees die volgende bladsy om te leer hoe om maklik toegang te kry tot die javascript-code van React applications:

React Native Application

Xamarin Applications

Lees die volgende bladsy om te leer hoe om maklik toegang te kry tot C# code van ’n xamarin applications:

Xamarin Apps

Superpacked Applications

Volgens hierdie blog post is superpacked ’n Meta algorithm wat die inhoud van ’n aansoek in een enkele lêer komprimeer. Die blog bespreek die moontlikheid om ’n app te skep wat hierdie tipe apps dekomprimeer… en ’n vinniger manier wat behels om die application te execute en die decompressed files vanaf die filesystem te gather.

Geautomatiseerde Statiese Kode-analise

Die tool mariana-trench is in staat om kwesbaarhede te vind deur die kode van die toepassing te skandeer. Hierdie tool bevat ’n reeks known sources (wat die tool aandui watter places die input deur die gebruiker beheer word), sinks (wat die tool aandui watter dangerous places is waar kwaadwillige gebruikersinvoer skade kan veroorsaak) en rules. Hierdie reëls dui die combination van sources-sinks aan wat ’n kwesbaarheid aandui.

Met hierdie kennis sal mariana-trench die kode deurgaan en moontlike kwesbaarhede daarin vind.

Geheime leaked

’n Aansoek kan geheime (API keys, passwords, hidden urls, subdomains…) binne-in bevat wat jy moontlik kan ontdek. Jy kan ’n tool gebruik soos https://github.com/dwisiswant0/apkleaks

Bypass Biometric Authentication

Bypass Biometric Authentication (Android)

Ander interessante funksies

  • Code execution: Runtime.exec(), ProcessBuilder(), native code:system()
  • Send SMSs: sendTextMessage, sendMultipartTestMessage
  • Native functions declared as native: public native, System.loadLibrary, System.load
  • Read this to learn how to reverse native functions
  • In-memory native code execution via JNI (downloaded shellcode → mmap/mprotect → call):

In Memory Jni Shellcode Execution

Other tricks

content:// protocol



Dinamiese Analise

Eerstens het jy ’n omgewing nodig waar jy die toepassing en al die omgewing (Burp CA cert, Drozer en Frida hoofsaaklik) kan installeer. Daarom word ’n rooted toestel (gesimuleer of nie) sterk aanbeveel.

Aanlyn dinamiese analise

Jy kan ’n free account skep by: https://appetize.io/. Hierdie platform laat jou toe om APKs upload en execute, dus is dit nuttig om te sien hoe ’n apk optree.

Jy kan selfs die logs van jou toepassing in die web sien en deur adb koppel.

Danksy die ADB-verbinding kan jy Drozer en Frida binne die emulator gebruik.

Lokale dinamiese analise

Using an emulator

  • Android Studio (Jy kan x86 en arm toestelle skep, en volgens this laatste x86 weergawes support ARM libraries sonder om ’n stadiger arm emulator te benodig).
  • Leer hoe om dit op te stel op hierdie bladsy:

AVD - Android Virtual Device

  • Genymotion (Free version: Personal Edition, jy moet ’n rekening skep. Dit word aanbeveel om die weergawe WITH VirtualBox af te laai om moontlike foute te vermy.)
  • Nox (Gratis, maar dit ondersteun nie Frida of Drozer nie).

Tip

Wanneer jy ’n nuwe emulator op enige platform skep, onthou dat hoe groter die skerm is, hoe stadiger sal die emulator loop. Kies dus klein skerms indien moontlik.

Om Google-dienste (soos AppStore) in Genymotion te installeer, moet jy op die rooi gemerkde knoppie in die volgende beeld klik:

Neem ook kennis dat jy in die konfigurasie van die Android VM in Genymotion die Bridge Network mode kan kies (dit sal nuttig wees as jy vanaf ’n ander VM na die Android VM met die tools gaan koppel).

Gebruik ’n fisiese toestel

Jy moet die debugging opsies aktiveer en dit sal goed wees as jy dit kan root:

  1. Settings.
  2. (FromAndroid 8.0) Kies System.
  3. Kies About phone.
  4. Druk Build number 7 keer.
  5. Gaan terug en jy sal die Developer options vind.

Sodra jy die toepassing geïnstalleer het, is die eerste ding wat jy moet doen om dit te probeer en ondersoek wat dit doen, hoe dit werk en gemaklik mee raak.
Ek raai aan om hierdie aanvanklike dinamiese analise uit te voer met MobSF dynamic analysis + pidcat, sodat ons kan leer hoe die toepassing werk terwyl MobSF ’n klomp interessante data vasvang wat jy later kan hersien.

Magisk/Zygisk vinnige notas (aanbeveel op Pixel-toestelle)

  • Patch boot.img met die Magisk app en flash via fastboot om systemless root te kry
  • Skakel Zygisk + DenyList aan vir root hiding; oorweeg LSPosed/Shamiko wanneer sterker hiding benodig word
  • Hou die oorspronklike boot.img om van OTA-opdaterings te herstel; her-patch na elke OTA
  • Vir skermspieël, gebruik scrcpy op die host

Onbedoelde Data Leakage

Logging

Ontwikkelaars moet versigtig wees om debugging information nie publiek bloot te stel nie, aangesien dit tot sensitiewe data leaks kan lei. Die tools pidcat en adb logcat word aanbeveel om aansoeklogs te monitor om sensitiewe inligting te identifiseer en te beskerm. Pidcat word verkies vir sy gebruiksgemak en leesbaarheid.

Warning

Neem kennis dat vanaf later newer than Android 4.0, applications are only able to access their own logs. Dus kan toepassings nie by ander apps se logs kom nie.
Tog word dit steeds aanbeveel om nie sensitiewe inligting te log nie.

Copy/Paste Buffer Caching

Android se clipboard-based raamwerk maak copy-paste funksionaliteit in apps moontlik, maar dit vorm ’n risiko aangesien ander toepassings toegang tot die clipboard kan kry en moontlik sensitiewe data blootstel. Dit is belangrik om copy/paste funksies vir sensitiewe dele van ’n toepassing, soos kredietkaartbesonderhede, te deaktiveer om data leaks te voorkom.

Crash Logs

As ’n toepassing crash en logs stoor, kan hierdie logs aanvallers help, veral as die toepassing nie omgekeerd kan word nie. Om hierdie risiko te beperk, vermy logging by crashes, en as logs oor die netwerk gestuur moet word, sorg dat dit via ’n SSL-kanaal gestuur word vir sekuriteit.

As pentester, kyk asseblief na hierdie logs.

Analytics Data Sent To 3rd Parties

Toepassings integreer dikwels dienste soos Google Adsense, wat per ongeluk sensitiewe data kan leak weens onvanpaste implementering deur ontwikkelaars. Om potensiële data leaks te identifiseer, is dit raadsaam om die aansoek se verkeer te onderskep en te kontroleer of enige sensitiewe inligting aan derdepartye gestuur word.

SQLite DBs

Die meeste toepassings sal interne SQLite-databasisse gebruik om inligting te stoor. Tydens die pentest kyk na die databasisse wat geskep is, die name van tables en columns en al die data wat gestoor is, aangesien jy sensitiewe inligting kan vind (wat ’n kwesbaarheid sou wees).
Databasisse behoort te wees geleë in /data/data/the.package.name/databases soos /data/data/com.mwr.example.sieve/databases

As die databasis vertroulike inligting stoor en encrypted is, maar jy kan die password binne die toepassing find, is dit steeds ’n vulnerability.

Sommeer die tables met .tables en sommeer die kolomme van die tables met .schema <table_name>

Drozer (Exploit Activities, Content Providers and Services)

Van Drozer Docs: Drozer laat jou toe om die rol van ’n Android app aan te neem en met ander apps te interakteer. Dit kan anything that an installed application can do, soos gebruik maak van Android se Inter-Process Communication (IPC) meganisme en met die onderliggende bedryfstelsel interakteer. .
Drozer is ’n nuttige tool om exploits op exported activities, exported services en Content Providers uit te voer soos jy in die volgende afdelings sal leer.

Exploiting exported Activities

Read this if you want to refresh what is an Android Activity.
Onthou ook dat die kode van ’n activity begin in die onCreate metode.

Authorisation bypass

Wanneer ’n Activity exported is, kan jy sy skerm van ’n eksterne app uit aanroep. Dus, as ’n activity met sensitive information exported is, kan jy die authentication meganismes bypass om toegang daartoe te kry.

Learn how to exploit exported activities with Drozer.

Jy kan ook ’n exported activity vanaf adb begin:

  • PackageName is com.example.demo
  • Exported ActivityName is com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity

NOTE: MobSF sal die gebruik van singleTask/singleInstance as android:launchMode in an activity as kwaadwillig opspoor, maar weens this blyk dit slegs gevaarlik te wees op ouer weergawes (API versions < 21).

Tip

Let wel dat an authorisation bypass nie altyd ’n vulnerability is nie; dit hang af van hoe die bypass werk en watter inligting geopenbaar word.

Sensitive information leakage

Activities can also return results. As jy daarin slaag om ’n exported en unprotected activity te vind wat die setResult metode aanroep en gevoelige inligting teruggee, is daar ’n sensitive information leakage.

Tapjacking

As Tapjacking nie voorkom word nie, kan jy die exported activity misbruik om die gebruiker onverwagte aksies te laat uitvoer. Vir meer info oor wat Tapjacking is volg die skakel.

Exploiting Content Providers - Accessing and manipulating sensitive information

Lees dit as jy wil opfris wat ’n Content Provider is.
Content providers word hoofsaaklik gebruik om data te deel. As ’n app beskikbare content providers het, kan jy dalk gevoelige data daaruit onttrek. Dit is ook interessant om moontlike SQL injections en Path Traversals te toets aangesien hulle kwesbaar kon wees.

Leer hoe om Content Providers met Drozer te misbruik.

Exploiting Services

Lees dit as jy wil opfris wat ’n Service is.
Onthou dat die aksies van ’n Service begin in die metode onStartCommand.

’n Service is basies iets wat data kan ontvang, dit verwerk en (al dan nie) ’n reaksie teruggee. As ’n toepassing sommige services exporteer, moet jy die code nagaan om te verstaan wat dit doen en dit dinamies toets om vertroulike inligting te onttrek, authentiseringsmaatreëls te omseil…
Leer hoe om Services met Drozer te misbruik.

Exploiting Broadcast Receivers

Lees dit as jy wil opfris wat ’n Broadcast Receiver is.
Onthou dat die aksies van ’n Broadcast Receiver begin in die metode onReceive.

’n Broadcast Receiver wag op ’n soort boodskap. Afhangend daarvan hoe die receiver die boodskap hanteer, kan dit kwesbaar wees.
Leer hoe om Broadcast Receivers met Drozer te misbruik.

Jy kan deep links handmatig soek deur instrumente soos MobSF of skripte soos this one.
Jy kan ’n gedeclareerde scheme oopmaak met adb of ’n browser:

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

Let daarop dat jy die pakketnaam kan weglaat en die mobiele toestel outomaties die app sal aanroep wat daardie skakel behoort oop te maak.

<!-- 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>

Kode wat uitgevoer word

Om die kode wat in die App uitgevoer sal word te vind, gaan na die activity wat deur die deeplink aangeroep word en soek die funksie onNewIntent.

Sensitiewe inligting

Elke keer as jy ’n deep link vind, kontroleer dat it nie sensitiewe data (soos wagwoorde) via URL-parameters ontvang nie, want enige ander toepassing kan die deep link naboots en daardie data steel!

Parameters in pad

Jy moet ook nagaan of enige deep link ’n parameter binne die pad van die URL gebruik soos: https://api.example.com/v1/users/{username} , in daardie geval kan jy ’n path traversal afdwing deur iets soos: example://app/users?username=../../unwanted-endpoint%3fparam=value te besoek.
Let daarop dat as jy die korrekte endpoints binne die toepassing vind, jy dalk ’n Open Redirect kan veroorsaak (as ’n gedeelte van die pad as domeinnaam gebruik word), ’n account takeover (as jy gebruikersbesonderhede kan verander sonder ’n CSRF token en die vuln endpoint die korrekte metode gebruik) en enige ander vuln. More info about this here.

An interesting bug bounty report about links (/.well-known/assetlinks.json).

Transport Layer Inspection and Verification Failures

  • Sertifikate word nie altyd behoorlik geïnspekteer nie deur Android-toepassings. Dit is algemeen dat hierdie toepassings waarskuwings ignoreer en self-ondertekende sertifikate aanvaar of, in sommige gevalle, terugval na die gebruik van HTTP-verbindinge.
  • Onderhandelinge tydens die SSL/TLS-handshake is soms swak, en gebruik onveilige cipher suites. Hierdie kwesbaarheid maak die verbinding vatbaar vir man-in-the-middle (MITM)-aanvalle, wat aanvallers toelaat om die data te ontsleutel.
  • Leakage of private information is ’n risiko wanneer toepassings verifieer via veilige kanale maar dan oor nie-veilige kanale kommunikeer vir ander transaksies. Hierdie benadering beskerm nie sensitiewe data, soos sessie-cookies of gebruikersbesonderhede, teen onderskep deur kwaadwilliges nie.

Sertifikaatverifikasie

Ons sal fokus op sertifikaatverifikasie. Die integriteit van die bediener se sertifikaat moet geverifieer word om veiligheid te verbeter. Dit is kritiek omdat onveilige TLS-konfigurasies en die oordrag van sensitiewe data oor onbeveiligde kanale beduidende risiko’s kan inhou. Vir gedetailleerde stappe oor die verifikasie van bediener-sertifikate en die aanspreek van kwesbaarhede, bied this resource omvattende leiding.

SSL Pinning

SSL Pinning is ’n sekuriteitsmaatreël waar die toepassing die bediener se sertifikaat verifieer teen ’n bekende kopie wat binne die toepassing self gestoor is. Hierdie metode is noodsaaklik om MITM-aanvalle te voorkom. Die implementering van SSL Pinning word sterk aanbeveel vir toepassings wat sensitiewe inligting hanteer.

Verkeerinspeksie

Om HTTP-verkeer te inspekteer, is dit nodig om die proxy-tool se sertifikaat te installeer (bv. Burp). Sonder die installering van hierdie sertifikaat mag enkripteerde verkeer nie deur die proxy sigbaar wees nie. Vir ’n gids oor hoe om ’n custom CA sertifikaat te installeer, click here.

Toepassings wat mik op API Level 24 and above vereis wysigings aan die Network Security Config om die proxy se CA sertifikaat te aanvaar. Hierdie stap is krities vir die inspeksie van enkripteerde verkeer. Vir instruksies oor die wysiging van die Network Security Config, refer to this tutorial.

If Flutter is being used you need to to follow the instructions in this page. Dit is omdat die eenvoudige toevoeging van die sertifikaat in die store nie sal werk nie, aangesien Flutter sy eie lys van geldige CAs het.

Statiese opsporing van SSL/TLS pinning

Voordat jy runtime-bypasses probeer, karteer vinnig waar pinning in die APK afgedwing word. Statiese opsporing help jou om hooks/patches te beplan en op die regte code paths te fokus.

Tool: SSLPinDetect

  • Open-source static-analysis utility wat die APK na Smali decompileer (via apktool) en skandeer vir gekeurde regex-patterns van SSL/TLS pinning implementasies.
  • Rapporteer die presiese file path, reëlnommer, en ’n code snippet vir elke match.
  • Dek algemene frameworks en pasgemaakte code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins.

Install

  • Vereistes: Python >= 3.8, Java on PATH, apktool
git clone https://github.com/aancw/SSLPinDetect
cd SSLPinDetect
pip install -r requirements.txt

Gebruik

# Basic
python sslpindetect.py -f app.apk -a apktool.jar

# Verbose (timings + per-match path:line + snippet)
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v

Voorbeeld patroonreëls (JSON) Gebruik of brei signatures uit om proprietary/custom pinning styles op te spoor. Jy kan jou eie JSON laai en scan at scale.

{
"OkHttp Certificate Pinning": [
"Lcom/squareup/okhttp/CertificatePinner;",
"Lokhttp3/CertificatePinner;",
"setCertificatePinner"
],
"TrustManager Override": [
"Ljavax/net/ssl/X509TrustManager;",
"checkServerTrusted"
]
}

Aantekeninge en wenke

  • Vinnige skandering op groot apps via multi-threading en memory-mapped I/O; pre-compiled regex verminder overhead/false positives.
  • Patroonversameling: https://github.com/aancw/smali-sslpin-patterns
  • Tipiese opsporingsdoelwitte om volgende te triage:
  • OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp package references
  • Aangepaste TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides
  • Aangepaste SSL contexts: SSLContext.getInstance + SSLContext.init with custom managers
  • Deklaratiewe pins in res/xml network security config en manifest verwysings
  • Gebruik die gematchte plekke om Frida hooks, static patches, of config reviews te beplan voor dynamic testing.

Om SSL Pinning te omseil

Wanneer SSL Pinning geïmplementeer is, word dit nodig om dit te omseil om HTTPS-verkeer te inspekteer. Verskeie metodes is beskikbaar vir hierdie doel:

Op soek na algemene web-kwesbaarhede

Dit is belangrik om ook na algemene web-kwesbaarhede binne die toepassing te soek. Gedetaileerde inligting oor hoe om hierdie kwesbaarhede te identifiseer en te versag val buite die bestek van hierdie samevatting, maar word elders uitgebreid behandel.

Frida

Frida is ’n dinamiese instrumenterings-toolkit vir ontwikkelaars, reverse-engineers en sekuriteitsnavorsers.
Jy kan toegang kry tot ’n draaiende toepassing en hook metodes tydens runtime om die gedrag te verander, waardes te verander, waardes uit te trek, ander kode uit te voer…
As jy Android-toepassings wil pentest moet jy weet hoe om Frida te gebruik.

Anti-instrumentation & SSL pinning bypass workflow

Android Anti Instrumentation And Ssl Pinning Bypass

Dump Memory - Fridump

Kontroleer of die toepassing sensitiewe inligting in die geheue stoor wat dit nie behoort te stoor nie, soos wagwoorde of mnemonics.

Met Fridump3 kan jy die geheue van die app dump met:

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

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

Dit sal die geheue in die ./dump folder dump, en daar kan jy met iets soos grep:

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]+$"

Sensitiewe data in Keystore

In Android is die Keystore die beste plek om sensitiewe data te stoor, maar met voldoende voorregte is dit steeds moontlik om toegang daartoe te kry.

Aangesien toepassings geneig is om hier sensitiewe data in clear text te stoor, moet die pentests dit nagaan, aangesien ’n root user of iemand met physical access tot die toestel hierdie data kan steel.

Selfs as ’n app data in die keystore stoor, moet die data geënkripteer wees.

Om toegang tot die data binne die keystore te kry, kan jy hierdie Frida script gebruik: 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

Fingerprint/Biometrics Bypass

Deur die volgende Frida-skrip te gebruik, kan dit moontlik wees om die bypass fingerprint authentication wat Android-toepassings gebruik om sekere sensitiewe gebiede te beskerm, te omseil:

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

Agtergrondbeelde

Wanneer jy ’n toepassing na die agtergrond stuur, stoor Android ’n snapshot of the application, sodat wanneer dit na die voorgrond herstel word, dit eers die beeld laai voordat die app werklik begin — dit laat die app lyk asof dit vinniger gelaai is.

Indien hierdie snapshot egter gevoelige inligting bevat, kan iemand met toegang tot die snapshot daardie inligting steel (let wel: jy benodig root om toegang te kry).

Die snapshots word gewoonlik gestoor by: /data/system_ce/0/snapshots

Android bied ’n manier om die vaslegging van skermskote te voorkom deur die FLAG_SECURE layout-parameter te stel. Deur hierdie vlag te gebruik, word die vensterinhoud as veilig beskou, wat voorkom dat dit in skermskote verskyn of op onveilige skerms besigtig word.

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

Android Application Analyzer

Hierdie instrument kan jou help om verskillende gereedskap tydens dinamiese ontleding te bestuur: https://github.com/NotSoSecure/android_application_analyzer

Intent Injection

Ontwikkelaars skep dikwels proxy-komponente soos activities, services en broadcast receivers wat hierdie Intents hanteer en dit deurgee aan metodes soos startActivity(...) of sendBroadcast(...), wat riskant kan wees.

Die gevaar lê daarin om aanvallers toe te laat om non-exported app components te aktiveer of toegang tot sensitiewe content providers te kry deur hierdie Intents te mislei. ’n Noemenswaardige voorbeeld is die WebView component wat URLs na Intent objects omskakel via Intent.parseUri(...) en dit dan uitvoer, wat moontlik tot malicious Intent injections kan lei.

Essential Takeaways

  • Intent Injection is soortgelyk aan die web se Open Redirect-kwessie.
  • Eksploite behels die deurgee van Intent objects as extras, wat herlei kan word om onveilige operasies uit te voer.
  • Dit kan non-exported components en content providers aan aanvallers blootstel.
  • WebView’s URL-na-Intent omskakeling kan onbedoelde aksies vergemaklik.

Android Client Side Injections and others

Jy ken waarskynlik hierdie soort kwesbaarhede van die Web. Jy moet besonder versigtig wees met hierdie kwesbaarhede in ’n Android-toepassing:

  • SQL Injection: Wanneer jy met dinamiese navrae of Content-Providers werk, maak seker jy gebruik geparametriseerde queries.
  • JavaScript Injection (XSS): Kontroleer dat JavaScript- en Plugin-ondersteuning vir enige WebViews afgeskakel is (standaard afgeskakel). Meer inligting hier.
  • Local File Inclusion: WebViews moet toegang tot die lêerstelsel gedeaktiveer hê (standaard geaktiveer) - (webview.getSettings().setAllowFileAccess(false);). Meer inligting hier.
  • Eternal cookies: In verskeie gevalle, wanneer die Android-toepassing die sessie beëindig, word die cookie nie herroep nie, of dit kan selfs op skyf gestoor word
  • Secure Flag in cookies

Outomatiese Analise

MobSF

Statiese ontleding

Kwetsbaarheidsassessering van die toepassing gebruik ’n netjiese webgebaseerde frontend. Jy kan ook dinamiese ontleding uitvoer (maar jy moet die omgewing voorberei).

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

Neem kennis dat MobSF Android (apk), IOS (ipa) en Windows (apx) toepassings kan ontleed (Windows applications must be analyzed from a MobSF installed in a Windows host).
Ook, as jy ’n ZIP-lêer met die bronkode van ’n Android of ’n IOS app skep (gaan na die root-gids van die toepassing, selekteer alles en skep ’n ZIPfile), sal dit dit ook kan ontleed.

MobSF laat jou ook toe om diff/Compare analises en om VirusTotal te integreer (jy sal jou API key in MobSF/settings.py moet stel en dit aktiveer: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE). Jy kan ook VT_UPLOAD op False stel, dan sal die hash opgelaai word in plaas van die lêer.

Geassisteerde dinamiese ontleding met MobSF

MobSF kan ook baie nuttig wees vir dinamiese ontleding op Android, maar in daardie geval sal jy MobSF en genymotion op jou host moet installeer (a VM of Docker sal nie werk nie). Note: You need to start first a VM in genymotion and then MobSF.
Die MobSF dynamic analyser kan:

  • Dump application data (URLs, logs, knipbord, skermkiekies wat jy neem, skermkiekies gemaak deur “Exported Activity Tester”, e-posse, SQLite databases, XML-lêers, en ander geskepte lêers). Dit alles word outomaties gedoen, behalwe vir die skermkiekies—jy moet die knoppie druk wanneer jy ’n skermkiekie wil hê of die “Exported Activity Tester” druk om skermkiekies van alle geëksporteerde aktiwiteite te verkry.
  • Capture HTTPS traffic
  • Use Frida to obtain runtime information

Vanaf Android versions > 5, sal dit outomaties Frida begin en globale proxy-instellings stel om verkeer te capture. Dit sal slegs verkeer van die getoetste toepassing vasvang.

Frida

Per verstek sal dit ook sekere Frida Scripts gebruik om SSL pinning te bypass, root detection en debugger detection te omseil en interessante APIs te monitor.
MobSF kan ook geëksporteerde aktiwiteite aanroep, skermkiekies daarvan gryp en dit vir die verslag stoor.

Om die dinamiese toetsing te begin, druk die groen knoppie: “Start Instrumentation”. Druk die “Frida Live Logs” om die logs wat deur die Frida-skripte gegenereer word te sien en “Live API Monitor” om al die oproepe na hooked methods, deurgegewe argumente en teruggegewe waardes te sien (dit sal verskyn nadat jy “Start Instrumentation” gedruk het).
MobSF laat jou ook toe om jou eie Frida scripts te laai (om die resultate van jou Frida-skripte na MobSF te stuur gebruik die funksie send()). Dit het ook verskeie vooraf-geskrewe skripte wat jy kan laai (jy kan meer byvoeg in MobSF/DynamicAnalyzer/tools/frida_scripts/others/), selekteer hulle net, druk “Load” en druk “Start Instrumentation” (jy sal die logs van daardie skripte binne “Frida Live Logs” kan sien).

Verder beskik jy oor sommige bykomende Frida-funksionaliteite:

  • Enumerate Loaded Classes: Dit sal al die geladen klasse druk
  • Capture Strings: Dit sal al die vasgevang strings druk terwyl jy die toepassing gebruik (baie lawaaierig)
  • Capture String Comparisons: Baie handig. Dit sal die 2 strings wat vergelyk word wys en of die resultaat True of False was.
  • Enumerate Class Methods: Sit die klasnaam (soos “java.io.File”) in en dit sal al die metodes van die klas druk.
  • Search Class Pattern: Soek klasse volgens patroon
  • Trace Class Methods: Trace ’n hele klas (sien insette en uitsette van al die metodes van die klas). Onthou dat MobSF per verstek verskeie interessante Android API methods trace.

Sodra jy die bykomende module gekies het wat jy wil gebruik, moet jy “Start Instrumentation” druk en jy sal al die uitsette in “Frida Live Logs” sien.

Shell

MobSF bied ook ’n shell met sommige adb commands, MobSF commands, en algemene shell commands onderaan die dinamiese ontledingsblad. Sommige interessante commands:

help
shell ls
activities
exported_activities
services
receivers

HTTP gereedskap

Wanneer HTTP-verkeer opgeteken word kan jy ’n lelike weergawe van die opgetekende verkeer sien op die “HTTP(S) Traffic” knoppie onderaan of ’n netter weergawe in die groen “Start HTTPTools” knoppie. Vanaf die tweede opsie kan jy die opgetekende versoeke stuur na proxies soos Burp of Owasp ZAP.
Om dit te doen, skakel Burp aan –> skakel Intercept af –> in MobSB HTTPTools kies die versoek –> druk “Send to Fuzzer” –> kies die proxy-adres (http://127.0.0.1:8080\).

Sodra jy die dinamiese analise met MobSF voltooi het, kan jy op “Start Web API Fuzzer” druk om fuzz http requests en te kyk vir kwesbaarhede.

Tip

Nadat jy ’n dinamiese analise met MobSF uitgevoer het, kan die proxy-instellings verkeerd ingestel wees en jy sal dit nie vanaf die GUI kan regstel nie. Jy kan die proxy-instellings regmaak deur die volgende uit te voer:

adb shell settings put global http_proxy :0

Geassisteerde dinamiese analise met Inspeckage

Jy kan die hulpmiddel kry by Inspeckage.
Hierdie hulpmiddel gebruik sekere Hooks om jou te laat weet wat in die toepassing gebeur terwyl jy ’n dinamiese analise uitvoer.

Yaazhini

Dit is ’n geweldige hulpmiddel om statiese analise met ’n GUI uit te voer

Qark

Hierdie gereedskap is ontwerp om te soek na verskeie sekuriteitsverwante Android-toepassingskwesbaarhede, hetsy in die source code of in packaged APKs. Die instrument is ook in staat om ’n “Proof-of-Concept” deployable APK en ADB commands te skep, om sommige van die gevonde kwesbaarhede te eksploiteer (Exposed activities, intents, tapjacking…). Soos met Drozer, is daar geen behoefte om die toetsapparaat te root nie.

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

ReverseAPK

  • Wys alle uitgehaalde lêers vir maklike verwysing
  • Outomaties decompile APK-lêers na Java- en Smali-formaat
  • Analiseer AndroidManifest.xml vir algemene kwesbaarhede en gedrag
  • Statiese bronkode-ontleding vir algemene kwesbaarhede en gedrag
  • Toestelinligting
  • en meer
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPER is ’n opdragreëltoepassing wat gebruik kan word op Windows, MacOS X en Linux, wat .apk files ontleed op soek na vulnerabilities. Dit doen dit deur APKs te ontpak en ’n reeks reëls toe te pas om daardie vulnerabilities op te spoor.

Alle reëls is sentraal gestoor in ’n rules.json-lêer, en elke maatskappy of toetser kan hul eie reëls skep om te analiseer wat hulle nodig het.

Laai die nuutste binaries af vanaf die download page

super-analyzer {apk_file}

StaCoAn

StaCoAn is ’n crossplatform hulpmiddel wat ontwikkelaars, bugbounty hunters en ethical hackers help met die uitvoering van static code analysis op mobiele toepassings.

Die konsep is dat jy jou mobiele toepassingslêer (.apk of .ipa file) op die StaCoAn-toepassing sleep en neergooi, en dit sal ’n visuele en draagbare verslag vir jou genereer. Jy kan die instellings en wordlists aanpas om ’n aangepaste ervaring te kry.

Laai af latest release:

./stacoan

AndroBugs

AndroBugs Framework is ’n Android kwesbaarheid-analise stelsel wat ontwikkelaars of hackers help om potensiële sekuriteitskwesbaarhede in Android-toepassings te vind.
Windows releases

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

Androwarn

Androwarn is ’n hulpmiddel wat hoofsaaklik daarop gemik is om potensieel kwaadaardige gedrag wat deur ’n Android-toepassing ontwikkel is, op te spoor en die gebruiker daaroor te waarsku.

Die opsporing word uitgevoer met behulp van die static analysis van die toepassing se Dalvik bytecode, voorgestel as Smali, met die androguard biblioteek.

Hierdie hulpmiddel soek na algemene gedrag van “slegte” toepassings soos: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution…

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

MARA Framework

MARA is ’n Mobile Application Reverse engineering and Analysis Framework. Dit is ’n hulpmiddel wat algemeen gebruikte mobile application reverse engineering and analysis tools bymekaar sit om te help met die toetsing van mobile applications teen OWASP mobile security threats. Die doel is om hierdie taak makliker en vriendeliker te maak vir mobile application developers en security professionals.

Dit kan:

Koodous

Nuttig om malware op te spoor: https://koodous.com/

Obfuscating/Deobfuscating code

Let wel dat, afhangend van die diens en konfigurasie wat jy gebruik om die code te obfuscate, secrets wel of nie obfuscated mag eindig nie.

ProGuard

From Wikipedia: ProGuard is an open source command-line tool that shrinks, optimizes and obfuscates Java code. It is able to optimize bytecode as well as detect and remove unused instructions. ProGuard is free software and is distributed under the GNU General Public License, version 2.

ProGuard word saam met die Android SDK versprei en loop wanneer die aplikasie in release mode gebou word.

DexGuard

Vind ’n stap-vir-stap gids om die apk te deobfuscate by https://blog.lexfo.fr/dexguard.html

(From that guide) Last time we checked, the Dexguard mode of operation was:

  • load a resource as an InputStream;
  • feed the result to a class inheriting from FilterInputStream to decrypt it;
  • do some useless obfuscation to waste a few minutes of time from a reverser;
  • feed the decrypted result to a ZipInputStream to get a DEX file;
  • finally load the resulting DEX as a Resource using the loadDex method.

DeGuard

DeGuard reverses the process of obfuscation performed by Android obfuscation tools. This enables numerous security analyses, including code inspection and predicting libraries.

Jy kan ’n obfuscated APK na hul platform upload.

[Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app

Dit is ’n LLM tool om potensiële security vulnerabilities in android apps te vind en android app code te deobfuscate. Uses Google’s Gemini public API.

Simplify

Dit is ’n generic android deobfuscator. Simplify virtually executes an app om sy gedrag te verstaan en probeer dan die code te optimaliseer sodat dit identies gedrag maar makliker is vir ’n mens om te verstaan. Elke tipe optimalisering is eenvoudig en generic, so dit maak nie saak watter tipe obfuscation gebruik is nie.

APKiD

APKiD gee jou inligting oor hoe ’n APK gemaak is. Dit identifiseer baie compilers, packers, obfuscators, en ander vreemde goed. Dit is die PEiD vir Android.

Manual

Read this tutorial to learn some tricks on how to reverse custom obfuscation

Labs

Androl4b

AndroL4b is ’n Android security virtual machine gebaseer op ubuntu-mate en sluit ’n versameling van die nuutste framework, tutorials en labs van verskillende security geeks en researchers vir reverse engineering en malware analysis in.

References

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks