Autor: Osvaldo J. Filho (KByte - 
kbyte@linuxsecurity.com.br)
Neste método não descreverei maneiras já bastante conhecidas, como 
tripwire por exemplo, que tiram uma 'foto' do sistema e depois 
comparam informações (como data, tamanho e um 'hash') dos arquivos para 
saber se estes foram comprometidos. Irei propor um método bem mais 
simples, tão seguro quanto (se bem feito), mas incrivelmente funcional. 
Como a grande maioria das distribuições são baseadas em RPM (RPM 
Packet Manager, um nome recursivo, e não RedHat Packet Manager como 
muitos pensam) irei dedicar este artigo à estes usuários, pois o 
método que detalharei funcionará apenas em sistemas usando este tipo 
de pacotes. 
Para sistemas 
Debian, existe o 
debsum, que atua de maneira 
similar ao que iremos propor neste artigo. Infelizmente não iremos tratar 
dele, quem sabe alguém possa fazer um artigo sobre ele. Continuando... 
Todos os arquivos de pacotes RPMs depois de instalados, tem suas 
características armazenadas num banco de dados central, e é por isso que 
podemos usar o comando RPM para verificar a integridade destes arquivos. 
Usaremos, primeiramente, o pacote (imaginário) 
LS-kbyte-0.5.rpm 
como exemplo. Primeiro instalar-o-emos: 
# rpm -ivh LS-kbyte-0.5.rpm 
LS-kbyte-0.5.rpm ##############################
Após isso, podemos verificar os arquivos instalados deste pacote com a 
diretriz QUERY do RPM, como no exemplo abaixo: 
# rpm --query -l LS-kbyte-0.5.rpm 
/usr/doc/LinuxSecurity/Artigos/RPM.txt 
/usr/doc/LinuxSecurity/Artigos/RPM.html 
Com isso temos uma listagem completa de quais arquivo pertencem a este 
pacote e agora iremos verificar a integridade deste com a diretriz 
VERIFY do rpm com o exemplo: 
# rpm --verify -l LS-kbyte-0.5.rpm 
S.5....T c /usr/doc/LinuxSecurity/Artigos/RPM.txt 
Obtivemos a resposta S.5....T c do arquivo RPM.txt, e como não obtivemos 
mais nenhuma resposta, significa que os outros arquivos estão íntegros. 
Analisando a resposta do RPM para o arquivo RPM.txt, notamos que este 
contém 9 campos de informação, sendo estes (na ordem apresentada): 
   -  S - Tamanho do arquivo 
   
-  5 - MD5 Sum do arquivo (hash criptográfico, uma assinatura única 
        de cada arquivo) 
   
-  L - Symlink 
   
-  T - Mtime 
   
-  D - Device 
   
-  U - User 
   
-  G - Group 
   
-  M - Mode (permissões e tipo de arquivo) 
E se o caractere 'c' aparecer, isso significa que o arquivo é de 
configuração, que geralmente é modificado após instalado, portanto 
não devemos nos espantar se este arquivo deste tipo foi mudado, a não 
ser que você saiba que não mexeu neste arquivo. 
Alguns binários mais visados pelos crackers e que devemos prestar mais 
atenção são: 
login, ls, netstat, lsof, ifconfig entre outros, que
pertencem aos pacotes: 
util-linux, fileutils, net-tools, lsof. 
Se você quer saber qual pacote RPM um determinado arquivo pertence, terá 
que usar a diretriz QUERY para o RPM, como no exemplo: 
# rpm --query -f /bin/ps 
procps-2.0.6 
Claro que você, para ter certeza, terá que ter seu banco de dados do 
RPM íntegro, que usualmente está no diretório 
/var/lib/rpm/. Uma 
boa dica seria copiar esse banco de dados para um disquete e sempre 
comparar (lembre-se de sempre que instalar um RPM ou desinstalá-lo, de 
refazer o backup dos dados). À seguir alguns passos para fazer o backup 
do seu banco de dados RPM em disquete e compará-los com o do sistema. 
Fase 1 - Comparando o banco de dados
 
# mount /dev/fd0 /mnt/floppy 
Primeiramente, deve se montar o disquete
# tar cfz /mnt/floppy/RPM-db.tgz /var/lib/rpm 
Agora usaremos o TAR e o GZIP para criar um .tgz e colocá-lo no 
disquete.
# umount /dev/fd0 
Desmontamos o disquete para que os dados sejam gravados.
Neste ponto, recomendo você proteger o disquete de gravação. Iremos 
agora para a parte de verificação do banco de dados: 
# mount /dev/fd0 /mnt/floppy 
Montamos o disquete, que agora é somente leitura.
# cd /tmp/ 
Vamos para um diretório TEMPorário.
# tar xfvz /mnt/floppy/RPM-db.tgz 
Descompactamos o backup do banco de dados, que agora está em /tmp/var/lib/rpm. 
# diff /var/lib/rpm /tmp/var/lib/rpm 
E finalmente comparamos os diretórios. Se o diff não acusar nada, então 
seu banco de dados esta íntegro e podemos ir para a verificação dos 
binários do sistema.
FASE 2 - Comparando os binários
 
Iremos criar um arquivo com os pacotes que iremos verificar e o 
colocaremos no (mesmo) disquete. Por enquanto, teremos o arquivo 
Lista-Arquivos com o seguinte conteúdo: