面白そう.
Plan9日記 2008-06-28 ■[9fans] 9vx
9vxはPlan9カーネルをユーザランドに移植したもので、その上でPlan9の実行バイナリを無変更で実行できるというもの。対応しているホストOSはLinux、MacOS X、FreeBSD。実行速度はQEMUはもちろんVMWareよりも高速。9vxを実装するために、vx32というIA32用のsandboxingライブラリを使っている。sandboxを作る手法はいろいろあるけど、vx32はデータをsandboxするためにセグメンテーション、コードをsandboxするために動的コード変換を使っている。vx32のサンプルプログラムには9vxの他にもLinuxのシステムコールをトラップしてjail化するものとか含まれているので、Plan9ネタに限定せず,興味がある人はいるのでは?
ちなみにvx32の作者であるBryan Ford氏、どこかで見た名前だなと思ったら、OSKitの人だった。
これですね.
Vx32: portable, efficient, safe execution of untrusted x86 code
普通のサンドボックス技術では,例えば VMWare みたいにシステム丸ごとエミュレートするか,JVM (CLR) みたいに仮想機械で抽象機械語を実行,という形になるので,オーバーヘッドが大きい.
一方 vx32 は,バイナリにライブラリとしてリンクするだけで,普通に x86 コードを安全にネイティブ実行できるというモノ (アプリケーションレベル仮想機械) なのでオーバーヘッドが圧倒的に少なく (VMWare などとの違い),任意のプログラミング言語が使える (Java や C# との違い),ということらしい.たぶん.
試しに Ubuntu binaries を落としてみたんだけど,よくわからんでした.
$ ls /opt/vx32/bin/ vx32-addr2line vx32-cpp vx32-gcov vx32-objdump vx32-strings vx32-ar vx32-gcc vx32-ld vx32-ranlib vx32-strip vx32-as vx32-gcc-4.1.2 vx32-nm vx32-readelf vx32-c++filt vx32-gccbug vx32-objcopy vx32-size
$ /opt/vx32/bin/vx32-gcc -v Using built-in specs. Target: vx32 コンフィグオプション: ./configure --target=vx32 --prefix=/opt/vx32 スレッドモデル: single gcc バージョン 4.1.2
$ /opt/vx32/bin/vx32-gcc test.c test.c:1:18: error: stdio.h: そのようなファイルやディレクトリはありません test.c: In function 'main': test.c:2: 警告: incompatible implicit declaration of built-in function 'printf'
$ /opt/vx32/bin/vx32-gcc test.c test.c: In function 'main': test.c:1: 警告: incompatible implicit declaration of built-in function 'printf' /opt/vx32/lib/gcc/vx32/4.1.2/../../../../vx32/bin/ld: crt0.o: No such file: その ようなファイルやディレクトリはありません collect2: ld はステータス 1 で終了しました
なんか根本的に間違ってる予感 (また後で)
安全で,OS に依存しない実行環境を作れるので,plan9 など他の OS のバイナリをそのまま安全に実行できるようにしたり (安全っていう点が,WINE などの互換 API ライブラリとは異なる ?),カーネルやバイナリ無変更で Linux system call jail を実現したりできるらしい.
Vx32: Lightweight, User-level Sandboxing on the x86
パッと見た欠点は,Windows では使えなさそうな点と,IA-32e モード (AMD 64 モード) を使うバイナリは実効できない点なのかな. vx32 は,x86 のコードセグメンテーション機能を活用しているので,x86 以外の CPU には対応できないアーキテクチャということらしい.
wikipedia : VX32
|