Windows 11 バージョン24H2やWindows Server 2025にしたら、古いNASの共有フォルダにつながらなくなった。そんな話の原因の多くは「SMB署名」です。SMBには、通信を守るしくみとして「署名」と「暗号化」の2つがあります。名前は似ていますが、守れるものも、既定の動きも違います。この記事では、署名と暗号化がそれぞれ何を防ぐのか、どう動くのか、最近のWindowsで何が変わったのかを見ていきます。
- SMB署名とSMB暗号化が、それぞれ何を防ぐのか
- 署名がリレー攻撃を防げる理由と、Windows 11 24H2・Windows Server 2025で変わった既定の動き
- 暗号化を要求できる場所と、有効にするときの注意・確認方法
全体像:署名と暗号化が守るもの
ネットワークを流れるSMBの通信には、大きく3つの危険があります。途中で中身を読まれる(盗聴)、途中で中身を書き換えられる(改ざん)、そして他人になりすまされる(なりすまし・リレー)です。署名と暗号化は、このうち防げるものが違います。
郵便にたとえると、何もしないSMBは「はがき」で、だれでも読めて書き換えもできます。署名は「封をしたはがき」で、中身は読めてしまいますが、開けて書き換えれば封が壊れて分かります。暗号化は「鍵付きの封筒」で、中身を読むことも、気づかれずに書き換えることもできません。暗号化すると改ざんの検知も一緒に行われるので、暗号化しているときに署名を別に使う必要はありません。
SMB署名のしくみ
SMB署名では、送る側がメッセージの中身と「署名用の鍵」から計算した値を、メッセージのヘッダーに付けます。受ける側は同じ鍵で計算し直し、付いている値と一致したときだけ受け取ります。
署名用の鍵は、Session Setup(認証)のときに両者が手に入れるセッションキーから作られます。セッションキーは通信路を流れないので、途中にいる攻撃者は正しい署名を作れません。署名の計算方法は、SMBのバージョンとともに強化されてきました。
| 署名の方式 | 使われるバージョン |
|---|---|
| MD5 | SMB1(古い方式) |
| HMAC-SHA256 | SMB 2.0.2、2.1 |
| AES-CMAC | SMB 3.0、3.0.2(3.1.1でも使える) |
| AES-GMAC | SMB 3.1.1(Windows Server 2022、Windows 11 から)。署名の処理が速い |
署名がリレー攻撃を防げる理由
署名のいちばん大事な役目は、リレー攻撃を防ぐことです。リレー攻撃では、攻撃者がPCとサーバの間に入り、PCが送ってきたNTLMの認証をそのままサーバへ転送します。NTLMの認証そのものは通ってしまうので、署名がないと、攻撃者はそのセッションを使ってPCの利用者としてファイルを読み書きできます。
署名が必須なら、認証のあとのメッセージにはすべて正しい署名が必要です。攻撃者は認証のデータを転送しただけで、セッションキーは知りません。そのため正しい署名を付けられず、サーバは攻撃者の要求を受け付けません。
署名の強さは、もとになるセッションキーの強さで決まります。Microsoftは、NTLMv2ではなくKerberosで認証すること、そのために共有にはIPアドレスやCNAMEではなくサーバ名で接続することを勧めています。NTLMはサーバを確かめられないので、リレー攻撃に弱い方式です。
署名の既定の動き
署名を「必須にするか」は、クライアント側(自分から接続するとき)とサーバ側(接続を受けるとき)で別々に設定します。どちらか片方でも必須にしていれば、その接続は署名されます。署名されないのは、両方とも必須にしていないときだけです。
| Windows | 署名を必須にしているところ(既定) |
|---|---|
| Windows 11 24H2 (Enterprise、Pro、Education) | クライアント側(自分から接続するとき)とサーバ側(接続を受けるとき)の両方 |
| Windows 11 24H2(Home) | どちらも必須にしていない |
| Windows Server 2025 | クライアント側(自分から接続するとき)だけ |
| ドメインコントローラー | 以前から、接続を受けるとき(SYSVOL、NETLOGON など)は必須 |
| それより前のWindows | DCの SYSVOL・NETLOGON への接続など、限られた場面だけ |
つまり、Windows 11 24H2のPCやWindows Server 2025から接続すると、相手が署名に対応していなければつながりません。古いNASや複合機で「暗号化署名が無効です」(STATUS_INVALID_SIGNATURE)のようなエラーになるのはこのためです。また、署名が必須の接続ではゲストでの接続(パスワードなしの接続)もできなくなります。
Microsoftは、こうした機器のために署名を無効にすることは勧めていません。まず機器のファームウェアを更新して署名に対応させ、ゲストでの接続をやめてユーザー名とパスワードで接続する形にするのが基本です。
Windows 11 24H2とWindows Server 2025では、相手が署名や暗号化に対応していないことを記録する「監査」を有効にできます。署名や暗号化を必須にする前に監査を有効にしておくと、影響を受ける機器を事前に見つけられます。記録はイベントビューアーの アプリケーションとサービス ログ ›› Microsoft ›› Windows ›› SMBClient ›› Audit(イベントID 31998、31999)と、SMBServer ›› Audit(3021、3022)に残ります。
SMB暗号化のしくみ
SMB暗号化は、SMBのメッセージをAESで暗号化して、途中で中身を読まれないようにします。SMB 3.0以降で使えます。暗号化と一緒に改ざんの検知も行われます。
| 暗号の方式 | 使われるバージョン・Windows |
|---|---|
| AES-128-CCM | SMB 3.0、3.0.2(Windows 8、Windows Server 2012 から) |
| AES-128-GCM | SMB 3.1.1 の既定(Windows 10 1607、Windows Server 2016 から) |
| AES-256-CCM、AES-256-GCM | SMB 3.1.1(Windows 11、Windows Server 2022 から) |
署名と違い、暗号化は既定では必須になっていません。必要な場所で、管理者が有効にします。なお、SMB暗号化が守るのは「通信の途中」だけです。サーバのディスクに保存されたファイルは暗号化されないので、保存されたデータを守るにはBitLockerなどを使います。
暗号化を要求できる場所
暗号化は、PC側とサーバ側のどちらからでも要求できます。どこか1か所で必須になっていれば、その接続は暗号化されます。
| 場所 | 設定と動き |
|---|---|
| 共有ごと | 機密のファイルを置く共有だけ暗号化する。Set-SmbShare -EncryptData |
| サーバ全体 | そのファイルサーバのすべての共有を暗号化する。Set-SmbServerConfiguration -EncryptData |
| ドライブの割り当てごと | net use /REQUIREPRIVACY などで、その接続だけ暗号化を求める。サーバが応じなければ接続しない |
| UNCの強化 | グループポリシーで、決まったパスへの接続に暗号化などを求める |
| クライアント全体 | Windows 11 24H2、Windows Server 2025 から。すべての接続で暗号化を求め、対応しないサーバにはつながらない |
サーバ側で暗号化を必須にすると、既定ではSMB 3.x で暗号化できるクライアントしか接続できません(RejectUnencryptedAccess が既定で有効)。対応していないクライアントはアクセスが拒否され、サーバのログ(Microsoft-Windows-SmbServer/Operational)にイベントID 1003が記録されます。Microsoftは、この制限をゆるめるのではなく、クライアントを更新するよう勧めています。
有効にするときの注意
| 注意点 | 内容 |
|---|---|
| 性能 | 署名も暗号化も計算が増える。特に暗号化は、暗号化しない通信と比べて性能への影響がはっきり出る。AES命令を持つCPUや、新しい方式(GMAC、GCM)を使えるWindowsほど影響は小さい |
| WAN高速化装置 | 途中で通信の中身を見て最適化する装置は、暗号化した通信を扱えないことがある |
| 他社のNASなど | SMB 3.0に対応していても、暗号化や署名に対応していない機器がある。事前に監査で確かめる |
| SMB1 | SMB1は暗号化できない。暗号化を確実にするには、SMB1を無効にしておく |
どちらを使うかは、守りたいものによって決まります。社内のLANで改ざんやリレー攻撃を防ぎたいなら署名、人事や経理のデータのように「中身を読まれたくない」ものには暗号化、という分け方が目安です。インターネット越しに使うSMB over QUICは、TLS 1.3で守られたトンネルの中を通るので、通信全体が暗号化されます。
確認に使うコマンド
PC(PowerShell):クライアント側で署名と暗号化を必須にしているかを表示する
Get-SmbClientConfiguration | Format-List RequireSecuritySignature, RequireEncryption
ファイルサーバ(PowerShell・管理者):サーバ側で署名と暗号化を必須にしているかを表示する
Get-SmbServerConfiguration | Format-List RequireSecuritySignature, EncryptData, RejectUnencryptedAccess
ファイルサーバ(PowerShell・管理者):共有ごとに暗号化が必須かを表示する
Get-SmbShare | Select-Object Name, EncryptData
ファイルサーバ(PowerShell・管理者):共有「人事」の暗号化を必須にする
Set-SmbShare -Name 人事 -EncryptData $true
PC(コマンドプロンプト):暗号化を求めてドライブを割り当てる
net use Z: \\fs01.corp.example.com\人事 /REQUIREPRIVACY
PC(PowerShell・管理者):接続先が署名・暗号化に対応していないことを記録する(監査を有効にする)
Set-SmbClientConfiguration -AuditServerDoesNotSupportSigning $true -AuditServerDoesNotSupportEncryption $true
ファイルサーバ(PowerShell・管理者):接続してくるクライアントが署名・暗号化に対応していないことを記録する
Set-SmbServerConfiguration -AuditClientDoesNotSupportSigning $true -AuditClientDoesNotSupportEncryption $true
RequireSecuritySignature が True なら、その側で署名を必須にしています。グループポリシーでは「Microsoft ネットワーク クライアント: 常に通信にデジタル署名を行う」(クライアント側)と「Microsoft ネットワーク サーバー: 常に通信にデジタル署名を行う」(サーバ側)がこの設定にあたります。
まとめ
| 項目 | ポイント |
|---|---|
| SMB署名 | 改ざんとなりすまし(リレー攻撃)を防ぐ。中身は読めてしまう |
| SMB暗号化 | 盗聴・改ざん・なりすましを防ぐ。暗号化していれば署名は不要 |
| 鍵 | どちらも、認証のときのセッションキーから作る。Kerberosで認証するとより強い |
| 署名の既定 | Windows 11 24H2(Home以外)は送受信とも必須、Windows Server 2025は自分から接続するときに必須。どちらかが必須なら署名される |
| 暗号化の既定 | 必須ではない。共有、サーバ、ドライブの割り当て、UNCの強化、クライアント全体のどこかで要求する |
| つながらないとき | 署名を無効にするのではなく、機器を更新する。必須にする前に監査で影響を確かめる |
署名と暗号化は、どちらも「認証したあとの通信」を守るしくみです。認証(Kerberos)、署名、暗号化の3つがそろって、SMBの通信を安心して使えるようになります。
- What is Server Message Block signing?(Microsoft Learn)
- Control SMB signing behavior(Microsoft Learn)
- Overview of Server Message Block signing(Microsoft Learn)
- SMB security enhancements(SMB暗号化)(Microsoft Learn)
- Configure the SMB client to require encryption in Windows(Microsoft Learn)
- SMB security hardening(Microsoft Learn)
- Protect SMB traffic from interception(Microsoft Learn)
- SMB features in Windows and Windows Server(Microsoft Learn)
- Policy CSP – LanmanWorkstation(RequireEncryption)(Microsoft Learn)
- Microsoft Security Advisory 973811(SMB署名によるリレーの防止)(Microsoft Learn)
コメント