Leren over (de ontbrekende) beveiliging van typische Docker- en Kubernetes-installaties

Leren over (de ontbrekende) beveiliging van typische Docker- en Kubernetes-installaties
Ik werk al meer dan 20 jaar in de IT, maar ik heb me nooit eerder aan containers gewaagd. In theorie begreep ik hoe ze functioneren en werken. Maar omdat ik ze nooit in de praktijk had gezien, was ik niet zeker hoe de tandwielen onder de motorkap precies draaiden.

Ik had ook geen idee hoe het met hun beveiliging zat. Maar nogmaals, de theorie klinkt mooi en het oude gezegde ‘naarmate de beveiliging toeneemt, neemt het gebruiksgemak af’ spookte door mijn hoofd. Dus dacht ik dat als alles zo gemakkelijk is met containers, de beveiliging er ondermaats zou zijn. Blijkbaar had ik gelijk.

Voor een snelle start schreef ik me in voor cursussen Black Hat 2020 met de titel “Van modder naar adel: penetratie en beveiliging van Docker Swarm en Kubernetes omgevingen».

De cursus, geleid door Sheila A. Berta en Sol Ozzan, begon meteen met een uitleg over hoe Docker-containers werken en welke stappen ze doorlopen bij implementatie in Kubernetes. Het was een volledig praktische sessie - studenten moesten voor de lessen Docker en microk8s op hun machines installeren - een geweldige manier om de interactie tussen de tools te zien, kwetsbaarheden te vinden en, nog belangrijker, te proberen deze te verhelpen.

Helaas, hoewel de cursussen beloofden na twee dagen een ‘prins’ te worden, had ik het gevoel dat alles nog maar net begon en dat ik nog veel moest leren.

Leren over (de ontbrekende) beveiliging van typische Docker- en Kubernetes-installaties

Voordat ik mijn hoge observaties deel, is het belangrijk te verklaren wat een container is. In de ontwikkelingswereld is het normaal dat code die op je persoonlijke machine perfect werkt, niet functioneert wanneer je het ergens op een server probeert te draaien. Containers proberen dit probleem op te lossen door autonome machines te bieden die je gemakkelijk van de ene server naar de andere kunt verplaatsen, met de zekerheid dat ze altijd zullen werken. Zoals de naam al suggereert, bevatten ze code, bibliotheken en andere software die nodig is voor de werking. Kubernetes daarentegen is een platform voor orchestration van containers. In principe kun je daarmee naadloos honderden of duizenden verschillende containers beheren.

Hieronder zijn enkele van mijn bevindingen vanuit het perspectief van het rode en blauwe team.

Rode team

De meeste inhoud van containers draait onder root: dit betekent dat als je de container compromitteert, je volledige toegang tot de container krijgt. Dit maakt de volgende stappen veel eenvoudiger.

Docker.sock in de container mounten is gevaarlijk.: als je roottoegang binnen de container hebt en ook Docker binnen de container hebt geïnstalleerd, die de Docker-socket (\/var\/run\/docker.sock) bevat, heb je de mogelijkheid om de hele cluster te verkennen, inclusief toegang tot elke andere container. Deze toegang kan niet worden voorkomen door netwerkisolatie of andere middelen.

Omgevingsvariabelen bevatten vaak gevoelige gegevens.: in de meeste gevallen sturen mensen wachtwoorden naar de container met behulp van gewone omgevingsvariabelen. Dus als je toegang hebt tot de account, kun je deze omgevingsvariabelen inzien om vervolgens je rechten uit te breiden.

De Docker API kan een hoop informatie prijsgeven.: de Docker API, als deze standaard is ingesteld, werkt zonder autorisatie en kan een hoop informatie prijsgeven. Met behulp van Shodan kun je gemakkelijk een lijst van open poorten vinden, gedetailleerde informatie over de cluster verkrijgen – en overgaan tot volledige controle. TrendMicro heeft hierover een interessant artikel geschreven..

Het blauwe team.

Voer de inhoud van containers niet onder root uit.: hoewel het eenvoudiger is om onder root uit te voeren, moet je dit niet doen. Voer in plaats daarvan applicaties uit met verlaagde rechten door uid weer te geven, of met de parameter –user wanneer je met de CLI werkt, of door USER in het Dockerfile op te geven.

Sta geen installatie van software in containers toe.: bijna elke aanval begint met het installeren van iets. Van nmap tot ifconfig en zelfs Docker (binnen de container), het installeren van iets in de container was gebruikelijk. Om deze reden moet je altijd alle ongebruikte poorten blokkeren. Dit helpt ook om te voorkomen dat er beheerscommando's worden verzonden bij besmetting van je machine. Naast het voorkomen van software-installaties, is het goed om ervoor te zorgen dat er in de container het minimale aantal applicaties is geïnstalleerd dat nodig is om de taak uit te voeren.

Bescherm docker.sock.: het moet worden beschermd, omdat deze socket de communicatie tussen de container en de cluster afhandelt. Aangezien ik niet wil ingaan op details in dit artikel, lees de notitie van Docker, wat er kan gebeuren, en hoe je dit alles kunt blokkeren.

Gebruik Docker-secreto's in plaats van omgevingsvariabelen: Er zijn secreto's sinds ongeveer 2017. Hoewel het niet veilig is, is het nog steeds beter dan omgevingsvariabelen voor het doorgeven van geheime gegevens in een container.

Als dit artikel je interesse in containers heeft gewekt, kun je Docker of microk8s (een kleine versie van Kubernetes) vrij eenvoudig installeren. Hier Er zijn instructies voor de installatie van Docker voor Linux en MacOS, en hier — instructies voor de installatie van microk8s voor Windows, Linux en MacOS.

Na de installatie kun je deze handleiding voor een snelle start van Docker volgen, een vergelijkbare optie wordt aangeboden is er ook voor microk8s.

Als je de wens of de noodzaak hebt om een uitgebreide cursus over Docker te volgen, waarin praktijksprekers alle tools bespreken: van de basisabstracties tot netwerkinstellingen, nuances van het werken met verschillende besturingssystemen en programmeertalen, probeer dan "Videocursus over Docker". Je maakt kennis met de technologie en begrijpt waar en hoe je Docker het beste kunt gebruiken. Bovendien ontvang je best practices - het is beter om veilig te leren en met ondersteuning van praktijkmensen op basis van verhalen over obstakels dan zelf op de obstakels met stekelige handvatten.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster