Executar códigos de terceiros é uma funcionalidade essencial em muitos ambientes educacionais. No entanto, isso também introduz riscos significativos de segurança e infraestrutura. Este guia aborda a implementação de um sistema de isolamento de código para mitigar esses riscos.
Isolamento de Código
O isolamento de código é fundamental para garantir que o código executado não possa comprometer a integridade do sistema. Neste contexto, o isolamento não se refere apenas a execuções em containers Docker, mas também a uma série de camadas adicionais de contenção.
Isolamento de Processos
O isolamento de processos é implementado através de namespaces, que permitem controlar o acesso ao sistema de arquivos, processos, rede e identidades. Além disso, o processo é executado como um usuário sem privilégios e com no_new_privs, garantindo que não adquira novos privilégios durante a execução.
Controle de Syscalls
Mesmo isolado, o código ainda pode fazer chamadas ao kernel através de syscalls. Para mitigar esses riscos, o runner utiliza seccomp para bloquear syscalls relacionadas a comportamentos perigosos, como manipulação de namespaces, montagem de filesystems e acesso a interfaces de baixo nível.
Conclusão
Implementar um sistema de isolamento de código é essencial para garantir a segurança em ambientes que permitem a execução de códigos de terceiros. Este guia fornece uma visão detalhada de como implementar e configurar um sistema de isolamento de código robusto.