Fala galera.. Continuando o primeiro post, let’s go… Se não minha TDAH assume o controle e eu começo a ler sobre qualquer outra coisa, menos o assunto!

No post passado vimos a montagem do lab para análise dinâmica de malware. Neste post, pretendo mostrar como fazer uma análise básica de malware utilizando o citado laboratório.

Primeiro vamos fazer o download das ferramentas que utilizaremos para analisar o malware. Lembre-se de fazer o download em sua máquina host e enviar para o a vm usando um pendrive; porque pendrive? Simples: você poderia configurar um compartilhamento entre seu host e a vm e o malware que estiver analisando utilizar compartilhamento para se replicar/infectar outros arquivos… Não adiantaria o isolamento ethernet.

Vamos às ferramentas:

    • Process Explorer (Ferramenta semelhante ao Gerenciador de Tarefas do Windows, porém com muito mais recursos.)
    • Process Monitor (Monitora todas ações de um processo. Permite filtrar apenas as interações do processo desejado.)
    • No Linux usaremos o Wireshark para monitorar o tráfego TCP/UDP e o resto das ferramentas relacionadas ao ambiente servidor. 

Caramba, só isso? Sim… Por hora, apenas isto.

É sempre bom ter uma vm focada no assunto caso você não queira compilar/instalar as ferramentas uma a uma em uma outra distribuição de sua preferência; porém sem querer ser chato mas, mais uma vez tocando no assunto: Uma vm que esteja ISOLADA do restante do seu ambiente, nenhum contato com seu ambiente físico, se precisar mesmo, o máximo é um compartilhamento somente leitura.

O REMNUX é uma boa pedida, além do mais ele já conta com o PEV em seus repositórios, o que será muito útil quando começarmos a parte de engenharia reversa e análise estática. A distribuição Linux é encorajada por mim e várias outras pessoas, por adicionar ao ambiente características tipicamente encontradas na internet que podem ser utilizadas para checar de forma mais fácil as ações do programa. Ou seja, é muito mais fácil configurar um DNS/Firewall/Proxy/IRC/DHCPd/CUPS/etc… no linux do que baixar e adicionar ao ambiente um windows server com a maioria destas ferramentas.

Finalizado o download das ferramentas vamos extrai-las, coloca-las em uma pasta de nossa preferência e tirar um snapshot da máquina que executaremos o malware pois, em caso de problema grave basta retornarmos o snapshot e problema resolvido.

Primeira ação após o snapshot é iniciar as ferramentas de monitoramento. Primeiro o ProcessExplorer e depois o ProcessMonitor.

No ProcessExplorer, clicar com o botão direito e verificar as propriedades que ele tem para cada processo. A opção que mais usaremos será “Kill Process”.

Já no ProcessMonitor, precisamos informar qual o processo será monitorado, como mostra a figura:

Por último, abrir o wireshark no linux pois, muito provavelmente o malware conecta-se a algum servidor para fins de C&C(Comando e Controle):

No Wireshark, vamos iniciar uma captura na eth0 e parar após finalizar a execução do programa e das ferramentas de monitoramento.

Após 10 segundos de execução, podemos matar o programa com o processexplorer e salvar o log do processmonitor; ideal salvar como CSV e depois abrir por algum programa que tenha suporte ao formato.

Não vou comentar o arquivo completo, mas vou falar das partes mais interessantes… Caso encontrem mais coisas no arquivo, comentem… fico grato em aprender.

Uma coisa interessante que o software faz é adicionar ao registro sua inicialização, com um nome “comun”(Service Profiler):

  • 09:13:42,5069050 srvcp.exe 1404 RegOpenKey HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run SUCCESS Desired Access: All Access
  • 09:13:42,5069341 srvcp.exe 1404 RegSetValue HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Service Profiler SUCCESS Type: REG_SZ, Length: 20, Data: srvcp.exe
  • 09:13:42,5069542 srvcp.exe 1404 RegCloseKey HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run SUCCESS

A informação acima pode ser confirmada no regedit:

Abaixo vemos que o programa tenta acessar um arquivo gus.ini que não é encontrado:

  • 09:13:42,5124015 srvcp.exe 1404 CreateFile C:\WINDOWS\system32\gus.ini NAME NOT FOUND Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Write, AllocationSize: n/a
  • 09:13:42,5125038 srvcp.exe 1404 CreateFile C:\WINDOWS\system32\gus.ini NAME NOT FOUND Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Write, AllocationSize: n/a
  • 09:13:42,5130575 srvcp.exe 1404 CreateFile C:\WINDOWS\system32\gus.ini NAME NOT FOUND Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Write, AllocationSize: n/a

Outra coisa que chama atenção é o acesso ao mswsock.dll que é um módulo que provê extensões para Winsock. Ou seja, com certeza nosso amigo acessa a web:

  • 09:13:42,5145694 srvcp.exe 1404 QueryOpen C:\WINDOWS\system32\mswsock.dll SUCCESS CreationTime: 14/4/2008 08:00:00, LastAccessTime: 13/5/2013 13:41:21, LastWriteTime: 14/4/2008 08:00:00, ChangeTime: 13/5/2013 10:39:12, AllocationSize: 249.856, EndOfFile: 247.808, FileAttributes: A
  • 09:13:42,5150714 srvcp.exe 1404 CreateFile C:\WINDOWS\system32\mswsock.dll SUCCESS Desired Access: Execute/Traverse, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: n/a, ShareMode: Read, Delete, AllocationSize: n/a, OpenResult: Opened
  • 09:13:42,5151435 srvcp.exe 1404 CreateFileMapping C:\WINDOWS\system32\mswsock.dll SUCCESS SyncType: SyncTypeCreateSection, PageProtection: PAGE_EXECUTE
  • 09:13:42,5151574 srvcp.exe 1404 QueryStandardInformationFile C:\WINDOWS\system32\mswsock.dll SUCCESS AllocationSize: 249.856, EndOfFile: 247.808, NumberOfLinks: 1, DeletePending: False, Directory: False
  • 09:13:42,5151812 srvcp.exe 1404 CreateFileMapping C:\WINDOWS\system32\mswsock.dll SUCCESS SyncType: SyncTypeOther
  • 09:13:42,5152549 srvcp.exe 1404 CloseFile C:\WINDOWS\system32\mswsock.dll SUCCESS

Bom, vamos ao Wireshark ver o que ele logou:

Vemos várias tentativas de conexão à máquina  irc.mcs.net porém sem sucesso. Vamos editar o hosts do windows e setar o ip do remnux para este host:

Vamos executar novamente o arquivo e verificar o wireshark:

Vemos que ele consegue chegar até a máquina que configuramos o nome, e recebe um RST em cada tentativa de abrir o 3-way para a porta 6667, normalmente usada por servidores IRC(obvio por conta do nome da máquina que configuramos).

Vamos então startar o IRC no remnux e observar:

remnux@remnux:~$ ircd start Starting Inspircd...done

Agora vamos executa-lo novamente e verificar no wireshark se algo mudou:

Opa opa… Já dizia o provérbio: Darás ao malware o que ele precisar e ele dirá o que fará… :D

Quem preferir, pode verificar pacote por pacote… Mas no caso em questão, clicar em “Analyze -> Follow TCP Stream” já é o suficiente.

Vimos na figura que o malware conecta-se ao IRC com o nick mikey, entra no canal #daFuck e seta o nome real para “fight me, pussy”.

 Vamos conectar ao irc localmente para checar:

Ao acessar o irc da máquina, verificamos a existência do citado canal e do usuário neste canal, confirmando os dados do wireshark; Quando encerramos o processo no windows, vemos a desconexão do usuário mikey no servidor irc.

Como já vimos que o processo de C&C se dá através de uma rede IRC, vamos checar duas instâncias do malware rodando, para ver como ele se comporta. Lembrar de configurar o segundo ambiente da mesma forma que o primeiro. Pode clonar a segunda vm caso ache melhor; caso vá cria-lá do zero, revise as configurações já citadas.

Abaixo segue o “Follow TCP Stream” do wireshark, agora com duas instâncias do malware

=========================================================
NICK :mikey
USER EpRp EpRp EpRp :fight me, pussy
JOIN #daFuck
:remnux. NOTICE Auth :*** Looking up your hostname...
:remnux. NOTICE mikey :*** Skipping host resolution (disabled by server administrator)
:remnux. 451 JOIN :You have not registered
:remnux. NOTICE Auth :Welcome to .REMnux IRC Network.!
:remnux. 001 mikey :Welcome to the REMnux IRC Network IRC Network mikey!EpRp@0::ffff:192.168.10.10
:remnux. 002 mikey :Your host is remnux., running version InspIRCd-1.1
:remnux. 003 mikey :This server was created 17:24:15 Apr 16 2012
:remnux. 004 mikey remnux. InspIRCd-1.1 inosw bhiklmnopstv bhklov
:remnux. 005 mikey WALLCHOPS WALLVOICES MODES=19 CHANTYPES=# PREFIX=(ohv)@%+ MAP MAXCHANNELS=20 MAXBANS=60 VBANLIST NICKLEN=31 CASEMAPPING=rfc1459 STATUSMSG=@%+ CHARSET=ascii :are supported by this server
:remnux. 005 mikey TOPICLEN=307 KICKLEN=255 MAXTARGETS=20 AWAYLEN=200 CHANMODES=b,k,l,imnpst FNC NETWORK=REMnux IRC Network MAXPARA=32 ELIST=MU :are supported by this server
:remnux. 375 mikey :remnux. message of the day
:remnux. 372 mikey :-
:remnux. 376 mikey :End of message of the day.
:remnux. 251 mikey :There are 2 users and 0 invisible on 1 server
:remnux. 254 mikey 1 :channels formed
:remnux. 255 mikey :I have 2 clients and 0 servers
JOIN #daFuck
:mikey!EpRp@0::ffff:192.168.10.10 JOIN :#daFuck (Primeira instância)
:remnux. 353 mikey = #daFuck :localhost mikey :remnux. 366 mikey #daFuck :End of /NAMES list.
NICK mikey
NICK mikey
NICK mikey
...muitas linhas...
NICK mikey
NICK mikey
:UkGgKm!ZlNwPkB@0::ffff:192.168.10.12 JOIN :#daFuck (Segunda instância)
NICK mikey
NICK mikey
NICK mikey
=========================================================

A primeira instância do malware comportou-se conforme esperado, confirmando o nick mikey a cada 3 segundos; já a segunda instância tentou logar-se com o mesmo nick, porém visto que já estava em uso utilizou o nick UkGqKm.

No terminal do irc vemos o que acontece quando a segunda instância é finalizada: As checagens que o software faz a cada 3 segundos são para verificar se o nick desejado já esta disponível, pois as redes IRC não permitem dois nicks iguais conectados a um canal e o atacante precisa de alguma forma passar os comandos para o a vitima, que no caso seria algum nick conhecido pelo mesmo.

Bom, um recado aos flamemakers que tiverem acesso ao treinamento da SANS:

Isto é uma das primeiras etapas feitas no treinamento. Talvez digam: isso é uma tradução, isso é um charlatão… hehehe.. simples, resolvi documentar enquanto ia aprendendo tanto com o PDF quanto com o lab.

Em breve, vou postando aqui coisas novas que eu for conhecendo… Não se surpreendam se tiverem partes parecidas com algum livro ou coisa do tipo… Percebi que escrevendo o que faço, aprendo mais…

Bom, até a próxima galera… Espero que gostem do post básico…

Quanto mais leio sobre o assunto, mais me fascino…

“Criar malwares é uma arte… Dissecá-los, um privilégio!”

  • memset

    Bacana man, ando estudando Análise de Malware também e tenho gostado muito, um procedimento que achei interessante buscando sobre o assunto é de criar uma imagem da memória RAM e depois fazer uma análise em cima dela pra verificar os processos executados na máquina, dlls utilizadas pelos processos, apihooks, callbacks, analise de conexões e outros buscando por anomalias, parabéns pelo artigo.

    []s

    • Opa memset… Valeu cara…

      De fato… do dump, acho que não escapa nada…
      Pretendo falar sobre ele mais tarde… É tão bom que é uma das formas usadas pra se ter acesso a strings encriptadas…

      Vi uma coisa interessante esses dias, mas ainda nao testei:
      https://bitbucket.org/oebeling/tracectory/wiki/Home

      Que bom que tem estudado malware, espero que vc goste do que for encontrando aqui..

      Novidades que quiser compartilhar, tamo junto… :)

  • Nice post,all the best

  • Opa.. e Ai Alan..
    Que bom que gostou…
    Essa foi a continuação do post anterior…
    Agora comecei a estudar a parte mais avançada da análise dinâmica e em breve a análise estática….
    Ai a coisa vai ficar realmente boa.. hehehe

  • Alan Teixeira

    Muito bom!!!!