sábado, novembro 24, 2007

SELinux vs chroot

Uma questão frequentemente feita é qual a melhor maneira de restringir um programa? Usando a maneira tradicional com chroot, ou usar SELinux para fazer isso?

No mundo Unix, chroot é uma maneira de rodar um programa com um conjunto restrito de arquivos e diretórios disponíveis. Essa técnica de isolamento de programas é conhecida como sandbox, e o chroot é uma maneira de implementá-la. O chroot pode ser implementado como um daemon (usando a chamada de sistema chroot) ou por um shell script usando o comando "chroot". A desvantagem do chroot é que é possível escapar dele, um processo rodando em chroot tem a capacidade de ver a existência de processos que não estão rodando em chroot (ps e programas similares funcionam da mesma maneira em ambientes chroot) e IPC's (Inter-Process Communication) não são prevenidos. Uma solução para esse problema é ter um ambiente chroot avançado (que normalmente requer um patch de kernel) onde os processos chroot não podem rodar comandos como o ps sem restrições e outros têm outros limites aplicados (existem vários patches do kernel que implementam essas restrições).



Configurar um ambiente em chroot é incoveniente. Se ele é configurado da maneira tradicional (copiando arquivos para o chroot ao invés de montar com bind os diretórios) então versões antigas de programas podem existir no ambiente chroot enquanto novas versões de programas com correções de segurança são instalados no ambiente principal.

SELinux provê uma segurança melhor do que um ambiente chroot típico controlando todas as interações entre os processos. Ele provê mais flexibilidade do que um ambiente chroot avançado porque pode ser configurado inteiramente por políticas e a recompilação do kernel não é nescessária para mudar a maneira de como ela funciona. Eu acredito que é mais correto abandonar a maneira tradicional de criar ambientes chroot e usar SELinux.

Baseado no post de Russel Coker, desenvolvedor do SELinux:

http://etbe.coker.com.au/2007/08/22/se-linux-vs-chroot

3 comentários:

Sandro Amilton Vieira disse...

Com SElinux é possível evitar um "CHEAT ATTACK"??

Como descrito neste link

http://www.cs.huji.ac.il/~dants/papers/Cheat07Security.pdf

Anônimo disse...

A quem interessar, aqui está o artigo original de onde este foi traduzido.

jczucco disse...

Caro amigo Sandro:
Não protege totalmente, você deve usar o limit para evitar esse tipo de ataque DoS.

Caro amigo anônimo: o link já estava no próprio texto, caso não o tenha lido.