Comment résoudre les problèmes de sécurité de Docker?

1. La différence détaillée entre le conteneur Docker et la machine virtuelle

  • Isolement et partage

    • ① En ajoutant la couche Hyperviseur, la machine virtuelle virtualise le matériel virtuel tel que la carte réseau, la mémoire et le processeur, puis y construit des machines virtuelles. Chaque machine virtuelle possède son propre noyau système.
    • ② Le conteneur Docker isole le système de fichiers, le processus, l'équipement, le réseau et d'autres ressources via l'isolation, puis contrôle les autorisations, les ressources CPU, etc., de sorte que les conteneurs ne s'affectent pas et que le conteneur ne peut pas affecter l'hôte. Le conteneur partage le noyau, le système de fichiers, le matériel et d'autres ressources avec l'hôte.
  • Performance et perte

    • ① Par rapport aux machines virtuelles, la consommation de ressources du conteneur est moindre. Sous le même hôte, plus de conteneurs peuvent être créés que de machines virtuelles. Cependant, la sécurité des machines virtuelles est légèrement meilleure que celle des conteneurs.
    • ②Pour passer de la machine virtuelle à l'hôte ou à d'autres machines virtuelles, il est nécessaire de traverser d'abord la couche Hypervisor, ce qui est extrêmement difficile. Le conteneur Docker partage des ressources telles que le noyau et le système de fichiers avec l'hôte, ce qui est plus susceptible d'avoir un impact sur les autres conteneurs et l'hôte.

Deuxièmement, les problèmes de sécurité de Docker

2.1 Les propres vulnérabilités de Docker

  • En tant qu'application, Docker lui-même a des failles de code dans son implémentation. CVE enregistre officiellement plus de 20 vulnérabilités dans la version historique de Docker.
  • Les principales méthodes d'attaque couramment utilisées par les pirates sont l'exécution de code, l'élévation de privilèges, la fuite d'informations et le contournement de privilèges. La version actuelle de Docker change très rapidement et les utilisateurs de Docker sont mieux placés pour mettre à niveau Docker vers la dernière version.

2.2 Problème de code source Docker

  • Docker fournit un hub Docker, qui permet aux utilisateurs de télécharger les images créées pour que d'autres utilisateurs les téléchargent et créent rapidement l'environnement.
    Mais cela entraîne également des problèmes de sécurité. Par exemple, les trois méthodes suivantes:
    • ① Les pirates téléchargent des images malveillantes. Si un pirate implante des logiciels malveillants tels que des chevaux de Troie et des portes dérobées dans les images créées, l'environnement ne sera pas sécurisé dès le début et il n'y aura plus de sécurité à l'avenir.
    • ②L'image utilise un logiciel vulnérable. Parmi les images téléchargeables sur Docker Hub, 75% des images ont le logiciel vulnérable installé. Par conséquent, après avoir téléchargé l'image miroir, vous
      devez vérifier les informations de version du logiciel à l'intérieur, si la version correspondante présente des vulnérabilités, la mettre à jour et la corriger à temps.
    • ③Attaque de l'homme du milieu, la falsification de l'image miroir peut être altérée pendant la transmission.La nouvelle version de Docker a fourni un mécanisme de vérification correspondant pour éviter ce problème.

Troisièmement, les défauts de l'architecture Docker et les mécanismes de sécurité

  • L'architecture et le mécanisme de Docker peuvent poser des problèmes. Par exemple, dans un tel scénario d'attaque, le pirate a contrôlé certains conteneurs sur l'hôte ou a obtenu un moyen de créer un conteneur sur le cloud public, puis de lancer une attaque sur l'hôte ou attaque d'autres conteneurs.

    • ① Attaques de réseau local entre conteneurs Les conteneurs sur l'
      hôte peuvent former un réseau local, de sorte que l'usurpation d'ARP, le reniflage, la tempête de diffusion et d'autres méthodes d'attaque contre le réseau local peuvent être utilisées. Par conséquent, le déploiement de plusieurs conteneurs sur un hôte nécessite une configuration réseau raisonnable et des règles iptables;

    • ② Les attaques DDoS épuisent les ressources. Le
      mécanisme de sécurité de Cgroups est d'empêcher de telles attaques. N'allouez pas trop de ressources à un seul conteneur pour éviter de tels problèmes;


    • Appels système vulnérables Une différence importante entre Docker et les machines virtuelles est que Docker et l'hôte partagent le même noyau de système d'exploitation. Une fois que le noyau de l'hôte a des vulnérabilités qui peuvent être remplacées ou augmentées, bien que Docker utilise des utilisateurs ordinaires pour s'exécuter, lorsque le conteneur est envahi, l'attaquant peut également utiliser les vulnérabilités du noyau pour accéder à l'hôte pour en faire plus.

    • ④Partager les autorisations de l'utilisateur root
      Si vous exécutez un conteneur avec des autorisations d'utilisateur root, l'utilisateur root dans le conteneur dispose également des autorisations root sur l'hôte.

Quatre, normes de base de sécurité Docker

  • C'est-à-dire la solution au problème de sécurité qui apparaît.
    Ce qui suit résume la norme de base de sécurité Docker sous six aspects: noyau, hôte, réseau, image, conteneur et autres.

4.1 Niveau du noyau

1)及时更新内核。 2)User NameSpace(容器内的 root 权限在容器之外处于非高权限状态)。 3)Cgroups(对资源的配额和度量)。 4)SELiux/AppArmor/GRSEC(控制文件访问权限)。 5)Capability(权限划分)。 6)Seccomp(限定系统调用)。 7)禁止将容器的命名空间与宿主机进程命名空间共享。

4.2 Niveau hôte

1)为容器创建独立分区。 2)仅运行必要的服务。 3)禁止将宿主机上敏感目录映射到容器。 4)对 Docker 守护进程、相关文件和目录进行审计。 5)设置适当的默认文件描述符数。
(文件描述符:内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。
打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件) 6)用户权限为 root 的 Docker 相关文件的访问权限应该为 644 或者更低权限。 7)周期性检查每个主机的容器清单,并清理不必要的容器。

4.3 Niveau réseau

1)通过 iptables 设定规则实现禁止或允许容器之间网络流量。 2)允许 Docker 修改 iptables。 3)禁止将 Docker 绑定到其他 IP/Port 或者 Unix Socket。 4)禁止在容器上映射特权端口。 5)容器上只开放所需要的端口。 6)禁止在容器上使用主机网络模式。7)若宿主机有多个网卡,将容器进入流量绑定到特定的主机网卡上。

4.4 Niveau du miroir

1)创建本地镜像仓库服务器。 2)镜像中软件都为最新版本。 3)使用可信镜像文件,并通过安全通道下载。4)重新构建镜像而非对容器和镜像打补丁。 5)合理管理镜像标签,及时移除不再使用的镜像。 6)使用镜像扫描。 7)使用镜像签名。

4.5 Niveau du conteneur

1)容器最小化,操作系统镜像最小集。 2)容器以单一主进程的方式运行。 3)禁止 privileged 标记使用特权容器。 4)禁止在容器上运行 ssh 服务。 5)以只读的方式挂载容器的根目录系统。 6)明确定义属于容器的数据盘符。 7)通过设置 on-failure 限制容器尝试重启的次数,容器反复重启容易丢失数据。 8)限制在容器中可用的进程树,以防止 fork bomb。(fork炸弹,迅速增长子进程,耗尽系统进程数量)

4.6 Autres paramètres

1)定期对宿主机系统及容器进行安全审计。 2)使用最少资源和最低权限运行容器。 3)避免在同一宿主机上部署大量容器,维持在一个能够管理的数量。 4)监控 Docker 容器的使用,性能以及其他各项指标。 5)增加实时威胁检测和事件响应功能。 6)使用中心和远程日志收集服务

Cinq, appels à distance Docker et restrictions de trafic

5.1 Contrôle d'accès à l'API à distance de Docker

  • L'interface d'API d'appel à distance de Docker présente des vulnérabilités d'accès non autorisé, et au moins l'accès au réseau externe doit être restreint. Il est recommandé d'utiliser Socket pour accéder.

  • Pour surveiller l'IP de l'intranet, la méthode de démarrage du démon docker est la suivante:

docker -d -H unix:///var/run/docker.sock -H tcp://192.168.140.22:2375
或者
vim /usr/lib/systemd/system/docker.service
  • Ouvrir l'adresse et le port d'écoute locaux
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://192.168.140.22:2375

systemctl daemon-reload

systemctl restart docker
  • Ensuite, vous pouvez effectuer un contrôle d'accès IP sur le pare-feu de l'hôte.
    Remarque: l'adresse source est l'adresse du client
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.140.21" port protocol="tcp" port="2375" accept"

firewall-cmd --reload		//重新加载防火墙策略
  • Enfin, l'appel distant est implémenté dans l'opération client
docker -H tcp://192.168.140.22 images	//在客户端查看服务端的docker镜像

5.2 Limitation du flux de trafic

  • Utilisez des filtres de pare-feu pour restreindre la plage d'adresses IP source du conteneur Docker pour communiquer avec le monde extérieur.
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.140.0/24" reject"
  • Un grand nombre de problèmes sont causés par des vulnérabilités provoquées par la version externe des ports de conteneurs Docker. En plus du problème de contrôle des autorisations de compte du système d'exploitation, il s'agit également d'un danger caché dans la gestion des processus de Docker Daemon.
    • À l'heure actuelle, les versions de Docker couramment utilisées prennent en charge Docker Daemon pour gérer les iptables de l'hôte, et une fois le processus lancé et le mappage de port de -p host_port: guest_port est ajouté, Docker Daemon augmentera directement la chaîne FORWARD correspondante et -j ACCEPT, et la règle DROP par défaut est dans La chaîne INPUT ne restreint pas le menu fixe, ce qui laisse un risque de sécurité sérieux. Par conséquent, il est recommandé:
1. 不在有外网ip的机器上使用Docker服务

2. 使用k8s等docker编排系统管理Docker容器

3. 宿主上Docker daemon启动命令加一个--iptables=false,然后把常用iptables写进文件里,再用iptables-restore去刷。

Six, minimisation des conteneurs et sécurité des images

6.1 Minimisation des conteneurs

  • Si seuls les services nécessaires sont exécutés dans le conteneur, les services tels que SSH ne peuvent pas être facilement ouverts pour se connecter au conteneur.
    Les méthodes suivantes sont généralement utilisées pour entrer dans le conteneur:
docker exec -it 容器ID bash

6.2 Sécurité de l'image

  • Analyse de sécurité de l'image Docker, utilisez l'authentification par certificat sur le client de l'entrepôt miroir pour vérifier l'image téléchargée.
    En analysant le miroir de manière synchrone avec la base de données CVE, les utilisateurs seront avertis de traiter toutes les vulnérabilités une fois qu'elles sont trouvées, ou le miroir peut être directement empêché de continuer à se construire.
  • Remarque:
    • ① Si l'entreprise utilise sa propre source miroir, vous pouvez ignorer cette étape;
      sinon, au moins le md5 et les autres valeurs caractéristiques de l'image de base doivent être vérifiés, et l'image de base est confirmée comme étant cohérente avant la construction ultérieure basée sur l'image de base .

    • ②Dans des circonstances normales, assurez-vous de n'obtenir que des images de bibliothèques de confiance et il n'est pas recommandé d'utiliser le paramètre –insecure-registry = []. Il est
      recommandé d'utiliser l'entrepôt privé du port.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42449832/article/details/114915149
conseillé
Classement