Phishing Bancário “Carvalho Motos Ltda — Bol. 81139”

Charles Lomboni
stolabs
Published in
10 min readOct 1, 2018

Conhecendo o artefato

Recentemente fomos acionados sobre um e-mail com o título “Carvalho Motos Ltda — Bol. 81139”.

1 — Email recebido

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.

2 — Verificação de ameaça no virustotal.com

Em um ambiente controlado, verifiquei que o link baixa um arquivo .rar.

3 — Arquivo baixado após acesso a url encurtada do google

Extraindo o boleto, temos a “surpresa?” de encontrar um .exe.

4 — Arquivo extraido

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.

5 — Análise do pestudio

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.

6 — Análise no 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.

7 — Método main

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.

8 — Método que decripta as strings retornando VBScript

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.

9 — Colhetando VBScript criado em runtime

Pra ficar mais legível, joguei a string acima no sublime.

10 — Código VBScript legível

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.

11 — Segundo arquivo .vbs gerado pelo malware

Novamente, sem executar e tento verificar o que esta url faz. Ao abrí-la, ganho de presente este response:

12 — Response da url chamada pelo script .vbs

Novamente, para melhorar a visualização, ponho no sublime again.

13 — Terceiro script a ser executado pelo malware

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.

14 — Validação para executar o malware

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:

15 — Informações salvas pelo artefato

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.

16 — Código para o .vbs ser iniciado junto com o sitema operacional

E aqui o arquivo salvo na pasta.

17 — VBScript salvo no startup

E o código desse .vbs — que eu já até perdi a conta de tantos que vão sendo dropados rs — é o abaixo:

18 — Código do VVGQS.vbs

E esse código executa esse script:

19 — Execução de dll com rundll32.exe

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.

20 — Itens dropados e criados pelo malware

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:

21 — rundll32.exe com a dll RQWL.VVGQS

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! :)

22 — rundll32.exe properties

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);
23 — pestudio mostrando indícios de um keylogger

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.

24 — Configuração para debugar a dll

Ao longo do debugging encontro algumas strings suspeitas…

25 — Strings encontradas ao longo do debugging

Também observo que essa dll lê um dos arquivos criados…

26 — Arquivo gerado pelo malware e lido pela dll

Continuando a olhar as strings sendo decryptadas, começamos a ver informações que nos remetem à conclusão desse arquivo ser um keylogger.

27 — Suspeitas de keylogger

Conforme seguimos com a análise no IDA, descobrimos algumas outras informações que nos mostram um caminho diferente a seguir:

28 — Path do executável a ser carregado

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:

29 — Função que decrypta o executável

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:

30 — Comparativo entre os arquivo criptografado e decriptografado

Esse arquivo tem alguns problemas, mesmo estando igual ao que é carregado na memória pela primeira dll.

31 — Erro no PE file
32 — AddressOfEntryPoint inválido
33 — Mais problemas
34 — Sem nome nas seções

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:

35 — URLs encontradas na DLL

Algumas URLs sugestivas :)

36 —Strings suspeitas

Strings encontradas do GbPlugin, AppBrad, Sicoobnet que se referem ao GBuster, aplicativo do Bradesco e internet banking Sicoob.

37 — Indício de Keylogger

Outras confirmações de keylogger, com nome das teclas.

38 — Teclas capturadas

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
=======================================

--

--