はじめに
nmap というとポートスキャンを行う、サーバー・ネットワークのポートレベルのチェック行うツールという認識でした。 しかし Nmap Scripting Engine という仕組みを知って、TLS/SSL やその他のアプリケーション通信のチェックを行う機能も持っているということを知れたので、この記事で紹介します。
Nmap Scripting Engine (NSE) とは
Nmap Scripting Engine (NSE) とは、Lua 言語で記載されたスクリプトを利用して、様々なネットワーク関連タスクを自動化することができる仕組みです。 自前でスクリプトを記載して拡張することも、汎用的な機能は nmap をインストールした段階で利用することもできます。
公式サイトからダウンロードできるスクリプトにも多種多様なものがあります。
Scriptの具体例
ポートスキャンとはあまり関係のないスクリプトの具体例として、SSL/TLS 関連のチェックスクリプトを紹介します。
ssl-enum-ciphers
TLS/SSL 通信で利用可能な暗号スイートの一覧を出力できます。
利用方法としては以下の通りです。
$ nmap --script ssl-enum-ciphers -p 443 www.example.com
# 実行結果は www.example.com ではなく
# CloudFront Distibution (TLSv1.2_2021) 設定のもの
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| compressors:
| NULL
| cipher preference: server
| TLSv1.3:
| ciphers:
| TLS_AKE_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A
| TLS_AKE_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
| TLS_AKE_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
| cipher preference: server
|_ least strength: A
ssl-cert
証明書情報をチェックします。
curl -v などを使えば同様の表示も可能ですが、より簡潔に証明書だけを表示できます。
$ nmap --script ssl-cert -p 443 www.example.com
PORT STATE SERVICE
443/tcp open https
| ssl-cert: Subject: commonName=*.example.com/organizationName=Internet Corporation for Assigned Names and Numbers/stateOrProvinceName=California/countryName=US
| Subject Alternative Name: DNS:*.example.com, DNS:example.com
| Issuer: commonName=DigiCert Global G3 TLS ECC SHA384 2020 CA1/organizationName=DigiCert Inc/countryName=US
| Public Key type: ec
| Public Key bits: 256
| Signature Algorithm: ecdsa-with-SHA384
| Not valid before: 2025-01-15T00:00:00
| Not valid after: 2026-01-15T23:59:59
| MD5: c339:79ff:8bc1:9a94:820d:6804:b368:1881
|_SHA-1: 310d:b7af:4b2b:c904:0c83:4470:1aca:08d0:c693:81e3
まとめ
他にもスクリプト一覧のページを見ると、有名な ssl 脆弱性や、HTTPヘッダ、ドメイン関連のチェックや、mysql や redis などのデータベース関連のチェックを行うスクリプトが提供されています。
もちろん、不要なチェックは攻撃と見做される可能性があるため、むやみやたらにチェックを行うべきではないですが、自分で構築したシステムのセキュリティチェックの一環として NSE を利用するという方法は有用そうです。