Pesquisadores da ESET descobriram uma nova campanha do grupo APT Lazarus, chamada Operation DreamJob, direcionada a usuários do Linux. A Operation DreamJob é o nome de uma série de campanhas nas quais o grupo utiliza técnicas de engenharia social para comprometer seus alvos por meio de ofertas de emprego falsas que são usadas como isca. Neste caso, conseguimos reconstruir toda a cadeia, desde o arquivo ZIP que fornece uma oferta de emprego falsa do HSBC como isca até o payload final: o backdoor para Linux SimplexTea distribuído por meio de uma conta de armazenamento em nuvem do OpenDrive. Até onde sabemos, esta é a primeira referência pública a esse importante grupo criminoso alinhado à Coreia do Norte utilizando o malware para Linux como parte dessa operação.
Além disso, essa descoberta nos ajudou a confirmar, com um alto nível de confiança, que o recente ataque à cadeia de suprimentos da 3CX foi de fato realizado pelo grupo Lazarus, uma ligação da qual se suspeitava desde o início e que, desde então, foi comprovada por vários pesquisadores de segurança. Nesta publicação, confirmamos essas descobertas e fornecemos evidências adicionais que comprovam a conexão entre o Lazarus e o ataque à cadeia de suprimentos da 3CX.
Ataque à cadeia de suprimentos que afetou a 3CX
A 3CX é uma desenvolvedora e distribuidora de software VoIP que fornece serviços de sistema telefônico para muitas empresas internacionalmente. De acordo com o site da desenvolvedora, a 3CX tem mais de 600 mil clientes e 12 milhões de usuários em vários setores, incluindo aeroespacial, saúde e hotelaria. A 3CX fornece software cliente para usar seus sistemas por meio de um navegador web, aplicativo mobile ou de desktop. No final de março de 2023, descobriu-se que o aplicativo de desktop para Windows e macOS continha código malicioso que permitia que um grupo de invasores baixasse e executasse código arbitrário em todas as máquinas em que o aplicativo estivesse instalado. Foi rapidamente determinado que esse código malicioso não foi adicionado pela 3CX, mas que a desenvolvedora estava comprometida e que seu software foi usado em um ataque à cadeia de suprimentos conduzido por agentes de ameaças externas para distribuir malware adicional a clientes específicos da 3CX.
Esse incidente de segurança tem sido bastante noticiado pela imprensa internacional. Inicialmente relatado em 29 de março de 2023 em um tópico do Reddit por um engenheiro da CrowdStrike, foi seguido por um relatório oficial da CrowdStrike afirmando com um alto grau de confiança que LABIRINTH CHOLLIMA, o codinome da empresa para Lazarus, estava por trás do ataque (mas omitindo qualquer evidência para apoiar a afirmação). Devido à gravidade do incidente, várias empresas de segurança começaram a contribuir com seus respectivos resumos dos eventos, incluindo Sophos, Check Point, Broadcom, Trend Micro e outras.
Além disso, a parte do ataque que afetou os sistemas que executam o macOS foi abordada em detalhes em um tópico do Twitter e em uma publicação de Patrick Wardle.
Cronologia dos acontecimentos
A cronologia mostra que os criminosos planejaram os ataques muito antes da execução - em dezembro de 2022. Isso sugere que eles já tinham um pé dentro da rede da 3CX desde o final do ano passado.
Embora o aplicativo macOS trojanizado da 3CX mostre que foi assinado no final de janeiro, foi somente em 14 de fevereiro de 2023 que vimos o aplicativo malicioso em nossa telemetria. Não está claro se a atualização maliciosa do macOS foi distribuída antes dessa data.
Embora a telemetria da ESET mostre a existência do payload de segundo estágio do macOS já em fevereiro, não tínhamos uma amostra ou metadados que nos alertassem sobre a atividade maliciosa da ameaça. Incluímos estas informações para ajudar os profissionais de segurança a determinar até que ponto os sistemas anteriores podem ter sido comprometidos.
Vários dias antes de o ataque ser revelado publicamente, uma amostra de um misterioso downloader para Linux foi carregada no VirusTotal. Este downloader baixa um novo payload malicioso do Lazarus para Linux. Explicamos sua relação com o ataque mais adiante neste post.
Atribuição do ataque à cadeia de suprimentos da 3CX ao grupo Lazarus
O que foi publicado até o momento
Há um domínio que desempenha um papel significativo em nossa atribuição: journalide[.]org. Ele é mencionado em alguns dos relatórios de outros fornecedores mencionados acima, mas sua presença nunca é explicada. É interessante notar que os artigos da SentinelOne e da ObjectiveSee não mencionam esse domínio. Tampouco uma publicação da Volexity, que até se absteve de fornecer atribuição, afirmando que "a Volexity atualmente não consegue vincular a atividade divulgada a nenhum atacante". Os analistas das Volexity estavam entre os primeiros a investigar o ataque em profundidade e criaram uma ferramenta para extrair uma lista de servidores C&C de ícones criptografados no GitHub. Esta ferramenta é útil porque os atacantes não incorporaram os servidores de C&C diretamente nos estágios intermediários, mas usaram o GitHub como um resolvedor de dead-drop. Os estágios intermediários são downloaders para Windows e macOS que chamamos de IconicLoaders, e os payloads que eles obtêm como IconicStealer e UpdateAgent, respectivamente.
Em 30 de março, Joe Desimone, um pesquisador de segurança da Elastic Security, foi um dos primeiros a fornecer, por meio de uma publicação no Twitter, pistas substanciais de que os ataques à 3CX provavelmente estão relacionados ao grupo Lazarus. Desimone observou que um trecho de shellcode adicionado ao payload do d3dcompiler_47.dll é semelhante a trechos do carregador AppleJeus atribuído ao Lazarus pela CISA em abril de 2021.
Em 31 de março, houve o relato que a 3CX havia contratado a Mandiant para fornecer serviços de resposta a incidentes relacionados ao ataque à cadeia de suprimentos.
Em 3 de abril, a Kaspersky, por meio de sua telemetria, mostrou uma ligação direta entre as vítimas do ataque à cadeia de suprimentos da 3CX e a implantação de um backdoor chamado Gopuram, e apontou para payloads comuns com o mesmo nome: guard64.dll. Os dados da Kaspersky mostram que o Gopuram está conectado ao Lazarus porque coexistiu nas máquinas das vítimas ao lado do AppleJeus, um malware que já foi atribuído ao Lazarus. Tanto o Gopuram quanto o AppleJeus foram observados em ataques contra uma empresa de criptomoedas.
Em 11 de abril, o CISO da 3CX resumiu as descobertas de um relatório provisório produzido pela Mandiant em uma publicação. De acordo com este relatório, duas amostras de malware do Windows, um loader de shellcode chamado TAXHAUL e um downloader complexo chamado COLDCAT, estavam envolvidos no comprometimento da 3CX. Não foram fornecidos hashes, mas a regra YARA da Mandiant, chamada TAXHAUL, também está ativada em outras amostras já encontradas no VirusTotal:
- SHA-1: 2ACC6F1D4656978F4D503929B8C804530D7E7CF6 (ualapi.dll),
- SHA-1: DCEF83D8EE080B54DC54759C59F955E73D67AA65 (wlbsctrl.dll)
Os nomes de arquivo, mas não os MD5s, dessas amostras correspondem aos do artigo da Kaspersky. No entanto, a 3CX afirma explicitamente que o COLDCAT é diferente do Gopuram.
A seção a seguir contém uma descrição técnica do novo payload malicioso do Lazarus para Linux que analisamos recentemente e uma explicação de como ele nos ajudou a reafirmar essa conexão entre o Lazarus e o ataque 3CX.
Operation do DreamJob com um payload do Linux
A Operation DreamJob do grupo Lazarus envolve alcançar seus alvos por meio do LinkedIn e atraí-los com ofertas de emprego direcionadas a líderes de determinados setores. O nome da operação foi sugerido pela ClearSky em um artigo publicado em agosto de 2020. Este artigo descreve uma campanha de ciberespionagem do Lazarus direcionada a empresas de defesa e aeroespaciais. A atividade se sobrepõe ao que a ESET chamou de Operation In(ter)ception, que foi a análise de uma série de ataques de ciberespionagem que estão em andamento desde pelo menos setembro de 2019, visando empresas aeroespaciais, militares e de defesa e utilizando ferramentas maliciosas específicas, inicialmente apenas para o Windows. Durante julho e agosto de 2022, encontramos duas instâncias da Operação In(ter)ception direcionadas ao macOS. Uma amostra de malware foi enviada ao VirusTotal do Brasil, e outro ataque teve como alvo um usuário das soluções da ESET na Argentina. Há algumas semanas, um payload nativo do Linux foi encontrado no VirusTotal junto com um documento em formato PDF que se fazia passar pelo HSBC foi utilizado como isca. Isso completa a capacidade do Lazarus de comprometer todos os principais sistemas operacionais de desktop.
Em 20 de março, um usuário da Geórgia fez o upload de um arquivo ZIP chamado HSBC job offer.pdf.zip para o VirusTotal. Considerando outras campanhas do Lazarus que usam ofertas de emprego falsas, é provável que esse payload tenha sido distribuído por meio de spearphishing ou mensagens diretas no LinkedIn. O arquivo contém um único arquivo: um binário nativo da Intel de 64 bits escrito em Go e denominado HSBC job offer․pdf, que em português seria "HSBC oferta de emprego.pdf".
É interessante notar que a extensão do arquivo não é .pdf. Isso ocorre porque o caractere de ponto no nome do arquivo é um líder de ponto representado pelo caractere Unicode U+2024. O uso do caractere líder de ponto no nome do arquivo foi provavelmente uma tentativa de enganar o gerenciador de arquivos para que tratasse o arquivo como um executável em vez de um PDF. Isso poderia fazer com que o arquivo fosse executado quando clicado duas vezes, em vez de ser aberto com um visualizador de PDF. Quando executado, é mostrado ao usuário um documento PDF falso usando o xdg-open, que abrirá o documento usando o leitor de PDF preferido do usuário (consulte a figura 3). Decidimos chamar esse downloader de ELF OdicLoader, pois ele tem uma função semelhante à dos IconicLoaders em outras plataformas e o payload é obtido do OpenDrive.
O OdicLoader droppea um documento PDF falso que abre usando o visualizador de PDF padrão do sistema (veja a Figura 2) e, em seguida, baixa um backdoor de segundo estágio do serviço em nuvem OpenDrive. O arquivo baixado é armazenado no ~/.config/guiconfigd (SHA-1: 0CA1723AFE261CD85B05C9EF424FC50290DCE7DF). Chamamos este backdoor de segundo estágio de SimplexTea.
Como última etapa de sua execução, o OdicLoader modifica ~/.bash_profile e, assim, o SimplexTea é iniciado com o Bash e sua saída é silenciada (~/.config/guiconfigd >/dev/null 2>&1).
O SimplexTea é um backdoor para Linux escrito em C++. Conforme destacado na Tabela 1, seus nomes de classe são muito semelhantes aos nomes de função encontrados em uma amostra, com o nome de arquivo "sysnetd", enviada ao VirusTotal da Romênia (SHA-1: F6760FB1F8B019AF2304EA6410001B63A1809F1D). Devido às semelhanças nos nomes de classes e funções entre o SimplexTea e o sysnetd, acreditamos que o SimplexTea seja uma versão atualizada, reescrita de C para C++.
Tabela 1. Comparação dos nomes dos símbolos originais de dois backdoors para Linux que foram carregados no VirusTotal.
guiconfigd |
sysnetd |
---|---|
CMsgCmd::Start(void) | MSG_Cmd |
CMsgSecureDel::Start(void) | MSG_Del |
CMsgDir::Start(void) | MSG_Dir |
CMsgDown::Start(void) | MSG_Down |
CMsgExit::Start(void) | MSG_Exit |
CMsgReadConfig::Start(void) | MSG_ReadConfig |
CMsgRun::Start(void) | MSG_Run |
CMsgSetPath::Start(void) | MSG_SetPath |
CMsgSleep::Start(void) | MSG_Sleep |
CMsgTest::Start(void) | MSG_Test |
CMsgUp::Start(void) | MSG_Up |
CMsgWriteConfig::Start(void) | MSG_WriteConfig |
MSG_GetComInfo | |
CMsgHibernate::Start(void) | |
CMsgKeepCon::Start(void) | |
CMsgZipDown::Start(void) | |
CMsgZip::StartZip(void *) | |
CMsgZip::Start(void) | |
CHttpWrapper::RecvData(uchar *&,uint *,uint,signed char) | |
RecvMsg | |
CHttpWrapper::SendMsg(_MSG_STRUCT *) | SendMsg |
CHttpWrapper::SendData(uchar *,uint,uint) | |
CHttpWrapper::SendMsg(uint,uint,uchar *,uint,uint) | |
CHttpWrapper::SendLoginData(uchar *,uint,uchar *&,uint *) |
Qual é a relação do sysnetd com o Lazarus? A seção a seguir mostra semelhanças com o backdoor do Windows Lazarus chamado BADCALL.
BADCALL para Linux
Atribuímos o sysnetd ao Lazarus por causa de suas semelhanças com os dois arquivos a seguir (e acreditamos que o sysnetd é uma variante do Linux do backdoor do Windows do Lazarus chamado BADCALL):
- O P2P_DLL.dll (SHA-1: 65122E5129FC74D6B5EBAFCC3376ABAE0145BC14) mostra semelhanças de código com o sysnetd na forma de domínios usados como fachada para uma conexão TLS falsa (veja a Figura 4). A CISA o atribuiu ao Lazarus em dezembro de 2017. A partir de setembro de 2019, a CISA começou a chamar as versões mais recentes desse malware de BADCALL (SHA-1: D288766FA268BC2534F85FD06A5D52264E646C47).
- O prtspool (SHA-1: 58B0516D28BD7218B1908FB266B8FE7582E22A5F) apresenta semelhanças de código com o sysnetd (veja a Figura 5). Ele foi atribuído ao Lazarus pela CISA em fevereiro de 2021. Observa-se também que o SIMPLESEA, um backdoor do macOS descoberto durante a resposta ao incidente à 3CX, implementa a criptografia de fluxo A5/1.
Esta versão do backdoor BADCALL para Linux, o sysnetd, carrega sua configuração a partir de um arquivo chamado /tmp/vgauthsvclog. Como os operadores do Lazarus já disfarçaram seus payloads, o uso desse nome, que é usado pelo serviço de autenticação de convidado do VMware, sugere que o sistema de destino pode ser uma máquina virtual VMware do Linux. É interessante observar que a chave XOR neste caso é a mesma usada no SIMPLESEA da pesquisa da 3CX.
Observando os três números inteiros de 32 bits, 0xC2B45678, 0x90ABCDEF e 0xFE268455 na Figura 5, que representam uma chave para uma implementação personalizada da criptografia A5/1, notamos que o mesmo algoritmo e chaves idênticas foram usados em um malware do Windows datado do final de 2014 que estava envolvido em um dos casos mais notórios do Lazarus: a sabotagem cibernética da Sony Pictures Entertainment (SHA-1: 1C66E67A8531E3FF1C64AE57E6EDFDE7BEF2352D).
Pontos adicionais para a atribuição
Para resumir o que mencionamos até agora, atribuímos o ataque à cadeia de suprimentos da 3CX ao grupo Lazarus com um alto nível de confiança. Isso se baseia nos seguintes fatores:
- Malware (o conjunto de intrusões):
- O IconicLoader (samcli.dll) usa o mesmo tipo de criptografia forte - AES-GCM - que o SimplexTea (cuja atribuição ao Lazarus foi estabelecida por semelhança com o BALLCALL para Linux); somente as chaves e a inicialização do vetor diferem.
- Com base nos cabeçalhos do PE Rich, tanto o IconicLoader (samcli.dll) quanto o IconicStealer (sechost.dll) são projetos de tamanho semelhante e compilados no mesmo ambiente do Visual Studio que o iertutil. dll (SHA-1: 5B03294B72C0CAA5FB20E7817002C600645EB475) e iertutil.dll (SHA-1: 7491BD61ED15298CE5EE5FFD01C8C82A2CDB40EC) relatados nas campanhas de criptomoedas do Lazarus da Volexity e da Microsoft. Incluímos abaixo a regra YARA RichHeaders_Lazarus_NukeSped_IconicPayloads_3CX_Q12023, que relata todas essas amostras e nenhum arquivo malicioso ou limpo não relacionado, conforme testado nos bancos de dados atuais da ESET e nas amostras recentemente enviadas ao VirusTotal.
- O payload do SimplexTea carrega sua configuração de maneira muito semelhante à do malware SIMPLESEA, de acordo com a resposta oficial do incidente à 3CX. A chave XOR é diferente (0x5E vs. 0x7E), mas a configuração tem o mesmo nome: apdl.cf (veja a Figura 8).
- Infraestrutura:
- Há uma infraestrutura de rede compartilhada com o SimplexTea, pois ele usa https://journalide[.]org/djour.php como seu C&C, cujo domínio foi relatado nos resultados oficiais fornecidos pela resposta da Mandiant ao incidente da 3CX.
Conclusão
O ataque à cadeia de suprimentos da 3CX atraiu muita atenção da comunidade de segurança desde sua divulgação em 29 de março. O software comprometido, implantado em várias infraestruturas de TI, permite o download e a execução de qualquer tipo de payload, portanto, o impacto de um ataque desse tipo pode ser devastador. Infelizmente, nenhum fornecedor de software está imune a ser comprometido e a distribuir inadvertidamente versões trojanizadas de seus aplicativos.
A natureza sigilosa de um ataque à cadeia de suprimentos torna esse método de distribuição de malware muito atraente para o atacante. O Lazarus já usou esta técnica no passado. Por exemplo, em uma campanha direcionada a usuários do software WIZVERA VeraPort na Coreia do Sul em 2020. As semelhanças com outras peças conhecidas de malware que fazem parte do kit de ferramentas utilizado pelo Lazarus, além das técnicas típicas do grupo, sugerem fortemente que o recente comprometimento da 3CX também é obra do grupo Lazarus.
Também é interessante observar que o Lazarus pode produzir e utilizar malware para atacar todos os principais sistemas operacionais de desktop: Windows, macOS e Linux. Os sistemas Windows e macOS foram atacados durante o incidente da 3CX por meio de versões trojanizadas do software VoIP da 3CX para ambos os sistemas operacionais, o que permitiu que os atacantes obtivessem payloads arbitrários. No caso da 3CX, existem versões de malware de segundo nível para Windows e macOS. Este artigo demonstra a existência de um backdoor para Linux que corresponde ao malware SIMPLESEA para macOS visto no incidente da 3CX. Chamamos esse componente do Linux de SimplexTea e mostramos que ele faz parte da Operation DreamJob, a principal campanha do Lazarus, que se caracteriza por utilizar ofertas de emprego para atrair e comprometer vítimas distraídas.
Se tiver alguma dúvida sobre a pesquisa publicada no WeLiveSecurity, entre em contato conosco pelo e-mail threatintel@eset.com.
IoCs
Arquivos
SHA-1 | Filename | ESET detection name | Description |
---|---|---|---|
0CA1723AFE261CD85B05C9EF424FC50290DCE7DF | guiconfigd | Linux/NukeSped.E | |
3A63477A078CE10E53DFB5639E35D74F93CEFA81 | HSBC_job_offer․pdf | Linux/NukeSped.E | OdicLoader, a 64-bit downloader for Linux, written in Go. |
9D8BADE2030C93D0A010AA57B90915EB7D99EC82 | HSBC_job_offer.pdf.zip | Linux/NukeSped.E | A ZIP archive with a Linux payload, from VirusTotal. |
F6760FB1F8B019AF2304EA6410001B63A1809F1D | sysnetd | Linux/NukeSped.G | BADCALL for Linux. |
Rede
IP address | Domain | Hosting provider | First seen | Details |
---|---|---|---|---|
23.254.211[.]230 | N/A | Hostwinds LLC. | N/A | C&C server for BADCALL for Linux |
38.108.185[.]79 38.108.185[.]115 |
od[.]lk | Cogent Communications | Remote OpenDrive storage containing SimplexTea (/d/NTJfMzg4MDE1NzJf/vxmedia) | |
172.93.201[.]88 | journalide[.]org | Nexeon Technologies, Inc. | C&C server for SimplexTea (/djour.php) |
Técnicas de MITRE ATT&CK
Tactic | ID | Name | Description |
---|---|---|---|
Reconnaissance | T1593.001 | Search Open Websites/Domains: Social Media | Lazarus attackers probably approached a target with a fake HSBC-themed job offer that would fit the target’s interest. This has been done mostly via LinkedIn in the past. |
Resource Development | T1584.001 | Acquire Infrastructure: Domains | Unlike many previous cases of compromised C&Cs used in Operation DreamJob, Lazarus operators registered their own domain for the Linux target. |
T1587.001 | Develop Capabilities: Malware | Custom tools from the attack are very likely developed by the attackers. | |
T1585.003 | Establish Accounts: Cloud Accounts | The attackers hosted the final stage on the cloud service OpenDrive. | |
T1608.001 | Stage Capabilities: Upload Malware | The attackers hosted the final stage on the cloud service OpenDrive. | |
Execution | T1204.002 | User Execution: Malicious File | OdicLoader masquerades as a PDF file in order to fool the target. |
Initial Access | T1566.002 | Phishing: Spearphishing Link | The target likely received a link to third-party remote storage with a malicious ZIP archive, which was later submitted to VirusTotal. |
Persistence | T1546.004 | Event Triggered Execution: Unix Shell Configuration Modification | OdicLoader modifies the victim’s Bash profile, so SimplexTea is launched each time Bash is stared and its output is muted. |
Defense Evasion | T1134.002 | Access Token Manipulation: Create Process with Token | SimplexTea can create a new process, if instructed by its C&C server. |
T1140 | Deobfuscate/Decode Files or Information | SimplexTea stores its configuration in an encrypted apdl.cf. | |
T1027.009 | Obfuscated Files or Information: Embedded Payloads | The droppers of all malicious chains contain an embedded data array with an additional stage. | |
T1562.003 | Impair Defenses: Impair Command History Logging | OdicLoader modifies the victim’s Bash profile, so the output and error messages from SimplexTea are muted. SimplexTea executes new processes with the same technique. | |
T1070.004 | Indicator Removal: File Deletion | SimplexTea has the ability to delete files securely. | |
T1497.003 | Virtualization/Sandbox Evasion: Time Based Evasion | SimplexTea implements multiple custom sleep delays in its execution. | |
Discovery | T1083 | File and Directory Discovery | SimplexTea can list the directory content together with their names, sizes, and timestamps (mimicking the ls -la command). |
Command and Control | T1071.001 | Application Layer Protocol: Web Protocols | SimplexTea can use HTTP and HTTPS for communication with its C&C server, using a statically linked Curl library. |
T1573.001 | Encrypted Channel: Symmetric Cryptography | SimplexTea encrypts C&C traffic using the AES-GCM algorithm. | |
T1132.001 | Data Encoding: Standard Encoding | SimplexTea encodes C&C traffic using base64. | |
T1090 | Proxy | SimplexTea can utilize a proxy for communications. | |
Exfiltration | T1041 | Exfiltration Over C2 Channel | SimplexTea can exfiltrate data as ZIP archives to its C&C server. |
Apêndice
Essa regra YARA notifica o cluster que contém o IconicLoader e o IconicStealer, bem como as cargas úteis implantadas nas campanhas direcionadas a criptomoedas que ocorreram em dezembro de 2022.
/*
The following rule will only work with YARA version >= 3.11.0
*/
import "pe"
rule RichHeaders_Lazarus_NukeSped_IconicPayloads_3CX_Q12023
{
meta:
description = " Rich Headers-based rule covering the IconicLoader and IconicStealer from the 3CX supply chain incident, and also payloads from the cryptocurrency campaigns from 2022-12"
author = "ESET Research"
date = "2023-03-31"
hash = "3B88CDA62CDD918B62EF5AA8C5A73A46F176D18B"
hash = "CAD1120D91B812ACAFEF7175F949DD1B09C6C21A"
hash = "5B03294B72C0CAA5FB20E7817002C600645EB475"
hash = "7491BD61ED15298CE5EE5FFD01C8C82A2CDB40EC"
condition:
pe.rich_signature.toolid(259, 30818) == 9 and
pe.rich_signature.toolid(256, 31329) == 1 and
pe.rich_signature.toolid(261, 30818) >= 30 and pe.rich_signature.toolid(261, 30818) <= 38 and
pe.rich_signature.toolid(261, 29395) >= 134 and pe.rich_signature.toolid(261, 29395) <= 164 and
pe.rich_signature.toolid(257, 29395) >= 6 and pe.rich_signature.toolid(257, 29395) <= 14
}