SOC Prime Bias: Médio

16 Abr 2026 16:46

Campanha Safari da Coreia do Norte Entrega RATs

Author Photo
Ruslan Mikhalov Chefe de Pesquisa de Ameaças na SOC Prime linkedin icon Seguir
Campanha Safari da Coreia do Norte Entrega RATs
shield icon

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

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:

    1. 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).
    2. 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.
    3. 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 &
  • 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."