Freigeben über


ドライバーのデジタル署名の留意点

ご無沙汰しております。なおきお~です。

春になり、花粉症の私には、厳しい季節ですが、花粉を除けば、過ごしやすい温かい日が少しずつ増えてきて、過ごしやすくなってきました。

ただ、温かい日が増えてきたとはいえ、季節の変わり目は、体調を崩しやすいので、皆様もお気を付けください。

 

さて、Windows XPのサポートの終了も残すところ一年を切ってしまい、Windowsの変わり目も近づいてきています。

Windows 8で今まで動いてきたデバイス ドライバーが動くのか?という互換性が気になるとは思いますが、それと同じくらいドライバー署名は、どうしたらいいのか?ということも気になる方が多いようでお問い合わせをいただきます。

ドライバー署名については、過去に"まさかた"さんや私が、ここここでご紹介しましたが、今一度、見直してみたいと思います。

 

まず、Windows 2000やWindows XPでの有効なドライバー署名は、WHQL署名だけなので選択肢はありません。

Windows Server 2003以降は、Authenticode署名がサポートされ、WHQL署名以外の署名が選択肢として加わり、Windows Vista以降からは、テスト署名とテスト署名用のブートオプションも加わりました。

Authenticode署名は、VeriSign社などの証明機関で発行した証明書を利用しますが、テスト署名は、makecert.exeで作成した証明書を使用するため、使用する証明書が異なります。なので、Authenticode署名とテスト署名は、取り違えようがないように思われるかもしれませんが、ちゃんとした証明書を使用しても、署名の要件を満たしていないためにテスト署名として扱われてしまうことがあります。

そこでAuthenticode署名の留意点を紹介したいと思います。

 

まず、署名が必要なデバイス ドライバーとしては、32ビットも64ビットもカーネル モード ドライバもユーザ モード ドライバも署名することを推奨していますが、32ビットは、必須ではありません。対して、64ビットは、ユーザ モード ドライバも含めて、全て必須となります。

特にWindows 8では、プリンタ ドライバーのようなユーザ モード ドライバもインストールがブロックされるため注意が必要です。

また、詳細な条件は、以下のサイトをご一読いただければ幸いです。

 

Driver Signing Policy (Windows Vista and Later)

https://msdn.microsoft.com/en-us/library/windows/hardware/ff548231

 

続いて、"まさかた"さんの記事でご紹介した"カーネル モードのコード署名の手順"のドキュメントで比較的 勘違いが多い項目の留意点をご案内します

 

① カタログ ファイルに対象となるOSを指定する
Inf2cat.exeの /osオプションで、対象となるOSを指定することができます。このオプションで対象とするOSを漏れなく指定してください。もし、Inf2cat.exeで対象とするOSが指定できない場合は、Inf2cat.exeのバージョンが古いかもしれないのでWDK8.0のInf2cat.exeを使用しているかを確認してください。

② クロス証明書を指定する
デバイス ドライバーのAuthenticode署名は、証明書チェーンに"Microsoft Code Verification Root"が含まれている必要があります。
VeriSign社などの証明機関から発行された証明書のチェーンには、"Microsoft Code Verification Root"は含まれていませんが、各証明機関のルート証明が、"Microsoft Code Verification Root"とチェーンがあるためクロス証明書を使用して、"Microsoft Code Verification Root"とのチェーンを証明する必要があります。
これに使用するクロス証明書は、ここからダウンロードできます。
ダウンロードしたクロス証明書は、Signtool.exeの/acオプションで指定するので、Authenticode署名の際に /acオプションを指定しているかが重要なポイントになります。

Signtool sign /v /ac MSCV-VSClass3.cer /s my /n contoso.com /t https://timestamp.verisign.com/scripts/timestamp.dll tstamd64.cat

③ 署名のチェックをする
Signtool.exe にVerifyコマンドを指定すれば、ちゃんと署名ができているかをチェックすることができます。しかし、署名以外にもチェックをしたほうがいい項目があります。
以下のチェックポイントをまとめてみました。

1. チェックで使用するOSは、デバッグモードとテストモードを無効に設定

2. 対象となるOS毎にインストールの可否をチェック

3. Signtool.exe では、ポリシーとハッシュのチェックをする
ポリシーチェック: Signtool verify /kp /v /c tstamd64.cat amd64\toaster.sys
ハッシュチェック: Signtool verify /pa /v /c tstamd64.cat amd64\toaster.sys

 

 

32ビットのWindowsでは、デバイス ドライバーの署名は、必須ではありませんが、デバイス ドライバーだけでなく、アプリケーションでも、署名は多く利用されており、必要性が高まってきています。デバイス ドライバーをWindows 8にも対応される時は、ドライバー署名も併せてご検討ください。

 

 

それではまた。