Utilizando RPM para detecção de intrusos

Este artigo escrito por Osvaldo J. Filho elucida algumas maneiras de verificação de integridade dos arquivos mais importantes do sistema afim de detectar se alguma invasão foi realizada ou não, ou se após uma invasão estes arquivos foram modificados.

[ Hits: 14.926 ]

Por: Luis Fernando Targas em 02/07/2003


Introdução



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:

util-linux fileutils net-tools lsof

E então iremos verificar os pacotes com o seguinte shellscript:

echo "Por favor, entre com o disquete"
mount /dev/fd0 /mnt/floppy
echo "Verificação de pacotes"

for Pacote in `cat /mnt/floppy/Lista-Arquivos`
do
   echo Verificando $Pacote
   rpm --verify -l $Pacote
done
echo "Teste finalizado."

Espero que este artigo seja de ajuda para os profissionais e qualquer sugestão para novos artigos como estes, ou correções/opiniões, mande me um email!

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Conceito de NAT detalhadamente

Configurando o SendMail

Como instalar e usar o MS Office 97 no Linux

Criando um firewall simples e compartilhando a conexão usando o IPtables

Leitura recomendada

Transferindo arquivos de modo seguro entre Windows e Linux

Criando VPNs entre servidores Linux sem mistérios (parte I)

YASG (Yet Another Security Guide)

Matriz <-> Filial com o OpenVPN

VPN em Linux com OpenVPN

  
Comentários
[1] Comentário enviado por lorinho em 09/01/2004 - 22:01h

qual o comando que uso para saber isso no slackware 8.0?

[2] Comentário enviado por lorinho em 09/01/2004 - 22:02h

qual o comando que uso para saber isso no slackware 8.0?

[3] Comentário enviado por linuxdeveloper em 11/05/2004 - 09:33h

hehee essa e boa mas qual o nome do pacote .rpm

[4] Comentário enviado por cherokee em 04/08/2004 - 00:52h

esse seu artigo faz parte de uma política de segurança!!!

Valew


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts