
CVE-2023-48795(SSH Terrapin prefix truncation)用の軽量Pythonスキャナー。パッシブバナーグラブとKEXINIT解析を実行して、脆弱なcipher/MACの組み合わせと欠落したstrict-KEX軽減策を検出します。
軽量なPythonスキャナです。CVE-2023-48795 — SSH Terrapin プレフィックス切り詰め脆弱性のための。
TerrapinはSSHにおけるプロトコルレベルの脆弱性で、アクティブなMitM攻撃者がネゴシエーションされた拡張情報を切り詰め、接続のセキュリティを低下させることができます。特に致命的なのは
ext-info(サーバ署名アルゴリズムに使用)とping(OpenSSHのno-auth拡張で使用)を無効化することです。
| フィールド | 詳細 |
|---|---|
| CVE | CVE-2023-48795 |
| CVSS | 5.9(中) |
| タイプ | SSHプロトコル — プレフィックス切り詰め / 整合性バイパス |
| 公開日 | 2023年12月 |
| 影響を受ける | OpenSSH < 9.6、PuTTY < 0.80、libssh < 0.10.6、その他多数 |
| 参照 | terrapin-attack.com |
この脆弱性は、特定のSSH暗号/MACの組み合わせ(具体的にはchacha20-poly1305およびEncrypt-then-MACを伴うCBCモード暗号)において、アクティブなMitM攻撃者がハンドシェイク中にSSHシーケンス番号を注入・削除し、検出されずにネゴシエーションされた拡張データを切り詰めることが可能になるために存在します。
修正として、strict KEX拡張(kex-strict-*[email protected])が導入され、クライアントとサーバの両方がこれをアドバタイズすることで耐性を持ちます。
このスクリプトはパッシブなバナー取得とKEXINIT解析のみを行います。完全なSSHハンドシェイク、認証、悪用は行いません。
SSH_MSG_KEXINITパケットを受信し解析するチェックは鍵交換フェーズ内で完全に行われるため、非侵入的であり、通常のTCP接続試行以上の痕跡は残りません。
socket、struct、argparse、concurrent.futures)git clone https://github.com/Mr-Whiskerss/terrapin_check
cd terrapin_check
chmod +x terrapin_check.py
python3 terrapin_check.py <host> [port]
python3 terrapin_check.py 192.168.1.10
python3 terrapin_check.py 192.168.1.10 2222
1行に1つのターゲット — host または host:port 形式を受け付けます。
python3 terrapin_check.py -f targets.txt
python3 terrapin_check.py -f targets.txt --threads 20 --timeout 3
python3 terrapin_check.py -f targets.txt --summary
usage: terrapin_check.py [-h] [-f FILE] [-p PORT] [--threads THREADS] [--timeout TIMEOUT] [--summary] [host] [port]
positional arguments:
host ターゲットホスト
port SSHポート(デフォルト: 22)
options:
-h, --help このヘルプメッセージを表示して終了
-f, --file FILE ホストリストを含むファイル(1行に host または host:port)
-p, --port-flag PORT -f 使用時のデフォルトポート(デフォルト: 22)
--threads THREADS 一括スキャンの同時スレッド数(デフォルト: 10)
--timeout TIMEOUT ソケットタイムアウト(秒)(デフォルト: 5.0)
--summary ホストごとに1行のサマリーのみを表示
| コード | 意味 |
|---|---|
0 | 脆弱なホストが見つかりませんでした |
1 | 1つ以上の脆弱なホストが検出されました |
これにより、スクリプトをパイプラインや自動化ワークフローでクリーンに使用できます。
───────────────────────────────────────────────────────────
Target : 192.168.1.10:22
Banner : SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.6
Status : VULNERABLE
Strict-KEX : No
✗ ChaCha20-Poly1305 advertised → prefix-truncation possible
✗ CBC+ETM combination advertised
CBC ciphers : aes128-cbc, aes256-cbc
ETM MACs : [email protected], [email protected]
KEX algorithms:
curve25519-sha256
ecdh-sha2-nistp256
diffie-hellman-group14-sha256
───────────────────────────────────────────────────────────
[VULN] 192.168.1.10:22 VULNERABLE (CVE-2023-48795)
[SAFE] 192.168.1.20:22 Not vulnerable
[MIT] 192.168.1.30:22 Algorithms present but strict-KEX mitigates
[?] 192.168.1.99:22 ERROR: Connection refused
スクリプトは、以下のいずれかが真であり、かつstrict-KEX拡張がアドバタイズされていない場合、ホストをVULNERABLEとしてフラグ付けします。
サーバが暗号化のどちらかの方向で[email protected]をアドバタイズしている。
サーバが任意のCBCモード暗号および任意のETM MACを一緒にアドバタイズしている。
確認されるCBC暗号:
aes128-cbc、aes192-cbc、aes256-cbc、3des-cbc、blowfish-cbc、cast128-cbc、idea-cbc、arcfour、arcfour128、arcfour256、[email protected]
確認されるETM MAC:
[email protected]、[email protected]、[email protected]、[email protected]、およびそのバリアント
サーバがKEXアルゴリズムリストで[email protected]をアドバタイズしている場合、提供されている暗号やMACに関係なく接続は保護されます。この場合、スクリプトはVULNERABLEではなくMITIGATEDを報告します。
| アクション | 詳細 |
|---|---|
| OpenSSHのアップグレード | クライアントとサーバの両方を**≥ 9.6**にアップグレード。Strict KEXはデフォルトで有効。 |
| 他の実装の修正 | PuTTY ≥ 0.80、libssh ≥ 0.10.6、Paramiko ≥ 3.4.0、AsyncSSH ≥ 2.14.2 |
# /etc/ssh/sshd_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]
MACs hmac-sha2-256,hmac-sha2-512
アルゴリズムを削除すると暗号の柔軟性が低下します。アップグレードが常に推奨される修復方法です。
このツールは許可されたセキュリティ評価のみを目的としています。自分が所有するシステム、または明示的な書面によるテスト許可を得たシステムに対してのみ使用してください。著者は誤用に対する責任を負いません。
Mr-Whiskerssペネトレーションテストツールキットの一部。
| 脆弱なアルゴリズムの削除 | すぐにアップグレードできない場合は、sshd_configからchacha20-poly1305、CBC暗号、ETM MACを削除: |