Vérifier l'authenticité d'une image¶
Chaque image publiée est signée et attestée par la CI (cosign, keyless OIDC). Avant de lancer une image tirée de GHCR, on peut vérifier qu'elle vient bien de notre pipeline.
Un nœud tire deux images, signées par la même identité : p2pwatch, le crawler, et
p2pwatch-amule, le client eMule. Vérifiez les deux, en relançant les commandes ci-dessous avec
IMAGE=ghcr.io/mission-titar/p2pwatch-amule:latest.
Prérequis : cosign installé.
L'identité attendue est le workflow de release du dépôt :
IMAGE=ghcr.io/mission-titar/p2pwatch:latest
IDENTITY='^https://github.com/mission-titar/p2pwatch/.github/workflows/release.yml@refs/'
ISSUER=https://token.actions.githubusercontent.com
Les images publiées avant le transfert du dépôt dans l'organisation (jusqu'à la 3.1.0) sont
restées sous ghcr.io/geoffreycoulaud/, et leur identité est
^https://github.com/GeoffreyCoulaud/mulewatch/.github/workflows/release.yml@refs/.
Vérifier la signature de l'image :
cosign verify \
--certificate-identity-regexp "$IDENTITY" \
--certificate-oidc-issuer "$ISSUER" \
"$IMAGE"
Vérifier une attestation (SBOM ou VEX ; --type parmi cyclonedx,
https://syft.dev/bom, openvex) :
cosign verify-attestation \
--type openvex \
--certificate-identity-regexp "$IDENTITY" \
--certificate-oidc-issuer "$ISSUER" \
"$IMAGE"
Une commande qui réussit prouve que ce digest a été signé/attesté par notre CI : un digest
substitué (image malveillante) n'aurait pas d'attestation signée par notre identité OIDC.
La signature étant --recursive, la vérification fonctionne aussi bien par tag (index) que
par digest d'architecture. Le détail de la chaîne et du triage VEX est dans SECURITY.md.
Des noms qui ne suivent pas celui de l'image, exprès. Chaque image a son fichier de claims et ses catégories SARIF, nommés d'après son paquet :
security/crawler.vex.openvex.jsonet le suffixe-crawlerpourp2pwatch,security/amule.vex.openvex.jsonet le suffixe-amulepourp2pwatch-amule(grype-crawler,vex-image-claims-crawler,vex-applied-claims-crawler, et leurs équivalents-amule). Renommer une catégorie Code scanning rend ses findings existants orphelins. Seul le produit VEX porte le nom de l'image. Jusqu'à la sortie de la v5, le scan quotidien ne couvre que l'image unique de la v4, sous le suffixe-mulewatch.