Să ne uităm la modul de întărire și securizare a dispozitivului Docker pentru mediul de producție.


Cu toate că Docher a făcut posibilă dezvoltatorii de software și inginerii DevOps să construiască și să implementeze rapid aplicații, de asemenea, vine cu o suprafață mare de atac pentru hackerii cibernetici să se pună în valoare.

Vom analiza cum să securizați un Docker pe o platformă Linux din următoarele.

  • Defecțiuni de configurare
  • Executarea codului de la distanță
  • Depășire tampon
  • Falsificarea imaginii și așa mai departe.

Vom folosi următoarele instrumente, cum ar fi Serverul notar al Docker să semneze imagini și Securitatea bancului de andocare pentru a verifica dacă este gazda, configurația daemonului și așa mai departe.

Înainte de a proceda la securizare, să utilizăm elementele de bază.

Ce este o tehnologie de containere?

Tehnologia Container permite dezvoltatorilor sau inginerilor DevOps să împacheteze o aplicație, astfel încât să poată rula cu dependențe izolate de alte procese.

Există o serie de tehnologii de containere pe piață, cum ar fi Apache Mesos, rachetă, lxc, și Docher. Deși se încadrează în categoria tehnologiei de containere, funcționează diferit.

Diferența dintre VM & VE

O gazdă de mașină virtuală este complet diferită de o gazdă de mediu virtual. Pe mașinile virtuale, fiecare aplicație containerizată vine cu propriul set de biblioteci și sistem de operare, în timp ce aplicațiile, în mod implicit, pe o gazdă de mediu virtual, cum ar fi lxc, și docker partajează kernel-ul Linux.

Ce este Docker?

Docker este o tehnologie de containere utilizată de milioane pentru a crea o aplicație web și a o implementa de la un test la un mediu de producție.

Docker Engine

Motorul Docker este format din trei componente.

  • Un server: Această componentă este un proces sau un demon care se ocupă de gestionarea imaginilor și a containerelor.
  • API REST: Această interfață face posibilă comunicarea demonului docker și a instrumentului client docker.
  • Instrumentul Docker Client: instrumentul client Docker folosește componenta API REST pentru a informa demonul docker să opereze o aplicație containerizată.

Registrul de încredere în Docker

Registrul de încredere Docker este o soluție de stocare a imaginilor de la Docker pentru activitatea platformei enterprise. Este diferit de butuc de andocare.  În timp ce hub-ul docker este găzduit în cloud, registrul de încredere al docker este o soluție de stocare la fața locului Ediția întreprinderii Docker.

Încrederea conținutului Docker

Docker Content Trust oferă posibilitatea de a utiliza semnături de date pentru imaginile trimise și primite către și din registrele de docker de la distanță, cum ar fi hub-ul docker.

Spații de nume Linux

Spațiile de nume Linux sunt o caracteristică de kernel Linux care izolează o aplicație containerizată sau un proces care rulează pe gazda mediului virtual de alte procese.

Grupuri de control Linux (Cgroups)

Grupuri de control Linux este o caracteristică de kernel Linux care vă permite să alocați resurse, cum ar fi timpul procesorului, lățimea de bandă a rețelei, memoria sistemului și așa mai departe proceselor active pe o gazdă.

Capacități

În Linux, în subsistemul kernel există o caracteristică de securitate care poate fi setată sau impusă pentru a limita procesul privilegiat, un astfel de proces executat de un utilizator cu UID 1. Deși procesele sau utilizatorii privilegiați pot ocoli permisiunile de control de acces discreționare, acestea nu pot ocoli reguli de capacități.

Acum să ne concentrăm pe securitate.

Securizarea Docker Host

În această secțiune, vom analiza cum să securizați gazda unde se află Docker.

Scanarea nucleului Linux

Înainte de a găzdui un docker pe o platformă Linux, mai întâi trebuie să inspectați nucleul. Există mai multe instrumente open-source, cum ar fi Lynis și OpenVAS puteți utiliza pentru a scana nucleul Linux.

Copiați sau clonați proiectul Lynis din Github folosind comanda git clone.

clonă git https://github.com/CISOfy/lynis.git

Apoi, utilizați comanda de mai jos pentru a naviga în directorul lynis și a verifica sistemul Linux.

cd lynis; ./lynis sistem de audit

Nucleul Harden Linux

După ce ați scanat nucleul Linux pentru vulnerabilitățile bazate pe sistem, puteți adăuga un alt strat suplimentar de protecție la kernel via grsecurity. Acesta oferă funcții de securitate, cum ar fi următoarele.

  • Prevenirea exploatării prin revărsare prin buffer
  • / prevenirea vulnerabilității cursei / tmp
  • / restricții proc care nu scurg informații despre proprietarii proceselor.
  • Prevenirea executării codului arbitrar în sâmbure și așa mai departe.

Inițial, poți Descarca patch-uri gratuit de la grsecurity și aplicați-l pe nucleul dvs. curent. Dar nu mai permite patch-uri gratuite.

Instalați Docker într-o mașină virtuală

În loc să instalați Docker direct pe o gazdă Linux, puteți adăuga un strat suplimentar de protecție instalându-l în interiorul unei mașini virtuale. Procedând astfel, chiar dacă există o problemă de vulnerabilitate cu nucleul gazdă, acesta nu va afecta containerele de andocare.

Protejarea privilegiilor radiculare

În mod implicit, Docker necesită privilegii root pentru a crea și gestiona containere. Scriptul rău intenționat poate folosi această suprafață de atac pentru a escalada la un superuser pe o gazdă Linux și, în cele din urmă, accesa fișiere / dosare sensibile, imagini, certificate etc..

Pentru a preveni, putem folosi următoarea comandă. Putem decide să renunțăm la capabilități, cum ar fi setgid și setuid, pentru a împiedica alte programe sau procese să-și schimbe GID-ul în alt GID, ceea ce poate duce la un privilegiu de escaladare. Puteți verifica, de asemenea aici pentru o listă de definire a funcțiilor Linux.

Comanda de mai jos rulează containerul webserver apache și renunță la capabilitățile setgid și setuid prin –cap-drop pentru a împiedica containerul apache să schimbe GID și UID în alt UID și GID..

GID și UID în acest context se referă la ID-ul de grup și respectiv ID-ul de utilizator.

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

Utilizator Docker

În afară de prevenirea altor programe sau procese, puteți crea, de asemenea, un utilizator care să gestioneze operațiunile docker, cum ar fi rularea docker în loc să îl administreze prin intermediul unui superuser.

Puteți adăuga sau crea un utilizator docker prin următoarele:

sudo groupadd docker

Comanda de mai sus creează un grup numit docker

Apoi, creați un utilizator folosind comanda de mai jos:

sudo useradd mike

În cele din urmă, utilizați comanda de mai jos pentru a adăuga un mic utilizator la docker-ul de grup pentru a administra operațiunile de docker.

sudo usermod -aG docker mike

Gestionarea containerului cu Cgroups

Într-un mediu de producție, este posibil să aveți mai multe containere.

Dacă nu aveți cgrupuri instalate pe gazdă, puteți utiliza următoarea comandă pentru a o instala și apoi a verifica aici (pentru Ubuntu) cu privire la modul de configurare.

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

Putem aloca containerele la resursele CPU limitate prin intermediul –cpu-share și –cpuset-cpus

Următorul exemplu de comandă arată că procesul de continere prodnginx este executat doar pe primul nucleu prin –cpuset-cpus și se alocă 20 CPU prin –cpu-parts, în timp ce procesul de container proxnginx este executat pe primele două nuclee ale procesorului și este de asemenea alocat 20 Procesor.

docker run -d – nume prodnginx –cpuset-cpus = 0 –cpu-parts = 20 nginx
docker run -d – nume testnginx –cpuset-cpus = 2 – cpu-share = 20 nginx

Apoi tastați statisticile docker-ului de comandă pentru a vizualiza utilizarea procesorului de către containerele prodnginx și testnginx

NUMELE ID CONTAINERULUI CPU% MEM USAGE / LIMIT MEM% NET I / O BLOC I / O
845bea7263fb prodnginx 57.69% 1.258MiB / 985.2MiB 0.13% 578B / 0B 1.33MB / 0B
189ba15e8258 testnginx 55.85% 1.25MiB / 985.2MiB 0.13% 578b / 0B 1.33MB / 0B

Este o idee bună să definiți partajarea procesorului pentru o gazdă docker atunci când aveți mai mult de un container care rulează pe el.

Gestionarea containerelor cu spații de nume

Un spațiu de nume poate preveni rularea containerelor ca utilizatori privilegiați, ceea ce poate ajuta la evitarea atacurilor de escaladare a privilegiilor.

Putem activa spațiul de nume din docker folosind fișiere / etc / subuid și / etc / subgid așa cum se arată mai jos.

  • creați un utilizator folosind comanda adduser

dockremap sudo adduser

  • Configurați o subuid pentru dockremap-ul utilizatorului

Echo dockremap sudo sh -c ‘: 400000: 65536 > / Etc / subuid“

  • Apoi configurați subgid pentru dockremap-ul utilizatorului

Echo dockremap sudo sh -c ‘: 400000: 65536 > / Etc / subgid“

  • Deschideți fișierul daemon.json și completați-l cu următorul conținut pentru a asocia atributul userns-remap cu dockremap-ul utilizatorului

vi /etc/docker/daemon.json
{

"userns-remapare": "dockremap"

}

  • Apăsați: wq pentru a salva și închide fișierul daemon.json și, în final, reporniți docker-ul pentru a activa spațiile de nume pe o gazdă docker

repornire sudo /etc/init.d/docker

Securizarea Daemon Docker

De asemenea, este necesar să configurați demonul Docker pentru a asigura o comunicare sigură între clientul docker și demonul docker prin TLS.

Folosiți următoarea comandă pentru a deschide fișierul daemon.json și copiați și lipiți următorul conținut (înlocuiți IP-ul cu dvs.), așa cum se arată mai jos

vi daemon.json
{
"depanare": fals,
"tls": Adevărat,
"tlscert": "/var/docker/server.pem",
"tlskey": "/var/docker/serverkey.pem",
"gazde": ["tcp: //192.168.16.5: 2376"]
}

Securizarea componentelor de andocare

Să ne uităm la modul în care să folosim instrumente cum ar fi CodeNotary și server notar să semneze imagini pentru a evita falsificarea imaginii. În plus, este necesar, de asemenea, să scanați imagini doar pentru a vă asigura că imaginile nu sunt împachetate cu vulnerabilități

Vom folosi serverul notar Docker pentru a semna și verifica imaginile și a le utiliza Motor de ancorare pentru a scana imagini pentru vulnerabilități.

Verificați imaginile cu Notary Server

Înainte de a putea folosi serverul Notary pentru a semna imagini, trebuie să descărcăm și să instalăm docker-compose. Vom folosi Docker Compose pentru a configura un server notar.

  • Rulați comanda de mai jos pentru a descărca cea mai recentă versiune a Docker Compose

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

  • Aplicați permisiuni de executare la docker-compose, așa cum se arată mai jos

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

  • Puteți testa dacă ați instalat cu succes docker-compose prin următoarea comandă

docker-compose –versiune

  • Acum putem instala serverul notar prin intermediul docker-compose

clonă git https://github.com/theupdateframework/notary.git

  • Comanda de mai sus clonează sau copiază serverul notarial din depozit notarial
  • Porniți serverul notar și semnatar prin comenzile de mai jos:

Docker-compone build
docker-compune -d

  • Apoi copiați configurația și testează certificatele în directorul dvs. notar local folosind comanda de mai jos

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

  • Acum executați următoarea comandă pentru a conecta serverul notar la clientul docker

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

  • Generați o pereche de chei de delegare prin comanda de mai jos

cheia de încredere a docker-ului generează mike –dir ~. / docker / trust

  • Acum să creăm o cheie nouă țintă în cazul în care depozitul nu există

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

  • Apoi puteți semna imaginea docker utilizând semnul de încredere al comenzii docker. Trebuie să trageți imaginea docker-ului din hub-ul docker și să re-etichetați-o folosind comanda docker pull și respectiv docker tag-ul.

docker trust sign mikedem0 / nginx: cea mai recentă

De asemenea, puteți scana imagini docker pentru vulnerabilități și defecte de configurare. Puteți verifica aici pentru a afla cum utilizați Anchor Engine pentru a scana vulnerabilitățile și Securitatea Bancului Docker pentru a verifica defectele de configurare.

Sper că cele de mai sus vă oferă o idee despre Docker-ul de securitate pentru mediul de producție. De asemenea, poate doriți să consultați acest curs Udemy hacking și securizarea containerelor Docker.

ETICHETE:

  • Docher

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me