Segreti negli strati delle immagini
A private package-index token is baked into a public container image and survives the RUN that deletes it. Read it out of the layer history like an attacker would, then rotate the credential and rebuild so the secret never enters a layer.
Cos’è Segreti negli strati delle immagini?
Un segreto non esce da un'immagine quando il Dockerfile lo elimina. Gli strati delle immagini sono di sola aggiunta, quindi una credenziale passata in un RUN viene registrata in quello strato per sempre, e un RUN successivo che rimuove il file aggiunge solo un nuovo strato sopra. Questo esercizio riguarda un token di un indice di pacchetti privato incorporato in un'immagine pubblica: osserva un attaccante leggerlo direttamente dalla cronologia degli strati e usarlo, poi lavora sulla vera correzione. Ruota prima la credenziale in modo che il valore trapelato sia morto, poi ricostruisci in modo che il segreto non entri mai in uno strato.
Cosa imparerai in Segreti negli strati delle immagini
- Sì. Gli strati sono di sola aggiunta, quindi lo strato che ha aggiunto il token lo contiene ancora e l'eliminazione aggiunge solo un nuovo strato sopra.
- Ruota la credenziale, perché il valore trapelato rimane valido finché non viene revocato, indipendentemente da ciò che fai all'immagine.
- Tronca la colonna CREATED BY, quindi un comando RUN lungo viene tagliato prima della parte che contiene la credenziale.
- Un mount di segreti BuildKit o una build multi-stage, in modo che la credenziale sia disponibile durante la build ma non venga mai scritta in uno strato che viene distribuito.
Segreti negli strati delle immagini — Fasi della formazione
-
Valutare l'obiettivo
Oggi Bob prende di mira Cindralt, un'azienda di pagamenti il cui servizio di regolamento viene distribuito come immagine container. Inizia da dove chiunque potrebbe iniziare: il registro dei container dell'azienda stessa. Un'immagine pubblicata è un obiettivo comodo da attaccare. È esattamente l'artefatto in esecuzione in produzione, e scaricarla non costa nulla.
-
Chiunque può scaricarla
Il repository è pubblicato per il pull anonimo. Questa è una scelta deliberata per molte aziende e non è di per sé una vulnerabilità, ma significa che l'artefatto è disponibile per Bob alle stesse condizioni dei server di build di Cindralt.
-
Scaricare l'immagine
Bob scarica il tag che il registro elenca come latest. Ciò che arriva sulla sua macchina è, byte per byte, ciò che Cindralt esegue in produzione, compreso ogni strato prodotto dalla build lungo il percorso.
-
Leggere la cronologia della build
Ogni immagine porta con sé i comandi che l'hanno costruita. Bob non ha bisogno di eseguire il container né di estrarre nulla: la cronologia degli strati è metadata e arriva insieme al pull. A prima vista questa build sembra curata. Qualcuno ha persino pulito dopo l'installazione delle dipendenze.
-
Richiedere il comando completo
La tabella predefinita è costruita per adattarsi a un terminale, non per dire la verità. Bob richiede i comandi di build da soli, senza alcun troncamento. Il comando di installazione ha scritto una credenziale in un file di configurazione, e questa si trova ancora nello strato creato da quel comando.
-
Perché l'eliminazione non è servita a nulla
Un momento sul meccanismo prima che Bob usi ciò che ha trovato.
-
Verificare cosa apre il token
Una credenziale vale solo per ciò a cui può accedere. Bob chiede all'indice di pacchetti di Cindralt a chi appartiene questo token e cosa può fare. La risposta è peggiore di un singolo servizio. Il token pubblica su ogni pacchetto contro cui Cindralt compila, e non scade mai.
-
Quanto vale quel token
Bob non ha bisogno di toccare di nuovo i server di Cindralt. Con i diritti di pubblicazione su ogni pacchetto contro cui l'azienda compila, la prossima versione di qualsiasi libreria interna può essere sua, e verrà scaricata da ogni build eseguita successivamente.
-
L'indice segnala una pubblicazione
L'indice di pacchetti di Cindralt registra ogni chiamata autenticata. Durante la notte ha registrato l'uso del token ci-publisher da un indirizzo che non appartiene a nessuno in azienda.
-
Confermarlo dall'immagine
Alice verifica personalmente l'affermazione confrontandola con l'artefatto pubblicato, usando esattamente ciò che avrebbe un estraneo: il tag pubblico e un client Docker standard.