08/07/2011 – 11:00hrs
Recebi uma chamada que o site de uma empresa tinha sido “hackeada”, me solicitaram para reforçar a segurança, na hora entrei no site para ver como “tinha ficado”, mais a página já constava como estando em manutenção(quero deixar claro que não fui eu que fiz o servidor ou mesmo eu que presto assistência para o mesmo, apenas fui solicitado para reforçar a segurança). Fui ao local para ver o servidor. De cara já fiquei preocupado, Windows 2003 Server Standard instalado no servidor da página. Por que a preocupação? Simples, eu pouco conheço da arquitetura do SO, sei trabalhar com o sistema, mais para se fazer uma forense tem que entender muito sobre o SO em questão, mesmo assim, apesar de não ter sido solicitado a forense, eu estava decidido a fazer por conta, apenas para descobrir como foi feito, assim me começaria fechando a brecha de segurança(e que brecha).
Não pensei 2x, tirei o cabo de rede. Na minha pendrive já tinha contava com o WinTaylor, usei ele para fazer dump de memória(estava ciente que acharia algo ali). Enquanto foi fazendo o dump, verifiquei com o responsável o horário e detalhes para ter uma iniciativa. Como a memória era pouca 1GB foi bem rápido. Desliguei o sistema arrancando o cabo de energia(maldade, mais foi necessário, pensei na hora). Quanto aos dados que solicitei já tive problemas, pois era a segunda vez que o servidor tinha sido alterado. De acordo com o responsável, amanhecer do dia 07/07/2011 já tinha sido mudado o site, então no mesmo dia o responsável pela administração do site(outra cidade), havia colocado no ar/alterado o servidor. Bem, entre outras informações que peguei foram: Data e hora corretas, servidor estava ligado a +/- 2hrs(sim, já tinham reiniciado o servidor várias vezes), peguei os processos em execução(Process Monitor da Sysinternals) e as portas abertas no momento(TCPView da Sysinternals). Aproveitei e exportei os logs do Windows(Visualizar Eventos) para o pendrive.
Como levei um HD(2 TB) fiz uma imagem do HD inteiro ali mesmo. Iniciei com Pendrive que sempre levo em mão do Ubuntu Live, com fdisk verifiquei as partições disponíveis, montei meu HD externo e fiz a copia:
#montei meu HD externo:
mount /dev/sda /mnt#para ver as partições:
fdisk -l#copia dos dados:
dcfldd if=/dev/sdb of=/mnt/imagem.dd hash=md5,sha256 \
md5log=/mnt/imagem.dd.md5 sha256log=/mnt/imagem.dd.sha256
A tarde começaria a analise do mesmo.
08/07/2011 13:00hrs
Bem, a forense(se é que pode ser chamada assim), não foi muito demorada, até porque meu objetivo era saber como tinham feito a alteração(Defacement) do site, e isso logo caio na minha mão. Depois de todos os dados em mãos comecei extraindo as strings da memória, apesar que já quase tinha certeza que não ia ter muita coisa por la, mas, enfim, eu fiz 😀
strings memoria.dd > memoria.dd.strings
Procurei por dados referente a data que haviam me passado, para isso, nada melhor que o grep e as regex e lógico, saber como funciona os logs do serviço, que isso não foi difícil descobrir, bastou instalar um server 2003 com IIS, e tentar acessar o site, como eu conheço melhor o Linux, fiz um find para descobrir o que tinha sido alterado no HD, achei o log em c:WindowsSystem32LogFilesW3SVC1, o começo do log era ANO-MES-DIA HORA:MIN:SEG, com isso já tinha minha regex:
grep -E '2011-07-(06|07|08) [0-9]{2}:[0-9]{2}:[0-9]{2}' memoria.dd.strings
#Basicamente essa regex casa com dias 06, 07 e 08
#do mês 07 no ano 2011 em qualquer horário.
Achei 6 ips na lista que me passou, um era do servidor e 5 eram externos.
12.0.742.112
187.59.49.153
189.63.226.110
xxx.xxx.xxx.xx
201.10.74.134
49.212.18.251
O ruim disso tudo que não achei nada mesmo na memória, tava tudo limpo.. Até achei algo depois, como o nome do script malicioso que foi injetado, mais já sabia dele… Infelizmente, pelo fato de terem desligado o pc a memória ficou quase inútil.. Apesar que achei coisas de 2006 ae na memória, talvez seja cache? ou sabe la o que..
Com o fls, procurei por arquivos php e html.. Pois dentro do c:Inetpubwwwroot tava praticamente vazio, só tinha mesmo o index.html com o “Página em manutenção”… Primeiro montei a imagem com kpartx, para mapear as partições no /dev/mapper:
# kpartx -av imagem.dd
Depois a pesquisa pelos arquivos em questão:
# fls /dev/mapper/loop0p1 -r | grep -Ei '(html|php)'
Achei um monte de arquivo(lógico), então fiz um grep no index.. E achei varios inodes referentes aos arquivos, um deles bem sugestivo: index_hacker.html, nada mais era que o defacement do site, provavelmente o webmaster que já tinha trocado a pagina principal no servidor deve ter alterado o nome do arquivo e depois excluído, extrai o arquivo com icat e abri em um navegador(via maquina virtual), estava tudo em uma linha só, então coloquei alguns <br> para ficar melhor(por ai já vi que o hacker não era tão hacker assim):
Bem, tenho uma VM com Windows XP instalada no VMWare Player, que uso para testes e outras coisas que seja necessário, através dela instalei um programa de recuperação de arquivos(R-Studio), adicionei a partição da minha imagem para tentar recuperar algo por ele, enquanto isso fiz uma instalação de Windows 2003 Server para montar o cenário, e verificar de onde está a localização dos logs, e se eles estão ainda lá(sim, tentei fazer uma pesquisa pela palavra chave, mais achei mais de 20000 resultados, então achei mais fácil fazer assim). Com um pouco de pesquisa já achei o caminho:
Depois dessa informação fui pesquisar se tinha o arquivo no HD, montei ele no linux e naveguei até a pasta:
# mount /dev/mapper/loop0p1 /mnt -o ro,loop
# cd /mnt/WINDOWS/system32/LogFiles
E adivinha? Os logs estavam todos la. Bem, aqui vou resumir um pouco, dentro dessa pasta tem várias subpastas, entre elas: Cluster, HTTPERR, MSFTPSVC1, Shutdown, W3SVC1. Pelo que vi no programa(onde achei a pasta de logs), por padrão o IIS grava em W3SVC1 os logs referentes ao acesso de páginas, dentro dessa pasta existem arquivos com extensão log que se um padrão, ex<ano><mes><dia>.log, então, como já tinha mais ou menos uma ideia, fui logo para o arquivo ex110706.log(que se refere a data de 06/07/2011).
Várias informações achei ali(muita gente acessa o site), mais nada que chegasse ao “criminoso”, fui para o próximo dia, rolando a pagina achei algo interessante, exatamente 2011-07-07 00:39:39, um certo ip começou a fazer SQL Injection no site, como sei? Já testei ferramentas do tipo para ver como funciona, basicamente ele pega um GET ou POST e coloca um código SQL(SELECT) junto a página para pegar informações. Mais isso durou pouco, logo ele continuou procurando por paginas de administração do site: /admin, /administrador, /login… entre outras.. Com o ip dele em mãos(aparece nos log, logico), fiz uma pesquisa pelo ip dele na pasta logs:
laercio:LogFiles$ grep -Rn 'xxx.xxx.xxx.xx' *
e descobri que ele constava nos logs de ftp também, inclusive no mesmo dia(07-07-2011) em MSFTPSVC1, abri o log em questão e ali vi como é complicado não se atentar a certos detalhes, ele conseguiu acessar antes disso, mais o que me chamou atenção foi essas linhas:
01:09:54 201.81.151.180 [24]USER anonymous 331 0
01:09:54 201.81.151.180 [24]PASS leech@nowhere.org 230 0
01:09:58 201.81.151.180 [22]CWD site 250 0
01:09:59 201.81.151.180 [24]created /Shell.php 226 0
Precisa falar algo? Bem, vou falar do mesmo jeito, basicamente o cara entrou via ftp com usuário anonimo e uma senha qualquer(sim, não precisa saber a senha) e injetou um script malicioso, novamente fui ao diretório, mais o arquivo não estava mais la, com alguns grep vi que o webmaster do site exclui o mesmo via ftp, mais ele não usa usuário anonimo, então pq esse usuário anonimo ta la? para ser ter uma ideia tem log de acesso naquela pasta do dia 10/06/2010(sim, 1 ano atras) e somente uma vez uma pessoa entrou com usuario anonimo(de fora do pais), e mesmo assim errou a senha(que precisa ser necessariamente um e-mail para validar). Somente nos 07 e 08/07/2011 que voltou a ser acessado o ftp com usuário anonimo. Então tire conclusões por sí só, muito cuidado ao fazer um ftp, busque na internet como fazer(se não souber como), mais pelo menos analise problemas, muitas vezes esses tutoriais são de como fazer, e não de como se proteger! Pense nisso, fica a dica…
Bem, voltando, o IP é de São Paulo capital, provavelmente um “piazote” que fuçou na internet por um rootkit e conseguiu achar a falha. Pois bem, você deve estar se perguntando para que serve o Shell.php? Eu também estava, aproveitei a minha VM e coloquei la, para ver. Esse script nada mais é um “explorer”, com opções de editar arquivos, excluir, subir níveis de pasta, com algumas opções de FTP brute, SQL Code, PHP-code e outros. Inclusive armazenei ele em um servidor temporário: Shell.php, cuidado com o que vão mexer heheheh. Vendo isso só digo uma coisa, o cara poderia ter feito o que queria com o servidor, pq o mesmo deixava subir o nível de pastas, ele só não fez porque não quis.. Mais isso é detalhe!
Concluindo, analisei mais os logs e vi que o hacker pegou alguns dados com SQL Injection novamente mais tarde(ele ficou até quase 4hrs no servidor), pegou algumas tabelas(pelo menos pediu informações delas) e conseguiu algumas senhas de acesso a administração do site, não sei qual a importância delas, mais avisei o cliente, inclusive avisei ao cliente que o “criador” do website armazenou as senhas em texto plano, sem qualquer criptografia(legal né?). Voltando aos logs, verifiquei que o atual webmaster estava colocando o site(que foi excluído via ftp, não pelo script) logo de manha, a tarde ele verificou o site para ver se estava em ordem, e enquanto ele logou no servidor, o atacante novamente entrou no servidor para excluir. Então pensa, enquanto um colocava os arquivos no servidor outro excluía, isso se repetiu várias vezes, pena o webmaster não ter visto. Como não sabia do ocorrido, na noite do dia 07/07/2011 foi feito mais uma vez o defacement do site, outra vez foi excluído o site, e mais uma vez foi colocado os arquivos no servidor, e alterado a página para “Em manutenção”, só ali, no outro dia de manha que foi informado a mim que o servidor tinha sido invadido 2x(na verdade foram mais). E por último, não menos importante. O atacante não agiu sozinho, teve mais de um IP que acessou via ftp/www para “brincar” com o site, também vindo de São Paulo capital.
Obs. 1: Para verificar de onde vem os ips em questão usei o site http://whatismyipaddress.com/
Obs. 2: Comentem =D
Edit: Armazenei o Shell.php em um server gratuíto: http://laerciotestes.alwaysdata.net/
11 comentários
1 menção
Pular para o formulário de comentário
Muito bom o artigo Laercio, espero que continue assim (melhore no português) e que se especialize em forense pois a lógica da análise você já tem.
Abraço
Obrigado, vou ficar mais atento aos erros!
Laercio,
Gostei do Post, você está de parabéns, e como o Vagner disse continue nesse caminho porque você leva jeito.
Abraços.
Muito obrigado pela força!
Ótima experiência Laércio, parabéns.
Valeu Professor Elder 😉
Pow tem como colocar o shell.php em outro servidor pq nao toh consequindo ver o code
Autor
Ta feito.. Coloquei novamente hoje la..! Qualquer coisa tamo ae!
Confira em http://laerciotestes.alwaysdata.net/Shell.php
Muito bom o artigo, acho muito legal essa área!
Ótima experiência que você teve em! 😀
Abraço
kra, é este tipo d ação que me fascina na info.
parabens, vc tem conteúdo!!!! e prática!!!!!
Autor
Valeu valeu! =)
[…] Forense agora… […]