【テクニカル・上級編】 WindowsにおけるSMBv1の無効化とプロトコルセキュリティ – インフラ・ネットワーク & クラウドセキュリティ防御ガイド

レガシーの亡霊が引く弾鉄:なぜ今なおSMBv1の完全な墓標が必要なのか

インフラストラクチャのセキュリティ監査において、私が最も絶望的な気分になる瞬間は、厳重にファイアウォールで囲まれたモダンなクラウド環境の内部に、ひっそりと息を潜める「窓」を見つけた時だ。WAFがどれほど巧妙にHTTPリクエストを検知しようとも、EDRがどれほど高度な振る舞い検知を行おうとも、ネットワークの深部で未だに「SMBv1(Server Message Block Version 1)」がハンドシェイクを交わしているならば、その防御網は乾いた紙細工に等しい。

WannaCryやNotPetyaが世界中のインフラを焼き払ってから何年が経過しただろうか。あの惨劇を引き起こしたEternalBlue(CVE-2017-0144)の根本原因は、プロトコル仕様そのものの設計思想の古さと、それを実装したカーネル空間における低レイヤのメモリ管理の不備にある。

本稿では、教科書的な「古いプロトコルはやめましょう」というお題目ではなく、攻撃者がどのようにSMBv1の脆弱性を突いてカーネルを掌握し、いかにして現代のWindowsインフラストラクチャを真の要塞(ハーデニング)へと昇華させるべきか、そのディープな防衛ロジックを解き明かす。

—

EternalBlueの深層:SMBv1トランザクションのパケット構造とメモリ破壊

攻撃者が好むターゲットには共通点がある。「複雑でありながら、内部で厳密な型チェックや境界値検証を行っていないパーサー」だ。SMBv1はまさにその典型例である。

大規模なパケット処理における脆弱性のメカニズム

SMBv1プロトコルは、ファイル共有やプリンターのスプールなど多様な機能を単一のセッション上で処理するため、SMB_COM_TRANSACTION2 といったサブコマンド群を持つ。このトランザクション処理において、クライアントはサーバーに対して「どれくらいのサイズのバッファを割り当て、どこからデータを読み込むか」を細かく指定する構造体を送信する。

脆弱性(CVE-2017-0144)の本質は、SrvOs2FeaListSizeToNt 関数における符号付き整数(Signed Integer)と符号なし整数(Unsigned Integer)の型の不一致、およびそれに伴う整数オーバーフローにある。

1. サイズの欺瞞: 攻撃者は、不正に細工した FEA(File Extended Attribute) リストを含む大きなトランザクションパケットを送信する。
2. 誤った割り込みとアロケーション: サーバー側(srv.sys ドライバ)がバッファサイズを計算する際、負の値を適切にハンドリングできず、意図的に小さすぎるヒープメモリプールを割り当てる。
3. ヒープオーバーフロー(Heap Overflow): 割り当てられたサイズを超える巨大なデータがカーネルプールへコピーされ、隣接するカーネルオブジェクト(ドライバの関数ポインタやオブジェクトヘッダなど)が上書きされる。

この結果、何が起きるか。攻撃者はカーネルメモリ上の任意のポインタを制御下に置き、リング0(カーネルモード)での任意コード実行、すなわち完全なOSの乗っ取りを達成する。これが、ファイアウォールの内側であればどんなにセキュアなネットワークであっても、SMBv1が有効であるだけでシステム全体が崩壊する所以である。

—

プロトコルセキュリティの現代的要件:署名と暗号化の強制

SMBv1を無効化するだけでは、現代の高度化された標的型攻撃を防ぐには不十分だ。SMBv2およびSMBv3においても、プロトコル層での「なりすまし(Snooping)」や「中間者攻撃(MitM)」を防ぐための設定が不可欠となる。

ここで鍵となるのが SMB署名(SMB Signing) と SMB暗号化(SMB Encryption) である。

SMB署名の仕組みとリプレイ攻撃の防止

SMB署名は、すべてのメッセージにセッションキーを用いたHMAC-SHA256(またはAES-CMAC)ハッシュを付与する仕組みだ。これにより、通信の途中でパケットが改ざんされていないこと、そして通信の送信元が正当であることが暗号学的に保証される。署名が強制されていない環境では、攻撃者はARPスプーフィングやLLMNR/NBT-NSポイズニングを併用して通信をハイジャックし、認証情報を奪う(NTLMリレー攻撃)ことができる。

SMB 3.0以降のAES-GCMによるトランスポート暗号化

ファイルサーバーとクライアント間でやり取りされるデータそのものを盗聴から守るのがSMB暗号化である。SMB 3.0以降では、AES-CCMやAES-GCMを用いた強力なハードウェアアクセラレーションによる暗号化がサポートされている。ネットワークスイッチのミラーリングやVLANホッピングによってトラフィックがキャプチャされたとしても、暗号化されていれば中身を覗き見られることはない。

—

現場で即座に実行すべきグループポリシー(GPO)とPowerShellによる要塞化

では、実務においてこの脅威を完全に排除するためには、具体的にどのような手順を踏むべきか。レガシーシステムの互換性を断ち切り、セキュアな状態を強制するための実装コードを提示する。

1. PowerShellを用いたSMBv1の完全無効化(監査と停止)

まずは環境内の全サーバー・クライアントにおけるSMBv1の稼働状況を確認し、即座に停止させる。GUIに頼るのではなく、インフラストラクチャ・コードとして管理すべきである。

# 【監査】現在稼働中のOSにおいてSMBv1サーバー機能が有効か確認する
Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

# 【対策】SMBv1サーバー機能を完全にアンインストールする(推奨)
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart

# レジストリレベルでの強制無効化(LanmanServerの依存関係からSMB1を排除)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" -Name "SMB1" -Value 0 -Type DWord

# クライアント側(LanmanWorkstation)のSMBv1ドライバのロードを停止
sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled

2. グループポリシー(GPO)によるSMB署名の強制

レジストリを直接操作するか、ドメインコントローラーからGPOを配信して、すべてのドメインに参加するノードに対してSMB署名を強制する。

GPOのパス:
コンピューターの構成 -> ポリシー -> Windows の設定 -> セキュリティの設定 -> ローカル ポリシー -> セキュリティ オプション

  • Microsoft ネットワーク サーバー: 通信にデジタル署名を常に要求する: 有効 (Enabled)
  • Microsoft ネットワーク クライアント: 通信にデジタル署名を常に要求する: 有効 (Enabled)

これらを有効化することで、署名のない古いクライアントからの接続は容赦なく拒絶される。レガシーなプリンターや組み込み機器が悲鳴を上げるかもしれないが、セキュリティアーキテクトとしての判断を下すべき瞬間だ。「動かないシステム」は、攻撃者にとっては「最も美味しい踏み台」なのだから。

3. SMB暗号化の強制(SMB 3.0以降)

ファイルサーバー(Windows Server 2012R2以降)において、特定の共有フォルダ、あるいはサーバー全体で暗号化を強制する。

# サーバー全体でSMB暗号化を必須(EncryptData = $true)に設定する
Set-SmbServerConfiguration -EncryptData $true -Force

# 特定の共有フォルダ(例: SecureShare)に対してのみ暗号化を強制する場合
Set-SmbShare -Name "SecureShare" -EncryptData $true

—

チーフホワイトハッカーの視点:防御のパラダイムシフトと未来

SMBv1の無効化や署名の強制は、いわば「セキュリティの衛生管理」の基本中の基本に過ぎない。しかし、この基本すら徹底できていない組織があまりにも多い現実が、ランサムウェアグループを潤し続けている。

今後、インフラストラクチャのセキュリティは、従来の「プロトコル単位の脆弱性修正」から、ゼロトラストアーキテクチャ(ZTA)を前提とした「マイクロセグメンテーション」と「耐量子暗号(PQC)への移行」へとシフトしていく。

SMBトラフィックそのものが、将来的に耐量子暗号アルゴリズム(CRYSTALS-Kyber等を用いた鍵カプセル化メカニズム)によってラップされる時代はすぐそこまで来ている。しかし、どれほど未来の暗号技術を導入しようとも、基盤となるOSやプロトコルの設定において「古いレガシーを放置する」という人的・運用の怠慢があれば、そこからすべての防壁は内側から崩壊する。

今すぐネットワーク内のパケットキャプチャを開き、ポート445で行われているハンドシェイクのバージョンを確認してほしい。そこに「SMBv1」の文字が見えた瞬間、あなたのインフラは既に、サイバー犯罪者の標的リストの最上位に位置しているという現実を直視すべきだ。

コメント

タイトルとURLをコピーしました