Utilizando RPM para Detecção de Intrusos
Neste artigo vou elucidar algumas maneiras
para verificar a
integridade dos arquivos mais importantes do sistema, e assim
detectar se alguma invasão foi feita ou não,
ou se após uma invasão, estes arquivos foram
modificados.
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
me dedicar este artigo a 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 alguem
possa fazer um artigo sobre ele. Continuando…
Todos os arquivos de pacotes RPMs depois de
instalados, tem suas caracteristicas 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 (imaginario)
LS-kbyte-0.5.rpm como exemplo. Primeiro instalar-o-emos:
root@mymachine ~# rpm -ivh LS-kbyte-0.5.rpm
LS-kbyte-0.5.rpm ########################
Apos isso, podemos verificar os arquivos instalados
deste pacote com o diretriz QUERY do RPM, como no exemplo
abaixo:
root@mymachine ~# rpm
–query -l LS-kbyte-0.5.rpm
/usr/doc/LinuxSecurity/Artigos/RPM.txt
/usr/doc/LinuxSecurity/Artigos/RPM.html↳HTML45 conteúdosA importância do HTML e CSS para quem trabalha com UI Design e Design SystemProduto & UX · dez 2024Como hostear seu site HTML gratuitamente com GitHub PagesDev (Back & Front) · jun 2025SQL Server – Como criar um versionamento de código das suas Stored Procedures em HTML e com comentários da alteraçãoData · nov 2020Ver tudo em Dev (Back & Front) →
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:
root@mymachine ~# 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 integros.
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 criptografico, uma assinatura
unica de cada
arquivo)
L – Symlink
T – Mtime
D – Device
U – User
G – Group
M – Mode (permissoes 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 voce
não mexeu neste arquivo.
Alguns binários mais visados pelos crackers,
e que devemos prestar mais atencao são:
login, ls, netstat, lsof, ifconfig entre outros
Pertencendo aos pacotes:
util-linux↳Linux34 conteúdosKali Linux em um Servidor VPS: como, quando e por que usar?DevSecOps · dez 2024Construindo um Windows Service ou Linux Daemon com Worker Service & .NET Core – Parte 2Dev (Back & Front) · jul 2020Criando uma WebApi utilizando .NET, Linux e VSCodeDev (Back & Front) · ago 2019Ver tudo em DevSecOps → fileutils net-tools lsof
Se você quer saber qual pacote RPM um
determinado arquivo pertence, você terá que usar
a diretriz QUERY para o RPM, como no exemplo:
root@mymachine ~# rpm –query -f /bin/ps
procps-2.0.6
Claro que você, para ter certeza, terá
que ter seu banco de dados↳Banco de dados134 conteúdosSQL ou NoSQL: eis a questão!!Data · mar 2020Banco de dados: como organizar e dar segurança para milhões de dados de loteriasData · mai 20215 serviços gratuitos na cloud para bancos de dados PostgresData · fev 2025Ver tudo em Data → do RPM integro, que usualmente
esta 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). A seguir, segue alguns passos para fazer o backup
do seu banco de dados RPM em disquete e compará-los
com o do sistema. Dentro de parenteses estão os comentarios:
Fase 1 – Comparando o banco de dados
root@mymachine ~# mount
/dev/fd0 /mnt/floppy
(Primeiramente, deve se montar o disquete.)
root@mymachine ~# tar
cfz /mnt/floppy/RPM-db.tgz /var/lib/rpm
(Agora usaremos o TAR e o GZIP para criar um .tgz e coloca-lo
no
disquete.)
root@mymachine ~# umount
/dev/fd0
(‘Desmontamos’ o disquete para que os dados sejam gravados.)
Neste ponto, eu recomendo você proteger
o disquete de gravação. Iremos agora para a
parte de verificação do banco de dados:
root@mymachine ~# mount
/dev/fd0 /mnt/floppy
(Montamos o disquete, que agora e’ Somente Leitura)
root@mymachine ~# cd
/tmp/
(Vamos para um diretorio TEMPorario)
root@mymachine ~# tar
xfvz /mnt/floppy/RPM-db.tgz
(Descompactamos o backup do banco de dados, que agora está
em /tmp/var/lib/rpm)
root@mymachine ~# diff
/var/lib/rpm /tmp/var/lib/rpm
(E finalmente comparamos os diretorios. Se o diff nao acusar
nada, entao seu banco de dados esta integro e podemos ir para
a verificacao dos binarios do sistema)
FASE 2 – Comparando os binarios
Iremos criar um arquivo com os pacotes que
iremos verificar e o colocaremos no (mesmo) disquete. Por
enquanto, iremos ter 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 "Verificacao 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.








