De inhoud van een Docker-afbeelding inspecteren zonder een container te starten

0
143

Docker-afbeeldingen kunnen willekeurige binaire bestanden en bibliotheken bundelen in een enkele blob met gegevens. Door te inspecteren wat zich daadwerkelijk in een afbeelding bevindt, kunt u de geschiktheid ervan beoordelen en eventuele veiligheidsrisico's identificeren.

De gemakkelijkste manier om de inhoud van een afbeelding te verkennen, is door een container te starten, een shellsessie te krijgen en vervolgens reguliere terminalopdrachten zoals ls en cd te gebruiken om de directorystructuur van binnenuit te bekijken. Dit is echter niet ideaal in veiligheidskritieke omgevingen – het maken van een container met een onbekende afbeelding kan u blootstellen aan een kwaadaardig toegangspuntscript.

Hier zijn technieken die u kunt gebruiken om de bestanden van een afbeelding te inspecteren zonder een container te starten.

Een container maken zonder deze te starten

docker create is een minder bekende tegenhanger van docker run. Het creëert een nieuwe container bovenop een bepaalde afbeelding zonder deze te starten. Je zou het later kunnen starten met het docker start commando.

Het maken van een nieuwe container is niet gevaarlijk omdat deze inert blijft totdat deze wordt uitgevoerd. Je kunt het grofweg vergelijken met het definiëren van de configuratie-instellingen voor een VM die je niet gebruikt. Zelfs als het is ingesteld om op te starten vanaf een bedorven ISO van het besturingssysteem, zul je geen schade aan je omgeving toebrengen.

docker create –name verdachte-container verdachte-image:latest Advertentie

Het bovenstaande commando maakt een nieuwe container aan met de naam verdachte-container die gebaseerd zal zijn op de verdachte-afbeelding:laatste afbeelding.

Het bestandssysteem van de container exporteren

Nu je een geldige maar gestopte container hebt, kun je het bestandssysteem exporteren met de opdracht docker export. Omdat de container nog nooit is gestart, kunt u er zeker van zijn dat de export het bestandssysteem nauwkeurig weergeeft dat is gedefinieerd door de lagen van uw afbeelding.

docker export verdachte-container > verdachte-container.tar

Je zult eindigen met een tar-archief in je werkmap dat alles in je afbeelding bevat. Open of pak dit archief uit met uw favoriete software om door de mappen van de afbeelding te bladeren en bestanden weer te geven en weer te geven.

Als u het archief niet hoeft op te slaan of te openen, maar liever de bestandenlijst in uw terminal, wijzig het tar-commando:

docker export verdachte-container | teer t > verdachte-container-files.txt

tar t geeft de inhoud van het invoerarchief weer. Je zult eindigen met een lijst van alles in je afbeelding in verdachte-container-files.txt.

"docker image save"

Een variatie op deze techniek is het gebruik van docker image save. Met deze opdracht worden de gegevens van een afbeelding rechtstreeks in een tar-archief opgeslagen.

docker-afbeelding opslaan verdachte-afbeelding:latest > verdachte-image.tar Advertentie

Deze methode produceert een archief dat is gericht op de afbeelding, niet op containers die ervan zijn gemaakt. De tar bevat een manifest.json-bestand, dat de lagen van de afbeelding beschrijft, en een set mappen die de inhoud van alle afzonderlijke lagen bevatten.

Dit is handig wanneer u evalueert de rol van elke laag bij het opbouwen van de afbeelding. Het maken en exporteren van een gestopte container is echter een meer toegankelijke manier om door het uiteindelijke bestandssysteem van de afbeelding te bladeren.

Lagen weergeven met & #8220;docker-afbeeldingsgeschiedenis”

Een andere manier om de inhoud van een afbeelding te inspecteren, is door de lagenlijst te bekijken met de opdracht docker-afbeeldingsgeschiedenis.

docker-afbeeldingsgeschiedenis verdachte-image:latest

Dit onthult de Dockerfile-instructies die de lagen van de afbeelding hebben samengesteld. Het laat je geen individuele bestanden en mappen zien in het bestandssysteem van de afbeelding, maar kan effectiever zijn bij het markeren van verdacht gedrag.

Elke regel in de uitvoer van het commando vertegenwoordigt een nieuwe laag in de afbeelding. De “GEMAAKT DOOR” kolom toont de Dockerfile-instructie die de laag heeft gemaakt.

Door de lijst met lagen te scannen, kunt u snel verdachte acties identificeren die erop kunnen wijzen dat u met behulp van een kwaadaardige afbeelding. Zoek naar onbekende binaire bestanden in RUN-instructies, onverwachte veranderingen in omgevingsvariabelen en verdachte CMD- en ENTRYPOINT-instructies.

Advertentie

De laatste twee lagen zijn misschien wel de belangrijkste om te beoordelen bij het inspecteren van de geschiedenis van een afbeelding. Ze vertellen je precies wat er wordt gestart als je docker run of docker een container start. Als een instructie er verdacht of onbekend uitziet, overweeg dan om de bovenstaande technieken te gebruiken om de binaire bestanden of scripts waarnaar wordt verwezen volledig te inspecteren.

Toegang tot het bestandssysteem van een afbeelding geeft een zeer gedetailleerd beeld van de inhoud, waarbij schadelijke inhoud gemakkelijk onopgemerkt kan blijven, zelfs na handmatige inspectie. De lijst met lagen die wordt weergegeven door de geschiedenis van de docker-afbeeldingen kan u niet helpen vermomde bestandssysteemitems te vinden, maar is effectiever bij het aan de oppervlakte brengen van flagrante kwaadaardige operaties, zoals heimelijke spywaredownloads of het overschrijven van omgevingsvariabelen.

Tools van derden

Er zijn ook open-source tools van derden beschikbaar om u te helpen bij het weergeven van de inhoud van afbeeldingen. Deze bieden doorgaans filtermogelijkheden, zodat u snel geïnstalleerde besturingssysteempakketten, programmeertaalafhankelijkheden en gewone bestanden kunt opsommen.

Beeldinspectie is ingebouwd in de Anchore-containerscanengine. Je kunt het gebruiken door anchore-cli image content my-image:latest uit te voeren nadat je Anchore hebt geïnstalleerd. Dit biedt een volledige lijst van de inhoud van het bestandssysteem van de doelafbeelding.

Een andere optie is Dive, een tool die speciaal is gebouwd voor het visualiseren van beeldinhoud. Het maakt gebruik van een op lagen gebaseerde benadering en benadrukt de wijzigingen in het bestandssysteem die met elke nieuwe laag zijn aangebracht. U bladert door het bestandssysteem met behulp van een op bomen gebaseerde interactieve terminalweergave.

Conclusie

Docker-afbeeldingen zijn meestal ondoorzichtig op het moment van consumptie. Populaire registers bieden geen bestandslijst in hun API's of gebruikersinterfaces. Deze functionaliteit is ook niet geïntegreerd in de Docker CLI. Hoewel veel ontwikkelaars afbeeldingen gebruiken zoals ze zijn, kan een niet-gecontroleerde afbeelding onaanvaardbaar zijn in omgevingen met een hoog risico.

Advertentie

U kunt een verdachte afbeelding inspecteren door deze naar een archief te exporteren en door de inhoud ervan te bladeren. Dit houdt de afbeelding inert, waardoor wordt voorkomen dat schadelijke inhoud wordt uitgevoerd, terwijl een volledig beeld wordt geboden van het bestandssysteem dat het in een container zou creëren.

U kunt uw beveiligingshouding verder verbeteren door handmatige inhoudverkenning te combineren met geautomatiseerde afbeelding scant. Deze versnellen het proces van het detecteren van bekende kwetsbaarheden, maar zijn mogelijk niet effectief bij het vinden van nieuwe kwaadaardige bestanden die op verborgen locaties zijn gedeponeerd. Door meerdere technieken te gebruiken, kunt u uw dekking spreiden en de grootst mogelijke reeks verdachte bestanden opvangen.