ソースコードはどこまで信じられるのか――バックドアは仕掛けられていないか? 脆弱性は? はたまたコーディング上のミスは?
2003年11月、悪質なハッカーがLinux OSへの侵入を試みた。驚いたことに、Linuxが動作している特定のコンピュータではなく、すべてのコンピュータがターゲットになったのである。
手口はこうだ――ハッカー(あるいはハッカーたち)はある大学で数台のコンピュータを乗っ取った後、Linux開発チームが使用しているサーバに侵入した。サーバへの侵入を果たしたハッカーは、2行のコード(いわゆるバックドア)を、Linux OSをコンパイルするのに使用するソースコードそのものの中に仕込んだのだ。
このバックドアは非常に巧妙な仕掛けだった。それを利用するには、2行のプログラムを実行するだけでよいのだ。これにより、攻撃者は即座に自身の権限を「root」(Windowsの管理者権限に相当)に昇格させることができるのだ。この仕掛けの狙いは、攻撃者が自身の権限を容易に昇格できるようにすることにあった。このコードがコンパイルされて配布されていたら、その影響は広範囲に及んだであろう。
幸いにも、このハッキングは未遂に終わった。発生後12時間もたたないうちに侵入が発見された。これは、Linux開発者らが使用していた自動化ツールが、説明のつかない矛盾を検出したためだ。問題のコードは直ちに削除され、1台のコンピュータも被害を受けずに済んだ。
今日のCSO(セキュリティ責任者)にとって最も腹立たしいことは、複雑なコードのどの部分をとってみても、それがセキュリティ上で脆弱性を持っているかどうかを断定するのが理論的に不可能だということだ。それどころか、意図的なバックドアがプログラムに追加されたのかどうかを判定することも不可能なのである。
「脆弱性」や「バックドア」といった用語が厳密に定義されていないことが問題なのではない。プログラミング言語が強力すぎるのが問題なのだ。機能をプログラム内部に完全に隠してしまい、それを見つけるにはプログラムを実行するしかないようにすることが可能なのである。そして、その機能が見つかったときにはもはや手遅れなのだ。
CSOにとって朗報と言えるのは、セキュリティが完璧でない状態でも妥協できるのであれば、新世代の自動プログラム解析ツールを利用することによって、プログラミングの一般的な欠陥や意図的なバックドアを即座に検出できるようになったことだ。こういったツールは脆弱性の発見に役立つ。リスク/便益解析を行って、脆弱性を修正する価値があるかどうかを判定するツールもある。
上述のLinuxへの攻撃は、今日のオープンソースソフトウェアが現実に直面しているリスクを示している。オープンソースソフトウェアは元来、ソースコードの形で配布されるため、それほど高度なスキルを持った攻撃者でなくても悪質な攻撃の種をいとも簡単に仕込むことができるのだ。
事実、そういったことが以前に起きている。
今から6年前、「TCP Wrapper」と呼ばれるファイアウォールツールキットを配布するのに使われていたオランダのコンピュータにハッカーが侵入した。例によってバックドアが設けられた。ただしこのケースでは、ユーザーが活発にダウンロード/導入していたコードに脆弱性が仕込まれたのだ。
1999年1月22日の午前7時16分から午後4時29分までの間に、全部で52カ所のサイトが、改ざんされたプログラムをダウンロードした。それをインストールしたユーザーもいたと思われる。プログラムの作成者、ビーツェ・ベネマ氏はプログラムの不正な改変に気づき、影響を受けたすべてのサイトに通知する作業を徹夜で行った。さらに同氏は、カーネギーメロン大学のCERT(Computer Emergency Readiness Team)に侵入情報を通知した。CERTは翌朝、警告を公開した。
Copyright(C) IDG Japan, Inc. All Rights Reserved.