
信頼できないコードを、ホストへの安全なアクセスでサンドボックス化する。
Chimeraは、完全には信頼できないコードのためのユーザー空間サンドボックスです。これは、あなたとマシンを共有しながら、任意の生成されたコマンドを実行するコーディングエージェントに自然に適合します。プロセスがホストに対して行えることを制限しつつ、ホストのファイルやツールへのアクセスを許可するため、コードはシステムを破壊することなく有用であり続けます。通常のプログラムとして動作するため、ChimeraはVM、コンテナ、特別なハードウェア、カーネル機能、特権を必要とせず、コードがすでに動作する環境であればどこでも機能します。
これは、未変更のバイナリを同一ISAの動的バイナリ変換で実行し、各ゲストシステムコールをインターセプトすることで実現され、サンドボックスがその動作を決定します。Chimeraは2つの要素として提供されます: シェルでプロセスをラップするためのchimeraコマンドラインツールと、同じランタイムを自分のプログラムに組み込むためのRustライブラリです。組み込み側は、各ゲストシステムコールの動作(ホストカーネルへの転送、ログ出力、仮想化)を決定するシステムコールハンドラを提供します。
Chimeraは現在 Linux/x86 ターゲットをサポートしており、Darwin/arm64 への移植は進行中です。
GitHubからchimeraコマンドラインツールをインストールします:
cargo install --git https://github.com/penberg/chimera chimera-cli
次に、任意のコマンドをラップします:
chimera run /bin/echo hello
デフォルトでは、Chimeraはすべてのシステムコールをホストカーネルに転送するため、ラップされたプロセスはネイティブのプロセスと同じように動作します。
チェックアウトからは、代わりにcargo install --path cliでインストールします。
chimeraクレートは、CLIが基づいているランタイムを公開しています。
SystemCallsトレイトを実装して、各ゲストシステムコールの処理方法を決定します:
use chimera::{Sandbox, SystemCall, SystemCalls, host_syscall};
struct Tracer;
impl SystemCalls for Tracer {
fn handle(&mut self, call: &mut SystemCall) {
eprintln!("syscall {}", call.number);
call.set_result(host_syscall(call));
}
}
fn main() -> Result<(), chimera::Error> {
let mut sandbox = Sandbox::new("/bin/echo")?;
sandbox.args(["hello"]).system_calls(Tracer);
sandbox.run()?;
Ok(())
}
動作例は runtime/examples/ にあります:
ARCHITECTURE.md を参照してください。
このプロジェクトは MITライセンス の下でライセンスされています。
特に明示されない限り、あなたがChimeraに意図的に提出するコントリビューションは、追加の条項や条件なしにMITとしてライセンスされるものとします。