How does a man-in-the-middle attack work?

Nemme MitM Angreb på Android Apps: En Dybdegående Guide

01/01/2025

Rating: 4.3 (10148 votes)

I en verden, hvor mobilapps er blevet en uundværlig del af vores hverdag, er sikkerheden af den data, de behandler, mere kritisk end nogensinde. Mange forestiller sig, at et Man-in-the-Middle (MitM) angreb er en kompleks bedrift, forbeholdt erfarne hackere og sikkerhedseksperter. Men sandheden er, at med de rette værktøjer og en trin-for-trin-vejledning kan selv nybegyndere udføre sådanne angreb for at forstå, hvordan mobilapps kommunikerer med deres servere. Denne artikel vil dykke ned i en ligetil metode til at udføre MitM angreb på Android-apps ved hjælp af en emulator med et skrivbart filsystem, og vise, hvor nemt det er at opsnappe og analysere krypteret trafik, selv over HTTPS.

How hard is a MITM attack?
Performing a MitM attack is not too hard, just a little laborious, and it allows an attacker to understand in detail how a mobile app communicates with its API, and then use that same knowledge to automate attacks or build other services around it.

Vi vil udforske, hvorfor denne tilgang er lettere end traditionelle metoder, hvilke begrænsninger den har, og vi vil demonstrere den i praksis med en populær demo-app. Målet er at give dig en dybdegående forståelse af sårbarheder i mobilapp-kommunikation og belyse vigtigheden af robust API-sikkerhed.

Indholdsfortegnelse

Hvad er et Man-in-the-Middle (MitM) Angreb?

Et Man-in-the-Middle (MitM) angreb opstår, når en angriber hemmeligt opsnapper og potentielt ændrer kommunikationen mellem to parter, der tror, de kommunikerer direkte med hinanden. I mobilapp-konteksten betyder det typisk, at angriberen placerer sig mellem mobilappen og dens API-server. Når kommunikationen går gennem angriberens proxy, kan angriberen se, hvad der sendes (f.eks. login-oplysninger, personlige data) og hvad der modtages (f.eks. server-svar, forretningslogik). Dette er især potent, når der er tale om krypteret trafik, da angriberen effektivt kan bryde krypteringen ved at fungere som en 'mellemmand', der præsenterer sit eget certifikat for klienten og derefter et nyt gyldigt certifikat for serveren.

Hvorfor Udføre et MitM Angreb?

Der kan være flere grunde til, at en angriber ønsker at opsnappe kommunikationen mellem en mobilapp og dens API-server:

  • Dataindsamling: At indsamle nok information til at automatisere angreb mod API'en, f.eks. at stjæle brugerdata eller adgangstokens.
  • Modifikation af data: At ændre eller omdirigere data i farten for at opnå uautoriseret adgang eller manipulere appens funktionalitet.
  • Forståelse af forretningslogik: Legitime brugere kan også ønske at omgå begrænsninger, der er pålagt af mobilappens brugerflade, for at få adgang til visse tjenester, der er tilgængelige via API'en. Dette kan inkludere at 'gamify' eller få adgang til funktioner/ressourcer, der ikke er tilgængelige inden for deres nuværende abonnement, eller at indsamle/bruge flere belønningspoint eller rabatkuponer, end de er berettiget til.

Traditionelle Metoder vs. Den Nemme Vej: Android Emulator med Skrivbart Filsystem

At udføre et MitM angreb mod en HTTPS-kanal kræver, at angriberen kan tilføje proxy-serverens Certificate Authority (CA) til enhedens Trust Store. Den populære tilgang er manuelt at uploade CA'en til enheden, men dette kan medføre udfordringer, som kan kræve rooting af enheden og/eller repackagering af mobilappen.

Siden Android API 24 har Android OS (operativsystemet) krævet, at mobilapps eksplicit opt-in for at stole på brugerleverede certifikater. Dette var en vigtig sikkerhedsforbedring for at forhindre almindelige brugere i at blive narret til at installere certifikater, der derefter ville tillade en angriber at MitM enhver udgående HTTPs-anmodning. Desværre forhindrer det ikke målbevidste angribere i at omgå det på en enhed, de kontrollerer.

Vores tilgang adskiller sig markant. Hvor den populære tilgang ofte kræver en rooted enhed eller emulator for at installere CA'en direkte i enhedens Trust Store, bruger metoden i denne artikel en emulator, der startes og konfigureres med et skrivbart filsystem uden behov for at roote den. Dette betyder, at vi kan installere proxy-certifikatet direkte i systemets betroede lager, hvilket omgår kravet om at tilføje certifikatet til brugerens Trust Store (som ikke virker fra Android API 24 og fremefter, medmindre appen repackages). Denne metode har den fordel, at den bruger samme proces for at gøre det brugerdefinerede certifikat betroet af systemet på tværs af enhver Android API-version, hvor det er muligt at starte emulatoren med et skrivbart filsystem.

Derudover giver brugen af en emulator med et skrivbart filsystem angriberen en masse magt til at omgå sikkerhedsforanstaltninger i mobilappen. Det er ikke begrænset til at injicere brugerdefinerede certifikater; denne tilgang kan også bruges til at installere og køre yderligere værktøjer, f.eks. til at hooke ind i koden ved runtime og modificere dens adfærd.

Er Et MitM Angreb for Alle?

Der findes et væld af open source-værktøjer, der hjælper os med, hvad der synes at være en avanceret opgave, kun mestret af hackere, pentestere og sikkerhedsforskere. Den gode nyhed er, at du ikke behøver at være en af dem for at kunne udføre et MitM angreb. Du skal blot være en person, der føler sig tryg ved at bruge computere og være lidt teknisk kyndig for at følge en trin-for-trin-vejledning.

Begrænsninger ved Denne Tilgang

Den tilgang, vi er ved at se, vil være begrænset til at lykkes i mobilapps, der ikke bruger certificate pinning og/eller runtime self-protection-mekanismer. Hvis en app implementerer certificate pinning, betyder det, at den kun vil stole på specifikke, foruddefinerede certifikater og vil afvise alle andre, selvom de er udstedt af en betroet CA. For at omgå certificate pinning i en mobilapp skal du se frem til den næste artikel i denne serie, der udnytter den nuværende tilgang og tilføjer et instrumenteringsframework for at hooke ind i koden ved runtime og få pinning-kontrollen til altid at lykkes.

Forudsætninger og Nødvendige Værktøjer

Denne vejledning er trin-for-trin, og vi antager, at du følger den på en Linux-baseret computer, og at du allerede har Android Studio installeret og konfigureret. Denne specifikke vejledning er udført på en Ubuntu 20.04 desktop-computer. Hvis du kører på en anden platform, kan du prøve at bruge en Ubuntu 20.04 VM eller tilpasse trinene til din nuværende platform.

Vigtigste Værktøjer

row>

VærktøjBeskrivelse
Android Studio Bruges indirekte via dets installerede værktøjer (f.eks. Android Emulator, adb).
Android Emulator Til at køre appen med en skrivbar AVD, installere mitmproxy-certifikatet og Frida-serveren. Findes i Android Studio-installationen.
Mitmproxy Proxy-serveren til at opsnappe HTTP-anmodninger fra Android-emulatoren.

For at forberede dit system skal du følge en GitHub gist for de nødvendige opsætningstrin for mitmproxy og emulatoren.

Praktisk Demonstration: MitM Angreb på ShipFast Appen

For at demonstrere, hvordan man udfører et MitM angreb på en mobilapp, vil vi bruge ShipFast mobilappens release-version til API-nøgle demo-stadiet. ShipFast mobilappen er en del af en serie artikler om praktisk API-sikkerhed for mobilapps.

Handlingsplanens Resumé

  1. Først vil vi bruge ShipFast appen i emulatoren som en almindelig bruger. Målet er blot at vise, hvordan mobilappen fungerer under normale omstændigheder.
  2. Derefter vil vi køre ShipFast i emulatoren, der er modificeret til at inkludere mitmproxy-certifikatet i dens system-Trust Store, og observere, hvor nemt det er at opsnappe anmodningerne til API-backend'en ved at proxy'e dem gennem mitmproxy.

Klargøring af ShipFast Appen

Antag, at emulatoren allerede kører. Vi starter med at installere og køre ShipFast appen:

  1. Download ShipFast mobilappen med:
    curl -LO https://github.com/approov/shipfast-api-protection/releases/download/2.2.0/app-api_key-release.apk
  2. Installer den på emulatoren:
    adb install app-api_key-release.apk
  3. Start derefter appen via adb med:
    adb shell am start -n com.criticalblue.shipfast.api_key/com.criticalblue.shipfast.LoginActivity

Når mobilappen er startet, skal du logge ind med Auth0 ved hjælp af en af login-metoderne. Efter at alle login-trin er gennemført, skal du godkende appen til at få adgang til din enheds placering. Interager med appen som normalt for at se dens funktionalitet.

MitM Angrebet i Praksis

Nu hvor vi har set ShipFast køre normalt, er det tid til at starte MitM angrebet. Antag, at mitmproxy CLI allerede kører og lytter på port 8080.

  1. Luk den nuværende åbne emulator og start den igen, denne gang i skrivbar tilstand og med en proxy indstillet til din wifi IP-adresse på port 8080:
    emulator -avd pixel-android-api-29 -writable-system -http-proxy http://DIN.WIFI.IP.ADRESSE:8080 &> /dev/null &
  2. Når enheden er startet, skal vi genstarte ShipFast appen. Stop først den nuværende kørende instans:
    adb shell am force-stop com.criticalblue.shipfast.api_key
  3. Start derefter ShipFast appen igen via adb:
    adb shell am start -n com.criticalblue.shipfast.api_key/com.criticalblue.shipfast.LoginActivity

Log nu ind med Auth0 igen, og når du har hovedskærmen, klik på toggle-knappen i nederste højre hjørne. Du bør kunne fortsætte med at interagere med mobilappen uden at se nogen fejlmeddelelser. Men hvis du kigger på mitmproxy CLI, kan du se, at de anmodninger, der sendes til API-backend'en, nu er synlige!

Analyse af Opsnappet Trafik

Vi kan nu se hele sekvensen af anmodninger under brugerautentificeringsflowet med Auth0 og anmodningerne til ShipFast API-backend'en. Lad os vælge anmodningen til /v1/shipments/nearest_shipment og se dens detaljer. Ved at kigge på headers-sektionen af anmodningen kan vi se, at Authorization og Api-Keyheaders er tilgængelige til at blive genbrugt uden for mobilappen, for eksempel i automatiserede scripts. Sådanne scripts vil nu være i stand til at udgive sig for mobilapp-trafik, fordi API-backend'en vil betragte disse scriptede anmodninger som identiske med legitime anmodninger.

Lad os også tage et kig på svaret. Denne information er meget værdifuld for en angriber, der forsøger at automatisere angreb mod API-backend'en, fordi han nu har et fuldt overblik over hver anmodnings livscyklus. For eksempel var denne tilgang, hvad der gjorde det muligt for ShipRaider-hackeren at bygge sin webapp omkring ShipFast API-backend'en.

Kasusstudie: ShipRaider og ShipFast

Ved at forstå, hvordan ShipFast mobilappen kommunikerer med sin backend, var ShipRaider-hackeren i stand til at bygge en webapp, der tillader ShipFast-chauffører at vælge forsendelsen med den bedste drikkepenge. Dette er noget, de ikke kan gøre i mobilappen, fordi det strider mod ShipFast-virksomhedens forretningsmodel. At omgå den ægte mobilapp skader virksomhedens omdømme for sin meget hurtige og effektive leveringsservice. Det omdømme er baseret på, at chauffører altid dirigeres til den nærmeste pakke, der skal leveres, uanset den tilbudte drikkepenge. Dette koncept brydes af ShipRaider – hvilket fører til længere leveringstider og lavere serviceniveauer.

Ofte Stillede Spørgsmål (FAQ)

Er det lovligt at udføre MitM angreb?

Det er kun lovligt at udføre MitM angreb på systemer, du ejer, eller som du har udtrykkelig tilladelse til at teste. Uautoriseret adgang eller opsnapning af andres kommunikation er ulovligt og kan have alvorlige juridiske konsekvenser.

Hvad er 'certificate pinning'?

Certificate pinning er en sikkerhedsforanstaltning, hvor en mobilapp 'husker' eller 'pinner' de specifikke SSL/TLS-certifikater (eller de offentlige nøgler fra disse certifikater), som den forventer at se fra en server. Hvis serveren præsenterer et andet certifikat, selv et der er udstedt af en betroet rod-CA, vil appen afvise forbindelsen. Dette forhindrer MitM angreb, da angriberens proxy-certifikat ikke vil matche det forventede.

Hvilke andre sikkerhedsforanstaltninger kan apps bruge mod MitM?

Udover certificate pinning kan apps implementere runtime self-protection, som opdager, hvis appen kører på en rooted enhed, eller hvis dens kode er blevet manipuleret. De kan også bruge stærkere krypteringsprotokoller, token-baseret autentificering, og regelmæssigt revidere deres API-sikkerhed.

Virker denne metode også for iOS-apps?

Denne specifikke vejledning fokuserer på Android-emulatoren. Konceptuelt er principperne for MitM angreb de samme på iOS, men de specifikke værktøjer og trin til at injicere et certifikat i systemets Trust Store på iOS adskiller sig og er ofte mere komplekse, især på ikke-jailbreakede enheder.

Opsummering

At udføre et MitM angreb er ikke for svært, blot lidt arbejdskrævende, og det giver en angriber mulighed for i detaljer at forstå, hvordan en mobilapp kommunikerer med dens API, og derefter bruge den samme viden til at automatisere angreb eller bygge andre tjenester omkring den. En anden vigtig pointe er, at API-backend'en ikke kan stole på, at en anmodning faktisk kommer fra, hvad den forventer, en ægte og umodificeret version af mobilappen downloadet fra de officielle butikker for Android og iOS, selv når anmodningen bruger en kombination af en API-nøgle og brugerautentificering til at autentificere sig over for API'en. Sikkerhed på serversiden er afgørende for at modstå sådanne trusler.

Hvis du vil læse andre artikler, der ligner Nemme MitM Angreb på Android Apps: En Dybdegående Guide, kan du besøge kategorien Teknologi.

Go up