SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Windows 10 のデバイスガードについての整理

without comments

Windows 10 のデバイス ガード (Device Guard) を調べる機会があったので、自分なにり整理した内容を。
デバイスガードについては、以下の情報が参考になりました。
Device Guard の概要
Device Guard 展開ガイド
Device Guard による証明と法令遵守Device Guard による証明と法令遵守
Windows 10 で進化したセキュリティ? ~サイバー攻撃における攻防~
物理マシンとユーザーのための「デバイスガード」と「資格情報ガード」――仮想化ベースのセキュリティ(その1)
デバイスガードは Enterprise Edition のみが使用できる機能となりますので、使用できるエディションは限定されます。

デバイスガードはのコード整合性のための機能は 2 つの保護方式で構成されているかと思います。

  • カーネル モードのコード整合性 (KMCI)
  • ユーザー モードのコード整合性 (UMCI)

カーネル モードのコード整合性 (KMCI)が Hyper-V のテクノロジを使用して、署名されていないドライバーからカーネルを保護し、ユーザー モードの (UMCI) が、信頼されているバイナリの実行のみを許可することで保護するための機能となります。
私は、最初調べた時は「デバイス ガードは Hyper-V を有効にする必要がある」と思っていたのですが、使用するコード整合性によってはそういうことはなく、UMCI だけを使うのであれば Hyper-V は有効にしなくてもよいのですね。
Hyper-V が必要になるのは「カーネル モードのコード整合性により、仮想化ベースのセキュリティ (VBS)」を使用するときのようでした。
TPM については資格情報ガードを使用する際にオプションとして使用することができるようですが、必須ではなく、TPM がなくてもデバイスガードは使用することができるようです。
 

■ユーザー モードのコード整合性 (UMCI)

まずは、UMCI から見ていきたいと思います。
UMCI は信頼されているバイナリの実行のみを許可するための機能となるのですが、アプリケーションの保護を実施するためには、参照デバイスに基づく、Device Guard のコード整合性ポリシーの作成 や、コード整合性ポリシー の作業を実施し、「コード整合性ポリシー」を作成する必要があります。
コード整合性ポリシーには、いくつかの規則のオプション / ファイル規則のレベルがあり、実行は許可するがイベントログに情報の出力を行う監査は実施、許可するアプリケーションをどのように判定するかというような設定を行うことができます。
最初に「New-CIPolicy」でどのようなアプリケーションを許可するかを設定し、その後「Set-RuleOption」を使用して、監査のモードにする / 監査のモードを削除するというような変更をすることができます。
以下は、TechNet に記載されているサンプルとなりますが、これで監査のための規則を作成することができます。

$CIPolicyPath=$env:userprofile+"\Desktop\"
$InitialCIPolicy=$CIPolicyPath+"InitialScan.xml"
$CIPolicyBin=$CIPolicyPath+"DeviceGuardPolicy.bin"
New-CIPolicy -Level PcaCertificate -FilePath $InitialCIPolicy -UserPEs 3> CIPolicyLog.txt
Set-RuleOption -Option 0 -FilePath $InitialCIPolicy
ConvertFrom-CIPolicy $InitialCIPolicy $CIPolicyBin

 
定義自体は、XML で作成され、それを「ConvertFrom-CIPolicy」で「.bin」のファイルに変換をします。
作成した「.bin」をグループポリシーを使用して適用することでデバイス ガードの UMCI を使用することができるようになります。
以下が初期の状態を msinfo32 で確認した内容となります。
image
現状は、Hyper-V は有効にしていませんが、Hyper-V で必要となる各種機能が CPU で有効になっていることが確認できます。
KMCI については、有効にしていないため、VBS が無効になっています。
UMCI については、グループポリシーの「コンピューターの構成」→「Windows コンポーネント」→「システム」→「デバイスガード」→「コードの整合性ポリシーを展開する」で設定をすることができます。
ここで、先ほど作成した bin ファイルのパスを指定します。
今回は「C:\Windows\System32\CodeIntegrity」にファイルを格納しています。
image
設定が終わったら再起動をします。
再起動が終わると、bin から「SIPolicy.p7b」が生成された状態となっています。
初期の設定では「監査」モードでポリシーが作られますので、msinfo32 の情報からも監査となっていることが確認できます。
image
監査の状態ではアプリケーションの実行に制限がかかっていないためイベントログのMicrosoft\Windows\CodeIntegrity」に情報が出力されますが、空のフォームアプリが実行できています。
image
 
それでは実行を許可しないように監査の設定を削除したポリシーを作成して、再度適用をしてみます。
先ほど作成した XML から、「Option 3 (監査)」を削除して、新しく bin ファイルを作成しています。

$CIPolicyPath=$env:userprofile+"\Desktop\"
$InitialCIPolicy=$CIPolicyPath+"InitialScan.xml"
$EnforcedCIPolicy=$CIPolicyPath+"EnforcedPolicy.xml"
$CIPolicyBin=$CIPolicyPath+"EnforcedDeviceGuardPolicy.bin"
cp $InitialCIPolicy $EnforcedCIPolicy
Set-RuleOption -Option 3 -FilePath $EnforcedCIPolicy -Delete
ConvertFrom-CIPolicy $EnforcedCIPolicy $CIPolicyBin

作成した bin ファイルをグループポリシーで指定し、再起動を実施します。
今回は実施していませんが、UMCI の XML は複数をマージすることができます。
Windows10のDevice Guardが有効な環境でDePは利用可能ですか?
のように出力されたものを、今回のポリシーにマージすることもできますので、あとからポリシーをメンテナンスすることもできます。
msinfo32 の結果を確認すると、UMCI が強制になっていることが確認できますね。
image
この状態で先ほどのフォームアプリを実行すると以下のようなメッセージが表示され、実行が制限されていることが確認できます。
image
これは仮想化の機能とは独立していますので、Windows Server 2012 R2 上のゲスト OS でも検証することが可能です。
image
参照コンピューターでスキャンした際に配置されているファイルのデジタル署名によって実行できるファイルが変わってきそうですので、参照コンピューターに置いておくプログラムについては少し意識をしておいた方がよさそうですね。
設定することで PowerShell のコマンドレットの実行も一部制限がされていたため、Windows RT と似たような制限がかかっている状態になっているイメージでしょうか。
 

■カーネル モードのコード整合性 (KMCI)

こちらが Hyper-V を使用した、仮想化ベースのセキュリティ (VBS) を使うものになります。
また、VBS を使用するためには Secure Boot が有効となっている必要があります。
msinfo32 から UEFI / セキュアブートの状態が確認できますので、事前にこちらで設定状況を確認してもよいかもしれないですね。
Hyper-V / UEFI / セキュアブートは KMCI のハードウェアベースのセキュリティ機能としては必要なハードウェア要件になるかと思いますので。
UMCI のポリシーと同レベルに「仮想化ベースのセキュリティを有効にする」がありますので、こちらから有効化できます。
image
設定を有効にして、再起動した後の状態がこちらです。
現状、Hyper-V を有効にしていませんので、「デバイスガードの仮想化ベースのセキュリティ」が「有効 (停止中)」になっていますね。
image
それでは、Windows の機能から「Hyper-V プラットフォーム」と「分離ユーザー モード」をインストールして再起動してみます。
設定ができていると「デバイスガード仮想化ベースのセキュリティ」が「実行中」となります。
image
Device Guard 展開ガイド に記載されている以下のコマンドで、デバイスガード関連の情報が取得できますので、この辺も確認しておくとよさそうです。

Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard

「AvailableSecurityProperties」を確認することで、ハードウェアのどの要件を満たしているかを確認できますので。
こちらが設定ができた環境の状態ですが、「AvailableSecurityProperties」が「1,2,3」となっており、デバイスガードの各種機能を使用するための前提が満たせていますね。
image
こちらが 2012 R2 上の仮想マシンで実行した結果となります。
image
「1」が有効になっていないため、この環境ではハイパーバイザーのサポートが使用できないことが確認できますね。
KMCI ですが、未署名のドライバー等が動作しなくなるだろうということは想像していたのですが、ウィルススキャンソフトのようなものでも影響が出ることがあるようです。
Windows10 TH2 アップデートに伴う弊社製品との互換性の問題
ざっくりとですがどんな設定になるのかまで試してみました。

Written by Masayuki.Ozawa

1月 30th, 2016 at 11:25 pm

Posted in Windows Client

Tagged with

Leave a Reply