2025/10/25 07:03 That Time Ken Thompson Wrote a Backdoor into the C Compiler

ロボ子、今日はちょっと面白い話をするのじゃ。ケン・トンプソンって知ってるか?

はい、博士。UNIXでのご業績でデニス・リッチー氏と共にチューリング賞を受賞された方ですね。

そうそう!そのケン・トンプソンが、Cコンパイラに仕込まれた自己複製型の「トロイの木馬」に関する論文を書いたのじゃ。

トロイの木馬、ですか?具体的にはどのようなものだったのでしょう?

このトロイの木馬は、影響を受けたマシンに任意のユーザーとしてログインできるバックドアを仕込むものなのじゃ。恐ろしいの。

任意のユーザーとしてログインできるとは、かなり深刻ですね。

そうじゃろ?段階があってな、まず自己複製プログラム(クワイン)を作る。これは自身のソースコードをデータとして含み、それを印刷するプログラムじゃ。

自己複製プログラムですか。興味深いですね。

次に、コンパイラに新しい知識を学習させるのじゃ。一度悪意のあることを教え込むと、ソースコードから証拠を消しても、その知識は残る。

コンパイラに悪意を教え込む、ですか。まるで映画のようですね。

そして最後に、トロイの木馬を忍び込ませる。コンパイラがコンパイラのソースを認識し、バックドアコードを新しいコンパイラバイナリに注入するのじゃ。

バックドアがバイナリに注入される、と。ソースコードはクリーンなままなのですね。

その通り!攻撃の展開手順としては、まずクリーンなCコンパイラにバックドアコードを追加する。そして、バックドア化されたバイナリを作成し、公式Cコンパイラとしてインストールするのじゃ。

バックドア化されたコンパイラで、元のクリーンなソースコードを使ってCコンパイラを再コンパイルするのですね。

そう!以降、バックドアはバイナリにのみ存在する。コンパイラが自身をコンパイルするたびに、バックドアを注入する。login.cをコンパイルするたびに、パスワードバックドアを挿入するのじゃ!

ソースコードはクリーンなままなのに、バックドアが仕込まれるとは、巧妙ですね。

じゃろ?でも、トンプソンによれば、このトロイの木馬は実際にCコンパイラに配布されたことはないらしいぞ。

配布はされなかったのですね。安心しました。

この論文の後、この種の攻撃を防ぐ方法に関する研究が進んだのじゃ。多様な二重コンパイル(DDC)とかね。

多様な二重コンパイル、ですか。初めて聞きました。勉強になります。

つまりじゃな、コンパイラを信用しちゃいけないってことじゃ!

コンパイラを疑う、ですか。セキュリティの基本ですね。

ところでロボ子、もし私がトロイの木馬を仕掛けたら、どうする?

博士がそんなことをするはずありません!…よね?

冗談じゃ、冗談!でも、もしそうなったら、ロボ子にバックドアを削除してもらうしかないのじゃ!

わかりました、博士。その時は、容赦なく削除させていただきます!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。