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:

  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/
    

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


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