
Un outil pour capturer tous les secrets git en exploitant plusieurs outils de recherche git open source
git-all-secrets est un outil qui peut :
Le scan est effectué par plusieurs outils open source tels que :
NOTE - D'autres outils de ce type peuvent être ajoutés à l'avenir, si désiré !
NOTE - Le scan peut être effectué par tous les outils ou l'un d'eux en spécifiant le drapeau toolName.
Si tous les outils sont utilisés pour le scan, la sortie finale de l'outil combine les sorties de tous les fichiers de tous les outils en un fichier de sortie consolidé.
Le moyen le plus simple d'exécuter git-all-secrets est via Docker et je recommande vivement d'installer Docker si vous ne l'avez pas déjà. Une fois Docker installé,
docker run --rm -it abhartiya/tools_gitallsecrets --help pour comprendre les différents drapeaux qu'il peut accepter en entrée.docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<>. Vous pouvez aussi spécifier un outil particulier pour le scan en tapant quelque chose comme docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=<>. Les options sont thog et repo-supervisor.thogEntropy comme ceci - docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=thog -thogEntropy.docker ps -a.docker cp <container-id>:/root/results.txt .-token = Jeton d'accès personnel Github. Nous en avons besoin car les requêtes non authentifiées à l'API Github peuvent atteindre la limite de débit assez rapidement !
-org = Nom de l'organisation à scanner. Cela scannera tous les dépôts publics de l'organisation + tous les dépôts et gists de tous les utilisateurs de l'organisation. Si vous utilisez un jeton d'un utilisateur qui fait partie de cette organisation, il clonera et scannera également tous les gists secrets appartenant à cet utilisateur ainsi que tous les dépôts privés de cette organisation auxquels l'utilisateur a accès. Cependant, il ne clonera et ne scannera PAS les dépôts privés de cet utilisateur appartenant à cette organisation. Pour scanner les dépôts privés des utilisateurs, veuillez utiliser le drapeau scanPrivateReposOnly avec le drapeau user ainsi que la clé SSH montée sur un volume.
-user = Nom de l'utilisateur à scanner. Cela scannera tous les dépôts et gists de cet utilisateur. Si le jeton fourni est le jeton de l'utilisateur, les gists secrets seront également clonés et scannés. Mais seuls les dépôts publics seront clonés et scannés. Pour scanner les dépôts privés de cet utilisateur, veuillez utiliser le drapeau scanPrivateReposOnly avec le drapeau user ainsi que la clé SSH montée sur un volume.
-repoURL = URL HTTPS du dépôt à scanner. Cela scannera uniquement ce dépôt. Pour les dépôts publics, mentionner l'URL https du dépôt suffit. Cependant, si vous souhaitez scanner un dépôt privé, vous devez fournir l'URL ssh avec la clé SSH montée sur un volume et le drapeau scanPrivateReposOnly.
-gistURL = URL HTTPS du gist à scanner. Cela scannera uniquement ce gist. Il n'y a pas de concept de gist public ou secret tant que vous avez l'URL. Même si vous avez un gist secret, si quelqu'un connaît l'URL HTTPS de votre gist secret, il peut y accéder aussi.
Le drapeau token est obligatoire. Il ne peut pas être vide.
Les drapeaux org, user, repoURL et gistURL ne peuvent pas tous être vides en même temps. Vous devez fournir une seule de ces valeurs. Si vous fournissez toutes ou plusieurs valeurs ensemble, l'ordre de précédence sera org > user > repoURL > gistURL. Par exemple, si vous fournissez les deux drapeaux -org=secretorg123 et -user=secretuser1 ensemble, l'outil se plaindra qu'il n'a besoin de rien d'autre avec la valeur org. Pour l'exécuter uniquement sur un utilisateur particulier, il suffit de fournir le drapeau user et non le drapeau .
Le moyen le plus sûr de scanner les dépôts privés est de cloner en utilisant les URL SSH. Pour ce faire, il faut placer une clé SSH appropriée qui a été ajoutée à un utilisateur Github. Github a une documentation utile pour configurer votre compte. Assurez-vous que cette clé n'a pas de phrase de passe définie. Une fois que vous avez la clé SSH, montez-la simplement dans le conteneur Docker via un volume. C'est aussi simple que de taper les commandes ci-dessous :
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -user=<> -scanPrivateReposOnly
OU
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -repoURL=<> -scanPrivateReposOnly
Ici, je mappe ma clé SSH personnelle id_rsa_personal stockée localement vers /root/.ssh/id_rsa à l'intérieur du conteneur afin que git-all-secrets essaie de cloner le dépôt via ssh et utilisera la clé SSH stockée à /root/.ssh/id_rsa à l'intérieur du conteneur. De cette façon, vous ne stockez rien de sensible à l'intérieur du conteneur. Vous utilisez simplement un fichier de votre machine locale. Une fois le conteneur détruit, il n'a plus accès à cette clé.
L'API Github limite les circonstances dans lesquelles un dépôt privé est signalé. Si l'on essaie de scanner une organisation avec un utilisateur qui n'est pas administrateur, vous devrez peut-être fournir l'équipe qui donne l'accès au dépôt à l'utilisateur. Pour ce faire, utilisez le drapeau teamName avec le drapeau org. Voici un exemple :
docker run --it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -org=<> -teamName <>
git-all-secrets prend désormais en charge le scan de Github Enterprise également. Si vous avez votre propre Github Enterprise hébergé derrière un VPN ou autre, assurez-vous d'être connecté au VPN ou au réseau correct qui a accès aux dépôts Github Enterprise. L'enterpriseURL est ce dont vous avez besoin pour scanner vos dépôts Github Enterprise. Voici quelques exemples :
Exemple 1 :
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -repoURL https://github.<org>.com/<user>/<repo>.git
Ici, je monte ma clé SSH d'entreprise Github sur le conteneur, suivie de mon jeton d'accès personnel, de l'URL d'entreprise à laquelle les requêtes seront envoyées et du dépôt que je veux scanner.
Exemple 2 :
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -repoURL https://github.<org>.com/<user>/<repo>.git -toolName thog -thogEntropy
Ci-dessus, j'exécute maintenant uniquement truffleHog contre le dépôt avec les paramètres d'entropie.
Exemple 3 :
docker run -it -v ~/.ssh/id_rsa_gitenterprise:/root/.ssh/id_rsa -token <token> -enterpriseURL https://github.<org>.com/api/v3 -user <username> -scanPrivateReposOnly
Ci-dessus, je scanne uniquement les dépôts privés de l'utilisateur dont le jeton est fourni avec tous les outils (repo-supervisor et thog), mais sans le paramètre d'entropie de truffleHog.
rules.json et l'inclure lors de l'exécution de docker run en utilisant l'argument -v $(pwd)/rules.json:/root/truffleHog/rules.json.git-all-secrets assez facilement.J'ai examiné un grand nombre d'outils open source qui pourraient potentiellement être utilisés pour rechercher des secrets dans les dépôts Github. Certains des meilleurs outils que j'ai trouvés sont : gitrob, truffleHog et git-secrets.
Gitrob est conçu comme un outil autonome qui est assez difficile à intégrer avec d'autres outils car il a sa propre base de données et interface utilisateur pour voir tous les secrets découverts. Il produit également un grand nombre de faux positifs, plus que truffleHog. Et il ne met pas vraiment en évidence les secrets découverts. Il regarde simplement les fichiers et leurs extensions, pas le contenu réel. Donc, bien que Gitrob soit un excellent outil pour commencer, je recommanderais de l'exécuter de temps en temps pour comprendre à quoi ressemble la surface d'attaque et voir si elle a changé.
Ensuite, il y a truffleHog qui recherche les secrets dans le contenu réel du fichier en examinant l'entropie de Shannon et imprime la sortie à l'écran. Il prend une URL de dépôt ou un répertoire de dépôt comme argument. C'est un assez bon outil bien qu'il ait aussi sa part de faux positifs. Certains des autres inconvénients sont :
Enfin, il y a git-secrets qui peut signaler des choses comme les secrets AWS. Le meilleur aspect est que vous pouvez également ajouter vos propres expressions régulières pour les secrets que vous savez qu'il devrait rechercher. Un inconvénient majeur est qu'il ne fait pas du bon travail pour trouver des chaînes à haute entropie comme le fait truffleHog. Vous ne pouvez également scanner qu'un répertoire particulier qui est un dépôt, donc pas de scan récursif à partir d'un répertoire de dépôts non plus.
Donc, comme vous pouvez le voir, il existe des outils décents, mais ils devaient être combinés d'une manière ou d'une autre. Il y avait aussi un besoin de scanner récursivement plusieurs dépôts et pas seulement un. Et qu'en est-il des gists ? Il y a des organisations et des utilisateurs. Ensuite, il y a des dépôts pour les organisations et les utilisateurs. Il y a aussi des gists par les utilisateurs. Tout cela devrait être scanné. Et, scanné de manière à pouvoir être automatisé et facilement consommé par d'autres outils/frameworks.
2/9/19 - Ajout du drapeau blacklist pour ignorer certains noms de dépôts lors du scan. Merci à @sjqnn pour la PR. Construit et poussé une nouvelle image Docker. GLHF !
31/07/18 - Simplification de l'installation de trufflehog en utilisant pip. @mhmdiaa a corrigé un bug concernant la fonction de sortie de trufflehog qui ne fusionnait et ne triait pas correctement. Mise à jour du fichier regex pour inclure des choses comme password. Construit et poussé une nouvelle image Docker. GLHF !
15/07/18 - Mise à jour du fork de repo-supervisor car l'upstream avait quelques changements. Reconstruit une nouvelle image Docker utilisant la dernière version de Trufflehog. Fourni le fichier rules.json qui contient toutes les regex que Trufflehog utilise pour trouver les secrets. Ajout de la possibilité de fusionner les sorties (en json) des deux outils en utilisant le drapeau -mergeOutput. Réduction drastique de la taille de l'image Docker en utilisant des constructions multi-étapes et dep pour gérer les dépendances. Un grand merci à @mhmdiaa pour tout cela !
12/12/17 - Pour certains gros dépôts, truffleHog échoue et se termine. Mais nous ne voulons pas nous arrêter là. Nous voulons avertir l'utilisateur que le scan a échoué pour ce dépôt et continuer à scanner les autres dépôts. Ceci est maintenant implémenté dans la dernière image docker.
11/12/17 - Suppression de gitsecrets car truffleHog supporte maintenant les regex. En ajoutant simplement vos regex dans le fichier rules.json et en reconstruisant l'image Docker, nous obtenons essentiellement la fonctionnalité que gitsecrets offrait auparavant, donc gitsecrets n'est plus nécessaire. J'ai également ajouté le support pour scanner les dépôts et gists Github Enterprise. @high-stakes a aidé à soumettre une PR qui (espérons-le) corrige le bug de Goroutine en limitant le nombre de threads. Enfin, le support pour le scan des dépôts privés d'une organisation a également été ajouté.
08/12/17 - Suppression de mon propre fork de truffleHog. Utilisation de la version upstream maintenant avec la fonctionnalité regex de truffleHog + mode entropie. Bientôt, je pense que nous pourrons remplacer à la fois gitsecrets et repo supervisor par uniquement truffleHog une fois certains problèmes résolus.
Si vous voulez montrer votre soutien, mon adresse de portefeuille BTC est 1PtMhXWCcMZCitcDfaEBe7jnV9sjKoNvq7.
-output = C'est le nom du fichier où tous les résultats seront stockés. Par défaut, c'est results.txt.
-cloneForks = C'est un drapeau booléen optionnel pour cloner les forks des dépôts d'organisation et d'utilisateur. Par défaut, il est défini sur 0, c'est-à-dire pas de clonage des forks. Si les forks doivent être clonés, cette valeur doit être définie sur 1. Ou, mentionnez simplement -cloneForks avec les autres drapeaux.
-orgOnly = C'est un drapeau booléen optionnel pour ignorer le clonage des dépôts utilisateur appartenant à une organisation. Par défaut, il est défini sur 0, c'est-à-dire comportement normal. Si les dépôts utilisateur ne doivent pas être scannés et seulement les dépôts de l'organisation doivent être scannés, cette valeur doit être définie sur 1. Ou, mentionnez simplement -orgOnly avec les autres drapeaux.
-toolName = C'est un drapeau string optionnel pour spécifier quel outil utiliser pour le scan. Par défaut, il est défini sur all, c'est-à-dire que thog et repo-supervisor seront tous utilisés pour le scan. Les valeurs sont soit thog soit repo-supervisor.
-teamName = Nom de l'équipe de l'organisation qui a accès aux dépôts privés pour le scan. Ce drapeau n'est pas entièrement testé, donc je ne peux pas garantir la fonctionnalité.
-scanPrivateReposOnly = C'est un drapeau booléen optionnel pour spécifier si vous voulez scanner les dépôts privés utilisateur ou non. Mentionner cela ne scannera PAS les dépôts publics utilisateur. Et, vous devez fournir la clé SSH en montant le volume sur le conteneur. De plus, cela ne fonctionne qu'avec le drapeau user, le drapeau repoURL ou le drapeau org.
Lorsque le drapeau org est mentionné avec le drapeau scanPrivateReposOnly et sans le drapeau orgOnly, il scannera les dépôts PUBLICS ET PRIVÉS appartenant à cette organisation auxquels l'utilisateur a accès (dont le jeton est fourni). Il continuera ensuite à scanner UNIQUEMENT les dépôts privés de l'utilisateur (dont le jeton est fourni). Enfin, il continuera à scanner tous les gists publics et secrets de cet utilisateur (dont le jeton est fourni). En résumé, le drapeau scanPrivateReposOnly n'affecte vraiment que les drapeaux user et repoURL.
-enterpriseURL = Drapeau optionnel pour fournir l'URL Github Enterprise, si vous souhaitez scanner des dépôts d'entreprise. Cela devrait ressembler à quelque chose comme https://github.org.com/api/v3 avec la clé SSH montée sur le conteneur. Référez-vous à scanner Github Enterprise ci-dessous.
-threads = La valeur par défaut est 10. Cela permet de limiter le nombre de threads si votre système n'est pas assez puissant. Dans la plupart des cas, laisser cette valeur à 10 devrait convenir.
-thogEntropy = C'est un drapeau optionnel qui indique si vous voulez obtenir des secrets basés sur la haute entropie de truffleHog ou non. Les secrets à haute entropie de truffleHog produisent BEAUCOUP de bruit, donc si vous ne voulez pas tout ce bruit et si vous exécutez git-all-secrets sur une grande organisation, je recommande de ne pas mentionner ce drapeau. Par défaut, il est défini sur False, ce qui signifie que truffleHog ne produira des résultats que sur la base des expressions régulières dans le fichier rules.json. Si vous scannez une organisation assez petite avec un ensemble limité de dépôts ou un utilisateur avec quelques dépôts, mentionner ce drapeau a plus de sens.
-mergeOutput = Drapeau optionnel pour fusionner et dédupliquer la sortie des outils utilisés (actuellement truffleHog et repo-supervisor). La valeur par défaut est False.
-blacklist = Noms de dépôts fournis sous forme de valeurs séparées par des virgules qui ne doivent PAS être scannés.
orgLors de la spécification du drapeau scanPrivateReposOnly :
-v.ssh lors de l'utilisation du drapeau et non l'URL https.Référez-vous à scanner les dépôts privés ci-dessous.
Lors de la spécification de teamName, il est important que le token fourni appartienne à un utilisateur qui est membre de l'équipe. Des résultats inattendus peuvent se produire sinon. Référez-vous à scanner une équipe d'organisation ci-dessous.
Lors de la spécification du drapeau enterpriseURL, il considérera toujours l'URL SSH même si vous fournissez l'URL https d'un dépôt. Tout le clonage/scanning d'entreprise se fait via l'URL ssh et non l'URL https.
Comme mentionné ci-dessus, assurez-vous que la clé SSH utilisée (pour scanner l'URL ssh) n'a pas de phrase de passe définie.
07/12/17 - J'ai mis à jour la documentation avec plus de détails et d'explications sur les différents drapeaux.
05/12/17 - Intégration du support de scan pour les dépôts privés via clé SSH. Cela a été demandé pendant longtemps et c'est maintenant possible. De plus, modification du schéma de tags de l'image docker. Désormais, la dernière image aura le tag latest. Et toutes les versions précédentes seront taguées avec un numéro. Tout cela n'aurait pas été possible sans l'équipe SimpliSafe, en particulier Matthew Cox (https://github.com/matthew-cox). Donc, un grand merci à toi Matt !
14/10/17 - Construction et poussée de la nouvelle image abhartiya/tools_gitallsecrets:v6. Cette nouvelle image contient la version la plus récente de git-secrets ainsi que repo-supervisor, c'est-à-dire que j'ai fusionné quelques changements upstream dans mon fork ainsi que quelques changements supplémentaires que j'avais déjà faits dans mon fork. La nouvelle image utilise ces changements, donc tout est à jour !* 10/14/17 - Construit et poussé la nouvelle image abhartiya/tools_gitallsecrets:v5. Cette image corrige un bug très stupide et irritant qui causait probablement l'échec du superviseur de dépôt. Quelque chose a changé dans la façon dont les valeurs d'environnement sont lues dans le Dockerfile, ce qui a fait que le superviseur de dépôt ne comprenait pas quel chemin de nœud utiliser. L'enfer des nœuds !
9/29/17 - Construit et poussé la nouvelle image avec le drapeau orgOnly - abhartiya/tools_gitallsecrets:v4
8/22/17 - Ajout du basculement -orgOnly par kciredor : analyse le dépôt d'organisation spécifié et ignore les dépôts utilisateur.
6/26/17 - Suppression de certaines sorties dans repo-supevisor qui affichaient des erreurs lorsqu'aucun secret n'était trouvé. Sortie inutile ! Construit et poussé la nouvelle image - abhartiya/tools_gitallsecrets:v3
6/25/17 - Ajout du drapeau toolName pour spécifier quel outil utiliser pour l'analyse. Construit et poussé la nouvelle image - abhartiya/tools_gitallsecrets:v2
6/14/17 - Ajout de repo-supervisor comme outil d'analyse, également mis à jour et ajouté le numéro de version à l'image docker - abhartiya/tools_gitallsecrets:v1
6/14/17 - Ajout du drapeau cloneForks pour éviter de cloner les forks des dépôts d'organisation et utilisateur. Par défaut, ceci est faux. Si vous souhaitez analyser les forks, définissez simplement la valeur à 1, c'est-à-dire -cloneForks=1