Raziskovanje (manjkajoče) varnosti tipičnih namestitev Docker in Kubernetes

Raziskovanje (manjkajoče) varnosti tipičnih namestitev Docker in Kubernetes
V IT-ju delam že več kot 20 let, a do zabojnikov nekako nikoli nisem prišel. V teoriji sem razumel, kako so strukturirani in kako delujejo. A ker jih v praksi še nisem srečal, nisem bil prepričan, kako natančno se vrtijo in obračajo zobniki pod njihovim pokrovom.

Poleg tega nisem imel pojma, kakšna je njihova varnost. Ampak spet, teorija zveni lepo in stara pesem "ko se varnost povečuje, se uporabnost zmanjšuje" mi je ostala v glavi. Zato sem mislil, da ker je vse tako enostavno narediti s kontejnerji, potem je varnost tam pod nivojem. Kot se je izkazalo, sem imel prav.

Za hiter začetek sem se prijavil na tečaje Črna kapa 2020 z naslovom "Od cunj do bogastva: prodor in zaščita okolij Docker Swarm in Kubernetes".

Tečaj, ki sta ga vodila Sheila A. Berta in Sol Ozzan, se je takoj začel z opisom delovanja Dockerjevih vsebnikov in poti, ki jo opravijo, ko so nameščeni v Kubernetes. To je bil popolnoma praktičen tečaj – študentje so morali pred predavanjem na svoje računalnike namestiti Docker in microk8s – odličen način, da vidijo, kako orodja medsebojno delujejo, najdejo šibke točke in, kar je najpomembneje, poskušajo jih blokirati.

Na žalost, čeprav so tečaji obljubljali, da bom po dveh dneh postal "princ", sem čutil, da se vse šele začenja in se moram še veliko naučiti.

Raziskovanje (manjkajoče) varnosti tipičnih namestitev Docker in Kubernetes

Preden se potopim v svoja vzvišena opažanja, je pomembno razložiti, kaj je vsebnik. V razvojnem svetu velja, da je normalno, da koda, napisana na vašem osebnem računalniku, deluje brezhibno, ko pa jo poskušate zagnati nekje na strežniku, preprosto ne deluje. Vsebniki poskušajo premagati to težavo z zagotavljanjem samostojnih strojev, ki jih lahko enostavno premaknete iz enega strežnika v drugega, saj veste, da bodo vedno delovali. Kot že ime pove, vsebujejo kodo, knjižnice in drugo programsko opremo, potrebno za opravljanje dela. Kubernetes pa je orkestracijska platforma za kontejnerje. Načeloma se lahko uporablja za brezhibno upravljanje na stotine ali tisoče različnih vsebnikov.

Spodaj je nekaj mojih ugotovitev z vidika rdeče-modre ekipe.

Rdeča ekipa

Večina vsebine vsebnika se izvaja kot root: To pomeni, da boste imeli poln dostop do vsebnika, če je vsebnik ogrožen. Tako so naslednji koraki veliko lažji.

Montaža docker.sock znotraj vsebnika je nevarna: Če imate root znotraj vsebnika in ste tudi namestili Docker znotraj vsebnika, ki ima vtičnico Docker (/var/run/docker.sock), imate potencial za raziskovanje celotne gruče, vključno z dostopom do katerega koli drugega vsebnika. Takšnega dostopa ni mogoče preprečiti z izolacijo omrežja ali drugimi sredstvi.

Spremenljivke okolja pogosto vsebujejo tajne podatke: V večini primerov ljudje pošiljajo gesla vsebniku z običajnimi spremenljivkami okolja. Torej, če imate dostop do računa, lahko vohunite za temi spremenljivkami okolja, da pozneje razširite svoja pooblastila.

Docker API lahko ponudi veliko informacij: Docker API, ko je privzeto konfiguriran, deluje brez avtorizacije in lahko proizvede ogromno informacij. Z uporabo Shodana lahko preprosto najdete seznam odprtih vrat, nato dobite podrobne informacije o gruči - in nadaljujete z njenim popolnim zajemanjem. O tem je pisal TrendMicro najbolj zanimiv članek.

Modra ekipa

Ne izvajajte vsebine vsebnika kot root: Čeprav je lažje zagnati kot root, tega ne bi smeli početi. Namesto tega zaženite aplikacije z dovoljenji za ponastavitev tako, da prikažete uid, bodisi z uporabo možnosti --user, ko se izvaja iz CLI, ali tako, da podate USER v datoteki Docker.

Ne dovolite namestitve programske opreme v vsebnike: Skoraj vsak napad se začne s podtikanjem nečesa. Od nmapa do ifconfiga do samega Dockerja (znotraj vsebnika) je bilo nameščanje česar koli v vsebnik običajno. Iz istega razloga morate vedno blokirati vsa neuporabljena vrata. To tudi pomaga preprečiti prenos nadzornih ukazov, ko je vaš stroj okužen. Poleg preprečevanja namestitve programov je vredno poskrbeti, da je v samem vsebniku nameščeno najmanjše število aplikacij, potrebnih za dokončanje naloge.

Zaščitite docker.sock: Mora biti zaščiten, ker komunikacija med vsebnikom in gručo poteka prek te vtičnice. Ker se v tem članku ne želim spuščati v podrobnosti, preberite opomba iz Dockerja, kaj se lahko zgodi in kako vse to blokirati.

Namesto spremenljivk okolja uporabite skrivnosti Docker: Obstajajo skrivnosti približno od leta 2017. Čeprav to ni varno, je vseeno boljše od spremenljivk okolja za posredovanje skrivnih podatkov vsebniku.

Če je članek vzbudil vaše zanimanje za vsebnike, lahko preprosto namestite Docker ali microk8s (majhno različico Kubernetesa). Tukaj obstajajo navodila za namestitev Dockerja za Linux in MacOS ter tukaj — navodila za namestitev microk8s za Windows, Linux in MacOS.

Po namestitvi lahko greš to je vodnik za hiter začetek iz Dockerja, podobna možnost ponujen in za microk8s.

Če želite ali morate opraviti obsežen tečaj o Dockerju, v katerem praktični govorci preučijo vsa njegova orodja: od osnovnih abstrakcij do omrežnih parametrov, odtenkov pri delu z različnimi operacijskimi sistemi in programskimi jeziki, potem poskusite “Video tečaj Docker" Spoznali boste tehnologijo in razumeli, kje in kako najbolje uporabiti Docker. In hkrati pridobite primere najboljše prakse - bolje se je učiti na varnem in ob podpori praktikov iz zgodb o grabljah kot osebno od samih grabljic s koničastimi ročaji.

Vir: www.habr.com

Dodaj komentar