ここ数日ちらほらと耳にするようになったSuperfish。私もスルーしてましたが、そういえば双子の娘に買ったノートパソコン、Lenove製だったな~ってことで調べてみた。
ネットにはもうすでに良質の解説記事やらブログ記事があるようなので、重複情報ではなくて、そこまでコンピューターとかネットとかセキュリティーに詳しくない人向けに、仕組みや対策、という観点からではなく、どちらかとういうとネットリテラシーとITリテラシー向上につながるような視点で説明していきます。
自分のPCは大丈夫?
まず気になるのは、自分は大丈夫?ってことですが。問題があるPCはレノボ製でしかも特定の時期に出荷されたものに限定されてます。
この半年ぐらい内に買った人は下のページでチェックできます。
Check if you trust the Superfish CA
安心したい人はレノボの公式ページを読むといいです。
なんでみんな騒いでるの?
レノボのPCやノートパソコンは沢山売れてるんで、問題のPCを持っている人も多いでしょう。そういう人たちが騒ぐのは当然ですが、持ってない人たちも「マジかよ~」とか「ありえね~」とか「レノボやっちまったな~」みたいな感じで騒いでます。
なんでかというと・・ いくつかに分けられるんですが、ざっくりいうと
- 掟(おきて)破りなソフトウェアを工場出荷時点であらかじめインストールして販売した。
- この掟破りなソフトウェアの「掟(おきて)破りっぷり」が半端ない。
- レノボのセキュリティーへの意識が低いと思われるので、レノボ製品に対する信頼が落ちた。
- レノボPCを持ってない人も間接的になんらかの影響を受ける可能性がある。
ということです。
この掟破りなソフトウェアの名前が「Superfish」です。
Superfishってウイルスか何かなの?
Superfishそのものは、一応はユーザーの利便性を向上する目的で作成されたソフトウェアです(たぶん。知り用もないですが、そう考えても良いと私は思います)。悪意を持って作られるウィルスやマル・ウェアではないと考えて問題ないと思います。
レノボにしてみても、この利便性を付加価値とみて、Superfishをプリインストールする決定をしたのは間違いないです。ただ、レノボ側の問題としては、このソフトウェアをプリインストールするかしないかの判断を下すプロセスに必要なセキュリティー・レビューが無かった、もしくは機能していなかった、という点です。
Superfishが破っている掟って何?
私たちがオンライン・バンキングなどをするときって、信頼できる通信を使うようにって耳にタコが出来るほど言われてますね。知ってか知らずか、ほぼ全ての銀行(調べたわけではないですが、常識として)がすでにそういう信頼できる通信を使ってます。そのおかげで私たちは安心して銀行の残高を見たり入金したりできます。
なぜ「銀行」のページを信頼して、例えば残高を見たりするのでしょう?本当にそのページは、その銀行のページなんでしょうか?誰かのブログのページかもしれないじゃないですか?
この「信じる」ってのは何を根拠にしてるのでしょう?
それはPCが出荷されるときにあらかじめインストールされてくる複数の「絶対に信じていい証明書一覧」と照合して「信じるに値する」という判断が下されているからです。
銀行のウェブサイトは「私を信じてください~!」っと言いながら「ABC銀行証明書」というのをブラウザーに送り付けてきます。その「ABC銀行証明書」には実は「VeriSignが保証します!」みたいな「お墨付き」が含まれています。ブラウザーは、PCにプリインストールされている「絶対に信じていい証明書一覧」の中にVeriSign証明書があるかどうか調べます。あれば、「絶対に信じていい証明書の発行元である会社(VeriSign)がこのABC銀行証明書も信じていいよ」っといってるからOKでしょう、ってことでABC銀行証明書を信用し、銀行ページをユーザーに表示するわけです。
ブラウザーが信頼できないと判断したら、「信用しちゃいけませんよ」というメッセージが代わりに表示されます。
さて、Superfishがやっちまったのは、この「絶対に信じていい証明書一覧」に、自分自身の「Superfish証明書」を工場出荷時に混ぜてしまったことにあります。
これはかなりひどい掟破りです。
ABC銀行証明書の例でも分かるように、「絶対に信じていい証明書」に「信じちゃいけない証明書」を混ぜたPCを出荷してしまったのです。
どのように悪用されるの?
「Superfish証明書」がその威力を発揮するのは、「Superfishが保証します!」というお墨付きが付いた証明書が送られてきたときです。この「お墨付き」を与える作業には「秘密の暗号」というか「秘密の鍵」が必要なんですが、この「秘密の鍵」、ハッカーがSuperfishのソフトウェアから取り出すことに成功しています
Errata Security: Extracting the SuperFish certificate
残念ながらこの「鍵」および「鍵をかける対象の証明書」の一対が問題のレノボPCユーザー全てを危険にさらすことになるのです。
つまり、その秘密の鍵(すでに秘密でもなんでもないですが・・)を使って、証明書に「お墨付き」を付け放題。そして、問題のレノボPCでSuperfishと「Superfish証明書(実はこちらの方が深刻)」をまだ除去していない状態だと、私が勝手に作った「勝手証明書」がホイホイ信用されてしまうのです。(通常、ちゃんとした証明書を作るには手続きがあり、費用も安くはないです。)
この勝手証明書でウェブサイトを作り、ドメイン名をそれっぽくして(ABC銀行に関連していうような、例えば abc-bank-supoort.com )、そこでパスワードをユーザーに入力するようにさせた場合、問題のPCだとブラウザーは表示しちゃうことになるわけです。
また、この勝手証明書でステキなアプリケーションを作り、ダウンロードしてもらいます。アプリケーションにも「署名」をするタイプのものがありますが、このアプリケーションは「信頼できます!」ってことですんなりインストールされちゃいます。アプリケーションはあとはやりたい放題ですけどね。
他にも、例えば公共WiFiを問題のPCで利用したとして、悪意あるハッカーが用意した「偽のアクセスポイント」に誤って接続してしまったりした日には、銀行から何から今まで外から読むことが出来なかった内容を、被害に合っていることに気付かずに、盗聴される可能性もあります。
なにがやり過ぎなのか?
このSuperfish、一応ユーザーの利便性を高める目的の機能を提供してます。ブラウザーがユーザーに、例えばAmazonの商品ページを表示する前段階で、そのページをスキャンして、Amazon以外での同一商品の値段などを表示するパーツをページに挿入します。なので、Amazonのサーバーが送り出したページとは多少ことなるページ内容が表示されます。これを発見したのはGoogleの有能なエンジニアだったらしいですが、この辺りの挙動を見て「ん、待てよ・・・」っと思ったのでしょう(そういう人だからGoogleで働いてるんでしょうね~)
っで、この機能を「証明書で守られているサイト」でも提供するために、上に解説したような「力技」っで実装してしまったわけです。あまりにも安直というか、ネット業界の大原則無視というか、バカにしているというか・・・。
そしてレノボが批難されるべきは、このソフトウェアの本質を見抜けなかったこと。(そして、これはマイクソフトに勤める私にも響いてくることです。しっかりしないとね!)
間接的な影響
これはあくまでも可能性であり、しかもSuperfishに限らず、セキュリティーの脆弱性では常にありうることなんだけど、2次災害として問題のレノボPCを持っていなかったとしても被害にあう可能性はあります。
例えばシナリオとしては、問題のレノボPCを持っている人で、Superfish対策を撮っていない人が、公共WiFiでパスワードを盗まれる。その人はパスワード使いまわし派だったので、Gmail、DropBox、など全てに侵入される。DropBoxには秘密にしておくべき個人情報や連絡先リストが載っていた。そのリストにあたなが含まれていた場合。
残念ながら、こういうリスクは常にあります。
あとがき
というわけで、ぶっちゃけて言うと該当レノボPCを持っていない人はスルーでもOK(間接的に影響はあるかもしれないけどどうすることも出来ない)。
ネットのセキュリティーの原則に触れる内容なので、ITリテラシー向上を目的に内容を理解するのはいいかも。
アンチ・レノボや煽り内容のページなんかもあるみたいだけど、こういうのは「人的ミス(レノボがSuperfishのプリインストールを許可した)」なので、将来同じようなことは起こる。
そんな感じです。
参考にしたページ
Superfish: Lenovo ditches adware, but that doesn't fix SSL megavuln – researcher • The Register
http://www.theregister.co.uk/2015/02/19/superfish_lenovo_spyware/
Errata Security: Some notes on SuperFish
Lenovo installs adware on customer laptops and compromises ALL SSL. | Marc's Security Ramblings