SEGURANÇA
Backdoors
(I)
Por
Nelson Murilo (nelson@pangeia.com.br)
Após
uma efetuar uma invasão, um atacante provavelmente
desejará garantir uma forma de voltar à máquina invadida
sem precisar recorrer ao(s) método(s) utilizados para
a invasão, quer para não expor as vulnerabilidades
da máquina ao administrador, quer para promover um
retorno de forma velada. Essas técnicas de retorno
à uma máquina invadida, utilizando-se serviços criados
ou modificados para este fim, dá-se o nome de "Portas
dos Fundos" ou Backdoor.
Também
existem casos recentes e outros nem tanto, de fabricantes
que, alegando necessidades administrativas, incluíam/incluem
Backdoor em seus produtos, como roteadores, switches
e similares e sistemas operacionais.
A
maneira mais usual de promover um retorno à uma máquina
invadida consiste em substituir a função/porta de
um determinado serviço por uma versão alterada, normalmente
incluindo funcionalidades que permitam acesso remoto
e não registrado em logs, que vão desde a simples
inclusão de um shell no /etc/inetd.conf até sofisticados
servidores com controle de senha e origem. Outras
formas usuais são a substituição dos programas responsáveis
pela identificação (login - Unix, Winlogon.exe - NT)
do usuário, ou servidores que escutam múltiplas portas,
por exemplo: inetd (Unix), inetsrv (NT).
A
possibilidade de uso de backdoor não está restrita
ao ambiente Unix, sistemas operacionais Windows 95/98
e NT também são vulneráveis a inclusão de backdoors,
usualmente através de programas como NETCAT ou similares,
e mais recentemente através de pacotes BackOrifice
e NetBus, Master Paradise, etc.
Nos casos que um backdoor é instalado em uma porta
não convencional ou na qual não existia serviço ativo,
é bem fácil identificar sua presença, bastando para
isso uma listagem das portas que estão em uso, o utilitário
do sistema NETSTAT (Unix e NT) pode ser usado para
isso.
Exemplo:
# netstat -an (Unix)
c:\>
netstat -an (NT)
Active
Internet connections (including servers)
Proto
Recv-Q Send-Q Local Address Foreign Address (state)
tcp 0 0 192.168.1.55.21 192.168.1.252.1026
ESTABLISHED
tcp
0 0 *.6000 *.*
LISTEN
tcp
0 0 *.993 *.*
LISTEN
tcp
0 0 *.995 *.*
LISTEN
tcp
0 0 *.23 *.*
LISTEN
tcp
0 0 *.21 *.*
LISTEN
tcp
0 0 *.465 *.*
LISTEN
tcp
0 0 *.25 *.*
LISTEN
tcp
0 0 *.22 *.*
LISTEN
udp
0 0 *.514 *.*
Portas
não usuais ou não existentes previamente, em estado
ESTABLISHED, LISTEN ou WAIT normalmente indicam backdoor.
A
correspondência entre uma determinada porta e o programa
que a esta usando, pode ser conseguida com a ajuda
de um utilitário chamado LSOF (Unix)
É
aparentemente simples identificar quando um arquivo
foi modificado, basta verificar data e hora. Mas na
prática as coisas não são tão fáceis, reconstituir
as datas originais dos arquivos modificados e uma
ação quase obrigatório após um ataque.
Da
mesma forma que algoritmos simples de checksum (como
por exemplo o SUM) também podem ser facilmente enganados
por programas usados pelo invasor.
Uma
outra técnica utilizada é o exame dos executáveis,
através de programas como strings (no Unix) e editores
hexadecimais, também este metodo não é confiável,
visto que o invasor pode utilizar técnicas variadas
para ocultar frases e variáveis, como rot13 por exemplo.
Atualmente
as formas mais confiáveis de garantir originalidade
de arquivos são as que usam o algoritmo MD5, não existem
relatos de formas de substituir um arquivo e gerar
a mesma assinatura MD5 que o original. Exemplo de
uma assinatura MD5:
28443ea67cab80acfdca13714e1dc01b
chkexploit-1.13.tar.gz
Vários
programas utilizam MD5 para verificar a integridade
de arquivos, dentre eles o Tripwire, originalmente
escrito para ambiente Unix (veja em http://sourceforge.net/projects/tripwire,
sobre porte para outros sistemas e novas versões)
o programa permite algumas opções para catálogo de
arquivos e diretórios, que devem ter periodicamente
verificada sua integridade.
Outras
soluções, vide a seção "Links de Interesse".
Cuidados
Adicionais:
Fica
claro que o executável tripwire ou o equivalente,
e o banco de dados onde são armazenadas as informações
sobre os arquivos e diretórios, devem ser mantidos
íntegros. Algumas possibilidades de proteção de executável
e banco são deixá-los em uma área somente para leitura,
disco removível ou sistema de arquivo montado apenas
quando da verificação de integridade.
Existem
ainda outras áreas do sistema podem ser modificadas,
como as e bibliotecas do sistema, permitindo que programas
compilados possibilitem acessos não autorizados. Sistemas
que permitem retirar e adicionar módulos em tempo
real ao núcleo também são vulneráveis a modificações,
que podem ocultar atividades não autorizadas e ataques.
Apesar de mais raros modificação no núcleo dos sistema
são factíveis, documentados em e-Zine e papers, e
já foram identificados ataques utilizando esta técnica.
|