
Microsoft ネットワーク サービス フィンガープリンティング ツール
バージョン: 1.0
著者: Laurent Gaffie
会社: Secorizon
MSFinger は、内部ネットワークの偵察(リコンサンス)向けに設計された高性能ネットワークフィンガープリンティングツールです。SMB、LDAP、LDAPS プロトコル全体で Microsoft サービスを迅速に識別し、セキュリティ設定を検出して、潜在的な脆弱性を強調表示します。
主な特徴:
MSFinger は純粋な Python で書かれています。Python 3.6+ 以外の追加依存関係は必要ありません。
cd /path/to/MSFinger
chmod +x MSFinger.py
python3 MSFinger.py -i <target> [options]
* -i または -f のいずれかを指定する必要があります
python3 MSFinger.py -i 192.168.1.10
python3 MSFinger.py -i 192.168.1.0/24
python3 MSFinger.py -i 192.168.1.1-50
python3 MSFinger.py -f targets.txt
targets.txt の例:
192.168.1.0/24
10.0.0.1-100
172.16.5.50
# Comments are supported
192.168.2.0/25
# Faster scan with shorter timeout and more workers
python3 MSFinger.py -i 10.0.0.0/16 -t 0.3 -w 200
# More reliable scan with longer timeout
python3 MSFinger.py -i 192.168.1.0/24 -t 1.0 -w 50
python3 MSFinger.py -i 192.168.1.0/24 -d pentest_2026.db
python3 MSFinger.py -i 192.168.1.0/24 --no-color > scan_results.txt
結果は色分けされたセキュリティインジケーターとともにリアルタイムで表示されます:
[192.168.1.10] SMB: 3.1.1, Signing: required, OS: Windows Server 2022 21H2, Domain: CORP.LOCAL, Boot: 2026-01-01 10:30:15 | SMB1: disabled | Services: RDP, LDAP (signing: required), LDAPS (signing: required, channel binding: required)
SMB 情報:
SMB: X.X.X - SMB ダイアレクトバージョン(2.0.2、2.1、3.0、3.0.2、3.1.1)Signing: <status> - required(必須)/enabled(有効)/disabled(無効)OS: <version> - ビルド番号付きの Windows バージョンDomain: <name> - NetBIOS ドメイン/ワークグループ名Boot: <time> - システム起動時間(または Disabled/Unknown)SMB1 ステータス:
SMB1: disabled - SMB1 非対応(安全)SMB1: supported, Signing: <status> - SMB1 有効(潜在的なリスク)サービス:
RDP - リモートデスクトッププロトコル(ポート3389)が開いているMSSQL - Microsoft SQL Server(ポート1433)が開いているLDAP (signing: <status>) - ポート389の LDAPLDAPS (signing: <status>, channel binding: <status>) - ポート636の LDAPSLDAPS (port open, <error>) - LDAPS ポートは応答するが SSL ハンドシェイクに失敗MSFinger はすべてのスキャン結果を、永続保存と分析のために SQLite データベースに保存します。
hosts# View all vulnerable hosts (no SMB signing)
sqlite3 MSFinger.db "SELECT ip, os_version, smb_signing FROM hosts WHERE smb_signing != 'required'"
# Find hosts with LDAP signing disabled
sqlite3 MSFinger.db "SELECT ip, domain, ldap_signing FROM hosts WHERE ldap_signing = 'not_required'"
# List all Windows Server 2022 hosts
sqlite3 MSFinger.db "SELECT ip, os_version, domain FROM hosts WHERE os_version LIKE '%Server 2022%'"
# Export to CSV
sqlite3 -header -csv MSFinger.db "SELECT * FROM hosts" > results.csv
# Count hosts by OS
sqlite3 MSFinger.db "SELECT os_version, COUNT(*) FROM hosts GROUP BY os_version"
テストされるプロトコル:
収集される情報:
required - サーバーがメッセージ署名を必須とする(安全)enabled - サーバーは署名をサポートするが必須ではないdisabled - 署名をサポートしていない(脆弱)OS バージョンのマッピング:
匿名バインドをテストして署名要件を判定します:
LDAP バインドを使用した SSL/TLS 接続をテストします:
考えられる結果:
signing: required, channel binding: required - 最大限のセキュリティ(安全)signing: not_required, channel binding: not_required - 保護なし(脆弱)port open, SSL handshake failed - ポートは応答するが SSL ネゴシエーションに失敗port open, Connection error: 104 - 接続がピアによってリセットされたSMB 署名の無効化:
LDAP 署名が必須ではない:
LdapEnforceChannelBinding=2 と LDAPServerIntegrity=2 を設定するチャネルバインディングなしの LDAPS:
SMB 署名が有効(必須ではない):
SMB1 のサポート:
SMB 署名が必須:
LDAP/LDAPS 署名が必須:
チャネルバインディングの強制:
| ネットワークタイプ |
|---|
各ワーカーは最小限のメモリ(約1〜2MB)を消費します。システムリソースに応じてワーカー数を調整してください:
# High-performance scan (requires good CPU/RAM)
python3 MSFinger.py -i 10.0.0.0/8 -t 0.5 -w 500
# Conservative scan (low resource usage)
python3 MSFinger.py -i 192.168.0.0/16 -t 2.0 -w 50
ネットワーク接続を確認:
ping <target_ip>
telnet <target_ip> 445
タイムアウトを増やす:
python3 MSFinger.py -i <target> -t 3.0
ファイアウォールのルールを確認:
"SSL handshake failed" または "Connection error: 104":
openssl s_client -connect <ip>:636 を試す複数のプロセスからスキャンする場合:
# Use different database files
python3 MSFinger.py -i 192.168.1.0/24 -d scan1.db &
python3 MSFinger.py -i 192.168.2.0/24 -d scan2.db &
スクリプトに実行権限があることを確認してください:
chmod +x MSFinger.py
まず稼働中の SMB ホストを特定し、その後フィンガープリントします:
nmap -p445 --open -oG - 192.168.1.0/24 | awk '/445\/open/{print $2}' > smb_hosts.txt
python3 MSFinger.py -f smb_hosts.txt
cron を使用してネットワークの変更を監視します:
# Add to crontab (every day at 2 AM)
0 2 * * * /usr/bin/python3 /path/to/MSFinger.py -i 192.168.1.0/24 -d /var/scans/daily_scan.db
PowerShell からクエリを実行して修復します:
# Install SQLite PowerShell module
Install-Module -Name SimplySql
# Query vulnerable hosts
Open-SQLiteConnection -DataSource "MSFinger.db"
$vulnerable = Invoke-SqlQuery -Query "SELECT ip FROM hosts WHERE smb_signing != 'required'"
Close-SqlConnection
# Remediate
foreach ($host in $vulnerable) {
Set-SmbServerConfiguration -ComputerName $host.ip -RequireSecuritySignature $true -Force
}
著者: Laurent Gaffie ([email protected])
ライセンス: GNU General Public License v3.0
このプログラムはフリーソフトウェアです。フリーソフトウェア財団によって発行された GNU 一般公衆利用許諾書(GNU General Public License)バージョン3、または(選択により)それ以降のバージョンの条項に基づいて、これを再頒布および/または改変することができます。
このプログラムは、有用であることを期待して頒布されますが、いかなる保証もありません。商品性または特定目的への適合性についての暗黙の保証も含め、一切の保証なしに頒布されます。詳細については GNU 一般公衆利用許諾書を参照してください。
| オプション | 説明 | デフォルト |
|---|
-i, --ip | 対象の IP、CIDR レンジ、または IP レンジ | 必須* |
-f, --file | 対象を1行に1つずつ記述したファイル | 必須* |
-t, --timeout | 接続タイムアウト(秒) | 1.0 |
-w, --workers | 同時実行ワーカー数 | 100 |
-d, --database | 結果を保存する SQLite データベースファイル | MSFinger.db |
--no-color | 色付き出力を無効にする | 無効 |
| 列 | 型 | 説明 |
|---|
id | INTEGER | 主キー(自動インクリメント) |
ip | TEXT | IP アドレス(一意) |
hostname | TEXT | ホスト名(将来の使用のために予約済み) |
os_version | TEXT | オペレーティングシステムのバージョン |
os_build | INTEGER | OS ビルド番号 |
domain | TEXT | ドメイン/ワークグループ名 |
boot_time | TEXT | システム起動タイムスタンプ |
smb_dialect | TEXT | SMB プロトコルバージョン |
smb_signing | TEXT | SMB 署名ステータス |
smb1_supported | INTEGER | SMB1 有効(0=いいえ、1=はい) |
smb1_signing | TEXT | SMB1 署名ステータス |
rdp_open | INTEGER | RDP ポートが開いている(0=いいえ、1=はい) |
mssql_open | INTEGER | MSSQL ポートが開いている(0=いいえ、1=はい) |
ldap_signing | TEXT | LDAP 署名ステータス |
ldaps_signing | TEXT | LDAPS 署名ステータス |
ldaps_channel_binding | TEXT | LDAPS チャネルバインディングステータス |
ldaps_error | TEXT | LDAPS 接続エラー(ある場合) |
scan_time | TIMESTAMP | 最初のスキャンのタイムスタンプ |
last_seen | TIMESTAMP | 最新のスキャンのタイムスタンプ |
| ビルド範囲 | オペレーティングシステム |
|---|
| 10240 | Windows 10 1507 |
| 14393 | Windows 10 1607 / Server 2016 |
| 17763 | Windows 10 1809 / Server 2019 |
| 19041-19045 | Windows 10 20H2 - 22H2 |
| 20348 | Windows Server 2022 21H2 |
| 22000+ | Windows 11 |
| 25398 | Windows Server 2025 |
| 推奨タイムアウト |
|---|
| ワーカー数 |
|---|
| 高速な内部 LAN(1Gbps以上) | 0.5秒 | 200-300 |
| 通常の内部ネットワーク | 1.0秒(デフォルト) | 100-150 |
| 低速/ワイヤレスネットワーク | 2.0〜3.0秒 | 50-100 |
| VPN 接続 | 3.0〜5.0秒 | 30-50 |