SOC Prime Bias: Medio

16 Apr 2026 16:46

La campagna Safari della Corea del Nord distribuisce RATs

Author Photo
Ruslan Mikhalov Capo della Ricerca sulle Minacce presso SOC Prime linkedin icon Segui
La campagna Safari della Corea del Nord distribuisce RATs
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Sintesi

L’articolo descrive un nuovo framework malware per macOS chiamato Mach-O Man, che è stato collegato alla famosa unità Chollima del gruppo Lazarus. Il malware è distribuito tramite account Telegram compromessi e inviti a riunioni false che persuadono le vittime ad eseguire un comando ClickFix sui loro dispositivi. Il toolkit include diversi binari Mach-O progettati per raccogliere dettagli dell’host, mantenere la persistenza e rubare credenziali e dati del browser, con esfiltrazione tramite Telegram. La campagna sembra concentrarsi su scambi di criptovalute e altre organizzazioni nel settore finanziario.

Indagine

I ricercatori hanno identificato un binario di staging chiamato teamsSDK.bin che è stato scaricato ed eseguito attraverso una sequenza di comandi malevoli. Ulteriori componenti, inclusi D1yCPUyk.bin, minst2.bin, e macrasv2, sono stati successivamente utilizzati per enumerare il sistema, creare un LaunchAgent per la persistenza e raccogliere estensioni del browser, dati del portachiavi e cookie. La comunicazione di comando e controllo si basava su un server HTTP basato su Go che esponeva un endpoint /info non autenticato e trapelava un token API del bot Telegram. Gli investigatori hanno anche trovato servizi di accesso remoto come RDP, WinRM e Chrome Remote Desktop esposti sull’host C2.

Mitigazione

Gli utenti dovrebbero evitare di interagire con link a riunioni non richiesti e confermare la legittimità di ogni comando del terminale suggerito durante conversazioni inaspettate. Le organizzazioni dovrebbero monitorare la presenza di LaunchAgent non autorizzati, richiedere la firma di codice fidato per i binari macOS e restringere l’esecuzione di file sconosciuti. Le difese di rete dovrebbero bloccare connessioni in uscita verso server HTTP sospetti basati su Go e segnalare il traffico usando l’agente utente Go-http-client . I token del bot Telegram dovrebbero essere protetti dall’esposizione e i servizi desktop remoto dovrebbero essere bloccati con controlli di accesso secondo il principio del privilegio minimo.

Risposta

I team di sicurezza dovrebbero rilevare l’esecuzione di file .bin sconosciuti e monitorare la creazione di LaunchAgent denominati com.onedrive.launcher. Gli avvisi dovrebbero essere attivati anche per connessioni in uscita a infrastrutture sospette utilizzando l’agente utente Go-http-client e richieste POST ripetute agli /info endpoint. I difensori dovrebbero vigilare sulle attività API di Telegram inaspettate legate a token del bot non familiari. Dovrebbero essere condotte analisi forensi complete dell’host per identificare e rimuovere tutti i binari malevoli, seguite da reimpostazioni delle credenziali per qualsiasi account che potrebbe essere stato compromesso.

"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>Azione</b> – <b>T1204.001 Esecuzione Utente</b><br/>La vittima clicca su un link malevolo “fix” in un meeting su Telegram che esegue un comando curl"] class initial_access_user_execution action tool_curl["<b>Strumento</b> – <b>Nome</b>: curl<br/><b>Descrizione</b>: utilità da riga di comando per trasferire dati da o verso un server"] class tool_curl tool file_teamsSDK_bin["<b>File</b> – <b>Nome</b>: teamsSDK.bin (Macho O)<br/><b>Descrizione</b>: Binario di stage scaricato e eseguito"] class file_teamsSDK_bin file process_curl_download["<b>Processo</b> – curl scarica ed esegue teamsSDK.bin"] class process_curl_download process malware_teamsSDK["<b>Malware</b> – <b>Nome</b>: teamsSDK<br/><b>Descrizione</b>: contatta C2 dopo l’esecuzione"] class malware_teamsSDK malware service_go_http["<b>Servizio</b> – Server HTTP basato su Go<br/><b>Porta</b>: 80/443<br/><b>Endpoint</b>: /info (non autenticato)"] class service_go_http service process_c2_communication["<b>Processo</b> – Comunica con C2 via HTTP POST a /info"] class process_c2_communication process file_minst2_bin["<b>File</b> – <b>Nome</b>: minst2.bin"] class file_minst2_bin file process_install_launchagent["<b>Processo</b> – Installa plist di LaunchAgent per la persistenza"] class process_install_launchagent process malware_fake_onedrive["<b>Malware</b> – Binario falso “OneDrive” lanciato al login"] class malware_fake_onedrive malware tool_macrasv2["<b>Strumento</b> – <b>Nome</b>: macrasv2<br/><b>Descrizione</b>: estrae voci del portachiavi, password del browser, cookie, estensioni"] class tool_macrasv2 tool process_keychain_extraction["<b>Processo</b> – Estrae dati del portachiavi macOS e del browser"] class process_keychain_extraction process action_discovery_system_info["<b>Azione</b> – <b>T1082 Scoperta di Informazioni di Sistema</b><br/>Raccoglie ID CPU, nome host, utente, applicazioni installate"] class action_discovery_system_info action action_discovery_software["<b>Azione</b> – <b>T1518 Scoperta di Software</b><br/>Enumera browser e estensioni installati"] class action_discovery_software action service_telegram_bot["<b>Servizio</b> – API del Bot Telegram<br/><b>Scopo</b>: Ricevere credenziali esfiltrate"] class service_telegram_bot service process_exfiltration["<b>Processo</b> – Invia dati raccolti al bot Telegram"] class process_exfiltration process action_content_injection["<b>Azione</b> – <b>T1659 Iniezione di Contenuto</b><br/>L’endpoint non autenticato /info permette il caricamento arbitrario di file"] class action_content_injection action action_dynamic_resolution["<b>Azione</b> – <b>T1568 Risoluzione Dinamica</b><br/>Risoluzione del dominio C2 a runtime"] class action_dynamic_resolution action %% Connections initial_access_user_execution –>|utilizza| tool_curl tool_curl –>|scarica| file_teamsSDK_bin file_teamsSDK_bin –>|eseguito da| process_curl_download process_curl_download –>|esegue| malware_teamsSDK malware_teamsSDK –>|comunica con| service_go_http service_go_http –>|riceve dati tramite| process_c2_communication process_c2_communication –>|innesca| file_minst2_bin file_minst2_bin –>|installa| process_install_launchagent process_install_launchagent –>|crea| malware_fake_onedrive malware_fake_onedrive –>|esegue al login| action_discovery_system_info action_discovery_system_info –>|porta a| action_discovery_software action_discovery_software –>|fornisce dati a| tool_macrasv2 tool_macrasv2 –>|esegue| process_keychain_extraction process_keychain_extraction –>|fornisce dati a| process_exfiltration process_exfiltration –>|invia a| service_telegram_bot malware_teamsSDK –>|abilita| action_content_injection action_content_injection –>|consente| file_minst2_bin malware_teamsSDK –>|abilita| action_dynamic_resolution action_dynamic_resolution –>|risolve| service_go_http "

Flusso di Attacco

Esecuzione di Simulazione

Prerequisito: Il Controllo Pre-volo di Telemetria e Baseline deve essere superato.

Motivazione: Questa sezione dettaglia la precisa esecuzione della tecnica avversaria (T1546.006 / T1587.001) progettata per attivare la regola di rilevamento. I comandi riflettono un vero e proprio deployment “living-off-the-land” dei binari Mach-O Man.

  • Narrativa di Attacco & Comandi:

    1. Un attaccante che ha già ottenuto un punto d’appoggio sull’host macOS copia i quattro binari Mach‑O Man da una posizione di staging (/tmp/stage) a una directory scrivibile (/usr/local/bin).
    2. I binari sono resi eseguibili e lanciati sequenzialmente per imitare le fasi di inizializzazione, ricognizione, persistenza e furto di credenziali del kit.
    3. La persistenza viene ottenuta scrivendo un plist per un demone di lancio che punta a minst2.bin.
    # Step 1 – Metti in scena i binari (simulato copiando da una cartella di asset di test)
    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/
    
    # Step 2 – Rendili eseguibili
    chmod +x /usr/local/bin/macho/*.bin
    
    # Step 3 – Esegui i binari di stager e ricognizione
    /usr/local/bin/macho/teamsSDK.bin &
    /usr/local/bin/macho/D1YrHRTg.bin &
    
    # Step 4 – Installa la persistenza (launch daemon) per 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
    
    # Step 5 – Esegui il componente di furto/esfiltrazione delle credenziali
    /usr/local/bin/macho/macrasv2 &
  • Script di Test di Regressione: (script bash auto-contenuto che riproduce i passaggi sopra indicati)

    #!/usr/bin/env bash
    set -euo pipefail
    
    # --- VARIABILI -------------------------------------------------
    BIN_DIR="/usr/local/bin/macho"
    ASSET_DIR="$(pwd)/assets"
    PLIST="/Library/LaunchDaemons/com.macho.minst2.plist"
    
    # --- PRE-CHECK -------------------------------------------------
    if [[ $(id -u) -ne 0 ]]; then
      echo "Il script richiede i privilegi di root per installare il demone di lancio. Rilancia con sudo."
      exit 1
    fi
    
    # --- DEPLOY BINARI -------------------------------------------
    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
    
    # --- ESEGUI STAGER & RECON ------------------------------------
    "$BIN_DIR/teamsSDK.bin" &
    "$BIN_DIR/D1YrHRTg.bin" &
    
    # --- PERSISTENZA (launch daemon) -------------------------------
    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"
    
    # --- ESEGUI COMPONENTE DI FURTO DELLE CREDENZIALI -----------------------
    "$BIN_DIR/macrasv2" &
    
    echo "Simulazione eseguita – attendere pochi secondi affinché la telemetria appaia."
  • Comandi di Pulizia:

    #!/usr/bin/env bash
    set -euo pipefail
    
    BIN_DIR="/usr/local/bin/macho"
    PLIST="/Library/LaunchDaemons/com.macho.minst2.plist"
    
    # Scollega il demone di lancio
    if [[ -f "$PLIST" ]]; then
      sudo launchctl unload -w "$PLIST"
      sudo rm -f "$PLIST"
    fi
    
    # Uccidi eventuali processi malevoli rimanenti
    pkill -f teamsSDK.bin || true
    pkill -f D1YrHRTg.bin || true
    pkill -f minst2.bin   || true
    pkill -f macrasv2    || true
    
    # Rimuovi binari
    sudo rm -rf "$BIN_DIR"
    
    echo "Pulizia completata."