Geheimnisse in Image-Layern
Durch das Löschen eines Geheimnisses im nächsten RUN wird es nicht entfernt.
Was ist Geheimnisse in Image-Layern?
Bildebenen können nur angehängt werden. Ein an einen RUN übergebener Berechtigungsnachweis wird dauerhaft in dieser Ebene aufgezeichnet, und ein späterer RUN, der die Datei löscht, fügt nur eine darüber liegende Ebene hinzu. Die Datei ist verschwunden; Das Geheimnis liegt immer noch in der Baugeschichte. Sie rufen ein öffentliches Image ab, lesen den untruncated Build-Befehl und verwenden das Veröffentlichungstoken. Die Abhilfereihenfolge ist wichtig: Zuerst das Token widerrufen, einen bereichsbezogenen Ersatz ausstellen und erst dann das Build-Argument durch einen geheimen BuildKit-Mount ersetzen, damit nichts in eine ausgelieferte Ebene geschrieben wird.
Was Sie lernen in Geheimnisse in Image-Layern
- Erklären Sie, warum Bildebenen nur angehängt werden können, sodass bei einem späteren RUN, bei dem eine Anmeldeinformationsdatei gelöscht wird, das Geheimnis im Build-Verlauf verbleibt
- Stellen Sie ein eingebranntes Token wieder her, indem Sie nicht abgeschnittene Layer-Befehle ausgeben, da in der Verlaufsansicht die Spalte CREATED BY abgeschnitten wird
- Widerrufen Sie zunächst die durchgesickerten Anmeldeinformationen und veranlassen Sie einen zeitlich begrenzten Ersatz, bevor Sie etwas am Image ändern
- Wenden Sie einen geheimen BuildKit-Mount an, damit das Token während des Builds verfügbar ist, aber niemals in einen ausgelieferten Layer geschrieben wird
- Überprüfen Sie das neu erstellte Image, indem Sie den vollständigen Layer-Verlauf lesen und sicherstellen, dass die Anmeldeinformationen nirgendwo mehr angezeigt werden
Geheimnisse in Image-Layern — Trainingsschritte
-
Das Ziel einschätzen
Heute nimmt Bob Cindralt ins Visier, einen Zahlungsdienstleister, dessen Abrechnungsdienst (Settlement Service) als Container-Image ausgeliefert wird. Er beginnt dort, wo jeder beginnen kann: bei der eigenen Container-Registry des Unternehmens. Ein veröffentlichtes Image ist ein bequemes Angriffsziel. Es ist genau das Artefakt, das in Produktion läuft, und es zu pullen kostet nichts.
-
Jeder kann es pullen
Das Repository ist für anonymes Pullen freigegeben. Das ist für viele Unternehmen eine bewusste Entscheidung und für sich genommen keine Schwachstelle, bedeutet aber, dass das Artefakt Bob zu denselben Bedingungen zur Verfügung steht wie Cindralts eigenen Build-Servern.
-
Das Image pullen
Bob pullt den Tag, den die Registry als latest führt. Was auf seinem Rechner landet, ist byteidentisch mit dem, was Cindralt in Produktion betreibt, einschließlich jedes Layers, den der Build dabei erzeugt hat.
-
Die Build-Historie lesen
Jedes Image trägt die Befehle mit sich, mit denen es gebaut wurde. Bob muss den Container nicht starten oder irgendetwas entpacken: Die Layer-Historie ist Metadaten und kommt automatisch mit dem Pull mit. Auf den ersten Blick wirkt dieser Build sorgfältig. Jemand hat sogar nach der Installation der Abhängigkeiten aufgeräumt.
-
Nach dem vollständigen Befehl fragen
Die Standardtabelle ist darauf ausgelegt, ins Terminal zu passen, nicht darauf, die volle Wahrheit zu zeigen. Bob lässt sich die Build-Befehle einzeln anzeigen, ohne dass irgendetwas gekürzt wird. Der Installationsbefehl hat ein Credential in eine Konfigurationsdatei geschrieben, und es befindet sich immer noch in dem Layer, den dieser Befehl erzeugt hat.
-
Warum das Löschen nichts gebracht hat
Ein kurzer Moment zum Mechanismus, bevor Bob nutzt, was er gefunden hat.
-
Prüfen, was das Token öffnet
Ein Credential ist nur so viel wert wie das, was es erreichen kann. Bob fragt Cindralts Package-Index, wem dieses Token gehört und was es tun darf. Die Antwort ist schlimmer als ein einzelner Dienst. Das Token kann für jedes Package veröffentlichen, gegen das Cindralt baut, und es läuft nie ab.
-
Was dieses Token wert ist
Bob muss Cindralts Server kein zweites Mal anfassen. Mit Publish-Rechten auf jedes Package, gegen das das Unternehmen baut, kann die nächste Version jeder internen Bibliothek von ihm stammen, und sie wird von jedem Build gepullt, der danach läuft.
-
Der Index meldet eine Veröffentlichung
Cindralts Package-Index protokolliert jeden authentifizierten Aufruf. Über Nacht wurde erfasst, dass das Token ci-publisher von einer Adresse aus verwendet wurde, die niemandem im Unternehmen gehört.
-
Am Image bestätigen
Alice überprüft die Behauptung selbst anhand des veröffentlichten Artefakts, mit genau dem, was auch ein Außenstehender hätte: dem öffentlichen Tag und einem gewöhnlichen Docker-Client.
Abdeckung der Sicherheits-Frameworks
CWE
- CWE-540 Inclusion of Sensitive Information in Source Code
- CWE-522 Insufficiently Protected Credentials
MITRE ATT&CK
- T1552.001 Unsecured Credentials: Credentials In Files
CIS Controls
- CIS 3 Data Protection
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.DS Data Security
- PR.PS Platform Security