Campanha Safari da Coreia do Norte Entrega RATs
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
O artigo descreve um novo framework de malware para macOS chamado Mach-O Man que tem sido associado à famosa unidade Chollima do Grupo Lazarus. O malware é distribuído através de contas de Telegram comprometidas e convites para reuniões falsas que persuadem as vítimas a executar um comando ClickFix em seus dispositivos. O kit de ferramentas inclui vários binários Mach-O projetados para coletar detalhes do host, manter a persistência e roubar credenciais e dados do navegador, com exfiltração ocorrendo via Telegram. A campanha parece focar em exchanges de criptomoedas e outras organizações no setor financeiro.
Investigação
Pesquisadores identificaram um binário de preparação chamado teamsSDK.bin que foi baixado e executado através de uma sequência de comandos maliciosa. Componentes adicionais, incluindo D1yCPUyk.bin, minst2.bin, e macrasv2, foram então usados para enumerar o sistema, criar um LaunchAgent para persistência, e coletar extensões de navegador, dados do keychain e cookies. A comunicação de comando e controle dependia de um servidor HTTP baseado em Go que expunha um endpoint /info não autenticado e vazava um token da API Bot do Telegram. Investigadores também encontraram serviços de acesso remoto como RDP, WinRM e Chrome Remote Desktop expostos no host C2.
Mitigação
Os usuários devem evitar interagir com links de reuniões não solicitadas e confirmar a legitimidade de quaisquer comandos de terminal sugeridos durante conversas inesperadas. Organizações devem monitorar quanto a LaunchAgents não autorizados, exigir assinatura de código de confiança para binários macOS, e restringir a execução de arquivos desconhecidos. As defesas de rede devem bloquear conexões de saída para servidores HTTP suspeitos baseados em Go e sinalizar tráfego usando o Go-http-client user agent. Tokens de bot do Telegram devem ser protegidos contra exposição, e serviços de desktop remoto devem ser bloqueados com controles de acesso de menor privilégio.
Resposta
Equipes de segurança devem detectar a execução de arquivos .bin desconhecidos e monitorar a criação de LaunchAgents chamados com.onedrive.launcher. Alertas também devem ser acionados em conexões de saída para infraestruturas suspeitas usando o Go-http-client user agent, bem como em solicitações POST repetidas para /info endpoints. Defensores devem observar atividade inesperada da API do Telegram ligada a tokens de bot desconhecidos. Devem ser realizadas análises forenses completas do host para identificar e remover todos os binários maliciosos, seguidos de redefinição de credenciais para quaisquer contas que possam ter sido comprometidas.
"graph TB %% Class Definitions Section classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ffcc99 classDef process fill:#e6ffe6 classDef file fill:#ffe6cc classDef service fill:#e6e6ff %% Node Definitions initial_access_user_execution["<b>Ação</b> – <b>T1204.001 Execução do Usuário</b><br/>A vítima clica em um link malicioso de “correção” em uma reunião do Telegram que executa um comando curl"] class initial_access_user_execution action tool_curl["<b>Ferramenta</b> – <b>Nome</b>: curl<br/><b>Descrição</b>: utilitário de linha de comando para transferir dados de ou para um servidor"] class tool_curl tool file_teamsSDK_bin["<b>Arquivo</b> – <b>Nome</b>: teamsSDK.bin (Mach-O)<br/><b>Descrição</b>: Binário de preparação baixado e executado"] class file_teamsSDK_bin file process_curl_download["<b>Processo</b> – download e execução de curl teamsSDK.bin"] class process_curl_download process malware_teamsSDK["<b>Malware</b> – <b>Nome</b>: teamsSDK<br/><b>Descrição</b>: contata C2 após execução"] class malware_teamsSDK malware service_go_http["<b>Serviço</b> – Servidor HTTP baseado em Go<br/><b>Porta</b>: 80/443<br/><b>Endpoint</b>: /info (não autenticado)"] class service_go_http service process_c2_communication["<b>Processo</b> – Comunica-se com C2 via HTTP POST para /info"] class process_c2_communication process file_minst2_bin["<b>Arquivo</b> – <b>Nome</b>: minst2.bin"] class file_minst2_bin file process_install_launchagent["<b>Processo</b> – Instala plist do LaunchAgent para persistência"] class process_install_launchagent process malware_fake_onedrive["<b>Malware</b> – Binário falso “OneDrive” lançado no login"] class malware_fake_onedrive malware tool_macrasv2["<b>Ferramenta</b> – <b>Nome</b>: macrasv2<br/><b>Descrição</b>: extrai entradas do Keychain, senhas do navegador, cookies, extensões"] class tool_macrasv2 tool process_keychain_extraction["<b>Processo</b> – Extrai dados do Keychain e do navegador do macOS"] class process_keychain_extraction process action_discovery_system_info["<b>Ação</b> – <b>T1082 Descoberta de Informações do Sistema</b><br/>Coleta ID da CPU, nome do host, usuário, aplicativos instalados"] class action_discovery_system_info action action_discovery_software["<b>Ação</b> – <b>T1518 Descoberta de Software</b><br/>Enumera navegadores e extensões instalados"] class action_discovery_software action service_telegram_bot["<b>Serviço</b> – API de Bot do Telegram<br/><b>Propósito</b>: Receber credenciais exfiltradas"] class service_telegram_bot service process_exfiltration["<b>Processo</b> – Envia dados coletados para o bot do Telegram"] class process_exfiltration process action_content_injection["<b>Ação</b> – <b>T1659 Injeção de Conteúdo</b><br/>Endpoint /info não autenticado permite upload de arquivo arbitrário"] class action_content_injection action action_dynamic_resolution["<b>Ação</b> – <b>T1568 Resolução Dinâmica</b><br/>Resolve domínio C2 em tempo de execução"] class action_dynamic_resolution action %% Connections initial_access_user_execution –>|usa| tool_curl tool_curl –>|baixa| file_teamsSDK_bin file_teamsSDK_bin –>|executado por| process_curl_download process_curl_download –>|executa| malware_teamsSDK malware_teamsSDK –>|comunica-se com| service_go_http service_go_http –>|recebe dados via| process_c2_communication process_c2_communication –>|aciona| file_minst2_bin file_minst2_bin –>|instala| process_install_launchagent process_install_launchagent –>|cria| malware_fake_onedrive malware_fake_onedrive –>|executa no login| action_discovery_system_info action_discovery_system_info –>|leva a| action_discovery_software action_discovery_software –>|fornece dados para| tool_macrasv2 tool_macrasv2 –>|executa| process_keychain_extraction process_keychain_extraction –>|dá dados para| process_exfiltration process_exfiltration –>|envia para| service_telegram_bot malware_teamsSDK –>|habilita| action_content_injection action_content_injection –>|permite| file_minst2_bin malware_teamsSDK –>|habilita| action_dynamic_resolution action_dynamic_resolution –>|resolve| service_go_http "
Fluxo de Ataque
Detecções
Modificação Suspeita de Permissões de Arquivo na Pasta Tmp do MacOS (via linha de comando)
Ver
Tentativa de Execução Suspeita do Curl [MacOS] (via linha de comando)
Ver
IOCs (HashSha256) para detectar: Safari da Coreia do Norte: Caçando RATs
Ver
Detecção de Implantação do Kit de Malware Mach-O Man [Criação de Processo Linux]
Ver
Execução de Simulação
Pré-requisito: O Verificação Preliminar de Telemetria e Base deve ter passado.
Justificativa: Esta seção detalha a execução precisa da técnica do adversário (T1546.006 / T1587.001) projetada para acionar a regra de detecção. Os comandos refletem uma implantação realista de “vivendo da terra” dos binários Mach-O Man.
-
Narrativa do Ataque e Comandos:
- Um atacante que já ganhou acesso ao host macOS copia os quatro binários Mach-O Man de um local de preparação (
/tmp/stage) para um diretório gravável (/usr/local/bin). - Os binários são tornados executáveis e lançados sequencialmente para imitar as fases de inicialização, reconhecimento, persistência e roubo de credenciais do kit.
- A persistência é alcançada escrevendo um plist de daemon de inicialização que aponta para
minst2.bin.
# Etapa 1 – Preparar os binários (simulado copiando de uma pasta de ativos de teste) mkdir -p /usr/local/bin/macho cp ./assets/teamsSDK.bin /usr/local/bin/macho/ cp ./assets/D1YrHRTg.bin /usr/local/bin/macho/ cp ./assets/minst2.bin /usr/local/bin/macho/ cp ./assets/macrasv2 /usr/local/bin/macho/ # Etapa 2 – Torná-los executáveis chmod +x /usr/local/bin/macho/*.bin # Etapa 3 – Executar os binários de preparação e reconhecimento /usr/local/bin/macho/teamsSDK.bin & /usr/local/bin/macho/D1YrHRTg.bin & # Etapa 4 – Instalar persistência (daemon de inicialização) para minst2.bin cat <<'EOF' > /Library/LaunchDaemons/com.macho.minst2.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key><string>com.macho.minst2</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/macho/minst2.bin</string> </array> <key>RunAtLoad</key><true/> </dict> </plist> EOF sudo launchctl load -w /Library/LaunchDaemons/com.macho.minst2.plist # Etapa 5 – Executar o componente de roubo/exfiltração de credenciais /usr/local/bin/macho/macrasv2 & - Um atacante que já ganhou acesso ao host macOS copia os quatro binários Mach-O Man de um local de preparação (
-
Script de Teste de Regressão: (script bash autossuficiente que reproduz as etapas acima)
#!/usr/bin/env bash set -euo pipefail # --- VARIÁVEIS ------------------------------------------------- BIN_DIR="/usr/local/bin/macho" ASSET_DIR="$(pwd)/assets" PLIST="/Library/LaunchDaemons/com.macho.minst2.plist" # --- VERIFICAÇÃO PRÉVIA -------------------------------------- if [[ $(id -u) -ne 0 ]]; then echo "Script requer root para instalar daemon de inicialização. Execute novamente com sudo." exit 1 fi # --- IMPLANTAR BINÁRIOS --------------------------------------- mkdir -p "$BIN_DIR" for bin in teamsSDK.bin D1YrHRTg.bin minst2.bin macrasv2; do cp "$ASSET_DIR/$bin" "$BIN_DIR/$bin" chmod +x "$BIN_DIR/$bin" done # --- EXECUTAR PREPARAÇÃO & RECON ----------------------------- "$BIN_DIR/teamsSDK.bin" & "$BIN_DIR/D1YrHRTg.bin" & # --- PERSISTÊNCIA (daemon de inicialização) -------------------- cat <<'EOF' > "$PLIST" <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key><string>com.macho.minst2</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/macho/minst2.bin</string> </array> <key>RunAtLoad</key><true/> </dict> </plist> EOF launchctl load -w "$PLIST" # --- EXECUTAR COMPONENTE DE ROUBO DE CREDENCIAIS --------------- "$BIN_DIR/macrasv2" & echo "Simulação executada – aguarde alguns segundos para a telemetria aparecer." -
Comandos de Limpeza:
#!/usr/bin/env bash set -euo pipefail BIN_DIR="/usr/local/bin/macho" PLIST="/Library/LaunchDaemons/com.macho.minst2.plist" # Descarregar daemon de inicialização if [[ -f "$PLIST" ]]; then sudo launchctl unload -w "$PLIST" sudo rm -f "$PLIST" fi # Terminar quaisquer processos maliciosos persistentes pkill -f teamsSDK.bin || true pkill -f D1YrHRTg.bin || true pkill -f minst2.bin || true pkill -f macrasv2 || true # Remover binários sudo rm -rf "$BIN_DIR" echo "Limpeza concluída."