
Sandbox para código não confiável com acesso seguro ao host.
Sandbox de código não confiável com acesso seguro ao host.
Chimera é um sandbox em espaço de usuário para código que você não confia totalmente — uma escolha natural para agentes de codificação que executam comandos arbitrários e gerados em uma máquina compartilhada com você. Ele confina o que um processo pode fazer no host enquanto ainda permite que ele acesse os arquivos e ferramentas do host, de modo que o código permaneça útil sem estar livre para corromper o sistema. Como é executado como um programa comum, o Chimera não precisa de VM, container, nem de hardware especial, recursos do kernel ou privilégios — ele funciona onde quer que seu código já execute.
Ele consegue isso executando binários não modificados através de tradução binária dinâmica de mesma ISA, interceptando cada chamada de sistema convidada para que o sandbox decida o que ela faz. O Chimera é fornecido como duas peças: uma ferramenta de linha de comando chimera para encapsular um processo no shell, e uma biblioteca Rust para incorporar o mesmo runtime em seu próprio programa. Os incorporadores fornecem um manipulador de chamadas de sistema que decide o que cada syscall convidada faz — encaminhá-la ao kernel do host, registrá-la ou virtualizá-la.
Atualmente, o Chimera suporta o alvo Linux/x86 com uma porta em andamento para Darwin/arm64.
Instale a ferramenta de linha de comando chimera do GitHub:
cargo install --git https://github.com/penberg/chimera chimera-cli
Depois encapsule qualquer comando:
chimera run /bin/echo hello
Por padrão, o Chimera encaminha cada chamada de sistema ao kernel do host, de modo que o processo encapsulado se comporta como um nativo.
A partir de um checkout, instale com cargo install --path cli.
A crate chimera expõe o runtime no qual a CLI é construída. Implemente a trait SystemCalls para decidir como cada syscall convidada é tratada:
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(())
}
Exemplos funcionais estão em runtime/examples/:
sandbox — um sandbox de chamadas de sistema baseado em lista de permissões.strace — reimplementa o strace(1) sobre a mesma trait.Veja ARCHITECTURE.md.
Este projeto é licenciado sob a [licença MIT].
A menos que você declare explicitamente o contrário, qualquer contribuição intencionalmente submetida para inclusão no Chimera por você será licenciada como MIT, sem quaisquer termos ou condições adicionais.