【読了時間:約 9分

4月26日(日本では28日)、マイクロソフト社がWEBブラウザ Internet Explorerの脆弱性についての警告を発表し、「IEがヤバい」「ネットが使えない」などの波紋を呼んだ問題について、後々ながら簡単な解説をまとめたいと思います。

なお、現在はマイクロソフト社からアップデートが発表され、問題はひとまず収束していると見て良さそうです。もしまだアップデートしていないのにIEを使っている方は早くアップデートしてくださいね。個人的にはChromeへの乗り換えをオススメします。

 

IEの深刻な脆弱性とは何だったのか?

まず、Internet Explorer(以下IE)の脆弱性とは何だったのでしょうか。これは、IEで悪意のあるページを見たときに、PCを乗っ取ったりするためのプログラム(コード)が実行できてしまう、というもの。

攻撃するために待ち構えているWEBサイトがあったときに、そのサイトを見に行ったり、あるいはそこでデータをダウンロードしたりすると、攻撃されてPCを乗っ取られてしまう可能性があるわけですね。PCの乗っ取り以外にも、データを奪われたり消されたり、色々な可能性はあり得ます。

逆に言えば、信頼できる人が運営している悪意のないWEBサイトであれば基本的に問題はありません。だからこそ、これまでIEは脆弱性があるのにも関わらず(たぶん)普通に使われてきたわけです。さて、IEの脆弱性に話をもどしますと、これは具体的には、

– Use After Free脆弱性

という弱点を、

– ヒープスプレー

という方法(など)で攻撃するとそれができてしまうようです。

分かりにくいと思うのでこの後非常にざっくりと噛み砕いて解説しますが、まずは(エンジニア寄りの人なら)かなり分かりやすく解説してくれたサイトがありましたので引用させていただきます。より厳密に理解したい方は引用元のサイトへどうぞ。

(1)「Use-After-Free脆弱性」の大まかな説明:
使わなくなったオブジェクト(データ)への参照が不正に残っており,その参照先が別のデータに書き換えられたあとに参照を呼び出すと,意図せぬプログラムが実行されてしまう。参照を不正に残す方法としては,親オブジェクトと子オブジェクトが存在し,親を削除したが子オブジェクトへの参照を保持し続けてしまい,親の削除後に子オブジェクトへの参照を利用すると,意図せぬ別のデータが読み込まれてしまう。こういった不正な参照が起こらないように,普通は参照を厳重に管理するのだが,どこかで管理を忘れると脆弱性となる。

(2)「ヒープスプレー」のおおまかな攻撃手順:
2つのオブジェクトを宣言する。それぞれオブジェクト1,オブジェクト2とする。すると,2つのデータのメモリ上の位置は連続しているか,非常に近くなる。オブジェクト1はそのままにしておく。オブジェクト2において「Use-After-Free脆弱性」を発生させる。つまり,オブジェクト2の親を削除し,オブジェクト2そのものへの参照だけは残しておく。オブジェクト1に巨大な文字列の値,つまり攻撃用のコードを代入する。すると,オブジェクト1の近く(隣接したアドレス)には,すでに使わなくなったオブジェクト2のアドレスもあるから,そのアドレス上の値もオブジェクト1によって上書きされる。使わなくなったはずのオブジェクト2への参照を呼び出す。すると,オブジェクト1の値が呼び出されてしまい,攻撃用のコード文字列が実行されてしまう。

引用元:Windows XP等の,IE脆弱性の攻撃方法「ヒープ・スプレー」と「Use After Free」を,HTMLサンプルコードで理解しよう

さて、厳密さをかなぐり捨てて、ものすごくざっくり説明すると、

Use After Free脆弱性は、「昔ここにあった道具を後から使えるように場所で覚えておこう」とブラウザ(IEとか)が考えいる場所に、別のものを入れておいてブラウザ側から実行させるというもの。「おれの縄跳びはこの箱に入れておいたからこの縄跳びはおれのだ!」って思ってたら友達の名前が書いてあった、みたいな感じです。

そもそもブラウザは、動作を快適にするためにけっこう色んなデータを一時的に保存しています。画像のリンク先を保存しておいて、ページを開く前に読み込んでおいたりとかもしてたりしますね。そのリンク先はブラウザ側から呼び出すのでそのときは防御してない状態になるわけです。

そこにヤバいものをすり替えて入れておいて、防御を崩すわけですね。じゃあどうやってすり替えるのか、というところで出てくるのがヒープスプレー。イメージ的には、ふたの空いたおもちゃ箱が二つ並んでいると思ってください。ブラウザは2番の場所にモノがあると思っています。

このとき、1番のおもちゃ箱をおもちゃで溢れ返らせると、2番のおもちゃ箱にもその中身が入ってしまいます。(データの場合は上書きですが、元のおもちゃが下に埋もれて分からなくなって、代わりに上のものを取っていってしまう、ぐらいに思ってもらえれば分かりやすいかと思います)

ざっくり言うとそういう方法でやれば、中身がすり替わったことに気づかれずに「ヤバいもの」をブラウザに読み込ませることができるのです。

 

ゼロデイ攻撃とは? 脆弱性が発覚したときに注意したいこと

ゼロデイ攻撃とは、脆弱性が発覚した後に、その脆弱性がカバーされるまでにそれを攻撃するというもの。「こういう弱点あるらしいぜ! まだ対策できてないっぽいぜ!」みたいな状況で、悪意あるハッカーたち(※)が攻撃してくることを言います。

ボクシングでも、スキだらけのボディがガードされていなければ、ガードされるまではそこを攻撃しますよね。なのでポイントとしては、<b>ブラウザの脆弱性が発覚したら対策が発表されるまではそのブラウザを使わない</b>ことが必要になります。

どうしても使わなければいけないときは、今回のように有志の方がまとめてくれた回避策を使うようにしましょう。

 

リテラシー弱者との争い

さて、今回本当に問題になったのは実は”会社”や”上司”のリテラシーレベルだったのではないでしょうか。。

“管理者「IE使わないで下さい!!」 上司「それってYahoo使っちゃダメでGoogleはいいって事?」 管理者「えっ?」 俺(そっちじゃない)
– AKIBAJIN@AKIBAJIN”

とか、

“IEに脆弱性がというニュースを聞いた会社の上司数名が「ええ!?もうネット見られないってこと!?」と言うのでChromeとか使ってみたら良いのではと薦めたら、「ブラウザ?Google?それに変えてもヤフー見られるの?」状態だった。そんなに実態が分かってないものよく毎日使えるな…。
薮井4里@chemical_works”

引用元:あなたの会社は大丈夫?IE問題で上司の脆弱性まで発覚中!

といった思わず「どうやってPC使って仕事してんだよ……」というレベルのリテラシーの方がかなり出現していたようです。敢えて言い切りますが、こういった人たちに自力での改善を期待するのは糠に釘打ちです。暖簾に腕押し、柳に風と言っても良いでしょう。そういう「リテラシーがやばくて学習力もない」というなぜか実在する人たちとのコミュニケーション対策を、以下自分なりにまとめたいと思います。

彼らへの対策は、「絶対やってはいけないこと」と「何かするときに絶対守るべき手順」を「めちゃくちゃ明確に指示する」ということに尽きます。理由としては、まず大抵の場合、彼らは何が間違っているのか自力では理解できません。そのほとんどの場合は相性が悪かったり自分で調べる気がなかったりで、とにかく学習コストが高いのです。

このレベルの人が一人や二人ならともかくとして、そうでないなら説明したりして理解させようとするのはやめた方が無難でしょう。ブラウザとOSと検索エンジンの違いを理解させるためだけにあなたの2時間を使っている場合ではないのです。ただし彼らは、適当な指示ではまた自分の考えで暴走したり、途中で思考停止して動かなくなってしまいます。

絶対に迷子にならないように最後まで具体的な指示をしてあげましょう。さらに彼らは、謎の工夫を凝らして自爆するパターンも非常に多いです。しかも、自分が失敗したときは助けてくれるあなたのせいにします(大抵の場合、本当に……)。

ですから、彼らがやってしまったときに本当に困る「絶対やってはいけないこと」だけは明確にしておきましょう。「やったらどうなっても知りませんからね」ぐらいの釘さしは必須です。たとえ上司でも勇気を出して言いましょう。

 

終わりに

脆弱性は大騒ぎになりましたが、セキュリティ上やられたらダメージが大きいというだけで、実害に遭う可能性はあまり高くありません(でした。少なくとも脆弱性が発覚するまでは)。普通に生活していて交通事故に遭うのと同じくらいの確率でしょう。

本当に怖いのは、どちらかというと、何が問題なのか分からないまま騒ぎ立てること。そして、騒ぎ立てる人を御しきれないことだと思っています。みなさんはどうかリテラシーのある人として、今後起こるこういった事態にリーダーとしての力を発揮していただければと思います。

それでは!

Credoをフォローする