Paggalugad sa (nawawalang) seguridad ng karaniwang mga pag-install ng Docker at Kubernetes

Paggalugad sa (nawawalang) seguridad ng karaniwang mga pag-install ng Docker at Kubernetes
Mahigit 20 taon na akong nagtatrabaho sa IT, ngunit kahit papaano ay hindi ako nakalibot sa mga lalagyan. Sa teorya, naunawaan ko kung paano sila nakaayos at kung paano sila nagtrabaho. Ngunit dahil hindi ko pa sila nakatagpo sa pagsasanay, hindi ako sigurado kung gaano eksaktong umikot at umikot ang mga gear sa ilalim ng kanilang hood.

At saka, wala akong ideya kung paano ang kanilang seguridad. Ngunit muli, ang teorya ay maganda ang tunog, at ang lumang kanta na "habang tumataas ang seguridad, bumababa ang kakayahang magamit" na natigil sa aking ulo. Kaya naisip ko na dahil ang lahat ay napakadaling gawin sa mga lalagyan, kung gayon ang kaligtasan doon ay mas mababa sa par. As it turns out, tama ako.

Para mabilis na magsimula, nag-sign up ako para sa mga kurso Itim na Hat 2020 na pinamagatang "Mula sa basahan hanggang sa kayamanan: pagtagos at proteksyon ng mga kapaligiran ng Docker Swarm at Kubernetes'.

Ang kurso, na itinuro nina Sheila A. Berta at Sol Ozzan, ay nagsimula kaagad sa isang paglalarawan kung paano gumagana ang mga container ng Docker at ang paglalakbay na kanilang ginagawa kapag na-deploy sa Kubernetes. Isa itong ganap na hands-on na klase - kinailangan ng mga mag-aaral na mag-install ng Docker at microk8s sa kanilang mga makina bago ang klase - isang mahusay na paraan upang makita kung paano nakikipag-ugnayan ang mga tool sa isa't isa, makahanap ng mga mahihinang punto at, higit sa lahat, subukang harangan ang mga ito.

Sa kasamaang palad, kahit na ang mga kurso ay nangako na maging isang "prinsipe" pagkatapos ng dalawang araw, naramdaman kong nagsisimula pa lang ang lahat, at marami pa akong dapat matutunan.

Paggalugad sa (nawawalang) seguridad ng karaniwang mga pag-install ng Docker at Kubernetes

Bago sumabak sa aking matayog na obserbasyon, mahalagang ipaliwanag kung ano ang lalagyan. Sa mundo ng pag-unlad, itinuturing na normal para sa code na nakasulat sa iyong personal na makina upang gumana nang perpekto, ngunit kapag sinubukan mong patakbuhin ito sa isang server sa isang lugar, hindi ito gumagana. Sinisikap ng mga container na malampasan ang problemang ito sa pamamagitan ng pagbibigay ng mga self-contained na makina na madali mong mailipat mula sa isang server patungo sa isa pa, alam na palaging gagana ang mga ito. Gaya ng ipinahihiwatig ng pangalan, naglalaman ang mga ito ng code, mga aklatan, at iba pang software na kailangan upang magawa ang trabaho. Ang Kubernetes, sa kabilang banda, ay platform ng orkestra para sa mga lalagyan. Sa prinsipyo, maaari itong magamit upang maayos na pamahalaan ang daan-daan o libu-libong iba't ibang mga lalagyan.

Nasa ibaba ang ilan sa aking mga natuklasan mula sa pananaw ng pula at asul na koponan.

Pulang Koponan

Karamihan sa content ng container ay tumatakbo bilang root: Nangangahulugan ito na kung nakompromiso ang container, magkakaroon ka ng ganap na access sa container. Ginagawa nitong mas madali ang mga susunod na hakbang.

Ang mounting docker.medyas sa loob ng lalagyan ay mapanganib: Kung mayroon kang ugat sa loob ng container at naka-install din ang Docker sa loob ng container na mayroong Docker socket (/var/run/docker.sock), may potensyal kang i-explore ang buong cluster, kabilang ang access sa anumang iba pang container. Ang ganitong pag-access ay hindi mapipigilan ng network isolation o iba pang paraan.

Ang mga variable ng kapaligiran ay kadalasang naglalaman ng lihim na data: Sa karamihan ng mga kaso, ang mga tao ay nagpapadala ng mga password sa lalagyan gamit ang mga normal na variable ng kapaligiran. Kaya kung mayroon kang access sa account, maaari mong tiktikan ang mga variable ng kapaligiran na ito upang palawakin ang iyong mga kapangyarihan sa ibang pagkakataon.

Ang Docker API ay maaaring magbigay ng maraming impormasyon: Ang Docker API, kapag na-configure bilang default, ay tumatakbo nang walang pahintulot at maaaring makagawa ng isang toneladang impormasyon. Gamit ang Shodan, madali kang makakahanap ng listahan ng mga bukas na port, pagkatapos ay makakuha ng detalyadong impormasyon tungkol sa cluster - at magpatuloy sa buong pagkuha nito. Sumulat ang TrendMicro tungkol dito pinaka-kagiliw-giliw na artikulo.

Blue Team

Huwag patakbuhin ang mga nilalaman ng lalagyan bilang ugat: Kahit na mas madaling tumakbo bilang root, hindi mo dapat gawin ito. Sa halip, magpatakbo ng mga application na may mga pahintulot sa pag-reset sa pamamagitan ng pagpapakita ng uid, alinman sa paggamit ng --user na opsyon kapag tumatakbo mula sa CLI, o sa pamamagitan ng pagtukoy ng USER sa Dockerfile.

Huwag payagan ang software na ma-install sa mga container: Halos bawat pag-atake ay nagsisimula sa pagtatanim ng isang bagay. Mula sa nmap hanggang ifconfig hanggang sa Docker mismo (sa loob ng isang lalagyan), ang pag-install ng anuman sa isang lalagyan ay naging pangkaraniwan. Para sa parehong dahilan, dapat mong palaging harangan ang lahat ng hindi nagamit na port. Nakakatulong din ito na maiwasan ang pagpapadala ng mga control command kapag na-infect ang iyong makina. Bilang karagdagan sa pagpigil sa pag-install ng mga programa, ito ay nagkakahalaga ng pagtiyak na ang pinakamababang bilang ng mga application na kinakailangan upang makumpleto ang gawain ay naka-install sa mismong lalagyan.

Protektahan ang docker.sock: Dapat itong protektahan dahil ang komunikasyon sa pagitan ng lalagyan at ng cluster ay pinoproseso sa pamamagitan ng socket na ito. Dahil ayoko nang magdetalye sa artikulong ito, basahin mo tala mula sa Docker, kung ano ang maaaring mangyari, at kung paano i-block ang lahat ng ito.

Gumamit ng mga lihim ng Docker sa halip na mga variable ng kapaligiran: May mga sikreto mula noong mga 2017. Bagama't hindi ito secure, mas mahusay pa rin ito kaysa sa mga variable ng kapaligiran para sa pagpasa ng lihim na data sa container.

Kung napukaw ng artikulo ang iyong interes sa mga container, madali mong mai-install ang Docker o microk8s (isang maliit na bersyon ng Kubernetes). Dito may mga tagubilin para sa pag-install ng Docker para sa Linux at MacOS, at dito — mga tagubilin para sa pag-install ng microk8s para sa Windows, Linux at MacOS.

Pagkatapos ng pag-install maaari kang pumunta ito ay isang mabilis na gabay sa pagsisimula mula sa Docker, katulad na opsyon inaalok at para sa microk8s.

Kung nais mo o kailangan mong kumuha ng isang komprehensibong kurso sa Docker, kung saan sinusuri ng mga praktikal na tagapagsalita ang lahat ng mga tool nito: mula sa mga pangunahing abstraction hanggang sa mga parameter ng network, mga nuances ng pagtatrabaho sa iba't ibang mga operating system at programming language, pagkatapos ay subukan ang "Docker video course" Magiging pamilyar ka sa teknolohiya at mauunawaan mo kung saan at kung paano pinakamahusay na gamitin ang Docker. At kasabay nito, kumuha ng mga kaso ng pinakamahusay na kasanayan - mas mahusay na matuto nang ligtas at sa suporta ng mga practitioner mula sa mga kuwento tungkol sa mga rake kaysa sa personal na mula sa mga rake mismo na may mga studded handle.

Pinagmulan: www.habr.com

Magdagdag ng komento