Phishing Bancário “Carvalho Motos Ltda — Bol. 81139”
Conhecendo o artefato
Recentemente fomos acionados sobre um e-mail com o título “Carvalho Motos Ltda — Bol. 81139”.
Ao iniciar a análise, notei que o ANEXO 837 KB tinha um link para hxxps://goo[.]gl/tKJ4DK, que é o encurtador de url do google bastante usado para ocultar a verdadeira url e também bypassar análises online como do virustotal.
Em um ambiente controlado, verifiquei que o link baixa um arquivo .rar.
Extraindo o boleto, temos a “surpresa?” de encontrar um .exe.
Iniciando a análise
Ao iniciar uma análise, sigo algumas etapas. Dentro de rotina de analisar com uma tool e outra, verifico algumas informações com o pestudio e depois com algum indentificador de PE como DiE, ambos os casos estão expostos em imagens abaixo.
Assim, consigo obter algumas informações sobre o artefato tais como: Antivirus que o pegam, o dia que foi compilado (24 de setembro), a assinatura dele (Microsoft Visual C# v7.0 / Basic .NET), além de possuir algumas strings suspeitas. Para confirmar a linguagem utlizada e se está com algum tipo de packer utilizei o DiE.
Confirmado que não possui packer, decompilei e fui analisando o que está acontecendo nesse arquivo. O autor do malware se preocupou em deixar algumas funções ilegíveis para atrapalhar a análise. Para facilitar, renomeei algumas, tais como: Main e DecryptMethod.
Com esse método, é possível identificar algumas coisas interessantes. O autor deixa, para cada string a ser decriptada, um Thread.Sleep que faz a aplicação aguardar pelo tempo definido.
Logo no início é criado um ScriptControl para ser possível rodar JavaScript dentro do código, essa informação é útil para ficarmos atentos às linhas seguintes e, principalmente, a linha:
“scriptControl.Language = Form1.DecriptMethod(“QHDGIHAHQIGHWIEII”, 76);”
Identificamos que a linguagem é VBScript acompanhando o método que faz o decript da função.
Seguindo essa ideia, voltamos ao método Main e esperamos todas as etapas rodarem antes da chamada para a execução do script, pondo um breakpoint na linha:
scriptControl.AddCode(code);
E acompanhando nas variáveis locais o VBScript decryptado.
Pra ficar mais legível, joguei a string acima no sublime.
Essa função utiliza a mesma ideia das outras, uma “criptografia” customizada, mas nesse caso é bem fácil bypassar. O que costumo fazer é comentar o execute e adiciono algumas linhas de código vbs para salvar os comandos gerados em .txt, com este procedimento chegamos ao segundo arquivo .vbs para este malware.
Novamente, sem executar e tento verificar o que esta url faz. Ao abrí-la, ganho de presente este response:
Novamente, para melhorar a visualização, ponho no sublime again.
Este terceiro script gera mais um .vbs que, seguindo a mesma ideia, vamos salvar em arquivo, porém este é um pouco maior e de fato é o coração de todos esses scripts. Por ser muito grande, vamos pegar pedaços e explicar a intenção por de trás de tantos scripts.
Esse malware tem todo o jeito de ter sido feito/alterado por um brasileiro e essas suspeitas aumentam quando prestamos atenção e percebemos que ele só segue com o código quando a linguagem do Sistema Operacional é Português do Brasil. Uma outra validação feita é em relação a se o código está sendo executado de uma máquina virtual, se tiver ele não irá executar nenhuma ação.
Se essas condições para executar forem verdadeiras (O sistema ser em pt-br e não ser executado dentro da VM) ele executa o resto do código. Logo após as declarações de variáveis, o malware salva em C:\Users\Public\ um arquivo pegando o nome da máquina e retirando a segunda posição, ficando apenas uma letra, dentro do arquivo são guardadas as seguintes informações:
Algo para se lembrar feliz é que o autor foi legal em deixar variáveis com nomes sugestivos, o que economizou algum tempo. Após isso, ele salva mais um .vbs na pasta Startup, este é um método bastante utilizado para iniciar alguma aplicação junto com o windows, sem precisar inserir chaves no registro. Neste caso, o nome utilizado é randômico.
E aqui o arquivo salvo na pasta.
E o código desse .vbs — que eu já até perdi a conta de tantos que vão sendo dropados rs — é o abaixo:
E esse código executa esse script:
Esse é o arquivo que fica salvo no startup. A intenção é que esta dll seja carregada no rundll32.exe quando o sistema iniciar. Vamos ver o que acontece com isso mais a frente, agora vamos terminar com o fluxo do malware.
Seguindo o fluxo do programa, temos duas chamadas interessantes e com nomes sugestivos, SaveBinaryData e BinaryGetURL, que fazem exatamente o que os nomes sugerem, salva o binário em uma pasta e pega um arquivo stream da URL passada. Após pegar as strings descriptografadas, descobrimos as URLs passadas e os binários são baixados.
hxxp://diversos18191145[.]com/dghym35/mk1a
hxxp://diversos18191145[.]com/dghym35/mk1a1.vh3
Porém, o código tem alguns erros e acaba morrendo sem fazer nada. O motivo é que uma das chamadas internas do .vbs apaga o conteúdo na pasta após as execuções. Entre um apagar e outro, o autor acaba por chamar uma outra versão que no final mostra um erro, pois o arquivo chamado não existe na pasta. Logo, para seguir com a análise, comentei as linhas que apagam os arquivos desnecessários e ao final da execução ele executa o mesmo comando do vbs da imagem 19.
Arquivos baixados
Todos os arquivos baixados após a execução total sem apagar nenhum arquivo gerado ou baixado estão na imagem abaixo.
Observando os arquivos RQWL.VVGQS e o mk14, percebi que eles tem o mesmo tamanho e análisando o código vbs gerado, tenho a certeza de que são o mesmo. Dentro do código esse arquivo mk14 é renomeado para o nome randômico e após isso, ele é apagado. Sendo assim, vamos focar neste arquivo RQWL.VVGQS a partir de agora!
Quando o vbs da imagem 19 é executado, ele carrega a dll RQWL.VVGQS junto com rundll32.exe e assim vemos conforme a imagem abaixo:
Se clicarmos duas vezes no rundll32.exe dentro do ProcessExplorer vemos as propriedades do mesmo e no comand line vemos a mesma chamada da imagem 19, que podemos traduzir da seguinte forma:
rundll32.exe <dllname>, <entryPoint> <optionalArguments>
Para maiores informações sobre a rundll32, clique aqui! :)
Olhando novamente essa dll no pestudio, descobrimos algumas informações importantes como:
- Existe a suspeita de ser um keylogger;
- O nome original da dll é lcattunddt2363.dll;
- O virustotal não tem indício desse arquivo;
- O parâmetro LRIMBWOM36 é realmente o export da dll;
- O arquivo tem muitos recursos (45);
Análise no IDA
Vamos entender melhor o que esse arquivo suspeito faz abrindo o mesmo no IDA para uma análise estática e um início de debugging. Vamos usar o mesmo parâmetro passado e vamos pôr um breakpoint no início do export LRIMBWOM36.
Ao longo do debugging encontro algumas strings suspeitas…
Também observo que essa dll lê um dos arquivos criados…
Continuando a olhar as strings sendo decryptadas, começamos a ver informações que nos remetem à conclusão desse arquivo ser um keylogger.
Conforme seguimos com a análise no IDA, descobrimos algumas outras informações que nos mostram um caminho diferente a seguir:
Decrypt file
Aqui começa a rotina para carregar este arquivo com final 1 na memória. Este arquivo tem aproximadamente 5MB e está criptografado, a rotina que decrypta o executável é essa aqui:
Para automatizar a tarefa com o arquivo que já está salvo, fiz um script python para fazer o decrypt de todo o arquivo, e o resultado esta na imagem abaixo:
Esse arquivo tem alguns problemas, mesmo estando igual ao que é carregado na memória pela primeira dll.
Depois disso tudo vem uma pergunta: “Essa dll está corretamente decryptada?”. Para responder essa pergunta continuei com a análise e percebi que ela está corretamente decryptada, porém o código pega as seções e monta a Import Address Table (IAT) em tempo de execução. Então, decidi não prosseguir com a reconstrução da IAT nesse momento, pois o que realmente queria entender, era o objetivo final do Boleto Verdade — o nome carinhoso que dei pra ele :). Prosseguindo, peguei a DLL gerada e analisei algumas strings, pois o arquivo não estava mais criptografado e no final de todo o processo merecemos identificar o que o autor queria com esse boleto, não é mesmo?
Gosto muito do PPEE e é com ele que continuo olhando e procurando mais algumas informações úteis. Não demorou muito para achar as URLs utilizadas pela DLL:
Algumas URLs sugestivas :)
Strings encontradas do GbPlugin, AppBrad, Sicoobnet que se referem ao GBuster, aplicativo do Bradesco e internet banking Sicoob.
Outras confirmações de keylogger, com nome das teclas.
Para não existir mais dúvidas sobre o que esta DLL faz.
Conclusão
Com isso, análise terminada! Podemos concluir que este malware é um dropper que baixa muitos arquivos, utiliza o rundll32.exe para executar a dll que decrypta na memória um keylogger bancário.
Greetz
Gostaria de agradecer ao Diogo Mussi pela ajuda no “thinking out of the box” quando xorstring, xorsearch e outras tools não funcionaram para resolver a crypto utilizada, isso me fez pensar em ir mais devagar em alguns momentos e com isso consegui identificar e decryptar. Thanks bro!
IOCs
hxxp://diversos18191145[.]com/dghym35
hxxp://diversos18191145[.]com/dghym35/mk1
hxxp://diversos18191145[.]com/dghym35/mk1a
hxxp://diversos18191145[.]com/dghym35/mk1b
hxxp://diversos18191145[.]com/dghym35/mk1a1.vh3
=======================================
Filename : BO_LcOpt3wrkWdY5oi1FvmkX.exe
MD5 : 9c99424f5f7e592526288466f89f6145
SHA1 : 9a5a7fc1cd8103758de37099c0905aba89c34c29
CRC32 : 623d3b79
SHA-256 : c53d37977e0f7975de58bcee1ba579922e3d0ed613b7da3ecfb9ad4594127538
=======================================
Filename : BO_LcOpt3wrkWdY5oi1FvmkX.rar
MD5 : 905830c75d005e7f927c3e6bf207e064
SHA1 : ff948b3b1bb525618bce3ceddd8ed85c2403a185
CRC32 : 264ea1e4
SHA-256 : 0a269233b8409e31291098440168514badf0d1610f65a199055f2337dc0b0d3a
=======================================
Filename : outraParte.vbs
MD5 : d1992f0cf55ac86cbde28b44b3f1e577
SHA1 : 7f199de99c87d22f9d658aa4fa9e4ba74beb1c01
CRC32 : 8373789a
SHA-256 : cfa7ba44a195dc5b6f40d29d4131fa8974fd14f0ca73fd83705cb8fd264bd1e3
=======================================
Filename : outro.vbs
MD5 : ec106431d8df60fbe0037865ecc1e0f1
SHA1 : 52e3058eb83fcd0f3de1616a4e29f9bf69e551e3
CRC32 : c94f06d6
SHA-256 : 80a71e6df1ec02223ea0348cc2487184a546fed6a63403b7077626308e42a98b
=======================================
Filename : 1.vbs
MD5 : 8ae10b85dda0d7b4a7cc4f3525d92510
SHA1 : a6cfb2ccf31e5629094efaf0dd63c4f3e6bad720
CRC32 : 63b8e903
SHA-256 : fb30e861ef6655e2345e501c4be2070a9dee6ff8c6577fcd1813ebd5a0820de5
=======================================
Filename : 2.vbs
MD5 : 2d78e7b32f43e917d288b44c1b9fff51
SHA1 : c1bdd0460f7e687f866673664caf48a463dd0451
CRC32 : acf90e92
SHA-256 : d9009c0d1115215e0afadd1094a2e83ac0b831c583e742bf869fca438ac8c095
=======================================
Filename : 3.vbs
MD5 : d05d25e7c65f4e9a117296c43425f8e3
SHA1 : d1a977979b7ac138ee3d4c626131db73cc555eba
CRC32 : ad4ff2af
SHA-256 : 72c964edd6bd78b952d8a4e31bb191dc53b64a4eea4cab1b42ab9339895cd634
=======================================
Filename : V
MD5 : d05864bfbc1cea2c3630acfa8fb177f3
SHA1 : 5f6aa259de7746bf5c321eca000537560c032926
CRC32 : 9e4373a2
SHA-256 : fc9838b6e281bbdf800f5b181b324e0a14e65c00da37fae44d5f806d37241ee5
=======================================
Filename : RQWL.VVGQS
MD5 : f22fd92b24c1318c8fad0447562772f8
SHA1 : 27d7ebdf6e86935ed59459facdd53e21883e54b3
CRC32 : 5a7a5bbb
SHA-256 : 7f86d4cbf082999df3c8b05055b01d181feef8016a0b495acd580b41f46a9ab3
=======================================
Filename : RQWL1.zip
MD5 : cdc619d8ad39c65b4231dd9c9af4bd88
SHA1 : 3c558d2ecaf1067f9c521488ae76318885cb802d
CRC32 : 070fe175
SHA-256 : 5b563533e460c8e74edde243fe62c24a63f2b44500dd7f8e1d19a3a8d2ddae18
=======================================
Filename : RQWL4.zip
MD5 : c2c07d61f3d2e8f33cbd7df41df41a72
SHA1 : 0cf0e242243ed55267d257fe6e371b38fabeda1a
CRC32 : de9ae705
SHA-256 : 68c2543791076eb4a191bc2dfda595c350eab00523af06b29daaf8e0dc8809a7
=======================================
Filename : E
MD5 : e0912bda09eb43fd7e747afc7f62ba88
SHA1 : a28a10a02d2019fb4e411bd00c8f1dec308fa15f
CRC32 : 78673d76
SHA-256 : 1e52d2fe17599e0ab2df8135a98415ec71c34433fd83dafc152fa37036c1e1e4
=======================================
Filename : I
MD5 : 6852efcea08430ac84cd1239071ceb4e
SHA1 : b35bff495038828e5489a5881ca2c92627311c1a
CRC32 : d86e2759
SHA-256 : fdd8003202cb389b38b9ba0a6b4ee83c3ef8465588a00a915180c56ebdc0a76c
=======================================
Filename : RQWL1.VVGQS
MD5 : 1d8832f020a15c50fe56544e061bb13c
SHA1 : 29fb4d891955b9c71b37ed37441db528a7e5a560
CRC32 : 8487740c
SHA-256 : 4841e99a336e4f364795589b32a71ca0471bffbdb9e981a62c8468275836e786
=======================================
Filename : mk14
MD5 : eafca9927e96800bc45231505f9a3be8
SHA1 : 0b3bdb2587b68b1caac9508281141a6f20adcb93
CRC32 : 6eac9f87
SHA-256 : 784d5facb1148e762cc853ed415f45c39240abab3e5a03d7b4a0b8afa48520bd
=======================================
Filename : RQWL1.VVGQS_decrypted.dll
MD5 : 935060d3d6142db70054c2d4717b45a9
SHA1 : 5124073f835e3f642e08872d5960a0495bb0005f
CRC32 : 57fcf4bd
SHA-256 : 12a4292810936c98decb50ea79890ecf8edf9658bf1177abc791d1842560f6e4
=======================================