Beliebte Suchanfragen

Ein Beitrag von

security brand
//

Dateien sicher löschen in Dockerfiles

11.6.2025 | 2 Minuten Lesezeit

Docker hat sich als leistungsstarkes Werkzeug etabliert, das Entwicklern hilft, Anwendungen effizient zu containerisieren und zu skalieren. Doch wie bei jeder Technologie gibt es Aspekte, die es ermöglichen, versehentlich Sicherheitslücken zu erzeugen. Einer dieser Aspekte beim Umgang mit Docker-Images ist die Art und Weise, wie Dateien gelöscht werden. In diesem Blogpost wird erklärt, warum das Löschen von Dateien in Docker-Images problematisch sein kann und wie diese Lücke vermieden werden kann.

Docker Schichtensystem: Ein kurzer Überblick

Docker-Images bestehen aus mehreren Schichten, die nacheinander aufgebaut werden. Jede Schicht repräsentiert einen schreibgeschützten Schnappschuss des Dateisystems. Änderungen oder Ergänzungen des Dateisystems erzeugen einen neuen Schnappschuss, aufbauend auf den vorherigen Schichten.

Für dieses beispielhafte Dockerfile werden drei Schichten erzeugt.

1FROM alpine
2RUN apk update && apk add python3
3COPY src/ /app/

Schichten des Dockerfiles

Das Problem beim Löschen von Dateien

Angenommen in dem Dockerfile wird eine Datei hinzugefügt, die ein Secret enthält. Später wird diese Datei wieder durch den rm Befehl gelöscht, da sie nicht im finalen Image enthalten sein soll. Insgesamt werden für das folgende Dockerfile fünf Schichten erzeugt. Obwohl die Datei in der neuesten Schicht als gelöscht markiert wird, bleibt sie in den vorherigen Schichten vorhanden.

1FROM alpine
2RUN apk update && apk add python3
3COPY buildconfig.json /buildconfig.json
4COPY src/ /app/
5# Do something with the build config
6RUN rm /buildconfig.json

Schichten nach dem Löschen einer Datei

Ein Beispiel zur Veranschaulichung

Nachdem das Image aus dem obigen Dockerfile gebaut wurde, kann es als tar Archiv gespeichert werden.

1docker save -o exampleimage.tar exampleimage

In diesem Archiv befindet sich das Image Manifest manifest.json, in dem die Binär Blobs der Schichten aufgelistet werden. Die Binär Blobs sind ebenfalls tar Archive, welche die Änderung der jeweiligen Schicht beinhaltet.

1"Layers": [
2  "blobs/sha256/63ca1fbb43ae5034640e5e6cb3e083e05c290072c5366fcaa9d62435a4cced85",
3  "blobs/sha256/01ab1ebbd41659e8b36216acb45a5108a1bb4d42eaae40c6cfb82e4d532e8558",
4  "blobs/sha256/35496380094a9854f97ff02beddde9ca0ec9ea1cac47b4a659d5595102dfeb48",
5  "blobs/sha256/8d8d469b0e64e18c2ec91f4e0d62684a950fe21ce39e179950392ca29e5544ad",
6  "blobs/sha256/f6b4e08453d8488c6fbb8062fb291c9dfeef9b979101e9edcbb5c1cd3fb6df30"
7],

Wenn die Dateien, der letzten Schicht gelistet werden, sieht man die als gelöscht markierte buildconfig.json Datei. Der Prefix .wh. dient dabei als Marker dafür, dass diese Datei gelöscht wurde.

1tar --list -f blobs/sha256/f6b4e08453d8488c6fbb8062fb291c9dfeef9b979101e9edcbb5c1cd3fb6df30
2.wh.buildconfig.json

Wird die dritte Schicht gelistet, findet man die buildconfig.json Datei. Somit hat jeder, der Zugriff zu diesem Docker Image hat, auch Zugriff auf die Konfigurationsdatei und kann somit das Secret auslesen und missbrauchen.

1tar --list -f blobs/sha256/35496380094a9854f97ff02beddde9ca0ec9ea1cac47b4a659d5595102dfeb48
2buildconfig.json

Best Practices zur Vermeidung dieser Lücke

Eine gängige Methode, um diese Lücke zu vermeiden, sind Multi-Stage Builds. Dadurch existieren die sensiblen Dateien nur in dem temporären Image, werden aber nicht in dem endgültigen Image inkludiert.

1FROM alpine AS intermediate
2RUN apk update && apk add python3
3COPY buildconfig.json /buildconfig.json
4COPY src/ /app/
5# Do something with the build config
6RUN rm /buildconfig.json
7
8FROM alpine
9COPY --from=intermediate /app/ /

Außerdem sollte sorgfältig geplant werden, welche Dateien im endgültigen Image enthalten sein sollen und sichergestellt werden, dass sensible Dateien nicht aus Versehen mit eingebaut werden.

Fazit

Durch das Verständnis der Arbeitsweise von Docker-Image Schichten und die Anwendung der richtigen Strategie kann sichergestellt werden, dass sensible Daten wirklich aus Docker-Images entfernt werden. Docker ist ein mächtiges Werkzeug, aber wie jede Technologie erfordert es sorgfältige Handhabung, um sicherzustellen, dass die Anwendungen sicher und effizient laufen.

Beitrag teilen

//

Weitere Artikel in diesem Themenbereich

Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.

//