PacSec 2010 で発表してきました。

去年の別のネタ (アンチフォレンジック) に比べれば噛むことも少なく、全体としては安定した発表になった。(それが「良い」かどうかは別として。)
さて、今回の発表は "Record and Replay" に関する VMM の設計技術に関する部分。つまりどのように VMM を実装することができるか、そのオーバーヘッドはどうなのかという点に関して焦点を当てたものとなっている。残念だったのは、そこまでに十分なデモをできるほどにトレーサが完成しなかったという点。完全に学術論文の読み上げだけじゃねぇかとツッコまれても文句言えません、割とマジで。

ベンチマーク

今回の発表においては、若干ではあるがマイクロベンチマークの結果を載せている。どんなコードを実行したんだ!とかそもそも比較対象がわからないとかはそもそもが (VMM の特性を図るための [しかも洗練されていない]) マイクロベンチマークだったのでご容赦を。
実装からして私はなんとなく予想していたのだが、"Record and Replay" を実装した VMM のうち、トレースを取得する部分固有のオーバーヘッドはわずかであった。つまり、最適化はある程度阻害される可能性こそあるものの、VMM が速ければトレースもほぼそれだけ速くなる。

「未定義」の範囲は?

「未定義」の EFLAGS の値について、実際にはどのような挙動になっているのか、という質問を後から頂いた。会場でも話したのだが、ここでも参考のために掲載。
「未定義」というのには色々幅があって、乱数が格納されてもおかしくないし、定数になったり、結果の一部になったり、あるいは実際にはほかの予測しやすい結果だったりする。実は、最近の Intel および AMD のプロセッサにおいては、これらの「未定義」の部分は「変化しない」とみなせる。Intel 製のプロセッサにおいて本来の意味での「不定値」を持っていたのは Pentium 4 までで、Core 以降はこの部分の予測不能さはほぼ失われている。
そう、実は私が話した「EFLAGS の遅延評価」というのは、機会さえあれば真っ先に外しても良い部分なのだ。――もちろんそれに対応する (例えばこのような手法で保存した、ということを宣言する) メタデータをきちんと保存したと仮定した場合の話だが。私がこれにこだわったのは、「(プロセッサの長期的なモデルの変化など) 長期間の保存に耐えうる情報を残す」という前提があるためで、それが難しくなり、なおかつ後からでも (超越演算命令のように、内部を補完し辛いものではなく) 容易に補完が可能であるのなら仕方なかろう。

反響

色々な方と喋ったことのうち、多かったのは次のようなことだ。

  • 役に立ちそう。
  • もう少し具体的な内容が見れるとよかった。

後者については謝るしかないのだが、前者については私も同じことを思っていて、しかも「なぜこれが今になって埋れているのか」と憤慨すらしている。というのも、基礎となる学術論文は 8 年前に、しかもれっきとしたセキュリティ分野である「Intrusion Analysis (侵入解析)」をテーマとして発表されているにもかかわらず、セキュリティ分野に対する応用をほぼ発見することができなかったためだ。
これについては、当時の計算量がこれを動かすのに現実的ではなかったという可能性とか、あるいは実装の難しさなどがあるのではないか、という話になった。

次回予告

次回以降、私から見た PacSec 2010 をダイジェストでお送りします。