Istraživanje (nedostajuće) sigurnosti tipičnih Docker i Kubernetes instalacija

Istraživanje (nedostajuće) sigurnosti tipičnih Docker i Kubernetes instalacija
Radim u IT-ju više od 20 godina, ali nekako nisam došao do kontejnera. U teoriji sam shvatio kako su strukturirani i kako rade. Ali budući da ih nikad nisam susreo u praksi, nisam bio siguran kako se točno okreću i okreću zupčanici ispod njihove haube.

Osim toga, nisam imao pojma kakva je njihova sigurnost. Ali opet, teorija zvuči lijepo, a stara pjesma "kako se sigurnost povećava, upotrebljivost opada" ostala mi je u glavi. Pa sam pomislio da, budući da je sve tako lako učiniti s kontejnerima, onda je sigurnost ispod razine. Ispostavilo se da sam bio u pravu.

Kako bih brzo počeo, prijavio sam se na tečajeve Crni šešir 2020 pod nazivom "Od krpa do bogatstva: prodor i zaštita okruženja Docker Swarm i Kubernetes".

Tečaj, koji su vodili Sheila A. Berta i Sol Ozzan, odmah je započeo opisom načina na koji Docker kontejneri rade i putovanja koje prolaze kada se postave u Kubernetes. Ovo je bila potpuno praktična nastava - studenti su morali instalirati Docker i microk8s na svoje strojeve prije nastave - odličan način da vide kako alati međusobno djeluju, pronađu slabe točke i, što je najvažnije, pokušaju ih blokirati.

Nažalost, iako su tečajevi obećavali da ću nakon dva dana postati “princ”, osjećala sam da sve tek počinje i da imam još puno toga za naučiti.

Istraživanje (nedostajuće) sigurnosti tipičnih Docker i Kubernetes instalacija

Prije nego što se upustim u svoja uzvišena zapažanja, važno je objasniti što je spremnik. U svijetu razvoja smatra se normalnim da kod napisan na vašem osobnom računalu radi savršeno, ali kada ga pokušate pokrenuti na nekom poslužitelju, jednostavno ne radi. Kontejneri pokušavaju prevladati ovaj problem pružajući samostalne strojeve koje možete lako premjestiti s jednog poslužitelja na drugi, znajući da će uvijek raditi. Kao što naziv sugerira, oni sadrže kôd, biblioteke i drugi softver potreban za obavljanje posla. Kubernetes, s druge strane, jest platforma za orkestraciju kontejnera. U principu, može se koristiti za besprijekorno upravljanje stotinama ili tisućama različitih spremnika.

Ispod su neka od mojih otkrića iz perspektive crveno-plavog tima.

Crveni tim

Većina sadržaja spremnika radi kao root: To znači da ako je spremnik ugrožen, imat ćete puni pristup spremniku. To znatno olakšava sljedeće korake.

Montaža docker.sock unutar kontejnera je opasna: Ako imate root unutar spremnika i također ste instalirali Docker unutar spremnika koji ima Docker utičnicu (/var/run/docker.sock), imate potencijal istražiti cijeli klaster, uključujući pristup bilo kojem drugom spremniku. Takav se pristup ne može spriječiti izolacijom mreže ili drugim sredstvima.

Varijable okruženja često sadrže tajne podatke: U većini slučajeva ljudi šalju lozinke u spremnik koristeći normalne varijable okruženja. Dakle, ako imate pristup računu, možete špijunirati ove varijable okoline kako biste kasnije proširili svoje ovlasti.

Docker API može dati mnogo informacija: Docker API, kada je konfiguriran prema zadanim postavkama, radi bez autorizacije i može proizvesti gomilu informacija. Koristeći Shodan, možete lako pronaći popis otvorenih portova, zatim dobiti detaljne informacije o klasteru - i nastaviti s njegovim punim snimanjem. O tome je pisao TrendMicro najzanimljiviji članak.

Plavi tim

Nemojte pokretati sadržaj spremnika kao root: Iako je lakše pokrenuti kao root, ne biste to trebali raditi. Umjesto toga, pokrenite aplikacije s dopuštenjima za poništavanje prikazivanjem uid-a, bilo korištenjem opcije --user kada se pokreće iz CLI-ja, bilo navođenjem USER u Dockerfile.

Nemojte dopustiti da se softver instalira u spremnike: Gotovo svaki napad počinje podmetanjem nečega. Od nmapa preko ifconfiga do samog Dockera (unutar spremnika), instaliranje bilo čega u spremniku bilo je uobičajeno. Iz istog razloga, uvijek biste trebali blokirati sve neiskorištene portove. Ovo također pomaže u sprječavanju prijenosa kontrolnih naredbi kada je vaš stroj zaražen. Osim sprječavanja instaliranja programa, vrijedi se pobrinuti da minimalni broj aplikacija potrebnih za izvršenje zadatka bude instaliran u samom spremniku.

Zaštiti docker.sock: Mora biti zaštićen jer se komunikacija između spremnika i klastera obrađuje kroz ovaj socket. Budući da ne želim ići u detalje u ovom članku, pročitajte bilješka iz Dockera, što se može dogoditi, i kako to sve blokirati.

Koristite Docker tajne umjesto varijabli okoline: Postoje tajne od otprilike 2017. Iako ovo nije sigurno, ipak je bolje od varijabli okruženja za prosljeđivanje tajnih podataka u spremnik.

Ako je članak pobudio vaš interes za kontejnere, možete jednostavno instalirati Docker ili microk8s (malu verziju Kubernetesa). Ovdje postoje upute za instaliranje Dockera za Linux i MacOS, i здесь — upute za instalaciju microk8s za Windows, Linux i MacOS.

Nakon instalacije možete ići ovo je vodič za brzi početak iz Dockera, slična opcija ponudio i za microk8s.

Ako želite ili trebate pohađati sveobuhvatan tečaj o Dockeru, u kojem praktični govornici ispituju sve njegove alate: od osnovnih apstrakcija do mrežnih parametara, nijansi rada s različitim operativnim sustavima i programskim jezicima, pokušajte “Docker video tečaj" Upoznat ćete se s tehnologijom i razumjeti gdje i kako najbolje koristiti Docker. I u isto vrijeme, nabavite primjere najbolje prakse - bolje je učiti u sigurnosti i uz podršku praktičara iz priča o grabljama nego osobno od samih grablji sa šiljastim drškama.

Izvor: www.habr.com

Dodajte komentar