Windows 10 と SHA-1 廃止ポリシーによるドライバー署名への影響について
[更新] 2017 年 11 月 28 日 に、「EV 証明書」表記を「EV コード署名証明書」表記に修正しました。
[更新] 2017 年 2 月 17 日 に、ダッシュボードで行われる署名の詳細に関する記述を変更しました。また、ダッシュボードの運用に関するご質問についてのご案内を追加しました。
[更新] 2017 年 1 月 28 日 に、Windows 10 で無効となる署名について、ユーザーモードドライバーに関する記述を追加しました。
こんにちは。JS です。
現在、ドライバーの署名に関する今後の対応について、ドライバー開発者の多くは何かしらの質問を抱えているかもしれません。
Windows 10 のリリースに合わせて署名ポリシーに大きな変更があり、また、SHA-1 ハッシュ アルゴリズムを利用しているコード署名用証明書 (以下 SHA-1 証明書) の廃止についても、適用が開始される 2016 年 1 月 1 日が近づいているので、今後 どのような方法でドライバーの署名を行うべきか、数々のお問い合わせをいただいております。
そのような質問を出来る限り解消できるよう、現在 Windows ではどのようにドライバー署名を利用していて、今後どのように利用する予定なのか、今一度 まとめた上でご紹介したいと思います。
このエントリでは、大きく分けて以下 3 つのカテゴリーに関するご説明をさせていただきます。
1. Windows 10 のドライバー署名ポリシーについて
2. SHA-1 廃止ポリシーによるドライバー署名への影響について
3. Windows ハードウェア ダッシュボードの利用について
また、最後に、近頃お問い合わせでもいただいているドライバーの複数の署名に関して、補足を追記しましたので、併せて確認いただけると幸いです。
1. Windows 10 のドライバー署名ポリシーについて
Q: Windows 10 のドライバーは、どういう署名が必要になるのか?
A:
カーネルモードドライバー と ユーザーモードドライバー で、必要になる署名が変わります。
o カーネルモードドライバーの場合
基本的には、全てのドライバーに対して、マイクロソフト社による署名が必要になります。これは 32 ビット、64 ビットに関係なく、全ドライバーを対象としております。ただ、この処置は RTM 時点で適用されているものではなく、今後のアップデートなどによって適用される予定です。
o ユーザーモードドライバーの場合
ドライバーの署名ポリシーにおいては、Windows 8.1 からの変更点はありません。つまり、引き続き、Authenticode 署名が利用可能です。
Q: では、マイクロソフトの署名がない、既に存在しているドライバーはどのような影響を受けるのか?
A:
Windows 10 RTM (2015 年 7 月 29 日) 以前に Authenticode 署名がされたドライバーは、ドライバー署名ポリシーによる影響を受けません。また、Windows 10 RTM 以前に発行された Authenticode 証明書によって署名されたドライバーも、ドライバー署名ポリシーによる影響を受けません。
Q: どういう署名が無効になるのか?
A:
Windows 10 RTM 後に発行されたコード署名用証明書を利用した、カーネルモードドライバーへの署名は、例外なく無効になります。ただ、この処置は RTM 時点で適用されているものではなく、今後のアップデートにて適用される予定です。なお、ユーザーモードドライバーへの署名は、上記の通り引き続き Authenticode 署名をご利用いただけます。
Q: 何をすればマイクロソフトの署名を手に入れることができるのか?
A:
ハードウェア ダッシュボードにドライバーを申請する必要があります。もし、Windows 10 でドライバーを配布する予定で、ダッシュボードのアカウントを所持していない場合は、Microsoft アカウントでログインした上で、以下の URL よりアカウントの登録を行ってください。
Dashboard
Windows 10 に対応した署名を取得する方法は 2 つあります。
a. Driver Signing Submission サービスを利用する
b. Hardware Lab Kit を利用して、ハードウェア互換性プログラム (Hardware Compatibility Program) に申請を行う
なお、どちらのサービスも、RTM から 90 日後の 2015 年 10 月 27 日から、EV コード署名証明書の登録が必要になる予定です。
[更新] 2015 年 10 月 31 日 より、ハードウェア ダッシュボード の申請サービスの利用にあたって、EV コード署名証明書の登録が必要になります。
EV コード署名証明書は、申請対象のドライバーに署名をするためではなく、あくまで申請者の身元証明の目的で必要となります。
Q: Windows 10 に加え、Windows 8.1 以前の OS にも対応した署名を取得するにはどうすればよいか?
A:
ハードウェア互換性プログラムより署名を取得するしか方法はありません。Driver Signing Submission サービスは、現時点では、Windows 10 に対応した署名のみ提供しているためです。
Q: Windows 8.1 以前の OS にはドライバー署名ポリシーの変更はないか?
A:
Windows 8.1 以前においては、ドライバー署名ポリシーの変更はありません。Windows 10 RTM 以降に発行されたコード署名用証明書も、Windows 8.1 までの OS に対応するドライバーに限り、引き続きご利用いただけます。
2. SHA-1 廃止ポリシーによるドライバー署名への影響について
ここでは、以下の弊社ブログにて紹介されている、SHA-1 コード署名用証明書の廃止ポリシーについて触れています。
[IT 管理者向け] SHA-1 からの移行を推奨しています
https://blogs.technet.com/b/jpsecurity/archive/2014/10/15/sha1-migration.aspx
Q: SHA-1 のコード署名用証明書が今後使えなくなるとのことだが、ドライバーにどの様な影響を与えるのか?
A:
結論からいいますと、カーネルモードおよびユーザーモードドライバーに対しては、この廃止ポリシーによる直接的な影響はありません。
今回のポリシーは、脆弱性があるものと見られるハッシュ アルゴリズムの制御を行うことを可能にする以下の更新プログラムを利用します。
Windows の弱い証明書暗号化アルゴリズムの管理を向上させる更新プログラムについて
https://support.microsoft.com/ja-jp/kb/2862966
廃止ポリシーが適用される際は、上記 更新プログラム内のフレームワークを利用して、ユーザー モードの特定のモジュールに対し、ポリシーの対象となるかを確認し、検証を行います。
ただ、ドライバーの署名を検証するプロセスは、今回のポリシーの対象となる検証プロセスには含まれておりません。その為、ユーザーモードドライバーは廃止ポリシーによる影響はうけません。また、カーネルモードのモジュールは今回のフレームワークの影響を受けないため、カーネルモードドライバーも同じく、廃止ポリシーの影響を受けない予定です。
Q: では、SHA-2 証明書による署名は行わなくてもよいのか?
A:
場合によっては行う必要があります。SHA-1 廃止ポリシーでは、証明書を発行する第 3 者認証機関に対して、2016 年 1 月 1 日 以降の SHA-1 証明書の配布を停止するよう呼びかけているためです。
有効期限内の SHA-1 証明書を所持している限りは、その証明書を利用した署名を行うことが可能です。ただし、所持していない場合は、別途 SHA-2 コード署名用証明書 (以下 SHA-2 証明書) を用意して署名を行う必要となることが見込まれます。
なお、Windows Vista にのみ対応しているドライバーに限っては、第 3 者認証機関に対して、SHA-1 証明書の配布の継続を許容しておりますので、その場合は SHA-2 証明書による署名を行う必要はありません。
3. Windows ハードウェア ダッシュボードの利用について
※ハードウェアダッシュボードにて実施されるオペレーションについて、もし実際にどのような措置がなされるかなど、詳細をご確認されたい場合には、sysdev@microsoft.com までお問い合わせいただければと思います。
Q: ダッシュボードのサービスを利用しようとすると、EV コード署名証明書が必要という旨の注意書きが出てくるが、どういう意味を指しているのか?
A:
EV コード署名証明書は、Driver Signing Submission やハードウェア互換性プログラム・ハードウェア認定プログラムの申請など、ダッシュボードにてご利用いただけるドライバー関係の申請を利用する上で必要となります。EV コード署名証明書は、申請するドライバー ファイルの署名に使用するものではなく、ダッシュボードのアカウントのいわば身元証明の目的で登録します。
ただし、サービスを利用する場合は、その EV コード署名証明書を使って、申請用のファイルに署名をする必要があります。ダッシュボード側は、認証プロセスの一つとして、署名に使われた証明書とアカウントに登録されている証明書を照らし合わせ、同一のものであるかを確認します。
[更新] サービスを利用する場合は、アカウントに登録されている証明書を使って、申請用のファイルに署名をする必要があります。ダッシュボード側は、認証プロセスの一つとして、署名に使われた証明書とアカウントに登録されている証明書を照らし合わせ、同一のものであるかを確認します。ただ、アカウントに EV コード署名証明書ではない、従来のコード署名用証明書も登録されている場合は、その証明書を使用して申請用ファイルを署名することが可能です。
o Driver Signing Submission の場合は、申請用の .cab ファイルに、EV コード署名証明書を利用して署名を行います。署名は、WDK に含まれている Signtool ツールの sign オプションで行います。
[更新] Driver Signing Submission では、申請用の CAB ファイルに、アカウントに登録した証明書を利用して署名を行います。署名は、WDK に含まれている Signtool ツールの sign オプションで行います。
o ハードウェア互換性プログラム・ハードウェア認定プログラムの場合は、サブミッション用の HLKX または HCKX ファイルに、EV コード署名証明書を利用して署名を行います。署名は、HLK Studio または HCK Studio 内にて、前述のファイルを作成する際に行います。
[更新] ハードウェア互換性プログラム・ハードウェア認定プログラムの場合は、サブミッション用の HLKX または HCKX ファイルに、アカウントに登録した証明書を利用して署名を行います。署名は、HLK Studio または HCK Studio 内にて、前述のファイルを作成する際に行います。
なお、EV コード署名証明書の入手方法に関しては、証明書を提供している第 3 者認証機関に別途 お問い合わせ下さい。
Q: Driver Signing Submission とはそもそも何か?
A:
Driver Signing Submission は、マイクロソフトより提供されている認定用のテストを受けることなく、マイクロソフトからのドライバー署名を取得するサービスです。
このサービスでは、申請者が、ドライバーの検証を行ったということを「証言」し、規約に同意いただいた上で、署名の対象となるドライバー パッケージをダッシュボードに申請します。ダッシュボードによる認証プロセスを経た後は、ダッシュボードより、マイクロソフトの署名が追加されたパッケージをダウンロードすることが可能になります。
Q: では、Driver Signing Submission では何をすればいいのか?
A:
まず、ドライバー パッケージを格納した CAB ファイルを作成します。CAB ファイルにあたっては、ドライバーパッケージ内のファイルを含んだフォルダーに対して圧縮を行う必要があります。作成後はハードウェアダッシュボードより、Create Driver Signing Submission の項目を選択いただき、ページ内の各項目を記入いただいた上で申請を行います。
Q: ハードウェア ダッシュボードを利用したら、ドライバーにどのような署名が行われるのか?
A:
ダッシュボード内のサービスによって、署名の行い方が変わります。
o Driver Signing Submission の場合
Windows 10 に対応した署名が付与されているカタログファイル (.cat) が提供されます。ただし、カタログファイルは Windows 8.1 以前の OS には対応しておりません。Windows 10 の x86、x64、もしくはその両方のプラットフォームに対応した署名が、申請内容に応じて、提供されます。
o HCK/HLK の場合
パッケージ内のファイルの種類に合わせた署名が行われます。
· バイナリ ファイル
対象 OS に合わせた埋め込み署名が行われます。特に、Windows Vista もしくは Windows 7 が対象 OS に含まれている場合、SHA-1 の署名が付与されます。なお、申請前に既に署名が付与されている場合は、署名が上書きされるのではなく、追加される形で署名が行われます。
· カタログ ファイル
ドライバー パッケージの対応 OS に Windows Vista が含まれている場合、互換性のために、SHA-1 の署名が付与されます。それ以外の場合は、SHA-2 の署名が付与されます。
補足
Signtool では、一つの特定のファイルに対して複数の署名を行う、Signtool sign コマンドの /as オプションと呼ばれる機能があります。
複数の署名を行う対象のファイルは Portable Executable (PE) というフォーマットでデータを格納しているバイナリ ファイルです。代表的な .exe ファイルをはじめ、ドライバーのバイナリ ファイルでもある .dll ファイルや .sys ファイルも、PE ファイルとして分類されています。 ただし、この動作を行うことが可能なのは、上記の種類のファイルに限られており、ドライバーのインストールに必要なカタログ (.cat) ファイルは、PE ファイルではないため、複数の署名に対応していません。
将来的に、ドライバーに対しても SHA-1 の廃止ポリシーが適用されると予想し、Windows Vista と Windows 7 以降の OS 両方に対応した一つのドライバー パッケージを作成する為に、パッケージに複数の署名を付与することを検討する方もおられるかもしれません。 しかし、上記にてお伝えした通り、カタログ ファイルは一つの署名しか所持できないため、そのようなパッケージの作成はできないことを、予めご理解いただけたらと思います。
PE ファイルの仕組みと、Authenticode 署名との関係について、詳細が以下のドキュメントにて記載されておりますので、ご参照いただけますと幸いです。 Windows Authenticode Portable Executable Signature Format (英語 Word ファイル) https://msdn.microsoft.com/en-us/windows/hardware/gg463180.aspx |
以上、概要までではありますが、ドライバー署名に関するよくあるご質問について、ご説明させていただきました。
特にドライバー開発に関する署名のしかたについて悩まれている方のお役に立てたらと思います。