Vérifier vos téléchargements
Les binaires bits s'exécutent sur vos hôtes avec une visibilité privilégiée, et bitcollector
produit les preuves sur lesquelles vous et votre auditeur vous appuyez. Une preuve ne vaut
jamais plus que l'instrument qui l'a produite.
Avant toute installation, vous devez donc pouvoir prouver exactement quels octets vous êtes sur le point d'exécuter. Cette page vous montre comment, avec des outils publiés uniquement, hors ligne.
N'installez pas le binaire. Ne « retentez pas le téléchargement en espérant que ça passe ». Conservez les fichiers et écrivez à [email protected] en indiquant la version publiée et la sortie de la commande qui a échoué.
Ce qui accompagne chaque version publiée
| Fichier | De quoi il s'agit |
|---|---|
bitcollector-<os>-<arch> | Le binaire lui-même |
bitcollector-<os>-<arch>.sbom.json | SBOM CycloneDX — tout ce que contient ce binaire |
bitcollector-<os>-<arch>.sig | Bundle de signature cosign portant sur ces octets exacts |
bitcollector-<os>-<arch>.att | Attestation cosign liant le SBOM à ces octets exacts |
SHA256SUMS | Sommes de contrôle de chacun des fichiers ci-dessus |
SHA256SUMS.sig | Signature cosign de SHA256SUMS |
release-provenance.json | Commit, chaîne d'outils Go et plateformes à partir desquels la version a été compilée |
Les versions de bitscanner, bitenforcer et bitmapper ont la même structure, avec leur
propre nom à la place de bitcollector. Les quatre produits sont signés avec la même clé de
publication, donc une seule vérification de clé couvre toute la famille — et une clé qui
changerait entre deux d'entre eux serait une raison de s'arrêter, pas de mettre à jour votre
copie.
Étape 0 — se procurer les outils
Il vous faut cosign v3 ou plus récent, et
sha256sum (fourni par coreutils ; sur macOS, shasum -a 256 ou brew install coreutils).
cosign version
Étape 1 — récupérer la clé publique, et vérifier que c'est la bonne clé
Téléchargez la clé de signature de publication à côté du répertoire de la release, et non dedans :
# depuis le répertoire qui CONTIENT votre répertoire de release
# DNS route — works from a CLI and inside CI. The HTTPS copy of this key is
# currently behind a bot challenge, so `curl` cannot fetch it; see the note below.
dig +short TXT _cosign-key.cert-ix.com | tr -d '"' | sed 's/.*key=//' \
| base64 -d | openssl pkey -pubin -inform DER -out cosign.pub
verify-release.sh considère tout fichier présent dans un répertoire de release comme
un fichier qui devrait être signé. Y déposer cosign.pub lui fait signaler un fichier
non justifié — ce qui ressemble exactement à une release altérée, alors qu'il n'en est
rien. Gardez la clé un niveau au-dessus. Pour la même raison, indiquez-la par
chemin absolu : le script se place dans le répertoire de la release, un --key cosign.pub relatif cesse donc d'être résolu, et l'échec affiché est indiscernable
d'une mauvaise signature.
Un attaquant capable de remplacer un binaire sur notre site web peut remplacer la clé publique qui se trouve à côté. La vérification passerait alors — contre sa clé. Vous exécuteriez son binaire et obtiendriez une coche verte.
Une vérification de signature ne vaut que l'ancre de confiance qui la sous-tend. Confirmez l'empreinte de la clé auprès d'une seconde source indépendante avant de lui faire confiance. C'est tout l'objet des quelques lignes qui suivent, et c'est l'étape que la plupart des instructions de vérification omettent.
L'empreinte
Calculez l'empreinte de la clé que vous avez téléchargée :
# The robust form: SHA-256 of the DER-encoded public key.
# Independent of PEM whitespace, so copy-paste through a browser cannot change it.
openssl pkey -pubin -in cosign.pub -outform DER | sha256sum
Elle doit valoir exactement :
552839f6b1b1eb0934557e1886326c7270584fa602fbf56f84754a98be3de822
Si vous préférez hacher le fichier tel quel :
sha256sum cosign.pub
# 150eacccc1bc26a83c746a1e441b0b0bdc8104c3ef07efd75c62deb5b069f914
Cette seconde valeur couvre les octets exacts du fichier publié, saut de ligne compris : elle ne correspond donc que si vous avez téléchargé le fichier plutôt que d'en coller le contenu.
La clé elle-même est assez courte pour être lue. La voici en entier :
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPA6gi66NIBXbSwYS3CL16Ien3sho
wCNOR8dRivdd07SQWto107QMDelUKMeebJQHSlOchNO4PJSWjCcrsUYb5w==
-----END PUBLIC KEY-----
C'est une clé publique ECDSA P-256 (prime256v1). Vous pouvez le confirmer vous-même :
openssl pkey -pubin -in cosign.pub -text -noout | head -2
# Public-Key: (256 bit)
Secondes sources pour l'empreinte
Ne prenez pas l'empreinte sur la même page que celle qui vous a servi la clé, si vous pouvez l'éviter. Recoupez-la avec au moins l'une de ces sources :
- Un enregistrement DNS, servi par une infrastructure différente de ce site web. La même
empreinte est publiée dans un enregistrement TXT sur
_cosign.cert-ix.com, et une seule commande suffit à le vérifier :dig +short TXT _cosign.cert-ix.com. C'est le recoupement qui vaut la peine d'être fait : un attaquant ayant pris le contrôle de ce serveur web devrait aussi prendre le contrôle de notre DNS pour que les deux concordent — deux systèmes distincts, avec des identifiants distincts. En cas de divergence, arrêtez-vous : n'exécutez pas les binaires et écrivez à [email protected]. - Votre contact Cert-IX, hors bande. Demandez à votre interlocuteur commercial ou sécurité de vous relire l'empreinte par un canal qui n'est pas ce site web — un appel téléphonique, un courriel signé depuis [email protected], ou votre canal de support existant.
- Une clé que vous possédez déjà. Si vous avez vérifié une version bits précédente, comparez avec la clé que vous avez conservée. Une clé de publication qui change sans annonce est une raison de s'arrêter et de poser la question, pas une raison de mettre votre copie à jour.
Une fois l'empreinte confirmée, conservez votre copie de la clé et réutilisez-la. La valeur d'une ancre de confiance vient du fait qu'elle ne change pas.