此儲存庫包含論文「Terrapin Attack: Breaking SSH Channel Integrity By Sequence Number Manipulation」的工件,該論文已在第 33 屆 USENIX 安全研討會上被接受。
此儲存庫中的程式碼除其他工件外還包含以下 CVE 的概念驗證攻擊代理程式:
這些工件中包含的所有 PoC 和腳本都設計為在 Docker 容器內執行。因此,請確保您擁有最新的 Linux(已測試)或 MacOS / Windows(未經測試)作業系統並安裝了 Docker。為了輕鬆複製論文結果,請參閱scripts
夾中包含的腳本(請參閱上面的儲存庫結構)。
所有腳本都將在--network host
中執行容器,以便在 lo 介面上使用 Wireshark 輕鬆擷取。預設情況下,SSH 伺服器將綁定到連接埠 2200/tcp,而 PoC 腳本將綁定到 2201/tcp。由於 PoC 腳本和 SSH 伺服器綁定到 0.0.0.0,建議斷開系統與網路的連接或正確配置防火牆,以避免向本地網路洩漏不安全的 SSH 服務。
您也可以自行決定建置和執行單獨的 Docker 容器(PoC 和 SSH 實作)。
您可以執行impl/build.sh
和pocs/build.sh
來檢查您的設定。輸出應表明正在使用 Docker 建置評估映像。如果沒有輸出,則所有 docker 映像都已建置。
$ impl/build.sh
[+] Building 2.0s (15/15) FINISHED
[...]
= > = > naming to docker.io/terrapin-artifacts/openssh-server:9.4p1
[...]
$ pocs/build.sh
[...]
攻擊 | 膩子 0.79 | OpenSSH 9.4p1 | OpenSSH 9.5p1 | 掉落熊 2022.83 | 異步SSH 2.13.2 | libssh 0.10.5 |
---|---|---|---|---|---|---|
C1 Rcv增加 | ✅ | - | ✅ | ✅ | ✅ | ✅ |
C1 Rcv減少 | ✅ | - | 右 | ✅ | 時間 | 時間 |
C1 Snd增加 | ✅ | - | 右 | U | 時間 | 時間 |
C1 Snd減少 | ✅ | - | 右 | U | 時間 | 時間 |
C2 ChaCha20-Poly1305 | ✅ | ✅ | ✅ | - | - | - |
C2 CBC-EtM | 0.0300(未知) 0.8383(平) | 0.0003(未知) | 0.0003(未知) 0.0074(平) | - | - | - |
C3 盜賊擴展 | - | - | - | - | ✅ | - |
C4 盜賊會話 | - | - | - | - | ✅ | - |
傳奇:
(E1): scripts/test-sqn-manipulation.sh
- 執行四個序號操縱攻擊之一來證明 (C1)。
(E2a): scripts/test-ext-downgrade.sh
- 執行擴展降級攻擊以證明 ChaCha20-Poly1305 的 (C2)。
預計運行時間:約1分鐘。
執行:啟動腳本後,選擇任意客戶端和伺服器組合。然後,選擇攻擊變體1,選擇ChaCha20-Poly1305。
結果:腳本將透過在less
中同時開啟以下檔案來結束:
diff
diff
導航到第二個文件。該檔案將發生擴充降級攻擊時所選 SSH 用戶端的輸出與未修改連線的輸出進行比較。差異將指示僅在未修改的連接中存在 SSH_MSG_EXT_INFO 和不存在 SSH_MSG_IGNORE,從而證明 (C2) ChaCha20-Poly1305。
(E2b): scripts/bench-ext-downgrade.sh
- 執行擴展降級攻擊 10,000 次以證明 (C2) CBC-EtM(未知和 PING)。
(E3): scripts/test-asyncssh-rogue-ext-negotiation.sh
less
中開啟一組七個檔案來結束。有關開啟的文件列表,請參閱 (E2a) 的結果。導航到第二個文件。差異將表明在被篡改的連接中存在帶有攻擊者選擇的值的 server-sig-algs 擴展,從而證明(C3)。 (E4): scripts/test-asyncssh-rogue-session-attack.sh
less
中開啟一組七個檔案來結束。有關開啟的文件列表,請參閱 (E2a) 的結果。導航到第一個文件。差異將分別表明受害者(未修改的連接)和攻擊者(被篡改的連接)的身份驗證成功。然後,導航到第二個文件並檢查文件末尾每個客戶端連接的輸出。在未修改的連線中,伺服器將使用受害者使用者名稱回應,而在受到攻擊的連線中,伺服器將使用攻擊者使用者名稱回應。這就證明了(C4)。 若要使用 scan_util.py,請透過在scan
資料夾中執行以下命令來建置 docker 容器:
docker build . -t terrapin-artifacts/scan-util
zgrab2 結果文件的評估:
docker run --rm -v ./sample:/files terrapin-artifacts/scan-util evaluate -i /files/sample.json -o /files/sample.acc.json
從 zmap 傳回的 IP 位址清單中刪除被封鎖的 IP 位址:
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
透過刪除連線失敗的條目來整理 zgrab2 結果檔:
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
,它會刪除任何中間結果,並終止和刪除與這些工件相關的任何正在運行的容器。若要在下次執行測試腳本時重建映像,請指定--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
使用以下第三方函式庫: