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

sexta-feira, novembro 23, 2007

Como verificar se o seu sistema suporta SELinux

O SELinux é compilado no kernel, e é suportado via LSM (Logical Security Modules). Para determinar se o seu kernel foi compilado com suporte a SELinux, devemos primeiro determinar qual versão do kernel está rodando:

# uname -r
2.6.23.1-49.fc8

Depois que determinamos a versão do kernel que está rodando, podemos consultar o arquivo de configuração que foi usado para compilar o kernel:

# grep -i selinux /boot/config-2.6.23.1-49.fc8
CONFIG_SECURITY_SELINUX=y
CONFIG_SECURITY_SELINUX_BOOTPARAM=y
CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1
CONFIG_SECURITY_SELINUX_DISABLE=y
CONFIG_SECURITY_SELINUX_DEVELOP=y
CONFIG_SECURITY_SELINUX_AVC_STATS=y
CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set

A opção CONFIG_SECURITY_SELINUX está configurada como 'yes'. Isso siginifica que o suporte a SELinux está habilitado no kernel. A opção CONFIG_SECURITY_SELINUX_DISABLE também está configurada como 'yes'. Portante, apesar de o suporte a SELinux estar habilitado no kernel, ele não está habilitado por padrão.


Outra maneira de determinar o suporte a SELinux no kernel é dar o comando para verificar o systema de arquivos virtual do SELinux:

grep selinuxfs /proc/filesystems


Para verificar o estado corrente do SELinux no seu sistema:

# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted


Obrigado ao amigo dgrift pela sua disposição em ensinar o mundo SELinux. O post original em inglês você pode acessar aqui:

http://domg444.blogspot.com/2007/11/how-to-determine-if-our-system-supports.html

domingo, novembro 11, 2007

SELinux by Example

Estou estudando SELinux à algum tempo. Para quem deseja fazer o mesmo, recomendo esse livro:



OBS: Sem querer assustar ninguém, mas existem vários motivos para o sabre de luz jedi estar na capa do livro :-)

Para quem ainda não sabe o que é SELinux (ou só ouviu falar quando instala o Red Hat e o desabilita) , assista esse vídeo:
http://www.redhat.com/v/swf/SELinux

terça-feira, novembro 06, 2007

Mais vídeos sobre segurança

Dessa vez, voltado ao usuário final. Foi um concurso de vídeos apresentado no GTS 10. Alguns vídeos são muito interessantes, e até engraçados.

Pegue os vídeos em:


ftp://ftp.registro.br/pub/gts/gts10/08-videocontest.tar

domingo, novembro 04, 2007

Demorei...

Congratulations; you are already an Ubuntero, having signed the Ubuntu Code of Conduct.

Teams:
https://launchpad.net/~ubuntu-hardened