Campanha de ‘Malvertising’ leva à execução do Oyster Backdoor
A Rapid7 observou uma campanha recente de malvertising que atrai usuários para baixar instaladores maliciosos para softwares populares como Google Chrome e Microsoft Teams.
Os instaladores estavam sendo usados para lançar um backdoor identificado como Oyster
, também conhecido como Broomstick
. Após a execução do backdoor, observamos comandos de enumeração indicativos de atividade manual no teclado, bem como a implantação de payloads adicionais.
Nesta postagem do blog, examinaremos os métodos de entrega do Oyster
backdoor, forneceremos uma análise aprofundada de seus componentes e ofereceremos um script Python para ajudar a extrair sua configuração ofuscada.
Visão geral
Acesso Inicial
Em três incidentes separados, o Rapid7 observou usuários baixando supostos instaladores do Microsoft Teams de sites com erros de digitação. Os usuários foram direcionados a esses sites após usar mecanismos de pesquisa como Google e Bing para downloads de software Microsoft Teams. Rapid7 observou que os sites estavam disfarçados de sites do Microsoft Teams, induzindo os usuários a acreditar que estavam baixando software legítimo quando, na realidade, estavam baixando o software malicioso do agente da ameaça.
Figura 1 – Site falso do Microsoft Teams
Em um caso, um usuário foi observado navegando para a URL hxxps://micrsoft-teams-download[.]com/
, o que levou ao download do binário MSTeamsSetup_c_l_.exe
. A análise inicial do binário MSTeamsSetup_c_l_.exe
mostrou que o binário foi atribuído por um certificado Authenticode emitido para “Shanxi Yanghua HOME Furnishings Ltd”.
Figura 2 – MSTeamsSetup_c_l_.exe
Informações do arquivo
A pesquisa no VirusTotal por outros arquivos assinados por “Shanxi Yanghua HOME Furnishings Ltd” mostrou o seguinte:
Figura 3 – Resultados da pesquisa de assinatura do VirusTotal
Os resultados indicaram outras versões do instalador, cada uma se passando por um instalador de software legítimo. Observamos que o primeiro instalador foi enviado ao VirusTotal por volta de meados de maio de 2024.
Em um incidente relacionado que ocorreu em 29 de maio de 2024, observamos outro binário se passando por um arquivo de configuração do Microsoft Teams, , TMSSetup.exe
ao qual foi atribuído um certificado válido emitido para “Shanghai Ruikang Decoration Co., Ltd”. Em 30 de maio de 2024, esse certificado foi revogado.
A análise do binário feita pelo VirusTotal MSTeamsSetup_c_l_.exe
indica que ele está associado a uma família de malware conhecida como Oyster, apelidada de Broomstick pela IBM.
O que é ostra/vassoura?
Oyster, também conhecido como Broomstick, também conhecido como CleanUpLoader, é uma família de malware identificada pela primeira vez em setembro de 2023 por pesquisadores da IBM. Embora não se saiba muito sobre o malware, ele foi entregue por meio de um carregador chamado Oyster Installer
, que se disfarçava como um instalador de navegador. O instalador era responsável por derrubar o componente backdoor, Oyster Main
. Oyster Main
era responsável por coletar informações sobre o host comprometido, manipular a comunicação com os endereços de comando e controle (C2) codificados e fornecer a capacidade de execução remota de código.
Em fevereiro, pesquisadores do Twitter observaram o mesmo componente backdoor e começaram a nomeá- Oyster Main
lo como CleanUpLoader
.
Em incidentes recentes, o Rapid7 observou Oyster Main
que o aplicativo foi entregue sem o Oyster Installer
.
Análise técnica
A análise inicial do binário MSTeamsSetup_c_l_.exe
revelou que dois binários foram armazenados na seção de recursos. Durante a execução, uma função foi observada usando FindResourceA
para localizar os binários, seguido por LoadResource
para acessá-los. Esses binários foram então descartados na pasta Temp. Observamos que os nomes pretendidos dos dois binários descartados MSTeamsSetup_c_l_.exe
eram CleanUp30.dll
e MSTeamsSetup_c_l_.exe
(o instalador legítimo do Microsoft Teams).
Após soltar o binário CleanUp30.dll
no diretório Temp, o programa executa a DLL, passando a string rundll32.exe %s,Test
para a função CreateProcessA
, onde %s
armazena o valor CleanUp30.dll
.
Figura 4 – Execução deCleanUp30.dll
Após a execução de CleanUp30.dll
, o programa prossegue para iniciar o instalador legítimo do Microsoft Teams, MSTeamsSetup_c_l_.exe
, também localizado dentro do diretório Temp. Essa tática é empregada para evitar levantar suspeitas do usuário.
Análise CleanUp30.dll
Durante a execução de CleanUp30.dll
, Rapid7 observou que o binário começa tentando criar a exclusão mútua codificada (mutex) ITrkfSaV-4c7KwdfnC-Ds165XU4C-lH6R9pk1
. A criação de mutex é frequentemente usada por programas para determinar se o programa já está executando outra instância. Se o programa já estiver em execução, o programa encerrará a nova instância.
Depois de criar o mutex, o binário determina seu caminho de execução chamando a função GetModuleFilenameA
. O valor é armazenado como uma string e utilizado como parâmetro para a criação de uma tarefa agendada, ClearMngs
. A tarefa agendada é criada usando a função ShellExecuteExW
, passando o seguinte como linha de comando:
schtasks.exe /create /tn ClearMngs /tr "rundll32 '<location of binary>\CleanUp30.dll',Test" /sc hourly /mo 3 /f
O objetivo da tarefa agendada ClearMngs
é executar o binário <location of binary>\CleanUp30.dll
com a função exportada Test
usando rundll32.exe a cada três horas.
Após a criação da tarefa agendada, o binário então prossegue para decodificar seus servidores C2 usando uma função de decodificação exclusiva. A função de decodificação começa pegando uma sequência de caracteres codificados, e seu comprimento é em bytes. A função de decodificação então prossegue para ler cada byte, começando do fim da sequência codificada.
Figura 5 – Loop de decodificação da DLL
Cada byte da string codificada é usado como um local de índice para recuperar o byte decodificado de um mapa de bytes codificado. Um mapa de bytes é uma matriz de bytes que contém 256 bytes em ordem aleatória, um para cada valor de byte possível de 1 a 256. Os autores de malware às vezes usam essa técnica para ofuscar strings e outros dados. O contador de iteração (i) usado na condição para o loop de decodificação é comparado à metade do comprimento da string codificada, pois o loop de decodificação troca dois bytes por vez. Os bytes da string codificada são decodificados e trocados começando nos bytes iniciais e finais da string e o loop de decodificação progride em direção ao centro da string a partir de cada extremidade.
O loop troca os bytes para reverter a string decodificada, já que as strings de texto simples originais armazenadas no malware foram revertidas antes da codificação. Quando o centro da string é alcançado, o processo de decodificação está completo. Devido a esse algoritmo, todas as strings codificadas passadas devem ter comprimento uniforme para evitar processamento adicional. Imediatamente após a string decodificada ser carregada na pilha, o malware recodifica a string usando um loop semelhante. O resultado final para a primeira string decodificada é uma lista delimitada por CRLF (carriage return line feed) de domínios C2.
Construímos um script Python que pode decodificar todas as strings codificadas contidas nos CleanUp.dll
binários, incluindo versões anteriores. O script Python pode ser encontrado em nosso repositório GitHub .
Figura 6 – Exemplo de saída do script Python
Usando nosso script Python, ele revelou algumas das funcionalidades do C2, juntamente com vários campos JSON que são usados para construir uma impressão digital do sistema infectado:
String codificada em hexadecimal | String decodificada |
---|---|
2ec6a676766fc6f4960e86 | api/conectar |
50b0aea6747686b64eaef69e2ec6a64e96262ea64e | supfoundrysettlers.us |
50b0b6f6c674a646a6b6f6164ea66ea64ea616ee | wherehomebe.com |
50b0ceae74ce4ea6362e2ea6ce9e4e2676aef6660eaece | retdirectyourman.eu |
76f6ce56f476f6962e86c696360e0e86045ca60e9e2ab42e76a62e76f6c2 | Tipo de conteúdo: application/json |
76f696cece65cef4960e86 | api/sessão |
a61ea67426b6c63a346ceaf2eace9eca3a | \SysWOW64\cmd.exe |
a61ea6744ccc36362676ae4e3a2c6ceaf2eace9eca3a | \SysWOW64\rundll32.exe |
d2f2 | OK |
3a0eb6a62a3a | \Temp\ |
445c442696fa267686b6b6f6c6443444 | “,”command_id”:” |
be44 | “} |
445c44649644de | {“eu ia”:” |
445c442e36aecea64e443444 | “,”resultado”:” |
445c442696fa76f696cecea6ce443444 | “,”identificação de sessão”:” |
445c44ceae2e862ece443444 | “,”status”:” |
2e1e2e740eae7686a636c63a | \limpeza.txt |
445c44a6b68676fa4e652eae0eb6f6c6443444 | “,”nome do computador”:” |
0ccc445c4476f696ce72a66efa363626443444 | “,”versão_dll”:”30 |
445c44769686b6f626443444 | “,”domínio”:” |
be44 | “} |
445c44649644de | {“eu ia”:” |
445c443686c6f636fa0e96443444 | “,”ip_local”:” |
445c44cef6443444 | “,”os”:” |
445c44263696ae46facef6443444 | “,”os_build”:” |
445c44a6e6a636656e964e0e443444 | “,”privilégio”:” |
Após o binário decodificar os endereços C2, o programa procede à impressão digital da máquina infectada, usando as seguintes funções:
Função | Descrição |
---|---|
DsRoleGetPrimaryDomainInformation | Usado para coletar informações sobre o domínio em que reside a máquina comprometida. Em particular, a função retorna o nome do domínio. |
ObterNomeUsuárioW | Fornece o nome do usuário no qual o programa está sendo executado. |
NetUserGetInfo | Fornece detalhes do usuário sob o qual o programa está sendo executado. Neste caso, o programa está consultando se o usuário é admin ou usuário. |
ObterNomeDoComputadorW | Fornece o nome da máquina comprometida na qual o binário está sendo executado. |
RtlGetVersion | Retorna informações de versão sobre o sistema operacional atualmente em execução, incluindo nome e número de versão. |
Figura 7 – Uma seleção de conteúdos do CleanUp30.dll
código que descreve a coleta de informações do sistema
Ao enumerar informações sobre o host, as informações são armazenadas nos campos JSON descobertos a partir das strings codificadas identificadas acima.
Figura 8 – Exemplo de dados coletados e enviados via HTTP POST para domínios maliciosos
As informações da impressão digital são codificadas usando o mesmo loop discutido anteriormente, onde a sequência de dados é invertida e codificada usando um mapa de bytes antes de ser enviada.
Após a informação ser codificada, ela é enviada para os domínios whereverhomebe[.]com/
, supfoundrysettlers[.]us/
, e retdirectyourman[.]eu/
via método HTTP POST. Rapid7 determinou que CleanUp30.dll
usa a biblioteca C++ de código aberto Boost.Beast para se comunicar com os domínios C2 observados via HTTP e web sockets.
Figura 9 – Tráfego de rede capturado tentando enviar solicitações POST para whereverhomebe[.]com/
e supfoundrysettlers[.]us/
após a execução deCleanUp30.dll
Atividade de acompanhamento
Em um dos incidentes observados pelo Rapid7, um script do PowerShell foi gerado após a execução de outra versão do CleanUp30.dll
. , semelhante a , foi originalmente descartado por outro instalador falso do Microsoft Teams, , que também colocou o binário no diretório AppData/Local/Temp.CleanUp.dll
CleanUp.dll
CleanUp30.dll
TMSSetup.exe
Figura 10 – Comando do PowerShell criando arquivo .lnkDiskCleanUp.lnk
O objetivo do script do PowerShell era criar um arquivo LNK de atalho nomeado DiskCleanUp.lnk
em C:\Users\<User>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
. Ao fazer isso, isso garantiu que o arquivo LNK DiskCleanUp.lnk
seria executado toda vez que o usuário efetuasse login. O atalho do arquivo LNK era responsável por executar o binário CleanUp.dll
usando rundll32.exe, passando o export Test
.
Após a execução do script do PowerShell, o Rapid7 observou a execução de cargas adicionais:
- k1.ps1
- main.dll
- getresult.exe
Infelizmente, durante o incidente, não conseguimos adquirir as cargas adicionais. Durante os incidentes, Rapid7 também observou a execução dos seguintes comandos de enumeração:
Enumeração | Descrição |
---|---|
Informação do sistema | Fornece informações sobre a configuração de software e hardware do sistema |
arp -a | Mostra uma lista de todos os endereços IP com os quais o computador local interagiu recentemente, juntamente com seus endereços MAC correspondentes |
grupo net ‘computadores de domínio’ /domínio | Lista o grupo “Computadores de Domínio” em um domínio do Active Directory |
“C:\Windows\system32\nslookup.exe” myip.opendns.com resolve1.opendns.com | Determina o endereço IP externo |
whoami /todos | Fornece informações detalhadas sobre o usuário atual, incluindo privilégios do usuário, associações de grupo e identificadores de segurança (SIDs) |
nltest /dclist:<nome_do_domínio> | Lista todos os controladores de domínio (DCs) para um domínio específico |
administrador de usuário da rede | Fornece informações detalhadas sobre o usuário ‘admin’, incluindo informações de perfil, associações de grupo, associações de grupo local, etc. |
consulta reg HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall /s | Consulta o registro para encontrar informações sobre o software instalado |
findstr “Nome de exibição” | Usado para filtrar informações, mostrando apenas itens contidos em “DisplayName” |
Abaixo está uma lista não exaustiva de detecções que são implantadas e alertarão sobre o comportamento relacionado a esta campanha de malware:
- Persistência – SchTasks Criando uma tarefa apontada para o diretório temporário ou itinerante dos usuários
- Processo suspeito: RunDLL32 iniciando CMD ou PowerShell
- Persistência – Schtasks.exe Criando tarefa que executa RunDLL32
- Descoberta de rede – Nltest enumera controladores de domínio
- Técnica de Atacante – Determinando IP Externo Via Linha de Comando
- Processo suspeito – .lnk na linha de comando do PowerShell
Técnicas MITRE ATT&CK
Tática | Técnica | Descrição |
---|---|---|
Desenvolvimento de Recursos | Adquirir Infraestrutura: Domínios (T1583.001) | O Threat Actor configurou o domínio com erro de digitação micrsoft-teams-download[.]com para auxiliar na entrega do executável MSTeamsSetup_c_l_.exe |
Execução | Intérprete de comandos e scripts: Powershell (T1059.001) | Usado para criar o arquivo .lnk DiskCleanUp.lnk e executar a carga útil do PowerShell k1.ps1 |
Execução | Execução do usuário: arquivo malicioso (T1204.002) | O usuário executa o binário MSTeamsSetup_c_l_.exe |
Persistência | Tarefa agendada (T1053.005) | CleanUp30.DLL e CleanUp.DLL criam tarefa agendada ClearMngs |
Evasão de Defesa | Mascaramento: Corresponder ao nome ou local legítimo (T1036.005) | MSTeamsSetup_c_l_.exe se disfarça como instalador legítimo do Microsoft Teams |
Evasão de Defesa | Evasão de Virtualização/Sandbox: Evasão Baseada em Tempo (T1497.003) | Os atrasos na execução são realizados em vários estágios ao longo do fluxo de ataque |
Coleção | Dados do Sistema Local (T1005) | Os agentes de ameaças enumeraram informações sobre hosts comprometidos usando as DLLs do backdoor CleanUp |
Comando e controle | Codificação de dados – codificação não padrão (T1132.002) | CleanUp DLL envia dados codificados para C2 usando função de codificação exclusiva |
COIs
COI | Cerquilha | Descrição |
---|---|---|
TMSSetup.exe | 9601f3921c2cd270b6da0ba265c06bae94fd7d4dc512e8cb82718eaa24accc43 | O executável malicioso baixado de prodfindfeatures[.]com/ |
MSTeamsSetup_c_l_.exe | 574C70E84ECDAD901385A1EBF38F2EE74C446034E97C33949B52F3A2FDDCD822 | O executável malicioso baixado de prodfindfeatures[.]com/ |
CleanUp30.dll | CFC2FE7236DA1609B0DB1B2981CA318BFD5FBBB65C945B5F26DF26D9F948CBB4 | O arquivo .dll executado por run32dll.exe após a execução de MSTeamsSetup_c_l_.exe |
CleanUp.dll | 82B246D8E6FFBA1ABAFFBD386470C45CEF8383AD19394C7C0622C9E62128CB94 | O arquivo .dll executado por run32dll.exe após a execução de TMSSetup.exe |
DiskCleanUp.lnk | Um arquivo .lnk que foi criado após a execução de CleanUp30.dll | |
prodfindfeatures[.]com/ | – | O domínio que hospeda os arquivos maliciosos TMSSetup (1).exe e MSTeamsSetup_c_l_.exe |
micrsoft-teams-download[.]com/ | – | O domínio ocupado por erros de digitação que os usuários visitaram |
impresoralaser[.]pro/ | – | Parte da cadeia de redirecionamento de domínio para downloads de TMSSetup (1).exe e MSTeamsSetup_c_l_.exe |
onde quer que seja[.]com/ | – | Domínio com o qual CleanUp30.dll e CleanUp.dll tentam se comunicar |
supfoundrysettlers[.]nós/ | – | Domínio com o qual CleanUp30.dll e CleanUp.dll tentam se comunicar |
retdirectyourman[.]eu/ | – | Domínio com o qual CleanUp30.dll e CleanUp.dll tentam se comunicar |
149.248.79[.]62 | – | Resolvendo IP para wherehomebe[.]com/ |
64.95.10[.]243 | – | Resolvendo IP para colonos supfoundry[.]us/ |
206.166.251[.]114 | – | Resolvendo IP para retdirectyourman[.]eu/ |
Referências
Artigo | URL |
---|---|
Perfil de malware de vassoura | https://exchange.xforce.ibmcloud.com/malware-análise/guid:08822f57c12416bc3e74997c473d1889 |
Menção do Twitter ao CleanUpLoader | https://x.com/RussianPanda9xx/status/1757932257765945478 |