Aller au contenu principal

Secrets chiffrés

Que sont les secrets chiffrés ?

Les secrets chiffrés ne sont pas stockés en clair : ils sont chiffrés avec une clé conservée dans une zone sécurisée.
Ils peuvent être partagés publiquement sans exposer le secret. GitGuardian s'efforce donc de ne pas signaler les secrets chiffrés comme des fuites.

Heuristiques utilisées

Pour ne pas signaler les secrets chiffrés comme des fuites, nous devons les distinguer des secrets en clair : à première vue, un secret chiffré peut ressembler à un secret non chiffré. Voici différentes heuristiques que nous utilisons.

Un secret est souvent composé de plusieurs correspondances (matches). GitGuardian considère le secret comme chiffré si au moins une des correspondances est chiffrée.

Détecté par un détecteur générique

D'abord, le secret doit avoir été trouvé par un détecteur générique. Les motifs des détecteurs spécifiques à une API ont peu de chances de correspondre par erreur à un secret chiffré, car ces motifs imposent un préfixe, une longueur précise ou un jeu de caractères défini.

Stocké dans un fichier produit par des outils de chiffrement

Des outils comme SOPS peuvent chiffrer et déchiffrer des secrets dans des fichiers JSON ou YAML. Nous ignorons les fichiers dont l'extension correspond à celles utilisées par ces outils.

Format BCrypt ou Crypt

Si l'une des correspondances du secret suit le format d'une chaîne de hachage BCrypt ou d'une chaîne Crypt, elle est considérée comme chiffrée.

Indices contextuels

Si le texte précédant une correspondance contient l'un des indicateurs de chiffrement courants suivants (liste non exhaustive) :

  • « ENC[ » ou « ENC( »
  • « SealedSecret »
  • « encrypteddata »
  • « encryptedpassword »
  • « encryptedsecrets »
  • « encvalues »
  • « secure »
  • « type: Opaque »

Alors la correspondance est considérée comme chiffrée.

Données chiffrées en Base64

Si la correspondance est une longue chaîne encodée en Base64 et que les premiers octets décodés correspondent à (1, 0), (2, 0), (1,1) ou (10, 36, 0), alors la correspondance est traitée comme des données chiffrées en Base64.