# Ein-Klick-Paketmitschnitt

Die Ein-Klick-Man-in-the-Middle-Paketmitschnitt-Funktion startet vollautomatisch einen globalen Man-in-the-Middle-Proxy auf dem Gerät. Der **Unterschied zu den von Ihnen üblicherweise verwendeten Tools** besteht darin, dass Sie sich nicht um Probleme wie die **Zertifikatsinstallation** und die **Proxy-Einrichtung** kümmern müssen und auch nicht über unterschiedliche Mitschnittmethoden für verschiedene Systemversionen nachdenken müssen. Es funktioniert nahtlos mit Android 6.0 - 14. Wir haben bereits alles für Sie erledigt, sodass Sie sich nur noch auf Ihre eigentliche Aufgabe konzentrieren müssen.
Zudem werden die Echtzeit-Modifikation und das Abfangen von Paketen unterstützt, was es im Vergleich zu herkömmlichen GUI-Programmen besser für den praktischen Einsatz in Ihrem Geschäftsbetrieb geeignet macht, anstatt nur zum "mal schnell Pakete anzusehen".

Darüber hinaus können wir Ihnen garantieren, dass **keine Pakete übersehen werden** (mit Ausnahme von Certificate Pinning), und die Erfolgsrate beim Mitschneiden ist höher als bei herkömmlichen Softwaremethoden. Sie können den HTTP/S-Traffic von Anwendungen abfangen. Der Man-in-the-Middle-Proxy wird automatisch aktiviert und deaktiviert. Nach dem Beenden des Skripts werden das Gerät und das Netzwerk in ihren ursprünglichen Zustand zurückversetzt; Sie müssen keine weiteren Einstellungen vornehmen. Das Skript unterstützt auch **internationales** Mitschneiden (realisiert durch einen Upstream-Proxy), sodass Sie problemlos Daten von ausländischer Software erfassen können.

```{attention}
Unabhängig davon, welches Betriebssystem Sie verwenden, deaktivieren Sie bitte vorübergehend Ihre **Netzwerk-Firewall** vollständig, bevor Sie mit dem Mitschneiden beginnen, um einen reibungslosen und fehlerfreien Ablauf zu gewährleisten.
```

## Vorbereitung

Stellen Sie zunächst sicher, dass sich der Computer und das Gerät im selben Netzwerksegment befinden oder über eine USB-Verbindung verbunden sind. Im Folgenden gehen wir davon aus, dass 192.168.0.2 die IP-Adresse des Mobilgeräts ist, auf dem FIRERPA ausgeführt wird. Stellen Sie außerdem sicher, dass Sie den Code des Projekts ordnungsgemäß geklont und die erforderlichen Abhängigkeiten installiert haben. Überprüfen Sie in der Kommandozeile, ob mitmproxy erfolgreich installiert wurde (kann durch Eingabe von `mitmdump` in der Kommandozeile überprüft werden).

Wenn Sie kein Python installiert haben oder mit dem Klonen von Repositories und der Installation von Abhängigkeiten nicht vertraut sind, können Sie `startmitm.exe` von unserer Release-Seite herunterladen. Dies ist eine gepackte Version von startmitm.py, mit der Sie den Paketmitschnitt ohne Python-Installation durchführen können. Es handelt sich um ein Konsolenprogramm, und die Befehlsparameter sind identisch mit denen von `startmitm.py` (Diese Datei kann von Antivirenprogrammen als schädlich eingestuft werden. Die Verwendung erfolgt auf eigene Gefahr).

## Grundlegender Paketmitschnitt

```{hint}
Die Anwendung, deren Pakete Sie mitschneiden möchten, verwendet möglicherweise SSL-PINNING (Certificate Pinning) oder das QUIC-Protokoll. Beide Fälle können die Effektivität des Mitschnitts beeinträchtigen. Wir erzwingen automatisch ein Downgrade von QUIC. Aufgrund einer möglichen Fallback-Zeit kann es jedoch vorkommen, dass die Anwendung eine sehr langsame Netzwerkverbindung aufweist. Bitte warten Sie einen Moment. Anwendungen mit Certificate Pinning können nicht direkt mitgeschnitten werden. Sie müssen ein Frida-Skript mittels Reverse Engineering schreiben, um die SSL-PINNING-Logik zu umgehen.
```

Mit dem folgenden Befehl können Sie schnell einen Paketmitschnitt starten. Dies ist die einfachste Verwendungsmethode.

```bash
python3 -u startmitm.py 192.168.0.2
```

```{important}
**Denken Sie unbedingt daran, nach Ausführung des startmitm-Befehls die zu analysierende App vollständig zu schließen und neu zu starten. Das Schließen der App aus der Übersicht der letzten Apps ist keine zuverlässige Methode. Bitte verwenden Sie die API zum Schließen oder den Befehl `kill -9` für alle zugehörigen PIDs der Anwendung, da der Mitschnitt sonst nicht korrekt funktioniert.**
```

Drücken Sie einmal die Tastenkombination `STRG` + `C`, um den Mitschnitt zu beenden. Bitte drücken Sie die Tasten nicht mehrmals hintereinander.

## Gemeinsamer Paketmitschnitt

Wenn Sie die Analyse gemeinsam mit Kollegen im selben LAN durchführen möchten, führen Sie den folgenden Befehl aus. Ihre Kollegen können dann in ihrem Browser `http://IHRE_IP_ADRESSE:7890` öffnen, um dieselbe Mitschnitt-Weboberfläche zu sehen wie Sie. So können Sie gemeinsam analysieren.

```bash
python3 -u startmitm.py 192.168.0.2 --web-port 7890 --web-host 0.0.0.0
```

## Spezifische Anwendung

Wenn Sie den Traffic einer bestimmten Anwendung anstelle des gesamten System-Traffics abfangen möchten, können Sie dies tun, indem Sie `:Paketname` an die IP-Adresse anhängen, um die Daten einer bestimmten Anwendung zu erfassen. Das folgende Beispiel fängt nur den Traffic von `com.some.package` ab.

```bash
python3 -u startmitm.py 192.168.0.2:com.some.package
```

## Echtzeit-Modifikation

Sie können Anfragedaten und Antwortdaten von Anwendungen in Echtzeit ändern. Diese Funktion basiert auf den Event-Hooks von mitmproxy. Sie müssen selbst ein Hook-Skript unter Verwendung der entsprechenden mitmproxy-API schreiben. Informationen zum Schreiben von Hook-Skripten finden Sie in der offiziellen Dokumentation von mitmproxy unter [docs.mitmproxy.org/stable/addons-examples](https://docs.mitmproxy.org/stable/addons-examples/) sowie in den Codebeispielen unter [mitmproxy/examples/contrib](https://github.com/mitmproxy/mitmproxy/tree/9.0.0/examples/contrib).

Angenommen, Ihr geschriebenes Hook-Skript heißt `http_flow_hook.py`, verwenden Sie den folgenden Befehl, um es anzuwenden.

```bash
python3 -u startmitm.py 192.168.0.2 -s http_flow_hook.py
```

## Unterschiedliche Netzwerke

Wenn sich Ihr Mobiltelefon und Ihr Computer nicht im selben Netzwerk befinden, Sie aber physischen Zugriff auf das Gerät haben, können Sie den Paketmitschnitt auch über USB-ADB durchführen. Stellen Sie sicher, dass das Gerät über USB-ADB mit dem Computer verbunden und korrekt autorisiert ist.


Wenn nur ein ADB-Gerät mit dem Computer verbunden ist, verwenden Sie den folgenden Befehl für den Mitschnitt. `localhost` steht hierbei für das ADB-Gerät.

```bash
python3 -u startmitm.py localhost
```

Wenn mehrere ADB-Geräte mit dem Computer verbunden sind, müssen Sie die ADB-Seriennummer angeben. Diese finden Sie in der Ausgabe des Befehls `adb devices`.

```bash
python3 -u startmitm.py localhost --serial bfde362
```

Wenn Ihre Umgebung noch restriktiver ist, z. B. wenn sich das Mobiltelefon und der Computer weder im selben Netzwerk befinden noch ein physischer Kontakt möglich ist, Sie aber auf den FIRERPA-Port zugreifen können, ist ein Man-in-the-Middle-Angriff dennoch möglich. Dies ist typischerweise der Fall, wenn Sie den integrierten frp-Dienst verwenden, um FIRERPA an einen Remote-Server weiterzuleiten, oder wenn Sie den Port 65000 von FIRERPA auf andere Weise an einen anderen Ort weitergeleitet haben. In diesem Szenario können Sie und FIRERPA nur über diesen einen Port direkt kommunizieren, während andere Ports nicht gegenseitig erreichbar sind. Unter diesen Umständen kann das Mobiltelefon auf keinen Port des lokalen Computers zugreifen, und der lokale Computer kann nur auf den FIRERPA-Port des Mobiltelefons zugreifen (oder das Mobiltelefon hat eine öffentliche IP, aber der Computer befindet sich in einem privaten Netzwerk). In diesem Fall müssen Sie wie folgt vorgehen. (Ein über OpenVPN verbundenes Netzwerk fällt nicht unter diese Kategorie).

Hierfür ist eine Kombination von Schritten erforderlich. Installieren Sie zunächst Ihren eigenen öffentlichen ADB-Schlüssel auf dem Gerät, indem Sie `adb_pubkey.py` verwenden oder die Schnittstelle direkt aufrufen. Führen Sie nach der Installation die folgenden Schritte aus, wobei `x.x.x.x` die IP-Adresse oder `127.0.0.1` ist, über die der Port 65000 erreichbar ist. Passen Sie dies entsprechend Ihrer Situation an.

```bash
adb connect x.x.x.x:65000
```

Führen Sie abschließend den Paketmitschnitt wie oben beschrieben über die USB-Methode durch.

```bash
python3 -u startmitm.py localhost
```

Oder auf diese Weise, wobei die `serial` hier die `adb connect`-Adresse und nicht die hexadezimale Seriennummer ist.

```bash
python3 -u startmitm.py localhost --serial x.x.x.x:65000
```

## Upstream-Proxy / Internationaler Paketmitschnitt

startmitm startet selbst mitmproxy als Proxy-Dienst. Standardmäßig wird der Traffic von mitmproxy über die Netzwerkschnittstelle des lokalen Computers gesendet. Wenn der Traffic stattdessen über einen Upstream-Proxy geleitet werden soll, können Sie diesen wie folgt angeben. Es werden nur Proxys unterstützt, die das **HTTP**-Protokoll verwenden. Gleichzeitig müssen Sie einen Upstream-DNS angeben, der TCP-Abfragen unterstützt, um DNS-Poisoning zu vermeiden.

```{tip}
Der Upstream-Proxy-Modus erfordert mitmproxy Version >= 9.0.0 (und Python >= 3.9).
```

```bash
python3 -u startmitm.py 192.168.0.2 --upstream http://127.0.0.1:7890 --proxy-dns 8.8.8.8
```

Wenn der Upstream-HTTP-Proxy eine Authentifizierung erfordert, verwenden Sie den folgenden Befehl und ersetzen Sie `USER:PASSWORD`.

```bash
python3 -u startmitm.py 192.168.0.2 --upstream http://USER:PASSWORD@x.x.x.x:8080 --proxy-dns 8.8.8.8
```

Alle oben genannten Befehle leiten den Traffic des Geräts über den Upstream-Proxy und senden alle DNS-Abfragen des lokalen Computers über den Proxy an 8.8.8.8.