もっと詳しく

社内でネットワークプリンタ問題と並んで悩ましいのが、SMBに関するセキュリティ問題から開けなくなる共有フォルダのトラブルシューティング。やむを得ず匿名アクセスを一部提供しているサーバへ、これまで通りアクセスするにはどうすればいいのか、Windows 10におけるレジストリ設定からAD下の一括適用まで、社内技術メモをまとめます。

SMB1.0は廃止済なのに

対象のファイルサーバはWindows 2012 R2で運用されていて、プリントサーバとしての役割の他、コピー複合機の受信したFAXのPDFファイルを保管し、社内ネットワーク内で閲覧出来るようにしています。

以前、SMB1.0に対する風当たりが強くなったのを理由に、Windows Server 2008からアップグレードした記憶があるので、SMB1.0ではサービスしていないつもりでしたが、念のためWindowsの機能の一覧を確認してみると、SMB1.0はチェックの入った状態でグレイアウトしており、変更不可になっていました。

図1.ファイルサーバの機能一覧

図1.ファイルサーバの機能一覧

sc.exe

でLanmanWorkstationとLanmanServerの状態を問い合わせてみます。

C:\Users\Administrator>sc qc lanmanworkstation
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: lanmanworkstation
        TYPE               : 20  WIN32_SHARE_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\System32\svchost.exe -k NetworkService
        LOAD_ORDER_GROUP   : NetworkProvider
        TAG                : 0
        DISPLAY_NAME       : Workstation
        DEPENDENCIES       : Bowser
                           : MRxSmb20
                           : NSI
        SERVICE_START_NAME : NT AUTHORITY\NetworkService

C:\Users\Administrator>sc qc lanmanserver
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: lanmanserver
        TYPE               : 20  WIN32_SHARE_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\Windows\system32\svchost.exe -k netsvcs
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Server
        DEPENDENCIES       : SamSS
                           : Srv2
        SERVICE_START_NAME : LocalSystem

この2つのサービスの前者がSMBクライアント、後者がSMBサーバ機能を司るものとざっくり理解していた程度でしたが、Microsoft Technetで図解されていました。

LanmanServerの依存サービス項にSrv2とあるので、SMB2.0がサービス提供されていることがわかります。

更にPowerShellでもSMBサービスバージョン情報を取得して、SMB2.0のみで運用されていることが確認できました。

Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.
PS C:\Users\Administrator> Get-SmbServerConfiguration | Select EnableSMB*Protocol

EnableSMB1Protocol EnableSMB2Protocol
------------------ ------------------
             False               True

 

SMB2.0以降における匿名アクセス制限の現状

以上のように構成されたファイルサーバに対し、Windows10 から開こうとすると次のようなエラー(0x80070035)に遭遇することがあります。

図2.ネットワークパスが見つかりませんエラー

図2.ネットワークパスが見つかりませんエラー

これは、Windows 10 Fall Creators Update (version 1709)におけるセキュリティ強化の一環として、SMB2.0/3.0リソースへの匿名アクセスがデフォルトで無効になったことに起因します。

この辺りの仕様について、Microsoftでは個別のページで解説しています(日本語版は機械翻訳で微妙な表現になっているので敢えて英語原文へのリンクを掲載)。

Guest access in SMB2 disabled by default in Windows 10, Windows Server 2019.
Guest access in SMB2 and SMB3 is disabled – Windows Server – docs.microsoft.com

ここで匿名アクセス制限可否を定めるのが、次のレジストリ値です。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
"AllowInsecureGuestAuth"=dword:00000000    ←無効
"AllowInsecureGuestAuth"=dword:00000001    ←許可

図3.レジストリエディタで見るAllowInsecureGuestAuth

図3.レジストリエディタで見るAllowInsecureGuestAuth

このレジストリ値に対する振る舞い方に関する、上記リンクの解説をかいつまむと次のような仕様ということでしょう。

  • Windows 10 1709以降は
    AllowInsecureGuestAuth=0

     が設定されていたら無効
    On Windows 10 1709, Windows 10 1803, Windows 10 1903, Windows 10 1909, and Windows Server 2019,
    guest authentication is disabled if AllowInsecureGuestAuth exists with a value of 0 in AllowInsecureGuestAuth.

  • Windows 10 2004以降、エンタ・教育版は当該レジストリ値が存在していなくても無効
    On Windows 10 2004, Windows 10 20H2, and Windows 10 21H1 Enterprise and Education editions with KB5003173 installed, guest authentication is disabled if AllowInsecureGuestAuth does not exist or if it exists with a value of 0
    in AllowInsecureGuestAuth.
  • Windows 10 2004以降のHome・Pro版は引き続き1709以降の仕様を維持
    Home and Pro editions allow guest authentication by default unless you disable it using group policy or registry settings.

以上より、一般的に使われているWindows 10 Home・Pro版では、当該レジストリ値が明示的に


と設定されていない限り、匿名アクセスは許可されているはずなのですが、先ほどエラーの出たPCを調べてみると、確かに


が設定されていました。上述のMicrosoftの解説でもこうした仕様については述べられているものの、いつ頃よりこのレジストリ値が追加されたのか、もしくは更新などで自動設定されることはないのか、その点に関する記述は残念ながら見当たりませんでした。

 

そしてもう一つ実際に遭遇したケースに、サーバ上の複数の共有フォルダのうち、1つでもゲストアクセスを許可していると、そのサーバ上の全てのリソースへのアクセスが制限されてしまう、と言う事例がありました。てっきりその共有フォルダのアクセス権設定に問題があるもの、と見直しても原因がそこには存在しないので、この仕様を知らないでいると泥沼にハマることになりかねません。

 

ADグループポリシーによる一括適用

Active Directoryが構成されているネットワークでは、このようなレジストリ操作をADグループポリシーとして配信することで、傘下のPCへ向けて一括適用させることが出来るので便利です。

ドメインコントローラ機のグループポリシーの管理

gpmc.msc

 を開いて、新規グループポリシーオブジェクトを作成します。

図4.新GPOを作成

図4.新GPOを作成

作成したオブジェクトを右クリックから編集を選んで、ポリシーエディタを開きます。グループポリシーはレジストリをコンピュータレベル(下図左ペイン上)、ユーザレベル(同下)どちらへも適用可能なのですが、今回はユーザレベルで進めます。

図5.レジストリアクションを記述

図5.レジストリアクションを記述

エディタ右ペインの何もないところを右クリックし、アクションを加えたいレジストリ項目を次の要領で新規作成します。

Action : Replace

Hive : HKEY_LOCAL_MACHINE
Path : SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters

Value Name : AllowInsecureGuestAuth
Value Type : REG_DWORD
Value Data : 1

記述を終えたらポリシーエディタを閉じ、スコープタブのリンク欄に適用させたいユーザを登録、そのセキュリティフィルタは、Authenticated Usersとします(昔、セキュリティフィルタ欄に適用させたいユーザを入れてしまい、ハマったことがありました)。

図6.ポリシーをユーザレベルでリンク

図6.ポリシーをユーザレベルでリンク

 

 

投稿 Windows10におけるネットワーク共有への匿名アクセス制限の回避策Fun Scripting 2.0 に最初に表示されました。