■ Ken Thompson氏
古い話ですが、今日 Ken Thompson氏の有名なback door事件を知った(氏はUNIXを作った男の一人である)。backdoorとは、システムやプログラムの作者が、作者しか知りえない秘密の手順を組み込んでおき、あとでそのシステムへ侵入するための裏口を作っておくことである。広い意味で言えばゲームの裏技やアクションゲームの主人公の無限増殖などもこの類のものだろう。氏は初期の(1970年代初頭の)UNIXシステムのlogin コマンドにバックドアを仕込んでおき、ログイン名ktと、とあるパスワードを入力すると、そのアカウントが存在しなくてもシステムに侵入できる仕掛けを入れておいた。しかもそれを氏が1984年に論文で発表するまで誰も見破れなかった。というのだ。
その恐るべき手法は次の通りである。もし login.c にバックドアを記述しておいたらすぐに見つかってしまうだろう。氏はCコンパイラに仕掛けを作りこんでおき、login.cをコンパイルするときに、バックドアコードを挟み込むような特殊な仕掛けを用意しておいたのだ。それにもう一案、これだけではCコンパイラのソースコードを見たときにインチキが発覚してしまう。そこで、Cコンパイラをコンパイルするにはコンパイラが必要だという点に着目し、Cコンパイラのソースコードの中に、『”login.c を見つけたら書き換える”コードを挟み込むコード』を挟み込んだ。そしてそのコンパイラでコンパイルすると、コンパイルされた新しいコンパイラにもlogin.cを書き換えるバイナリコードが含まれるようになったのだ。そうすると、コンパイラのソースコードにはlogin.cを書き換えるというインチキ部分が無くても、コンパイラのバイナリの中には未来永劫login.cにバックドアを挟み込むインチキ部分が含まれるようになったのだ。
この恐るべきhackに関しては1985年(実に今から20年前)に論文が出ている模様なので、興味のある諸兄は読んでみると面白いと思う。
http://www.acm.org/classics/sep95/
そしてそこでの教訓は、オープンソースだからといって安全だと過信してはいけない。ということだ。上記の例では、login.c のソースコードのどこをどう見てもバックドアなど発見できない。同じように linux-2.4.24.tar.gz のどこを見てもバックドアを発見できないかもしれない。しかし、自分のマシンのgccコンパイラに、バックドアを書き込むコードが含まれているとしたら。そしてそれが gcc-3.0.3.tar.gz を見ても発見できないとしたら(gcc-3.0.3.tar.gzを書き換えるコードがgccに入っていたとしたら)。ソースコードには見えないhackがこの世に存在する可能性を頭に入れておいて損は無いだろう。
May the Source be with you.