16/08/2023
I dagens digitale tidsalder er mobilapps blevet en uundværlig del af vores hverdag, fra banktransaktioner og sundhedspleje til social interaktion og underholdning. Med millioner af apps tilgængelige i Apple App Store og Google Play, er de også blevet et primært mål for ondsindede aktører, der søger at udnytte sårbarheder for at få adgang til følsomme oplysninger. Dette understreger det kritiske behov for robust mobilappsikkerhed, især gennem processen med penetrationstest.

Mobilapplikations penetrationstest er en systematisk proces, der anvendes til at identificere sikkerhedsbrister og svagheder i mobile applikationer, før de kan udnyttes af angribere. Målet er at simulere virkelige angreb for at afdække potentielle risici og give organisationer mulighed for at styrke deres applikationers forsvar. Denne omfattende guide vil dykke ned i de vigtigste aspekter af mobilapp pentesting, fra grundlæggende principper og vigtigheden heraf til detaljerede teknikker, værktøjer og best practices for både Android- og iOS-platforme.
- Hvad er penetrationstest af mobilapps?
- Hvorfor er penetrationstest af mobilapps vigtig?
- Forståelse af APK-filstrukturen
- OWASP Mobile Top 10: De vigtigste sårbarheder
- Vigtige teknikker til Android penetrationstest
- Værktøjer og rammeværker til mobil penetrationstest
- Opsætning af pentest-miljøet til Android
- Mobile Penetration Testing Labs: Øv dine færdigheder
- Rettens rolle: Mobil retsmedicin
- Ofte Stillede Spørgsmål (OSS)
Hvad er penetrationstest af mobilapps?
Penetrationstest af mobilapplikationer, ofte kaldet 'pentesting', er en proaktiv sikkerhedsforanstaltning, der involverer simulering af cyberangreb på mobile apps for at identificere sårbarheder. I modsætning til automatiseret scanning, der primært fokuserer på kendte sårbarheder, udføres penetrationstest af erfarne sikkerhedseksperter, der bruger en kombination af manuelle og automatiserede teknikker til at opdage dybere, mere komplekse fejl. Dette inkluderer ofte at teste appens interaktion med backend-systemer, datalagring på enheden og sikkerheden ved kommunikation over netværk.
Hvorfor er penetrationstest af mobilapps vigtig?
Mobilapplikationer og de tjenester, de leverer, er fundamentale i vores dagligdag, både privat og professionelt. Dette gør dem til attraktive mål for ondsindede aktører, der ønsker at kompromittere følsomme oplysninger. Konsekvenserne af en kompromitteret mobilapp kan være alvorlige, lige fra økonomisk tab og datalækager til skade på omdømme og juridiske problemer. For eksempel oplevede betalingsapplikationen Klarna i 2021 en applikationsfejl, der fik brugere til at logge ind på tilfældige konti tilhørende andre kunder, hvilket blotlagde følsomme personlige oplysninger og kreditkortdata. Ligeledes kæmper ParkMobile, en app til kontantløs parkering, stadig med et gruppesøgsmål fra et mobildatabrud i 2021, der påvirkede 21 millioner brugere.
Penetrationstest er afgørende for at opdage disse typer sårbarheder, før de kan udnyttes. Det hjælper virksomheder med at:
- Beskytte brugerdata og forhindre datalækager.
- Overholde lovgivningsmæssige krav og industristandarder (f.eks. GDPR, PCI DSS).
- Beskytte virksomhedens omdømme og kundernes tillid.
- Evaluere udviklingsteamets arbejde og IT-teamets reaktionsevne på sikkerhedshændelser.
- Minimere risikoen for svindelangreb og malware-infektioner.
Med nye sårbarheder, der dukker op hver dag, er mobil penetrationstest ikke længere et valg, men en nødvendighed for enhver virksomhed, der ønsker at lancere en ny app uden at skulle bekymre sig om juridiske eller sikkerhedsmæssige problemer.
Forståelse af APK-filstrukturen
En Android Package (APK) er et arkivfilformat med suffikset .apk, der indeholder alle de filer (kode og aktiver), der er nødvendige for, at en Android-applikation kan køre. APK-filer kan pakkes ud ved hjælp af kommandoen unzip appname.apk i Linux. Forståelse af denne struktur er afgørende for reverse engineering og analyse af apps.
De vigtigste komponenter i en udpakkes APK-fil inkluderer:
- META-INF: Indeholder verificeringsinformation, der genereres, når appen signeres.
- MANIFEST.MF: Indeholder en liste over navne/hashes (normalt SHA256 i Base64) for alle APK-filens filer.
- CERT.SF: Indeholder en liste over navne/hashes af de tilsvarende linjer i MANIFEST.MF-filen.
- CERT.RSA: Denne fil indeholder den offentlige nøgle og signaturen for CERT.SF.
- Assets: Indeholder aktiver, som udviklere samler med applikationen, såsom billeder, videoer, dokumenter og databaser.
- lib: Indeholder native biblioteker med kompileret kode til forskellige enhedsarkitekturer.
- res: Indeholder foruddefinerede applikationsressourcer, som XML-filer, der definerer farvetilstandslister, brugergrænsefladelayout, skrifttyper og værdier.
- AndroidManifest.xml: En manifestfil, der beskriver applikationens pakkenavn, aktiviteter, ressourcer, version og mere.
- classes.dex: Indeholder alle Java-klasser i et dex-filformat (Dalvik Executable), der skal udføres af Android Runtime.
- resources.arsc: Indeholder forudkompilerede ressourcer og information, der linker koden til ressourcer.
OWASP Mobile Top 10: De vigtigste sårbarheder
Open Web Application Security Project (OWASP) er en nonprofit-organisation, der leverer sikkerhedstips og metoder, primært for webapplikationer. I 2016 udgav OWASP deres seneste liste over Mobile Top 10 Sårbarheder, der fremhæver indvirkningen af hver sårbarhed på enkeltpersoner og virksomheder og foreslår forebyggelsesmetoder. Disse sårbarheder er et fremragende udgangspunkt for at finde fejl og forbedre applikationssikkerheden.
| Nr. | Sårbarhed | Beskrivelse | Indvirkning | Forebyggelse |
|---|---|---|---|---|
| 1. | Ukorrekt platformanvendelse | Misbrug af platformfunktioner som Android intents, platformtilladelser, TouchID eller manglende brug af platformens sikkerhedskontroller. | Fra ændring af appens indhold til fuldstændig konto kompromittering. | Sikre kodnings- og konfigurationspraksisser på serversiden. |
| 2. | Usikker datalagring | Lagring af ukrypterede data i enhedens lokale lagring. | Datalækage, identitetstyveri, bedrageri, omdømmetab. | Kryptering af lagrede data, begrænsning af adgang til lokal datalagring. |
| 3. | Usikker kommunikation | Aflytning af følsomme data i et kompromitteret netværk. | Blotlæggelse af personlige data, kompromittering af konti/servere. | Brug af SSL/TLS, stærke cipher suites, betroede CA-certifikater, SSL-kædeverifikation. |
| 4. | Usikker autentificering | Udnyttelse af standardoplysninger eller omgåelse af dårligt implementerede autentificeringsprotokoller. | Omdømmetab, informationstyveri, uautoriseret adgang. | Server-side autentificering, kryptering af klient-side lagring, ikke gemme adgangskoder på enheden. |
| 5. | Utilstrækkelig kryptografi | Data, der er forkert krypteret, kan gendannes af angribere. | Uautoriseret hentning af følsom information, privatlivskrænkelser, intellektuel ejendomstyveri. | Undgå lagring af følsomme data på enheden, anvend stærke kryptografiske standarder (NIST-retningslinjer). |
| 6. | Usikker autorisation | Udførelse af privilegerede funktioner, der kun bør være tilgængelige for brugere med højere privilegier. | Omdømmetab, bedrageri, informationstyveri. | Verificering af roller og tilladelser på backend-systemer. |
| 7. | Dårlig kodekvalitet | Videregivelse af ubetroede inputs til metodekald, hukommelseslækager, bufferoverløb. | Fjernkodeudførelse, informationstyveri, omdømmetab, intellektuel ejendomstyveri. | Konsistente kodningsmønstre, validering af bufferdata, brug af statiske analyseværktøjer. |
| 8. | Kode manipulation | Oprettelse af ondsindede apps ved at ændre eksisterende app-kildekode. | Uautoriserede nye funktioner, identitetstyveri, bedrageri, indtægtstab pga. piratkopiering. | Registrering af kodeændringer ved runtime, kontrol af jailbreak/rootede enheder. |
| 9. | Reverse engineering | Analyse af appens funktionalitet, ændring af kode og rekompilering. | Afsløring af backend-serverinformation, kryptografiske konstanter/cifre, tyveri af intellektuel ejendom. | Kodeobfuskering. |
| 10. | Ekstern funktionalitet | Opdagelse af backend-systemets funktionalitet for at udnytte det direkte. | Blotlæggelse af backend-systemers funktionalitet, uautoriseret udførelse af handlinger med høje privilegier. | Manuel kildekodeanalyse. |
Vigtige teknikker til Android penetrationstest
I en Android-enhed er der mange aspekter at teste for at opdage sikkerhedsfejl. Fra reverse engineering af APK-filer til aflytning af HTTP-anmodninger eller endda enumerering af filstrukturen af en installeret applikation, kan disse teknikker føre til potentiel blotlæggelse af følsomme oplysninger, der kan gøre det muligt at ændre den tilsigtede logikstrøm i en bestemt funktionalitet.

1. Enumerering af lokal datalagring
For at enumerere filstrukturen af en installeret applikation kræver vi adgang til en ægte eller emuleret enhed. Dette opnås typisk ved brug af Android Debug Bridge (ADB), et kommandolinjeværktøj, der giver direkte kommunikation med enheden. Ved hjælp af ADB kan vi installere og debugge applikationer, mens den Unix-shell, den giver, kan bruges til at køre kommandoer på enheden.
De vigtigste mapper at være opmærksom på er /data/data/ (indeholder installationerne af alle brugerinstallerede apps), /data/user/0 (data kun tilgængelige for appen), og /data/app (indeholder APK'erne). Inden for /data/data/ kan mapper som databases og sharedprefs indeholde følsomme data. Ved at bruge sqlite3-klienten kan man læse indholdet af databaser, og XML-filer i shared_prefs kan afsløre nøgleværdipar. Kryptering af følsomme værdier og brug af biblioteker som EncryptedSharedPreferences kan afbøde informationsafsløringsangreb.
2. Udtrækning af APK-filer
Reverse engineering af en APK-fil kan føre til omgåelse af forskellige sikkerhedsforanstaltninger. APK-filer kan reverseres ved hjælp af open source-værktøjer som dex2jar, JADX, JD-GUI, APKTOOL og andre. Udtrækning af APK-filer kan gøres på flere måder: find APK'en online via platforme som APKCombo, brug tredjepartsværktøjer som APK Export-appen, eller træk APK'en direkte fra enheden, hvis applikationen allerede er installeret, typisk fra /data/app/<pakkenavn>-1/base.apk ved hjælp af ADB-kommandoer som adb shell pm path <pakkenavn> og adb pull <fuld sti>.
3. Reverse engineering med JADX
Efter at have udtrukket en APK-fil, er det næste skridt ofte at reverse engineere den for at undersøge kildekoden. JADX-GUI er et fremragende værktøj, der direkte kan åbne APK-filer og vise applikationens Java-pseudokode. Dette giver et klarere billede af applikationens logik og funktionalitet. I nogle tilfælde kan kildekoden være obfuskeret, hvilket betyder, at den er gjort svær at læse for mennesker. Android Studio bruger ProGuard til kodeobfuskering, som erstatter metodenavne med generiske bogstaver. Selvom obfuskering gør det sværere, er det ikke umuligt at læse koden. Nøje inspektion af kildekoden kan afsløre følsomme oplysninger som krypteringsalgoritmer, hemmelige nøgler eller hårdkodede adgangskoder, hvilket kan udnyttes til at omgå sikkerhedsforanstaltninger.
4. Dekompilering og rekompilering af APK-filer
Et andet nyttigt værktøj inden for Android reverse engineering er Apktool. Det giver mulighed for at dekompilere en APK, læse og foretage ændringer i kildekoden (i Smali-format), og derefter genopbygge ressourcerne tilbage til en APK-fil. Smali-kode er en symbolsk sprogversion af Dalvik Executable (dex)-formatet, der bruges af Androids Java VM-implementering. Selvom det er sværere at læse end Java-pseudokode, kan det redigeres for at ændre applikationens funktionalitet, f.eks. at omgå en login-skærm. Efter redigering af Smali-koden (f.eks. ved at ændre en if-eqz-instruktion til if-nez for at vende en logik), kan APK'en rekompileres med apktool b <mappenavn>. Den nyoprettede APK skal derefter signeres med et selvsigneret certifikat (ved hjælp af keytool og jarsigner) og installeres på enheden, hvilket potentielt giver mulighed for at omgå oprindelige sikkerhedskontroller.
5. Aflytning af netværkstrafik
Mange Android-apps kommunikerer med backend-servere for at behandle eller gemme data eksternt. Aflytning af HTTP-anmodninger og -svar mellem appen og serveren er en ligetil proces, der kan afsløre følsomme data sendt over netværket, især hvis kommunikationen ikke er korrekt krypteret. Værktøjer som Burp Suite kan bruges til at opsnappe og manipulere denne trafik. Ved at konfigurere proxyindstillingerne på en Android Virtual Device (AVD) til at pege på Burp Suite, kan man fange login-oplysninger, API-kald og andre data, der udveksles i klartekst.
For at afbøde sådanne problemer bruges Secure Sockets Layer (SSL)/Transport Layer Security (TLS). Dog er der udviklet teknikker til at omgå disse implementeringer, såsom SSL Pinning. SSL Pinning er en teknik, der bruges til at forhindre man-in-the-middle-angreb ved enten at inkludere certifikatet i app-pakken (Certificate Pinning) eller ved at inkludere certifikatets offentlige nøgle eller hash direkte i kildekoden som en streng. På trods af dette kan værktøjer som Frida, et dynamisk instrumenteringsværktøj, injicere kode i APK'en ved runtime for at omgå SSL Pinning, hvilket igen gør det muligt at aflytte krypteret trafik.

Værktøjer og rammeværker til mobil penetrationstest
En succesfuld penetrationstest kræver et robust sæt værktøjer. Her er en oversigt over nogle af de mest anvendte værktøjer og rammeværker til mobil penetrationstest, opdelt efter deres primære funktion:
Distributioner til sikkerhedstest af mobilapps
- Appie: En bærbar softwarepakke til Android Pentesting.
- Android Tamer: En virtuel/live platform for Android-sikkerhedsprofessionelle.
- Androl4b: En virtuel maskine til vurdering af Android-applikationer, reverse engineering og malwareanalyse.
- Vezir Project: Miljø for mobilapplikation penetrationstest og malwareanalyse.
- Mobexler: En tilpasset virtuel maskine designet til penetrationstest af Android- og iOS-applikationer.
Alt-i-én rammeværker til mobil sikkerhed
- Mobile Security Framework - MobSF: En intelligent, alt-i-én open source mobilapplikation (Android/iOS) automatiseret pen-testing rammeværk, der er i stand til at udføre statisk og dynamisk analyse.
- Needle: Et open source, modulært rammeværk til strømlining af sikkerhedsvurderinger af iOS-apps, herunder binær analyse, statisk kodeanalyse, runtime-manipulation med Cycript og Frida hooking.
- Objection: Et runtime mobilt udforskningsværktøj, drevet af Frida, bygget til at hjælpe med at vurdere mobile applikationer og deres sikkerhedsposition uden behov for en jailbroken eller rootet mobilenhed.
- RMS-Runtime-Mobile-Security: En kraftfuld webgrænseflade, der hjælper dig med at manipulere Android- og iOS-apps ved runtime, drevet af Frida.
Værktøjer til Android-applikation penetrationstest
- Reverse Engineering og Statisk Analyse: APKTool, Bytecode Viewer, Jadx, APK Studio, Oat2dex, Spotbugs, Qark, SUPER, AndroBugs, Simplify, ClassNameDeobfuscator, Android backup extractor, GDA.
- Dynamisk Analyse og Runtime Analyse: Cydia Substrate, Xposed Framework, PID Cat, Inspeckage, Frida, Diff-GUI, Fridump, House, AndBug, Introspy-Android, Drozer.
- Netværksanalyse og Server-side Test: Tcpdump, Wireshark, Mallory, Burp Suite, Burp Suite Mobile Assistant, OWASP ZAP, Proxydroid, mitmproxy.
- Omgåelse af Root-detektion og SSL Pinning: Magisk, Xposed Module: Just Trust Me, Xposed Module: SSLUnpinning, Cydia Substrate Module: Android SSL Trust Killer, Cydia Substrate Module: RootCoak Plus, Android-ssl-bypass, Apk-mitm, Frida CodeShare.
- Sikkerhedsbiblioteker: PublicKey Pinning, Android Pinning, Java AES Crypto, Proguard, SQL Cipher, Secure Preferences, Trusted Intents, RootBeer, End-to-end encryption.
Værktøjer til iOS-applikation penetrationstest
- Adgang til filsystem på iDevice: FileZilla, Cyberduck, itunnel, iProxy, iFunbox.
- Reverse Engineering og Statisk Analyse: otool, Clutch, Dumpdecrypted, class-dump, dsdump, Weak Classdump, Fridpa, Frida-iOS-Dump, bagbak, bfinject, HopperApp, hopperscripts, Radare2, XReSign.
- Dynamisk Analyse og Runtime Analyse: cycript, iNalyzer, Grapefruit, Introspy-iOS, Apple configurator 2, keychaindumper, BinaryCookieReader.
- Netværksanalyse og Server-side Test: Mallory, Burp Suite, OWASP ZAP, Charles Proxy.
- Omgåelse af Root-detektion og SSL Pinning: SSL Kill Switch 2, iOS TrustMe, tsProtector, JailProtect, Shadow, Frida CodeShare.
- Sikkerhedsbiblioteker: PublicKey Pinning, Swiftshield, IOSSecuritySuite, OWASP iMAS.
Opsætning af pentest-miljøet til Android
For at udføre vurderinger af Android-enheder og -applikationer kræves enten en ægte eller emuleret Android-enhed. En Android Virtual Device (AVD), der leveres sammen med Android Studio IDE, er en god løsning at starte med. Alternativer som Genymotion og Corellium tilbyder skybaserede miljøer og ARM-baseret virtualisering, hvilket er afgørende for kernelsploitation og dybere analyser. Opsætning indebærer typisk installation af Android Studio, oprettelse af et nyt projekt og start af AVD Manager for at starte en emulator. For at opnå root-adgang på AVD'er kan specifikke GitHub-projekter følges for at muliggøre mere dybdegående test.
Mobile Penetration Testing Labs: Øv dine færdigheder
Den bedste måde at mestre penetrationstestteknikker på er gennem praktisk erfaring. Der findes en række bevidst sårbare mobilapps, der er designet til læringsformål. Disse 'labs' giver et lovligt og sikkert miljø til at øve sig i at finde og udnytte sårbarheder. Eksempler inkluderer:
- WaTF Bank: En mobilbankapplikation med over 30 sårbarheder baseret på OWASP Mobile Top 10 Risks.
- InsecureBankv2: En sårbar Android-applikation lavet til sikkerhedsentusiaster og udviklere.
- DVIA-v2 (Damn Vulnerable iOS App): En iOS-applikation designet til at teste iOS penetrationstestfærdigheder.
- DIVA Android (Damn Insecure and Vulnerable App): En app designet til at lære om sikkerhedsfejl forårsaget af dårlig kodning.
- DVHMA (Damn Vulnerable Hybrid Mobile App): En hybrid mobilapp (til Android), der indeholder sårbarheder.
- MSTG Hacking Playground: En samling af iOS- og Android-mobilapps, der bevidst er bygget usikre.
- UnCrackable Mobile Apps: En samling af mobile reverse engineering-udfordringer.
- OWASP iGoat: Et læringsværktøj for iOS-udviklere og mobile app-pentestere, inspireret af WebGoat.
Rettens rolle: Mobil retsmedicin
I nogle tilfælde vil reverse engineering alene ikke afsløre den fulde skade forårsaget af en malwareinfektion eller en kompromitteret app. Her kommer mobil retsmedicin ind i billedet. Retsmedicinske undersøgelser kan hjælpe med at identificere beviser for et brud og give et mere detaljeret billede af mobile sikkerhedshændelser. For Android-enheder er det muligt at lave en kopi af diskbilledet for yderligere at undersøge det ved hjælp af værktøjer som Autopsy. Autopsy er en open source digital retsmedicinsk platform, der kan hjælpe med at hente slettede filer, læse databaser, EXIF-data, SMS og telefonopkaldslister, og meget mere fra et diskbillede af en rootet enhed. Denne proces involverer typisk at roote enheden, bruge dd-kommandoen til at erhverve diskbilledet og overføre det til værtsmaskinen for analyse.
Ofte Stillede Spørgsmål (OSS)
Hvad er forskellen mellem statisk og dynamisk analyse i mobil pentesting?
Statisk analyse involverer at undersøge appens kode uden at køre den, typisk ved at dekompilere APK/IPA-filer for at finde sårbarheder i kildekoden. Dynamisk analyse derimod udføres, mens appen kører, og observerer dens adfærd, interaktioner og hukommelsesbrug for at afdække sårbarheder, der kun manifesterer sig under runtime.
Hvorfor er det vigtigt at teste både Android- og iOS-apps?
Selvom begge platforme tjener lignende formål, har de forskellige operativsystemarkitekturer, sikkerhedsmekanismer og udviklingsrammeværker. Sårbarheder, der påvirker den ene platform, påvirker muligvis ikke den anden, og de værktøjer og teknikker, der anvendes, kan variere betydeligt. En omfattende sikkerhedsvurdering kræver test på begge platforme for at sikre fuldstændig dækning.
Hvad er SSL Pinning, og hvorfor omgår pentestere det?
SSL Pinning er en sikkerhedsforanstaltning, der binder en app til et specifikt certifikat eller en offentlig nøgle for at forhindre man-in-the-middle-angreb. Pentestere omgår det for at kunne aflytte og analysere appens krypterede netværkstrafik, hvilket er afgørende for at identificere sårbarheder relateret til dataoverførsel og API-kommunikation.
Hvad er OWASP Mobile Top 10, og hvordan bruges den i penetrationstest?
OWASP Mobile Top 10 er en liste over de ti mest kritiske sikkerhedsrisici for mobilapplikationer. Den bruges som en grundlæggende tjekliste og retningslinje for pentestere til at fokusere deres indsats på de mest almindelige og indflydelsesrige sårbarheder. Den hjælper med at prioritere testaktiviteter og sikre, at de mest presserende risici adresseres.
Hvis du vil læse andre artikler, der ligner Mobilapp Pentest: Din Komplette Sikkerhedsguide, kan du besøge kategorien Teknologi.
