treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

コマンドプロンプトでSMBの状態確認

前回のPowerShellに引き続き、今回はコマンドプロンプトで実行できるSMB通信の確認方法です。
引き続き備忘録です。

Windows10の場合

Windows10でlanmanworkstationを調べるとこのように表示されました。
-------------------------------------------------------
C:\Windows\system32>sc.exe 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

-------------------------------------------------------
DEPENDENCIESという箇所にMRxSmb20と記載があります。なので、このコマンドを実行したWindows上では「SMBv2」での通信が有効な状態といえます。
古いOSだと(見たことないけど)MRxSmb10という表記になるので、SMBv1での通信となるそうです。
2017年に流行ったランサムウェアがこのSMBv1の脆弱性を狙ってくるという特徴もあって、SMBv1は無効化されているケースも多いようです。

https://support.microsoft.com/ja-jp/help/2696547/how-to-detect-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and

Windows Serverの場合

例えば、Windows Server 2008 R2のデフォルト状態だと
-------------------------------------------------------
C:\Windows\system32>sc.exe 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
                                             : MRxSmb10
                                             : MRxSmb20
                                             : NSI
               SERVICE_START_NAME : NT AUTHORITY\NetworkService
-------------------------------------------------------

DEPENDENCIES欄に「MRxSmb10」と「MRxSmb20」が両方併記されているのがみて取れます。
ちなみにWindows8.1やWindows Server 2012ではデフォルトで「MRxSmb10」は出てこないのですが、Windows Server 2008 R2をドメインコントローラとしてActive Directoryドメイン環境に参加したWindows Server 2012でこのコマンドを実行すると、

-------------------------------------------------------
C:\Windows\system32>sc.exe 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
                                             : MRxSmb10
                                             : MRxSmb20
                                             : NSI
               SERVICE_START_NAME : NT AUTHORITY\NetworkService
-------------------------------------------------------

このようにDEPENDENCIES欄には「MRxSmb10」と「MRxSmb20」が両方併記されていました。
Windows8と8.1、Windows Server 2012でもR2かどうかってところで相違があるのかなぁ?

LanmanWorkstation

このSMB云々を考えるうえで、LanmanServerやLanmanWorkstationの存在は知っておく必要がありそうです。

  • LanmanServerはServerサービス
  • LanmanWorkstationはWorkstationサービス

として、サービスMMC(services.msc)で見ることができます。

f:id:treedown:20180307173120p:plain

※)Serverサービス(LanmanServer)

Windowsコンピュータで管理する資源を、ネットワーク経由で他のコンピュータにも提供する役目を受け持つWindowsサービス。

※)Workstationサービス(LanmanWorkstation)

Windowsコンピュータがネットワーク経由で他のコンピュータの共有資源(フォルダとかプリンタとか)に接続するための、クライアントの動作を担当してくれるサービス。

これには、リダイレクタという技術も絡んできます。
リダイレクタは、クライアントがネットワーク経由で共有フォルダやファイルがある場所の特定をしたり、ファイルを読み書きしたりするためのコンポーネントになります。

例えば、ファイルサーバやプリントサーバではWindows内の共有されたリソースをネットワーク上に提供するために、Serverサービスが使われます。
クライアントではネットワーク上の共有されたリソースを利用するために、Workstationサービスが動き出します。WorkstationサービスがServerサービスに対してアクセスするために使われるプロトコル(共通言語のようなもの)がSMB、という認識です。
なのでSMBはプロトコルとしてWindows同士でやり取りするためのサーバへの要求や応答の方式が定義されています。これがLinuxでも互換するようにsambaというソフトウェアが使われている、という感じですね。

※)これ合ってるのかなぁ。途中からちょっと自信なくなってきちゃいました。

SMB自体は90年代からある技術で、知る限りではWindows NT4.0からずーっと使われ続けている技術です。NT3.51の時代は知らんのですが。

そういえば昔、玄箱HGってのがありましたが、これはNTLM(NT LanManager)のv1しか応答できないため、WindowsVista以降でのデフォルトNTLM v2応答だと接続できなくなる、ということがありました。これを手動でLAN Manager 認証レベルを「NTLM 応答のみ送信する」に変更し、NTLM v1に対応させないといけないって話がありましたね。
これはLanmanServerではNTLM v1しか応答を受け付けられない(古いから)にもかかわらず、Vista以降のLanmanWorkstationではNTLM v2がデフォルトになっていて、ここの食い違いによって接続できなくなった、ということがありました。

古いNASを使う場合にはこういう話が理解できていると、この辺かな…?というところが絞れてくるので、やはりWindowsネットワーク管理者としては、知識としてSMBの通信は知っておいて損はない、というところがありますね。