ろば電子が詰まつてゐるスマートフォン用の表示で見るろば電子が詰まつてゐる2015-03-20sslscanでサーバのSSL/TLS状態を簡単にチェックするセキュリティ最近はSSL/TLSのセキュリティ問題が多発しているため、自分で運用しているサーバのSSL/TLSの設定をテストしたいという人は多いと思います。Testがよく使われます。な)敷居が高いという点もありますし、そもそもインターネット側から直接接続できない環境のテストが行えません。そこで、IPアドレスを指定するだけでよろしく対象のSSL/TLSサーバの状態をチェックしてくれるツールがあると便利だな、ということになります。本稿では、このような目的に利用されるsslscanというコマンドを紹介します。Linuxにもインストールされているお手軽なSSLチェックツールです。このソフトウェアは結構なスピードでモリモリとバージョンアップしているので、少し前の知識で使っていると色々置いてきぼりになってしまいます。最近はsslscanがかなりいい感じになってきているので、若干細かすぎて伝わらない感があるけど、頑張って伝えます。sslscanの入手sslscanはGitHub上で開発されているため、本体はそちらから入手できます。これは本来のsslscanからのfork版であるようです。そのため作者に敬意を表して、rbsec-sslscanと呼んだ方がいいかもしれません。本稿では煩雑になるため、単にsslscanと記述します。Linuxを使っているならば既にイイ感じのが入っていますから、特に自分でビルドする必要はありません。ここでは、自分でビルドする際の注意点などを記しておきましょう。staticリンク版の提供sslscanは当然のことながらOpenSSL関連のライブラリを利用するのですが、昨今の事情から、OS付属のOpenSSLをそのままテストツールに使うことは望ましくありません。これは「普通の」利用者にとっては当たり前なのですが、テストツールを使いたい立場としてはちょっと困ります。そのようなobsoleteな設定が無いかどうかをテストしたいのに、OS環境に引きずられてテストすべきプロトコルで投げてくれないのは困るわけです。そこで、「ほんならsslscanの実行ファイルにOpenSSLのライブラリをダイナミックリンクせぇへんで、『アリアリ』のOpenSSLをstaticリンクしてmakeしたればええやん?」という発想がでてきます。static"とコンパイルすることで、OpenSSLのライブラリをstaticリンクしてビルドすることができます。static」と打つと、次のようにまずその場でOpenSSLのリポジトリをドサっと持ってきて、OpenSSL自体をビルドするところからはじまります。これで、動作させるOS環境上のOpenSSLは利用しない、ポータブルなテストツールができます。してビルドしたsslscanコマンドには、次のようにlibssl.soやlibcrypt.soがリンクされていないことが分かります。このstaticリンク版が入っており、すぐに使うことができます。自分が使っているsslscanコマンドがdynamic版なのかstatic版なのかは、--versionオプションを付ければすぐに分かります。1.1.0に付属の、staticリンクされたsslscanコマンドの例です。xxxxこのように、静的リンクされたsslscanでは「-static」と表示されます。先ほどのようにlddコマンドで確認しても良いでしょう。ちなみにKaliのsslscanコマンドは特殊で、上で見たように「-static」の前に何もありません。手でビルドすると、通常は次のようにバージョン情報が合わせて表示されます。14.04の標準パッケージにあるsslscanコマンドを確認しておきましょう。14.04の標準パッケージのsslscanコマンドは、テスト用ツールとしては不適切です。Ubuntu14標準パッケージのsslscanはバージョン1.8.2ですが、次のようにlibssl.soやlibcrypt.soがOS標準のOpenSSLライブラリにリンクされています。14.04ではOpenSSLパッケージのSSLv2がはじめから無効化してありますから、このsslscanコマンドもSSLv2はテストしてくれません。これを知らずにこのまま実行すると、「SSLv2を検査しているつもりが検査していなかった!」ということになります。最近のsslscanコマンドは気が利いており、実行時に、利用しているOpenSSLのライブラリがSSLv2をサポートしているかどうかをチェックして、サポートしていない場合は警告してくれます。static」ではなく「make」でダイナミックリンクでビルドしたものです。これは当然Ubuntu標準パッケージのOpenSSLを使うため、SSLv2をサポートしません。SSLv2」と赤字で警告してくれます。1.0)しか対応していませんでした。1.10.0では、ちゃんとTLSv1.1、TLSv1.2に対応しています。Linux付属のsslscanは、先述のダイナミックリンク版だったため、SSLv2はテストしてくれないことにも注意が必要です)。前置きが長くなりましたが、sslscanは進化が早いためなるたけ最新版を、staticリンク版で使いましょう。sslscanの機能と出力sslscanコマンドの使い方は簡単で、コマンドライン引数に対象のIPアドレスを記述するだけです。対象ポートはデフォルトで443/tcpとなるため、別のポートを指定したい場合には「IPアドレス:ポート番号」の形でコロンで指定します。<IPアドレス>:<ポート番号>現在、sslscanコマンドには次のようなチェック機能があります。オプションを指定することでチェックを省略することもできます。(CVE-2014-0160)サポートしているプロトコルとCipherのリストこのうち最後のCipherリスト出力が、sslscanのメインテーマ(?)です。ここでは、基本的に問題のある設定が赤や黄色で表示されます。上の例では、「TLSv1.0」や「TLSv1.1」のところは黒字なので問題ありません(先ほど、SSLv2は赤字になっていましたね)。40bitの「40」が赤字になっていますが、これは鍵長が短い(weak)警告です。Cipherの警告、黄色はRC4の警告です。このようにsslscanコマンドは結果を色で区別するため、パッと見は分かりやすいのですが、テキストに出力して後で見るときには困ってしまうのが欠点です。鍵長が短いCipherは色で表示せず、[WEAK]とか付けて表示するモードがあると使いやすいんですけどね。--failedsslscanの1.8.2の頃までは、Cipherリストはダメだったものも接続できたものも、全てが表示されていました。現在の1.10.0では、接続できた(Accept)のもののみ表示されます。それでは困る(試したCipherすべてを表示しておきたい)場合は、--failedオプションを付ければ、試行したすべてのCipherが表示されます。これで、sslscan1.8.2の頃と同じ動作にすることができます。--xmlxmlオプションを利用することで、出力結果をxmlファイルとして保存できます。警告のカラー表示などの情報は一切入らないので、純粋に結果テキストだけが保存されます。「--no-heartbleed」や「--no-compression」などを指定することで、一部のテストを省略できます。Heartbleedチェックは応答待ちで少々時間がかかるので、大量のホストに実行する場合は指定してテストを省略した方がいいかもしれません。最後に、3DES(トリプルデス)の鍵長問題について補足しておきます。sslscanでスキャンしていると、3DESのbit数が168bitではなく112bitと表示されることがあります。これは、3DESでは原理上の鍵長は56(bit)×3=168(bit)ですが、既知の攻撃手法によって実質の鍵長が112bitとなってしまうためです。そのため最近のOpenSSLでは、3DES系の暗号方式の鍵長は112bitと表示されます。この辺の事情は、以下のenigma63様のスライドが分かりやすいため必見です。ssmjpで聞かせて頂きました。すりーでぃーいーえす。Windows版sslscan.exeREADMEには「まだexperimentalだ」という記述がありますが、sslscanはWindows向けにコンパイルされたsslscan.exeがリリースされています。https://github.com/rbsec/sslscan/releasesとりあえず、私の手元でちょっと試した限りだと特に問題なく動いているようです。してもWindowsで動かさないといけない人は、試してみると良いかもしれません。細かすぎて伝わらない部分が多かったかもしれませんが、だいたい語りました。Linuxを最新版にして使いましょう、ってことですな。Qiitaの19日目です。関する罪」の情報公開請求をしました月別アーカイブはてなブログをはじめよう!ozumaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。