Nmap で SMB サービスを列挙する

NmapNmapBeginner
今すぐ練習

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

はじめに

この実験では、Nmap を使って SMB(Server Message Block)サービスを列挙する方法を探ります。SMB はネットワークファイル共有プロトコルであり、利用可能な共有を特定することで、対象システムに関する貴重な情報を明らかにすることができます。これを達成するために、smb-enum-shares Nmap Scripting Engine(NSE)スクリプトを使用します。

この実験では、対象マシン上の SMB 共有を列挙するために Nmap コマンドを実行し、対象 IP アドレス(例えば、192.168.1.1 またはローカルホストの場合は 127.0.0.1)を指定し、利用可能な共有、その種類、および関連付けられたコメントを特定するために出力を解釈します。また、冗長性を追加したり、結果をファイルに保存したり、出力をバナースキャンと比較したりすることも検討します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) 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/os_version_detection("OS and Version Detection") 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/save_output -.-> lab-547099{{"Nmap で SMB サービスを列挙する"}} nmap/port_scanning -.-> lab-547099{{"Nmap で SMB サービスを列挙する"}} nmap/target_specification -.-> lab-547099{{"Nmap で SMB サービスを列挙する"}} nmap/verbosity -.-> lab-547099{{"Nmap で SMB サービスを列挙する"}} nmap/os_version_detection -.-> lab-547099{{"Nmap で SMB サービスを列挙する"}} nmap/service_detection -.-> lab-547099{{"Nmap で SMB サービスを列挙する"}} nmap/scripting_basics -.-> lab-547099{{"Nmap で SMB サービスを列挙する"}} nmap/script_management -.-> lab-547099{{"Nmap で SMB サービスを列挙する"}} end

nmap --script smb-enum-shares 192.168.1.1 を使って SMB 列挙を実行する

このステップでは、smb-enum-shares スクリプト付きの Nmap を使って、対象マシン上の SMB 共有を列挙します。SMB(Server Message Block)はネットワークファイル共有プロトコルであり、共有を列挙することで、利用可能なリソースや潜在的な脆弱性など、対象システムに関する貴重な情報を明らかにすることができます。

まず、使用するコマンドを理解しましょう。

  • nmap:これは使用するネットワークマッパーツールです。
  • --script smb-enum-shares:これは Nmap に smb-enum-shares NSE(Nmap Scripting Engine)スクリプトを使用するように指示します。このスクリプトは、SMB 共有を列挙するために特別に設計されています。
  • 192.168.1.1:これは対象 IP アドレスです。重要:これを、スキャンしたい対象マシンの実際の IP アドレスに置き換える必要があります。特定の対象がない場合、テスト目的で 127.0.0.1(localhost)を使用できますが、これは自分自身のマシンのみをスキャンすることになりますのでご注意ください。

では、コマンドを実行しましょう。Xfce ターミナルを開き、次のコマンドを入力してから Enter キーを押します。

nmap --script smb-enum-shares 192.168.1.1

重要192.168.1.1 を対象の実際の IP アドレスに置き換えてください。ローカルでテストする場合は、127.0.0.1 を使用できます。

出力には、SMB 共有列挙の結果が表示されます。出力は次のようになるかもしれません(正確な出力は対象システムによって異なります)。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00043s latency).
Not shown: 999 filtered ports
PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\192.168.1.1\IPC$:
|     type: STYPE_IPC_HIDDEN
|     comment: Remote IPC
|     flags: 0x80000000
|   \\192.168.1.1\ADMIN$:
|     type: STYPE_DISKTREE
|     comment: Remote Admin
|     flags: 0x0
|_  \\192.168.1.1\C$:
|     type: STYPE_DISKTREE
|     comment: Default share
|     flags: 0x0

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

この出力には、Nmap が対象システムで見つけた SMB 共有が表示されています。共有名(例えば、IPC$ADMIN$C$)、その種類、コメント、およびフラグを見ることができます。この情報は、潜在的な攻撃ベクトルや設定ミスを特定するのに役立ちます。

nmap --script smb-enum-shares -p 445 127.0.0.1 でポート 445 をスキャンする

このステップでは、SMB と一般的に関連付けられる特定のポート 445 をスキャンすることに焦点を当てます。ポートを指定することで、スキャンを絞り込み、おそらく結果をより速く取得することができます。これまでと同じ smb-enum-shares スクリプトを使用しますが、今回は Nmap にポート 445 のみをスキャンするように指示します。

コマンドを分解してみましょう。

  • nmap:ネットワークマッパーツール。
  • --script smb-enum-shares:SMB 共有列挙に使用する NSE スクリプトを指定します。
  • -p 445:このオプションは Nmap にポート 445 のみをスキャンするように指示します。これを指定しないと、Nmap は一般的に使用されるポートの範囲をスキャンします。
  • 127.0.0.1:これは対象 IP アドレスで、この場合は localhost です。これは自分自身のマシン上で実行されている SMB サービスをスキャンしていることを意味します。

では、Xfce ターミナルを開き、次のコマンドを実行しましょう。

nmap --script smb-enum-shares -p 445 127.0.0.1

出力には、ポート 445 に特化した SMB 共有列挙の結果が表示されます。出力は次のようになるかもしれません。

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

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\127.0.0.1\IPC$:
|     type: STYPE_IPC_HIDDEN
|     comment: Remote IPC
|     flags: 0x80000000
|   \\127.0.0.1\ADMIN$:
|     type: STYPE_DISKTREE
|     comment: Remote Admin
|     flags: 0x0
|_  \\127.0.0.1\C$:
|     type: STYPE_DISKTREE
|     comment: Default share
|     flags: 0x0

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

前のステップと同じような出力が得られますが、今回はポート 445 を特定の対象としています。SMB が特定のポートで実行されており、不必要な他のポートのスキャンを避けたい場合に役立ちます。

nmap -v --script smb-enum-shares 192.168.1.1 で詳細表示を追加する

このステップでは、Nmap スキャンに詳細表示を追加します。詳細表示により、Nmap が何を行っているかを理解したり、問題のトラブルシューティングに役立つよう、より詳細な出力が得られます。-v オプションを使用すると、詳細レベルが上がります。

コマンドを見てみましょう。

  • nmap:ネットワークマッパーツール。
  • -v:このオプションにより詳細レベルが上がります。さらに多くの -v オプション(例えば、-vv)を追加すると、さらに詳細な表示になります。
  • --script smb-enum-shares:SMB 共有列挙に使用する NSE スクリプトを指定します。
  • 192.168.1.1:対象 IP アドレスです。これを、対象の実際の IP アドレスに置き換えてください。

では、Xfce ターミナルを開き、次のコマンドを実行しましょう。

nmap -v --script smb-enum-shares 192.168.1.1

重要192.168.1.1 を対象の実際の IP アドレスに置き換えてください。ローカルでテストしており、SMB が有効になっていない場合、出力に大きな違いは見られないかもしれません。

出力は、以前のスキャンよりも詳細になります。スキャンの進行状況、実行されているスクリプト、発生したエラーに関する情報がさらに多く表示されます。たとえば、次のような出力が得られるかもしれません。

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
NSE: Loaded 1 script for scanning.
Initiating Ping Scan at 10:10
Scanning 192.168.1.1 [4 ports]
Completed Ping Scan at 10:10, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 10:10
Completed Parallel DNS resolution of 1 host. at 10:10, 0.00s elapsed
Initiating Connect Scan at 10:10
Scanning 192.168.1.1 [1000 ports]
Discovered open port 445/tcp on 192.168.1.1
Completed Connect Scan at 10:10, 0.12s elapsed (1000 total ports)
Initiating Service scan at 10:10
Scanning 1 service on 192.168.1.1
Completed Service scan at 10:10, 6.41s elapsed (1 service total)
NSE: Starting runlevel 1 (of 1) scan.
NSE: Running script smb-enum-shares on 192.168.1.1.
Nmap scan report for 192.168.1.1
Host is up (0.00038s latency).
Not shown: 999 filtered ports
PORT    STATE SERVICE
445/tcp open  microsoft-ds
Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\192.168.1.1\IPC$:
|     type: STYPE_IPC_HIDDEN
|     comment: Remote IPC
|     flags: 0x80000000
|   \\192.168.1.1\ADMIN$:
|     type: STYPE_DISKTREE
|     comment: Remote Admin
|     flags: 0x0
|_  \\192.168.1.1\C$:
|     type: STYPE_DISKTREE
|     comment: Default share
|     flags: 0x0

NSE: Script Post-scanning.
Nmap done: 1 IP address (1 host up) scanned in 7.01 seconds

詳細な出力には、Nmap スキャンのさまざまな段階が表示されます。ピングスキャン、DNS 解決、接続スキャン、サービススキャン、そして smb-enum-shares スクリプトの実行などです。この詳細レベルは、デバッグやスキャンプロセスの理解にとても役立ちます。

nmap --script smb-enum-shares -oN smb.txt 127.0.0.1 で SMB の結果を保存する

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

コマンドを分解してみましょう。

  • nmap:ネットワークマッパーツール。
  • --script smb-enum-shares:SMB 共有列挙に使用する NSE スクリプトを指定します。
  • -oN smb.txt:このオプションは Nmap に出力を通常の形式で smb.txt という名前のファイルに保存するよう指示します。ファイルは現在のディレクトリ(この場合は ~/project)に保存されます。
  • 127.0.0.1:これは対象 IP アドレスで、この場合は localhost です。

では、Xfce ターミナルを開き、次のコマンドを実行しましょう。

nmap --script smb-enum-shares -oN smb.txt 127.0.0.1

スキャンが完了すると、ターミナルに出力が表示されません。代わりに、結果は ~/project ディレクトリ内の smb.txt という名前のファイルに保存されます。

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

cat smb.txt

ターミナルに Nmap スキャン結果が表示されるはずです。出力は前のステップで見たものと似ているはずですが、今回はファイルにも保存されています。

## Nmap 7.80 scan initiated Fri Oct 27 10:15:00 2023 as: nmap --script smb-enum-shares -oN smb.txt 127.0.0.1
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\127.0.0.1\IPC$:
|     type: STYPE_IPC_HIDDEN
|     comment: Remote IPC
|     flags: 0x80000000
|   \\127.0.0.1\ADMIN$:
|     type: STYPE_DISKTREE
|     comment: Remote Admin
|     flags: 0x0
|_  \\127.0.0.1\C$:
|     type: STYPE_DISKTREE
|     comment: Default share
|     flags: 0x0
## Nmap done at Fri Oct 27 10:15:01 2023 -- 1 IP address (1 host up) scanned in 1.23 seconds

また、ls -l コマンドを使用して、ファイルサイズと変更日を確認することもできます。

ls -l smb.txt

これにより、smb.txt ファイルのサイズ、変更日、および権限に関する情報が表示されます。

Xfce ターミナルで SMB 共有を確認する

このステップでは、前のステップで特定された SMB 共有を確認します。Nmap スキャン結果が含まれる smb.txt ファイルの内容を表示するために、cat コマンドを使用します。その後、出力の解釈方法と潜在的なセキュリティ脆弱性の特定方法について説明します。

まず、Xfce ターミナルを開き、cat コマンドを使用して smb.txt ファイルの内容を表示します。

cat smb.txt

出力には、特定された SMB 共有を含む Nmap スキャン結果が表示されます。たとえば、次のような出力が得られるかもしれません。

## Nmap 7.80 scan initiated Fri Oct 27 10:20:00 2023 as: nmap --script smb-enum-shares -oN smb.txt 127.0.0.1
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).
PORT    STATE SERVICE
445/tcp open  microsoft-ds
Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\127.0.0.1\IPC$:
|     type: STYPE_IPC_HIDDEN
|     comment: Remote IPC
|     flags: 0x80000000
|   \\127.0.0.1\ADMIN$:
|     type: STYPE_DISKTREE
|     comment: Remote Admin
|     flags: 0x0
|_  \\127.0.0.1\C$:
|     type: STYPE_DISKTREE
|     comment: Default share
|     flags: 0x0
## Nmap done at Fri Oct 27 10:20:01 2023 -- 1 IP address (1 host up) scanned in 1.23 seconds

出力を分析してみましょう。

  • \\127.0.0.1\IPC$:これはプロセス間通信共有で、同じマシン上またはネットワークを介したプロセス間の通信に使用されます。通常は非表示(STYPE_IPC_HIDDEN)で、システム機能に使用されます。
  • \\127.0.0.1\ADMIN$:これは管理共有で、Windows システムディレクトリへのアクセスを提供します。通常、管理者によってリモート管理に使用されます。
  • \\127.0.0.1\C$:これは C ドライブの既定の共有です。管理者が C ドライブ全体にリモートアクセスできるようにします。

これらの共有は、Windows システムによく存在します。ただし、それらの権限を確認し、適切にセキュリティ保護されていることを確認することが重要です。たとえば、ADMIN$C$ 共有は通常、管理者のみがアクセスできるように設定する必要があります。これらの共有が不正なユーザーにアクセス可能である場合、セキュリティ脆弱性につながる可能性があります。

次のステップでは、これらの結果をバナースキャンと比較して、対象システムに関するさらに多くの情報を収集します。

Xfce ターミナルでバナースキャンと比較する

このステップでは、Nmap を使ってバナースキャンを行い、前のステップの SMB 共有列挙結果と比較します。バナーグラビングにより、対象に実行されているオペレーティングシステムとサービスを特定でき、潜在的な脆弱性を特定するための貴重な情報を得ることができます。

まず、Nmap を使ってポート 445 でバナースキャンを行いましょう。Xfce ターミナルを開き、次のコマンドを実行します。

nmap -p 445 -sV 127.0.0.1

このコマンドの解説をします。

  • nmap:ネットワークマッパーツール。
  • -p 445:SMB に使用されるポート 445 を指定します。
  • -sV:バージョン検出を有効にし、対象のポートで実行されているサービスとバージョン情報を特定しようとします。
  • 127.0.0.1:これは対象の IP アドレスで、この場合は localhost です。

コマンドの出力には、ポート 445 で実行されているサービスとそのバージョン情報が表示されます。たとえば、次のような出力が得られるかもしれません。

Starting Nmap 7.80 ( https://nmap.org ) at Fri Oct 27 10:25:00 2023
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).

PORT    STATE SERVICE      VERSION
445/tcp open  microsoft-ds Windows 10 Pro 19042 microsoft-ds

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

この例では、バナースキャンにより、対象が Windows 10 Pro 19042 を実行していることが明らかになりました。この情報を使って、このオペレーティングシステムバージョン固有の潜在的な脆弱性を特定することができます。

では、この情報を前のステップの SMB 共有列挙結果と比較してみましょう。前のステップでは、次の SMB 共有を特定しました。IPC$ADMIN$、および C$。また、対象が Windows 10 Pro 19042 を実行していることも知っています。

これらの情報を組み合わせることで、対象システムとその潜在的な脆弱性のより完全な画像を構築し始めることができます。たとえば、Windows 10 Pro 19042 における SMB 共有に関連する既知の脆弱性を調査し、対象システムが脆弱であるかどうかを判断することができます。

この比較により、対策の優先順位を決定し、最も攻撃のしやすいベクトルに焦点を当てることができます。たとえば、Windows 10 Pro 19042 において、ADMIN$ 共有への不正アクセスを許可する既知の脆弱性が見つかった場合、この脆弱性を悪用することに焦点を当てることができます。

まとめ

この実験では、対象マシン上の SMB 共有を列挙するために、smb-enum-shares スクリプトを使って Nmap をどのように使うかを調べました。SMB はネットワークファイル共有プロトコルであり、共有を列挙することで、利用可能なリソースや潜在的な脆弱性など、対象システムに関する貴重な情報が明らかになることを学びました。列挙には基本コマンド nmap --script smb-enum-shares <target_ip> が使用されました。

さらに、対象ポート(445)を指定したり、-v フラグを使って詳細度を上げたり、-oN オプションを使って出力をファイルに保存したりする練習を行いました。最後に、Xfce ターミナルで SMB 共有を確認し、バナースキャンの結果と比較し、SMB サービスに関する情報を収集するさまざまな方法を示しました。