La campagna Safari della Corea del Nord distribuisce RATs
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
Rilevamenti
Modifica dei permessi dei file nella cartella Tmp sospetta su MacOS (tramite riga di comando)
Visualizza
Tentativo di esecuzione sospetta di Curl [MacOS] (tramite riga di comando)
Visualizza
IOC (HashSha256) per rilevare: Safari della Corea del Nord: A caccia di RAT
Visualizza
Rilevamento del Deployment del Kit Malware Mach-O Man [Creazione di Processi Linux]
Visualizza
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:
- 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). - I binari sono resi eseguibili e lanciati sequenzialmente per imitare le fasi di inizializzazione, ricognizione, persistenza e furto di credenziali del kit.
- 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 & - 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 (
-
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."