以前書いた Windows 10 のデバイスガードについての整理 の続きです。
今回の投稿では、デバイスガードで保護された端末で、未署名のアプリケーションの実行を許可してみたいと思います。
詳細については以下が参考になります。
Device Guard 展開ガイド
Device Guardで保護されているデバイスでのアプリの実行
Device Guard och kodsignering
はじめに、デバイスガードの UMCI (ユーザーモードのコード整合性) 設定の流れを整理しておきたいと思います。
UMCI ですが、設定用の XML を BIN ファイルにして、それを各端末に配布することで、デバイスの保護をする仕組みになります。
作業の順序としては、
New-CIPolicy
を実行して、XML を設定ConvertFrom-CIPolicy を実行して、XML をBIN ファイルに変換
グループポリシーを使用して、BIN ファイルを p7b ファイルに変換
という流れになります。
前回書いた投稿では、New-CIPolicy をパスを指定しないで実行しているため、コンピューター全体をスキャンしてコード署名を確認し、各コード署名のルート証明を XML の情報を XML に出力しています。
その後、ConvertFrom-CIPolicy を使用して、出力された XML を BIN ファイルに変換しています。
最後に、グループポリシーで BIN ファイルをしているすることで、BIN ファイルを p7b ファイルに変換して、デバイスガードの設定が完了します。
グループポリシーの BIN → p7b 変換は実際にはファイル名を変更してコピーしているだけのようで、BIN ファイルを SIPolicy.p7b にリネームしてしまっても動くと思いますが。
上記のような流れとなっているためデバイスガードの設定を反映させるためには、XML のメンテナンスが必要となってきます。
それでは、前回の投稿で作成した、「InitialScan.xml」を元にして、未署名のアプリケーション「C:\App\TestApp.exe」をデバイスガードで保護された環境で実行する流れを見ていきたいと思います。
実行許可の方法はいくつかあるかと思いますが、今回はファイルハッシュを使用して実行許可をしてみます。
Contents
ファイルハッシュを使用したアプリケーションの実行許可
最初にファイルハッシュを使用したアプリケーションの実行許可を見ていきたいと思います。
まずは、UMCI を監査の状態で実行するため、前回の投稿で作成した「DeviceGuardPolicy.bin」で UMCI を実行した状態にします。
監査のモードで実行している場合、アプリケーションの実行拒否は行いませんが、許可されていないアプリケーションが実行されると、イベントログの「Microsoft\Windows\CodeIntegrity」にログが出力されます。
今回は、このログを使用して、ファイルハッシュを使用した XML の生成を行います。
不要なログが出力されている場合は、一度イベントログの消去を実行して、クリーンな状態にしておくとよいかと思います。
アプリケーションを実行するとイベントログに以下のようなログが出力されます。
この状態で以下のコマンドを実行して、監査ログを元に XML を生成します。
$CIPolicyPath=$env:userprofile+"\Desktop\" $InitialCIPolicy=$CIPolicyPath+"FileHash.xml" New-CIPolicy -Audit -Level Hash -FilePath $InitialCIPolicy -UserPEs
出力された XML ファイルが、以下のような内容になっていればテスト用のアプリケーションのファイルハッシュが取得された状態となります。
最後にポリシーをマージして一つの XML にし、実行を制限したモードでもテスト用のアプリケーションを実行できるようにします。
$CIPolicyPath=$env:userprofile+"\Desktop\" $InitialCIPolicy=$CIPolicyPath+"InitialScan.xml" $AuditCIPolicy=$CIPolicyPath+"FileHash.xml" $MergedCIPolicy=$CIPolicyPath+"MergedPolicy.xml" Merge-CIPolicy -PolicyPaths $InitialCIPolicy,$AuditCIPolicy -OutputFilePath $MergedCIPolicy $FileHashCIPolicy=$CIPolicyPath+"MergedPolicy.xml" $CIPolicyBin=$CIPolicyPath+"FileHash.bin" Set-RuleOption -Option 3 -FilePath $FileHashCIPolicy -Delete ConvertFrom-CIPolicy $FileHashCIPolicy $CIPolicyBin
BIN ファイルが作成されたら、配置して UMCI が有効な状態でテスト用のアプリケーションを実行します。
ファイルハッシュが許可アプリとして登録されているため、このポリシーでは未署名のアプリケーションを実行できるようになります。
今回は監査ログから該当のプログラムを検出し、そこからハッシュを求めましたが、以下のようにパスを指定することもできます。
$CIPolicyPath=$env:userprofile+"\Desktop\" $InitialCIPolicy=$CIPolicyPath+"FileHash.xml" New-CIPolicy -Level Hash -ScanPath C:\App -FilePath $InitialCIPolicy -UserPEs
どのファイルを許可すればいいかの判断ができている場合は、パスを指定してもいいかもしれませんが、複数のパスにまたがるような場合は、監査ログから生成するのが良いかも知れませんね。
ファイルハッシュはファイルを変更するたびに代わりますので、以下のようなファイル名を指定して実行許可をすることもできます。
$CIPolicyPath=$env:userprofile+"\Desktop\" $InitialCIPolicy=$CIPolicyPath+"FileName.xml" New-CIPolicy -Level FileName -ScanPath C:\App -FilePath $InitialCIPolicy -UserPEs
今回は、実ファイルをベースにして実行を許可しましたが、UMCI はコード署名されたカタログファイルを使用して、アプリケーションの実行許可もできます。
次回の投稿ではカタログベースの実行許可を書いてみたいと思います。