前回の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は無効化されているケースも多いようです。
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)で見ることができます。
※)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の通信は知っておいて損はない、というところがありますね。