Koncept kontejnera u DevOps-u nije novina. To su, u suštini, virtuelni prostori za izolaciju koji sadrže sve neophodne resurse za pokretanje mikroservisa, a primenjivi su i na veće aplikacije.
Kontejnere možete zamisliti kao sisteme za pakovanje koji omogućavaju programerima da sve što je potrebno za funkcionisanje aplikacije, kao što su izvršna okruženja i binarni kodovi, smeste na jedno, centralizovano mesto.
Kontejneri olakšavaju prebacivanje aplikacija između različitih okruženja, na primer, sa lokalne mašine na virtuelno okruženje, ili iz razvojne u produkcionu fazu. Time se eliminišu problemi koji nastaju zbog razlika u softverskim konfiguracijama između razvojnih i produkcionih okruženja.
Prema izveštaju Statiste, 50% organizacija širom sveta koristi orkestraciju kontejnera. Iako je ova tehnologija sve prihvaćenija zbog svojih prednosti, kontejneri mogu predstavljati sigurnosni rizik ukoliko se ne preduzmu odgovarajuće mere zaštite.
CVE details, pouzdan izvor informacija o bezbednosnim propustima, evidentirao je 62 ranjivosti specifične za Docker, u trenutku pisanja ovog teksta. Stoga je neophodno da programeri primene najbolje prakse kako bi predupredili ove opasnosti i osigurali uspešan DevOps proces.
U ovom tekstu detaljno ćemo analizirati koncept sigurnosti kontejnera, ukazati na izazove sa kojima se susrećemo, i dati smernice za primenu najboljih praksi prilikom upotrebe kontejnerske tehnologije.
Šta je sigurnost kontejnera?
Sigurnost kontejnera je kontinuiran proces koji koristi bezbednosne protokole, alate i politike, kako bi zaštitio kontejner i njegovo okruženje od potencijalnih pretnji.
Ukoliko se ne zaštite na adekvatan način, pretnje mogu ugroziti vašu aplikaciju, njenu infrastrukturu, vreme rada, sistemske biblioteke, operativni sistem i jezgro sistema.
S obzirom na to da su kontejneri privremeni i namenjeni za dinamičku primenu i skaliranje, neophodna je automatizovana sigurnost u svakoj fazi životnog ciklusa razvoja softvera (SDLC).
Pročitajte takođe: Uvod u Kubernetes Kops za početnike
Koji su izazovi u sigurnosti kontejnera?
Iako kontejneri pružaju brojne prednosti, kao što je ubrzanje isporuke softvera, oni nisu imuni na izazove, prvenstveno zato što im je potrebna dodatna sigurnosna zaštita. Kontejneri nemaju ugrađene mehanizme samozaštite.
To je zato što kontejneri pristupaju hardveru preko operativnog sistema domaćina (OS). Jedan kontejner može imati više osnovnih slika, što povećava površinu za napad.
Prvi izazov je neadekvatna konfiguracija kontejnera. Programeri često zaboravljaju da prilagode i koriste podrazumevane konfiguracije kontejnera, koje imaju određene nedostatke. Na primer, mogu biti izloženi nesigurni portovi koji nisu idealni za vašu aplikaciju, mogu da procure akreditivi kao što su lozinke i tokeni za autentifikaciju, ili kontejneri mogu da imaju prekomerne dozvole za vreme izvršavanja (kada se pokreću kao root). Ukoliko se ovi propusti ne reše, podrazumevane konfiguracije otvaraju put za napade.
Sledeći izazov je ranjivost infrastrukture kontejnera. Paketi ugrađeni u kontejner, poput koda aplikacije, biblioteka i konfiguracija, ili oni na operativnom sistemu domaćina, mogu predstavljati ranjivosti. Ranjivosti se mogu pojaviti u bilo kojoj fazi životnog ciklusa aplikacije, na primer, kada su spoljne zavisnosti ugrađene u sliku kontejnera, kada se instaliraju biblioteke otvorenog koda kao deo aplikacije, ili kada se slike baza kontejnera preuzimaju iz registara kontejnera i hostova trećih strana. Sve ove komponente mogu biti ranjive kroz mrežne i krajnje tačke.
Vidljivost radnih opterećenja kontejnera je jedan od najvećih izazova. Dinamična priroda kontejnera otežava alatima za praćenje da lociraju koji kontejneri su aktivni i da nadgledaju njihovo mrežno ponašanje. Poboljšana vidljivost sprečava narušavanje sigurnosti i skraćuje vreme reakcije na incidente, ukoliko do njih dođe.
Kontejner je takođe podložan napadima ukoliko je bilo koja faza CI/CD cevovoda nesigurna, bilo da se radi o kodu aplikacije ili o infrastrukturi radnog opterećenja kontejnera. Iako je na programerima da obezbede sigurnost na kraju životnog ciklusa aplikacije, administriranje u svakom koraku razvoja štiti vaše aplikacije od zastoja.
Koji alati mogu da reše izazove u sigurnosti kontejnera?
Sigurnost i integritet vaših poslovnih rešenja možete osigurati primenom sigurnosnih alata. Ovi alati skeniraju sisteme u potrazi za ranjivostima i kontinuirano nadziru rad kontejnera radi detekcije napada, grešaka ili drugih problema.
Bilo da tražite alate za sigurnost kontejnera otvorenog koda ili komercijalne alate, svi oni imaju istu svrhu. Oni vrše reviziju infrastrukture kontejnera i detektuju uobičajene ranjivosti i izloženosti (CVE).
Evo nekoliko alata koje možete isprobati: PingSafe Editors Choice, Datadog Cloud SIEM, Anchore, Sophos Cloud-Native Security, Bitdefender GravityZone, Sysdig secure, Aqua Security i RedHat Advanced Cluster Security za Kubernetes.
Pročitajte takođe: 11 skenera sigurnosti kontejnera za pronalaženje ranjivosti
Najbolje prakse za sigurnost kontejnera
Uprkos navedenim izazovima u vezi sa sigurnošću kontejnera, u nastavku teksta nalazi se pregled najboljih praksi koje možete primeniti da biste optimizovali sigurnost kontejnera u svim fazama životnog ciklusa aplikacije.
Osiguravanje vaših slika
Za kreiranje kontejnera koriste se slike kontejnera. Najmanja greška u konfiguraciji ili zlonamerna aktivnost može izazvati ranjivosti u kontejnerima u produkciji. Ovo možete sprečiti:
- Korišćenjem pouzdanih slika – Kada ne kreirate sopstvene slike od nule, uvek koristite slike iz pouzdanih izvora. Javna spremišta kao što je Docker Hub sadrže i slike sa zlonamernim softverom i greškama u konfiguraciji.
- Uključivanjem samo neophodnih komponenti – Ukoliko postoje komponente koje vašoj aplikaciji nisu potrebne, najbolje je da ih uklonite. Na primer, UNIX sistem prirodno sadrži binarne datoteke „awk“ i „sed“.
- Uključivanjem vaše aplikacije u sliku kontejnera – Slika kontejnera kombinuje podskup operativnog sistema (OS) i pokrenutu aplikaciju. Svaki alat i biblioteka koja je uključena u kontejner predstavlja potencijalnu pretnju. Najbolje je uključiti samo vašu aplikaciju u sliku kontejnera. Ovo se postiže korišćenjem statički kompajlirane binarne datoteke sa svim neophodnim zavisnostima.
Automatizacija skeniranja ranjivosti i upravljanja
Redovno skeniranje ranjivosti i upravljanje vašim kontejnerom i hostovima pomaže u otkrivanju ranjivosti u bilo kojoj fazi životnog ciklusa aplikacije.
Možete pokrenuti skeniranje koda da biste otkrili greške i statičko testiranje sigurnosti aplikacija (SAST) da biste pronašli ranjivosti u kodu aplikacije. Analiza sastava softvera (SCA) može da obezbedi uvid u komponente softvera otvorenog koda kreiranjem softverskog spiska materijala koji se može uporediti sa dokumentovanim ranjivostima otvorenog koda.
Pored toga, skeniranje slike analizira sadržaj i proces kreiranja slike kontejnera radi otkrivanja osetljivosti. Sa alatima kao što je Clair, možete skenirati sistem u potrazi za poznatim ranjivostima. Alternativno, koristite dinamičko testiranje sigurnosti aplikacija (DAST), koje ukazuje na sigurnosne rizike na osnovu ponašanja kontejnera. DAST alati takođe mogu da izvrše skeniranje hosta, gde pregledate komponente hosta kontejnera (jezgro hosta i OS) na pogrešnu konfiguraciju.
Dok se gore navedene mere usvajaju u tekućem procesu životnog ciklusa kontejnera, možete usvojiti filozofiju „pomeranja ulevo“. To znači primenu sigurnosti od samog početka vašeg ciklusa razvoja. Dobar alat ukoliko se odlučite za ovaj pristup je Trivy.
Osiguravanje registara kontejnera
Kontejnerski registri su efikasan način za centralizovano skladištenje i distribuciju slika. Organizacije često imaju hiljade slika uskladištenih u javnim ili privatnim registrima. Postoji nekoliko mera koje osiguravaju da svi članovi tima i saradnici koriste slike bez ranjivosti.
Prvo, implementacija kontrole pristupa korisnika (za privatne registre) definiše ko može da objavljuje i pristupa slikama. Iako je ovo osnovna sigurnosna mera, ona sprečava neovlašćena lica da objavljuju, menjaju ili brišu vaše slike.
Sledeća mera je potpisivanje vaših slika, koje povezuje svaku sliku sa osobom koja ju je potpisala, čime se otežava zamena slike kompromitovanom. Možete koristiti Docker Content Trust tehnike za dodavanje digitalnih potpisa podacima koji se šalju i primaju iz registara. Konačno, ne zaboravite da kontinuirano skeniranje vaših slika pomaže u otkrivanju kritičnih ranjivosti.
Monitoring kontejnera
Vidljivost radnih opterećenja kontejnera možete optimizovati korišćenjem alata za posmatranje. Ovi alati bi trebalo da budu u stanju da nadgledaju i testiraju ranjivosti u svim komponentama i da omogućavaju evidentiranje u realnom vremenu za okruženja u kontejnerima.
Alati za posmatranje otkrivaju pretnje tako što analiziraju metrike i zapise iz svih komponenti stek kontejnera i analiziraju ih u potrazi za abnormalnostima. Ovim pristupom možete odmah da ispravite pogrešne konfiguracije kada se identifikuju.
Da biste prikupili metriku korišćenja resursa, koristite alate kao što su cAdvisor ili kube-state-metrics. Za praćenje aktivnosti kontejnera i performansi vaših klastera, koristite alate kao što su Grafana ili Prometheus.
Ukoliko želite da analizirate mrežni saobraćaj između kontejnera, koristite Wireshark ili tcpdump. Ako koristite upravljanu Kubernetes uslugu kao što je (AKS), koristite Azure Monitor za praćenje resursa i sigurnosnih pretnji.
Pored toga, Azure Log Analytics može da prikuplja i analizira vaše AKS resurse. Ukoliko odaberete Amazon EKS, Amazon CloudTrail je pogodan za evidentiranje i pregled; koristite Amazon Cloud Watch.
Implementacija mrežne sigurnosti
Mere kontrole sigurnosti mreže mogu pomoći u zaštiti od neovlašćenog pristupa kontejnerima. Kriterijum koji se ovde koristi je segmentacija mreže, koja izoluje kontejnere, ograničavajući im pristup samo neophodnim servisima.
Ukoliko pokrećete svoje kontejnerske aplikacije na Kubernetes-u, možete koristiti K8s mrežne smernice da biste konfigurisali dolazni i odlazni pod saobraćaj u klasterima. Ovo, zauzvrat, ograničava saobraćaj na određene podove na osnovu oznaka.
Sigurnost transportnog sloja (TLS) se može povećati za komunikaciju podova. Možete se odlučiti za TLS ili tehnike sloja sigurnih soketa (SSL) za sigurnu komunikaciju između API servera i drugih komponenti. Balanseri opterećenja su dobro rešenje ukoliko želite da ograničite ulazak saobraćaja u vaše klastere.
Ukoliko vaši klasteri imaju mikroservise, možete da obezbedite siguran saobraćaj preko servisnih mreža kao što su Meshery ili Linkerd. Na kraju, osigurajte svoju mrežu ukoliko koristite cloud provajdera za hostovanje svojih klastera.
Ukoliko koristite Azure Kubernetes uslugu (AKS), koristite grupe za sigurnost mreže (NSG) za upravljanje saobraćajem. Ukoliko koristite Amazon Elastic Kubernetes Service (EKS), sigurnosne grupe Amazon virtualnog privatnog oblaka (VPC) bi bile najbolje rešenje za vas.
Smanjenje površinskih napada
Minimizovanje površine napada ima dve prednosti; povećanu brzinu usluge i smanjenje potencijala za narušavanje sigurnosti.
Korišćenjem višestepene izrade, možete kreirati lake slike sa malom površinom napada, uz poboljšano vreme pokretanja i performanse. Postoji nekoliko rešenja za ovo. Ukoliko koristite Linux, možete koristiti Alpine Linux, BusyBox ili Tiny Core Linux.
Za Ubuntu postoji Ubuntu Minimal. Takođe možete koristiti Scratch, specijalnu Docker sliku – u suštini prazan kontejner, za izradu minimalističkih slika od samog početka.
Ograničavanje privilegija kontejnera
Princip koji se ovde primenjuje podrazumeva davanje minimalne dozvole za obavljanje određenog zadatka. Kada se kontejneri pokreću kao root, oni daju korisniku različite operativne privilegije, kao što je instaliranje paketa, ili mogućnost operacija čitanja i pisanja na operativnom sistemu.
Rizik je da napadači mogu da iskoriste eskalaciju moći u vreme izvršavanja kontejnera ukoliko dođe do kompromitovanja. U tom slučaju, postoje dva održiva rešenja. Možete pokrenuti kontejnere u režimu bez root-a, ili možete ograničiti sposobnosti LINUX jezgra samo na one koje su neophodne za radno opterećenje kontejnera.
Bezbedno upravljanje tajnama
Vaši konfiguracioni fajlovi kontejnera i docker-a ne bi trebalo da sadrže tajne. Tajne uključuju sertifikate, lozinke, ključeve interfejsa aplikacijskog programa (API) i tokene. Iako je ovo najbolja praksa, često ćete videti ove tajne direktno ugrađene u procesu izgradnje ili u slikama izvornog koda.
U takvim slučajevima, osetljivi podaci dospevaju u kontejnere i keširaju se u međuslojevima kontejnera, čak i kada su kontejneri uklonjeni. Za ovakve slučajeve, najbolji pristup je primena rešenja za upravljanje tajnama, kao što je AWS Secrets Manager i Vault za čuvanje i upravljanje tajnim akreditivima.
Osnaživanje vašeg tima
Edukacija vašeg tima o najboljim sigurnosnim praksama je ključna mera bezbednosti. To znači da svi članovi vašeg tima mogu da identifikuju sigurnosne pretnje i da reaguju na njih.
Dobar način da se ovo sprovede je dodavanje sigurnosti kontejnera u procese uključivanja vašeg tima. Nudeći praktičnu obuku, kontinuirano učenje i redovne sigurnosne procene, izdvajate vaš DevOps tim time što ga opremate najnovijim sigurnosnim trendovima.
Završne misli
Sigurnost kontejnera je ključan i kontinuiran proces u životnom ciklusu razvoja softvera. Najbolji pristup je da se sigurnost implementira od koda aplikacije, do vremena izvršavanja kontejnera, operativnog sistema hosta i osnovne mrežne infrastrukture.
Ovo možete da ostvarite ukoliko sledite strateški plan koji uključuje proveru kontejnera i korišćenje samo onih iz pouzdanih izvora. Ojačajte kontejnere kako biste bili sigurni da u sebi sadrže samo neophodne usluge. Ugradite metode evidencije koje se lako primenjuju pomoću alata za praćenje. Segmentirajte svoju mrežu tako da kontejneri budu odvojeni od ukupne infrastrukture.
Uvek potpisujte svoje slike da biste potvrdili unos i izlaz podataka kroz vaše usluge. Pored toga, trebalo bi da imate redovna skeniranja i testove penetracije kako biste proverili da li postoje ranjivosti i odmah preduzeli korektivne mere. Kako se tehnološki pejzaž razvija, uvek budite u toku sa najnovijim sigurnosnim praksama.
Naredni korak je da pogledate kako da automatizujete sigurnost.