saverioriotto.it

Ispezionare il contenuto di un'immagine Docker senza avviare il container

Le immagini Docker possono raggruppare file binari e librerie in un unico blob di dati. Ispezionare cosa c'è effettivamente all'interno di un'immagine ti aiuta a valutarne l'idoneità e identificare eventuali rischi per la sicurezza.

Ispezionare il contenuto di un'immagine Docker senza avviare il container

Il modo più semplice per esplorare il contenuto di un'immagine consiste nell'avviare un container, ottenere una sessione di shell e quindi utilizzare i normali comandi del terminale come ls e cd per visualizzare la sua struttura di directory interna. Tuttavia, questo non è l'ideale in ambienti critici per la sicurezza; la creazione di un container con un'immagine sconosciuta potrebbe esporti a script come punto di ingresso potenzialmente dannosi.

Ecco le tecniche che puoi utilizzare per ispezionare i file di un'immagine senza avviare un container.

Creare un container senza avviarlo

docker create è una controparte meno conosciuta di docker run. Crea un nuovo container su una determinata immagine senza avviarla. Puoi avviarlo in seguito con il comando docker start.

La creazione di un nuovo container non è pericoloso in quanto rimarrà inerte fino a quando non verrà eseguito. Puoi approssimativamente paragonarlo alla definizione delle impostazioni di configurazione per una VM che non usi. Anche se è impostato per l'avvio da un ISO del sistema operativo contaminato, non causerai alcun danno al tuo ambiente.

docker create --name container-sospetto immagine-sospetta:latest

Il comando precedente crea un nuovo container chiamato container-sospetto che sarà basato sull'immagine immagine-sospetta:latest.

Esportazione del filesystem del container

Ora che hai un container valido ma non avviato, puoi esportare il suo filesystem usando il comando docker export. Poiché il container non è mai stato avviato, puoi essere certo che l'esportazione rappresenti accuratamente il filesystem definito dai livelli dell'immagine.

docker export container-sospetto > container-sospetto.tar

Finirai con un archivio tar nella tua directory di lavoro che contiene tutto all'interno della tua immagine. Apri o estrai questo archivio utilizzando il tuo software preferito per sfogliare le directory dell'immagine ed elencare e visualizzare i file.

Se non hai bisogno di salvare o aprire l'archivio, preferendo invece ottenere l'elenco dei file nel tuo terminale, modifica il comando tar:

docker export container-sospetto | tar t > files-container-sospetto.txt

tar t elenca il contenuto dell'archivio di input. Ti ritroverai con un elenco di tutto ciò che è nella tua immagine all'interno di files-contenitori-sospetti.txt.

Utilizzo del comando "docker image save”

Una alternativa di questa tecnica è data dal comando docker image save. Quest'ultimo salva direttamente i dati di un'immagine in un archivio tar.

docker image save immagine-sospetta:latest > immagine-sospetta.tar

Questo metodo produce un archivio incentrato sull'immagine, non sui contenitori creati da essa. Il tar includerà un file manifest.json, che descrive i livelli dell'immagine e una serie di directory contenenti il ​​contenuto di tutti i singoli livelli.

Questo è utile quando stai valutando il ruolo di ogni livello nella costruzione dell'immagine. Tuttavia, la creazione e l'esportazione di un container interrotto è un modo più accessibile per esplorare il filesystem finale dell'immagine.

Visualizzare i livelli con il comando “docker image history”

Un altro modo per ispezionare il contenuto di un'immagine è visualizzare l'elenco dei livelli con il comando docker image history. 

docker image history immagine-sospetta:latest

Questo espone le istruzioni Dockerfile che hanno composto i livelli dell'immagine. Non ti consente di vedere singoli file e directory nel filesystem dell'immagine, ma può essere più efficace nell'evidenziare comportamenti sospetti.

Ogni riga nell'output del comando rappresenta un nuovo livello nell'immagine. La colonna "CREATED BY" mostra l'istruzione Dockerfile che ha creato il livello.

La scansione dell'elenco dei livelli ti aiuta a identificare rapidamente le azioni sospette che potrebbero indicare che stai utilizzando un'immagine dannosa. Cerca file binari sconosciuti nelle istruzioni RUN, modifiche impreviste alle variabili di ambiente e istruzioni CMD e ENTRYPOINT sospette.

Gli ultimi due livelli sono probabilmente i più importanti da valutare quando si ispeziona la cronologia di un'immagine. Ti dicono esattamente cosa verrà avviato quando esegui il docker o avvii un container con il docker. Se una delle istruzioni sembra sospetta o non familiare, prendere in considerazione l'utilizzo delle tecniche di cui sopra per ispezionare completamente i binari o gli script di riferimento.

Conclusione

L'accesso al filesystem di un'immagine fornisce una visione molto dettagliata dei suoi contenuti, in cui i contenuti dannosi possono passare facilmente inosservati, anche dopo un'ispezione manuale. L'elenco dei livelli esposto dalla cronologia delle immagini della finestra mobile non può aiutarti a trovare elementi del filesystem mascherati, ma è più efficace per far emergere operazioni palesemente dannose come download di spyware furtivi o sostituzioni di variabili di ambiente.

Puoi ispezionare un'immagine sospetta esportandola in un archivio e sfogliandone il contenuto. Ciò mantiene l'immagine inerte, impedendo l'esecuzione di contenuti dannosi, fornendo al contempo una visione completa del filesystem che creerebbe in un container.

Puoi migliorare ulteriormente la tua posizione di sicurezza combinando l'esplorazione manuale del contenuto con scansioni automatiche delle immagini. Questi accelerano il processo di rilevamento delle vulnerabilità note, ma potrebbero non essere efficaci nel trovare nuovi file dannosi depositati in posizioni nascoste. L'uso di più tecniche ti consente di diffondere la tua copertura e catturare la più ampia serie possibile di file sospetti.




Commenti
* Obbligatorio