Geheimen in image-lagen
Als u een geheim verwijdert tijdens de volgende RUN, wordt het niet verwijderd.
Wat is Geheimen in image-lagen?
Afbeeldingslagen kunnen alleen worden toegevoegd. Een referentie die in één RUN wordt doorgegeven, wordt voorgoed in die laag vastgelegd, en een latere RUN die het bestand verwijdert, voegt alleen een laag erbovenop toe. Het bestand is verdwenen; het geheim zit nog steeds in de bouwgeschiedenis. U haalt een openbare image op, leest de niet-ingekorte build-opdracht en gebruikt het publicatietoken. De herstelvolgorde is van belang: trek eerst het token in, voer een scoped-vervanging uit en vervang pas daarna het build-argument door een geheime mount van BuildKit, zodat er niets naar een verzonden laag wordt geschreven.
Wat je leert in Geheimen in image-lagen
- Leg uit waarom afbeeldingslagen alleen kunnen worden toegevoegd, zodat een latere RUN waarbij een referentiebestand wordt verwijderd het geheim in de bouwgeschiedenis achterlaat
- Herstel een ingebakken token door niet-ingekorte laagopdrachten af te drukken, omdat de geschiedenisweergave de kolom CREATED BY afkapt
- Trek eerst de gelekte inloggegevens in en voer een vervanging met beperkte tijdslimiet uit voordat u iets aan de afbeelding wijzigt
- Pas een geheime BuildKit-mount toe, zodat het token beschikbaar is tijdens het bouwen, maar nooit in een laag wordt geschreven die wordt verzonden
- Controleer de opnieuw opgebouwde afbeelding door de volledige laaggeschiedenis te lezen en te bevestigen dat de referentie nergens meer verschijnt
Geheimen in image-lagen — Trainingsstappen
-
Het doelwit inschatten
Vandaag heeft Bob het gemunt op Cindralt, een betalingsbedrijf waarvan de settlement-service als containerimage wordt uitgeleverd. Hij begint waar iedereen kan beginnen: het eigen containerregister van het bedrijf. Een gepubliceerde image is een gemakkelijk doelwit. Het is precies het artefact dat in productie draait, en het ophalen ervan kost niets.
-
Iedereen kan het ophalen
De repository is gepubliceerd voor anonieme pulls. Dat is voor veel bedrijven een bewuste keuze en op zichzelf geen kwetsbaarheid, maar het betekent wel dat het artefact voor Bob onder dezelfde voorwaarden beschikbaar is als voor Cindralts eigen buildservers.
-
De image ophalen
Bob haalt de tag op die het register als latest vermeldt. Wat op zijn machine terechtkomt, is byte voor byte wat Cindralt in productie draait, inclusief elke laag die de build onderweg heeft geproduceerd.
-
De buildgeschiedenis lezen
Elke image draagt de commando's mee waarmee hij is gebouwd. Bob hoeft de container niet te draaien of iets uit te pakken: de laaggeschiedenis is metadata, en die komt gewoon mee met de pull. Op het eerste gezicht ziet deze build er zorgvuldig uit. Iemand heeft zelfs opgeruimd na de installatie van de dependencies.
-
Om het volledige commando vragen
De standaardtabel is gemaakt om in een terminal te passen, niet om de waarheid te vertellen. Bob vraagt de buildcommando's apart op, zonder dat er iets wordt afgekapt. Het installatiecommando schreef een credential naar een configuratiebestand, en die staat nog steeds in de laag die dat commando heeft gemaakt.
-
Waarom verwijderen niet hielp
Even stilstaan bij het mechanisme voordat Bob gebruikt wat hij heeft gevonden.
-
Controleren wat het token opent
Een credential is alleen zoveel waard als wat hij kan bereiken. Bob vraagt Cindralts package-index van wie dit token is en wat het mag doen. Het antwoord is erger dan één enkele service. Het token kan publiceren naar elk package waarop Cindralt bouwt, en het verloopt nooit.
-
Wat dat token waard is
Bob hoeft Cindralts servers niet nog eens aan te raken. Met publish-rechten op elk package waarop het bedrijf bouwt, kan de volgende versie van elke interne library van hem zijn, en die wordt opgehaald door elke build die daarna draait.
-
De index signaleert een publicatie
Cindralts package-index logt elke geauthenticeerde aanroep. 's Nachts registreerde het dat het ci-publisher-token werd gebruikt vanaf een adres dat van niemand binnen het bedrijf is.
-
Bevestig het vanuit de image
Alice controleert de bewering zelf tegen het gepubliceerde artefact, met precies wat een buitenstaander zou hebben: de publieke tag en een standaard Docker-client.
Dekking van beveiligingsframeworks
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