SE の雑記

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

Windows 10 のデバイスガードで未署名のアプリケーションの実行を許可 その 1

leave a comment

以前書いた Windows 10 のデバイスガードについての整理 の続きです。
今回の投稿では、デバイスガードで保護された端末で、未署名のアプリケーションの実行を許可してみたいと思います。

詳細については以下が参考になります。
Device Guard 展開ガイド
Device Guardで保護されているデバイスでのアプリの実行
Device Guard och kodsignering

はじめに、デバイスガードの UMCI (ユーザーモードのコード整合性) 設定の流れを整理しておきたいと思います。

UMCI ですが、設定用の XML を BIN ファイルにして、それを各端末に配布することで、デバイスの保護をする仕組みになります。

作業の順序としては、

  1. New-CIPolicy を実行して、XML を設定
  2. ConvertFrom-CIPolicy を実行して、XML をBIN ファイルに変換
  3. グループポリシーを使用して、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」をデバイスガードで保護された環境で実行する流れを見ていきたいと思います。

実行許可の方法はいくつかあるかと思いますが、今回はファイルハッシュを使用して実行許可をしてみます。

ファイルハッシュを使用したアプリケーションの実行許可


最初にファイルハッシュを使用したアプリケーションの実行許可を見ていきたいと思います。
まずは、UMCI を監査の状態で実行するため、前回の投稿で作成した「DeviceGuardPolicy.bin」で UMCI を実行した状態にします。

監査のモードで実行している場合、アプリケーションの実行拒否は行いませんが、許可されていないアプリケーションが実行されると、イベントログの「Microsoft\Windows\CodeIntegrity」にログが出力されます。

今回は、このログを使用して、ファイルハッシュを使用した XML の生成を行います。
不要なログが出力されている場合は、一度イベントログの消去を実行して、クリーンな状態にしておくとよいかと思います。

アプリケーションを実行するとイベントログに以下のようなログが出力されます。
image

この状態で以下のコマンドを実行して、監査ログを元に XML を生成します。

$CIPolicyPath=$env:userprofile+"\Desktop\"
$InitialCIPolicy=$CIPolicyPath+"FileHash.xml"
New-CIPolicy -Audit -Level Hash -FilePath $InitialCIPolicy -UserPEs

出力された XML ファイルが、以下のような内容になっていればテスト用のアプリケーションのファイルハッシュが取得された状態となります。

image

最後にポリシーをマージして一つの 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 はコード署名されたカタログファイルを使用して、アプリケーションの実行許可もできます。

次回の投稿ではカタログベースの実行許可を書いてみたいと思います。

Share

Written by Masayuki.Ozawa

2月 25th, 2016 at 12:27 am

Posted in Windows Client

Tagged with

Leave a Reply