Device Guardで保護されているデバイスでのアプリの実行
Windows 10 では、いくつかの新しい機能と設定が導入されています。これらをすべて組み合わせると、Device Guard と呼ばれるものと同じ機能になります。Device Guard は、すべてのアプリに信頼できるエンティティによる署名を要求することによって、悪意のあるアプリの不用意な実行から企業のデバイスを保護することができます。
Device Guard を企業で使用するには、既存の基幹業務アプリと独立系ソフトウェア ベンダー (ISV) が開発したアプリを、保護されたデバイス上で実行できるようにする必要があります。残念ながら、多数の基幹業務アプリには署名がなく、多くの場合、アクティブに開発されていません。同様に、ISV の署名がないソフトウェアを実行する場合や、ある ISV のアプリケーションをすべて信頼するのではなく特定のアプリケーションのみを実行する場合があります。Device Guard 機能の一部として、Windows 10 には、Package Inspector と呼ばれる新しいツールが含まれています。Package Inspector は、署名されていないアプリをスキャンし、インストールされ、実行されているバイナリのカタログ ファイルを作成します。このバイナリは、署名ツール Windows SDK ユーティリティで署名され、グループ ポリシーを使用して配布されます。これで、アプリが、デバイス ガードで保護されたデバイスで実行されるようになります。
Device Guardで保護されているデバイスでアプリを実行するための要件
Device Guardで保護されているデバイスでアプリを実行するための要件は、次のとおりです。
Windows 10 Enterprise、Windows 10 Education、または Windows Server 2016 Technical Preview を実行しているデバイス。
カタログ ファイルに含める必要のある、署名されていないアプリを特定していること。
Device Guardで使用するためのコード整合性ポリシーを作成していること。
内部の公開キー基盤 (PKI) を使って作成したコード署名証明書。
SignTool。ファイルのデジタル署名、ファイル内の署名の検証、ファイルへのタイムスタンプの付与などを行うコマンド ライン ツールです。このツールは、Microsoft Windows ソフトウェア開発キット (Windows SDK) のインストール パスの \Bin フォルダーにインストールされています。
署名されていないアプリのカタログ ファイルの作成
この目的のために明示的に作成された一時的なコード整合性のポリシーを監査モードで実行しているデバイスで Package Inspector を実行する必要があります。監査モードでは、検査ツールで検出されなかったバイナリを、このポリシーで検出できますが、監査モードであるため、すべての動作が継続されます。
重要 この一時的なポリシーは、通常の業務には使用しないでください。
既存アプリのカタログ ファイルを作成するには
管理者として Windows PowerShell を起動し、次のように入力して、一時的なポリシー ファイルを作成します。
mkdir temp New-CIPolicy -l FileName -f .\tempdeny.xml -s .\temp -u ConvertFrom-CIPolicy .\tempdeny.xml .\tempdeny.bin cp .\tempdeny.bin C:\Windows\System32\CodeIntegrity\SIPolicy.p7b
デバイスを再起動します。
管理者として PowerShell を起動し、次のように入力して、ファイル システムのスキャンを開始します。
PackageInspector.exe start c:
各項目の意味は次のとおりです。
オプション 説明 start <drive_letter>:
スキャンを開始することを指定します。たとえば、C: ドライブのスキャンの開始を指定します。
-path
検査されているパッケージへのファイル パス。
アプリのインストール メディアを C:\ ドライブにコピーした後、プログラムをインストールし、実行します。
メディアをローカル ドライブにコピーすると、インストーラーおよびその関連ファイルを確実にカタログ ファイルに含めることができます。インストール ファイルが抜けていると、コード整合性ポリシーは、アプリを信頼して実行しますが、インストールしない可能性があります。アプリをインストールした後、更新プログラムがあるかどうかを確認する必要があります。アプリが開いているときに更新が発生した場合は、検査プロセス中にすべてが確実に検出されるように、アプリを終了し、再起動する必要があります。
注
Package Inspector は、ファイル システムに配置されたすべてのバイナリのカタログのログ エントリを作成するため、スキャン プロセス中は、他のインストールや更新を実行しないことをお勧めします。
省略可能: 複数アプリ カタログを作成する (多くのアプリを 1 つのカタログ ファイルに含める) 場合は、引き続き、追加するアプリごとに手順 2 ~ 3 を実行します。追加するアプリをすべて追加したら、手順 5 に進みます。
注 プロセスを合理化するために、次のことをお勧めします。
アクティブにサポートされ、更新されているアプリ。各アプリに 1 つのカタログ ファイルを作成します。
アクティブではない、または更新されていないレガシ アプリ。すべてのレガシ アプリに 1 つのカタログ ファイルを作成します。
次のように入力して、スキャン プロセスを停止し、指定した場所で、1 つのアプリのための \InspectedPackage.cat ファイルと InspectedPackage.cdf ファイルを作成します。
PackageInspector.exe stop c:
既にハード ドライブ上に存在するファイルのカタログを作成する場合は、start
と stop
の両方を使用する代わりに scan
コマンドを使用することもできます。 scan
コマンドは、指定されたディレクトリを再帰的にスキャンし、署名できるすべてのファイルをカタログに含めます。 次のように入力することで、指定されたディレクトリをスキャンできます。
PackageInspector.exe scan c:\<insert directory path>
次の表に、scan
コマンドと stop
コマンドの両方で使用できるオプションを示します。
オプション | 説明 |
---|---|
stop <drive_letter>: |
指定された場所のスキャンが完了し、カタログまたは定義ファイルが作成されることを指定します。例: C: |
scan <path to scan> |
スキャンするディレクトリのパスを指定します。 このコマンドは、指定されたディレクトリを再帰的にスキャンし、署名できるすべてのファイルをカタログに含めます。 |
-out |
ツールが作成する情報の種類を指定します。カタログ ファイル用の |
-listpath |
|
-cdfPath <file_name> |
作成した .cdf ファイルをツールが配置する場所を指定します。このオプションを使う場合は、ファイル名も指定する必要があります。 ファイルへの完全なパスを使うことをお勧めします。ただし、相対パスもサポートされています。 |
-resdir |
このオプションは、現在サポートされていません。 |
-name |
このオプションは、現在サポートされていません。 |
-ph |
カタログにページ ハッシュを含めるかどうかを指定します。ハッシュを追加する場合は |
-en |
カタログのエンコードの種類を指定します。既定では、PKCS_7_ASN_ENCODING | X509_ASN_ENCODING, 0x00010001 です。 |
-ca1 |
カタログ ファイルとカタログ定義ファイルに CATATTR1 を指定します。 |
-ca2 |
カタログ ファイルとカタログ定義ファイルに CATATTR2 を指定します。 |
ここに記載されているもの以外のパラメーターもカタログに追加できます。詳しくは、MakeCat に関するトピックをご覧ください。
署名ツールによるカタログ ファイルの署名
Windows 7 以降の Windows ソフトウェア開発キット (Windows SDK) 内の署名ツールを使用するか、Device Guard 署名ポータルを使用して、カタログ ファイルに署名できます。 Device Guard 署名ポータルの使用について詳しくは、Device Guard の署名に関するページを参照してください。
このプロセスは、パスワードで保護された Personal Information Exchange (.pfx) ファイルを使ってカタログ ファイルに署名する方法を示しています。
重要 このツールを使うには、内部証明機関によるコード署名証明書、または外部のサード パーティ証明機関によって発行されたコード署名証明書が必要です。
署名ツールを使うには
コード署名証明書が証明書ストアにインポートされていること、またはファイル システムに存在することを確認します。
SignTool.exe を開き、証明書の格納場所に基づいてカタログ ファイルに署名します。
ファイル システムの場所から PFX を使っている場合:
signtool sign /f <\\SignCertLocation> /p <\\password> /fd sha256 /v
証明書ストアに証明書をインポートしている場合:
signtool sign /n <\\CertSubjectName> /fd sha256 /v <CatalogNameAndLocation>
各項目の意味は次のとおりです。
オプション 説明 signtool
SignTool.exe への完全なパスを指定します。
sign
ファイルにデジタル署名します。sign コマンドでサポートされているオプションの一覧については、SignTool のオプションに関するページをご覧ください。
/n SubjectName
署名証明書のサブジェクトの名前を指定します。この値は、サブジェクト名の一部でもかまいません。
/f SignCertFileLocation
ファイル内の署名証明書を指定します。
ファイルがパスワードで保護された .pfx 形式である場合は、/p オプションを使ってパスワードを指定します。ファイルに秘密キーが含まれない場合は、/csp オプションと /k オプションを使って、.csp と秘密キー コンテナー名を指定します。
/p Password
PFX ファイルを開く時に使うパスワードを指定します(/f オプションを使って PFX ファイルを指定します)。
/fd Algorithm
ファイルの署名を作成する際に使うファイル ダイジェスト アルゴリズムを指定します。既定では SHA2 です。
/v
コマンドが正常に実行されたかどうかに関係なく、詳細な出力を表示し、警告メッセージも表示します。
詳細情報と、使用可能なオプションを使った例については、「SignTool.exe (署名ツール)」トピックをご覧ください。
エクスプローラーでカタログ ファイルを右クリックし、[プロパティ] をクリックした後、[デジタル署名] タブをクリックして、カタログ ファイルのデジタル署名が正しいかどうかを確認します。
カタログ ファイルを C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE} にコピーし、このファイルをテストします。
注 テストのために、この場所にファイルを手動でコピーできます。ただし、大規模な実装では、グループ ポリシーを使って、すべてのデバイスにカタログ ファイルをコピーすることをお勧めします。
Package Inspector のトラブルシューティング
Package Inspector を停止しているときに "エラー 1181" が表示された場合は、USN ジャーナルのサイズを増やした後、キャッシュされたすべてのデータをクリアしてから、影響を受けたアプリを再スキャンする必要があります。
新しい一時ポリシーを作成し、設定して、キャッシュを確実にクリアする必要があります。同じポリシーを再利用すると、Package Inspector で障害が発生します。
ジャーナルのサイズを増やすには
コマンド プロンプト ウィンドウを開き、次のように入力します。
fsutil usn createjournal m=0x8000000 a=0x800000 C:
ここで、"m" の値を増やす必要があります。既定値 m=0x2000000 の 4 倍以上の値に変更することをお勧めします。
障害が発生したアプリのインストールを再度実行します。
キャッシュされたデータをクリアし、アプリを再スキャンするには
C:\Windows\System32\CodeIntegrity\ フォルダーから SIPolicy.p7b ファイルを削除します。
管理者として Windows Powershell を開始し、次のように入力して、一時的なコード整合性ポリシーを新規作成し、キャッシュされたすべてのデータをクリアします。
mkdir temp cp C:\Windows\System32\PackageInspector.exe .\temp\ New-CIPolicy -l Hash -f .\DenyPackageInspector.xml -s .\temp -u -deny ConvertFrom-CIPolicy .\DenyPackageInspector.xml .\DenyPackageInspector.bin cp .\DenyPackageInspector.bin C:\Windows\System32\SIPolicy.p7b
デバイスを再起動し、「署名されていないアプリのカタログ ファイルの作成」セクションの手順に従います。