Módulo Kernel Capable discovery
domingo, novembro 16th, 2008Posix capabilities permite que as capacidades do super usuário root sejam delegadas a binários, possibilitando que usuários comuns possam executar um serviço. Usando esse recurso de forma correta pode-se executar serviços utilizando somente as capacidades mínimas, ao contrário de executar com todos os privilégios do root.
Publiquei um artigo na revista Linux Magazine Ed. 48 mostrando como usar Posix Capabilities para rodar serviços como: Samba, Dns e apache. Reduzindo os chances de acontecer um ataque de buffer overflow, onde se consiga abrir um terminal de super usuário.
Para descobrir as capacidades exigidas pelos serviços reescrevi o módulo de kernel capable_probe desenvolvido originalmente por Serge E. Hallyn. Na primeira versão usei jprobe ao invés de kprobe, fiz uma associação entre o valor numérico e a string. Ex. 21:CAP_SYS_ADMIN. Porém, esse código pode encher os logs do sistema, pois captura todos os processos que estão rodando. Para sanar o problema, reescrevi o módulo para que aceite como parâmetro o processo que se deseja monitorar, reduzindo dessa forma as mensagens duplicadas no log.
Download do módulo
wget http://petryx.blogrs.com.br/capable_discovery-0.1.0.tar.bz2
Instalação
tar -xjvf capable_discovery-0.1.0.tar.bz2 cd capable_discovery-0.1.0 make make install
Utilização
Por exemplo, queremos descobrir qual as capacidades exigidas para rodar o comando ping.
modprobe capable_discovery catch=ping ping 127.0.0.1
Em outro terminal
tail -f /var/log/messages localhost Module capable_discovery inserted for discover the capabilities of "ping" process localhost capability 21=CAP_SYS_ADMIN for ping localhost capability 13=CAP_NET_RAW for ping localhost capability 7=CAP_SETUID for ping localhost capability 21=CAP_SYS_ADMIN for ping localhost capability 21=CAP_SYS_ADMIN for ping
Como podemos ver o ping precisa das capacidades 7,13,21
Após usar o módulo devemos removê-lo com o seguinte comando:
rmmod capable_discovery
Confirmando a remoção do módulo irá aparecer nos logs a seguinte mensagem:
Nov 16 11:57:06 localhost Module capable_discovery unregistered
Para monitar outro processo o módulo deve ser recarregado passando como parâmetro o nome do processo.
Qualquer dúvida,sugestão, crítica ou elogio, deixe um comentário.




