「ユーザー名もパスワードも入力せずに、他人のコンピュータに接続できてしまう」
こんな脆弱性が、かつてWindowsネットワークに存在していました。それが「NULLセッション」です。
この脆弱性は、攻撃者がネットワーク上の情報を収集し、さらなる攻撃の足がかりとして悪用される危険性があるため、セキュリティ診断(ペネトレーションテスト)では必ずチェックされる項目の1つとなっています。
今回は、NULLセッションとは何か、どのような危険性があるのか、そしてどう対策すればよいのかを、初心者の方にも分かるように詳しく解説していきます。
NULLセッションとは?基本を理解しよう

NULLセッションの定義
NULLセッション(Null Session)とは、ユーザー名とパスワードを指定せずに、Windowsネットワークに匿名で接続することです。
通常、ネットワークリソース(ファイルやプリンタなど)にアクセスするには、正しいユーザー名とパスワードで認証を受ける必要があります。
しかし、NULLセッションを使うと、この認証プロセスをスキップして、匿名(ANONYMOUS LOGON)として接続できてしまうのです。
別名:匿名ログオン
NULLセッションは、以下のような別名でも呼ばれます。
- 匿名ログオン(Anonymous Logon)
- 匿名セッション(Anonymous Session)
- ゲストアクセス(Guest Access)
- NULLアカウント接続
どれも「認証情報なしでアクセスできる」という意味です。
なぜこんな機能が存在するのか
「認証なしで接続できるなんて、危険じゃないか!」と思うかもしれません。
実は、NULLセッションは元々は便利な機能として設計されたものです。
本来の目的
Windowsネットワークでは、以下のような操作を行うために、最低限の情報交換が必要でした。
- ドメイン内のコンピュータの一覧を取得
- 共有フォルダの一覧を表示
- ネットワークブラウジング(ネットワーク上のリソースを探索)
- 認証情報そのものを交換するためのセッション
もし、これらの基本的な操作にも毎回認証が必要だとすると、ネットワークの利便性が大きく損なわれてしまいます。
そのため、Windowsは「一部の基本的な情報には、認証なしでもアクセスできる」という設計を採用しました。これがNULLセッションです。
NULLセッションの仕組み
IPC$共有とは
NULLセッションは、IPC$(Inter-Process Communication share)と呼ばれる特殊な共有を通じて機能します。
IPC$の役割
IPC$は、Windowsシステムが自動的に作成する隠し共有で、以下の目的で使われます。
- プロセス間通信(IPC)の基盤
- 名前付きパイプ(Named Pipe)への接続
- リモートプロシージャコール(RPC)の実行
「名前付きパイプ」というのは、ネットワーク越しにプログラム同士が通信するための仕組みです。
SMBプロトコルとの関係
NULLセッションは、SMB(Server Message Block)プロトコルを使って確立されます。
SMBとは
SMBは、Windowsネットワークで使われるファイル共有プロトコルです。
- 正式名称:Server Message Block
- 使用ポート:TCP 445番、またはTCP 139番(NetBIOS over TCP/IP)
- 別名:CIFS(Common Internet File System)
Linux/UnixではSambaという実装があります。
NULLセッションの確立手順
攻撃者が実際にNULLセッションを確立する手順は、驚くほど簡単です。
コマンドプロンプトから
net use \\[対象コンピュータ名]\IPC$ "" /user:""
このコマンドでは、ユーザー名とパスワードの両方を空文字列(””)に設定しています。
これだけで、対象のコンピュータにNULLセッションで接続できてしまいます。
ツールを使った接続
専門的な攻撃ツールもあります。
- rpcclient(Linuxツール)
rpcclient -U "" [対象IP]
- enum4linux(列挙ツール)
enum4linux -a [対象IP]
- smbclient(SMBクライアント)
smbclient -L //[対象IP] -N
これらのツールを使うと、NULLセッション経由でさまざまな情報を取得できます。
NULLセッションの危険性

1. 情報の列挙(Enumeration)
NULLセッションで接続できると、攻撃者は以下のような情報を収集できます。
取得可能な情報
- ユーザーアカウントの一覧
- ユーザー名のリスト
- アカウントの説明
- 最終ログイン時刻
- グループの一覧
- ローカルグループ
- ドメイングループ
- 各グループのメンバー
- 共有フォルダの一覧
- 公開されている共有の名前
- 共有のアクセス権限
- パスワードポリシー
- パスワードの最小文字数
- パスワードの有効期限
- アカウントロックアウトの設定
- コンピュータの詳細情報
- オペレーティングシステムのバージョン
- サービスパック
- ドメイン名
なぜこれが危険なのか
この情報は、次の攻撃のための「偵察情報」として極めて有用です。
たとえば、ユーザー名のリストが分かれば、パスワード推測攻撃(ブルートフォース攻撃)を仕掛けやすくなります。
パスワードポリシーが分かれば、「最小8文字、数字必須」のような条件に合わせて、効率的にパスワードを推測できます。
2. さらなる攻撃の足がかり
NULLセッションで得た情報を元に、攻撃者は以下のような次の段階の攻撃を実行できます。
パスワード推測攻撃
ユーザー名が分かっているので、そのアカウントに対してパスワードを総当たりで試します。
特権昇格
低い権限のアカウントで侵入した後、システム管理者権限を奪取する攻撃です。
横展開(Lateral Movement)
1台のコンピュータに侵入した後、ネットワーク内の他のコンピュータにも侵入を広げていきます。
3. データの読み書き
設定によっては、NULLセッション経由で実際にファイルの読み書きができてしまう場合があります。
これにより、攻撃者は以下のことが可能になります。
- 機密情報の窃取
- マルウェアの設置
- システムファイルの改ざん
4. なりすまし
ある条件下では、NULLセッションを利用して、他のユーザーになりすます攻撃も可能です。
NULLセッションの歴史
Windows NT時代の設計思想
NULLセッションが問題視されるようになったのは、Windows NT 4.0の時代(1996年~)からです。
当時のWindowsは、企業ネットワークでの利便性を重視して設計されていました。
- ドメイン環境での情報共有
- ブラウジングサービス
- プリンタ共有の自動検出
これらの機能を実現するため、ある程度の匿名アクセスが許可されていました。
セキュリティ問題の認識
1990年代後半から2000年代初頭にかけて、インターネットの普及とともに、NULLセッションのセキュリティリスクが広く認識されるようになりました。
CVE番号の割り当て
NULLセッションに関連する脆弱性には、以下のようなCVE(共通脆弱性識別子)が割り当てられています。
- CVE-1999-0519:NULLセッション認証バイパス
- CVE-1999-0520:NULLセッション情報漏洩
- CVE-2002-1117:関連する脆弱性
これらは1999年~2002年に公開された古い脆弱性ですが、設定次第では現代のシステムでも問題となる可能性があります。
Microsoftの対応
Microsoftは、Windows OSのバージョンを重ねるごとに、NULLセッションに関するセキュリティを強化してきました。
Windows NT 4.0 SP3以降
NULLセッション接続を禁止する設定が追加されました。
Windows 2000
より詳細な制御が可能になりました。
Windows Server 2003
デフォルトの設定がより厳格になりました。
Windows Vista / Windows Server 2008以降
匿名ユーザーの権限が大幅に制限されました。
Windows 7 / Windows Server 2008 R2以降
NULLセッションのフォールバック機能が、デフォルトで無効になりました。
現代のWindowsとNULLセッション
既定で無効化されている
重要なポイント
Windows 7およびWindows Server 2008 R2以降の現代的なWindowsシステムでは、NULLセッションはデフォルトで無効化されています。
つまり、標準設定のままであれば、NULLセッション攻撃を受けるリスクは大幅に低下しています。
ペネトレーションテストの誤検知
実は、セキュリティ診断(ペネトレーションテスト)で「NULLセッションの脆弱性あり」と報告されるケースの多くは、誤検知(False Positive)です。
なぜ誤検知が起こるのか
多くの脆弱性スキャナーは、Active Directory環境での暗黙的な認証(Implicit Authentication)を正しく理解していません。
暗黙的な認証とは
Windowsドメイン環境では、ログオンしているユーザーの資格情報が自動的に使われます。
たとえば、ドメインユーザーがエクスプローラーでネットワーク共有にアクセスする時、いちいちユーザー名とパスワードを入力しなくても接続できますよね。
これは、バックグラウンドでWindowsが自動的に認証情報を渡しているからです。
コンピュータアカウント認証
さらに、Windowsではコンピュータアカウント(マシンアカウント)も有効な認証オブジェクトです。
ホスト名の後ろに「$」が付いたアカウント(例:COMPUTER01$)がこれです。
一部のサービスやツールは、ユーザーアカウントではなく、このコンピュータアカウントを使って認証します。
誤検知の理由
脆弱性スキャナーは、「明示的にユーザー名を指定していないのに接続できた」という事実だけを見て、「NULLセッションだ!」と誤判定してしまうことがあります。
実際には、暗黙的な認証やコンピュータアカウント認証が行われているだけなのです。
本当に脆弱なケース
ただし、以下のような場合は、本当にNULLセッションが有効になっている可能性があります。
古いOSを使用している
- Windows XP
- Windows Server 2003以前
これらの古いOSは、デフォルト設定でNULLセッションが許可されています。
意図的に設定を変更した
管理者が、互換性のために意図的にNULLセッションを有効化している場合があります。
適切にパッチが適用されていない
セキュリティ更新プログラムが適用されていないシステムは、脆弱性が残っている可能性があります。
NULLセッションの対策方法

1. レジストリ設定での無効化
NULLセッションを完全に無効化するには、レジストリを編集します。
レジストリキー
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
設定すべき値
RestrictAnonymous
- 値の種類:DWORD
- 推奨値:2
設定値の意味:
- 0:匿名ユーザーに既定のアクセス許可
- 1:匿名ユーザーの列挙を制限
- 2:明示的な匿名アクセス許可なしではアクセス不可
RestrictAnonymousSAM
- 値の種類:DWORD
- 推奨値:1
SAM(Security Accounts Manager)データベースへの匿名アクセスを制限します。
重要
レジストリの変更は即座に反映されるため、システムの再起動は不要です。
2. グループポリシーでの設定
ドメイン環境では、グループポリシー(GPO)で一括設定するのが効率的です。
設定場所
コンピューターの構成
└ ポリシー
└ Windowsの設定
└ セキュリティの設定
└ ローカルポリシー
└ セキュリティオプション
設定すべき項目
1. ネットワークアクセス: 匿名でアクセスできる名前付きパイプ
空(何も指定しない)に設定
これにより、匿名アクセス可能な名前付きパイプがなくなります。
2. ネットワークアクセス: 匿名でアクセスできる共有
空に設定
3. ネットワークアクセス: すべてのユーザーのアクセス許可を匿名ユーザーに適用する
無効
これにより、匿名ユーザーがEveryoneグループに含まれなくなります。
4. ネットワークアクセス: SAMアカウントの匿名列挙を許可しない
有効
5. ネットワークアクセス: SAMアカウントとその共有の匿名列挙を許可しない
有効
6. ネットワークセキュリティ: LocalSystem NULL セッション フォールバックを許可する
無効(Windows 7以降ではデフォルト)
3. IPC$共有へのアクセス制限
IPC$共有そのものを削除することはできませんが、アクセスを制限できます。
注意点
ただし、IPC$への匿名アクセスを完全に禁止すると、一部の正規の機能が動作しなくなる可能性があります。
- ブラウジングサービス
- 古いアプリケーションとの互換性
環境に応じて、慎重に設定を調整してください。
4. SMB v1の無効化
古いSMB v1プロトコルには、NULLセッション以外にも多くの脆弱性があります。
SMB v1を無効化する方法
PowerShellコマンド
# SMB v1の無効化
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
# 状態確認
Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
Windowsの機能から削除
- コントロールパネルを開く
- 「プログラムと機能」→「Windowsの機能の有効化または無効化」
- 「SMB 1.0/CIFS ファイル共有のサポート」のチェックを外す
- システムを再起動
5. ファイアウォールでポートをブロック
外部からのSMB接続を完全に遮断する方法です。
ブロックすべきポート
- TCP 139番(NetBIOS over TCP/IP)
- TCP 445番(SMB)
- UDP 137番、138番(NetBIOS)
注意
ただし、これらのポートをブロックすると、ファイル共有やプリンタ共有ができなくなります。
社内ネットワーク内の通信は許可し、外部からのアクセスのみをブロックするのが一般的です。
6. システムを最新に保つ
最も基本的ですが、最も重要な対策です。
- Windows Updateを定期的に適用
- 最新のセキュリティパッチを適用
- サポート終了したOSは使用しない
診断方法:NULLセッションが有効か確認する
自分のシステムがNULLセッションに対して脆弱かどうかを確認する方法を紹介します。
1. 手動でテスト
コマンドプロンプトから
net use \\[自分のコンピュータ名またはIP]\IPC$ "" /user:""
もし「コマンドは正常に終了しました」と表示されれば、NULLセッションが有効になっています。
「アクセスが拒否されました」と表示されれば、適切に保護されています。
テスト後の削除
net use \\[コンピュータ名]\IPC$ /delete
2. 脆弱性スキャナーを使用
Nessus
商用の脆弱性スキャナーで、NULLセッションを含む多数の脆弱性を検出できます。
- プラグインID:26920(SMB NULL Session Authentication)
OpenVAS
オープンソースの脆弱性スキャナーです。
注意点
前述の通り、最新のWindowsでは誤検知の可能性が高いので、結果を鵜呑みにせず、実際の設定を確認してください。
3. ペネトレーションテストツール
enum4linux
Linux用のツールで、NULLセッション経由で列挙できる情報を表示します。
enum4linux -a [対象IP]
rpcclient
RPCクライアントツールです。
rpcclient -U "" [対象IP]
接続できれば、NULLセッションが有効です。
まとめ:NULLセッション対策の重要性
NULLセッションについて、その仕組みから対策まで詳しく解説してきました。
NULLセッションの重要ポイント
- 定義
- ユーザー名とパスワードなしでWindowsネットワークに接続できる脆弱性
- 匿名ログオン、匿名セッションとも呼ばれる
- 仕組み
- IPC$共有を通じて機能
- SMBプロトコルを使用
- TCP 445番または139番ポートで通信
- 危険性
- ユーザー、グループ、共有の情報を列挙できる
- パスワードポリシーなどの機密情報が漏洩
- さらなる攻撃の足がかりとなる
- 歴史
- Windows NT時代からの設計
- 元々は利便性のための機能
- セキュリティ問題が徐々に認識された
- 現代の状況
- Windows 7以降ではデフォルトで無効
- ペネトレーションテストでの誤検知が多い
- 古いOSや不適切な設定では依然として脆弱
- 対策方法
- レジストリ設定(RestrictAnonymous=2)
- グループポリシーでの一括設定
- 匿名アクセス可能なパイプと共有を空に
- SMB v1の無効化
- ファイアウォールでポート制限
- 最新のパッチ適用
セキュリティ診断で指摘されたら
もしセキュリティ診断やペネトレーションテストで「NULLセッションの脆弱性」を指摘されたら、以下の手順で対応しましょう。
- 本当に脆弱か確認
- 手動でNULLセッション接続を試す
- 実際に情報が列挙できるか確認
- OSバージョンの確認
- Windows 7/Server 2008 R2以降か
- 最新のパッチが適用されているか
- 設定の見直し
- グループポリシーの設定を確認
- 必要に応じて対策を実施
- 再テスト
- 対策後、再度脆弱性スキャンを実行
- 問題が解消されたことを確認
古いシステムは要注意
Windows XPやWindows Server 2003など、サポートが終了した古いOSを使用している場合は、特に注意が必要です。
これらのシステムは、NULLセッション以外にも多数の脆弱性を抱えています。
可能な限り、最新のOSへの移行を検討してください。
セキュリティは多層防御
NULLセッションの対策だけでなく、ファイアウォール、アンチウイルス、侵入検知システムなど、複数のセキュリティ対策を組み合わせることが重要です。
「1つの対策に頼らず、多層的に守る」これがセキュリティの基本です。
NULLセッションは古い脆弱性ですが、正しく理解して適切に対策することで、Windowsネットワークのセキュリティを大きく向上させることができます。

コメント