Windows 7/VistaクライアントでSMB2を無効にするのは無意味
Windows Vista、Windows 2008、Windows 7はSMB2をサポートしている。XP/2003以前はSMB1だ。SMB2がどういうものかは他の文献を見ていただくとして、SMB2を無効にする設定について調べたことをまとめる。
件の設定はMS09-050にある。
マイクロソフト セキュリティ情報 MS09-050 - 緊急
SMBv2 の脆弱性により、リモートでコードが実行される (975517)
https://www.microsoft.com/japan/technet/security/bulletin/MS09-050.mspx
「脆弱性の詳細」にあるCVEのどれかを展開すると、レジストリ設定による回避策が書いてある。要約すると、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parametersの下に「smb2」というキーを追加して0(ゼロ)を入力する。その後Serverサービスを再起動する。
Windows 7やVistaがファイルサーバに繋がらないという問題が起きたとき、SMB2を無効にするということがよく行われているようで、Google検索でいくつも引っかかる。しかし私が調べたところ、クライアント側でやっても無駄だ。この設定はサーバ側の挙動を変えるものである。
クライアントがファイルサーバに接続するとき、まず自分がサポートするプロトコル(dialect)を列挙したNegotiate Protocol要求を送信する。Windows Vistaは「SMB 2.002」をサポートしている。Windows 7はこれに加えて「SMB 2.???」をサポートしている(注1)。私がテストしたかぎり、smb2レジストリキーの値にかかわらず、同じプロトコルを列挙してNegotiate Protocol要求を送信する。つまりクライアントとしての挙動に変化はない。
サーバとして振る舞う場合、つまりNegotiate Protocol要求を受信するVistaやWindows 7は、smb2の値で挙動が変わる。SMB2を無効(キー値0)にしておくと、SMB2のdialectを受信してもSMB1のNegotiate Protocol応答を返し、その後のやり取りがSMB1で行われる。SMB2が有効(キー値1)の時にSMB2のdialectを受信すると、SMB2のNegotiate Protocol応答を返し、SMB2のやり取りが始まる。レジストリキーがLanmanServerというのも示唆的である。
この設定はSMB2の脆弱性を回避する手段として公開されたものである。脆弱性からシステムを守るには、外部からSMB2で接続要求が行われても拒否すればよい。サーバとしての動作で回避しようというのが、この設定の意図なのだろう。悪意のあるサーバにSMB2で接続したクライアントが攻撃されるということもありうるのだが、まずは悪意のあるクライアントから攻撃を受けないようにするのが先決である。
(注1)
「???」(0x3f3f3f)が何を意味するのか不明。Windows 7はSMB 2.1をサポートしているので、それと関係あるのかもしれない。
(注2)
Windows 7は、SMB2のdialectを列挙しないでNegotiate Protocol要求を送ることがある。発生条件がよく分からない。いちど接続したサーバがSMB2をサポートしてないと分かっていると、次に接続するときはSMB2のdialectを列挙しないのだろうかと思って試したが、思うように再現できない。
| 固定リンク
« Googleデスクトップを使っているとOutlookのプロセスが終了しないことがある | トップページ | Firefox/NoScript 対 Google Chrome/NotScripts »
この記事へのコメントは終了しました。
コメント