Kako osigurati Docker za proizvodno okruženje?

Pogledajmo kako očvrsnuti i osigurati Docker za proizvodno okruženje.


Iako Lučki radnik omogućio je programerima softvera i inženjerima DevOps-a da brzo izrade i implementiraju aplikacije, a dolazi i s velikom napadnom površinom za cyber hakere.

Pogledat ćemo kako osigurati Docker na Linux platformi iz sljedećeg.

  • Nedostaci u konfiguraciji
  • Daljinsko izvršavanje koda
  • Buffer Overflows
  • Krivotvorenje slika i tako dalje.

Iskoristit ćemo sljedeće alate, kao što su Docker-ov notarski poslužitelj za potpisivanje slika i Sigurnost dokerske klupe za provjeru hosta, konfiguracije demona itd.

Prije nego što nastavimo s osiguranjem, dotaknimo osnove.

Što je tehnologija kontejnera?

Kontejnerska tehnologija omogućuje programerima ili DevOps inženjerima da pakiraju aplikaciju tako da se može pokretati s ovisnostima izoliranim od drugih procesa.

Na tržištu postoji niz tehnologija kontejnera, kao što su Apache Mesos, Raketa, lxc, i Lučki radnik. Iako spadaju u kategoriju tehnologija kontejnera, oni funkcioniraju drugačije.

Razlika između VM & VE

Domaćin virtualnog stroja potpuno se razlikuje od domaćina virtualnog okruženja. Na virtualnim računalima svaka kontejnerska aplikacija dolazi sa svojim skupom biblioteka i operativnog sustava, dok aplikacije, prema zadanim postavkama, na virtualnom okruženju kao što su lxc i docker dijele Linux kernel.

Što je Docker?

Docker je tehnologija spremnika koju milijuni koriste za stvaranje web aplikacije i razmještanje je iz testiranja u proizvodno okruženje.

Docker Engine

Motor Docker sastoji se od tri komponente.

  • Poslužitelj: Ova komponenta je dugotrajni proces ili demon koji je odgovoran za upravljanje slikama i spremnicima.
  • REST API: Ovo sučelje omogućuje komunikaciji daker-dokera i alatu docker klijenta.
  • Alat za docker klijente: Alat za klijente Docker koristi komponentu REST API kako bi obavijestio dakera dare da radi s kontejnerskom aplikacijom.

Docker Pouzdan registar

Docker Trusted Registry je Docker rješenje za pohranu slika za poslovanje na platformi poduzeća. Razlikuje se od docker hub.  Dok se docker koncentrator nalazi u oblaku, registra pouzdanog registra je spremno rješenje za pohranu Docker Enterprise Edition.

Docker Content Trust

Docker Content Trust pruža mogućnost korištenja podataka s potpisima za slike koje se šalju i primaju u udaljene registre dokera kao što su docker hub.

Linux Namespace

Linux imena prostora su značajka Linux kernela koja izolira kontejnersku aplikaciju ili proces koji se izvodi na host virtualnog okruženja od drugih procesa.

Linux upravljačke grupe (grupe)

Linux Control Grupe značajka je Linux kernela koja vam omogućuje raspoređivanje resursa kao što su vrijeme CPU-a, mrežna propusnost, sistemska memorija i tako dalje aktivnim procesima na host.

sposobnosti

U Linuxu postoji sigurnosna značajka u podsustavu kernel koja se može postaviti ili nametnuti za ograničavanje privilegiranog postupka takav postupak koji izvršava korisnik s UID 1. Iako povlašteni procesi ili korisnici mogu zaobići diskrecijsko dopuštenje kontrole pristupa, ne mogu zaobići pravila o mogućnostima.

Sada se usredotočimo na sigurnost.

Osiguravanje doktora domaćina

U ovom ćemo dijelu pogledati kako osigurati domaćina gdje Docker prebiva.

Skeniranje Linux kernela

Prije nego što hostite docker na Linux platformi, prvo morate pregledati kernel. Postoji nekoliko alata s otvorenim kodom kao što su Lynis i OpenVAS koji možete koristiti za skeniranje Linux kernela.

Kopirajte ili klonirajte Lynisov projekt iz Githuba pomoću naredbe git klon.

git klon https://github.com/CISOfy/lynis.git

Zatim upotrijebite naredbu dolje za kretanje do Lynis direktorija i reviziju Linux sustava.

CD linis; ./lynis sustav revizije

Otvrdnite Linux kernel

Nakon što ste skenirali Linux kernel na ranjivosti temeljene na sustavu, možete dodati još jedan dodatni sloj zaštite kernelu putem grsecurity. Pruža sigurnosne značajke kao što su sljedeće.

  • Sprječavanje iskorištavanja preljeva pufera
  • / tmp prevencija ranjive rase
  • / proc ograničenja koja ne propuštaju podatke o vlasnicima procesa.
  • Sprječavanje proizvoljnog izvršavanja koda u kernelu i tako dalje.

U početku možete preuzimanje datoteka zakrpe besplatno od nesigurnosti i primijenite ih na vaš trenutni kernel. Ali više ne dopušta besplatne zakrpe.

Instalirajte Docker u VM

Umjesto da Docker instalirate izravno na Linux host, možete dodati dodatni sloj zaštite instalirajući ga unutar virtualnog računala. Samim time, čak i ako postoji problem ranjivosti s host kernelom, to neće utjecati na spremnike docker.

Zaštita korijenskih privilegija

Docker je prema zadanim postavkama potreban root privilegija za stvaranje i upravljanje spremnicima. Zlonamjerna skripta može utjecati na ovu površinu napada kako bi eskalirala do nadresera na Linux host i eventualno pristupila osjetljivim datotekama / mapama, slikama, certifikatima itd.

Da bismo je spriječili, možemo upotrijebiti sljedeću naredbu. Možemo odlučiti odustati od mogućnosti kao što je setgid i setuid kako bismo spriječili da drugi programi ili procesi promijene svoj GID u drugi GID, što može rezultirati privilegijom eskalacije. Također možete provjeriti ovdje za popis definicija Linux mogućnosti.

Naredba ispod pokreće spremnik web-poslužitelja apache i ispada postavljene i postave mogućnosti putem –cap-drop kako bi se spriječilo da spremnik apache promijeni svoj GID i UID u drugi UID i GID.

GID i UID u ovom se kontekstu odnose na ID grupe i ID korisnika.

docker run -d –cap-drop SETGID –cap-drop SETUID apache

Korisnik dokera

Osim sprječavanja drugih programa ili procesa, možete stvoriti i korisnika koji će upravljati docker operacijama, poput pokretanja dockera, umjesto da ga upravlja putem superusera.

Korisnici dokera možete dodati ili stvoriti putem sljedećeg:

sudo groupadd docker

Gornja naredba stvara grupu koja se zove docker

Zatim stvorite korisnika pomoću naredbe u nastavku:

sudo useradd mike

Konačno, pomoću naredbe u nastavku dodajte korisnički mike u grupni docker za administraciju docker operacija.

sudo usermod -aG docker mike

Upravljanje spremnikom s grupama

U proizvodnom okruženju možete imati više spremnika.

Ako na vašem domaćinu nisu instalirane grupe, upotrijebite sljedeću naredbu da biste je instalirali i zatim provjerili ovdje (za Ubuntu) o tome kako ga konfigurirati.

sudo apt-get install cgroup-bin cgroup-lite cgroup-tools cgroupfs-mount libcgroup1

Kontejnere možemo rasporediti na ograničene resurse procesora putem –cpu-dionica i –cpuset-cpus-a

Sljedeći naredbeni primjer prikazuje prodnginx spremnički proces se izvodi samo na prvoj jezgri putem –cpuset-cpus i dodjeljuje 20 CPU putem –cpu-dionica dok se proces spremnika proxnginx izvršava na prve dvije jezgre CPU-a, a također se dodjeljuje 20 CPU.

docker run -d –name prodnginx –cpuset-cpus = 0 –cpu-dionica = 20 nginx
docker run -d –name testnginx –cpuset-cpus = 2 –cpu-dionica = 20 nginx

Zatim upišite statistiku naredbenog doktora da biste vidjeli korištenje CPU-a pomoću spremnika prodnginx i testnginx

NAZIV KONTEJNERA CPU% UPOTREBA MEM / OGRANIČENJE MEM% NETO I / O BLOK U / I
845bea7263fb prodnginx 57,69% 1,285MiB / 985,2MiB 0,13% 578B / 0B 1,33MB / 0B
189ba15e8258 testnginx 55,85% 1,25MiB / 985,2MiB 0,13% 578b / 0B 1,33MB / 0B

Bilo bi dobro definirati CPU-dionice za docker host kada na njemu imate više spremnika.

Upravljanje spremnicima s imenima

Prostor imena može spriječiti da se spremnici prikazuju kao povlašteni korisnici, što može pomoći u izbjegavanju napada eskalacije privilegija.

Prostor imena možemo omogućiti u dockeru koristeći / / / subuid i / etc / subgid datoteke kao što je prikazano u nastavku.

  • stvorite korisnika pomoću naredbe adduser

sudo adduser dockremap

  • Postavljanje podprojida za korisničku dokumentaciju

sudo sh -c ‘echo dockremap: 400000: 65536 > / Etc / subuid”

  • Zatim podesite subgid za korisničku dokumentaciju

sudo sh -c ‘echo dockremap: 400000: 65536 > / Etc / subgid”

  • Otvorite datoteku daemon.json i napunite je sljedećim sadržajem kako biste pridružili atribut userns-remap korisničkom dockremapu

vi /etc/docker/daemon.json
{

"userns-premapirati": "dockremap"

}

  • Pritisnite: wq za spremanje i zatvaranje datoteke daemon.json i konačno pokrenite docker da biste omogućili prostore s imenima na docker host

sudo /etc/init.d/docker ponovno pokretanje

Osiguravanje Docker Daemona

Također je potrebno konfigurirati Docker demon kako bi se osigurala sigurna komunikacija između docker klijenta i docker daemon-a putem TLS-a.

Pomoću sljedeće naredbe otvorite datoteku daemon.json i kopirajte i zalijepite sljedeći sadržaj (zamijenite IP stvarnim) kao što je prikazano u nastavku

vi daemon.json
{
"otkloniti neispravnost": lažno,
"TLS": istina,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"domaćini": ["TCP: //192.168.16.5: 2376"]
}

Osiguravanje komponenata Docker-a

Pogledajmo kako koristiti alate kao što su CodeNotary i javni bilježnik potpisati slike u svrhu izbjegavanja krivotvorenja slika. Osim toga, potrebno je skenirati i slike samo kako biste bili sigurni da slike nisu prepune ranjivosti

Iskoristit ćemo Dockerov notarski poslužitelj za potpisivanje i provjeru slika i upotrebu Sidreni motor za skeniranje slika na ranjivosti.

Provjerite slike kod javnog bilježnika

Prije nego što možemo koristiti bilježnički poslužitelj za potpisivanje slika, moramo preuzeti i instalirati docker-compose. Docker Compose koristit ćemo za postavljanje notarskog poslužitelja.

  • Za preuzimanje najnovije verzije Docker Compose pokrenite donju naredbu

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s) – $ (unme -m)" -o / usr / local / bin / docker-compose

  • Primijenite izvršne dozvole na docker-compose kao što je prikazano u nastavku

sudo chmod 700 / usr / local / bin / docker-compose

  • Možete testirati jeste li uspješno instalirali docker-compose pomoću sljedeće naredbe

docker-compose – pretvaranje

  • Sada možemo instalirati javni bilježnik putem docker-compose

git klon https://github.com/theupdateframework/notary.git

  • Gornja naredba klonira ili kopira javni bilježnički poslužitelj iz javnobilježničko spremište
  • Pokrenite bilježnički poslužitelj i potpisnik naredbama dolje:

docker-compose graditi
docker-compose up -d

  • Zatim kopirajte konfiguraciju i potvrde o testiranju u lokalni javni bilježnički imenik pomoću naredbe u nastavku

mkdir -p ~ / .notar && cp cmd / notar / config.json cmd / notary / root-ca.crt ~ / .notary

  • Sada pokrenite sljedeću naredbu za povezivanje notarskog poslužitelja s klijentom doktora

izvoz DOCKER_CONTENT_TRUST = 1
izvoz DOCKER_CONTENT_TRUST_SERVER = https: // notaryserver: 4443

  • Generirajte par ključeva delegiranja putem naredbe u nastavku

docker trust key generirati mike –dir ~. / docker / trust

  • Sada stvorimo nove ciljne ključeve u slučaju da spremište ne postoji

docker trust potpisnik add –key ~ / .docker / trust / mike.pub mike mikedem0 / whalesay

  • Tada možete potpisati svoju sliku doktora pomoću ukaznog znaka docker. Morate izvući sliku dokera iz docker centra i ponovo označiti pomoću naredbenog docker povucite i docker tag.

docker trust sign mikedem0 / nginx: najnovije

Možete i skenirati slike doktora na ranjivosti i nedostatke u konfiguraciji. Ovdje možete provjeriti kako biste koristili Anchor Engine za skeniranje ranjivosti i Sigurnost docker klupe za provjeru nedostataka u konfiguraciji.

Nadam se da vam gore navedeno daje predodžbu o sigurnosti Docker za proizvodno okruženje. Možda ćete htjeti pogledati i ovaj tečaj Udemy sjeckanje i osiguranje Docker kontejnera.

OZNAKE:

  • Lučki radnik

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map