
Aísle código no confiable con acceso seguro al anfitrión.
Sandbox de código no confiable con acceso seguro al host.
Chimera es un sandbox de espacio de usuario para código que no confías plenamente — una opción natural para agentes de codificación que ejecutan comandos arbitrarios y generados en una máquina que comparten contigo. Limita lo que un proceso puede hacer al host mientras le permite acceder a los archivos y herramientas del host, de modo que el código sigue siendo útil sin que pueda corromper el sistema. Debido a que se ejecuta como un programa ordinario, Chimera no necesita VM, contenedor, ni hardware especial, características del kernel o privilegios — funciona dondequiera que tu código ya se ejecute.
Logra esto ejecutando binarios sin modificar a través de traducción binaria dinámica de la misma ISA, interceptando cada llamada al sistema invitada para que el sandbox decida qué hacer. Chimera se distribuye como dos piezas: una herramienta de línea de comandos chimera para envolver un proceso en el shell, y una biblioteca Rust para incrustar el mismo tiempo de ejecución en tu propio programa. Los integradores proporcionan un manejador de llamadas al sistema que decide lo que hace cada syscall invitada — reenviarla al kernel del host, registrarla o virtualizarla.
Chimera actualmente es compatible con el objetivo Linux/x86 con un puerto en progreso hacia Darwin/arm64.
Instala la herramienta de línea de comandos chimera desde GitHub:
cargo install --git https://github.com/penberg/chimera chimera-cli
Luego envuelve cualquier comando:
chimera run /bin/echo hello
Por defecto, Chimera reenvía cada llamada al sistema al kernel del host, por lo que el proceso envuelto se comporta como uno nativo.
Desde un clon, instala con cargo install --path cli en su lugar.
El crate chimera expone el tiempo de ejecución sobre el que está construida la CLI. Implementa el trait SystemCalls para decidir cómo se maneja cada syscall invitada:
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(())
}
Ejemplos prácticos se encuentran en runtime/examples/:
Ver ARCHITECTURE.md.
Este proyecto está licenciado bajo la licencia MIT.
A menos que declares explícitamente lo contrario, cualquier contribución enviada intencionalmente para su inclusión en Chimera por tu parte, se licenciará como MIT, sin términos o condiciones adicionales.