【注意】このサイトに記載されていることを他人に試すことは「不正アクセス禁止法」に該当する場合があります。詳しくはこちらから

ハッカーはsslyzeでサーバーのSSL構成を分析する(Kali Linuxツール説明)

ホワイトハッカーの知識座学,Kali Linuxツール,sslyze

サーバーのSSL構成の分析方法を理解するためにまとめてみました。
このsslyzeの動作確認は自分のドメインでテストを行っています。

sslyzeとは

sslyzeは、サーバーに接続することでそのサーバーのSSL構成を分析することができるツールです。
sslyzeは高速かつ包括的に設計されており、組織やテスターがSSLサーバーに影響を与える誤った設定を特定するのに役立ちます。

機能

  • マルチプロセス、マルチスレッドでのスキャン(高速です)
  • SSL 2.0/3.0とTLS 1.0/1.1/1.2に対応
  • パフォーマンステスト:セッションの再開とTLSチケットのサポート
  • セキュリティテスト:脆弱な暗号スイート、安全でないリネゴシエーション、CRIME、Heartbleedなどのテスト
  • OCSPステープリングによるサーバ証明書の検証と失効のチェック
  • SMTP、XMPP、LDAP、POP、IMAP、RDP、FTPにおけるStartTLSハンドシェイクのサポート
  • 相互認証を行うサーバをスキャンする際のクライアント証明書のサポート
  • スキャン結果をさらに処理するためのXML出力

ツールの場所

[Applications]→[01-Information Gathering]→[SSL Analysis]→[sslyze]

ツールと使用方法

sslyze [options] target1.com target2.com:443 target3.com:443{ip} etc…

例 sslyze –regular www.yahoo.co.jp

【実行イメージ】少し端折って整形しています。

┌──(root__kali)-[/home/kali]
└─# sslyze --regular ******.com

CHECKING HOST(S) AVAILABILITY
-----------------------------
******.com:443 => ***.***.***.***
SCAN RESULTS FOR ******.COM:443 - ***.***.***.***
----------------------------------------------------

* Certificates Information:
Hostname sent for SNI: ******.com
Number of certificates detected: 1

Certificate #0 ( _RSAPublicKey )
SHA1 Fingerprint: 9de96c40b0bdd0932b33f62ad98eda438240d8f1
Common Name: www.******.com
Issuer: R3
Serial Number: 383238342675683542455509277899001456691181
Not Before: 2021-02-16
Not After: 2021-05-17
Public Key Algorithm: _RSAPublicKey
Signature Algorithm: sha256
Key Size: 2048
Exponent: 65537
DNS Subject Alternative Names: ['******.com', 'www.******.com']

Certificate #0 - Trust
Hostname Validation: OK - Certificate matches server hostname
Android CA Store (9.0.0_r9): OK - Certificate is trusted
Apple CA Store (iOS 14, iPadOS 14, macOS 11, watchOS 7, and tvOS 14):OK - Certificate is trusted
Java CA Store (jdk-13.0.2): OK - Certificate is trusted
Mozilla CA Store (2021-01-24): OK - Certificate is trusted
Windows CA Store (2021-01-24): OK - Certificate is trusted
Symantec 2018 Deprecation: OK - Not a Symantec-issued certificate
Received Chain: www.******.com --> R3
Verified Chain: www.******.com --> R3 --> DST Root CA X3
Received Chain Contains Anchor: OK - Anchor certificate not sent
Received Chain Order: OK - Order is valid
Verified Chain contains SHA1: OK - No SHA1-signed certificate in the verified certificate chain

Certificate #0 - Extensions
OCSP Must-Staple: NOT SUPPORTED - Extension not found
Certificate Transparency: WARNING - Only 2 SCTs included but Google recommends 3 or more

Certificate #0 - OCSP Stapling
OCSP Response Status: SUCCESSFUL
Validation w/ Mozilla Store: OK - Response is trusted
Responder Name: CN=R3,O=Let's Encrypt,C=US
Cert Status: GOOD
Cert Serial Number: 383238342675683542455509277899001456691181
This Update: 2021-04-02
Next Update: 2021-04-09

* SSL 3.0 Cipher Suites:
Attempted to connect using 80 cipher suites; the server rejected all cipher suites.

* Session Renegotiation:
Client Renegotiation DoS Attack: OK - Not vulnerable
Secure Renegotiation: OK - Supported

* TLS 1.2 Cipher Suites:
Attempted to connect using 156 cipher suites.

The server accepted the following 46 cipher suites:
TLS_RSA_WITH_SEED_CBC_SHA 128
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 256
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA 256
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 128
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA 128
TLS_RSA_WITH_ARIA_256_GCM_SHA384 256
TLS_RSA_WITH_ARIA_128_GCM_SHA256 128
TLS_RSA_WITH_AES_256_GCM_SHA384 256
TLS_RSA_WITH_AES_256_CCM_8 128
TLS_RSA_WITH_AES_256_CCM 256
TLS_RSA_WITH_AES_256_CBC_SHA256 256
TLS_RSA_WITH_AES_256_CBC_SHA 256
TLS_RSA_WITH_AES_128_GCM_SHA256 128
TLS_RSA_WITH_AES_128_CCM_8 128
TLS_RSA_WITH_AES_128_CCM 128
TLS_RSA_WITH_AES_128_CBC_SHA256 128
TLS_RSA_WITH_AES_128_CBC_SHA 128
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 256 ECDH: X25519 (253 bits)
TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 256 ECDH: X25519 (253 bits)
TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 128 ECDH: X25519 (253 bits)
TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 256 ECDH: X25519 (253 bits)
TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 128 ECDH: X25519 (253 bits)
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 256 ECDH: prime256v1 (256 bits)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 256 ECDH: prime256v1 (256 bits)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 256 ECDH: prime256v1 (256 bits)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 128 ECDH: prime256v1 (256 bits)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 128 ECDH: prime256v1 (256 bits)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 128 ECDH: prime256v1 (256 bits)
TLS_DHE_RSA_WITH_SEED_CBC_SHA 128 DH (2048 bits)
TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 256 DH (2048 bits)
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 256 DH (2048 bits)
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 256 DH (2048 bits)
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 128 DH (2048 bits)
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 128 DH (2048 bits)
TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384 256 DH (2048 bits)
TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256 256 DH (2048 bits)
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 256 DH (2048 bits)
TLS_DHE_RSA_WITH_AES_256_CCM_8 256 DH (2048 bits)
TLS_DHE_RSA_WITH_AES_256_CCM 256 DH (2048 bits)
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 256 DH (2048 bits)
TLS_DHE_RSA_WITH_AES_256_CBC_SHA 256 DH (2048 bits)
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 128 DH (2048 bits)
TLS_DHE_RSA_WITH_AES_128_CCM_8 128 DH (2048 bits)
TLS_DHE_RSA_WITH_AES_128_CCM 128 DH (2048 bits)
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 128 DH (2048 bits)
TLS_DHE_RSA_WITH_AES_128_CBC_SHA 128 DH (2048 bits)

The group of cipher suites supported by the server has the following properties:
Forward Secrecy OK - Supported
Legacy RC4 Algorithm OK - Not Supported


* TLS 1.3 Cipher Suites:
Attempted to connect using 5 cipher suites.

The server accepted the following 3 cipher suites:
TLS_CHACHA20_POLY1305_SHA256 256 ECDH: X25519 (253 bits)
TLS_AES_256_GCM_SHA384 256 ECDH: X25519 (253 bits)
TLS_AES_128_GCM_SHA256 128 ECDH: X25519 (253 bits)


* TLS 1.0 Cipher Suites:
Attempted to connect using 80 cipher suites; the server rejected all cipher suites.

* Elliptic Curve Key Exchange:
Supported curves: prime256v1, secp384r1, secp521r1, X25519, X448
Rejected curves: sect193r2, prime192v1, sect571r1, sect233k1, secp160k1, sect163r1, sect233r1, sect163k1, secp160r1, sect239k1, secp160r2, sect283k1, secp192k1, sect283r1, secp224k1, sect409k1, sect163r2, secp224r1, sect409r1, sect193r1, secp256k1, sect571k1

* Deflate Compression:
OK - Compression disabled

* OpenSSL CCS Injection:
OK - Not vulnerable to OpenSSL CCS injection

* TLS 1.1 Cipher Suites:
Attempted to connect using 80 cipher suites; the server rejected all cipher suites.

* OpenSSL Heartbleed:
OK - Not vulnerable to Heartbleed

* SSL 2.0 Cipher Suites:
Attempted to connect using 7 cipher suites; the server rejected all cipher suites.

* ROBOT Attack:
OK - Not vulnerable.

* Downgrade Attacks:
TLS_FALLBACK_SCSV: OK - Supported

* TLS 1.2 Session Resumption Support:
With Session IDs: OK - Supported (5 successful resumptions out of 5 attempts).
With TLS Tickets: NOT SUPPORTED - Server did not return a TLS ticket.


SCAN COMPLETED IN 8.14 S
------------------------

オプション

–version

show program’s version number and exit.
プログラムのバージョン番号を表示して終了します。

-h, –help

show this help message and exit.
このヘルプメッセージを表示して終了します。

–regular

Regular HTTPS scan; shortcut for –sslv2–sslv3–tlsv1–tlsv1_1–tlsv1_2–tlsv1_3–reneg–resum–certinfo– hide_rejected_ciphers–compression–heartbleed–openssl_ccs–fallback–robot–elliptic_curves
通常のHTTPSスキャン; –sslv2–sslv3–tlsv1–tlsv1_2–tlsv1_3–reneg–resum–certinfo–hide_rejected_ciphers–compression–heartbleed–openssl_ccs–fallback–robot–elliptic_curvesのショートカット。

トラスト・ストア・オプション(Trust stores options)

–update_trust_stores

Update the default trust stores used by sslyze. The latest stores will be downloaded from https://github.com/nabla-c0d3/trust_stores_observatory. This option is meant to be used separately, and will silence any other command line option supplied to sslyze.
sslyzeが使用するデフォルトのトラストストアを更新します。最新のストアは https://github.com/nabla-c0d3/trust_stores_observatory からダウンロードされます。このオプションは個別に使用することを意図しており、sslyzeに与えられた他のコマンドラインオプションを無視します。

クライアント証明書のオプション(Client certificate options)

-cert=CERT

Client certificate chain filename. The certificates must be in PEM format and must be sorted starting with the subject’s client certificate, followed by intermediate CA certificates if applicable.
クライアント証明書チェーンのファイル名。証明書はPEM形式で、サブジェクトのクライアント証明書から始まり、該当する場合は中間CA証明書が続くようにソートされている必要があります。

–key=KEY

Client private key filename.
クライアントの秘密鍵のファイル名です。

–keyform=KEYFORM

Client private key format. DER or PEM. (default)
クライアントの秘密鍵のフォーマット。DERまたはPEM。(デフォルト)

–pass=KEYPASS

Client private key passphrase.
クライアントの秘密鍵のパスフレーズです。

入力・出力オプション(Input and output options)

–json_out=JSON_FILE

Write the scan results as a JSON document to the file JSON_FILE. If JSON_FILE is set to “-“, the JSON output will instead be printed to stdout. The resulting JSON file is a serialized version of the ScanResult objects described in sslyze’s Python API: the nodes and attributes will be the same. See https://nabla-c0d3.gi thub.io/sslyze/documentation/available-scan-commands.html for more details.
スキャン結果をJSONドキュメントとして、ファイルJSON_FILEに書き込みます。JSON_FILEが"-“に設定されている場合、JSON出力は代わりにstdoutに出力されます。結果として得られるJSONファイルは、sslyzeのPython APIで説明されているScanResultオブジェクトをシリアライズしたもので、ノードと属性は同じになります。詳細は https://nabla-c0d3.gi thub.io/sslyze/documentation/available-scan-commands.html を参照してください。

–targets_in=TARGETS_IN

Read the list of targets to scan from the file TARGETS_IN. It should contain one host:port per line.
TARGETS_INファイルから、スキャンするターゲットのリストを読み込みます。1行に1つのhost:portが含まれている必要があります。

–quiet

Do not output anything to stdout; useful when using -json_out.
標準出力に何も出力しません。-json_outを使用する際に便利です。

接続オプション(Connectivity options)

–slow_connection

Greatly reduce the number of concurrent connections initiated by sslyze. This will make the scans slower but more reliable if the connection between your host and the server is slow, or if the server cannot handle many concurrent connections. Enable this option if you are getting a lot of timeouts or errors.
sslyzeが開始する同時接続の数を大幅に減らします。これにより、スキャンの速度は遅くなりますが、ホストとサーバー間の接続が遅い場合や、サーバーが多数の同時接続を処理できない場合には、信頼性が高くなります。タイムアウトやエラーが多発している場合は、このオプションを有効にします。

–https_tunnel=HTTPS_TUNNEL

Tunnel all traffic to the target server(s) through an HTTP CONNECT proxy. HTTP_TUNNEL should be the proxy’s URL: 'http://USER:PW@HOST:PORT/’. For proxies requiring authentication, only Basic Authentication is supported.
HTTP CONNECTプロキシを介してターゲットサーバへのすべてのトラフィックをトンネリングします。HTTP_TUNNELには、プロキシのURLを指定します。http://USER:PW@HOST:PORT/」とします。認証が必要なプロキシでは、Basic認証のみがサポートされています。

–starttls=STARTTLS

Perform a StartTLS handshake when connecting to the target server(s). StartTLS should be one of: auto, smtp, xmpp, xmpp_server, pop3, imap, ftp, ldap, rdp, postgres. The 'auto’ option will cause sslyze to deduce the protocol (ftp, imap, etc.) from the supplied port number, for each target servers.
ターゲットサーバーへの接続時にStartTLSハンドシェイクを行う。StartTLSには、auto、smtp、xmpp、xmpp_server、pop3、imap、ftp、ldap、rdp、postgresのいずれかを指定します。auto」オプションを指定すると、sslyzeは指定されたポート番号から、対象となる各サーバのプロトコル(ftp、imapなど)を推測します。

–xmpp_to=XMPP_TO

Optional setting for STARTTLS XMPP. XMPP_TO should be the hostname to be put in the 'to’ attribute of the XMPP stream. Default is the server’s hostname.
STARTTLS XMPPのオプション設定です。XMPP_TOには、XMPPストリームの「to」属性に指定するホスト名を指定します。デフォルトは、サーバーのホスト名です。

–sni=SNI

Use Server Name Indication to specify the hostname to connect to. Will only affect TLS 1.0+ connections.
Server Name Indicationを使用して、接続先のホスト名を指定します。 TLS 1.0+の接続にのみ影響します。

スキャンコマンド(Scan commands)

–heartbleed

Test a server for the OpenSSL Heartbleed vulnerability.
OpenSSLのHeartbleed脆弱性について、サーバーをテストします。

–robot

Test a server for the ROBOT vulnerability.
サーバーのROBOT脆弱性のテストを行います。

–tlsv1_1

Test a server for TLS 1.1 support.
サーバーがTLS 1.1をサポートしているかどうかをテストします。

–tlsv1_3

Test a server for TLS 1.3 support.
TLS 1.3をサポートするサーバーをテストします。

–compression

Test a server for TLS compression support, which can be leveraged to perform a CRIME attack.
サーバーのTLS圧縮サポートをテストし、CRIME攻撃を実行するために利用できるようにする。

–fallback

Test a server for the TLS_FALLBACK_SCSV mechanism to prevent downgrade attacks.
ダウングレード攻撃を防ぐためのTLS_FALLBACK_SCSVメカニズムについて、サーバーをテストする。

–tlsv1

Test a server for TLS 1.0 support.
サーバーがTLS 1.0をサポートしているかどうかをテストします。

–reneg

Test a server for for insecure TLS renegotiation and client-initiated renegotiation.
安全でないTLSリネゴシエーションとクライアント主導のリネゴシエーションについて、サーバーをテストします。

–http_headers

Test a server for the presence of security-related HTTP headers.
サーバにセキュリティ関連のHTTPヘッダが存在するかどうかをテストします。

–elliptic_curves

Test a server for supported elliptic curves.
サポートされている楕円曲線についてサーバーをテストします。

–tlsv1_2

Test a server for TLS 1.2 support.
TLS 1.2をサポートしているかどうか、サーバーをテストします。

–early_data

Test a server for TLS 1.3 early data support.
TLS 1.3の初期データをサポートするサーバーをテストします。

–openssl_ccs

Test a server for the OpenSSL CCS Injection vulnerability. (CVE-2014-0224)
OpenSSL CCS インジェクションの脆弱性について、サーバーをテストします。(CVE-2014-0224)

–sslv2

Test a server for SSL 2.0 support.
SSL 2.0がサポートされているかどうか、サーバーをテストします。

–resum

Test a server for session resumption support using session IDs and TLS tickets.
セッションIDとTLSチケットを使用して、サーバーのセッション再開サポートをテストします。

–resum_rate

Measure a server’s session resumption rate when attempting 100 resumptions using session IDs.
セッションIDを使用して100回の再開を試みたときの、サーバーのセッション再開率を測定します。

–certinfo

Retrieve and analyze a server’s certificate(s) to verify its validity.
サーバーの証明書を取得して解析し、その有効性を確認することができます。

–certinfo_ca_file=CERTINFO_CA_FILE

Path to a file containing root certificates in PEM format that will be used to verify the validity of the server’s certificate.
サーバーの証明書の有効性を確認するために使用されるPEM形式のルート証明書を含むファイルへのパス。

–sslv3

Test a server for SSL 3.0 support.
SSL 3.0がサポートされているかどうか、サーバーをテストします。

sslyzeツールのまとめ

sslyzeは、自分のサーバーのHTTPSの確認および検証するツールです。
WEBサーバのSSL設定を行ったり変更した場合に想定通りの動作をしているかHTTPSを確認するために使います。

WEBサーバーのSSL化は大事ですね。