CINXE.COM
CERN Computer Security Information
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" href="/style.css" type="text/css" /> <script type="text/javascript" src="/jquery.min.js"></script> <title>CERN Computer Security Information</title> <script type="text/javascript"> $(document).ready(function(){ // Menu highlight var path = location.pathname.split("/"); if ( path ) { $('#main_menu a[href*="' + path[1] + '"][class!="noselect"]').addClass('selected'); // path[3] = /security/<xxxxx>/ $('#sidebar ul.sidemenu li[class!="noselect"]:has(a[href$="' + path.reverse()[0] + '"])').addClass('selected'); } // Add icon to external links $('a[id!=logo-img]').filter(function() { return this.hostname && this.hostname !== location.hostname; 聽 }).after(' <img src="/images/external_link.png" alt="external link" title="external link"/>'); }); </script> </head> <body> <div id="wrap"> <div id="top-bg"></div> <!--header --> <div id="header"> <div id="logo-text"> <a id="logo-img" href="https://home.cern/"><img src="/images/CERNLogo2.png" width="59" height="59" style="margin: 10px" alt="CERN Logo"/></a><div id="logo-text-big"><a href="/home/fr/index.shtml" title="">CERN Computer Security</a></div> </div> <div id="header-logo"><a href="/services/fr/emergency.shtml"><img width=335 src="/images/emergency.png" alt="Computer Emergencies"/></a></div> </div> <!--header ends--> <div id="header-photo"></div> <!-- navigation starts--> <div id="nav"> <ul id="main_menu"> <li><a class="noselect" href="/home/en/index.shtml"><img src="/images/gb.png" alt="EN" title="EN"/></a></li> <li><a href="/home/fr/index.shtml">Accueil</a></li> <li><a href="/rules/fr/index.shtml">Règles informatiques</a></li> <li><a href="/recommendations/fr/index.shtml">Recommandations</a></li> <li><a href="/training/fr/index.shtml">Formation</a></li> <li><a href="/services/fr/index.shtml">Services</a></li> <li><a class="secured" href="/reports/fr/index.shtml">Rapports & Présentations</a></li> </ul> </div> <!-- navigation ends--> <!-- content-wrap starts --> <div id="content-wrap"> <div id="main"> <h2>S茅curiser des Containers & Pods</h2> <p> Les personnes qui d茅couvrent les technologies de conteneurs et d'orchestration ont souvent l'impression que ces produits sont intrins猫quement s没rs et adapt茅s 脿 une utilisation en production. Bien que cela puisse ne pas 锚tre vrai, ces solutions offrent de nombreuses options de configuration pour renforcer la s茅curit茅 de l'environnement conteneuris茅 afin d'obtenir des protections similaires 脿 celles d'une machine virtuelle. De cette fa莽on, vous pouvez vous assurer que, m锚me si un attaquant parvient 脿 s'introduire dans une application, il aura du mal 脿 pivoter vers d'autres machines du r茅seau ou du syst猫me h么te. </p><p> IVous trouverez ci-dessous quelques strat茅gies pour am茅liorer la s茅curit茅 de vos environnements <a href="#l1">Kubernets</a> et <a href="#l2">Docker</a>. </p> <h4><a name="l1"></a><a href="http://clouddocs.web.cern.ch/clouddocs/containers/">Environments Kubernetes</a></h4> <p> </p> <table class="align-left"> <tbody> <tr><th class="align-center">Besoin</th><th class="align-center">Description</th><th class="align-center">Informations</th></tr> <tr> <td>Utilisez des services centraux au lieu de cr茅er vos propres clusters ou conteneurs.</td> <td>L'utilisation de services centraux vous permet de d茅l茅guer la responsabilit茅 de maintenir une configuration s茅curis茅e.</td> <td> <a href="https://openshift.cern.ch/console/catalog" target="_blank">CERN Openshift</a><br><a href="https://openstack.cern.ch/project/clusters/" target="_blank">CERN OpenStack</a> </td> </tr> <tr> <td>Activez CERN SSO pour tous les sites web qui seront expos茅s 脿 Internet. </td> <td>CERN SSO permet aux utilisateurs de s'authentifier 脿 votre application en utilisant leurs identifiants CERN.</td> <td> <a href="https://sso-management.web.cern.ch" target="_blank">G茅rer vos applications SSO</a><br><a href="https://espace.cern.ch/authentication/CERN%20Authentication/Home.aspx" target="_blank">Documentation sur l'authentification</a> </td> </tr> <tr> <td>Activez le protocole HTTPS sur vos applications Web.</td> <td>Le chiffrement permet de s'assurer que quelqu'un qui 茅coute vos communications ne peut pas voir les donn茅es sensibles qui sont transmises.</td> <td>Dans Openshift, vous pouvez d茅finir la route qui expose votre application pour qu'elle ait une <a href="https://docs.openshift.com/enterprise/3.0/architecture/core_concepts/routes.html#edge-termination" target="_blank">Edge termination</a><br>Dans OpenStack, vous pouvez <a href="https://clouddocs.web.cern.ch/clouddocs/containers/tutorials/lb.html" target="_blank">d茅finir un contr么leur d'entr茅e avec une terminaison SSL</a> </td> </tr> <tr> <td>Utilisez des images officielles fiables</td> <td>Les images officielles sont maintenues et sont g茅n茅ralement mieux s茅curis茅es que les autres. M锚me si vous trouvez une image non officielle qui correspond mieux 脿 vos besoins, vous devriez faire l'effort d'utiliser une image officielle. Le CERN g猫re son propre registre de conteneurs o霉 vous pouvez trouver des images fiables.<br>Nous vous sugg茅rons 茅galement de baser vos images sur l'image cc7-base du CERN.</td> <td> <a href="https://gitlab.cern.ch">CERN Gitlab</a><br><a href="https://gitlab.cern.ch/linuxsupport/cc7-base/container_registry">cc7-base image</a> </td> </tr> <tr> <td>Ex茅cutez <tt>kube-bench</tt> pour v茅rifier votre d茅ploiement Kubernetes.</td> <td> <tt>kube-bench</tt> v茅rifie votre configuration par rapport au <a href="https://www.cisecurity.org/benchmark/kubernetes/" target="_blank">CIS Kubernetes Benchmark</a>. Cet outil est d茅j脿 ex茅cut茅 par l'茅quipe OpenStack, il n'est donc pas n茅cessaire de l'ex茅cuter si votre cluster r茅side sur OpenStack.</td> <td><a href="https://github.com/aquasecurity/kube-bench" target="_blank">kube-bench</a></td> </tr> <tr> <td>Configurer les politiques de s茅curit茅 des pods.</td> <td>Les politiques de s茅curit茅 des pods vous permettent de sp茅cifier des r猫gles concernant les aspects sensibles de vos pods. Les pods qui ne respectent pas ces r猫gles ne sont pas autoris茅s 脿 entrer dans le syst猫me.</td> <td>Specification <a href="https://kubernetes.io/docs/concepts/policy/pod-security-policy/" target="_blank"><tt>PodSecurityPolicy</tt></a></td> </tr> <tr> <td>N'exposez pas vos pods au r茅seau si ce n'est pas n茅cessaire.</td> <td>Ex茅cuter un conteneur dans le r茅seau <tt>h么te</tt> ou exposer des ports sans n茅cessit茅 permet 脿 quiconque dans le r茅seau de s'y connecter.</td> <td> <a href="https://kubernetes.io/docs/concepts/policy/pod-security-policy/#host-namespaces" target="_blank"><tt>PodSecurityPolicy</tt> - Host namespaces options</a> peut vous aider 脿 vous assurer que vous n'exposez pas accidentellement quelque chose que vous ne voulez pas.</td> </tr> <tr> <td>Ne pas ex茅cuter les pods en tant qu'utilisateur root.</td> <td>An attacker who is running as root inside a pod is in a much better position to attach the network.</td> <td> <a href="https://kubernetes.io/docs/concepts/policy/pod-security-policy/#users-and-groups" target="_blank"><tt>PodSecurityPolicy</tt> - Users and groups options</a> can help ensure that all your pods run as allowed users.</td> </tr> <tr> <td>Scanner les images avant de les d茅ployer.</td> <td></td> <td>Nous pouvons fournir une instance <a href="https://github.com/coreos/clair" target="_blank">Clair</a>.<strong>TODO</strong> </td> </tr> <tr> <td>Ne codez pas en dur des secrets (par exemple, des informations de connexion) dans vos images.</td> <td>Les donn茅es sensibles telles que les combinaisons nom d'utilisateur-mot de passe ne doivent pas 锚tre stock茅es dans une image, car toute personne ayant acc猫s 脿 l'image sera en mesure de les lire.</td> <td> <a href="https://kubernetes.io/docs/concepts/configuration/secret/" target="_blank">Kubernetes secrets</a>. Si vous travaillez sur OpenStack Magnum, vous pouvez utiliser <a href="http://clouddocs.web.cern.ch/clouddocs/containers/tutorials/helm.html#managing-secrets" target="_blank">Helm managed Secrets with Barbican</a> </td> </tr> <tr> <td>Supprimer les secrets apr猫s les avoir lus.</td> <td>Vous pouvez supprimer les fichiers contenant vos secrets pour emp锚cher un 茅ventuel attaquant de les lire et de les utiliser pour acc茅der 脿 d'autres services du CERN que votre application utilise, s'il parvient 脿 s'introduire dans votre application. Cependant, vos secrets seront toujours 茅ventuellement trouv茅s en m茅moire, un attaquant suffisamment habile pourrait contourner cette d茅fense.</td> <td>Dans Kubernetes, vous pouvez avoir <a href="https://kubernetes.io/docs/concepts/workloads/pods/init-containers/" target="_blank">Init Container</a> qui s'ex茅cute avant l'ex茅cution de votre conteneur principal. Vous pouvez 茅galement cr茅er un <a href="https://kubernetes.io/docs/concepts/storage/volumes/#emptydir" target="_blank"><tt>emptyDir</tt> volume</a> qui est initialement vide lorsqu'un pod est cr茅茅. Vous pouvez combiner les deux en lisant vos fichiers secrets dans le <tt>initContainer</tt> et en les copiant sur votre volume. Ensuite, dans votre conteneur principal, vous pouvez monter le m锚me volume, lire vos secrets dans votre application et supprimer les fichiers du volume.</td> </tr> <tr> <td>Restreignez les connexions sortantes aux seuls h么tes n茅cessaires.</td> <td>Ainsi, si votre application est pirat茅e, un attaquant ne pourra pas l'utiliser pour acc茅der au reste du r茅seau du CERN.</td> <td>Cr茅ez un egress <a href="https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource" target="_blank"><tt>NetworkPolicy</tt></a> pour autoriser uniquement les connexions de vos pods vers les services dont ils ont besoin. Vous pouvez sp茅cifier les pods ou les CIDRs 脿 autoriser pour le trafic de sortie, ainsi que les ports.<br>Pour que cela fonctionne dans les pods OpenStack, le cluster doit utiliser un pilote r茅seau qui le permet, tel que <tt>calico</tt>. Pour l'utiliser, vous devez d'abord cr茅er un mod猫le de cluster (par exemple avec <tt>coe cluster template create --floating-ip-disabled --master-flavor m2.medium --server-type vm --external-network CERN_NETWORK --image 2886e9bf-7702-4c06-99c1-39a9e7bd5951 --docker-storage-driver overlay2 --network-driver calico --fixed-network CERN_NETWORK --coe kubernetes --flavor m2.medium --dns-nameserver 137.138.17.5 --labels="calico_backend=vxlan" calico-kubernetes</tt>) et cr茅ez ensuite votre cluster en utilisant ce mod猫le. Lorsque vous effectuez cette proc茅dure, veuillez utiliser les param猫tres d'un mod猫le existant pour vous assurer qu'il n'y a pas de probl猫me, en ne modifiant que les <tt>茅tiquettes</tt> et les param猫tres du <tt>pilote r茅seau</tt>.<br>Cela devrait 茅galement fonctionner dans Openshift sans aucun changement lorsque Openshift 4 sera d茅ploy茅 (est. fin 2019).</td> </tr> <tr> <td>Utiliser le contr么le d'acc猫s bas茅 sur les r么les (RBAC).</td> <td>Le RBAC vous permet de g茅rer quels utilisateurs ou applications peuvent acc茅der 脿 quelles ressources et de quelle mani猫re. En cr茅ant des r么les et en les attribuant aux utilisateurs ou aux applications, vous pouvez contr么ler les espaces de noms auxquels ils peuvent acc茅der. Vous pouvez 茅galement sp茅cifier les types d'acc猫s sous forme de verbes (par exemple, <tt>list</tt>, <tt>create</tt>, <tt>update</tt>).</td> <td><a href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/" target="_blank">Roles and Role Bindings reference</a></td> </tr> </tbody> </table> <h4><a name="l2"></a><a href="https://information-technology.web.cern.ch/services/PaaS-Web-App">Environnement Docker</a></h4> <p> </p> <table class="align-left"> <tbody> <tr><th class="align-center">Besoin</th><th class="align-center">Description</th><th class="align-center">Informations</th></tr> <tr> <td>N'exposez pas vos conteneurs (ports de transfert) au r茅seau si ce n'est pas n茅cessaire.</td> <tdL'ex茅cution d'un conteneur dans le r茅seau <tt>h么te</tt> ou l'exposition de ports sans n茅cessit茅 permet 脿 n'importe qui dans le r茅seau de s'y connecter.</td> <td></td> </tr> <tr> <td>Ne pas ex茅cuter les conteneurs en tant qu'utilisateur root.</td> <td>Un attaquant qui s'ex茅cute en tant que root 脿 l'int茅rieur du conteneur est en bien meilleure position pour s'茅chapper du conteneur et attaquer l'h么te.</td> <td><a href="https://docs.docker.com/engine/reference/builder/#user" target="_blank">Docker USER directive</a></td> </tr> <tr> <td>Utilisez des images officielles fiables.</td> <td>Les images officielles sont maintenues et sont g茅n茅ralement mieux s茅curis茅es que les autres. M锚me si vous trouvez une image non officielle qui correspond mieux 脿 vos besoins, vous devriez faire l'effort d'utiliser une image officielle. Le CERN g猫re son propre registre de conteneurs o霉 vous pouvez trouver des images fiables.<br>Nous vous sugg茅rons 茅galement de baser vos images sur l'image cc7-base du CERN.</td> <td> <a href="https://gitlab.cern.ch">CERN Gitlab</a><br><a href="https://gitlab.cern.ch/linuxsupport/cc7-base/container_registry">cc7-base image</a> </td> </tr> <tr> <td>Ex茅cutez Docker Bench for Security pour vous assurer que votre service Docker fonctionne avec une bonne configuration de s茅curit茅.</td> <td>Docker Bench for Security v茅rifie la configuration de votre d茅mon Docker pour les meilleures pratiques courantes de d茅ploiement de conteneurs.</td> <td> <a href="https://github.com/docker/docker-bench-security" target="_blank">Docker Bench for Security</a><br>Voir <a href="https://www.digitalocean.com/community/tutorials/how-to-audit-docker-host-security-with-docker-bench-for-security-on-ubuntu-16-04" target="_blank">ici</a> pour les solutions aux 茅ventuels avertissements.</td> </tr> <tr> <td>Isolez les conteneurs avec les espaces de noms d'utilisateurs.</td> <td>Les espaces de noms d'utilisateurs limitent les attaques par escalade de privil猫ges vers l'h么te depuis l'int茅rieur du conteneur, si un attaquant parvient 脿 obtenir un acc猫s root 脿 l'int茅rieur du conteneur.</td> <td><a href="https://docs.docker.com/v17.09/engine/security/userns-remap/" target="_blank">User namespaces</a></td> </tr> <tr> <td>Utiliser le pare-feu de l'h么te pour restreindre les connexions sortantes.</td> <td>Vous pouvez utiliser <tt>iptables</tt> pour restreindre les h么tes auxquels un conteneur peut se connecter en cr茅ant une interface r茅seau pour lui et en lui appliquant des r猫gles. De cette fa莽on, un attaquant ne peut pas facilement utiliser une vuln茅rabilit茅 pour pivoter vers le reste du r茅seau du CERN.</td> <td>Par exemple :<br><tt>dk network create -o com.docker.network.bridge.name=testbridge testbridge</tt><br><tt>sudo iptables -N BEFORE_DOCKER</tt><br><tt>sudo iptables -I BEFORE_DOCKER -d 172.217.168.4 -j RETURN</tt><br><tt>sudo iptables -I BEFORE_DOCKER -d 104.27.202.92 -j RETURN</tt><br><tt>sudo iptables -I FORWARD -i testbridge -m state --state NEW -j BEFORE_DOCKER</tt><br><tt>dk run --rm -it --net testbridge centos:7</tt> </td> </tr> <tr> <td>Cr茅er un profil seccomp pour votre image.</td> <td>Un profil seccomp peut limiter les appels syst猫me auxquels un conteneur a acc猫s au strict n茅cessaire, r茅duisant ainsi la surface d'attaque. Il n'est pas trivial de l'activer, car il entra卯ne parfois des plantages.</td> <td><a href="https://github.com/antitree/syscall2seccomp" target="_blank">syscall2seccomp</a></td> </tr> <tr> <td>N'exposez pas votre socket de daemon Docker au r茅seau.</td> <td>Le daemon Docker peut 锚tre configur茅 pour 茅couter le r茅seau pour les commandes. Par d茅faut, s'il est activ茅, Docker 茅coute le port 2375 et permet aux utilisateurs d'ex茅cuter des conteneurs sans aucune authentification. Ceci est tr猫s dangereux et peut 锚tre utilis茅 de mani猫re abusive pour obtenir le privil猫ge root sur l'h么te.</td> <td></td> </tr> </tbody> </table> </div> <!-- main ends --> <!-- SIDEBAR --> <!-- sidebar menu starts --> <div id="sidebar"> <h3>Pour tous les utilisateurs<br> (experts ou non)</h3> <ul class="sidemenu"> <li><a href="/recommendations/fr/good_practises.shtml">Sept « good practices »</a></li> <li><a href="/recommendations/fr/passwords.shtml">Mots de passe &<br/> brosses à dents</a></li> <li><a href="/recommendations/fr/2FA.shtml">Commencer avec<br/> l'authentification<br/> à deux facteurs</a></li> <li><a href="/recommendations/fr/bad_mails.shtml">Mauvais mails pour vous:<br/> « hameçonnage », « SPAM » & fraude</a></li> <li><a href="/recommendations/fr/malicious_email.shtml">Comment identifier des courriels et documents joints malicieux</a></li> <li><a href="/recommendations/fr/working_remotely.shtml">Travailler 脿 distance</a></li> <li><a href="/recommendations/fr/how_to_secure_your_pc.shtml">Comment sécuriser<br/> votre PC ou Mac</a></li> <li><a href="/recommendations/fr/connecting_to_cern.shtml">Se connecter au CERN</a></li> <li><a href="/recommendations/fr/ssh.shtml">Chiffrage avec SSH</a></li> </ul> <h3>Pour les développeurs</h3> <ul class="sidemenu"> <li>Bonne programmation en <a href="/recommendations/fr/program_c.shtml">C/C++</a>, <a href="/recommendations/fr/program_java.shtml">Java</a>, <a href="/recommendations/fr/program_perl.shtml">Perl</a>, <a href="/recommendations/fr/program_php.shtml">PHP</a>, ou <a href="/recommendations/fr/program_python.shtml">Python</a></li> <li><a href="/recommendations/fr/password_alternatives.shtml">Comment garder les secrets secrets</br> (alternatives aux mots de passe)</a></li> <li><a href="/recommendations/fr/checklist_for_coders.shtml">Checklist de sécurité</a></li> <li><a href="https://gitlab.docs.cern.ch/docs/Secure%20your%20application/">Outils pour sécuriser GitLab CI</a> (en anglais)</li> <li><a href="/recommendations/fr/web_applications.shtml">Sécuriser les applications Web</a></li> <li><a href="/recommendations/fr/code_tools.shtml">Outils d鈥檃nalyse statique de code source</a></li> <li><a href="/recommendations/fr/more_on_software.shtml">Pour en savoir plus</a></li> </ul> <h3>Pour les propriétaires de systèmes</h3> <ul class="sidemenu"> <li><a href="/rules/fr/baselines.shtml">Baselines de sécurité</a> <li><a href="http://linux.web.cern.ch/linux/docs/linux_exploit_faq.shtml">FAQ sur les vulnérabilités Linux du CERN</a> <li><a href="/recommendations/fr/rootkits.shtml">Recherche de rootkits</a></li> <li><a href="/recommendations/fr/containers.shtml">Sécuriser des conteneurs & pods</a></li> <li><a href="https://twiki.cern.ch/twiki/bin/viewauth/CNIC/WebHome">Sécuriser les systèmes de contrôle (CNIC)</a></li> </ul> </div> <!-- sidebar menu ends --> <!-- content-wrap ends--> </div> <!-- footer starts --> <div id="footer-wrap"> <div id="footer-bottom"> © Copyright 2024<strong> <a href="https://cern.ch/security">CERN Computer Security Office</a></strong> <table> <tr> <td id="footer-info-left"> e-mail: <a href="mailto:Computer.Security@cern.ch">Computer.Security@cern.ch</a><br/> Utilisez la clé PGP suivante pour encrypter vos messages : <br/> ID: 0x954CE234B4C6ED84<br/> <a href="https://keys.openpgp.org/vks/v1/by-fingerprint/429D60460EBE8006B04CDF02954CE234B4C6ED84">429D 6046 0EBE 8006 B04C DF02 954C E234 B4C6 ED84</a> </td> <td id="footer-info-right"> Téléphone: +41 22 767 0500<br/> (Écoutez les instructions enregistrées.) </td> </tr> </table> </div> </div> <!-- footer ends--> </div> <!-- wrap ends here --> </body> </html>