securite_instances_gitlab

2 mai 2024

Gitlab est devenu un pilier essentiel dans le développement logiciel moderne contenant souvent le code du produit des scale-ups et PME. Cet article explore les meilleures pratiques pour sécuriser votre instance Gitlab et ainsi protéger votre code contre les cyberattaquants et éviter de lourdes pertes financières.

Comment sécuriser son instance Gitlab ?

Pour garantir la sécurité de votre instance Gitlab, il est crucial de maintenir votre version à jour pour bénéficier des derniers correctifs de sécurité. Évitez l'utilisation du compte root qui permet d’avoir tous les droits sur l’instance.

Une autre bonne pratique est d’activer l’option asset proxy pour le téléchargement de ressources extérieures. Elle permet de masquer son adresse IP si un attaquant déclenche le téléchargement d’une image vers son adresse IP.

Par exemple, un README peut inclure une image spécifiée par un lien. Ce lien de téléchargement redirige vers l’IP de l’attaquant qui peut ainsi récupérer l’IP de l’utilisateur qui a déclenché cette action.

Quelles sont les meilleures pratiques pour une authentification robustes à Gitlab ?

Gitlab propose de multiples méthodes d’authentification pour protéger l’accès au code. Implémentez des mesures telles que l'authentification à deux facteurs (2FA), les listes d'IP autorisées (IP whitelisting), l'authentification unique (Single Sign-On) et des mécanismes anti-brute force pour renforcer la sécurité de l'accès.

Pour la création d’utilisateurs, vérifiez que la confirmation par e-mail est requise lors de l'inscription et désactivez les auto-inscriptions si cela n'est pas nécessaire. Ces bonnes pratiques permettront de protéger le vol d’un compte utilisateur. D’autant plus que si ce compte avait des droits administrateurs, l’attaquant serait maître de l’instance.

Comment protéger ses projets et dépôts de code ?

Le logiciel de versionning Gitlab conserve votre code rangé selon des projets qui sont des ensembles de répertoire ayant un thème commun. Limitez les risques en désactivant la fonction de fork d’un répertoire ou d’un projet, permettant ainsi de limiter le nombre de personnes ayant accès au répertoire.

Restreignez l'ajout de membres aux propriétaires et aux administrateurs seulement pour complexifier l’accès au code pour un attaquant. Protéger son code permet d’éviter qu’un attaquant ayant volé un compte développeur puisse modifier son contenu.

Quelles sont les politiques de versioning à appliquer pour protéger vos branches ?

Les branches sont des objets Git qui permettent de développer des fonctionnalités en parallèle du code principal pour ne pas avoir de conflits dans son code. Appliquez des politiques strictes pour les push (ajout de code au répertoire distant) et les merge (ajout du code d’une branche dans une autre) : exigez au moins une approbation différente de celle de l'auteur initial.

Avec Gitlab, il est possible d’envisager l'utilisation de fichiers de CODEOWNER pour une gestion plus granulaire. Ce fichier permet de définir qui a quels droits sur des fichiers spécifiques d’un répertoire lors d’actions de manipulation de code (push ou merge par exemple).

Avez-vous pensé à protéger vos Runners Gitlab ?

Les Runners Gitlab sont un composant essentiel à protéger puisqu’étant responsable du build et déploiement de vos applications sur le cluster, ils ont des droits privilégiés. Assurez-vous de vérifier les privilèges de l'utilisateur lançant les jobs Runner Gitlab pour ne pas permettre à un attaquant d’obtenir trop de droits.

De même, vérifier que les conteneurs Docker sont exécutés sans privilèges élevés. Utilisez des images Docker privées avec une politique de pull if-not-present pour ne chercher une image seulement si elle n’existe pas en local. Cela permet de se protéger contre les attaques par empoisonnement de cache.

Comment sécuriser le contenu de son code ?

Intégrez des analyses de sécurité telles que le scan de conteneurs, le scan de dépendances, l'analyse des applications web en cours d'exécution pour les vulnérabilités connues, et la détection de secrets pour détecter et en éviter leur fuite. Les outils Sonarqube, Checkov ou GitGuardian vous permettent de mettre en place ces scans.

Toutes ces vérifications peuvent être configurées dans les CI/CD de Gitlab et si les exigences ne sont pas respectées, le code ne devrait pas être déployé ou merge. Vous pouvez également protéger vos CI/CD avec un fichier CODEOWNER (comme pour la partie précédente) pour déterminer qui est autorisé à changer les scans de vulnérabilité.

Comment protéger vos CI/CD sur Gitlab ?

Un point restant à ne surtout pas négliger est la configuration des CI/CD. Ce sont les pipelines de déploiement et d’intégration continue du code. C’est un sujet qui a été abordé en partie dans cet article de blog nommé Sécuriser vos secrets dans les CI/CD.

Gitlab vous permet de créer vos CI/CD. Elles peuvent contenir un ensemble de variables sensibles utiliser lors de leur exécution comme des tokens administrateur. Protégez ces variables sensibles en les masquant, en les rendant disponibles uniquement pour les pipelines exécutés sur des branches et des tags protégés.

Mettre en place ces bonnes pratiques permet de se protéger contre les injections de code malveillant pouvant donner un accès complet à votre infrastructure à un attaquant.

Conclusion

En suivant ces meilleures pratiques, vous renforcerez considérablement la sécurité de votre instance Gitlab, garantissant ainsi la protection de vos données et de vos projets essentiels.

Pour plus d’information, Gitlab répertorie l’ensemble des bonnes pratiques de sécurité sur sa documentation “Secure your installation”.