In DevOps et le Sécurité Dernière mise à jourated:
Partager sur:
Cloudways propose un hébergement cloud géré aux entreprises de toutes tailles pour héberger un site Web ou des applications Web complexes.

Voyons comment renforcer et sécuriser le Docker pour l'environnement de production.

Bien que Docker a permis aux développeurs de logiciels et aux ingénieurs DevOps de créer et de déployer rapidement des applications, il est également livré avec une grande surface d'attaque pour les cyber-pirates à levervieillir.

Nous verrons comment sécuriser un Docker sur un Linux platforme à partir de ce qui suit.

  • Défauts de configuration
  • Exécution de code à distance
  • Buffer Les débordements
  • Falsification d'images et ainsi de suite.

Nous utiliserons les outils suivants, tels que Serveur notaire de Docker signer des images et Docker bench sécurité pour vérifier l'hôte, la configuration du démon, etc.

Avant de procéder à la sécurisation, abordons les bases.

Qu'est-ce qu'une technologie de conteneur?

La technologie des conteneurs permet aux développeurs ou aux ingénieurs DevOps de packager une application afin qu'elle puisse s'exécuter avec des dépendances isolées.ated d'un autre processpar exemple.

Il existe un certain nombre de technologies de conteneurs sur le marché, telles que Apache Mésos, lxcet Docker. Bien qu'ils relèvent du cateEn raison de la technologie des conteneurs, ils fonctionnent différemment.

Différence entre VM et VE

Un hôte de machine virtuelle est entièrement différent d'un hôte d'environnement virtuel. Sur les machines virtuelles, chaque application conteneurisée est livrée avec son propre ensemble de bibliothèques et de système d'exploitation, tandis que les applications, par défaut, sur un hôte d'environnement virtuel tel que lxc et docker partagent le noyau Linux.

Qu'est-ce que Docker?

Docker est une technologie de conteneur utilisée par des millions de personnes pour créerate une application Web et déployez-la d'un environnement de test vers un environnement de production.

Docker Engine

Le Docker Engine est composé de trois composants.

  • Un serveur : ce composant est un outil de longue durée process ou démon responsable de la gestion des images et des conteneurs.
  • API REST : Cette interface permet au démon Docker et à l'outil client Docker de communiquerate.
  • Outil client Docker : l'outil client Docker utilise le composant API REST pour informer le démon Docker de fonctionnerate une application conteneurisée.

Registre de confiance Docker

Docker Trusted Registry est une solution de stockage d'images de Docker pour les entreprisesrise platformer une entreprise. C'est différent du hub docker. Alors que le docker hub est hébergé dans le cloud, le registre de confiance docker est une solution de stockage sur site pour Entreprise Dockerrise édition.

Trust du contenu Docker

Docker Content Trust offre la possibilité d'utiliser des signatures de données pour les images envoyées et reçues vers et depuis des registres Docker distants tels que Docker Hub.

Espaces de noms Linux

Les espaces de noms Linux sont une fonctionnalité du noyau Linux isoléeatesa application conteneurisée ou process exécuté sur un hôte d'environnement virtuel provenant d'un autre processpar exemple.

Groupes de contrôle Linux (Cgroups)

Les groupes de contrôle Linux sont une fonctionnalité du noyau Linux qui vous permet d'attribuerate ressources telles que le temps CPU, le réseau bandwidth, la mémoire système, etc. processes sur un hôte.

Capacités

Sous Linux, il existe une fonctionnalité de sécurité dans le sous-système du noyau qui peut être définie ou appliquée pour limiter les privilèges. process tel process exécuté par un utilisateur avec l'UID 1. Bien que privilégié processSi les utilisateurs ou les utilisateurs peuvent contourner les autorisations discrétionnaires de contrôle d'accès, ils ne peuvent pas contourner les règles de capacités.

Concentrons-nous maintenant sur la sécurité.

Sécurisation de l'hôte Docker

Dans cette section, nous verrons comment sécuriser l'hôte sur lequel réside Docker.

Analyse du noyau Linux

Avant d'héberger un docker sur Linux platformulaire, vous devez d'abord inspect le noyau. Il existe plusieurs outils open source tels que Lynis et le OuvrirVAS vous pouvez utiliser pour analyser le noyau Linux.

Copiez ou clonez le projet Lynis à partir de Github à l'aide du git clone commander.

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

Ensuite, utilisez la commande ci-dessous pour naviguerate à la lynis répertoire et auditez le système Linux.

cd lynis; ./lynis audit system

Renforcer le noyau Linux

Après avoir analysé le noyau Linux à la recherche de vulnérabilités basées sur le système, vous pouvez en ajouter un autre. extra couche de protection au noyau via grsécurité. Il fournit des fonctionnalités de sécurité telles que les suivantes.

  • Buffer exploitation de débordement preventrée
  • /tmp vulnérabilité de course preventrée
  • /proc restrictions qui ne divulguent pas d'informations sur process propriétaires.
  • Prevmention de l'arbitexécution de code rare dans le noyau et ainsi de suite.

Initierally, vous pouvez download patchs gratuitement depuis grsecurity et appliquez-le à votre noyau actuel. Mais il n'autorise plus les correctifs gratuits.

Installer Docker dans une machine virtuelle

Au lieu d'installer Docker directement sur un hôte Linux, vous pouvez ajouter un extra couche de protection en l'installant dans une machine virtuelle. Ce faisant, même s'il existe un problème de vulnérabilité avec le noyau hôte, cela n'affectera pas les conteneurs Docker.

Protection des privilèges racine

Par défaut, Docker nécessite les privilèges root pour créerate et gérer les conteneurs. Le script malveillant peut levervieillir cette surface d'attaque pour s'intensifierate à un superutilisateur sur un hôte Linux et un événementally accéder aux fichiers/dossiers sensibles, aux images, aux certificatsates, etc.

HautrevPour le saisir, nous pouvons utiliser la commande suivante. Nous pouvons décider d'abandonner des capacités telles que setgid et le setuid Hautrevent d'autres programmes ou processes de changer leur GID à un autre GID ce qui peut entraîner une élévation de privilèges. Vous pouvez également vérifier ici pour une liste de définition des capacités Linux.

La commande ci-dessous exécute le conteneur du serveur Web Apache et supprime le setgid et le setuid capacités via --cap-drop Hautrevempêche le conteneur Apache de changer son GID et son UID par un autre UID et GID.

GID et UID dans ce contexte font référence à  group ID et le user ID respectivement.

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

Utilisateur Docker

En dehors de prevaccéder à d'autres programmes ou processes, vous pouvez aussi créerate un utilisateur pour gérer les opérations du docker telles que docker run  au lieu de le gérer via un superutilisateur.

Vous pouvez ajouter ou créerate un utilisateur de Docker via les éléments suivants :

sudo groupadd docker

La commande ci-dessus createun groupe appelé docker

Ensuite, créezate un utilisateur utilisant la commande ci-dessous :

sudo useradd mike

finally utilisez la commande ci-dessous pour ajouter un utilisateur mike au groupe docker pour administrer les opérations des dockers.

sudo usermod  -aG docker mike

Gérer le conteneur avec les Cgroups

Dans un environnement de production, vous pouvez avoir plusieurs conteneurs.

Si vous n'avez pas cgroups installé sur votre hôte, vous pouvez utiliser la commande suivante pour l'installer puis vérifier ici (pour Ubuntu) sur la façon de le configurer.

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

Nous pouvons allouerate les conteneurs à des ressources CPU limitées via le --cpu-shares et le --cpuset-cpus

L'exemple de commande suivant montre prodnginx récipient process est exécuté uniquement sur le premier noyau via --cpuset-cpus et est allouéate 20 processeurs via  --cpu-shares tandis que le proxnginx récipient process est exécuté sur les deux premiers cœurs de processeur et est également allouéated 20 processeurs.

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

Tapez ensuite la commande docker stats pour afficher l'utilisation du processeur par le prodnginx et le testnginx conteneurs

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK 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 

Il est judicieux de définir des partages CPU pour un hôte docker lorsque plusieurs conteneurs sont exécutés dessus.

Gestion des conteneurs avec des espaces de noms

Un espace de noms peut prevLes conteneurs ent ne s'exécutent pas en tant qu'utilisateurs privilégiés, ce qui peut aider à éviter les attaques par élévation de privilèges.

Nous pouvons activer l'espace de noms dans le docker en utilisant /etc/subuid  et le  /etc/subgid fichiers comme indiqué ci-dessous.

  • CREate un utilisateur utilisant le adduser commander
sudo adduser dockremap
  • Configurer un sous-guide pour l'utilisateur  dockremap
sudo sh -c 'echo dockremap:400000:65536 > /etc/subuid'
  • Ensuite, configurez le sous-gid pour l'utilisateur dockremap
sudo sh -c 'echo dockremap:400000:65536 > /etc/subgid'
  • Ouvrez le daemon.json fichier et remplissez-le avec le contenu suivant pour associerate le userns-remap attribut à l'utilisateur dockremap
vi   /etc/docker/daemon.json
{ 

 "userns-remap": "dockremap"

}
  • Press :wq pour enregistrer et fermer daemon.json fichier et finally redémarrez Docker pour activer les espaces de noms sur un hôte Docker
sudo  /etc/init.d/docker  restart

Sécuriser le démon Docker

Il est également nécessaire de configurer le démon Docker pour assurer une communication sécurisée entre le client docker et le démon docker via TLS.

Utilisez la commande suivante pour ouvrir daemon.json fichier et copiez et collez le contenu suivant (remplacez l'adresse IP par votre réelle) comme indiqué ci-dessous

vi  daemon.json
{
  "debug": false,
  "tls": true,
  "tlscert": "/var/docker/server.pem",
  "tlskey": "/var/docker/serverkey.pem",
  "hosts": ["tcp://192.168.16.5:2376"]
}

Sécurisation des composants Docker

Voyons comment utiliser des outils tels que CodeNotaire et le serveur notaire signer des images afin d'éviter la falsification d'images. De plus, il est également nécessaire de numériser des images juste pour être sûr que les images ne sont pas remplies de vulnérabilités

Nous utiliserons le serveur notarié de Docker pour signer et vérifier les images et utiliser Moteur d'ancre pour analyser les images à la recherche de vulnérabilités.

Vérifier les images avec Notary Server

Avant de pouvoir utiliser le serveur Notary pour signer des images, nous devons télécharger et installer docker-compose. Nous utiliserons Docker Compose pour mettre en place un serveur de notaire.

  • Exécutez la commande ci-dessous pour télécharger le lateère version de 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
  • Appliquer des autorisations exécutables au docker-compose comme indiqué ci-dessous
sudo chmod 700  /usr/local/bin/docker-compose
  • Vous pouvez tester si vous avez installé avec succès docker-compose via la commande suivante
docker-compose  --version
  • Maintenant, nous pouvons installer le serveur notaire via docker-compose
git clone https://github.com/theupdateframework/notary.git
  • La commande ci-dessus clone ou copie le serveur du notaire à partir du référentiel notaire
  • Démarrez le serveur notaire et le signataire via les commandes ci-dessous:
docker-compose build
docker-compose up -d
  • Copiez ensuite le certificat de configuration et de testsates à votre répertoire de notaire local en utilisant la commande ci-dessous
mkdir -p ~/.notary && cp cmd/notary/config.json cmd/notary/root-ca.crt ~/.notary
  • Maintenant, exécutez la commande suivante pour connecter le serveur notaire au client docker
export   DOCKER_CONTENT_TRUST=1
export  DOCKER_CONTENT_TRUST_SERVER=https://notaryserver:4443
  • Générerate une paire de clés de délégation via la commande ci-dessous
docker trust key generate mike --dir ~./docker/trust          
  • Maintenant, créonsate une cible de nouvelles clés au cas où le référentiel n'existe pas
docker trust signer add --key ~/.docker/trust/mike.pub mike mikedem0/whalesay
  • Ensuite, vous pouvez signer votre image docker à l'aide de la commande docker trust sign. Vous devez extraire l'image du docker du hub de docker et ré-étiqueter à l'aide de la commande docker pull et le docker tag respectivement.
docker trust sign mikedem0/nginx:latest

Vous pouvez également analyser les images du docker à la recherche de vulnérabilités et de défauts de configuration. Tu peux vérifier ici pour savoir comment utiliser Anchor Engine pour rechercher les vulnérabilités et Docker Bench Sécurité pour vérifier les défauts de configuration.

J'espère que ce qui précède vous donne une idée du Docker de sécurité pour l'environnement de production. Vous pouvez également consulter ce cours Udemy sur piratage et sécurisation des conteneurs Docker.

Partager sur:
  • Michel Aboagye
    Auteur
    Michael est un ingénieur logiciel / sécurité.

Merci à nos commanditaires

Plus de bonnes lectures sur DevOps

Alimentez votre entreprise

Certains des outils et services pour aider votre entreprise grow.
  • L'outil de synthèse vocale qui utilise l'IA pour générerate des voix humaines réalistes.

    Essayez Murf AI
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.

    Essayez Brightdata
  • Monday.com est un système d'exploitation de travail tout-en-un pour vous aider à gérer les projets, les tâches, le travail, les ventes, le CRM, les opérations, workflowset plus encore.

    Essayez Monday
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.

    Essayez Intruder