web-dev-qa-db-ja.com

最近のUbuntu OSでSSLv3をテストするにはどうすればよいですか?

クライアント(ラップトップ)でUbuntu 16.04を使用していますが、リモートサーバーをテストするシステム(この例ではzmap.io)にSSL v3が存在しないようです。

関連する質問

サーバーが引き続きSSL v3を提供しているかどうかをテストする方法については、いくつかの質問があります。

機能しなかったテスト

  • カール:

    $ curl --sslv3 https://zmap.io/
    curl: (35) gnutls_handshake() failed: Handshake failed
    

    私が期待する SSLv3, TLS handshake, Client helloを出力します。

  • openssl

    $ openssl s_client -ssl3 -connect zmap.io:443
    140396574262936:error:140A90C4:SSL routines:SSL_CTX_new:null ssl method passed:ssl_lib.c:1878:
    

    私が期待する routines:SSL3_READ_BYTES:sslv3 alert handshakeを出力します。

  • nmap

    $ nmap --script ssl-enum-ciphers -p 443 zmap.io
    
    Starting Nmap 7.01 ( https://nmap.org ) at 2016-09-20 17:19 CEST
    Nmap scan report for zmap.io (141.212.120.90)
    Host is up (0.12s latency).
    PORT    STATE SERVICE
    443/tcp open  https
    | ssl-enum-ciphers: 
    |   TLSv1.0: 
    |     ciphers: 
    |       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
    |       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
    |       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
    |       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
    |     compressors: 
    |       NULL
    |     cipher preference: server
    |   TLSv1.1: 
    |     ciphers: 
    |       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
    |       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
    |       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
    |       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
    |     compressors: 
    |       NULL
    |     cipher preference: server
    |   TLSv1.2: 
    |     ciphers: 
    |       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
    |       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
    |       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
    |       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
    |       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
    |       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
    |       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
    |       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
    |       TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 2048) - A
    |       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
    |       TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 2048) - A
    |       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
    |     compressors: 
    |       NULL
    |     cipher preference: server
    |_  least strength: A
    
    Nmap done: 1 IP address (1 Host up) scanned in 10.57 seconds
    

    私が期待する **SSLv3: No supported ciphers found**を出力します。

何をすべきか?

Ubuntu 16.04(またはopensslでSSLv3が有効になっていない他のLinuxディストリビューション)でSSLv3をテストする方法を知っている人はいますか?

テスト中のサーバーが公共のインターネットから利用できません。つまり、オンラインサービスは私のニーズを満たしていません。

2
Yannick Clybouw

TestSSL.shの静的なopensslビルドを試す

TestSSL.shプロジェクトはSSLスキャナーです。また、意図的に弱められたOpenSSLの静的バージョンが含まれ、あらゆる種類の古い暗号が有効になっています。これらのビルドの1つを使用して、SSLv3をテストできます。

現在のMint Live CDで試してみました。そして、私はそれがあなたのUbuntuでもうまくいくはずだと思っています。

以下の完全な指示/概念実証。

参考:私が使用していたLinuxバージョン

mint@mint ~ $ cat /etc/lsb-release
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=18.1
DISTRIB_CODENAME=serena
DISTRIB_DESCRIPTION="Linux Mint 18.1 Serena"

Testssl.shを取得する

mint@mint ~ $ git clone https://github.com/drwetter/testssl.sh --depth 1
Cloning into 'testssl.sh'...
remote: Counting objects: 48, done.
remote: Compressing objects: 100% (46/46), done.
remote: Total 48 (delta 8), reused 17 (delta 2), pack-reused 0
Unpacking objects: 100% (48/48), done.
Checking connectivity... done.

ここに静的ビルドがあります

mint@mint ~ $ file testssl.sh/bin/* | grep -i linux | grep -i static
testssl.sh/bin/openssl.Linux.i686:             ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=688fd66da53e4351659a0580cf9f5605deb16c9e, stripped
testssl.sh/bin/openssl.Linux.x86_64:           ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=2ac27c3998817aa9145f19a723e99e8a9191d0da, stripped

静的ビルドの1つにエイリアス "badopenssl"を定義しましょう

mint@mint ~ $ alias badopenssl=testssl.sh/bin/openssl.Linux.x86_64

これで、opensslの2つのバージョンができました。

mint@mint ~ $ openssl version
OpenSSL 1.0.2g  1 Mar 2016

mint@mint ~ $ sha256sum $(which openssl)
efed90fc204144946c011c451e61e3c420756014c2252cfad493ec0896cb4e34  /usr/bin/openssl


mint@mint ~ $ badopenssl version
OpenSSL 1.0.2-chacha (1.0.2i-dev)

mint@mint ~ $ sha256sum testssl.sh/bin/openssl.Linux.x86_64
a11b8e25992030059b3ce3a5c38c432d9a33c05e8e4581996d19c52a57cb94ab  testssl.sh/bin/openssl.Linux.x86_64

SSLテストサーバーのブートストラップ

mint@mint ~ $ openssl req -x509 -nodes -days 999 -subj '/CN=mydemoserver' -newkey rsa:2048 -keyout server.pem -out server.pem
Generating a 2048 bit RSA private key
.........................................+++
..................................+++
writing new private key to 'server.pem'
-----

通常のopensslはSSLv3を許可しないことに注意してください

mint@mint ~ $ openssl s_server -ssl3
140199887697560:error:140A90C4:SSL routines:SSL_CTX_new:null ssl method passed:ssl_lib.c:1878:

... badopensslは気にしない間

mint@mint ~ $ badopenssl s_server -ssl3
Using default temp DH parameters
ACCEPT
^C

これを背景にしましょう。また、「-ssl3」パラメーターも必要ありません。

mint@mint ~ $ badopenssl s_server 2>&1 >/dev/null &
[1] 8136

通常のopensslはSSLv3で接続しません:

mint@mint ~ $ openssl s_client -ssl3 -connect localhost:4433
140415485314712:error:140A90C4:SSL routines:SSL_CTX_new:null ssl method passed:ssl_lib.c:1878:

...しかし、badopensslはSSLv3で喜んで接続します:

mint@mint ~ $ badopenssl s_client -ssl3 -connect localhost:4433 2>&1 | grep -iE 'Protocol|^New'
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
    Protocol  : SSLv3
^C

クレジット

2
StackzOfZtuff

SSLyze は、暗号とプロトコル(およびその他のTLSセキュリティ要素)を列挙できるオープンソースのPythonベースのツールです。自分のマシンからローカルで実行するのは簡単なので、インターネットに公開されていないサーバーのテストに役立ちます。

OpenSSLのPythonラッパーを使用するため、おそらくOpenSSLライブラリに存在しないものをテストすることはできません。古いライブラリ、または弱いプロトコルで再コンパイルされたライブラリ、システムのデフォルトの1つが機能しない場合でも機能するはずです。

0
CBHacking