Copyright © 2011 pale blue ~ 17 push pin by Upupa4me, on Flickr

※Pinningを日本語に翻訳しますとピン留めとなりますが、証明書、公開鍵のピン留めというと馴染みにくいと思います。文章の構成によって、ピン留め、Pinning と使い分けさせていただきますが、ご了承ください。

IETFのドラフト文書、“Public Key Pinning Extension for HTTP”ではユーザーエージェント(例としてChromeブラウザ)はホストが提示する証明書のSubject Public Key Infoのフィンガープリントとユーザーエージェント側でピン留めしたホストのフィンガープリントの一致を要求することで、ユーザーエージェント側でもホストの身元の確認が行えるとあります。言い換えれば、ピン留めした値が不一致の際はCAの危殆化により、不正に発行されたman-in-the-middle攻撃用の証明書の可能性があるとも言えます。

Pinningにより被害の拡大が防げた実例

2011年8月にgoogleが提供しているChromeブラウザを利用しているイランの方が信頼されたルート証明機関ストア登録済みCAから発行された証明書にも関わらず、google.comのホストに接続したところ、警告を発したとのことを掲示板に投稿したことがきっかけで、この言葉が業界内で広まりました。(※Pinning年表参照)
また翌年の2012年12月にも同様の件が起きました。(※Pinning年表参照)

いずれもChromeに実装されているPinningがなければ、不正に発行された証明書の発見は遅れていたと思われます。

Pinningされた正規の組合せ

  名称 提供企業
ホスト名 Google.com Google Inc.
証明書発行CA Google Internet Authority Google Inc.
ユーザーエージェント Chrome Google Inc.

不正な組合せ

  名称 提供企業
ホスト名 Google.com Google Inc.
証明書発行CA Google Internet Authority以外のCA Google Inc.以外の会社
ユーザーエージェント Chrome Google Inc.

Chromeではgoogle.comに発行する正規な認証局をPinningしています。たとえ、信頼されたルート証明機関ストアに含まれた認証局からgoogle.comの証明書が発行されたとしても、Pinning のリストにない場合は警告表示が行われます。ほとんどの人はこの件が起きるまで、この技術がChromeに実装されていることを知りませんでした。

この件がきっかけでPinningの有効性は十分に認知され、Pinningをアプリケーション側に実装することでCA側による危殆化による不正な発行、または誤発行によるトラブルの拡大を防げることは実証されました。今後はPinningのリストを拡大していくことが課題かと思いますが、IETFのドラフトにおいても拡大には問題があると提示されています。

今後の動き

Pinningをユーザーエージェント提供側にてハードコード化し、展開していくには慎重な対応が要求されます。誰がどのような根拠で登録したのかといった登録基準や何か問題があった際のリストからの削除という概念はどうなるのか、そもそも間違って登録してしまった場合は有効な証明書が有効でなくなる危険も考慮しなければなりません。今後、Pinningが拡大していくにあたってアプリケーション側とCA側で登録するホストについての話し合いは不可欠かと思いますが、当分の間は利用者がPinningのリストの登録更新作業を行っていくものと思われます。(IETFドラフト 2.7  Interactions With Preloaded Pin Lists)
その際は誤ってPinningする可能性を考慮して、Pinningされていないホストにアクセスした際は報告程度の表示がされるように留めておくことが無難です。

対応しているユーザーエージェント

Certificate PinningはChrome Ver13以降、Android4.2以降にて実装されております。(GUIによる設定は実装されていません。) FirefoxにおいてもMozillaのSecurity/Roadmapを見る限り、導入は検討しているようです。

もしCertificate Pinning に興味がおありでしたら、モジラのAdd-Onツールの“Certificate Patrol”を導入することで、似た雰囲気の動きを感じることができます。
MicrosoftではEnhanced Mitigation Experience Toolkit(EMET)というセキュリティのユーティリティを提供しており、Ver4よりCertificatePinningと同じような仕組みが提供されております。こちらを導入すると、各自で設定したCAと証明書の組合せ以外のSSL証明書を使っているホストに接続した際にエラーが通知されます。

弊社でサポートすることはできませんが、宜しければ以下よりダウンロードしてお試しください。
Certificate Patrol :: Add-ons for Firefox
Enhanced Mitigation Experience Toolkit 4.0

Pinning年表

2011年5月4日 Chromeバージョン13にて、Pinningの実装をGoogle社員のAdam Langleyのblogで公開
2011年8月3日 Chromeバージョン13リリース
2011年8月28日 イランでChromeユーザーが不正に発行された”*.google.com”の証明書に気付く
2011年11月14日 Google社員のChris EvansとChris PalmerはPublic Key Pinning Extension for HTTPとしてIETFにドラフトを提出
2012年10月30日 Pinningが実装されたAndroid4.2をリリース
2012年12月24日 トルコのCAが”*.google.com”の証明書を発行していることが発覚
2013年7月12日 IETFのドラフト更新

 

トピック関連記事

#

2023年11月20日

CertbotとAtlasから発行したACME対応SSLサーバ証明書の設定方法

#

2017年03月01日

ID・パスワード管理の実状 - IPAの「情報セキュリティに対する意識調査」を読み解く

#

2017年08月30日

CAA (Certificate Authority Authorization)について

この記事を書きました

杉野 充洋

杉野 充洋
所属:GMOグローバルサイン プロダクトマーケティング部