Siguran sam da vam se ovo dogodilo: pokušavate sastaviti kontejner za osobnu upotrebu, želite ga učiniti sigurnijim korištenjem neprivilegirani kontejneri I odjednom se nađete zarobljeni u labirintu pogrešaka u dopuštenjima. Frustrirajuće je provoditi sate konfigurirajući mape 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.
Stvarnost je takva da, iako je kontejnerizacija ubrzala isporuku softvera, otvorila je vrata znatnim rizicima. Prema nedavnim podacima, velika većina produkcijskih slika nosi [nejasno - moguće "nejasno" ili "nejasno"] kritične ranjivostiZbog toga je sigurnost neizostavan stup. Ne radi se samo o sprječavanju hakerskih napada, već o razumijevanju kako sustav funkcionira. izolacija procesa kako naša infrastruktura ne bi postala sito.
Razumijevanje ekosustava sigurnosti kontejnera
Kako bismo prestali nagađati s dozvolama, prvo moramo znati što štitimo. Arhitektura kontejnera podijeljena je u nekoliko kritičnih slojeva. Prvo, imamo slika spremnikašto je izvorni 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 sustava i aplikacije. Ako je runtime zastario, rizik od bijeg iz kontejnera dramatično se povećava. Tome moramo dodati orkestraciju, poput Kubernetesa, gdje kontrola pristupa temeljena na ulogama (RBAC) To je jedina prava prepreka neovlaštenom pristupu API-ju za upravljanje.
Ne možemo zaboraviti glavni operativni sustavAko napadač uspije kompromitirati jezgru hosta, drži ključeve cijele domene. Preporuka je ovdje jasna: koristite minimalni operativni sustav kako bi se smanjila površina napada. Konačno, mreža je najčešća ulazna točka; gotovo 30% proboja događa se zbog kvarova u povezivosti, pa je segmentacija mreže i TLS/SSL enkripcija Obavezni su.
Glavobolja oko dozvola i root korisnika
Tipičan problem za hobiste je tijek rada s volumenima. Kreirate mapu, montirate je i onda, bum!, greška. dopuštenje odbijenoTo se događa jer se mnogi kontejneri prema zadanim postavkama 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 dopušta konfiguriranje ovih ID-ova, na kraju ćete potrošiti poslijepodne pokušavajući shvatiti kojeg internog korisnika aplikacija koristi za izvođenje chown priručnik.
Učinkovito rješenje je primjena načelo najmanje privilegijeNe biste trebali pokretati ništa kao root osim ako nije apsolutno neophodno. Kako biste riješili problem datoteka stvorenih u kontejnerima koje ne možete izbrisati na hostu, bitno je konfigurirati Dockerfile sljedećom uputom: USER, definiranje korisnika bez privilegija prije pokretanja aplikacije.
Ako koristite Podman, koncept posude bez korijena Izvorno je i vrlo korisno, ali zahtijeva da razumijete kako su korisnici hosta mapirani na korisnike kontejnera. Kako bi se spriječilo da dozvole izmaknu kontroli, idealno bi bilo da aplikacija bude dizajnirana za pisanje 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 i dalje koristeći sliku ispočetkaOvo stvara kontejner koji nema apsolutno ništa: nema ljuske, nema upravitelja paketa, samo vašu aplikaciju. To napadaču praktički onemogućuje izvršavanje zlonamjernih naredbi ako uspiju ući, budući da Nema interpretatora naredbi na raspolaganju.
Druga sigurnosna mjera je čišćenje slike bilo koje binarne datoteke s dozvolama setuid ili setgidOve dozvole omogućuju izvršavanje datoteke s privilegijama vlasnika datoteke, a ne korisnika koji ju je pokrenuo, što je autocesta za... eskalacija privilegijaJednostavna naredba za traženje i uklanjanje ovih dijelova tijekom izrade slike može vam uštedjeti mnogo problema.
Opasnosti privilegiranog 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 – privilegiraniZaboravite na to. Privilegirani način rada prekida izolaciju kontejnera i daje vam puni pristup uređajima hosta. To je kao da date ključeve svoje kuće strancu samo zato što nije znao kako otvoriti vrtna vrata.
Umjesto toga, trebali biste se igrati s 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 niskoj razini, najpametniji pristup je eliminirati nepotrebne mogućnosti i dodajte samo one koje su strogo potrebne --cap-add.
Za one koji upravljaju ozbiljnijim okruženjima, postoje dodaci za autorizaciju kao što je opa-docker-authz. Oni omogućuju presretanje poziva API-ju Docker daemona i blokiranje svakog pokušaja pokretanja kontejnera u privilegiranom načinu rada, osiguravajući da nitko, čak ni slučajno, ne ostavi vrata otvorena hostu.
Optimizacija i održavanje okoliša
Nemojte se previše zamarati veličinom 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 provođenje skeniranje ranjivosti Automatizirani CI/CD cjevovod za otkrivanje CVE-a prije nego što slika dođe u produkciju.
Što se tiče pohrane, sprječava aplikaciju da piše u korijenski datotečni sustav. Konfigurirajte datotečni sustav samo za čitanje (rootfs) i definira specifične volumene samo za podatke koji se moraju pohraniti. To nije samo sigurnije, već i prisiljava na čišću 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 uklanjanje root pristupa, ograničavanje mogućnosti kernela i uklanjanje nepotrebnih alata iz slika kontejnera. Kombiniranjem neprivilegiranih korisnika s ojačavanjem za vrijeme izvođenja i stalnim praćenjem postiže se okruženje u kojem funkcionalnost ne ugrožava integritet host sustava.
Strastveni pisac o svijetu bajtova i tehnologije općenito. Volim dijeliti svoje znanje pisanjem, a to je ono što ću učiniti na ovom blogu, pokazati vam sve najzanimljivije stvari o gadgetima, softveru, hardveru, tehnološkim trendovima i još mnogo toga. Moj cilj je pomoći vam da se snađete u digitalnom svijetu na jednostavan i zabavan način.

