ThunderboltはAppleとIntelが共同開発した通信仕様ですが、最近はWindows機にもThunderbolt 3/4ポートを搭載する機器が増えています。
ところが、Windows機でThunderbolt 3ポートにLANアダプタ(以下NIC)を接続したまま再起動すると、起動後にNICを見失い、差し直さないと使えないことに気づきました。
今回のハードウェア構成
自作マシン
– M/B: ASRock X570 Phantom Gaming-ITX/TB3
– NIC: OWC Thunderbolt 3 10G Ethernet Adopter
– OS: Windows 10 21H1
※このマシンは、普段はディスプレイやキーボード・マウスがついておらず、リモートデスクトップで接続して使用している。
原因は「カーネルDMA保護」というセキュリティ機能
参考: カーネル DMA 保護
Thunderbolt 3は見た目はUSB Type Cポートですが、内部的にはPCI Express スロットがそのまま露出している格好になっています。
PCI ExpressはCPUと直結していて、CPUとメモリは直結しているので、悪意のあるThunderbolt機器を製作すれば、OSを介さずにメモリを書き換えることができてしまいます。
例えば、ノートパソコンを盗まれた場合、BitLocker等でディスクが暗号化されていれば、ディスクを引っこ抜いてもデータにはアクセスできません。しかし、起動後に不正なThunderbolt機器でメモリを書き換えれば、パスワードなしにパソコンにアクセスできるかもしれません。これは非常にまずいですね。
そこでWindows 10 1803以降では、ユーザが正規の手順でWindowsにサインインした後に接続された機器のみを認識するようになっています。これがカーネルDMA保護です。
資料ではIntelベースの機器ということになっていますが、一般的にAMDベースの機器にはThunderboltポートが付いていないだけで、AMDの機器でもDMA保護が動作するようです。
困りごと
しかし、自宅のような第三者が入ってこない場所に置かれているPCだと、不正な機器でメモリを書き換えられることは考えにくいです。
今回の場合はNICなので、起動直後からリモートデスクトップを使ってアクセスしたい場合、本体のところへ行ってNICを差し直さないといけないことになります。この仕様は非常に困りますね。
カーネルDMA保護を緩和する
カーネルDMA保護を緩和し、ログインしていない状態であっても機器を認識するようにします。
- グループポリシーで設定変更:
ツリーから、
管理用テンプレート(コンピューター) → システム → カーネルDMA保護 → カーネルDMA保護と互換性のない外部デバイスの列挙ポリシー
を選択。
ポリシーを「有効」に設定し、「すべて許可する」に変更。
- レジストリで設定変更:
HKEY_LOCAL_MACHINE/Software\Policies\Microsoft\Windows\Kernel DMA Protection/
を開く。
DWORD値(32ビット) で、「DeviceEnumerationPolicy」キーを作成。
値を「2」に設定。
どちらの場合も、設定後はPCを再起動してください。
再起動しても繋がった
再起動するとNICも再接続されるようになりました。
オンボードNICと違い、OSが起動しないと認識されませんが、サインイン画面が表示された数秒後にNICが認識され、使用できるようになります。
運用には注意
第三者が操作できる場所にあるPCや、持ち出しするノートPCにこの設定を適用すると、上で説明した通り、セキュリティが低下します。特に、ノートパソコンなら差し直せば済む話ですので、設定しないようにしてください。