Hatena::ブログ(Diary)

めもおきば このページをアンテナに追加 RSSフィード

Contact: akitan@gmail.com
noteにて投げ銭受付中 ⇒ 【投げ銭】こたろー写真

2015-02-20

Superfish/eDellRootが危険な理由

Lenovo製のPCの一部にSuperfishというマルウェアが標準でインストールされていることが確認され、大きな問題となっています。

経緯や影響範囲等については、Kangoさんの記事にまとまっているのでそちらをご覧ください。

この記事では、Superfishというマルウェアがなぜ特別に危険かを解説します。

Superfishの目的

このSuperfishの目に見える目的は、ブラウザで表示しているウェブサイトに広告を挿入することです。言い換えれば、ウェブサーバから取得したHTMLを書き換えて勝手なJavaScriptを挿入するすることにあります。

目的だけ見れば一般的なアドウェアの一つとも言えます(もちろんそれだけでevilだと個人的には思います)が、Superfishはさらに踏み込んで、普通のやり方では書き換えができない暗号化されたウェブサイトを書き換えるために特殊な方法を利用していますが、その実装方法に大きな問題があるために、広告が挿入されるというレベルをはるかに超えた脆弱性となっています。

前提として、TLS──いわゆるSSLは、ウェブサイトの通信内容を秘匿するだけで無く、その内容の改竄を防ぐことも目的としています。そのため、SuperfishではMITM攻撃と呼ばれる手法で、このTLSの暗号化通信に「穴」を開けています。

TLS(いわゆるSSL)による安全な通信

まず、通常の暗号化された通信を見てみます。

安全に通信を行うためには、自分(のPCで動いているブラウザ)と、その通信相手のウェブサーバの他に、様々な基準によって信頼されたCA(認証局)を利用します。

ウェブサーバは、暗号化するための「秘密鍵」とウェブサイトドメインネーム(このページで言えば「d.hatena.ne.jp」)が書かれた「証明書」を持っていますが、あらかじめこの証明書に、CAの「お墨付き」の判子を押してもらっておきます(図の1)。

その一方で、ブラウザは自分が信頼できるCAの一覧を持っています。これがルート証明書のリストと呼ばれるものです(図の2)。

f:id:nekoruri:20150220025019p:image

安全な通信がしたいときに(3)、まずブラウザはウェブサーバから証明書を送ってもらい、そこに押された判子を見ます(4)。そして、その判子を押したCAが、自分のルート証明書のリストに含まれていることを確認します(5)。このときに、証明書に書かれたドメインネームや有効期限についてもあわせてチェックします。

ここで何か一つでも問題があれば、赤いバッテンとかで警告されてしまうわけです。

MITM攻撃

それでは、具体的にSuperfishが何をやっているか見てみます。

ざっくり言うと、2つのことをやっています。

  1. ブラウザとウェブサーバの間の通信を乗っ取るプログラムを動かす
  2. ブラウザに、乗っ取り用のルート証明書を追加する

f:id:nekoruri:20150220025020p:image

やはり最初にブラウザがウェブサーバから証明書を送ってもらうのですが(1)、Superfishがその通信を横取りしてしまいます。

Superfishは、そのプログラムの中に小さなCAを持っていて、ブラウザが通信しようとしていたウェブサーバのドメインネームでニセの証明書を作成し、Superfish CAの判子を押してブラウザに返します(2)。本来ならばSuperfish CAなんて得体の知れないCAは信頼されていないので警告が出るのですが、Microsoftの決めた基準に反して、Lenovoが勝手にこのSuperfish CAを信頼するように設定してPCを販売しています。

そのため、ブラウザSuperfish CAの判子が押された証明書を信じてしまうわけです(3)。

こうなってしまえばもうSuperfishのやりたい放題で、一旦そこで暗号も解かれてしまうので、あらためて本来の通信先ウェブサーバから取得したHTMLJavaScriptを組み込んでブラウザに返すことができるようになります(4)。

このように、ブラウザとサーバの間に入り込んで暗号化を攻撃するため、MITM──すなわち、Man-in-the-Middle 攻撃と呼ばれています。

Superfishの問題点

TLSの暗号化は、以下のような前提があって初めて機能します。

  1. ブラウザは、信頼できるCAのルート証明書の一覧を持っている
  2. CAの判子(署名)は、第三者が勝手に押せないよう「CAの秘密鍵」を秘密にしなければいけない
  3. サーバは、その秘密鍵を秘密にしている (CAですら各ウェブサーバの秘密鍵のデータは知らない!)

ところが、ブラウザに勝手に追加されてしまったSuperfish CAは、その秘密鍵を適切に管理していません。具体的には、なんとそのPC上に組み込まれたSuperfishのプログラム内にあります!これは、通信時にリアルタイムでニセの証明書を作って判子を押すために仕方無いことではあります。さらに、このSuperfish CAの秘密鍵や証明書はあらかじめ用意されたもので、全世界すべてのSuperfishで共通のものが使われていました。

となれば、あとは様々なソフトウェアのクラック技術を使えば、誰かのPC上に保存されたプログラムを調べるだけでSuperfish CAの秘密鍵を取得することができます。

恐ろしいことに、Lenovoが紹介している対応方法(電子証明書を利用したWEBサイトにログインできないについてのお知らせ)では、Superfishの通信を書き換えてMITM攻撃をしているプログラムは停止、削除しますが、ブラウザに登録されたSuperfish CAのルート証明書は削除をしません。


これが最悪です。

何が起こるか

ブラウザにはSuperfish CAとやらのルート証明書が信頼できるCAとして登録され、このCAの秘密鍵は誰もが知ることができます。

何が起こるかと言えば、誰でも勝手にウェブサーバの証明書を作成して判子を押して、ブラウザに信頼してもらうことができます。

さらに言えば、Windowsではソフトウェアにも判子による作成者チェックがありますが、それすらもすり抜けることができ、たとえば別の手段を併用してWindows Updateに紛れ込ませることで、OSコンポーネントを差し替えることすら可能かもしれません(あくまで可能性レベルで未検証です)。

こうなってしまえば暗号化も電子署名も何もあったものでは無く、TLSとかSSLとか無かった1990年代初頭に逆戻りです。Heartbleedも裸足で逃げ出すレベル。

そのほかのリスク

また、SuperfishプログラムによるMITM攻撃そのものにも問題があります。本来はウェブサーバの証明書に押された判子の確認(サーバ証明書の検証)をSuperfishプログラムがやっているわけですから、ウェブサーバが送ってきているはずの正しい証明書をブラウザは知ることができません。

そのため、例えば様々な追加情報を表示してくれるはずのEV証明書(いわゆるアドレスバーが緑に染まる奴)も機能しませんし、Superfishの実装が手抜きをしていれば、本来期限切れや、さらに別の第四者による攻撃など別の理由でエラーとなるはずの誤った証明書を知らずに受け付けてしまう可能性もあります。

あとは、Superfishが本来のウェブサーバにアクセスしている暗号化通信に関しても、適切な設定が行われていれば同等ですが、もしブラウザよりも実装の品質が低い場合、暗号化通信の内容自体が解読されやすくなっている可能性もあります(例: DHEにブラウザは対応していたはずなのにSuperfishが非対応のためPFS性が無くなっていた、など)。これはあくまで未検証ですので可能性の話にすぎません。このあたりは、続報が出てくるまで冷静に注視が必要と思います。

どうすれば「まだまし」だったのか

例えばウィルス対策ソフトなど、使用者の適切な同意があったうえでどうしても通信内容を見たいのであれば、ウェブサーバ側から来た証明書のチェックをブラウザと同じように適切に行った上で、Superfish CAのような全世界で共通なんて手抜きをせず、PC別ユーザ別に秘密鍵を生成するのであれば、あきらかな脆弱性ではなくなります。また、EV証明書なども、動的に作るニセ証明書をうまく作り込むことで「それっぽく」見せることは可能かもしれません。

とはいえ、それでもセキュリティ上のリスクが大きく拡大するのは確かなので、MITMなんて手法に頼るのは可能な限り避けるべきだと個人的には考えます。

どうすれば良いか

既にチェックサイトが用意されているので、まずは確認しましょう。

自分のブラウザSuperfish CAが登録されていなければ、「Good, Superfish is probably not intercepting your connections.」など安全そうな表示が出ることでしょう。表示内容は執筆時点のものなので今後変わる可能性があるのでちゃんと文章を読んでください。

もしSuperfish CAが登録されてしまっていた場合には、ルート証明書を削除する必要があります。

手順についてはたぶん明日になればどっかから出てくと思うのでそれを見てください……。

(2015-02-20 11:22追記) 英語サイトではWindows 8でのルート証明書削除方法が載ったようです。

細かい補足

  • 実際には、今回ターゲットとされているWindowsでは、IEChromeブラウザ個別ではなく、Windowsが提供しているルート証明書のストアを共用しています。Windows Updateなども対象となる可能性があるのはこのためです。その一方でFirefoxOSに依存せず個別に持っています。
  • 「判子」まわりは当然ながら公開鍵と電子署名のメタファですが、細かく厳密に書くと一冊の本ができあがるので、今回をきっかけに興味を持った方には以下の本を紹介します。
  • 基本的に、開発者のデバッグ用途を超えるような、特に一般利用者向けのMITMは腹を切って死ぬべきだという立場です。なぜならそのリスクを利用者に十分に説明することが現実的では無いからです。
  • MITM攻撃は、日本語としては中間者攻撃とも呼ばれます。ただでさえ簡略化した説明なので、先入観が無い方が良いという考えから敢えてこちらで表記しています。

Changelogs

__ 2015/02/20 10:46 http://support.lenovo.com/us/en/product_security/superfish_uninstall
英語サイトには証明書の削除まで告知されてるのに、日本語の方は無いとかもうね

KeysKeys 2015/02/20 17:11 「信頼されたルート証明書」を、プログラムから削除する方法ってあるんでしょうか?
あったらあったで怖いですが……なかったら手動でやるしかなくてリスクが高いですし、企業ではサポートコストも高いでしょうし。大変な話ですね。

cider_kondocider_kondo 2015/02/21 10:00 大変分かりやすい記事でした。ただ、締めくくりのせいで、変なコピペが脳内で再生されてしまいました

『Superfish、MITM、Komodiaらは、腹を切って死ぬべきだ。また、彼らはただアンインストールして終わるものではない。唯一神マイクロソフトが地獄の火の中に投げ込む者達だ。彼らのルート証明書も同様だ。理由はそのリスクを利用者に十分に説明することが現実的では無いからだ。詳しい仕様は新版暗号技術入門 秘密の国のアリス等で熟知すべし。』

__ 2015/02/21 12:04 http://support.lenovo.com/jp/ja/documents/ht102634
日本向けにも証明書削除方法 ※ただし翻訳はテキストに限る
また前コメントの英語ページが更新され、
アプリ・レジストリ・Windowsに加えMozillaの証明書も対応する自動削除ツールが公開

きんぎょきんぎょ 2015/02/21 13:57 唯一神ワロタw
これ、不正アクセス防止法違反になるんじゃないですかね?

nanasinanasi 2015/02/22 16:33 システムの認証関連の開発手伝いをしたことがあるので凄く興味のある内容でした。
認証局の登録は誰でも簡単にできてしまうとはいえ
PC製造業者がそれをやってしまうというのに驚きを感じています。
それもオレオレ認証局とは・・・恐れ入ります。
確かCTLのリストで証明書の無効化ができたと思います。
認証局の無効化が出来るかは調べてみないとわかりませんが
マイクロソフトが対応するとしたらCTLの更新なのかなーと素人ながら思っています。

nanasi2nanasi2 2015/02/22 17:59 デジタルアーツ社のD-SPAというアプライアンスがMITM的な動作をします。
プロキシとして動作して、SSLの通信を乗っ取って中身を調べるようです。

SSLの仕組みを崩してまで通信を傍受するシステムって存在していいんですかね。
http://www.daj.jp/bs/dspa/
http://www.pa-engine.net/daj/bs/faq/detail.asp?FAQID=1125&baID=22&NodeID=

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証