Nmap で SSL 証明書を検出する

NmapNmapBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Nmap のssl-certスクリプトを使用して SSL 証明書を検出する方法を学びます。この実験では、IP アドレスとドメイン名のスキャンを通じて、サブジェクト、発行者、有効期間などの SSL/TLS 証明書情報を取得して表示する方法を案内します。

Xfce 端末でnmap --script ssl-cert 192.168.1.1nmap --script ssl-cert scanme.nmap.orgのようなコマンドを実行し、ポートの指定、詳細度の増加、結果のファイルへの保存などのオプションを探ります。最後に、証明書の詳細を確認し、サービス検出結果と比較します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/verbosity("Verbosity Levels") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") nmap/NmapGroup -.-> nmap/scripting_basics("Scripting Engine Basics") nmap/NmapGroup -.-> nmap/script_management("Script Categories and Updating") subgraph Lab Skills nmap/output_formats -.-> lab-547096{{"Nmap で SSL 証明書を検出する"}} nmap/save_output -.-> lab-547096{{"Nmap で SSL 証明書を検出する"}} nmap/port_scanning -.-> lab-547096{{"Nmap で SSL 証明書を検出する"}} nmap/target_specification -.-> lab-547096{{"Nmap で SSL 証明書を検出する"}} nmap/verbosity -.-> lab-547096{{"Nmap で SSL 証明書を検出する"}} nmap/service_detection -.-> lab-547096{{"Nmap で SSL 証明書を検出する"}} nmap/scripting_basics -.-> lab-547096{{"Nmap で SSL 証明書を検出する"}} nmap/script_management -.-> lab-547096{{"Nmap で SSL 証明書を検出する"}} end

nmap --script ssl-cert 192.168.1.1 を使って SSL 証明書のスキャンを実行する

このステップでは、Nmap を使って指定された IP アドレスに対して SSL 証明書のスキャンを行います。Nmap は強力なネットワークスキャンツールで、そのスクリプトエンジンにより機能を拡張できます。ssl-certスクリプトは、対象サーバーから SSL/TLS 証明書に関する情報を取得して表示するように設計されています。

まず、基本的なコマンド構造を理解しましょう:

nmap --script ssl-cert <target_ip>

ここで、<target_ip>はスキャンしたいサーバーの IP アドレスです。この場合、IP アドレス192.168.1.1をスキャンします。

次に、Xfce 端末を開きます。~/projectディレクトリにいることを確認してください。もしそうでなければ、cdコマンドを使って移動します:

cd ~/project

次に、以下のコマンドを実行して SSL 証明書のスキャンを行います:

sudo nmap --script ssl-cert 192.168.1.1

パスワードの入力を求められる場合があります。labexユーザーはパスワードなしでsudo権限を持っているため、Enter キーを押してください。

192.168.1.1はプライベート IP アドレスであり、現在のネットワーク設定からアクセスできない場合があります。そのアドレスにサーバーがない場合、スキャンは結果を返さないか、タイムアウトする可能性があります。テスト目的では、SSL 証明書を持っていることがわかっているパブリック IP アドレス、たとえばscanme.nmap.org8.8.8.8を使うことができます。

代わりにscanme.nmap.orgをスキャンしてみましょう:

sudo nmap --script ssl-cert scanme.nmap.org

このコマンドはscanme.nmap.orgに接続し、その SSL 証明書情報を取得しようとします。出力には、証明書のサブジェクト、発行者、有効期間、および任意のサブジェクト代替名(SAN)などの詳細が表示されます。

出力例(実際の出力は異なります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.031s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

Nmap done: 1 IP address (1 host up) scanned in 2.18 seconds

この出力はscanme.nmap.orgの SSL 証明書の詳細を示しており、サブジェクト、発行者、有効日付が含まれています。

nmap --script ssl-cert -p 443 127.0.0.1 を使ってポート 443 をスキャンする

このステップでは、Nmap とssl-certスクリプトを使って特定のポートである 443 をスキャンすることに焦点を当てます。ポート 443 は HTTPS(Hypertext Transfer Protocol Secure)トラフィック用の標準ポートで、インターネット上でのセキュアな通信に使用されます。ポートを指定することで、スキャンを絞り込み、そのポート上で実行されているサービスに特化した SSL 証明書情報を取得できます。

使用するコマンドは以下の通りです:

nmap --script ssl-cert -p 443 127.0.0.1

このコマンドを分解してみましょう:

  • nmap:Nmap のコマンドラインスキャナー。
  • --script ssl-cert:SSL 証明書情報を取得するためにssl-certスクリプトを使用することを指定します。
  • -p 443:このオプションは Nmap に対してポート 443 のみをスキャンするように指示します。
  • 127.0.0.1:これはループバックアドレスで、localhost とも呼ばれます。自分自身のマシンを指します。

次に、Xfce 端末を開き、~/projectディレクトリにいることを確認します:

cd ~/project

localhost のポート 443 をスキャンするには、以下のコマンドを実行します:

sudo nmap --script ssl-cert -p 443 127.0.0.1

127.0.0.1は自分自身のマシンを指すため、このコマンドは LabEx VM 上のポート 443 で実行されている任意のサービスから SSL 証明書を取得しようとします。ポート 443 でリッスンしているサービスがない場合、Nmap はそのポートがクローズされていると報告します。

LabEx VM 上に Web サーバーや他の HTTPS を使用するように構成されたサービスがある場合、以下に似た出力が表示されるはずです(実際の出力は証明書とサーバーの構成によって異なります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).

PORT    STATE SERVICE
443/tcp closed https

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

この例では、出力はポート 443 がクローズされていることを示しています。これは、localhost 上のそのポートでリッスンしているサービスがないことを意味します。サービスが実行されていた場合、出力には前のステップと同様に SSL 証明書の詳細が含まれます。

ポート 443 で HTTPS が有効になっていることがわかっているサーバーに対してこのコマンドをテストしたい場合は、127.0.0.1をそのサーバーの IP アドレスまたはドメイン名に置き換えることができます。たとえば:

sudo nmap --script ssl-cert -p 443 scanme.nmap.org

これはscanme.nmap.orgのポート 443 をスキャンし、その SSL 証明書情報を取得します。

nmap -v --script ssl-cert 192.168.1.1 で詳細表示を追加する

このステップでは、Nmap コマンドに詳細表示を追加します。Nmap における詳細表示とは、スキャン中に表示される情報量を増やすことを意味します。これは、Nmap が何をしているかを理解したり、問題のトラブルシューティングに役立ちます。-vオプションを使用すると詳細レベルが増加します。-vを複数回使用する(例えば、-vvまたは-vvv)と、さらに詳細な表示になります。

使用するコマンドは以下の通りです:

nmap -v --script ssl-cert 192.168.1.1

このコマンドを分解してみましょう:

  • nmap:Nmap のコマンドラインスキャナー。
  • -v:このオプションは詳細レベルを増やし、より詳細な出力を提供します。
  • --script ssl-cert:SSL 証明書情報を取得するためにssl-certスクリプトを使用することを指定します。
  • 192.168.1.1:これは対象の IP アドレスです。

次に、Xfce 端末を開き、~/projectディレクトリにいることを確認します:

cd ~/project

詳細表示付きで SSL 証明書のスキャンを実行するには、以下のコマンドを実行します:

sudo nmap -v --script ssl-cert 192.168.1.1

前述の通り、192.168.1.1はプライベート IP アドレスであり、アクセスできない場合があります。そのアドレスにサーバーがない場合、スキャンは結果を返さないか、タイムアウトする可能性があります。テスト目的では、SSL 証明書を持っていることがわかっているパブリック IP アドレス、たとえばscanme.nmap.orgを使用できます。

詳細表示付きでscanme.nmap.orgをスキャンしてみましょう:

sudo nmap -v --script ssl-cert scanme.nmap.org

出力には、スキャンプロセスに関するさらに多くの情報が含まれます。たとえば、Nmap が経るさまざまなフェーズ、調査するポート、発生するエラーや警告などです。

出力例(実際の出力は異なります):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
NSE: Loaded 1 script for scanning.
Initiating Ping Scan at 10:00
Scanning scanme.nmap.org (45.33.32.156) [2 ports]
Completed Ping Scan at 10:00, 0.03s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:00
Completed Parallel DNS resolution of 1 host. at 10:00, 0.01s elapsed
Initiating Connect Scan at 10:00
Scanning scanme.nmap.org (45.33.32.156) [1000 ports]
Discovered open port 22/tcp on 45.33.32.156
Completed Connect Scan at 10:00, 2.15s elapsed (1000 total ports)
NSE: Script scanning scanme.nmap.org (45.33.32.156)
NSE: Starting runlevel 1 (of 1) scan.
Initiating NSE at 10:00
Completed NSE at 10:00, 0.02s elapsed
Nmap scan report for scanme.nmap.org (45.33.32.156)
Host is up (0.031s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

NSE: Script Post-scanning.
Initiating NSE at 10:00
Completed NSE at 10:00, 0.00s elapsed
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 2.34 seconds

「Initiating Ping Scan」、「Completed Connect Scan」、「NSE: Script scanning」など、スキャンプロセスに関する追加情報に注目してください。この追加の詳細は、Nmap の動作方法を理解したり、問題の診断に役立つ場合があります。

nmap --script ssl-cert -oN ssl.txt 127.0.0.1 で SSL 結果を保存する

このステップでは、Nmap スキャンの結果をファイルに保存する方法を学びます。これは、後で分析するためや、結果を他の人と共有するために便利です。Nmap は、さまざまな形式で出力を保存するためのいくつかのオプションを提供しています。-oNオプションは、「通常の」人が読みやすい形式で出力を保存します。

使用するコマンドは以下の通りです:

nmap --script ssl-cert -oN ssl.txt 127.0.0.1

このコマンドを分解してみましょう:

  • nmap:Nmap のコマンドラインスキャナー。
  • --script ssl-cert:SSL 証明書情報を取得するためにssl-certスクリプトを使用することを指定します。
  • -oN ssl.txt:このオプションは Nmap に対して、通常の形式で出力をssl.txtという名前のファイルに保存するように指示します。
  • 127.0.0.1:これは対象の IP アドレス(localhost)です。

次に、Xfce 端末を開き、~/projectディレクトリにいることを確認します:

cd ~/project

以下のコマンドを実行して、SSL 証明書のスキャンを実行し、結果をssl.txtに保存します:

sudo nmap --script ssl-cert -oN ssl.txt 127.0.0.1

スキャンが完了すると、~/projectディレクトリにssl.txtという名前のファイルが見つかります。このファイルには、Nmap スキャンの出力が含まれており、対象の SSL 証明書情報(あれば)も含まれています。

ファイルが作成され、スキャン結果が含まれていることを確認するには、catコマンドを使ってファイルの内容を表示できます:

cat ssl.txt

127.0.0.1で SSL 証明書を持つサービスが実行されている場合、出力に証明書の詳細が表示されます。サービスが実行されていない場合、ファイルにはスキャンに関する情報が含まれますが、証明書の詳細は含まれません。

たとえば、ポート 443 がクローズされている場合、ssl.txtファイルには以下のような内容が含まれるかもしれません:

## Nmap 7.80 scan initiated Tue Oct 27 10:00:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000086s latency).
PORT    STATE SERVICE
443/tcp closed https
## Nmap done at Tue Oct 27 10:00:00 2023 -- 1 IP address (1 host up) scanned in 0.07 seconds

異なる対象をスキャンして結果を保存したい場合は、127.0.0.1を目的の IP アドレスまたはドメイン名に置き換えます。たとえば:

sudo nmap --script ssl-cert -oN ssl.txt scanme.nmap.org

これはscanme.nmap.orgをスキャンし、結果をssl.txtに保存します。cat ssl.txtを使ってssl.txtの内容を確認して、スキャン結果を確認することを忘れないでください。

Xfce 端末で証明書の詳細を確認する

このステップでは、前のステップでssl.txtファイルに保存した SSL 証明書の詳細を確認します。Xfce 端末でcatコマンドを使ってファイルの内容を表示し、その後証明書情報を調べます。

まず、~/projectディレクトリにいることを確認します:

cd ~/project

次に、catコマンドを使ってssl.txtファイルの内容を表示します:

cat ssl.txt

出力には、対象に SSL 証明書を持つサービスが見つかった場合、Nmap スキャン結果が表示され、その中に SSL 証明書の詳細も含まれます。

出力を分析してみましょう。SSL 証明書情報の重要な部分は通常、以下の通りです:

  • 対象者(Subject):このフィールドには、証明書が発行されるドメイン名またはエンティティが含まれています。対象者フィールド内の共通名(commonName)(CN)属性を探してください。
  • 発行者(Issuer):このフィールドは、証明書を発行した証明機関(CA)を識別します。再び、共通名(commonName)(CN)属性を探してください。
  • 公開鍵の種類(Public Key type):使用される公開鍵アルゴリズムの種類を示します(たとえば、RSA、DSA、ECDSA)。
  • 公開鍵のビット数(Public Key bits):ビット数でキーサイズを指定します(たとえば、2048、4096)。大きなキーサイズは一般的により強力なセキュリティを提供します。
  • 署名アルゴリズム(Signature Algorithm):証明書に署名するために使用されるアルゴリズムを示します(たとえば、sha256WithRSAEncryption)。
  • 有効期限開始日(Not valid before):証明書が有効になる日付と時刻。
  • 有効期限終了日(Not valid after):証明書が期限切れになる日付と時刻。証明書が期限切れでないことを確認することが重要です。
  • MD5/SHA1:これらは証明書のハッシュ値です。MD5 は脆弱と考えられており、SHA1 も段階的に廃止されています。SHA256 以上が好ましいです。
  • -----BEGIN CERTIFICATE-----... -----END CERTIFICATE-----:これは PEM 形式の実際のエンコードされた証明書データです。

たとえば、scanme.nmap.orgをスキャンして出力をssl.txtに保存した場合、出力の関連部分は以下のようになるかもしれません:

PORT   STATE SERVICE
22/tcp open  ssh
| ssl-cert: Subject: commonName=scanme.nmap.org
| Issuer: commonName=Let's Encrypt Authority X3
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2020-03-18T14:23:03+00:00
| Not valid after:  2020-06-16T14:23:03+00:00
| MD5:   ...
| SHA1:  ...
| -----BEGIN CERTIFICATE-----
| ...
| -----END CERTIFICATE-----

この例では、証明書はscanme.nmap.orgのもので、Let's Encrypt Authority X3によって発行され、2048 ビットの RSA キーを使用し、SHA256 で署名されていることがわかります。

これらの詳細を確認することで、対象のサービスが使用する SSL 証明書のセキュリティと有効性についての洞察を得ることができます。

127.0.0.1をスキャンして SSL サービスが実行されていない場合、ssl.txtファイルには詳細な証明書情報が含まれません。その場合は、テスト用の証明書を生成するために、SSL を有効にした簡単な Web サーバーをインストールする必要があります(この実験の範囲外)。

Xfce 端末でのサービス検出と比較する

このステップでは、Nmap のサービス検出機能と取得した SSL 証明書情報を比較します。これにより、検出されたサービスが証明書の詳細と一致するかどうかを確認し、潜在的な不一致を特定できます。

まず、対象に対して標準的な Nmap サービス検出スキャンを実行しましょう。この例では、対象として127.0.0.1を使用します。~/projectディレクトリにいることを確認してください:

cd ~/project

以下のコマンドを実行します:

sudo nmap -sV 127.0.0.1

-sVオプションはサービスバージョン検出を有効にします。Nmap は、各オープンポートで実行されているサービスを特定しようとします。

出力には、オープンポートと検出されたサービスが表示されます。たとえば:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:30 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000058s latency).
Not shown: 999 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
443/tcp open  ssl/http  ## 例:SSLを備えたWebサーバーが実行されている場合

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 5.23 seconds

次に、前のステップで(ssl.txtファイルから)確認した SSL 証明書の詳細とサービス検出結果を比較します。

たとえば、Nmap のサービス検出がポート 443 でssl/httpが実行されていることを特定し、SSL 証明書の対象者(Subject)の共通名(commonName)が Web サーバーに関連付けられたドメイン名と一致する場合、サービス検出と証明書の詳細は一致します。

ただし、不一致がある場合、潜在的な問題が示される可能性があります:

  • 誤ったサービス識別:Nmap がポートで実行されているサービスを誤って識別する可能性があります。
  • 証明書の設定誤り:証明書が提供されるドメイン名と異なるドメイン名に対して発行されている場合があります。
  • 中間者攻撃:攻撃者が接続を傍受し、異なる証明書を提示している可能性があります。

不一致をさらに調査するには、より特定の Nmap スクリプトやopensslなどのツールを使用して、証明書を直接調べることができます。

たとえば、サービス検出がポート 443 でhttpを表示しているが、SSL 証明書が異なるドメインのものである場合、これは警告信号です。これは設定誤りや潜在的な攻撃を示す可能性があります。

要約すると、Nmap のサービス検出と SSL 証明書の詳細を比較することで、対象に実行されているサービスの整合性とセキュリティを確認できます。

まとめ

この実験では、ssl-certスクリプト付きの Nmap を使用して、対象サーバーから SSL/TLS 証明書情報をスキャンして取得しました。nmap --script ssl-cert <target_ip>という基本コマンドを実行して特定の IP アドレスをスキャンする方法を学び、テスト用にscanme.nmap.orgのようなパブリックアドレスを使用することで、プライベート IP アドレスに関する潜在的な問題に対処しました。

また、sudoを使用してスキャンを実行し、証明書の対象者、発行者、有効期間などの詳細を含む出力を観察しました。これは、SSL 証明書分析における Nmap の機能をさらに探求するための基礎を提供します。