mitmproxy – App Verkehr mitschneiden

1. Welche Informationen schicken Apps?mitmproxy

Apps sind kleine putzige Programme, die einem Smartphone User das Leben »vereinfachen« sollen. Auf diversen Marktplätzen, wie den App Store oder Google Play Store werden sie euch angeboten. Bunte Bildchen mit Funktionsbeschreibung und Rezensionen sollen dem Anwender die Auswahl erleichtern. Laut einer Statistik vom 12. Juni 2012 bietet allein der App Store über 650.000 Apps an – Tendenz stetig steigend.

In der Artikelserie »Datenschutz für Android« hatte ich bereits aufgezeigt, wie sich Unternehmen ungeniert Zugriff auf die persönlichen Daten der Anwender verschaffen. Adressen, Kontakte oder aktuelle GPS-Koordinaten werden auf fremde Server übermittelt und dort ausgewertet. Eine Art »Selbstbedienungsladen«, da die Informationen nicht selten ohne jeglichen Hinweis übertragen werden.

Mit dem Tool mitmproxy zeige ich euch einen Weg, die »Datensammler« zu entlarven. Damit kann jeder prüfen, welche Verbindungen eine App aufbaut und wohin die Daten gesendet werden.

2. mitmproxy Vorstellung

Das Tool mitmproxy (man in the middle proxy) simuliert einen Proxy, über den jeglicher HTTP / HTTPS Verkehr geschleust wird. Als eine Art »Mittelsmann« nimmt das Tool die App-Anfragen entgegen und leitet sie als Stellvertreter an die Gegenstelle im Internet weiter.

Zunächst muss das Tool installiert werden. Im Folgenden beschreibe ich die Installation auf Mac OS X (Mountain Lion). Die Beschreibung lässt sich nahezu identisch auf Linux übertragen. Für Windows steht das Tool nicht zur Verfügung und müsste über Cygwin in das System eingebunden werden. Eine Alternative für Windows stellt Charles oder die Burp Suite dar. Beide Programme bieten den Funktionsumfang von mitmproxy und werden in der Praxis oftmals für Penetrationstests eingesetzt.

Der Kuketz-Blog ist spendenfinanziert!

Unabhängig. Kritisch. Informativ. Praxisnah. Verständlich.

Die Arbeit von kuketz-blog.de wird vollständig durch Spenden unserer Leserschaft finanziert. Sei Teil unserer Community und unterstütze unsere Arbeit mit einer Spende.

Mitmachen ➡

2.1 Installation

Wichtigste Voraussetzung ist der gcc Compiler. Dazu muss entweder Xcode installiert werden (kostenlos im Mac App Store erhältlich) oder man lädt sich die »Command Line Tools For Xcode« herunter. Der Vorteil im Vergleich zu Xcode ist die geringe Größe. Dazu ist allerdings ein kostenloser Apple Developer Account notwendig. Wem das nicht schmeckt, installiert sich Xcode aus dem App Store.

Anschließend geht es in die Konsole, um pip zu installieren. Ein kleines Helferprogramm, dass Python Pakete installiert und Abhängigkeiten auflöst.

sudo easy_install pip

Mit Hilfe von pip wird im Anschluss mitmproxy installiert.

sudo pip install mitmproxy

Für verwöhnte Mac OS X Anwender reichen also zwei Befehle auf der Konsole aus, um das Tool zu installieren.

2.2 Konfiguration

mitmproxy bedarf keiner Konfiguration. Das Tool ist direkt einsatzbereit. Bevor man mit dem App-Sniffing beginnt, sollte noch ein SSL-Zertifikat auf dem Smartphone eingebunden werden. Ansonsten können SSL (HTTPS) verschlüsselte Verbindungen nicht abgehört werden.

Der mitmproxy erzeugt beim ersten Starten unter ~/.mitmproxy ein SSL-Zertifikat, das im Anschluss im Smartphone eingebunden werden muss.

mitmproxy

Das generierte Zertifikat findet ihr unter /Users/EuerUsername/.mitmproxy

iPhone Zertifikat Import:
Das erstellte Zertifikat (mitmproxy-ca-cert.pem) schickt ihr per E-Mail an euer iPhone und bestätigt dort die Installation. Nach diesem Schritt kann sämtlicher HTTPS-Verkehr eingesehen werden.

Android Zertifikat Import: (ab Android 4.x)
Für Android müsst ihr die Datei mitmproxy-ca-cert.cer auf die SD-Karte in den Ordner /sdcard/Downloads kopieren. Anschließend muss das Zertifikat installiert werden. Der Vorgang kann von dem beschrieben abweichen.

Settings -> Security -> Credential Storage und dort wählen: »Install from storage«.

Das Zertifikat wird anschließend automatisch auf der SD-Karte lokalisiert und für die Installation angeboten.

2.2 Smartphone Proxy-Einstellungen

mitmproxy kann eure Verbindungen natürlich nur dann mitsniffen, wenn ihr euren Netzwerkverkehr auf den Proxy umleitet. Also müsst ihr euer Smartphone entsprechend anpassen und euch im gleichen WLAN wie euer Sniffing-Rechner befinden.

iPhone:
Öffnet die »Einstellungen« und selektiert »WLAN«. Dort tippt ihr bei eurem WLAN auf den blauen Pfeil am rechten Rand. Scrollt herunter und stellt den HTTP-Proxy auf »Manuell«.
Dann tragt ihr folgendes ein:

  • Server: Die IP-Adresse eures Rechners auf dem mitmproxy läuft
  • Port: 8888
  • Authentifizierung: Aus

Android:

Bei Android ist dies etwas komplizierter, da es bis vor kurzem keine globalen Proxy Einstellungen gab. Apps behalfen sich mit rudimentären Mechanismen, um diesen Umstand zu umgehen. Als Konsequenz ignorieren viele Apps die neu eingeführten globalen Proxy Einstellungen.

Abhilfe schafft das Tool ProxyDroid (nicht mehr verfügbar). Installiert es euch (Root-Modus) und konfiguriert es folgendermaßen:

  • Host: Die IP-Adresse eures Rechners auf dem mitmproxy läuft
  • Port: 8888
  • Proxy Type: HTTP

3. Horch was kommt von innen raus…

Nach der Installation und Smartphone Einrichtung ist es nun endlich an der Zeit den App-Verkehr mitzunscheiden. Für diesen Zweck habe ich mir WhatsApp ausgesucht. Mittlerweile tauscht der Messenger Nachrichten verschlüsselt aus. Ich wollte dennoch wissen, was alles übertragen wird – vor allem beim Verbindungsaufbau.

Startet dazu auf eurem Macbook oder Linux Rechner mitmproxy aus der Konsole.

iPhone:

mitmproxy -p 8888

Android:

mitmproxy -p 8888 --upstream-cert

3.1 Beispiel WhatsApp

Nach dem Start von WhatsApp werden die Datenströme in der Konsole angezeigt. Bereits die dritte Verbindung zu Whatsapp ist ein recht großes Paket. Allerdings werden keine Daten abgefragt, sondern gesendet. Schauen wir uns das etwas genauer an…

Post

Mit den Cursortasten (hoch / runter) könnt ihr einzelne Übertragungen ansteuern und mit »Return« weitere Details aufrufen.

Request

Im oberen Teil des Fensters steht der Request. Wir sehen den Host, den User-Agent und weitere Informationen. Unter anderem auch den Authentifizierungstoken (Telefonnummer).

Interessanter ist dann der Datenteil bzw. die »Form«, die an den Host sro.whatsapp.net übertragen wird.

URLForm

Mein komplettes Adressbuch wird übertragen – also alle Telefonnummern. Gefragt bzw. gewarnt werde ich vor dessen Übertragung allerdings nicht. Anders würde WhatsApp allerdings auch nicht funktionieren. Ein Client wird über seine Telefonnummer identifiziert bzw. authentifiziert. WhatsApp hat also alle Telefonnummern – auch von Usern die WhatsApp eigentlich gar nicht nutzen und sich nie beim Dienst registriert haben. Hinsichtlich des Datenschutzes stellt diese Praktik einen groben Verstoß dar.

4. Fazit

Der Anwender hat schlichtweg keine Kontrolle welche Daten eine App abgreift. Für iOS 6 hat Apple diesbezüglich Besserung versprochen.

Auf Android existieren diverse Tools, die den User vor dem Zugriff auf seine privaten Daten schützen. Dazu zählt beispielsweise XPrivacy. Wer die »ultimative« Kontrolle und Herrschaft über sein Android-Smartphone zurückerlangen möchte, sollte sich die Artikelserie »Your phone Your data« anschauen.

Über den Autor | Kuketz

Mike Kuketz

In meiner freiberuflichen Tätigkeit als Pentester / Sicherheitsforscher (Kuketz IT-Security) schlüpfe ich in die Rolle eines »Hackers« und suche nach Schwachstellen in IT-Systemen, Webanwendungen und Apps (Android, iOS). Des Weiteren bin ich Lehrbeauftragter für IT-Sicherheit an der Dualen Hochschule Karlsruhe, sensibilisiere Menschen in Workshops und Schulungen für Sicherheit und Datenschutz und bin unter anderem auch als Autor für die Computerzeitschrift c’t tätig.

Der Kuketz-Blog bzw. meine Person ist regelmäßig in den Medien (heise online, Spiegel Online, Süddeutsche Zeitung etc.) präsent.

Mehr Erfahren ➡

SpendeUnterstützen

Die Arbeit von kuketz-blog.de wird zu 100% durch Spenden unserer Leserinnen und Leser finanziert. Werde Teil dieser Community und unterstütze auch du unsere Arbeit mit deiner Spende.

Folge dem Blog

Wenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:

Bleib aktuell ➡


Diskussion

7 Ergänzungen zu “mitmproxy – App Verkehr mitschneiden”

  1. Comment Avatar Henning sagt:

    Hallo,

    schönes Tutorial und genau das, was ich mir gestern in den Kopf gesetzt hatte.
    Mein Plan war es Whatsapp auf Herz und Nieren zu prüfen und versuchen einen eigenen Client zu schreiben. Das Problem ist aber, dass genau Whatsapp nicht auf den eingestellten Proxy mithilfe von ProxyDroid reagiert.
    Habe es sowohl unter Windows mit Fiddler als auch unter Ubuntu mit dem hier vorgestellten mitmproxy versucht. Aber Whatsapp schafft es irgendwie sich aus der Affäre zu ziehen. Jede Anfrage von Apps wird aufgeführt, nur Whatsapp funktioniert zwar tadellos, aber geht nicht durch den Proxy.
    Hast du eine Idee, woran das liegen kann? Der Artikel ist ja gerade mal zwei Tage alt, aber das letzte Update von Whatsapp ist bei mir vom 30.07. Welche Version von Whatsapp kam bei dem Versuch zum Einsatz?

    mfG Henning

  2. Comment Avatar Mike Kuketz sagt:

    Hallo Henning,

    ich kenne das Problem. ;)
    Im Artikel davor (https://www.kuketz-blog.de/whatsapp-nachrichten-verschluesselt-der-praxistest/) habe ich untersucht, ob Whatsapp seine Nachrichten verschlüsselt sendet. Dabei ist mir aufgefallen, dass Whatsapp verschiedene Ports zur Kommunikation verwendet.

    Wenn du die App vollständig beendest und anschließend wieder startest handelt die App zunächst den Port aus, über den die Kommunikation im Anschluss läuft.

    Mögliche Ports sind 5222 oder 443 und weitere. Wenn du „Glück“ hast, dann nimmt Whatsapp zum Austausch den Port 443. Da der Proxy nur Verbindungen auf Port 443 überwacht, siehst du nur dann die Kommunikation. Andere Ports außer 80 oder 443 werden vom Proxy nicht verarbeitet.

    Wenn du auch andere Ports „sehen“ willst, dann musst du mitsniffen und zwar mit härteren Bandagen. Dazu eigent sich dann Wireshark mit einer WLAN fähigen Netzwerkkarte, die den Monitor Mode unterstützt. Das Tutorial hier war allgemein für Apps gedacht. Die meisten verwenden auch Port 80 sprich 443. Es gibt aber immer Ausnahmen, wozu Whatsapp zählt.

    • Comment Avatar Henning sagt:

      Hallo nochmal,

      ok, das erklärt einiges. Leider habe ich noch keine WLAN-Karte in meinem Desktop und mein Netbook ist sowieso schon im Normalbetrieb überfordert.
      Was ich mich jetzt noch frage: Wenn ich den gesamten Verkehr des Handys über die WLAN-Karte route, muss ich ja trotzdem noch eine Zertifizierungsstelle einrichten um den SSL-Verkehr lesen zu können, so wie mitmproxy das macht. Gibts dafür ein universelles Tool, dass halt nicht nur für die HTTP-Ports ausgerichtet ist?

  3. Comment Avatar Mike Kuketz sagt:

    Hallo Henning,

    sowas geht zb. mit ettercap: https://de.wikipedia.org/wiki/Ettercap

    Ettercap „snifft“ alles, wenn du dich damit zwischen iPhone und Internet hängst. Da müsstest du dann auch noch ein Zertifikat importieren.
    Die mitgesnifften Pakete kannst du dir dann in aller Ruhe mit Wireshark https://www.wireshark.org/ anschauen.

  4. Comment Avatar Markus sagt:

    Hallo Mike

    mit grossem Interesse verfolge ich deinen Blog, vielen Dank dafür. Ich habe nun auf meinem Linux Mint Laptop mitmproxy 0.10.1 und auf dem Smartphone ProxyDroid installiert. Auf dem Smartphone werkelt ein Slimrom bzw. SlimKat, also ein Android in der Version 4.4.2.

    Die Verbindung zwischen Laptop und Smartphone besteht, ich kann den HTTP/HTTPS Traffic von Browser-Aktivitäten aus dem Smartphone abfangen. Was mir nicht möglich ist, ist den Traffic der gesprächigen Apps abzufangen. AFWall+ sagt mit klar und deutlich welche App nach Hause telefonieren möchte z. B. die Taschenlampe. Aber genau diesen App-Traffic kann ich nicht abfangen. Getestet habe ich das mit dem Port 8080 und 8888 so wie in deinem Blog.

    Hast du noch weiter Einstellungen vorgenommen oder einen Tipp wie ich den Apps die „wirklich interessanten“ Informationen entlocken kann. Schon einmal vielen Dank

    Gruss
    Markus

    • Comment Avatar Mike Kuketz sagt:

      Hallo Markus,

      eine Ferndiagnose ist jetzt schwierig, aber ich vermute mal, dass die Apps nicht durch den Proxy getunnelt werden.

      Mögliche Fehler:
      – Keine Root-Rechte auf dem Gerät bzw. für ProxyDroid
      – ProxyDroid nicht korrekt konfiguriert
      – Android 4.4.2 ist nicht kompatibel mit ProxyDroid

      Gruß Mike

  5. Comment Avatar Markus sagt:

    Hallo Mike

    Vielen Dank für deine Rückmeldung. Deiner Vermutung schliesse ich mich an. Bei dem Mitschnitt mit mimtproxy bekomme ich nur GET jedoch keine POST-Informationen, siehe deine Screenshot oben.

    Zu deinen möglichen Fehlern:
    – Root-Rechte sind dauerhaft für ProxyDroid erteilt
    – ProyxDroid ist korrekt konfiguriert

    Habe bereits ein Downgrade auf Android 4.3 gemacht, leider mit dem selben Ergebnis. AFWall habe ich auch deaktiviert.

    Über weitere Tipps freue ich mich. Werde auch am Ball beleiben, da es mich weiterhin interessiert was für Daten von meinem Smartphone ohne mein Wissen versenet wird.

    Grüsse
    Makrus

HilfeWenn du konkrete Fragen hast oder Hilfe benötigst, sind das offizielle Forum oder der Chat geeignete Anlaufstellen, um dein Anliegen zu diskutieren. Per E-Mail beantworte ich grundsätzlich keine (Support-)Anfragen – dazu fehlt mir einfach die Zeit. Kuketz-Forum

Abschließender Hinweis

Blog-Beiträge erheben nicht den Anspruch auf ständige Aktualität und Richtigkeit wie Lexikoneinträge (z.B. Wikipedia), sondern beziehen sich wie Zeitungsartikel auf den Informationsstand zum Zeitpunkt des Redaktionsschlusses.

Kritik, Anregungen oder Korrekturvorschläge zu den Beiträgen nehme ich gerne per E-Mail entgegen.