Siguran sam da vam se ovo desilo: pokušavate sastaviti kontejner za ličnu upotrebu, želite ga učiniti sigurnijim korištenjem neprivilegovani kontejneri I odjednom se nađete zarobljeni u lavirintu grešaka u dozvolama. Frustrirajuće je provoditi sate konfigurišući foldere u korisnikovom početnom direktoriju samo da biste otkrili da kontejner ne može pisati u njih ili da su, kada to učini, rezultirajuće datoteke na hostu oštećene. nemoguće upravljati jer pripadaju fantomskom korisniku.
Realnost je da, iako je kontejnerizacija ubrzala isporuku softvera, otvorila je vrata značajnim rizicima. Prema nedavnim podacima, velika većina produkcijskih slika nosi [nejasno - moguće "nejasno" ili "nejasno"] kritične ranjivostiZbog toga je sigurnost neizostavan stub. Ne radi se samo o sprečavanju hakerskih napada, već o razumijevanju kako sistem funkcioniše. izolacija procesa kako naša infrastruktura ne bi postala sito.
Razumijevanje ekosistema sigurnosti kontejnera
Da bismo prestali nagađati s dozvolama, prvo moramo znati šta štitimo. Arhitektura kontejnera je podijeljena na nekoliko kritičnih slojeva. Prvo, imamo slika kontejnerašto je originalni nacrt; ako je ovo ranjivo, sve instance koje implementirate bit će nesigurne. Zato je ključno koristiti pouzdane osnovne slike i redovno ih ažurirajte.
Zatim vrijeme izvođenjakoji djeluje kao arbitar između glavnog operativnog sistema i aplikacije. Ako je okruženje za izvršavanje zastarjelo, rizik od bijeg iz kontejnera dramatično se povećava. Ovome moramo dodati orkestraciju, kao što je Kubernetes, gdje kontrola pristupa zasnovana na ulogama (RBAC) To je jedina prava prepreka protiv neovlaštenog pristupa API-ju za upravljanje.
Ne možemo zaboraviti host operativni sistemAko napadač uspije kompromitovati jezgro hosta, on posjeduje ključeve cijele domene. Preporuka je ovdje jasna: koristite minimalni operativni sistem kako bi se smanjila površina napada. Konačno, mreža je najčešća ulazna tačka; gotovo 30% povreda podataka događa se zbog kvarova u povezivosti, tako da segmentacija mreže i TLS/SSL enkripcija Obavezna su.
Glavobolja oko dozvola i root korisnika
Tipičan problem za hobiste je radni proces sa volumenima. Kreirate folder, montirate ga, i onda, bum!, greška. dozvola odbijenaTo se dešava jer se, po defaultu, mnogi kontejneri pokreću kao root. Kada pokušate prisiliti UID i GID na 0 Da biste ih uskladili s vašim korisnikom hosta, stvarate opasan most. Ako vam kontejner ne dozvoljava konfiguriranje ovih ID-ova, na kraju ćete potrošiti popodne pokušavajući shvatiti kojeg internog korisnika aplikacija koristi za izvršavanje chown priručnik.
Efikasno rješenje je primjena princip najmanje privilegijaNe biste trebali pokretati ništa kao root osim ako nije apsolutno neophodno. Da biste riješili problem datoteka kreiranih od strane kontejnera koje ne možete izbrisati na hostu, bitno je konfigurirati Dockerfile pomoću sljedećih instrukcija: KORISNIK, definiranje korisnika bez privilegija prije pokretanja aplikacije.
Ako koristite Podman, koncept kontejneri bez korijena Izvorno je i vrlo korisno, ali zahtijeva da razumijete kako su korisnici hosta mapirani na korisnike kontejnera. Da biste spriječili da dozvole izmaknu kontroli, idealno bi bilo da aplikacija bude dizajnirana da piše na određene rute i da mapiranje volumena To se radi uzimajući u obzir stvarni UID korisnika koji pokreće proces.
Strategije za izgradnju oklopljenih slika
Ako želite prestati patiti, morate promijeniti način na koji konstruirate svoje slike. Jedna brutalno učinkovita tehnika je... višefazne gradnjeU osnovi, koristite tešku sliku sa svim alatima za izgradnju za generiranje binarne datoteke, a zatim kopirate samo tu datoteku u konačnu sliku. izuzetno lagana.
Možete ići čak i dalje koristeći sliku ogrebotinaOvo stvara kontejner koji nema apsolutno ništa: nema ljuske, nema upravitelja paketa, samo vašu aplikaciju. To napadaču praktično onemogućava izvršavanje zlonamjernih naredbi ako uspije ući, jer Nema interpretatora komandi na raspolaganju.
Još jedna sigurnosna mjera je čišćenje slike bilo koje binarne datoteke s dozvolama. setuid ili setgidOve dozvole omogućavaju izvršavanje datoteke s privilegijama vlasnika datoteke, a ne korisnika koji ju je pokrenuo, što je autoput za... eskalacija privilegijaJednostavna naredba za traženje i uklanjanje ovih dijelova tokom kreiranja slike može vam uštedjeti mnogo problema.
Opasnosti privilegovanog načina rada i mogućnosti Linuxa
Ponekad, iz očaja zbog nemogućnosti rješavanja problema s dozvolama, upadnemo u iskušenje korištenja zastavice –privilegovaniZaboravite na to. Privilegovani režim prekida izolaciju kontejnera i daje vam potpuni pristup uređajima hosta. To je kao da date ključeve svoje kuće strancu samo zato što nije znao kako da otvori vrtnu kapiju.
Umjesto toga, trebali biste se igrati sa Mogućnosti LinuxaDocker dodjeljuje skup zadanih dozvola (kao što su CAP_CHOWN ili CAP_NET_RAW). Ako vaša aplikacija ne treba manipulirati mrežom na niskom nivou, najpametniji pristup je eliminisati nepotrebne mogućnosti i dodajte samo one koje su strogo potrebne od strane --cap-add.
Za one koji upravljaju ozbiljnijim okruženjima, postoje dodaci za autorizaciju kao što je opa-docker-authz. Ovo omogućava presretanje poziva API-ju Docker daemona i blokiranje svakog pokušaja pokretanja kontejnera u privilegovanom režimu, osiguravajući da niko, čak ni greškom, ne ostavi vrata otvorena hostu.
Optimizacija i održavanje okruženja
Nemojte se ograničavati na veličinu slike od 5 MB kada koristite Alpine Linux ako to uzrokuje probleme s kompatibilnošću s bibliotekama. Ponekad je poželjnija malo veća Debian slika. stabiliziran i poznat od strane tima. Ključno je implementirati skeniranje ranjivosti Automatizirani CI/CD cjevovod za otkrivanje CVE-a prije nego što slika stigne do produkcije.
Što se tiče pohrane, sprječava aplikaciju da piše u korijenski datotečni sistem. Konfigurirajte datotečni sistem samo za čitanje (rootfs) i definira specifične volumene samo za podatke koji trebaju postojati. Ovo nije samo sigurnije, već i prisiljava na čistiju arhitekturu i bez imovineolakšavanje horizontalnog skaliranja.
Za planirane procese, nemojte stavljati cron zadatak unutar kontejnera web stranice. Zlatno pravilo je jedan proces po kontejneruNajčišći pristup je korištenje slike vaše aplikacije za pokretanje efemernog kontejnera koji izvršava zadatak, a zatim se uništava, ili upravljanje cronom s hosta pozivanjem kontejnerskog mehanizma pomoću naredbi.
Sigurnost kontejnera je kontinuirani proces koji uključuje eliminaciju root pristupa, ograničavanje mogućnosti kernela i uklanjanje nepotrebnih alata iz slika kontejnera. Kombinacijom neprivilegovanih korisnika sa ojačavanjem vremena izvođenja i stalnim praćenjem, postiže se okruženje u kojem funkcionalnost ne ugrožava integritet host sistema.
Strastveni pisac o svijetu bajtova i tehnologije općenito. Volim dijeliti svoje znanje kroz pisanje, a to je ono što ću raditi na ovom blogu, pokazivati vam sve najzanimljivije stvari o gadžetima, softveru, hardveru, tehnološkim trendovima i još mnogo toga. Moj cilj je pomoći vam da se krećete u digitalnom svijetu na jednostavan i zabavan način.

