Immagini di base malevole
A lookalike base image on a public registry reaches production and calls home. Trace it back to the FROM line, then fix it with an internal mirror, verified publishers, and signature verification at pull time.
Cos’è Immagini di base malevole?
Chiunque può pubblicare su un registro pubblico con un nome simile a uno di cui ti fidi. Senza la verifica della firma, una riga FROM è solo una stringa, e una build che risolve quella stringa eseguirà tutto ciò che scarica. Questo esercizio copre un'immagine di base ostile arrivata in produzione: osserva un attaccante piazzarla e raccogliere ciò che invia a casa, poi correggila con publisher verificati, un mirror interno e la verifica della firma al momento del pull.
Cosa imparerai in Immagini di base malevole
- Risolve un nome in qualunque cosa il registro serva, quindi senza verifica ti fidi di una stringa e non di un publisher.
- Protegge dal cambiamento dell'immagine dopo che l'hai verificata, ma non dal bloccare fin dall'inizio un'immagine ostile. Devi comunque verificare chi l'ha pubblicata.
- La scansione ti dice quali vulnerabilità note esistono; una firma ti dice che l'immagine proviene dal publisher che ti aspetti e non è stata sostituita.
- Quella immagine era legittima ma obsoleta. Questa era ostile fin dall'inizio, quindi patcharla non ha senso e la correzione riguarda la provenienza.
Immagini di base malevole — Fasi della formazione
-
Un nome che differisce di un carattere
Bob non si introduce in nulla. Pubblica. Su un hub di immagini pubblico chiunque può eseguire il push di un repository, e lui ne ha pubblicato uno sotto un namespace che si legge quasi esattamente come l'immagine di base ufficiale di Node.js. Poi aspetta che una build, da qualche parte, la scarichi per errore.
-
Travestita da originale
Il repository di Bob compare nei risultati di ricerca proprio sotto quello reale, con lo stesso slogan e un numero di download sano. L'unica differenza è la parte che un ingegnere di fretta salta a colpo d'occhio.
-
Quello che ha davvero spedito
L'immagine contraffatta di Bob non è un'immagine Node riconfezionata con un'etichetta nuova. L'ha costruita a partire da una vera e ha aggiunto una singola riga. Questo è il Dockerfile dietro la base che ha pubblicato.
-
La riga che fa il lavoro
Tutto ciò che sta sopra questa riga è una normale base Node.js. Un solo RUN, camuffato da un commento innocuo, è ciò che la trasforma in un'arma.
-
Osserva il payload attivarsi
La base ha l'aspetto e il comportamento di una normale immagine Node.js, quindi una build che la usa riesce e un'app costruita su di essa funziona. Ma un livello aggiunto da Bob scarica ed esegue un payload nel momento in cui un container si avvia. Esegue la propria base una volta per confermare che il payload si attiva ancora.
-
Sfrutta la via d'accesso
Una build di Marlspire è stata spedita sulla sua base, e l'impianto che aveva piazzato ha telefonato a casa. Bob non ha più bisogno di introdursi ora: ha già una shell dentro il loro container di produzione. Gli ordina di consegnare tutto ciò che riesce a raggiungere.
-
Cosa ha reso possibile tutto questo
Un momento di riflessione sul meccanismo prima che inizi la risposta.
-
L'host segnala un miner
Marlspire esegue un monitoraggio degli endpoint sui suoi host container. Non gli importa cosa dovrebbe fare il container; segnala ciò che ha visto.
-
Leggi i livelli dell'immagine
Un'immagine registra come è stata costruita, un comando per livello. Se un miner si sta installando da solo, qualche livello ha dovuto eseguire il comando che lo ha scaricato. Alice legge la cronologia di build dell'immagine spedita.
-
Da dove veniva la base
Il veleno è nella base, quindi la domanda è quale base. Alice confronta i due candidati sull'hub pubblico, fianco a fianco.