Repositori ini berisi artefak untuk makalah "Terrapin Attack: Breaking SSH Channel Integrity By Sequence Number Manipulation", yang diterima pada Simposium Keamanan USENIX ke-33.
Kode dalam repositori ini berisi, di antara artefak lainnya, proksi serangan bukti konsep untuk CVE berikut:
Semua PoC dan skrip yang terdapat dalam artefak ini dirancang untuk dijalankan di dalam kontainer Docker. Oleh karena itu, pastikan Anda memiliki sistem operasi Linux (teruji) atau MacOS/Windows (belum teruji) terbaru dengan Docker terinstal. Untuk memudahkan reproduksi hasil makalah lihat skrip yang terdapat dalam folder scripts
(lihat struktur repositori di atas).
Semua skrip akan menjalankan container di --network host
untuk memudahkan pengambilan menggunakan Wireshark pada antarmuka lo. Secara default, server SSH akan mengikat ke port 2200/tcp sedangkan skrip PoC akan mengikat ke 2201/tcp. Karena skrip PoC dan server SSH mengikat 0.0.0.0, disarankan untuk memutuskan sambungan sistem Anda dari jaringan atau mengonfigurasi firewall Anda dengan benar untuk menghindari pengungkapan layanan SSH yang tidak aman ke jaringan lokal Anda.
Anda juga dapat membuat dan menjalankan container Docker individual (implementasi PoC dan SSH) sesuai kebijaksanaan Anda sendiri.
Anda dapat menjalankan impl/build.sh
dan pocs/build.sh
untuk memeriksa pengaturan Anda. Outputnya harus menunjukkan bahwa image evaluasi sedang dibuat menggunakan Docker. Jika tidak ada output, semua image buruh pelabuhan sudah dibuat.
$ impl/build.sh
[+] Building 2.0s (15/15) FINISHED
[...]
= > = > naming to docker.io/terrapin-artifacts/openssh-server:9.4p1
[...]
$ pocs/build.sh
[...]
Menyerang | Dempul 0,79 | OpenSSH 9.4p1 | OpenSSH 9.5p1 | Dropbear 2022.83 | AsyncSSH 2.13.2 | libssh 0.10.5 |
---|---|---|---|---|---|---|
Peningkatan Rcv C1 | ✅ | - | ✅ | ✅ | ✅ | ✅ |
C1 RcvPenurunan | ✅ | - | R | ✅ | T | T |
C1 SndMeningkatkan | ✅ | - | R | kamu | T | T |
C1 SndPenurunan | ✅ | - | R | kamu | T | T |
C2 ChaCha20-Poli1305 | ✅ | ✅ | ✅ | - | - | - |
C2 CBC-EtM | 0,0300 (TIDAK DIKETAHUI) 0,8383 (PING) | 0,0003 (TIDAK DIKETAHUI) | 0,0003 (TIDAK DIKETAHUI) 0,0074 (PING) | - | - | - |
Ekstensi Nakal C3 | - | - | - | - | ✅ | - |
Sesi Nakal C4 | - | - | - | - | ✅ | - |
Legenda:
(E1): scripts/test-sqn-manipulation.sh
- Jalankan salah satu dari empat serangan manipulasi nomor urut untuk membuktikan (C1).
(E2a): scripts/test-ext-downgrade.sh
- Jalankan serangan downgrade ekstensi untuk membuktikan (C2) untuk ChaCha20-Poly1305.
Waktu Proses yang Diharapkan: Sekitar 1 menit.
Eksekusi: Setelah memulai skrip, pilih kombinasi klien dan server yang berubah-ubah. Setelah itu, pilih varian serangan 1 untuk memilih ChaCha20-Poly1305.
Hasil: Script akan diakhiri dengan membuka file-file berikut secara bersamaan dalam less
:
diff
file 3 dan 4diff
file 5 dan 6Arahkan ke file kedua. File tersebut membandingkan keluaran klien SSH yang dipilih jika terjadi serangan penurunan versi ekstensi dengan keluaran koneksi yang tidak dimodifikasi. Perbedaan tersebut akan menunjukkan adanya SSH_MSG_EXT_INFO dan tidak adanya SSH_MSG_IGNORE hanya pada koneksi yang tidak dimodifikasi, sehingga membuktikan (C2) untuk ChaCha20-Poly1305.
(E2b): scripts/bench-ext-downgrade.sh
- Jalankan serangan downgrade ekstensi 10.000 kali untuk membuktikan (C2) untuk CBC-EtM (UNKNOWN dan PING).
(E3): scripts/test-asyncssh-rogue-ext-negotiation.sh
less
. Lihat hasil (E2a) untuk daftar file yang dibuka. Arahkan ke file kedua. Perbedaannya akan menunjukkan keberadaan ekstensi server-sig-algs dengan nilai yang dipilih penyerang dalam koneksi yang dirusak, sehingga membuktikan (C3). (E4): scripts/test-asyncssh-rogue-session-attack.sh
less
. Lihat hasil (E2a) untuk daftar file yang dibuka. Arahkan ke file pertama. Perbedaannya akan menunjukkan otentikasi yang berhasil untuk masing-masing korban (koneksi tidak diubah) dan penyerang (koneksi rusak). Setelah itu, navigasikan ke file kedua dan periksa output dari setiap koneksi klien di akhir file. Pada koneksi yang tidak dimodifikasi, server akan merespons dengan nama pengguna korban, sedangkan pada koneksi yang diserang, server akan merespons dengan nama pengguna penyerang. Hal ini dibuktikan (C4). Untuk menggunakan scan_util.py, buat kontainer buruh pelabuhan dengan menjalankan perintah berikut di dalam folder scan
:
docker build . -t terrapin-artifacts/scan-util
Evaluasi file hasil zgrab2:
docker run --rm -v ./sample:/files terrapin-artifacts/scan-util evaluate -i /files/sample.json -o /files/sample.acc.json
Penghapusan alamat IP yang diblokir dari daftar alamat IP yang dikembalikan oleh zmap:
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
Merapikan file hasil zgrab2 dengan menghapus entri dengan kegagalan koneksi:
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
yang menghapus semua hasil antara dan menghentikan serta menghapus semua container berjalan yang terkait dengan artefak ini. Untuk membangun kembali gambar pada eksekusi skrip pengujian berikutnya, tentukan tanda --full
. .
├── 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
Perpustakaan pihak ketiga berikut digunakan: