
echo Q | openssl s_client -ssl3 -connect HOSTNAME:PORT 2>/dev/null | grep 'Cipher is'
しかし、コンピュータにopensslがインストールされていない場合は、SSLv3接続をどのようにテストしますか?
アップデート:コンピュータがインターネットに接続されていません。
答え1
nmap
システムで利用可能な場合。ポート 443 に対して SSLv3 を確認すると仮定すると、nmap
次のオプションを使用できます。
nmap --script ssl-enum-ciphers -p 443 <hostname/IP> | grep SSLv3
何も返されない場合grep
は、SSLv3プロトコルが無効になっていることを意味し、何かが返された場合(サポートされているプロトコルと使用されたパスワードが返される)、ターゲットホストでSSLv3がまだ有効になっていることを意味します。
確認するこれssl-enum-ciphersの機能を確認します。
SSLv3 Iの場合
答え2
おすすめしたい wget
またはcurl
、次のいずれかまたは両方が既に存在する可能性があります。
wget --secure-protocol=SSLv3 https://zmap.io/
curl --sslv3 https://zmap.io/
またはそうでなければsocat
:
socat stdio openssl-connect:zmap.io:443,method=sslv3
socat
SSLをサポートするには、OpenSSLのlibsslとlibcryptoが必要で、wget
OpenSSLcurl
またはGnuTLSが必要です。 zmap.ioはSSLv3を無効にするセキュリティ関連のWebサイトです。
そうでなければ、危機に瀕してこれを行うことができますbash
(そして不信を止めることができます)。最小のSSlv3 "client hello"を取得し、バイナリ形式でファイルに書き込みます。
( echo 16 03 00 00 49
echo 01 00 00 45 03 00 54 46 2c 8b a0 70 ac c5 9f 96
echo 60 b9 d0 97 af a5 95 c4 41 3b fa 49 dc cd eb 63
echo df df cf 66 95 29 00 00 1e 00 39 00 38 00 35 00
echo 16 00 13 00 0a 00 33 00 32 00 2f 00 05 00 04 00
echo 15 00 12 00 09 00 ff 01 00 ) | xxd -r -p > ssl3.bin
それなら簡単です(!)。
$ exec 4<> /dev/tcp/zmap.io/443
$ cat ssl3.bin >&4
$ hexdump -C <&4
00000000 15 03 00 00 02 02 28 |......(|
ここで重要なバイトは、先行する0x15(SSL警告ロギング)および0x28、ハンドシェイク失敗です。接続が有効な場合は、最初のバイト0x16(SSLハンドシェイク履歴)と証明書などを含む大きなチャンクを取得する必要があります。ここではホスト名またはIPアドレスを使用できます/dev/tcp/hostname/port/
。
次の方法を使用して、OpenSSLを使用している他のコンピュータで独自のハンドシェイクを作成できますs_client
。
echo Q | openssl s_client -ssl3 -msg -debug -cipher 'DEFAULT:!EXPORT' \
-connect www.google.com:443 >debug.log
主な要件は、connect
ホストが接続を受け入れるということです。いいえニューラルネットワーク研究所ここで取得したペイロードは、すべてのサーバーをテストするために使用できます(厳密なSNIが適用されている場合、サーバーは接続を拒否できますが、SNIはSSlv3に対して定義されていません)。
$ head -15 debug.log
CONNECTED(00000003)
write to 0x80c6ed0 [0x80d0c88] (78 bytes => 78 (0x4E))
0000 - 16 03 00 00 49 01 00 00-45 03 00 54 46 2c 8b a0 ....I...E..TF,..
[...]
>>> SSL 3.0 Handshake [length 0049], ClientHello
01 00 00 45 03 00 54 46 2c 8b a0 70 ac c5 9f 96
60 b9 d0 97 af a5 95 c4 41 3b fa 49 dc cd eb 63
df df cf 66 95 29 00 00 1e 00 39 00 38 00 35 00
16 00 13 00 0a 00 33 00 32 00 2f 00 05 00 04 00
15 00 12 00 09 00 ff 01 00
read from 0x80c6ed0 [0x80cc478] (5 bytes => 5 (0x5))
-msg
(代わりに使用する出力は-debug
よりきれいですが、SSLレコードの最初の5バイトを省略し、-debug
重要な末尾の0バイトを役に立たないように切り捨てるので、両方を使用する必要があります。)
0000 で始まる行から最初の 5 バイトの 16 進数 (次の 16 進数ブロックから省略された SSL レコードヘッダー) を取得し、「SSL 3.0 Handshake」行ブロックの後の 16 進数の合計を取得し、バッチをバイナリxxd
ファイルに変換します。上記のように使用します。
ここで唯一の変数は、nonceの最初の4バイト(レコードのオクテット11-14)がクライアントタイムスタンプになることです。これは十分に編集可能なサーバーで検出できますが、SSLv3ではクライアント時計が正確である必要はありません。(TLS 1.2以下のバージョンでも同様です。)