Utforsker den (manglende) sikkerheten til typiske Docker- og Kubernetes-installasjoner

Utforsker den (manglende) sikkerheten til typiske Docker- og Kubernetes-installasjoner
Jeg har jobbet med IT i mer enn 20 år, men på en eller annen måte kom jeg aldri til containere. I teorien forsto jeg hvordan de var strukturert og hvordan de fungerte. Men siden jeg aldri hadde møtt dem i praksis, var jeg ikke sikker på hvordan tannhjulene under panseret deres snudde og snudde.

Dessuten ante jeg ikke hvordan sikkerheten deres var. Men igjen, teorien høres fin ut, og den gamle sangen «når sikkerheten øker, reduseres brukervennligheten» satt fast i hodet mitt. Så jeg tenkte at siden alt er så enkelt å gjøre med containere, så er sikkerheten der under pari. Som det viser seg, hadde jeg rett.

For å komme raskt i gang meldte jeg meg på kurs Black Hat 2020 med tittelen "Fra filler til rikdom: penetrering og beskyttelse av Docker Swarm- og Kubernetes-miljøer'.

Kurset, undervist av Sheila A. Berta og Sol Ozzan, begynte umiddelbart med en beskrivelse av hvordan Docker-containere fungerer og reisen de tar når de distribueres til Kubernetes. Dette var en helt praktisk klasse - elevene måtte installere Docker og microk8s på maskinene sine før timen - en fin måte å se hvordan verktøyene samhandler med hverandre, finne svake punkter og, viktigst av alt, prøve å blokkere dem.

Dessverre, selv om kursene lovet å bli en "prins" etter to dager, følte jeg at alt bare begynte, og jeg hadde fortsatt mye å lære.

Utforsker den (manglende) sikkerheten til typiske Docker- og Kubernetes-installasjoner

Før du dykker ned i mine høye observasjoner, er det viktig å forklare hva en container er. I utviklingsverdenen anses det som normalt at koden som er skrevet på din personlige maskin fungerer perfekt, men når du prøver å kjøre den på en server et sted, fungerer det rett og slett ikke. Containere prøver å overvinne dette problemet ved å tilby selvstendige maskiner som du enkelt kan flytte fra en server til en annen, vel vitende om at de alltid vil fungere. Som navnet antyder, inneholder de koden, bibliotekene og annen programvare som trengs for å få jobben gjort. Kubernetes, derimot, er orkestreringsplattform for containere. I prinsippet kan den brukes til sømløst å håndtere hundrevis eller tusenvis av forskjellige beholdere.

Nedenfor er noen av mine funn fra det røde og blå lagets perspektiv.

Rødt lag

Det meste av beholderinnholdet kjører som root: Dette betyr at hvis beholderen er kompromittert, vil du ha full tilgang til beholderen. Dette gjør de neste trinnene mye enklere.

Det er farlig å montere docker.sock inne i en container: Hvis du har root inne i en container og også installert Docker inne i en container som har en Docker-socket (/var/run/docker.sock), har du potensial til å utforske hele klyngen, inkludert tilgang til en hvilken som helst annen container. Slik tilgang kan ikke forhindres ved nettverksisolering eller på andre måter.

Miljøvariabler inneholder ofte hemmelige data: I de fleste tilfeller sender folk passord til beholderen ved å bruke vanlige miljøvariabler. Så hvis du har tilgang til kontoen, kan du spionere på disse miljøvariablene for senere å utvide kreftene dine.

Docker API kan gi ut mye informasjon: Docker API, når den er konfigurert som standard, kjører uten autorisasjon og kan produsere massevis av informasjon. Ved å bruke Shodan kan du enkelt finne en liste over åpne porter, deretter få detaljert informasjon om klyngen – og fortsette til den fulle fangsten. TrendMicro skrev om dette mest interessante artikkelen.

Blått lag

Ikke kjør innholdet i beholderen som root: Selv om det er lettere å kjøre som root, bør du ikke gjøre det. Kjør i stedet applikasjoner med tilbakestillingstillatelser ved å vise uid, enten ved å bruke --user-alternativet når du kjører fra CLI, eller ved å spesifisere USER i Dockerfilen.

Ikke la programvare installeres i containere: Nesten hvert angrep starter med å plante noe. Fra nmap til ifconfig til selve Docker (inne i en container), har det vært vanlig å installere hva som helst i en container. Av samme grunn bør du alltid blokkere alle ubrukte porter. Dette bidrar også til å forhindre at kontrollkommandoer overføres når maskinen din er infisert. I tillegg til å forhindre installasjon av programmer, er det verdt å sørge for at minimumsantallet av applikasjoner som kreves for å fullføre oppgaven, er installert i selve beholderen.

Beskytt docker.sock: Den må beskyttes fordi kommunikasjon mellom beholderen og klyngen behandles gjennom denne kontakten. Siden jeg ikke ønsker å gå i detalj i denne artikkelen, les notat fra Docker, hva som kan skje, og også hvordan blokkere det hele.

Bruk Docker-hemmeligheter i stedet for miljøvariabler: Det er hemmeligheter siden ca 2017. Selv om dette ikke er sikkert, er det fortsatt bedre enn miljøvariabler for å sende hemmelige data til beholderen.

Hvis artikkelen har vekket din interesse for containere, kan du enkelt installere Docker eller microk8s (en liten versjon av Kubernetes). Her det er instruksjoner for å installere Docker for Linux og MacOS, og her — instruksjoner for installasjon av microk8s for Windows, Linux og MacOS.

Etter installasjonen kan du gå dette er en hurtigstartguide fra Docker, lignende alternativ tilbys og for microk8s.

Hvis du vil eller trenger å ta et omfattende kurs om Docker, der praktiske foredragsholdere undersøker alle verktøyene: fra grunnleggende abstraksjoner til nettverksparametere, nyanser av å jobbe med ulike operativsystemer og programmeringsspråk, så prøv "Docker videokurs" Du vil bli kjent med teknologien og forstå hvor og hvordan du best kan bruke Docker. Og samtidig få best practice-cases - det er bedre å lære i sikkerhet og med støtte fra utøvere fra historier om raker enn personlig fra rakene selv med pigghåndtak.

Kilde: www.habr.com

Legg til en kommentar