Veit du hva slags data appene dine faktisk gir fra seg - og til hvem?

Nils Larsgård viser deg hvordan du analyserer nettverkstrafikk med mitmproxy.

- Hva slags tjenester blir brukt av de bibliotekene og SDK-ene du bruker, og hva slags data sendes til disse tjenestene? spør Kodemaker-utvikler Nils Larsgård. Svaret er et program som mitmproxy. 📸: Kodemaker / kode24
- Hva slags tjenester blir brukt av de bibliotekene og SDK-ene du bruker, og hva slags data sendes til disse tjenestene? spør Kodemaker-utvikler Nils Larsgård. Svaret er et program som mitmproxy. 📸: Kodemaker / kode24 Vis mer

Mest sannsynlig har du full kontroll på hvilke tjenester mobil-appen du har laget bruker.

Men hva slags tjenester blir brukt av de bibliotekene og SDK-ene du bruker, og hva slags data sendes til disse tjenestene?

Hva er en proxy?

En proxy er en applikasjon som fungerer som en slags gateway mellom enheten din og internett.

All nettverkstrafikk går gjennom den, og det kan være nyttig til å sile ut ondsinnet nettverkstrafikk, eller som i dette tilfellet:

Analysere trafikken mellom devicen din og internett.

mitmproxy

mitmproxy er en open-source proxy som lar deg inspisere trafikk fra en fysisk device. Det er et veldig fleksibelt verktøy som kan konfigureres med mange parametere, men for vanlig bruk kan vi bruke Docker for å starte en ny instans.

Jeg bruker mitm såpass ofte at jeg har et eget alias for å starte det jeg trenger:

alias startMitm='docker run -it -v ~/.mitmproxy:/home/mitmproxy/.mitmproxy \
    -p 8081:8081 -p 8080:8080 \
    mitmproxy/mitmproxy mitmweb \
    --web-host 0.0.0.0'

Denne besvergelsen av en Docker-kommando starter mitm og et web-grensesnitt lokalt på localhost:8081. I tillegg lagrer den genererte sertifikater i ~/.mitmproxy/ slik at du slipper å installere nye sertifikater på devicen din hver gang du kjører trafikken gjennom mitm-proxy.

1, 2, 3

For å bruke denne proxyen må du ha en telefon som er på samme nettverk som PC-en som kjører mitm. Dette gjør du ved å konfigurere en proxy i instillingene for wifi-nettverket ditt.

  1. Finn IP-adressen til PC-en som kjører mitmproxy, for eksempel med ifconfig
  2. Åpne innstillingene for wifi-nettverket på telefonen og fyll inn ip-adressen og port 8080 for proxyen
  3. Åpne nettleseren på en iOS-device (iOS er lettere å konfigurere enn Android til dette) og gå til adressen mitm.it. Da vil du få instruksjoner for å installere sertifikatet på din device. Følg disse nøye. Det innebærer blant annet å installere en nettverksprofil og installere mitm-sertifikatet i telefonen sin keychain.

Når du har gått gjennom alle instruksjonene kan du åpne appen på telefonen se trafikken som blir sendt og mottatt i web-grensesnittet til mitmproxy:

Web-grensesnittet til mitmproxy.
Web-grensesnittet til mitmproxy. Vis mer

På bildet over ser vi at jeg har filtrert ut trafikk til Facebook, og kan se hvilke data som sendes.

I dette tilfellet er det en app der jeg har skrudd på alt av privacy og skrudd av alt som heter “dele data med 3.part”, likevel sendes det altså data til Facebook. Dette kan selvfølgelig skyldes at sdk-et selv sender data når det blir lastet inn i appen.

Certificate pinning

En del av trafikken fra apper kan ikke analyseres.

Dette er fordi noen apper, spesielt de innebygde fra Apple og Google, bruker “certificate pinning”. Det vil si at de kun stoler på et subsett av sertifikater, og ikke alle sertifikater som ligger i keychainen din på telefonen.

Mitmproxy kan dermed ikke dekode trafikken fra disse appene.

Hvis du har appen du lager kjørende i en emulator (Android) eller simulator (iOS) på PC-en din, finnes det andre verktøy som kanskje er lettere å bruke enn mitmproxy:

Wireshark og tcpdump er gode open-source alternativer. Little-snitch er populært på macOS.