このリポジトリには、第 33 回 USENIX セキュリティ シンポジウムで採択された論文「Terrapin Attack: Breaking SSH Channel Integrity By Sequence Number Manipulation」のアーティファクトが含まれています。
このリポジトリのコードには、他のアーティファクトの中でも、次の CVE の概念実証攻撃プロキシが含まれています。
これらの成果物に含まれるすべての PoC とスクリプトは、Docker コンテナー内で実行されるように設計されています。そのため、Docker がインストールされた最新の Linux (テスト済み) または MacOS / Windows (未テスト) オペレーティング システムを使用していることを確認してください。論文の結果を簡単に再現するには、 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 受信増加 | ✅ | - | ✅ | ✅ | ✅ | ✅ |
C1 受信減少 | ✅ | - | R | ✅ | T | T |
C1 Snd増加 | ✅ | - | R | U | T | T |
C1 SndDecrease | ✅ | - | R | U | T | T |
C2 ChaCha20-ポリ1305 | ✅ | ✅ | ✅ | - | - | - |
C2 CBC-EtM | 0.0300 (不明) 0.8383 (ピン) | 0.0003 (不明) | 0.0003 (不明) 0.0074 (ピン) | - | - | - |
C3 ローグ エクステンション | - | - | - | - | ✅ | - |
C4ローグセッション | - | - | - | - | ✅ | - |
伝説:
(E1): scripts/test-sqn-manipulation.sh
- 4 つのシーケンス番号操作攻撃のいずれかを実行して、(C1) を証明します。
(E2a): scripts/test-ext-downgrade.sh
- 拡張機能ダウングレード攻撃を実行して、ChaCha20-Poly1305 の (C2) を証明します。
予想される実行時間:約 1 分。
実行:スクリプトの開始後、任意のクライアントとサーバーの組み合わせを選択します。その後、攻撃バリアント 1 を選択して ChaCha20-Poly1305 を選択します。
結果:スクリプトは、 less
で次のファイルを同時に開くことで終了します。
diff
diff
2 番目のファイルに移動します。このファイルは、拡張機能ダウングレード攻撃の場合の選択された SSH クライアントの出力を、変更されていない接続の出力と比較します。この差分は、未変更の接続のみに SSH_MSG_EXT_INFO が存在し、SSH_MSG_IGNORE が存在しないことを示し、ChaCha20-Poly1305 の (C2) が証明されます。
(E2b): scripts/bench-ext-downgrade.sh
- 拡張機能ダウングレード攻撃を 10,000 回実行して、CBC-EtM (UNKNOWN および PING) の (C2) を証明します。
(E3): scripts/test-asyncssh-rogue-ext-negotiation.sh
less
で 7 つのファイルのセットを開いて終了します。開かれたファイルのリストについては、(E2a) の結果を参照してください。 2 番目のファイルに移動します。 diff は、改ざんされた接続内に攻撃者が選択した値を持つserver-sig-algs 拡張機能が存在することを示し、(C3) が証明されます。 (E4): scripts/test-asyncssh-rogue-session-attack.sh
less
で 7 つのファイルのセットを開いて終了します。開かれたファイルのリストについては、(E2a) の結果を参照してください。最初のファイルに移動します。 diff は、それぞれ被害者 (変更されていない接続) と攻撃者 (改ざんされた接続) の認証が成功したことを示します。その後、2 番目のファイルに移動し、ファイルの最後にある各クライアント接続の出力を調べます。変更されていない接続では、サーバーは犠牲者のユーザー名で応答しますが、攻撃された接続では、サーバーは攻撃者のユーザー名で応答します。これは(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
次のサードパーティ ライブラリが使用されます。