3. Ajustar limites

A política do sandbox impede que o Sandboxee chame chamadas do sistema específicas e, assim, reduz a superfície de ataque. No entanto, um invasor ainda pode causar efeitos indesejados executando um processo indefinidamente ou esgotando RAM e outros recursos.

Para lidar com essa ameaça, o Sandboxee é executado com limites rígidos por padrão. Se esses limites padrão causarem problemas para a execução legítima do programa, você poderá ajustá-los usando a classe sandbox2::Limits chamando limits() no objeto executor.

O snippet de código abaixo mostra alguns exemplos de ajustes de limite. Todas as opções disponíveis estão documentadas no arquivo de cabeçalho limits.h.

// Restrict the address space size of the sandboxee to 4 GiB.
executor->limits()->set_rlimit_as(4ULL << 30);
// Kill sandboxee with SIGXFSZ if it writes more than 1 GiB to the filesystem.
executor->limits()->set_rlimit_fsize(1ULL << 30);
// Number of file descriptors which can be used by the sandboxee.
executor->limits()->set_rlimit_nofile(1ULL << 10);
// The sandboxee is not allowed to create core files.
executor->limits()->set_rlimit_core(0);
// Maximum 300s of real CPU time.
executor->limits()->set_rlimit_cpu(300);
// Maximum 120s of wall time.
executor->limits()->set_walltime_limit(absl::Seconds(120));

Para um exemplo do uso da classe sandbox2::Limits, consulte a ferramenta de exemplo.