図1 人がなかなか来られないところならば戸締まりが甘くても大丈夫
図1 人がなかなか来られないところならば戸締まりが甘くても大丈夫
[画像のクリックで拡大表示]
図2 簡単に来られるようになるとセキュリティが脅かされる(イラスト:なかがわ みさこ)
図2 簡単に来られるようになるとセキュリティが脅かされる(イラスト:なかがわ みさこ)
[画像のクリックで拡大表示]

 Exploitとは,プログラムに存在する特定のぜい弱性,いわゆるセキュリティ・ホールを突くプログラムのコードを指す言葉である。もともとは,セキュリティ・ホールの存在を確認する検証用のものだが,ハッカーなどに悪用されて攻撃プログラムを作る道具として使われることが増えている。

 セキュリティの専門家などが,プログラムのぜい弱性を発見した場合,それを実際に攻撃するコードを作成してみることが多い。この目的,ぜい弱性が存在することを検証することで,このコードのことを「Exploitコード」と呼ぶ。ぜい弱性の発見者がプログラムの開発元に通知する際に,ぜい弱性が実在することを示すために作成した Exploitコードも併せて送る。指摘を受けた開発元では,指摘されたぜい弱性をふさぐように,プログラムを修正する。

 発見者は開発元への通知と並行して,セキュリティ関連のメーリング・リストや掲示板などで,そのぜい弱性の存在を指摘することがよくある。このときに,作成したExploitコードも一緒に公開することがある。Exploitコードを公開する本来の目的は,そのぜい弱性の影響を幅広く検証することである。例えば,そのぜい弱性がどのようなOSのバージョンやソフトウエアの組み合わせで発生するのか,発生する危険度や影響を与える範囲はどのくらいなのかといったことを,より多くの人たちで協力して調べるために公開するのである。結果として,指摘したぜい弱性は特定の環境でしか発生しないことがわかったり,あるいはまったく別の環境でも同様のぜい弱性があることが見つかったりする。あるいは,開発元が提供する修正プログラムで,ぜい弱性が本当にふさがれているかを検証するためにも利用される。

 発見者が公開するExploitコードには,実際に悪さをするようなコードは含まれていない。ぜい弱性が存在したら,画面上にイメージやメッセージを表示するようになっているというのが,よくあるパターンである。ところが,このコードを改変することで,そのぜい弱性を狙った攻撃を簡単に仕掛けることができるのである。

 プログラムにぜい弱性が存在したとしても,そのぜい弱性を悪用して実際に攻撃を実行するのは,それほど簡単なことではない。ぜい弱性が現れる条件を把握した上で,その条件を再現して攻撃するようなプログラムを開発する知識が必要となるからである。つまり,ぜい弱性が存在したとしても,利用するのが難しい状態のままならば実際の攻撃も困難だということである。例えていうと,人里離れた山奥ならば,仮に家の戸締まりがゆるくても大した危険はないようなものである(図1)。

 ところが,そのぜい弱性を対象とするExploitコードが存在すると,ぜい弱性を突いてプログラムを実行するという部分までは,すでにできていることになる。あとは,そこから呼び出すプログラムで,イメージやメッセージを表示するものから,悪質な攻撃を仕掛けるものに入れ換えれば攻撃プログラムに変身する。その攻撃を仕掛ける部分についても,これまでに登場した不正プログラムを流用すれば簡単に開発できる。先ほどの例で例えると,山奥だったところでも,いったん都会とつながるトンネルや道路ができたら,見知らぬ人が簡単に家の近くに来られることになる(図2)。そうなると,都会に住んでいる人と同じような感覚で戸締まりをしなくてはならない。

 Exploitコードがいったん公開されると,それを悪用した攻撃もすぐに登場すると考えた方がよい。過去の例からすると,Exploitコードが公開されてから数日で,そのExploitコードを悪用した不正プログラムが実際に登場している。とすれば,そもそもExploitコードを公開しなければよいという気がする。だが,仮に広く公開しなかったとしても,いったん発見されたセキュリティ・ホールはアンダーグラウンドを通じて広まることがありえる。開発元が危険なぜい弱性を放置しないためにも,開発元への報告後に一定期間が経過したぜい弱性ならば,Exploitコードが公開されるのもやむを得ないだろう。