04/07/13 02:48 hBnpyr4p
コンパイラのバイナリに仕掛けがしてあって、そのコンパイラで
コンパイルしたバイナリにも自分と同じ仕掛けが遺伝するというもの。
その仕掛けは、ソースのある特定のパターンを認識して、バックドア
を含んだオブジェクトコードを生成する。
これにより、ソースコードには含まれていない機能を、そのコンパイラ
のバイナリ由来で作られたコンパイラは、オブジェクトコードに埋め込む
ようにできる。
もっと発見し難いのは、CPUが、通常のコンパイラが生成するのとは
異なるある特定の命令パターン列を実行するときだけに、仕掛けをされた
動作を行うようにCPUを設計するというもの。あるいはマイクロコードの
パッチ機能を使って、そのような機能を植え込むというものだ。
現在のインテルのCPUは内部には非公開のマイクロ命令相当が使われていて
x86命令列をそのようなマイクロ命令列に内部で変換してから実行している。
トランスメタのクルーソーも、そのような方法を取っている。
通常のコンパイラが吐き出さないようなx86命令の特殊な列にだけ、特殊な
動作をするようにマイクロプログラムが作られていたり、パッチを当てられて
いたりすると、機械語をいくら調べてみても、その悪意を発見できない
だろう。仮にCPU内部のレジスターを命令毎にトレースをとっても、背信
行為を発見出来なく作ることが可能。秘密の内部レジスタを設けておいて、
特殊な命令の並びとデータ-の状況の場合にだけ、
そのような秘密の内部レジスタにデータ-を隠したり、読み出せたりする
ようにしておくことで、OS内部の情報を非特権レベルのプログラムを用いて
盗み見したり、他のプロセスの情報を抜いたりすることが原理的には可能。