Windows 10 Anniversary Update で適用されたドライバー署名の新しいポリシーについて

こんにちは。JS です。   以前、ブログ エントリ「Windows 10 と SHA-1 廃止ポリシーによるドライバー署名への影響について」で、Windows 10 で新しくなったドライバーの署名ポリシーについて触れたかと思います。当時はポリシーの事前のご案内であったため、今年 7 月 29 日 にリリースされた Windows 10 Anniversary Update で、そのポリシーが実際に適用されるようになりました。 この適用により、本格的にマイクロソフトの署名が必要となったため、ドライバーの開発者の皆様はこの先どのような対応が可能か、検討しているかと思います。実際、我々サポートチームも、ポリシーがどのように適用され、どのような対応が可能かについて、お問い合わせをいただいております。そのため、皆様のご参考になりますよう、今回のエントリでは、Windows 10 のドライバー署名ポリシーを一度おさらいし、注意点やよくある質問についても触れたいと思います。   Q: Windows 10 Anniversary Update のドライバー ポリシーはどういったものなのか? A: Windows 10 Anniversary Update では、基本的に、カーネル モードで動作するドライバーは、マイクロソフトより発行された証明書を用いた署名が付与されている必要がございます。もしマイクロソフトによる署名が付与されていない場合、ドライバーのロード時にポリシーが適用され、ドライバーが動作しません。ただ、Windows 10 Anniversary Update でも、特定の条件を満たしている場合に限り、第三者認証機関より発行された証明書を利用した Authenticode 署名 (自己署名) も有効なドライバー署名として扱われます。   Q: 自分で Authenticode 署名したドライバーは、Windows 10 Anniversary Update…


ドライバー インストール時のセキュリティ ダイアログにまつわるお話

(更新 2016/09/12) – Windows 7 で見られるダイアログ表示に関連した問題について追記しました。本文をお読みの上 ご確認ください。 こんにちは。JS です。 今回は、ドライバーのインストール時における証明書の認証について、お話をします。   ~~~   多くのユーザーは、ドライバーをインストールする時に、以下の様なダイアログを見たことがあるかと思います。     ただ、どのドライバーも必ず上記のようなダイアログが表示されるというわけではなく、表示されないままインストールの処理が行われるものもあります。その理由は、署名にあります。   署名されているドライバーには、通常、以下 2 種類のうちいずれかの署名が付与されています。 1.    マイクロソフトより付与された、WHQL 署名 2.    ドライバー開発者自身で付与された、Authenticode 署名 (自己署名とも呼びます)   このうち、2 の Authenticode 署名がされたドライバーをインストールする場合、インストール時にダイアログが表示されます。   最近では、このダイアログについて、どういった理由によって発生しているのかお問い合わせをいただいています。なので、その疑問を解消するために、今回は、このダイアログ周りについて解説したいと思います。   なぜダイアログが発生するのか? ダイアログを見ると、「<開発元名> からのソフトウェアを常に信頼する」と記述されているチェックボックスがあります。また、ダイアログ下部においても、「信頼する発行元からのドライバーソフトウェアのみをインストールしてください。」といった文言があります。   上記 2 点の記述は、いいかえますと、インストールしようとしているドライバーの署名に使った証明書は、ユーザーにとってまだ信頼されたものとして判断されていないことを意味しています。   ダイアログが表示される理由は、マイクロソフトがセキュリティ上の措置として、信頼されたものとして判断されていない発行元からの証明書については、一度ユーザーの確認を取る為に行っているためです。 このような証明書を利用した場合でも、OS は証明書の発行者を辿り、クロス証明書により、最終的にはマイクロソフトが信頼している証明機関が発行したものと確認できる為、ドライバーのインストールが可能になります。ただ、実際にインストール時の検証で確認される発行先は、認証機関ではなく、ドライバーの開発元となるため、OS は、その開発元を信頼されたものとして、自動的には判断することができません。したがって、ダイアログが表示されます。 なお、チェックボックスを有効にした状態で [インストール]ボタンを押すと、今後 同じ発行元からの証明書を利用して署名したドライバーをインストールする際は、ダイアログは表示されず、自動的にインストールの処理が行われます。   では次に、OS がどのように証明書が信頼できると判断するかについて説明します。  …


Windows 10 と SHA-1 廃止ポリシーによるドライバー署名への影響について

  [更新] 2 月 17 日 に、ダッシュボードで行われる署名の詳細に関する記述を変更しました。また、ダッシュボードの運用に関するご質問についてのご案内を追加しました。 [更新] 1 月 28 日 に、Windows 10 で無効となる署名について、ユーザーモードドライバーに関する記述を追加しました。   こんにちは。JS です。   現在、ドライバーの署名に関する今後の対応について、ドライバー開発者の多くは何かしらの質問を抱えているかもしれません。 Windows 10 のリリースに合わせて署名ポリシーに大きな変更があり、また、SHA-1 ハッシュ アルゴリズムを利用しているコード署名用証明書 (以下 SHA-1 証明書) の廃止についても、適用が開始される 2016 年 1 月 1 日が近づいているので、今後 どのような方法でドライバーの署名を行うべきか、数々のお問い合わせをいただいております。   そのような質問を出来る限り解消できるよう、現在 Windows ではどのようにドライバー署名を利用していて、今後どのように利用する予定なのか、今一度 まとめた上でご紹介したいと思います。   このエントリでは、大きく分けて以下 3 つのカテゴリーに関するご説明をさせていただきます。 1.    Windows 10 のドライバー署名ポリシーについて 2.    SHA-1 廃止ポリシーによるドライバー署名への影響について 3.    Windows ハードウェア ダッシュボードの利用について…


Windows 7 での SHA-2 コード署名サポート

[更新] ご案内しておりました SHA-1 ハッシュ アルゴリズムの廃止ポリシーにつきまして、現時点では、ドライバー署名に利用される証明書がポリシーの対象外となりましたことをご案内します。最新の廃止ポリシーに関するご案内は、以下のサイトをご参照ください。 Windows Enforcement of SHA1 Certificates <http://social.technet.microsoft.com/wiki/contents/articles/32288.windows-enforcement-of-sha1-certificates.aspx> こんにちは、JS です。今回は、Windows 7 と Windows Server 2008 R2 で SHA-2 コード署名をしたドライバーをご利用いただけるようにするために、以下のセキュリティ アドバイザリが公開されましたことを報告いたします。   マイクロソフト セキュリティ アドバイザリ: Windows 7 および Windows Server 2008 R2 で SHA-2 コード署名サポートを利用可能 (2015 年 3 月 10 日) <https://support.microsoft.com/en-us/kb/3033929/ja>   マイクロソフト セキュリティ アドバイザリ 3033929 <https://technet.microsoft.com/ja-jp/library/security/3033929>   このセキュリティ アドバイザリによって、今まで SHA-1 の署名にしか対応していなかった…


ドライバーの Authenticode 署名の方法

こんにちは、JSです。今回は、ドライバー署名の方法について少しお話をしたいと思います。   大半のドライバーは、OS を支える機能などが動いている「カーネルモード」で動作しているので、OS に大きな影響を与える可能性があります。そのような事態を防ぐために、ドライバーが安全なものであるという信頼を示す方法として署名という仕組みを取り入れています。署名はドライバーをインストールする上で必要不可欠なので、このブログ内でも何度か署名について話してきました。まさかたさんのエントリ「ドライバーのデジタル署名の基礎」や、なおきお~さんのエントリ「ドライバーのデジタル署名の留意点」等を読めば署名の役割を理解できるかと思われます。しかし、実際ドライバーに署名をどう加えるのかについては詳しくご案内する機会がなかったので、今回は Authenticode 署名を例として使って、ドライバーに署名する手順を、注意点も含めてご紹介したいと思います。   Authenticode 署名までの手順を大きく分けると、以下の 5 つのステップになります。 1. 署名用のプログラムをインストール 2. 商用の認証局から、Authenticode 署名用の証明書を取得 3. 関連するクロス証明書をダウンロード 4. カタログファイルの作成 5. カタログファイルに署名 では、これからそれぞれの手順について説明いたします。ちなみに、今回 私は Windows 8.1 x64 環境を使用しています。   1.   署名用のプログラムをインストール 署名するためには、Windows Driver Kit (WDK) が必要になります。Windows 8 以降に対応するためには、Visual Studio 2013 がインストールされた環境への Windows Driver Kit 8.1 Update のインストールが必要となります。以下のサイトにある「WDK 8.1 Update (Windows 8.1、8、7 ドライバー用)」の項目から WDK をダウンロードしましょう。   Windows 8.1: キットとツールのダウンロード <http://msdn.microsoft.com/ja-jp/windows/hardware/gg454513>…


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

ご無沙汰しております。なおきお~です。 春になり、花粉症の私には、厳しい季節ですが、花粉を除けば、過ごしやすい温かい日が少しずつ増えてきて、過ごしやすくなってきました。 ただ、温かい日が増えてきたとはいえ、季節の変わり目は、体調を崩しやすいので、皆様もお気を付けください。   さて、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) http://msdn.microsoft.com/en-us/library/windows/hardware/ff548231   続いて、"まさかた"さんの記事でご紹介した"カーネル モードのコード署名の手順"のドキュメントで比較的 勘違いが多い項目の留意点をご案内します   ①     カタログ ファイルに対象となるOSを指定する Inf2cat.exeの/osオプションで、対象となるOSを指定することができます。このオプションで対象とするOSを漏れなく指定してください。もし、Inf2cat.exeで対象とするOSが指定できない場合は、Inf2cat.exeのバージョンが古いかもしれないのでWDK8.0のInf2cat.exeを使用しているかを確認してください。 ②     クロス証明書を指定する…


ドライバーのデジタル署名の基礎

  久方ぶりです。まさかたです。 さて、今回は、ドライバーのデジタル署名のお話をしたいと思います。   始めに、ドライバーのデジタル署名についてあまりご存知ない方に、簡単にデジタル署名とは何か?なぜドライバーに署名が必要なのか?ということについてお話ししたいと思います。 まず 「署名」 という言葉の意味について辞書を見てみますと、例えば「本人が自分の名を書類などに書くこと。また、その書かれたもの。」と書かれております。 これは、ドライバーにおける署名も同様で、ドライバーの場合は、書類にではなくドライバーパッケージもしくはドライバーのバイナリそのものに対して、作成者本人が誰であるかを示す名前を記すことになります。 それでは、なぜドライバーに対して、作成者が誰であるのかを示す必要があるのでしょうか? これは言うまでもないことかもしれませんが、作成者の分からないドライバーをご自身の PC にインストールすることは、決して安全とは言えないからです。 というのも、現在は UMDF やプリンタードライバーのように、一部のドライバーはユーザーモード空間で動作するものがありますが、多くのドライバーはカーネルモード空間で動作しています。 カーネルモード空間は、その名の通り、OS の主要な機能を管理するモジュールを始めとして、その他のドライバーも動作するようなメモリ空間です。 そのため、カーネルモードで動くドライバーは、うっかりにせよ意図的にせよ、そのような OS やドライバーが管理するメモリを触ることができてしまうわけです。 ただ、実際には、そのようなメモリをあっさりと書き換えることができ、さらにそのまま動作してしまっては、意図しない動作をしてしまったり、大切なデータが破壊されたり、さらにはデバイスが誤動作、故障することもあり得ます。 そこで OS は、カーネルモード空間上で、このような不正な操作を検出した場合には、このまま動作を継続させてさらに深刻な事態に陥ることを回避するために、その動作を停止させます。 この動作の停止が、一般的にブルースクリーンですとか、BSOD (Blue Screen of Dead) と呼ばれる形で表面に出てくることがあります。 話が逸れましたが、ご自身の PC にドライバーをインストールする場合、それが誰によって作成されたのか、信頼できるものであるかを確認することは大切なことです。 そして、それを確認するための手段のひとつとして、デジタル署名というものがあるわけです。 なお、Windows Vista や Windows 7 では、署名のされていないドライバーや、署名の発行元の信頼性を確認できないドライバーをインストールしようとした場合、以下のような警告が表示されます。 図1. ドライバーソフトウェアの発行元を検証できません 32bit OS では、上記の警告が出た場合でも、「このドライバーソフトウェアをインストールします」を選択してインストールすれば、動作させることができますが、64bit OS では署名は必須となっており、署名がない場合は、ドライバーをインストールしたとしても動作させることができませんのでご注意ください。   さて、具体的にドライバーに対して、どのようにして署名を行うかについてですが、署名そのものについての技術的なお話は、暗号化などさらに深い話が待っていますので、ここでは割愛させていただきます。 ただ、Windows OS のドライバーで利用可能な署名の方法にはいくつか種類があり、一般的には INF ファイルや…


INFファイルを記述する

<span style="FONT-FAMILY: 'MS ゴシック'; FONT-SIZE: 10pt; mso-ascii-font-family: Arial; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 'MS ゴシック'; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: 皆さん、お久しぶりです。なおきお~です。   以前、私よりドライバをビルドする方法をご案内いたしました。 今回は、ビルドしたドライバをインストールするためのINFファイルの記述方法をご案内したいと思います。 また、前回と同様 toasterのbusドライバを例にしたいと思います。   まず、ドライバのインストールでは、INF ファイルが必要であり、toasterのbusドライバのINFファイルは、%BASEDIR%\src\general\toaster\infにCPUの種別ごとに格納されており、例えば、x64の場合、%BASEDIR%\src\general\toaster\inf\amd64\bus.infになります。 このINFファイルをメモ帳などで、オープンしますと、最初に[Version]セクションが記述されています。   [Version] Signature=”$WINDOWS NT$” Class=System ClassGuid={4D36E97D-E325-11CE-BFC1-08002BE10318} Provider=%MSFT% DriverVer=09/21/2006,6.0.5736.1 CatalogFile=toaster.cat   [Version]セクションには、Signature は、OS の種類を記述しますが、以下のように、Overviewなので、通常は、サンプル通り、$Windows NT$のままでよいと思います。   $Windows NT$:  NT-based operating systems $Windows 95$:  Windows 9x/Me $Chicago$:        All Windows operating systems…