Windows で NetBIOS、LLMNR、mDNS プロトコルを無効にする方法

Windowsでブロードキャスト名前解決プロトコルを無効にする方法

DNSを使用していないWindowsネットワークを運用している場合、またはセキュリティを強化したい場合は、LLMNR、NetBIOS over TCP/IP、mDNSといった厄介なブロードキャストプロトコルを無効にすることをお勧めします。これらのプロトコルは、家庭環境では便利な場合もありますが、企業環境では、なりすまし、中間者攻撃(MITM)攻撃、あるいは不要なネットワーク通信など、深刻な攻撃経路となる可能性があります。さらに、ルックアップ速度の低下やネットワークの異常な問題を引き起こすこともあります。私自身も何度かこの設定を試した経験がありますが、これらの設定をロールアウトする前に、少数のマシンでテストすることをお勧めします。NetBIOSを盲目的に無効にすると、レガシーデバイスが動作しなくなる場合があるためです。

グループポリシーでLLMNRを無効にする方法

方法1: GPOを使用してLLMNRブロードキャストを無効にする

ドメイン環境の場合は、これが最も簡単です。グループポリシーでLLMNRを無効にすると、ドメインに接続されたすべてのWindowsマシンがマルチキャスト名前解決に応答しなくなります。Windowsは、特にワークグループやAD以外の環境では、デフォルトでLLMNRを使用する傾向があるため、これは便利です。レジストリを直接操作したくない場合は、この方法が有効です。

  1. gpmc.mscを開きます。これはグループポリシー管理コンソールです。新しい GPO を作成するか、すべてのターゲットに適用する既存の GPO を選択します。
  2. [コンピューターの構成] > [ポリシー] > [管理用テンプレート] > [ネットワーク] > [DNS クライアント]に移動します。
  3. ポリシーを有効にします:マルチキャスト名前解決をオフにするおよびスマート マルチホーム名前解決をオフにする
  4. クライアント マシンで実行するgpupdate /forceか、自動更新されて設定が適用されるまで待機します。

メリット:Windows による LLMNR 要求のブロードキャストを停止し、攻撃対象領域を縮小します。有効にすると、DNS または mDNS が稼働している限り、名前解決がそれらのプロトコルにフォールバックするようになります。通常、これを有効にすると、混雑したネットワークでのネットワーク名検索の信頼性が若干向上します。設定によっては、完全に機能させるには再起動、または少なくともネットワークのリセットが必要になる場合があります。

方法2: PowerShellを使用してレジストリ経由でLLMNRを無効にする

より直接的でスクリプト化可能な方法があります。GPOインターフェースを煩わすことなく、複数のPCにこれをプッシュしたい場合です。マルチキャスト名前解決を無効にするために必要なレジストリキーを作成します。WindowsがなぜGPOのどこでもこれを切り替えられないのかは分かりませんが、もちろん、もっと複雑な手順が必要になります。

New-Item "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" -Force New-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" -Name "EnableMulticast" -Value 0 -PropertyType DWORD -Force New-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\DNSClient" -Name "DisableSmartNameResolution" -Value 1 -PropertyType DWORD -Force 

PowerShellで管理者として実行してください。実行時間は短いですが、レジストリの変更には通常、再起動またはネットワークのリセットが必要になるため、後で再起動が必要になることに注意してください。設定が次回のログオン時または再起動後に有効になる場合もあるので、事前に計画を立ててください。

NetBIOS over TCP/IP をオフにする

NetBIOSは古いプロトコルで、レガシーデバイスや古いWindows XP環境に多く残っています。これらのデバイスを使用していない場合は、NetBIOSを無効にすることで不要なブロードキャストトラフィックを大幅に削減し、攻撃ベクトルを減らすことができます。ただし、一部の古いデバイスやWindows以外のデバイスでは、接続やネットワーク共有へのアクセスが切断される可能性があるので注意してください。

ネットワークアダプタ設定による手動無効化

  1. ncpa.cpl (ネットワーク接続)を開きます。
  2. ネットワーク アダプターを右クリックし、[プロパティ]を選択します。
  3. [インターネット プロトコル バージョン 4 (TCP/IPv4)]までスクロールし、[プロパティ]をクリックします。
  4. [詳細設定]をクリックし、 [WINS]タブに移動します。
  5. 「NetBIOS over TCP/IP を無効にする」を選択します。
  6. 複数のインターフェースがある場合は、すべての NIC に対してこれを実行してください。

念のため確認したい場合は、実行して「NetBIOS over Tcpip」の行を確認してください。正しく設定されていれば、「Disabled」と表示されているはずです。または、 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces\ipconfig /allのレジストリを手動で変更することもできます。NetbiosOptions を2 (無効)に設定します。ただし、レジストリを直接変更するのはリスクが高いので、事前にバックアップを取っておくことをお勧めします。

PowerShellで自動化

これを大量に実行する場合、便利なスクリプトがこちらにあります:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration | % { $_. SetTcpipNetbios(2) }

これにより、すべてのネットワークインターフェースでNetBIOSが無効になります。これをdisableNetbios.ps1として保存し、GPOスタートアップスクリプトまたはSCCM経由で展開してください。設定が反映されるまでに多少の遅延が発生し、再起動が必要になる場合があります。また、DHCPクライアントがDHCPオプション経由でNetBIOS設定を取得するように設定されている場合、DHCPサーバー側でもNetBIOS設定を無効にすることを検討してください。

すべてのアダプタの NetBIOS を PowerShell で完全に無効化する

NetBIOSをすべてのネットワークインターフェースで無効にする専用のGPOスイッチがないため、スクリプトを使用するのが一般的です。以下は、すべてのネットワークインターフェースのNetBIOSオプションをオフにする例です。

$regkey = "HKLM:\SYSTEM\CurrentControlSet\services\NetBT\Parameters\Interfaces" Get-ChildItem $regkey | ForEach-Object { Set-ItemProperty -Path "$_" -Name "NetbiosOptions" -Value 2 } 

あるいは、WMI アプローチの方が良いでしょう。

Get-WmiObject -Class Win32_NetworkAdapterConfiguration | % { $_. SetTcpipNetbios(2) }

スクリプトに保存し、起動時に実行されるように設定します。変更内容を有効にするには、通常、再起動またはアダプターの無効化/有効化が必要です。また、wmic nicconfig get caption, index, TcpipNetbiosOptions適用されていることを確認するために、 を確認してください。

mDNS(マルチキャストDNS)をオフにする

mDNS(BonjourやAppleのサービスディスカバリなど)は、プリンター、Appleデバイス、AirPlay対応機器の自動検出が必要な場合に便利です。しかし、Windowsのみの環境やセキュリティを優先する場合は、mDNSを無効にすることで、面倒な作業や潜在的な攻撃経路を回避できる可能性があります。

mDNSを無効にするには、レジストリを変更するか、グループポリシーを使用して適用します。レジストリキーは次のとおりです。

REG ADD "HKLM\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters" /v "EnableMDNS" /t REG_DWORD /d 0 /f

GPO展開の場合は、新しいレジストリ設定を作成します。アクション:Update、ハイブ:HKEY_LOCAL_MACHINE、キーパス:SYSTEM\CurrentControlSet\Services\Dnscache\Parameters、値名:EnableMDNS、データ:0を設定します。これにより、mDNS応答が実質的にオフになります。

注:mDNSを無効にすると、ワイヤレス画面共有やmDNSを利用するネットワークプリンターで問題が発生する可能性があります。大規模導入する前に、ご自身の環境でテストすることをお勧めします。

プロトコルが無効になっていることを確認するには、次のコマンドを実行します。

netstat -nao | FIND /i ":137" netstat -nao | FIND /i ":5353" netstat -nao | FIND /i ":5355"

これらのポートが開いていない場合は、これらのプロトコルは正常に無効化されています。

まとめ

これらのブロードキャストプロトコルを排除することで、ネットワーク環境を少し静かにし、セキュリティを大幅に向上させることができます。通常、GPO設定、レジストリの調整、そしてスクリプトをいくつか組み合わせることで、この問題を解決できます。ただし、慎重にテストすることを忘れないでください。NetBIOSを無効にすると古いデバイスに影響が出る可能性があり、mDNSを無効にするとWindowsやAppleデバイスの一部の機能検出が機能しなくなる可能性があります。セキュリティと機能性のバランスが重要です。

まとめ

  • GPO またはレジストリの調整によって LLMNR を無効にして、マルチキャスト名前解決ブロードキャストを停止します。
  • 特にレガシー デバイスが関係していない場合は、ネットワーク設定または PowerShell スクリプトで NetBIOS をオフにします。
  • サービス検出が必要ない場合は mDNS を無効にしますが、最初にテストしてください。ワイヤレス共有やプリンターが壊れる可能性があります。
  • 常にnetstatコマンドを使用してポートの閉鎖を確認してください。

結論

これらのプロトコルを無効にするのはそれほど複雑ではありませんが、バランスを取る作業です。ある設定では問題なく動作しますが、別の設定ではネットワークの利便性が損なわれたり、予期せぬ問題が発生したりする可能性があります。まずはテストを行い、レジストリやGPOを変更する前にバックアップを取り、問題が発生する可能性のあるレガシーハードウェアにも注意してください。これにより、ネットワークセキュリティを強化できる一方で、大きな影響は与えないことを願っています。頑張ってください!