
Több mint 20 éve dolgozom az IT területén, de valahogy a konténerekhez még nem jutottam el. Elméletben értettem, hogyan működnek, de mivel soha nem találkoztam velük gyakorlatban, nem voltam biztos benne, hogyan is működnek pontosan a gépezetek a kapott információk alapján.
Emellett fogalmam sem volt arról, hogyan állnak a biztonsággal. De ismét, az elmélet szépen hangzik, és az a régi dal, hogy "a biztonság növekedésével csökken a használhatóság", mindig ott motoszkált a fejemben. Így gondoltam, ha ennyire könnyű a konténerekkel dolgozni, akkor a biztonságuk túl alacsony szintű. Mint kiderült, igazam volt.
Gyors kezdetképpen beiratkoztam egy 2020-as tanfolyamra, amelynek címe "».
A kurzust Sheila A. Berta és Sol Ozzan vezette, és azonnal a Docker konténerek működésének leírásával kezdődött, valamint azzal, hogy milyen utat járnak be a Kubernetes telepítésekor. Ez teljesen gyakorlati foglalkozás volt - a diákoknak előzőleg telepíteniük kellett a Docker-t és a microk8s-t a gépeikre - remek mód arra, hogy lássák az eszközök közötti interakciót, megtalálják a gyenge pontokat, és ami a legfontosabb, megpróbálják azokat blokkolni.
Sajnos, bár a kurzusok azt ígérték, hogy két nap alatt "herceggé" válok, éreztem, hogy minden csak most kezdődik, és még sokat kell tanulnom.

Mielőtt belemerülnék a magas szintű megfigyeléseimbe, fontos megmagyarázni, mi is az a konténer. A fejlesztés világában normális helyzetnek számít, hogy a saját gépén írt kód tökéletesen működik, de amikor megpróbálja futtatni valahol egy szerveren – egyszerűen nem működik. A konténerek azt a problémát próbálják leküzdeni, hogy autonóm gépeket kínálnak, amelyeket könnyen át lehet vinni egyik szerverről a másikra, biztos tudva, hogy mindig működni fognak. Ahogy a neve is mutatja, tartalmazza a működéshez szükséges kódot, könyvtárakat és egyéb szoftvereket. A Kubernetes ezzel szemben egy Alapvetően ezzel a segítségével zökkenőmentesen kezelhetünk száz vagy akár ezer különböző konténert.
Alább néhány következtetésem a vörös és kék csapat szemszögéből.
Vörös csapat
A konténerek többsége root módon fut.: ez azt jelenti, hogy ha megkompromittálja a konténert, akkor teljes hozzáférést kap a konténerhez. Ez jelentősen megkönnyíti a további lépéseket.
A docker.sock konténeren belüli bekötése veszélyes: ha root hozzáférést szerzett a konténeren belül, és Docker-t is telepített a Docker socket-tel rendelkező konténerben (/var/run/docker.sock), akkor potenciálisan lehetősége van az egész klaszter feltérképezésére, beleértve bármely másik konténerhez való hozzáférést is. Az ilyen hozzáférést se hálózati elszigetelés, se más módon nem lehet megakadályozni.
A környezeti változók gyakran titkos adatokat tartalmaznak: a legtöbb esetben az emberek jelszavakat küldenek a konténerbe hagyományos környezeti változókon keresztül. Tehát, ha hozzáférése van a fiókhoz, akkor megnézheti ezeket a környezeti változókat, hogy később kibővítse a jogosultságait.
A Docker API rengeteg információt adhat ki: alapértelmezett beállítások mellett a Docker API engedélyezés nélkül működik, és rengeteg információt adhat ki. A Shodan segítségével könnyen találhat egy listát a nyitott portokról, majd részletes információt szerezhet a klaszterről — és teljes körű átveheti azt. A TrendMicro erről írt .
Kék csapat
Ne futtassa a konténerek tartalmát root-ként: bár root-ként könnyebb futtatni, ezt nem szabad tenni. Ehelyett futtassa az alkalmazásokat csökkentett jogosultságokkal, beállítva az uid-t vagy a --user paraméter használatával a CLI-ben, vagy USER megadása a Dockerfile-ban.
Ne engedje a programok telepítését a konténereken belül: szinte minden támadás valaminek a telepítésével kezdődik. Kezdve az nmap-től és az ifconfig-tól, mind a Dockerig (a konténeren belül), valaminek a telepítése a konténerben szokásos dolog volt. Ugyanazon okból mindig blokkolni kell az összes nem használt portot. Ez szintén segít megakadályozni a vezérlő parancsok átadását gépe megfertőződésekor. A programok telepítése mellett érdemes biztosítani, hogy a konténerben csak a feladat végrehajtásához szükséges minimális számú alkalmazás legyen telepítve.
Védekezzen a docker.sock ellen: védeni kell, mivel ezen a socketen keresztül történik a kommunikáció a konténer és a klaszter között. Mivel nem szeretnék a részletekbe belemenni ebben a cikkben, olvassa el , hogy mi történhet, és hogyan lehet ezeket mind blokkolni.
Használja a Docker titkokat a környezeti változók helyett: Vannak titkok . Bár ez nem biztonságos, mégis jobb, mint a környezeti változók a titkos adatok konténerbe való átadásához.
Ha az írás felkeltette az érdeklődését a konténerek iránt – elég könnyen telepíthető a Docker vagy a microk8s (a Kubernetes kisebb változata). Itt találhatóak a Docker telepítési útmutatói Linuxra és MacOS-ra, valamint — a microk8s telepítési útmutatói Windowsra, Linuxra és MacOS-ra.
A telepítés után megismerheti a Docker-től, hasonló opció és a microk8s-hez.
Ha van kedve vagy szüksége van egy átfogó Docker tanfolyam elvégzésére, ahol gyakorló szakemberek elemzik az összes eszközét: az alapvető absztrakcióktól a hálózati beállításokig, a különböző operációs rendszerek és programozási nyelvek finomságaiig, próbálja ki a "". Megismerkedhet a technológiával, és megértheti, hol és hogyan érdemes a Dockert használni. Emellett megkapja a legjobb gyakorlatokat — jobb biztonságban és gyakorlóktól kapott támogatással tanulni a tapasztalatokkal, mint saját tapasztalatokon keresztül.
Forrás: habr.com
