Securitate pentru containerele Docker

Nota traducătorului.: Tema securității Docker este, fără îndoială, una dintre cele mai vechi în lumea IT-ului modern. Prin urmare, fără alte explicații, vă prezentăm traducerea unei selecții de recomandări corespunzătoare. Dacă deja v-ați interesat de această problemă, multe dintre ele vă vor fi familiare. Am completat selecția cu o listă de utilitare utile și câteva resurse pentru aprofundarea subiectului.

Securitate pentru containerele Docker

Vă propun atenției un ghid pentru asigurarea securității Docker. Feedback-ul este binevenit, deoarece acesta este mai mult un compendiu de extrase din diferite resurse, iar nu toate au fost supuse unei verificări riguroase. Recomandările sunt împărțite în trei categorii:

  1. Măsuri necesare în sistemul de operare gazdă atunci când lucrați cu Docker;
  2. Instrucțiuni referitoare la fișierul de configurare a construcției și la crearea containerelor;
  3. Instrumente pentru securitate care se pot integra cu funcțiile specifice ale Docker Enterprise.


Ghida sa bazat pe diverse resurse, multe dintre ele sunt enumerate mai jos. Nu poate fi considerat cuprinzător, însă acoperă toate bazele. Informații suplimentare pot fi găsite în descrierea testelor CIS (linkul este furnizat la sfârșitul acestui ghid), precum și în documentația Docker.

Docker Security Benchmark

Docker Bench for Security verifică automat Docker-ul dvs. pentru conformitatea cu cele mai comune cele mai bune practici. Scriptul servește ca un test de securitate euristic decent, totuși nu ar trebui să fie considerat un instrument de analiză completă.

OS gazdă

Este evident că un container Docker nu poate fi securizat dacă sistemul gazdă nu este protejat. Prin urmare, trebuie urmate cele mai bune practici în domeniul securității sistemelor de operare. În plus, ar fi prudent să efectuați o analiză a vulnerabilităților, pe lângă recomandările următoare.

Reguli de audit

Creați și utilizați reguli de audit pentru fișierele legate de Docker, folosind auditctl. De exemplu, puteți adăuga -w /usr/bin/dockerd -k docker la /etc/audit.rules și reporniți serviciul de audit.

Modul FIPS

Activarea modulului FIPS determină instrumentele criptografice să comute pe algoritmi incluse în FIPS (standardele federale de procesare a informațiilor din SUA) — nota trad.), conform astfel la normele și cerințele federale și de sector. Dacă sistemul de operare al gazdei suportă modul FIPS, acesta poate fi activat prin următoarele comenzi:

sed -i 's\/GRUB_CMDLINE_LINUX="\/GRUB_CMDLINE_LINUX="fips=1 \/g' \/etc\/default\/grub\ngrub2-mkconfig -o \/boot\/grub2\/grub.cfg && reboot

De asemenea, este necesar să activați FIPS în Docker Engine:

mkdir -p \/etc\/systemd\/system\/docker.service.d 2>&1; echo -e "[Service]n Environment="DOCKER_FIPS=1"" > \/etc\/systemd\/system\/docker.service.d\/fips-module.conf; systemctl daemon-reload; systemctl restart docker

Pentru informații suplimentare, consultați documentația Docker și Red Hat.

Docker Secrets

Informațiile confidențiale trebuie stocate ca secrete. Puteți lansa serviciul corespunzător folosind comanda docker service create:

docker service create --label com.docker.ucp.access.label=\/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginx

Detalii pot fi găsite în documentation.

Fișierul de configurare al Docker-ului

Următoarele setări pot fi adăugate în fișierul de configurare /etc/docker/daemon.json:

  • "icc":false — dezactivează schimbul de date între containere pentru a evita scurgerile de informații inutile.
  • log-level: "info" — capturează toate logurile, cu excepția celor de debug.
  • {
      "log-driver": "syslog",
      "log-opts": {
        "syslog-address": "udp:\/\/1.2.3.4:1111"
      }
    }

    — activează trimiterea logurilor la distanță, transmițându-le la adresa specificată. Funcționează doar dacă demonul syslog este pornit. Opțiunile acceptate sunt TCP și UDP. Este de asemenea posibilă conectarea pentru fiecare container în parte. Pentru aceasta, se stabilește un flag special la pornirea Docker-ului (--log-opt syslog-address=ADDRESS).

  • "userns-remap": "Your_User" — previne creșterea privilegiilor (privilege escalation), izolând spațiul de nume pentru un anumit utilizator.

Securitatea nivelului de transport

Accesul la demonul Docker trebuie să fie permis doar utilizatorilor care au acces la acreditivele TLS ale clientului.

Pluginuri de autorizare

Stabiliți care utilizatori au permisiuni pentru ce comenzi și creați pluginul de autorizare corespunzător pentru Docker. Apoi, lansați demonul Docker și adăugați pluginul:

dockerd --authorization-plugin=PLUGIN_ID

Pentru a afla mai multe despre crearea pluginurilor de autorizare, consultați documentation.

Parametrii demonului

Demonul Docker funcționează cu un set de parametri prestabiliți.

  • --live-restore — acest parametru ajută la reducerea timpului de nefuncționare al containerelor atunci când sistemul este oprit sau repornit. Devine mai ușor să le aplicați patch-uri sau să le actualizați cu un timp minim de nefuncționare;
  • --userland-proxy=false — atunci când sunt utilizate NAT hairpin, proxy-ul în spațiul utilizatorului devine un serviciu redundant, care doar crește numărul vectorilor posibili de atac;
  • --no-new-privileges — împiedică obținerea de privilegii suplimentare pentru containere prin suid sau sguid;
  • --seccomp-profile /path/to/profile — dacă aveți un profil seccomp propriu, îl puteți aplica folosind acest flag. Aflați mai multe despre Seccomp și Docker aici.

Configurarea containerelor și a fișierelor de construcție

Crearea utilizatorului

Asigurați-vă că pentru container există un utilizator creat și rulați-l sub acest utilizator (NU rulați containerul sub root).

Acces de la distanță

Interziceți accesul de la distanță la demon. Dacă este necesar, protejați-l cu certificate.

Izolarea spațiului de nume al utilizatorului

Este deosebit de important să ne asigurăm că spațiul de nume al utilizatorului în Docker este izolat, deoarece, în mod implicit, este utilizat împreună cu spațiul de nume al gazdei. În unele cazuri, acest lucru poate fi folosit pentru creșterea privilegiilor sau chiar pentru a ieși din container. Spațiul de utilizator poate fi izolat prin editarea fișierului de configurare (așa cum este descris mai sus în secțiunea „Fișierul de configurare Docker”). O mențiune suplimentară a acestei probleme aici este cauzată de importanța sa.

Healthcheck-uri

Healthcheck (verificarea stării) este un instrument puternic care permite verificarea integrității containerului. Acesta se configurează în Dockerfile folosind instrucțiunea HEALTHCHECK. Healthcheck-urile permit verificarea faptului că containerul funcționează corespunzător. În exemplul de mai jos, verificarea stării returnează 0 dacă serverul funcționează și 1 dacă acesta „s-a prăbușit”:

HEALTHCHECK CMD curl --fail http://localhost || exit 1

SELinux

Dacă SELinux este suportat de sistemul de operare al gazdei, creați sau importați o politică SELinux și rulați Docker în modul demon cu SELinux activat:

docker daemon --selinux-enable

În acest caz, containerele Docker pot fi rulate cu opțiuni de securitate, de exemplu:

docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash

Interfețe de rețea

În mod implicit, Docker ascultă toate interfețele de rețea. Deoarece în majoritatea cazurilor traficul este așteptat doar pe una dintre ele, această abordare crește nejustificat riscul de atac. Prin urmare, la pornirea unui container, puteți lega porturile sale la interfețe specifice pe gazdă:

docker run --detach --publish 10.2.3.4:49153:80 nginx

Versiuni cache ale imaginilor

Când descărcați imagini, asigurați-vă că cache-ul local corespunde conținutului depozitului. Altfel, s-ar putea să obțineți o versiune învechită a imaginii sau o imagine care conține vulnerabilități.

Pod de rețea

Modelul de rețea implicit, docker0, este vulnerabil la atacuri de tip ARP-spoofing și MAC-flooding. Pentru a rezolva această problemă, creați un pod de rețea conform specificațiilor dvs., așa cum este descris aici.

Avertisment privind socket-ul Docker

Nu expuneți niciodată socket-ul Docker în interiorul containerului. În caz contrar, containerul va avea capacitatea de a executa comenzi Docker și, prin urmare, de a interacționa cu sistemul de operare al gazdei și de a-l controla. Nu faceți asta.

Configurarea Docker Enterprise

Docker Trust

Docker Trust vă permite să generați chei care pot fi folosite pentru a verifica integritatea criptografică a imaginilor. Cheile Docker Trust pot fi utilizate pentru a semna imaginile Docker cu chei private, verificate de cheile publice pe Notary Server. Mai multe informații - aici. Activarea Docker Trust în Enterprise Engine este descrisă detaliat în această secțiune a documentației.

Scanarea vulnerabilităților

Docker Enterprise dispune de un scanner de vulnerabilități integrat, care oferă posibilitatea de a încărca o bază CVE pentru scanarea offline a vulnerabilităților în imagini. Scanarea regulată a imaginilor ajută la creșterea securității acestora: utilizatorul primește imediat avertismente despre vulnerabilitățile găsite. Mai multe informații despre cum se poate face acest lucru, vezi aici.

Nota traducătorului.: Există și scannere de vulnerabilități Open Source pentru imaginile Docker, exemplele cărora sunt incluse la sfârșitul materialului.

Integrarea LDAP și UCP

Universal Control Plane poate fi integrat cu LDAP. Rezultatul va fi un sistem de autentificare simplificat, care permite evitarea duplicării inutile. Puteți citi mai multe despre acest lucru în articolul Integrate with an LDAP directory.

Alte materiale

Informații suplimentare despre cele mai bune practici în securitatea Docker pot fi găsite pe docs.docker.com. De asemenea, vă recomandăm să descărcați testele Center for Internet Security pentru Docker.

Bonus de la translator

Ca o completare logică la acest articol, publicăm o listă cu 10 utilitare Open Source populare pentru securitatea în Docker. A fost preluat din un alt articol (scris de Bill Doerrfeld de la Doerrfeld.io).

NB: Aflați mai multe despre multe dintre proiectele menționate aici în articolul „33+ instrumente pentru securitatea Kubernetes».

  1. Docker Bench for Security — scriptul menționat chiar la începutul articolului care verifică containele Docker pentru conformitatea cu practicile de securitate uzuale.

    Securitate pentru containerele Docker

  2. Clair — probabil cea mai populară utilitate pentru analiza statică a vulnerabilităților în containere. Folosește pentru aceasta numeroase baze de date cu vulnerabilități CVE (inclusiv trackere ale principalelor distribuții Linux, cum ar fi Red Hat, Debian, Ubuntu). Oferă un API pentru dezvoltatori și o modalitate simplă de extindere a funcțiilor (prin adăugarea de „driveri”). Este utilizat în registrul public popular de imagini de containere (analog cu Docker Hub) — Quay.io.
  3. Cilium — o soluție pentru asigurarea securității rețelei la nivel de kernel, bazată pe tehnologia de filtrare a pachetelor de rețea BPF.
  4. Anchore — o utilitate pentru analiza conținutului imaginii pentru a găsi vulnerabilități de securitate bazate pe CVE. În plus, aceasta permite aplicarea politicilor personalizate (pe baza unor date diferite, inclusiv liste albe/negre, conținutul fișierelor etc.) pentru evaluarea securității containerelor.
  5. OpenSCAP Workbench — un întreg ecosistem pentru crearea și menținerea politicilor de securitate pe diferite platforme. Oferă o utilitate pentru verificarea containerelor oscap-docker.
  6. Dagda — o utilitate pentru scanarea containerelor Docker pentru vulnerabilități, troiane, viruși și malware. În bazele CVE sunt incluse verificări privind dependențele OWASP, baza Red Hat Oval, precum și repositariul de exploatări Exploit Database.
  7. Notary — un cadru pentru semnarea imaginilor Docker, inițial creat în Docker Inc (și apoi transmis către CNCF pentru dezvoltare). Utilizarea sa permite delegarea rolurilor și distribuirea responsabilităților în cadrul containerelor, precum și verificarea integrității criptografice a imaginilor.
  8. Grafaes — un API pentru metadate, destinat gestionării politicilor interne de securitate. De exemplu, permite îmbunătățirea funcționării scannerelor de securitate ale containerelor. Shopify folosește acest API pentru a gestiona metadatele celor 500 de mii de imagini ale sale.
  9. Sysdig Falco — un utilitar pentru Kubernetes care monitorizează comportamentul sistemului: activitatea din containere, pe gazde, în rețea. Permite configurarea de verificări continue în infrastructură, detectarea anomaliilor și trimiterea de alerte pentru orice apeluri de sistem Linux.
  10. Banyanops Collector — încă un instrument pentru analiza statică a imaginilor containerelor Docker. Permite „a privi” în fișierele imaginii, colectând datele necesare, aplicând politicile dorite etc.

O altă selecție bună de recomandări practice pentru a face Docker mai sigur poate fi găsită în această articole compania Aqua Security. Multe dintre sfaturile sale se intersectează cu cele menționate mai sus, dar există și altele. De exemplu, autorii propun organizarea monitorizării activității în containere și indică la ce aspecte să se acorde atenție atunci când se utilizează Docker Swarm.

Pentru cei care doresc să se aprofundeze și mai mult în acest subiect, anul trecut a fost publicată cartea „Docker Security: Quick Reference»”, fragmentele căreia sunt disponibile gratuit aici.

În sfârșit, pentru o familiarizare practică cu unele aspecte ale securității Docker: profilele Seccomp și utilizarea capabilităților nucleului Linux în containere — se pot efectua lucrările de laborator corespunzătoare pe resursa Play with Docker * — vezi secțiunea „Securitate”.* Despre această resursă noi

Securitate pentru containerele Docker

am scris acum doi ani, iar în noiembrie 2018 a avut loc o poveste foarte interesantă (din perspectiva securității) în legătură cu ea. Pe scurt, specialiștii de la CyberArk Software Ltd. au reușit să o hacked: au obținut posibilitatea de a executa comenzi în afara containerelor, adică pe sistemul gazdă. O ilustrare frumoasă a problemei de securitate în Docker, nu-i așa? Toate detaliile despre ceea ce s-a întâmplat pot fi citite despre OPA și SPIFFE — două noi proiecte în CNCF pentru securitatea aplicațiilor cloud aici.

P.S. de la traducător

Citiți și în blogul nostru:

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster