ブラウザ上でのx86サンドボックス thefbi

http://code.google.com/p/thefbi/

thefbiはブラウザ上でx86ネイティブコードを実行するプラグインらしい.

ブラウザ上でネイティブコードを走らせるにはいくつか方法がある.

  1. OSのプロセスとして走らせる
  2. 隔離環境のもとでOSのプロセスとして走らせる
  3. 仮想マシン上で走らせる
  4. OSの差異を吸収する特殊な抽象層の上で走らせる

1の方法は最も単純な方法であり,ブラウザ側がforkして実行可能コードをexecするだけである.当然ながら,この方法では,プログラム中に悪意のあるコードが埋め込まれていた場合にユーザの環境を破壊してしまい,セキュアとは言い難い.ウェブアプリケーションの特徴として,ユーザの利用している環境に影響を及ぼす事なく実行できると言う利点があるが,この方法ではこの利点を殺してしまう.また,OSに違いがあった場合には実行出来ない可能性がある.

1の方法では,ユーザ環境に影響を及ぼしてしまうので,2では隔離された環境で実行すると言う方法である.此処で言う隔離環境とはつまり,FreeBSDのJailのようなものだと考えて良い.しかし,この方法もOSの差異があった場合は実行出来ない可能性がある.

3の方法は,VMwareやVirtual Boxのような仮想マシン上でOSそのものを走らせて,その中で実行可能コードを走らせる方法である.当然この方法では異常にリソースを消費してしまう上,各種OSを用意しなければいけない.

4の方法は,OSの差異を吸収する抽象層を用意する方法である.この方法は,マイクロソフトリサーチのJohn R. Douceurらが提案したXaxでも採用されているが,彼らの方法では元のソースコードに若干の変更と,再コンパイルが必要となる.なお,Xaxの論文はOSDI 2008で発表されている(Leveraging Legacy Code to Deploy Desktop Applications on the Web, John R. Douceur, Jeremy Elson, Jon Howell, and Jacob R. Lorch, Microsoft Research ,http://www.usenix.org/event/osdi08/tech/).

thefbiでもまた4の方法を採用しており,コード実行にはVx32というライブラリを利用しているらしい.

Vx32: portable, efficient, safe execution of untrusted x86 code: http://pdos.csail.mit.edu/~baford/vm/

Vx32とはJava VMや.NET VMのような仮想マシン環境のことであり,このライブラリを用いると,隔離環境下のもとでx86のコードを実行出来るそうだ.thefbiではこの特徴を利用して,x86コードをブラウザ上でセキュアに実行するっぽい.Vx32だとXaxのように元コードの修正は必要ないのだろうか?ちなみに,Vx32に関する論文はUSENIX 2008で発表されている(Vx32: Lightweight User-level Sandboxing on the x86 Bryan Ford and Russ Cox, Massachusetts Institute of Technology, http://www.usenix.org/events/usenix08/tech/).