Windowsドライバのテスト署名の動作を確認する

2017年11月7日

はじめに

https://msdn.microsoft.com/en-us/library/windows/hardware/dn653559(v=vs.85).aspx
で公開されている文書に記載されているとおり、Windows Vista以降のWindowsでは、64bit版 (x64) のカーネルモードドライバはデジタル署名がついていないとロードされないようになっています。実際に製品としてドライバを出荷するためには正式なデジタル署名が必要になりますが、開発途中でビルドしたドライバに毎回正規のデジタル署名を付加するのは手間が大きいため、開発段階で簡易的にテストを行うためのテスト署名の仕組みが提供されています。
https://docs.microsoft.com/en-us/windows-hardware/drivers/install/signing-drivers-during-development-and-test
本稿では、テスト署名の具体的な使い方について確認していきます。

署名なしドライバの動作確認

以前の投稿で作成した簡単なドライバを用いて動作を確認しました。ドライバのビルド自体はx64用のビルド環境を使用することで、32bit版 (x86) と同様に行うことができます。また、ドライバのインストールも同じ手順で可能ですが、ドライバを起動しようとすると、以下のようなエラーメッセージが表示されて、開始することができません。

OS起動時のAdvanced Boot Optionsで「Disable Driver Signature Enforcement」を選択することで、一時的にデジタル署名のチェックを無効にすることができますが、起動のたびにF8キーを押して選択画面を表示する必要があり、PCの再起動を自動的に繰り返すテストなどを考えれば、実際の開発に適用するのは現実的ではないと考えられます。

テスト署名の使い方

以下で、テスト署名を用いて64bit版Windowsのドライバを動作させる手順について説明します。テスト署名を使用するためには、ビルドしたドライバにテスト署名を付加する作業のほか、実際にドライバを動作させる側でテスト署名機能を有効にしてやる必要があります。

テスト署名の付加

ドライバにテスト署名をつけるには、WDK (Windows Driver Kit) に付属の以下のツールを使用します。

  • MakeCert
    • テスト用の証明書を作成するツール
  • SignTool
    • 指定した証明書を使ってドライバを署名するツール

上記ツールを使用し、以下の手順でビルドしたドライバにテスト署名を行ってみました。

Z:\Projects\WinDrvSample>makecert -r -pe -ss PrivateCertStore -n "CN=fixstars.com(Test)" testcert.cer
Succeeded
Z:\Projects\WinDrvSample>signtool sign /ac testcert.cer /s PrivateCertStore sample1.sys
Done Adding Additional Store
Successfully signed: sample1.sys

署名を付加したドライバファイルのプロパティを表示すると、以下のようにテスト署名がついていることがわかります。

テスト署名機能の有効化

テスト用のデジタル署名を付加しただけでは、ドライバのロードは行われません。

テスト署名つきのドライバをロードするためには、実際にドライバを動作させる環境において、起動オプションでテスト署名機能を有効にしてやる必要があります。

C:\Windows\system32
bcdedit /set testsigning on

この状態でドライバを起動しようとしたところ、テスト署名がないドライバはロードされませんでしたが、テスト署名つきのドライバは正常にロードされました。

テスト署名なし

C:\Setup\sample1>copy original\sample1.sys \windows\system32\drivers
Overwrite \windows\system32\drivers\sample1.sys? (Yes/No/All): y
        1 file(s) copied.

C:\Setup\sample1>sc start sample1
[SC] StartService FAILED 577:

Windows cannot verify the digital signature for this file. A recent hardware or
software change might have installed a file that is signed incorrectly or damage
d, or that might be malicious software from an unknown source.

テスト署名つき

C:\Setup\sample1>copy signed\sample1.sys \windows\system32\drivers
Overwrite \windows\system32\drivers\sample1.sys? (Yes/No/All): y
        1 file(s) copied.

C:\Setup\sample1>sc start sample1

SERVICE_NAME: sample1
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 0
        FLAGS              :

テスト署名であってもドライバの動作自体は特に変わらず、各種評価を実施可能であることを確認することができました。

Tags

About Author

hiro.sakamoto

Leave a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Recent Comments

Social Media