準備OK? EVコードサイニング証明書の現状とその実際
Microsoft社が表明したコードサイニング証明書におけるSHA-1のアルゴリズムの利用期限が迫り、またWindows 10において証明書の要件が変更されるなど、証明書に関連するセキュリティ強化に変化が起こっている。本稿では、改めて証明書を取り巻く環境を整理するとともに、必須となりつつあるEVコードサイニング証明書を実際にグローバルサインから取得しながら証明書の利用方法をまとめていこう。
SHA-1からSHA-2への本格移行開始
SSL証明書やコードサイニング証明書におけるハッシュアルゴリズムとして、これまではSHA-1がデファクトスタンダードとして利用されてきた。しかし、SHA-1に対する攻撃法は10年ほど前に発見されており、コンピュータの演算処理能力も向上してきていることから、SHA-1の強度は十分ではない状況にある。より強力なSHA-2への移行はこれまでも推奨されてきたが、最近になってOSベンダーほか、Webブラウザベンダーが加入しているCAブラウザフォーラム(CA/Browser Forum)やNIST(アメリカ国立標準技術研究所)においてSHA-1対応の打ち切り計画が発表され、WebブラウザではSHA-1への警告が実装されるところまできた。
アルゴリズム | ハッシュ長 |
---|---|
SHA-1 | 160ビット |
SHA-2 | 224、256、384、512ビット |
ChromeやFirefoxでSHA-1警告表示開始
WebブラウザのHTTPS(SSL)接続ではURL欄に鍵マークが表示されるが、Google Chromeでは2014年末からSHA-1のSSL証明書の場合に鍵マークを▲と表示して警告をするようになった。
Mozilla FirefoxでもSHA-1のSSL証明書の利用について、Webコンソールで警告されるようになっている。
SHA-1サポートは、SSLが2016年末、コードサインが2015年末まで
Windowsにおける証明書関連のトピックをピックアップすると、表2のようなスケジュールとなっている。
時期 | 概要 |
---|---|
2013年11月 | Microsoft社におけるSHA-1廃止計画発表 |
2015年3月 | Windows 7およびWindows Server 2008 R2にてSHA-2対応のアップデート |
2015年7月 | カーネルモードソフトウェアにMicrosoft社の署名が必要となったWindows 10の提供開始 |
2015年10月 | Microsoft社の署名を付与する開発サイトにおいて、EVコードサイン証明書の必須化 |
2015年12月 | コードサインにおけるSHA-1署名の最終期限 |
2016年12月 | SHA-1 SSL証明書利用停止 |
以前はWindows 7やWindows Server 2008でSHA-2の取り扱いが完全ではなかったこともあり、SHA-2への移行には本腰を入れ難かったが、2015年3月に行われたアップデートによってWindows 7やWindows Server 2008においてもSHA-2対応し準備は整った(Windows 7 および Windows Server 2008 R2 で SHA-2 コード署名サポートを利用可能)。
そして、SHA-1のコードサイニング証明書におけるタイムリミットは2015年末である。2016年以降に行ったSHA-1での署名は有効なものと扱われず、署名なしのソフトウェアと同じ扱いになってしまう。また、2015年以前にSHA-1で証明したソフトウェアであっても、署名日時を証明するタイムスタンプ付きの署名でないと(タイムスタンプなしでも署名自体はできる)、その署名は有効ではなくなってしまうことになっている。証明書の切り替え、新規取得時には注意しておきたいポイントである。
Windowsバージョンによるコードサインの違い
Windowsソフトウェアへの署名は、(EV)コードサイン証明書によるものかWHQL(Windows Hardware Quality Labs、認定プログラムによる署名)によるものが、推奨もしくは必要とされていた。Windows 10からはそのポリシーが変更され、これまでとは異なる方法が追加された。バージョンごとの状況を整理すると以下のようになる。
バージョン | ソフトウェア種別 | 署名方法 | EVによる違い | ||
---|---|---|---|---|---|
Microsoftが署名 | 認証局証明書による 自己署名 |
||||
認定 | 申請 | ||||
Windows Vista Windows 7 |
アプリ | – | – | ○ | |
ドライバ | ○ | – | ○ | ||
Windows 8 | アプリ | – | – | ○ | ブロック回避 |
ドライバ | ○ | – | ○ | 一部必須 | |
Windows 10 | アプリ | – | – | ○ | ブロック回避 |
ユーザーモードドライバ | ○ | – | ○ | ||
カーネルモードドライバ | ○ | ○ | × | 必須 |
ソフトウェアへの署名はWindows 2000のころから行われているが、Windows Vista以降は署名されていないアプリケーションには警告が表示されるようになった。
また、64ビット環境では署名のないドライバのインストールはブロックされる。
続いてWindows 8からはSmartScreenフィルタが導入され、Microsoft側で管理するレピュテーション(評価)で一定以上の評価が得られないと実行がブロックされるという動作になった。
実行をブロックされないようにするためには、署名のあるなしにかかわらずソフトウェアの利用実績を積んで一定の評価をクリアするか、EVコードサイン証明書での署名を行うことで最初から高評価を得る必要がある。利用実績を積んでいくというのは難しいので、新規ソフトウェアでブロックされないためには、EVコードサイン証明書を利用することになる。
またWindows 8になってからは、プリンタドライバなどのユーザーモードドライバであっても署名されていないドライバはインストールがブロックされるように変更されている。
Windows 10における証明書にかかわるポリシー変更
Windows 10からの大きな違いは、カーネルモードドライバの署名であり、Microsoft社による署名が必須となった(MSDNブログでの解説)。
以前はマルウェアなどでも、認証局から証明書を入手し自分で署名さえしてしまえば、システムの挙動を変えたりほかのソフトウェアのメモリを覗けるカーネルモードで動作させることができた。Windows 10からはソフトウェアの配布者(配布そのものではなくファイル製作者)をMicrosoft側で管理することで、悪意のあるソフトウェアの排除や追跡が行いやすくなる。また、Microsoftによる署名時にプログラムテストやウイルスチェックを統一的に行うことになるので、Windows 10では品質面での向上も期待できる。
Windows 10カーネルモード用の署名方法は2つ
ポリシー変更に伴い、Windows 10におけるカーネルモードドライバの署名には、以下の2つの手段が用意されている。
- 従来からのハードウェア互換性プログラムによる署名
- 新しく用意された、開発者向けサイトでの申請による署名
新しく用意された、開発者向けサイトにてMicrosoftに署名してもらう方法は、「ハードウェア デベロッパー センター」(Hardware Dev Center)というサイトで作業を行う。
ハードウェア デベロッパー センターのURL
https://msdn.microsoft.com/ja-JP/windows/hardware/
このサイトでの作業においてEVコードサイン証明書が必要であるが、証明書の位置付けはコードサインとは少々異なる。ドライバへの署名のためではなく、申請者証明のためである。つまり所有者の所在も認証しているEVでなければ意味がない。なお、手続き上アーカイブファイルの送信時に署名作業があるが、ドライバ自体への署名は不要である。
また、カーネルモードドライバにおけるEVコードサイン証明書の必須化に伴い、Hardware Dev Centerでの対応認証局の拡大も行われている。従来は2つの認証局のみの対応だったが、2015年10月時点では5社の認証局に対応している。
このように単にソフトウェアへの署名が必要という段階は終了し、より強力な認証機構に移行していく流れは今後も続いていく。