Work / tooling

Bot de Conformité de Licences GitLab

Un bot Python qui scanne les dépôts GitLab pour le risque licence avant que le juridique ne demande, plus une extension navigateur qui pousse du renseignement dans MISP.

DevToolsComplianceSecurity
Role
Ingénieur Logiciel (temps partiel)
Date
2024-06-01
Read time
3 min read
Stack
7 techs

La plupart des laboratoires de recherche traitent la conformité des licences open-source comme un sujet dont le juridique s'inquiète une fois par an. Puis un client demande un SBOM, et quelqu'un passe deux semaines à éplucher des requirements.txt pour essayer de se rappeler pourquoi un paquet GPL s'est retrouvé dans une codebase commerciale. C'était le terrain de jeu au SnT.

J'ai travaillé là-dessus à temps partiel pendant mon master. Deux outils complémentaires en sont sortis : un bot de conformité de licences, et une extension navigateur pour l'ingestion de threat intel dans MISP.

Le bot de conformité

Un service Python qui scanne les dépôts GitLab selon une planification et à chaque merge request. Il parcourt l'arbre de dépendances, classe les licences par niveau de risque (permissive, copyleft faible, copyleft fort, « appelez un avocat »), et écrit des rapports structurés sur le projet. Flask expose la surface REST, Docker rend le runtime portable sur les runners GitLab du labo.

Le morceau intéressant n'était pas le scan. C'était la classification. Les noms de licences ne sont pas standardisés. « MIT », « MIT License » et « Expat » désignent la même chose ; « BSD » sans numéro signifie ce que l'auteur croyait en 2008. J'ai bâti une couche de normalisation sur des identifiants SPDX et une table d'overrides manuels pour la longue traîne. La table d'overrides a grossi en silence et contient maintenant l'essentiel du savoir institutionnel.

Un petit tableau de bord React/Next.js fait remonter les résultats aux responsables de recherche. Les hooks GitLab CI lancent le bot au push, à la MR, et en sweep complet nocturne.

L'extension MISP

Projet à part, esprit voisin : prendre un workflow manuel et le faire disparaître dans les outils que les analystes utilisent déjà. Les analystes en renseignement passent la journée à lire des rapports, des billets, parfois des pastes bruts, et à récolter des indicateurs de compromission. Le workflow standard : voir un IOC, le copier, basculer sur MISP, remplir un formulaire. Facile à sauter. Facile à mal taper.

L'extension enveloppe PyMISP et permet à l'analyste de pousser un observable enrichi directement depuis la page. Clic droit, classification, publication. Fini.

Ce que j'ai appris

Le travail de conformité est le plus ennuyeux des deux, et probablement celui qui a le plus de levier. Le risque licence est une dette qui s'accumule en silence. Quand quelqu'un s'en aperçoit, on arrache des dépendances d'un système livré en production depuis trois ans.

La table d'overrides est la partie que j'ai sous-estimée. Je supposais que SPDX ferait l'essentiel. En pratique, la moitié des dépôts réels mentent sur leur licence ou utilisent une chaîne qui n'existe dans aucun standard. La leçon se généralise : considérez la spec comme une aspiration, prévoyez une sortie de secours manuelle dès le premier jour.

Stack
PythonFlaskDockerReactNext.jsGitLab CI/CDPyMISP