Kali Tools #016|Enum4linux(enum4linux-ng):SMB列挙でWindows環境を可視化するツール

※本記事は学習用途・自己所有環境のみを対象とし、他者環境への無断スキャンは不正アクセス禁止法に該当します。

Windows環境は、侵入さえ防げば安全。そう考えられがちですが、現実はもう少し厄介です。

Enum4linux は、SMB という正規の通信を使って、Windows/Samba 環境から情報を「列挙」するツールです。

脆弱性を突くわけでも、管理者権限を奪うわけでもありません。ただ、相手に問いかけているだけです。

それにもかかわらず、ユーザー名、グループ構成、共有フォルダ、パスワードポリシーといった情報が、設定次第では次々と見えてしまいます。

多くの場合、攻撃者が最初に得るのは「侵入口」ではなく、「設計の癖」や「運用上の甘さ」です。

本記事では、SMB 列挙ツールである Enum4linux と、その後継として登場した enum4linux-ng を取り上げます。これらのツールが何を見て、何を可視化し、そして防御側にどのような現実を突きつけるのかを整理していきます。

脆弱性がなくても、情報は漏れる。

Enum4linux は、その事実を静かに、しかしはっきりと示してくれるツールです。


Enum4linuxとは何か

Enum4linux は、SMB(Server Message Block)を利用して、Windows や Samba 環境の情報を列挙するためのツールです。Kali Linux に標準搭載されており、内部ネットワーク調査や侵入後の状況把握で広く使われています。

重要なのは、Enum4linux が 脆弱性攻撃ツールではないという点です。バッファオーバーフローを突いたり、未修正の欠陥を悪用したりするわけではありません。SMB が本来備えている機能を使い、「どんな情報を返してくれるのか」を確認しているだけです。

言い換えるなら、Enum4linux はWindows 環境が“どこまで正直に情報を話してしまうか”を可視化するツールだと言えます。

SMB は、ファイル共有やプリンタ共有、認証連携など、Windows 環境では欠かせない基盤技術です。その一方で、設定や運用が甘い場合、ユーザー一覧やグループ構成、共有フォルダといった内部情報を、認証なし、あるいは極めて限定的な権限で返してしまうことがあります。

Enum4linux は、そうした 「本来は意識されにくい情報露出」 を一括で洗い出します。管理者から見れば設定確認ツール、攻撃者から見れば偵察ツール。立場によって評価が分かれるのは、このツールが“攻撃そのもの”ではなく、“現状確認”に近い性質を持っているからです。

そしてもう一つ重要なのが、Enum4linux の結果は、単体では被害に見えにくいという点です。しかし、この列挙結果が、後続の攻撃や横展開の精度を大きく左右します。

Enum4linux は、派手な警告を出しません。ただ静かに、Windows 環境の設計や運用が抱える前提を、そのまま映し出すツールです。


Enum4linuxが対象とする環境

Enum4linux は、インターネット越しに無差別に使われるツールではありません。基本的な前提は、すでに内部ネットワークに到達していることです。

対象となるのは、主に次のような環境です。

  • Windows サーバーを含む社内ネットワーク

  • Active Directory を構成するドメイン環境

  • Linux 上で Samba を使って Windows 互換の共有を提供している環境

いずれも共通しているのは、SMB が業務インフラとして“当たり前に動いている”という点です。

多くの組織では、SMB は「ファイル共有のために必要なもの」「社内だから安全なもの」として扱われがちです。その結果、アクセス制御や情報公開範囲の見直しが後回しになりやすい傾向があります。

Enum4linux が力を発揮するのは、まさにこの領域です。ドメイン参加端末が増え、ユーザーやグループが複雑化し、共有フォルダが積み重なった環境ほど、「誰が、どこまで見えているのか分からない状態」が生まれやすくなります。

また、Active Directory 環境に限らず、

  • NAS を Samba で公開している

  • 検証用に作った共有がそのまま残っている

  • 古い設定を引き継いだまま運用している

といった中小規模のネットワークでも、Enum4linux は有効です。むしろ、設計やレビューの機会が少ない環境ほど、列挙できる情報は多くなりがちです。

ここで重要なのは、Enum4linux が「特別な失敗」を探しているわけではないという点です。
管理者が想定していなかっただけの挙動、長年問題にならなかった設定、その積み重ねが、そのまま列挙結果として表に出てきます。

Enum4linux は、「この環境は守られているか?」ではなく、「この環境は、何を返してしまっているか?」を確認するツールです。


Enum4linuxで何が取得できるのか

Enum4linux が行うのは、SMB 経由で取得可能な情報を機械的に洗い出すことです。派手な挙動はありませんが、結果として得られる情報は多岐にわたります。

代表的なものは、以下のとおりです。

  • ユーザーアカウントの一覧

  • グループ情報(管理者グループを含む)

  • 共有フォルダの一覧とアクセス可否

  • パスワードポリシー

  • ドメイン名、ホスト名、OS 情報

一つひとつを見ると、致命的な情報に見えないかもしれません。しかし、ここに Enum4linux の本当の危険性があります。

例えば、ユーザー一覧です。パスワードは分からなくても、「存在するユーザー名」が分かるだけで、後続の攻撃は一気に効率化されます。無差別な総当たりではなく、実在するアカウントだけを狙えるようになるからです。

グループ情報も同様です。Domain Admins や管理者相当のグループ構成が見えれば、「どのアカウントが特に価値を持つか」が明確になります。

共有フォルダの列挙は、さらに厄介です。読み取り可能な共有が一つでもあれば、設定ファイルやスクリプト、バックアップデータなど、思わぬ情報が平文で置かれているケースは珍しくありません。

ここで重要なのは、これらが 認証なし、あるいは極めて低い権限で取得できてしまう場合があるという点です。

管理者の視点では「内部向けだから問題ない」と思っていた情報が、攻撃者の視点では「次の一手を決めるための地図」になります。

パスワードポリシーも、その一例です。文字数や複雑性、ロックアウト条件が分かれば、「試してもいい回数」や「現実的な攻撃手法」を判断できます。

Enum4linux は、こうした情報を個別に評価しません。ただ淡々と並べるだけです。しかし、並んだ瞬間に意味を持ってしまうのが、列挙情報の怖さです。

脆弱性がなくても、侵入に成功していなくても、環境の輪郭はここまで見えてしまう。

Enum4linux が示すのは、「何が守られていないか」ではなく、「何が普通に見えてしまっているか」という現実です。


基本的な使い方(Enum4linux)

Enum4linux の使い方は非常にシンプルです。最も基本的な実行例は、次のようになります。

enum4linux -a 192.168.1.10

-a オプションは、「取得できる情報を一通り列挙する」という指定です。実務でも検証でも、まずはこの一発を投げることがほとんどでしょう。

初めて実行すると、多くの人が「出力が多い」「荒い」「何が重要か分からない」感じるかもしれません。しかし、この雑多さこそが Enum4linux の特徴です。

Starting enum4linux v0.9.1

=========================================
|    Target Information    |
=========================================

Target ........... 192.168.1.10
RID Range ........ 500-550
Username ......... ''
Password ......... ''

=========================================
|    Enumerating Workgroup/Domain    |
=========================================

[+] Got domain/workgroup name: WORKGROUP

=========================================
|    Session Check    |
=========================================

[+] Server allows session using username '', password ''

=========================================
|    OS information    |
=========================================

[+] Got OS info for 192.168.1.10 from smbclient:
    OS: Windows Server 2016 Standard
    Computer name: FILESRV01
    Domain name: CORP
    SMB Version: SMBv2

=========================================
|    Users on 192.168.1.10    |
=========================================

index: 0x1 RID: 0x3e8 acb: 0x00000010 Account: administrator  Name: Administrator
index: 0x2 RID: 0x3ea acb: 0x00000010 Account: user01         Name: User One
index: 0x3 RID: 0x3eb acb: 0x00000010 Account: user02         Name: User Two

=========================================
|    Groups on 192.168.1.10    |
=========================================

group:[Domain Admins] rid:[0x200]
group:[Domain Users]  rid:[0x201]

=========================================
|    Share Enumeration    |
=========================================

Sharename       Type      Comment
---------       ----      -------
ADMIN$          Disk      Remote Admin
C$              Disk      Default share
Public          Disk      Public Share

[+] Attempting to access shares...

[+] Public: READ access allowed

=========================================
|    Password Policy Information    |
=========================================

[+] Password Complexity: Enabled
[+] Minimum Password Length: 8
[+] Account Lockout Threshold: 0

出力を見るときの基本姿勢

Enum4linux の出力は、

  • 成功

  • 失敗

  • 権限不足

が混在します。

ここで重要なのは、エラーが出ている=何も取れていない、ではないという点です。

例えば、

  • 一部のユーザー列挙は失敗

  • 共有フォルダ一覧は取得成功

  • パスワードポリシーは取得成功

といったケースは珍しくありません。

攻撃者視点では、「全部取れるか」ではなく、「一つでも使える情報があるか」が判断基準になります。


特に注目すべき出力ポイント

出力の中で、まず確認すべきなのは次の項目です。

ユーザー一覧

  • 実在するアカウント名が並んでいないか

  • 管理者らしき名前が含まれていないか

ここが取れていれば、後続の攻撃の精度は大きく上がります。

グループ情報

  • 管理者グループの名称

  • 特定ユーザーが強い権限を持っていないか

ユーザー名と組み合わせることで、価値の高いアカウントが浮かび上がります。

共有フォルダ一覧

  • 認証なしでアクセス可能な共有がないか

  • READ 権限が付与されていないか

ここは最優先で確認すべきポイントです。一つでも読み取り可能な共有があれば、内容次第で状況は一変します。

パスワードポリシー

  • 最小文字数

  • 複雑性要件

  • ロックアウト条件

これは「今すぐ攻撃できるか」ではなく、「どこまで試してよいか」を判断する材料になります。


出力が「失敗」に見えるときこそ見るべき点

Enum4linux は、

Access denied
NT_STATUS_ACCESS_DENIED

といったメッセージを頻繁に出します。

しかし、その前後に

  • ドメイン名

  • ホスト名

  • OS 情報

が取得できていることも多くあります。

Starting enum4linux v0.9.1

=========================================
|    Target Information    |
=========================================

Target ........... 192.168.1.20
Username ......... ''
Password ......... ''

=========================================
|    Enumerating Workgroup/Domain    |
=========================================

[+] Got domain/workgroup name: CORP

=========================================
|    Session Check    |
=========================================

[-] SMB session setup failed: NT_STATUS_ACCESS_DENIED

=========================================
|    OS information    |
=========================================

[+] Got OS info for 192.168.1.20 from smbclient:
    OS: Windows Server 2019 Datacenter
    Computer name: AD-SRV01
    Domain name: CORP
    SMB Version: SMBv3

=========================================
|    Users on 192.168.1.20    |
=========================================

[-] NT_STATUS_ACCESS_DENIED
[-] Unable to enumerate users

=========================================
|    Groups on 192.168.1.20    |
=========================================

[-] NT_STATUS_ACCESS_DENIED
[-] Unable to enumerate groups

=========================================
|    Share Enumeration    |
=========================================

[-] NT_STATUS_ACCESS_DENIED
[-] Unable to list shares

=========================================
|    Password Policy Information    |
=========================================

[-] NT_STATUS_ACCESS_DENIED
[-] Unable to get password policy

つまり、完全に拒否されている環境は意外と少ないというのが現実です。


後継ツール enum4linux-ng について

Enum4linux は現在でも利用されているツールですが、その後継として enum4linux-ng が登場しています。名前のとおり、Enum4linux をベースに再設計されたツールで、内部的な処理や出力形式が大きく改善されています。

最大の違いは、出力の整理度です。Enum4linux は各処理結果をそのまま標準出力に流すため、成功と失敗、警告と情報が混在します。一方、enum4linux-ng は取得できた情報を項目ごとにまとめ、読みやすい形で表示します。

そのため、

  • 調査結果を素早く把握したい

  • レポートや報告書に転用したい

といった用途では、enum4linux-ng の方が扱いやすいと感じる場面が多いでしょう。

もう一つの特徴は、自動化・実務向けの設計です。enum4linux-ng では JSON 形式での出力が可能で、他のツールやスクリプトと連携しやすくなっています。列挙結果をそのまま次のフェーズに渡す、といった使い方も想定されています。

ただし、ここで注意したい点があります。enum4linux-ng は「高機能で親切」になった分、何が通り、何が拒否されたのかが見えにくくなる場合があります。

Enum4linux の荒い出力は、一見すると不親切ですが、

  • どの問い合わせが成功し

  • どの時点で Access denied になったのか

が、そのままログとして残ります。この挙動は、防御側が設定の効き具合を確認する際にも有用です。

そのため、本記事では

  • 挙動理解・構造把握には Enum4linux

  • 実務・整理された調査には enum4linux-ng

という位置づけで扱っています。

どちらが「正解」という話ではありません。両者は、同じ現実を違う角度から見せてくれるツールです。

Enum4linux が環境の“素の反応”を映す鏡だとすれば、enum4linux-ng は、その結果を整理した報告書に近い存在と言えるでしょう。


攻撃者視点:Enum4linuxがもたらす価値

攻撃者にとって Enum4linux は、「何かを壊すためのツール」ではありません。無駄を減らすためのツールです。

内部ネットワークに到達した直後の段階では、攻撃者は次のような不確実性を抱えています。

  • どんなユーザーが存在するのか

  • どのアカウントが価値を持つのか

  • どこに情報が集まっていそうか

Enum4linux は、この曖昧さを一気に減らします。

例えば、ユーザー名の列挙。パスワードが分からなくても、実在するアカウント名が分かれば、攻撃は「推測」から「選別」に変わります。

無差別に試す必要はなくなり、成功確率の高い対象だけを狙うことができるようになります。

グループ情報も同様です。管理者権限を持つグループや、特定の業務グループが見えれば、「最終的に奪うべきアカウント」が自然と浮かび上がります。

共有フォルダの情報は、さらに直接的な価値を持ちます。一つの読み取り可能な共有から、

  • 設定ファイル

  • スクリプト

  • バックアップ

  • 業務資料

が見つかることは珍しくありません。ここから認証情報や内部構成が芋づる式に広がるケースも多くあります。

重要なのは、Enum4linux が侵入を成功させるためのツールではないという点です。

すでに「中に入っている」ことを前提に、次の一手を最適化するための材料を与えるツールです。

そのため、Enum4linux の結果は単体では目立ちません。しかし、

  • パスワードスプレー

  • 認証情報の奪取

  • 横展開

といった後続フェーズの成功率を、確実に押し上げます。

攻撃者視点で見ると、Enum4linux は「やらなくてもいい攻撃をやらなくて済むようにする」
ためのツールです。

これは防御側にとって、非常に厄介な性質でもあります。なぜなら、Enum4linux が有効に機能する環境ほど、静かに、効率よく侵害が進むからです。

Enum4linux が価値を持つ理由は、派手さではなく、確実性にあります。


防御者視点:Enum4linuxを前提にした対策

Enum4linux の存在が示しているのは、「攻撃者は脆弱性を突かなくても、十分な情報を得られる場合がある」という現実です。

したがって、対策の出発点はEnum4linux を止めることではありません。Enum4linux に見られても問題のない状態を作ることです。

まず見直すべきは、SMB の匿名アクセスです。null session が許可されている環境では、ユーザーやグループ、共有情報が意図せず公開されがちです。不要な匿名アクセスは無効化し、「誰でも聞ける情報」を極力減らす必要があります。

次に、共有フォルダの設計です。

  • 使われていない共有

  • 検証用途で作られたまま残っている共有

  • 読み取り権限が広く付与された共有

こうしたものは、Enum4linux によって真っ先に洗い出されます。共有は「存在しているだけでリスクになる」ことを前提に、定期的な棚卸しが不可欠です。

Active Directory 環境では、ユーザーやグループ情報の露出範囲も重要なポイントです。「内部向けだから問題ない」という前提が、そのまま攻撃者にも通用してしまうことがあります。

ログと監視の観点も欠かせません。Enum4linux は派手な挙動をしないため、見逃されやすい一方で、SMB 通信としては痕跡が残ります。445/TCP への不自然な列挙的アクセスがないかを、平時から確認できる体制が望まれます。

そして最も重要なのは、列挙されること自体を「異常」と考えすぎないことです。

完全に情報を返さない環境を作るのは現実的ではありません。だからこそ、

  • 列挙されても致命傷にならない

  • 組み合わさっても攻撃につながらない

そうした設計を目指す必要があります。

Enum4linux は、防御の失敗を派手に指摘しません。ただ、静かに環境の“前提”を映し出します。

防御者に求められるのは、「見えないようにする」ことではなく、「見えても困らない状態にしておく」ことです。


まとめ:Enum4linuxが可視化するWindows環境の弱点

Enum4linux が示しているのは、「侵入されるかどうか」以前の問題です。

Windows 環境では、SMB という正規の仕組みを通じて、設計や運用の前提がそのまま外に表れます。脆弱性がなくても、攻撃が成立していなくても、情報は少しずつ返されています。

Enum4linux は、それを無理に引き出すツールではありません。聞けば答えてしまう範囲を、そのまま並べるだけです。

ユーザー名、グループ構成、共有フォルダ、パスワードポリシー。一つひとつは致命的に見えなくても、組み合わさることで、攻撃の精度を大きく高めます。

後継の enum4linux-ng は、こうした列挙結果を整理し、実務や調査で扱いやすい形にまとめてくれます。一方で、元祖 Enum4linux の荒い出力は、環境がどこまで応答しているのかを直感的に理解させてくれます。

どちらのツールを使うかよりも重要なのは、その結果をどう受け止めるかです。

Enum4linux によって見える情報は、「特別な失敗」ではなく、日常的な設定や運用の積み重ねの結果です。

侵入を防ぐことはもちろん重要です。しかしそれと同じくらい、侵入後に何が見えてしまうのかを把握しておく必要があります。

Enum4linux は、Windows 環境の“弱点”というより、現実の姿を可視化するツールだと言えるでしょう。


▼ 関連記事(Kali Toolsシリーズ)