Opmerking vertaler.: Het onderwerp van Docker-beveiliging is misschien wel een van de tijdloze thema's in de moderne IT-wereld. Daarom presenteren we zonder verdere uitleg de vertaling van een nieuwe verzameling bijbehorende aanbevelingen. Als u al geïnteresseerd bent in dit onderwerp, zullen veel van deze aanbevelingen u bekend voorkomen. We hebben de verzameling aangevuld met een lijst van nuttige hulpmiddelen en enkele bronnen voor verdere studie van het onderwerp.

Ik bied u een handleiding voor het waarborgen van de beveiliging van Docker aan. Feedback is welkom, omdat dit eerder een verzameling fragmenten van verschillende bronnen is, en niet alle zijn grondig gecontroleerd. De aanbevelingen zijn onderverdeeld in drie categorieën:
- Noodzakelijke maatregelen binnen het besturingssysteem van de host bij het werken met Docker;
- Instructies met betrekking tot het configuratiebestand voor de build en het maken van containers;
- Beveiligingshulpmiddelen die kunnen integreren met specifieke functies van Docker Enterprise.
De basis voor de handleiding zijn verschillende bronnen, waarvan veel hieronder zijn vermeld. Het kan niet als uitputtend worden beschouwd, maar het dekt wel alle basisprincipes. Verdere informatie is te vinden in de beschrijving van de CIS-tests (de link is onderaan deze handleiding), evenals in de documentatie van Docker.
Docker Security Benchmark
controleert automatisch uw Docker op naleving van de meest gangbare best practices. Het script fungeert als een redelijk heuristische test voor beveiliging, maar moet niet worden beschouwd als een hulpmiddel voor een uitgebreide analyse.
Host OS
Het is duidelijk dat een Docker-container niet veilig kan zijn als het host-systeem zelf niet veilig is. Daarom is het noodzakelijk om de beste praktijken voor de beveiliging van besturingssystemen te volgen. Bovendien zou het verstandig zijn om kwetsbaarheidsanalyses uit te voeren naast de volgende aanbevelingen.
Auditregels
Maak en gebruik auditregels voor bestanden die verband houden met Docker met behulp van auditctl. Bijvoorbeeld, u kunt toevoegen -w /usr/bin/dockerd -k docker aan /etc/audit.rules en herstart de auditservice.
FIPS-modus
Het inschakelen van de FIPS-modus dwingt cryptografische tools om over te schakelen naar de algoritmen die zijn opgenomen in FIPS (Amerikaanse – opmerking vert.), zoals vereist door de federale en branche-eisen. Als het besturingssysteem van de host FIPS-modus ondersteunt, kan dit worden ingeschakeld met de volgende opdrachten:
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg && rebootFIPS moet ook ingeschakeld worden in de 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 dockerVoor meer informatie zie de documentatie en .
Docker Secrets
Gevoelige gegevens moeten als geheimen worden opgeslagen. Start de bijbehorende service met het commando 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 nginxZie voor details .
Configuratiebestand van Docker
De volgende instellingen kunnen aan het configuratiebestand worden toegevoegd /etc/docker/daemon.json:
-
"icc":false— schakelt gegevensuitwisseling tussen containers uit om onnodige informatielekkages te voorkomen. -
log-level: "info"— registreert alle logs behalve debuglogs. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } }— schakelt externe logging in, verzendt deze naar het opgegeven adres. Werkt alleen als de syslog-daemon draait. TCP en UDP worden als opties ondersteund. Ook kan dit per individuele container worden ingesteld. Hiervoor wordt een speciale vlag ingesteld bij het starten van Docker (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"— voorkomt privilege-escalatie door de namespace onder een specifieke gebruiker te isoleren.
Transportlaagbeveiliging
Toegang tot de Docker-daemon (indien externe toegang nodig is) moet alleen worden verleend aan gebruikers met toegang tot de TLS-clientreferenties.
Autorisatieplug-ins
Bepaal welke gebruikers welke opdrachten mogen uitvoeren en creëer de bijbehorende autorisatieplug-in voor Docker. Start vervolgens de Docker-daemon en voeg de plug-in toe:
dockerd --authorization-plugin=PLUGIN_IDVoor meer informatie over het maken van autorisatieplug-ins zie .
Daemonparameters
De Docker-daemon draait met een reeks standaardparameters.
-
--live-restore— deze parameter helpt de downtime van containers te minimaliseren bij het uitschakelen of herstarten van het systeem. Het wordt eenvoudiger om ze te patchen of bij te werken met minimale downtime; -
--userland-proxy=false— wanneer hairpin NAT's beschikbaar zijn of worden gebruikt, wordt proxy in de gebruikersruimte een overbodige service die alleen het aantal mogelijke aanvalsvectoren vergroot; -
--no-new-privileges— voorkomt dat containers extra privileges verkrijgen via suid of sguid; -
--seccomp-profile /path/to/profile— als u een eigen seccomp-profiel heeft, kunt u dit toepassen met deze vlag. Meer informatie over Seccomp en Docker vindt u .
Configuratie van containers en bouwbestanden
Gebruiker aanmaken
Zorg ervoor dat er een gebruiker voor de container is aangemaakt en voer deze uit onder die gebruiker (START de container NIET als root).
Afstandsbediening
Verbied externe toegang tot de daemon. Indien noodzakelijk, beveilig met certificaten.
Isolatie van de gebruikersnaamruimte
Het is vooral belangrijk om ervoor te zorgen dat de gebruikersnaamruimte in Docker is geïsoleerd, aangezien deze standaard wordt gedeeld met de naamruimte van de host. In sommige gevallen kan dit worden misbruikt om privileges te verhogen of zelfs om buiten de container te ontsnappen. De gebruikersnaamruimte kan worden geïsoleerd door het configuratiebestand aan te passen (zoals hierboven beschreven in de sectie 'Docker-configuratiebestand'). Deze kwestie wordt hier opnieuw genoemd vanwege het belang ervan.
Healthchecks
Een healthcheck is een krachtig hulpmiddel om de integriteit van de container te controleren. Het wordt ingesteld in de Dockerfile met de instructie HEALTHCHECK. Healthchecks zorgen ervoor dat de container goed functioneert. In het onderstaande voorbeeld eindigt de gezondheidscontrole op 0 als de server werkt en op 1 als deze 'is gecrasht':
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Als SELinux door het besturingssysteem van de host wordt ondersteund, maak of importeer dan een SELinux-beleid en start Docker in demon-modus met ingeschakeld SELinux:
docker daemon --selinux-enableIn dit geval kunnen Docker-containers worden uitgevoerd met beveiligingsparameters, zoals:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashNetwerkinterfaces
Standaard luistert Docker naar alle netwerkinterfaces. Aangezien verkeer in de meeste gevallen alleen op één van hen wordt verwacht, verhoogt deze aanpak onterecht het risico op aanvallen. Daarom kan bij het starten van een container de poorten worden gebonden aan specifieke interfaces op de host:
docker run --detach --publish 10.2.3.4:49153:80 nginxGecacheerde versies van afbeeldingen
Wanneer u afbeeldingen downloadt, zorgt u ervoor dat de lokale cache overeenkomt met de inhoud van de repository. Anders kunt u een verouderde versie van de afbeelding of een afbeelding met kwetsbaarheden krijgen.
Netwerkbrug
Het standaard netwerkmodel, docker0, is kwetsbaar voor aanvallen zoals ARP-spoofing en MAC-flooding. Om dit probleem op te lossen, creëert u een netwerkbrug volgens uw specificaties, zoals beschreven in .
Waarschuwing voor de Docker-socket
Stuur nooit de Docker-socket naar binnen in de container. Anders krijgt de container de mogelijkheid om Docker-commando's uit te voeren en dus contact te maken met het besturingssysteem van de host en deze te controleren. Doe dit niet.
Configuratie van Docker Enterprise
Docker Trust
Docker Trust stelt u in staat om sleutels te genereren waarmee u de cryptografische integriteit van afbeeldingen kunt verifiëren. Docker Trust-sleutels kunnen worden gebruikt om Docker-afbeeldingen te ondertekenen met privé-sleutels, die worden gecontroleerd met openbare sleutels op de Notary-server. Voor meer informatie - . Het inschakelen van Docker Trust in de Enterprise Engine wordt gedetailleerd beschreven in .
Kwetsbaarheidsscan
Docker Enterprise beschikt over een ingebouwde kwetsbaarheidsscanner, waarmee u de CVE-database kunt uploaden voor offline-scanning van kwetsbaarheden in afbeeldingen. Regelmatige scans van afbeeldingen helpen om ze veiliger te maken: de gebruiker ontvangt onmiddellijk waarschuwingen over ontdekte kwetsbaarheden. Meer informatie over hoe dit kan worden gedaan, zie .
Opmerking vertaler.: Er zijn ook open-source kwetsbaarheidsscaners beschikbaar voor Docker-afbeeldingen, voorbeelden hiervan zijn te vinden aan het einde van het artikel.
Integratie van LDAP en UCP
Universal Control Plane kan worden geïntegreerd met LDAP. Dit resulteert in een vereenvoudigd authenticatiesysteem, waardoor overbodige duplicatie kan worden vermeden. Meer hierover kunt u lezen in het artikel .
Andere materialen
Aanvullende informatie over de beste praktijken voor Docker-beveiliging is te vinden op . We raden ook aan om te downloaden .
Bonus van de vertaler
Als logische aanvulling op dit artikel publiceren we een lijst van 10 populaire open source-tools voor beveiliging in Docker. Het is overgenomen uit (geschreven door Bill Doerrfeld van Doerrfeld.io).
NB: Meer over veel van de hier genoemde projecten leest u ook in het artikel ‘».
- — het script dat in het begin van het artikel werd genoemd, dat Docker-containers controleert op naleving van gangbare beveiligingspraktijken.

- — waarschijnlijk de populairste tool voor statische analyse van kwetsbaarheden in containers. Het maakt hiervoor gebruik van talloze kwetsbaarhedendatabases zoals CVE (inclusief trackers van toonaangevende Linux-distributies zoals Red Hat, Debian, Ubuntu). Het biedt een API voor ontwikkelaars en een eenvoudige manier om functionaliteit uit te breiden (door «drivers» toe te voegen). Het wordt gebruikt in de populaire publieke container image registry (de overeenkomstige Docker Hub) — Quay.io.
- — een oplossing voor netwerkbeveiliging op kernniveau, gebaseerd op de technologie voor netwerkpakketfiltering BPF.
- — een tool voor het analyseren van de inhoud van images op beveiligingskwetsbaarheden tegen de CVE-database. Bovendien stelt het gebruikers in staat om beleidsregels toe te passen (op basis van verschillende gegevens, inclusief witte/zwarte lijsten, bestandsinhoud, enz.) om de beveiliging van containers te beoordelen.
- — een compleet ecosysteem voor het creëren en onderhouden van beveiligingsbeleid op verschillende platforms. Voor het controleren van containers biedt het de tool
oscap-docker. - — een tool voor het scannen van Docker-containers op kwetsbaarheden, trojans, virussen en malware. De CVE-databases zijn opgenomen met controles op afhankelijkheden van OWASP, de Red Hat Oval-database, en de Exploit Database.
- — een framework voor het ondertekenen van Docker-images, oorspronkelijk ontwikkeld bij Docker Inc (en daarna overgedragen voor verdere ontwikkeling naar CNCF). Het gebruik ervan maakt het mogelijk om rollen te delegeren en verantwoordelijkheden te verdelen over containers, evenals de cryptografische integriteit van images te verifiëren.
- — API voor metadata, ontworpen voor het beheren van interne beveiligingsbeleid. Bijvoorbeeld, het verbetert de werking van beveiligingsscanners voor containers. Shopify gebruikt deze API voor het beheren van metadata van hun 500.000 images.
- — een hulpmiddel voor Kubernetes dat het systeemgedrag volgt: activiteit in containers, op hosts, in het netwerk. Het maakt continue controles in de infrastructuur mogelijk, anomaliedetectie en het verzenden van waarschuwingen voor elke Linux-systeemcall.
- — nog een tool voor statische analyse van Docker-container images. Hiermee kun je 'kijken' naar de bestanden van de image, noodzakelijke gegevens verzamelen, de nodige beleid toepassen, enz.
Een andere goede verzameling praktische aanbevelingen over hoe Docker veiliger te maken, is te vinden in het bedrijf Aqua Security. Veel van hun adviezen overlappen met de hierboven genoemde, maar er zijn ook andere. Zo raden de auteurs aan om het gedrag in containers te monitoren en geven ze aan waar je op moet letten bij het gebruik van Docker Swarm.
Voor wie dieper in dit onderwerp wil duiken, is er vorig jaar een boek "»", waarvan fragmenten vrij beschikbaar zijn. .
Tot slot, voor praktische kennismaking met enkele aspecten van Docker-beveiliging: Seccomp-profielen en het gebruik van Linux-kernel-capabilities in containers — kun je de bijbehorende laboratoria uitvoeren op de * — zie sectie "Beveiliging".

* Over deze bron hebben we In 19% van de populairste Docker-images is er geen wachtwoord voor root. .
P.S. van de vertaler
Lees ook op onze blog:
- «»;
- «»;
- «»;
- «»;
- «»;
- «».
Bron: habr.com

