はじめに
SMB(Server Message Block)は、Windowsネットワークで最もよく使われるファイル共有プロトコルです。
企業ネットワークではほぼ必ず存在するため、Red Team / Pentester が最初に列挙するサービスの一つです。
SMB Enumeration の目的は次の情報を取得することです。
- 共有フォルダ(Shared Folders)
- ユーザー一覧
- グループ情報
- OS情報
- ドメイン情報
- パスワードポリシー
- アクセス可能なファイル
これらの情報は 横展開(Lateral Movement)や権限昇格のヒントになります。
1.SMBとは
SMBはWindowsで使われるネットワーク共有プロトコルです。
主に次の用途で使われます。
- ファイル共有
- プリンタ共有
- Active Directory通信
- 管理共有(ADMIN$, C$, IPC$)
通常は次のポートを使用します。
| ポート | 説明 |
|---|---|
| 445 | SMB over TCP(現在主流) |
| 139 | NetBIOS Session Service |
| 137 | NetBIOS Name Service |
| 138 | NetBIOS Datagram |
2. nmapによるSMB列挙
最初に使うツールは nmap です。
SMBポートの確認
nmap -p445,139 TARGET_IP
例
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
SMB情報取得スクリプト
nmapにはSMB専用スクリプトがあります。
nmap --script smb-os-discovery -p445 TARGET_IP
取得できる情報
- OS
- コンピュータ名
- ドメイン
- NetBIOS名
例
OS: Windows Server 2019
Computer name: FILESERVER
Domain: corp.local
共有フォルダの列挙
nmap --script smb-enum-shares -p445 TARGET_IP
例
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
Public Disk
ユーザー列挙
nmap --script smb-enum-users -p445 TARGET_IP
例
user: administrator
user: john
user: guest
SMB脆弱性チェック
nmap --script smb-vuln* -p445 TARGET_IP
有名な脆弱性
- MS17-010(EternalBlue)
- SMBGhost
- SMB Signing Disabled
3. enum4linux
enum4linux はSMB列挙ツールとして非常に有名です。
内部的には次のツールを組み合わせています。
- smbclient
- rpcclient
- nmblookup
基本コマンド
enum4linux TARGET_IP
すべて列挙
enum4linux -a TARGET_IP
取得できる情報
- ユーザー
- グループ
- 共有フォルダ
- OS
- パスワードポリシー
- ドメイン
共有フォルダ
Sharename Type
--------- ----
IPC$ IPC
ADMIN$ Disk
Public Disk
ユーザー列挙
administrator
guest
john
mary
パスワードポリシー
Minimum password length: 8
Password history length: 24
Lockout threshold: 5
この情報は ブルートフォース攻撃の戦略に役立ちます。
4. smbclient
smbclient はSMB共有に直接アクセスするツールです。
Linux版のSMBクライアントです。
共有一覧
smbclient -L //TARGET_IP -N
-N は 匿名ログイン
例
Sharename Type
--------- ----
IPC$ IPC
Public Disk
Users Disk
共有フォルダに接続
smbclient //TARGET_IP/Public -N
成功すると
smb: \>
smbclient コマンド
| コマンド | 説明 |
|---|---|
| ls | ファイル一覧 |
| cd | ディレクトリ移動 |
| get | ダウンロード |
| put | アップロード |
| exit | 終了 |
例
smb: \> ls
secret.txt
passwords.docx
ファイル取得
get secret.txt
5. rpcclient
SMB RPCを使って情報取得できます。
匿名ログイン
rpcclient -U "" TARGET_IP
ユーザー列挙
enumdomusers
例
user:[administrator]
user:[john]
user:[mary]
グループ列挙
enumdomgroups
SID取得
lookupnames administrator
6. smbmap
もう一つ便利なツールが smbmap です。
smbmap -H TARGET_IP
出力例
Share Permissions
----- -----------
ADMIN$ NO ACCESS
Public READ
Users READ, WRITE
7. Red TeamでのSMB Enumerationの流れ
実際のペネトレーションテストでは次の順番が多いです。
1 nmap
↓
2 enum4linux
↓
3 smbclient
↓
4 rpcclient
↓
5 smbmap
図で表すと
Target Host
│
│
nmap
│
▼
SMB Detection
│
▼
enum4linux
│
▼
User / Share Enumeration
│
▼
smbclient
│
▼
File Access
8. SMB Enumerationで見つかる重要情報
レッドチームが探す情報
機密ファイル
password.txt
backup.zip
database.sql
資格情報
config.ini
web.config
.env
スクリプト
backup.ps1
deploy.sh
9. SMB Enumeration が重要な理由
SMBは企業ネットワークの中心です。
理由
- Windows環境では必ず存在
- Active Directoryと密接
- 機密ファイルが置かれている
- 横展開に利用できる
そのため 最も価値の高い列挙ポイントの一つです。
まとめ
SMB Enumerationはペネトレーションテストで非常に重要です。
主要ツール
| ツール | 用途 |
|---|---|
| nmap | SMB検出 |
| enum4linux | 情報収集 |
| smbclient | 共有アクセス |
| rpcclient | RPC情報 |
| smbmap | 権限確認 |
典型的な流れ
nmap
↓
enum4linux
↓
smbclient
↓
rpcclient
↓
smbmap
SMBを正しく列挙できると、
- ユーザー情報
- 共有フォルダ
- パスワード
- 機密データ
などを取得でき、ネットワーク侵入の突破口になることが多いです。