GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come ispezionare il contenuto di un'immagine Docker senza avviare un contenitore

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

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

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

Creazione di un container senza avviarlo

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

La creazione di un nuovo contenitore 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 sistema operativo ISO danneggiato, non causerai alcun danno al tuo ambiente.

docker create --name suspect-container suspect-image:latest

Il comando sopra crea un nuovo contenitore chiamato suspect-container che sarà basato su suspect-image:latest immagine.

Esportazione del filesystem del contenitore

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

docker export suspect-container > suspect-container.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 avere l'elenco dei file nel tuo terminale, modifica il tar comando:

docker export suspect-container | tar t > suspect-container-files.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 suspect-container-files.txt .

Utilizzo del "salvataggio immagine nella finestra mobile"

Una variante di questa tecnica consiste nell'usare docker image save . Questo comando salva direttamente i dati di un'immagine in un archivio tar.

docker image save suspect-image:latest > suspect-image.tar

Questo metodo produce un archivio incentrato sull'immagine, non sui contenitori creati da essa. Il tar includerà un manifest.json file, che descrive i livelli dell'immagine e un insieme 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 contenitore interrotto è un modo più accessibile per esplorare il filesystem finale dell'immagine.

Elencare i livelli con la "cronologia delle immagini docker"

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

docker image history suspect-image: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 i binari sconosciuti in RUN istruzioni, modifiche impreviste alle variabili di ambiente e CMD sospetti e ENTRYPOINT dichiarazioni.

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 docker run o docker start un container. Se una delle istruzioni sembra sospetta o non familiare, prendi in considerazione l'utilizzo delle tecniche di cui sopra per ispezionare completamente i binari o gli script di riferimento.

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 da docker image history 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 d'ambiente.

Strumenti di terze parti

Sono inoltre disponibili strumenti open source di terze parti per aiutarti a elencare il contenuto delle immagini. Questi in genere offrono funzionalità di filtraggio in modo da poter enumerare rapidamente i pacchetti del sistema operativo installati, le dipendenze del linguaggio di programmazione e i file ordinari.

L'ispezione delle immagini è integrata nel motore di scansione dei container di Anchore. Puoi usarlo eseguendo anchore-cli image content my-image:latest dopo aver installato Anchore. Ciò fornisce un elenco completo dei contenuti del filesystem dell'immagine di destinazione.

Un'altra opzione è Dive, uno strumento creato appositamente per visualizzare il contenuto dell'immagine. Utilizza un approccio basato sui livelli ed evidenzia le modifiche al filesystem apportate con ogni nuovo livello. Scorri il filesystem utilizzando una vista terminale interattiva basata su albero.

Conclusione

Le immagini Docker sono generalmente opache al punto di consumo. I registri popolari non forniscono un elenco di file nelle loro API o interfacce utente. Anche questa funzionalità non è integrata nella Docker CLI. Sebbene molti sviluppatori utilizzino le immagini così come sono, un'immagine non controllata potrebbe essere intollerabile in ambienti ad alto rischio.

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 contenitore.

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'utilizzo di più tecniche ti consente di diffondere la tua copertura e catturare la più ampia serie possibile di file sospetti.


Docker
  1. Come assegnare un IP statico a un contenitore Docker

  2. Come staccare da un contenitore Docker senza fermarlo

  3. Come modificare le immagini Docker

  4. Come elencare i contenitori Docker

  5. Come creare un'immagine Docker da un contenitore e un file Docker

Come eseguire PHPMyAdmin in un contenitore Docker

Come eseguire Grafana in un contenitore Docker

Come creare un'immagine Docker da un contenitore in esecuzione

Come creare un'immagine di Windows Docker con il tag di build Docker

Come configurare un container Docker Apache

Come utilizzare Docker Commit per modificare le immagini del contenitore