Utforska (saknade) säkerheten för typiska Docker- och Kubernetes-installationer

Utforska (saknade) säkerheten för typiska Docker- och Kubernetes-installationer
Jag har jobbat inom IT i mer än 20 år, men på något sätt kom jag aldrig till containers. I teorin förstod jag hur de var uppbyggda och hur de fungerade. Men eftersom jag aldrig hade stött på dem i praktiken var jag inte säker på hur exakt växlarna under huven vände och vände.

Dessutom hade jag ingen aning om hur deras säkerhet var. Men återigen låter teorin bra, och den gamla låten "när säkerheten ökar, minskar användbarheten" fastnade i mitt huvud. Så jag tänkte att eftersom allt är så lätt att göra med containrar så är säkerheten där under pari. Det visade sig att jag hade rätt.

För att få en snabb start anmälde jag mig till kurser Svart hatt 2020 med titeln "Från trasor till rikedomar: penetration och skydd av Docker Swarm och Kubernetes miljöer".

Kursen, undervisad av Sheila A. Berta och Sol Ozzan, började omedelbart med en beskrivning av hur Docker-containrar fungerar och den resa de tar när de distribueras till Kubernetes. Detta var en helt praktisk klass - eleverna var tvungna att installera Docker och microk8s på sina maskiner innan klassen - ett bra sätt att se hur verktygen interagerar med varandra, hitta svaga punkter och, viktigast av allt, försöka blockera dem.

Tyvärr, även om kurserna lovade att bli en "prins" efter två dagar, kände jag att allt bara började, och jag hade fortfarande mycket att lära.

Utforska (saknade) säkerheten för typiska Docker- och Kubernetes-installationer

Innan jag dyker in i mina höga observationer är det viktigt att förklara vad en container är. I utvecklingsvärlden anses det vara normalt att koden som skrivits på din personliga maskin fungerar perfekt, men när du försöker köra den på en server någonstans så fungerar det helt enkelt inte. Behållare försöker övervinna detta problem genom att tillhandahålla fristående maskiner som du enkelt kan flytta från en server till en annan, med vetskapen om att de alltid kommer att fungera. Som namnet antyder innehåller de koden, biblioteken och annan programvara som behövs för att få jobbet gjort. Kubernetes, å andra sidan, är det orkestreringsplattform för containrar. I princip kan den användas för att sömlöst hantera hundratals eller tusentals olika containrar.

Nedan följer några av mina fynd ur det röda och blå lagets perspektiv.

Röda laget

Det mesta innehållet i behållaren körs som root: Det betyder att om behållaren äventyras har du full åtkomst till behållaren. Detta gör nästa steg mycket enklare.

Att montera docker.sock inuti en container är farligt: Om du har root inuti en behållare och även installerat Docker i en behållare som har en Docker-socket (/var/run/docker.sock), har du potential att utforska hela klustret, inklusive tillgång till vilken annan behållare som helst. Sådan åtkomst kan inte förhindras genom nätverksisolering eller på annat sätt.

Miljövariabler innehåller ofta hemliga data: I de flesta fall skickar människor lösenord till behållaren med vanliga miljövariabler. Så om du har tillgång till kontot kan du spionera på dessa miljövariabler för att senare utöka dina befogenheter.

Docker API kan ge ut mycket information: Docker API, när det är konfigurerat som standard, körs utan auktorisering och kan producera massor av information. Med Shodan kan du enkelt hitta en lista över öppna portar, sedan få detaljerad information om klustret - och fortsätta till dess fulla infångning. TrendMicro skrev om detta интереснейшую статью.

Blå laget

Kör inte behållarens innehåll som root: Även om det är lättare att köra som root, bör du inte göra det. Kör istället applikationer med återställningsbehörigheter genom att visa uid, antingen med alternativet --user när du kör från CLI, eller genom att ange USER i Dockerfilen.

Tillåt inte att programvara installeras i behållare: Nästan varje attack börjar med att man planterar något. Från nmap till ifconfig till Docker själv (inuti en container) har det varit vanligt att installera vad som helst i en container. Av samma anledning bör du alltid blockera alla oanvända portar. Detta hjälper också till att förhindra att kontrollkommandon överförs när din maskin är infekterad. Förutom att förhindra installation av program är det värt att se till att det minsta antalet applikationer som krävs för att slutföra uppgiften är installerade i själva behållaren.

Skydda docker.sock: Den måste skyddas eftersom kommunikationen mellan behållaren och klustret bearbetas genom denna socket. Eftersom jag inte vill gå in på detaljer i den här artikeln, läs anteckning från Docker, vad som kan hända, och även hur man blockerar allt.

Använd Docker-hemligheter istället för miljövariabler: Det finns hemligheter sedan cirka 2017. Även om detta inte är säkert är det fortfarande bättre än miljövariabler för att skicka hemlig data till behållaren.

Om artikeln har väckt ditt intresse för containrar kan du enkelt installera Docker eller microk8s (en liten version av Kubernetes). Här det finns instruktioner för att installera Docker för Linux och MacOS, och här — instruktioner för installation av microk8s för Windows, Linux och MacOS.

Efter installationen kan du gå detta är en snabbstartsguide från Docker, liknande alternativ erbjuds och för microk8s.

Om du vill eller behöver ta en omfattande kurs om Docker, där praktiska talare undersöker alla dess verktyg: från grundläggande abstraktioner till nätverksparametrar, nyanser av att arbeta med olika operativsystem och programmeringsspråk, försök sedan "Docker videokurs" Du kommer att bli bekant med tekniken och förstå var och hur du bäst använder Docker. Och samtidigt få bästa praxis - det är bättre att lära sig i säkerhet och med stöd av utövare från berättelser om krattor än personligen från själva krattor med dubbade handtag.

Källa: will.com

Lägg en kommentar