Dieses Repository enthält Artefakte für den Aufsatz „Terrapin Attack: Breaking SSH Channel Integrity By Sequence Number Manipulation“, der beim 33. USENIX Security Symposium angenommen wurde.
Der Code in diesem Repository enthält neben anderen Artefakten Proof-of-Concept-Angriffs-Proxys für die folgenden CVEs:
Alle in diesen Artefakten enthaltenen PoCs und Skripte sind für die Ausführung in Docker-Containern konzipiert. Stellen Sie daher sicher, dass Sie über ein aktuelles Linux- (getestet) oder MacOS/Windows-Betriebssystem (ungetestet) mit installiertem Docker verfügen. Für eine einfache Reproduktion der Papierergebnisse nutzen Sie die im scripts
enthaltenen Skripte (siehe Repository-Struktur oben).
Alle Skripte führen die Container im --network host
aus, um eine einfache Erfassung mit Wireshark auf der lo-Schnittstelle zu ermöglichen. Standardmäßig binden SSH-Server an Port 2200/tcp, während PoC-Skripte an 2201/tcp binden. Da PoC-Skripte und SSH-Server an 0.0.0.0 binden, wird empfohlen, Ihr System vom Netzwerk zu trennen oder Ihre Firewall ordnungsgemäß zu konfigurieren, um zu verhindern, dass unsichere SSH-Dienste Ihrem lokalen Netzwerk offengelegt werden.
Sie können nach eigenem Ermessen auch einzelne Docker-Container (PoC- und SSH-Implementierungen) erstellen und ausführen.
Sie können impl/build.sh
und pocs/build.sh
ausführen, um Ihr Setup zu überprüfen. Die Ausgabe sollte darauf hinweisen, dass die Evaluierungsbilder mit Docker erstellt werden. Erfolgt keine Ausgabe, sind alle Docker-Images bereits erstellt.
$ impl/build.sh
[+] Building 2.0s (15/15) FINISHED
[...]
= > = > naming to docker.io/terrapin-artifacts/openssh-server:9.4p1
[...]
$ pocs/build.sh
[...]
Angriff | Kitt 0,79 | OpenSSH 9.4p1 | OpenSSH 9.5p1 | Dropbear 2022.83 | AsyncSSH 2.13.2 | libssh 0.10.5 |
---|---|---|---|---|---|---|
C1 RcvIncrease | ✅ | - | ✅ | ✅ | ✅ | ✅ |
C1 RcvDecrease | ✅ | - | R | ✅ | T | T |
C1 SndIncrease | ✅ | - | R | U | T | T |
C1 SndDecrease | ✅ | - | R | U | T | T |
C2 ChaCha20-Poly1305 | ✅ | ✅ | ✅ | - | - | - |
C2 CBC-EtM | 0,0300 (UNBEKANNT) 0,8383 (PING) | 0,0003 (UNBEKANNT) | 0,0003 (UNBEKANNT) 0,0074 (PING) | - | - | - |
C3 Rogue-Erweiterung | - | - | - | - | ✅ | - |
C4-Rogue-Sitzung | - | - | - | - | ✅ | - |
Legende:
(E1): scripts/test-sqn-manipulation.sh
– Führen Sie einen der vier Sequenznummernmanipulationsangriffe aus, um (C1) zu beweisen.
(E2a): scripts/test-ext-downgrade.sh
– Führen Sie den Erweiterungs-Downgrade-Angriff aus, um (C2) für ChaCha20-Poly1305 zu beweisen.
Erwartete Laufzeit: Etwa 1 Minute.
Ausführung: Wählen Sie nach dem Starten des Skripts eine beliebige Client- und Serverkombination. Wählen Sie anschließend Angriffsvariante 1, um ChaCha20-Poly1305 auszuwählen.
Ergebnisse: Das Skript schließt mit dem gleichzeitigen Öffnen der folgenden Dateien in less
:
diff
der Dateien 3 und 4diff
der Dateien 5 und 6Navigieren Sie zur zweiten Datei. Die Datei vergleicht die Ausgabe des ausgewählten SSH-Clients im Falle eines Erweiterungs-Downgrade-Angriffs mit der Ausgabe einer unveränderten Verbindung. Der Diff zeigt das Vorhandensein von SSH_MSG_EXT_INFO und das Fehlen von SSH_MSG_IGNORE nur in der unveränderten Verbindung an und beweist somit (C2) für ChaCha20-Poly1305.
(E2b): scripts/bench-ext-downgrade.sh
– Führen Sie den Erweiterungs-Downgrade-Angriff 10.000 Mal aus, um (C2) für CBC-EtM (UNBEKANNT und PING) zu beweisen.
(E3): scripts/test-asyncssh-rogue-ext-negotiation.sh
less
ab. Eine Liste der geöffneten Dateien finden Sie in den Ergebnissen von (E2a). Navigieren Sie zur zweiten Datei. Der Diff zeigt das Vorhandensein der server-sig-algs-Erweiterung mit einem vom Angreifer gewählten Wert in der manipulierten Verbindung an und beweist damit (C3). (E4): scripts/test-asyncssh-rogue-session-attack.sh
less
ab. Eine Liste der geöffneten Dateien finden Sie in den Ergebnissen von (E2a). Navigieren Sie zur ersten Datei. Der Unterschied zeigt eine erfolgreiche Authentifizierung für das Opfer (unveränderte Verbindung) bzw. den Angreifer (manipulierte Verbindung) an. Navigieren Sie anschließend zur zweiten Datei und überprüfen Sie die Ausgabe jeder Clientverbindung am Ende der Datei. Bei der unveränderten Verbindung antwortet der Server mit dem Benutzernamen des Opfers, während der Server bei der angegriffenen Verbindung mit dem Benutzernamen des Angreifers antwortet. Dies beweist (C4). Um scan_util.py zu verwenden, erstellen Sie den Docker-Container, indem Sie den folgenden Befehl im scan
Ordner ausführen:
docker build . -t terrapin-artifacts/scan-util
Auswertung einer zgrab2-Ergebnisdatei:
docker run --rm -v ./sample:/files terrapin-artifacts/scan-util evaluate -i /files/sample.json -o /files/sample.acc.json
Entfernen blockierter IP-Adressen aus einer Liste von IP-Adressen, die von zmap zurückgegeben werden:
docker run --rm -v ./sample:/files terrapin-artifacts/scan-util filter-blocked-ips -i /files/zmap.csv -o /files/zmap-filtered.csv -b /files/blocklist.txt
Bereinigen der zgrab2-Ergebnisdatei durch Entfernen von Einträgen mit Verbindungsfehlern:
docker run --rm -v ./sample:/files terrapin-artifacts/scan-util tidy-zgrab2 -i /files/sample.json -o /files/sample-clean.json
scripts/cleanup-system.sh
aus, das alle Zwischenergebnisse entfernt und alle laufenden Container im Zusammenhang mit diesen Artefakten beendet und entfernt. Um die Bilder bei der nächsten Ausführung eines Testskripts neu zu erstellen, geben Sie das Flag --full
an. .
├── impl
│ ├── asyncssh # AsyncSSH 2.13.2 (client / server) Dockerfile and additional files
│ ├── dropbear # Dropbear 2022.83 (client / server) Dockerfile and additional files
│ ├── libssh # libssh 0.10.5 (client / server) Dockerfile and additional files
│ ├── openssh # OpenSSH 9.4p1 / 9.5p1 (client / server) Dockerfile and additional files
│ ├── putty # PuTTY 0.79 (client only) Dockerfile and additional files
│ └── build.sh # Script to build all required implementation Docker images for reproducing our results
├── pocs # Proof of concept scripts
│ ├── sqn-manipulations # Scripts related to sequence number manipulation (section 4.1)
│ ├── ext-downgrade # Scripts related to the extension downgrade attack (section 5.2)
│ ├── asyncssh # Scripts related to AsyncSSH vulnerabilities (section 6)
│ ├── Dockerfile # Multistage Dockerfile to build PoC docker images
│ └── build.sh # Script to build all required PoC Docker images for reproducing our results
├── scan # Files related to the internet-wide scan conducted
│ ├── paper # Directory containing the aggregated scan data referenced in the final version of the paper
│ ├── sample # Directory containing an anonymized zgrab2 ssh results sample to use with scan_util.py
│ ├── scan_util.py # Utility script for aggregating zgrab2 ssh results
│ ├── requirements.txt # pip requirements file for scan_util.py
│ └── Dockerfile # Dockerfile to build a docker image running scan_util.py
├── scripts # Scripts for easier reproduction of our results presented in the paper
│ ├── bench-ext-downgrade.sh # Benchmark script to evaluate the success rate of the CBC-EtM variant of the extension downgrade attack
│ ├── cleanup-system.sh # A cleanup script which can be used to containers and images related to these artifacts
│ ├── start-wireshark.sh # A convenience script to start Wireshark capturing on lo interface with SSH decoding and display filter
│ ├── test-asyncssh-rogue-ext-negotiation.sh
│ │ # Test script for the AsyncSSH-specific rogue extension negotiation attack (section 6.1 / figure 6)
│ ├── test-asnycssh-rogue-session-attack.sh
│ │ # Test script for the AsyncSSH-specific rogue session attack (section 6.2 / figure 7)
│ ├── test-ext-downgrade.sh # Test script for the extension downgrade attack (section 5.2 / figure 5)
│ └── test-sqn-manipulation.sh # Test script for sequence number manipulation (section 4.1)
├── traces # PCAP traces of the PoC scripts
├── LICENSE
└── README.md
Die folgenden Bibliotheken von Drittanbietern werden verwendet: