você está aqui: Home  → Arquivo de Mensagens Curso Gratuito sobre Expressões Regulares, com o Prof.  Julio Neves

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:

  1. 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
    
  2. 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.

  3. 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:~$
    
  4. 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:

  1. 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 &
    

  2. Teste alguns comandos no cliente:
    godoy@Zion:~$ cat > teste.txt
    ======== OK =======
    Sniffou??
    ======= OK =======
    godoy@Zion:~$
    
  3. 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/
    


Veja a relação completa dos artigos de Leandro Godoy