Attacco Alla Catena Di Approvvigionamento Rust Prende Di Mira arrayref, internment e append-only-vec
Detection stack
- AIDR
- Alert
- ETL
- Query
Riassunto
Un sofisticato attacco alla supply chain ha preso di mira l’ecosistema Rust compromettendo un account legittimo del maintainer e utilizzando un’identità di typosquatting per iniettare dipendenze malevole al momento della compilazione. Gli attaccanti hanno avvelenato tre crate ampiamente utilizzate, arrayref, internment, e append-only-vec, per eseguire un dropper di esecuzione remota di codice durante il processo di build di Cargo. Questo ha permesso un’esecuzione di codice silenziosa sui workstation degli sviluppatori e sui pipeline CI/CD durante la compilazione routinaria.
Indagine
I ricercatori hanno analizzato l’attacco utilizzando Harden-Runner, che ha catturato lo script di build malevolo mentre tentava una connessione verso un server payload attraverso la porta 9089. La revisione forense della storia di Git di crates.io-index ha rivelato l’inserimento mirato di dipendenze malevole e un’esca di yank-and-upgrade progettata per spingere gli sviluppatori verso versioni compromesse. I ricercatori hanno anche identificato meccanismi di persistenza secondaria e comportamenti C2 segnalati dagli utenti colpiti.
Mitigazione
La mitigazione immediata include il fissaggio di crate legittime a versioni verificate come sicure e l’audit dei file Cargo.lock per rilasci di dipendenze compromesse. Le organizzazioni dovrebbero purgare le cache locali e CI/CD, inclusa ~/.cargo/registry/cache, per rimuovere file .crate malevoli. I filtri Egress per connessioni in uscita insolite dagli ambienti di build e una stretta disciplina dei file lock sono anche difese critiche a lungo termine.
Risposta
Se vengono trovate versioni colpite in un file lock, l’ambiente di build dovrebbe essere trattato come compromesso e tutte le credenziali accessibili, incluse chiavi SSH, token cloud e segreti CI/CD, dovrebbero essere ruotate. I sistemi degli sviluppatori dovrebbero essere esaminati per artefatti di persistenza come servizi systemd non autorizzati o file sospetti nelle directory di configurazione. Tutti gli artefatti software prodotti durante il periodo di esposizione dovrebbero essere ricompilati da fonti pulite e verificate.
Flusso di Attacco
Rilevamenti
Possibili Punti di Persistenza [ASEPs – Software/NTUSER Hive] (via registry_event)
Possibili Comunicazioni C2 su HTTP a IP Diretto Con Porta Insolita (via proxy)
File Nascosto Creato su Host Linux (via file_event)
IOCs (HashSha256) per rilevare: Attacco alla Supply Chain di Rust: arrayref, internment, e append-only-vec Avvelenati dal proc-macro1 Build-Time Dropper
IOCs (SourceIP) per rilevare: Attacco alla Supply Chain di Rust: arrayref, internment e append-only-vec Avvelenati dal proc-macro1 Build-Time Dropper
IOCs (DestinationIP) per rilevare: Attacco alla Supply Chain di Rust: arrayref, internment e append-only-vec Avvelenati dal proc-macro1 Build-Time Dropper
Rilevamento di Connessioni di Rete Anomale in Uscita [Windows Network Connection]
Esecuzione di PowerShell e VBScript Malevoli in Attacco alla Supply Chain di Rust [Windows Powershell]
Esecuzione di Processo di Build Sospetto nella Directory Temp di Unix [Linux Process Creation]
Esecuzione della Simulazione
Prerequisito: Il Controllo prevolo Telemetry & Baseline deve essere passato.
Razionale: Questa sezione dettaglia l’esecuzione precisa della tecnica avversaria (TTP) progettata per attivare la regola di rilevamento. I comandi e la narrativa DEVONO riflettere direttamente i TTP identificati e mirano a generare le esatte telemetria attese dalla logica di rilevamento. Esempi astratti o non correlati porteranno a una diagnosi errata.
-
Narrativa & Comandi d’Attacco: L’avversario ha iniettato con successo un crate malevolo in un progetto Rust. Quando il processo di build viene avviato, lo script
build.rsesegue un thread in background che tenta di stabilire una connessione a un server C2 remoto sulla porta 9089 per ottenere un payload. Questo simula la “Connessione di Rete Anomala in Uscita” descritta nella regola. L’obiettivo è attivare l’avviso di registro firewall/rete colpendo la porta specifica9089. -
Script di Test di Regressione:
# Simulare un dropper al momento della costruzione che tenta di connettersi a un server C2 sulla porta 9089 # Utilizziamo un client TCP per simulare il tentativo di connessione di rete. $C2_IP = "127.0.0.1" # Localhost per evitare traffico esterno reale durante il test $C2_PORT = 9089 Write-Host "Simulazione dell'attività di rete del processo di build..." -ForegroundColor Cyan try { $client = New-Object System.Net.Sockets.TcpClient $beginConnect = $client.BeginConnect($C2_IP, $C2_PORT, $null, $null) $success = $beginConnect.AsyncWaitHandle.WaitOne(1000, $false) if ($success) { Write-Host "Connessione riuscita! La telemetria dovrebbe essere generata." -ForegroundColor Green $client.EndConnect($beginConnect) } else { Write-Host "Connessione fallita (prevista se nessun listener è attivo), ma la telemetria dovrebbe comunque mostrare il tentativo." -ForegroundColor Yellow } $client.Close() } catch { Write-Host "Errore durante la simulazione: $($_.Exception.Message)" -ForegroundColor Red } -
Comandi di Pulizia:
# Nessun cambiamento persistente effettuato dallo script; tuttavia, assicurarsi che nessun listener locale sia attivo. # Se un listener è stato avviato per i test, utilizzare: Stop-Process -Name "nc" -ErrorAction SilentlyContinue Write-Host "Pulizia completata." -ForegroundColor Green