
Uno strumento per catturare tutti i segreti git sfruttando molteplici strumenti open source di ricerca git.
git-all-secrets è uno strumento in grado di:
La scansione viene eseguita da diversi strumenti open source come:
NOTA - È possibile aggiungere altri strumenti simili in futuro, se desiderato!
NOTA - La scansione può essere eseguita da tutti gli strumenti o da uno qualsiasi di essi specificando il flag toolName.
Se vengono utilizzati tutti gli strumenti per la scansione, l'output finale dello strumento combina l'output di tutti i file di tutti gli strumenti in un unico file di output consolidato.
Il modo più semplice per eseguire git-all-secrets è tramite Docker e consiglio vivamente di installare Docker se non lo hai già. Una volta installato Docker,
docker run --rm -it abhartiya/tools_gitallsecrets --help per comprendere i diversi flag che può accettare come input.docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<>. Puoi anche specificare uno strumento particolare da utilizzare per la scansione digitando qualcosa come docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=<>. Le opzioni sono thog e repo-supervisor.thogEntropy in questo modo - docker run -it abhartiya/tools_gitallsecrets -token=<> -org=<> -toolName=thog -thogEntropy.docker ps -a.docker cp <container-id>:/root/results.txt .-token = Token di accesso personale di GitHub. Ne abbiamo bisogno perché le richieste non autenticate all'API di GitHub possono incontrare la limitazione della velocità molto presto!
-org = Nome dell'organizzazione da scansionare. Scansionerà tutti i repository pubblici nell'organizzazione + tutti i repository e i gist di tutti gli utenti nell'organizzazione. Se stai utilizzando un token di un utente che fa parte di questa organizzazione, clonerà e scannerà anche tutti i gist segreti appartenenti a quell'utente, così come tutti i repository privati in quell'organizzazione a cui l'utente ha accesso. Tuttavia, NON clonerà e scannerà alcun repository privato di questo utente appartenente a questa organizzazione. Per scansionare repository privati di utenti, utilizza il flag scanPrivateReposOnly con il flag user insieme alla chiave SSH montata su un volume.
-user = Nome dell'utente da scansionare. Scansionerà tutti i repository e i gist di questo utente. Se il token fornito è il token dell'utente, verranno clonati e scansionati anche i gist segreti. Ma verranno clonati e scansionati solo i repository pubblici. Per scansionare i repository privati di questo utente, utilizza il flag scanPrivateReposOnly con il flag user insieme alla chiave SSH montata su un volume.
-repoURL = URL HTTPS del repository da scansionare. Scansionerà solo questo repository. Per i repository pubblici, menzionare l'URL https del repository è sufficiente. Tuttavia, se desideri scansionare un repository privato, devi fornire l'URL ssh insieme alla chiave SSH montata su un volume e al flag scanPrivateReposOnly.
-gistURL = URL HTTPS del gist da scansionare. Scansionerà solo questo gist. Non esiste il concetto di gist pubblico o segreto finché hai l'URL. Anche se hai un gist segreto, se qualcuno conosce l'URL HTTPS del tuo gist segreto, può accedervi anche lui.
Il flag token è obbligatorio. Non può essere vuoto.
I flag org, user, repoURL e gistURL non possono essere tutti vuoti contemporaneamente. Devi fornire solo uno di questi valori. Se fornisci tutti o più valori insieme, l'ordine di precedenza sarà org > user > repoURL > gistURL. Ad esempio, se fornisci entrambi i flag -org=secretorg123 e -user=secretuser1 insieme, lo strumento si lamenterà del fatto che non ha bisogno di altro insieme al valore org. Per eseguirlo solo su un particolare utente, basta fornire il flag user e non il flag org.
Il modo più sicuro per scansionare repository privati è clonare utilizzando gli URL SSH. Per fare ciò, è necessario inserire una chiave SSH appropriata che sia stata aggiunta a un utente GitHub. GitHub ha una documentazione utile per configurare il tuo account. Assicurati che questa chiave non abbia alcuna passphrase impostata. Una volta che hai la chiave SSH, montala semplicemente sul container Docker tramite un volume. È semplice come digitare i comandi seguenti:
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -user=<> -scanPrivateReposOnly
OPPURE
docker run -it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -repoURL=<> -scanPrivateReposOnly
Qui, sto mappando la mia chiave SSH personale id_rsa_personal archiviata localmente su /root/.ssh/id_rsa all'interno del container, in modo che git-all-secrets provi a clonare il repository tramite ssh e utilizzerà la chiave SSH archiviata in /root/.ssh/id_rsa all'interno del container. In questo modo, non stai realmente memorizzando nulla di sensibile all'interno del container. Stai solo utilizzando un file dal tuo computer locale. Una volta che il container viene distrutto, non ha più accesso a questa chiave.
L'API di GitHub limita le circostanze in cui viene segnalato un repository privato. Se si sta cercando di scansionare un'organizzazione con un utente che non è un amministratore, potrebbe essere necessario fornire il team che fornisce l'accesso al repository per l'utente. Per fare ciò, utilizza il flag teamName insieme al flag org. L'esempio è riportato di seguito:
docker run --it -v ~/.ssh/id_rsa_personal:/root/.ssh/id_rsa abhartiya/tools_gitallsecrets -token=<> -org=<> -teamName <>
git-all-secrets ora supporta anche la scansione di GitHub Enterprise. Se hai il tuo GitHub Enterprise ospitato dietro una VPN o qualcosa del genere, assicurati di essere connesso alla VPN o alla rete corretta che ha accesso ai repository di GitHub Enterprise. L'enterpriseURL è ciò di cui hai bisogno per scansionare i tuoi repository di GitHub Enterprise. Di seguito sono riportati alcuni esempi:
Esempio 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
Qui, sto montando la mia chiave SSH di GitHub Enterprise sul container, seguita dal mio token di accesso personale, dall'URL enterprise a cui verranno inviate le richieste e dal repository che voglio scansionare.
Esempio 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
Sopra, sto solo eseguendo truffleHog sul repository con le impostazioni di entropia.
Esempio 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
Sopra, sto scansionando solo i repository privati dell'utente di cui è fornito il token con tutti gli strumenti (repo-supervisor e thog), ma senza l'impostazione di entropia di truffleHog.
rules.json e includerle quando esegui docker run usando l'argomento -v $(pwd)/rules.json:/root/truffleHog/rules.json.git-all-secrets senza troppi sforzi.Ho esaminato un gran numero di strumenti open source che potenzialmente potrebbero essere utilizzati per cercare segreti nei repository GitHub. Alcuni dei migliori strumenti che ho ritenuto validi sono: gitrob, truffleHog e git-secrets.
Gitrob è pensato per essere uno strumento autonomo che è piuttosto difficile da integrare con altri strumenti perché ha il proprio database e UI per vedere tutti i segreti scoperti. Produce anche molti falsi positivi, più di truffleHog. E non evidenzia realmente i segreti scoperti. Guarda solo i file e le loro estensioni, non il contenuto effettivo. Quindi, sebbene Gitrob sia un ottimo strumento per iniziare, consiglio di eseguirlo ogni tanto per capire come appare la superficie di attacco e vedere se è cambiata.
Poi c'è truffleHog che cerca segreti nei contenuti effettivi del file esaminando l'entropia di Shannon e stampa l'output sullo schermo. Accetta un URL di un repository o una directory di un repository come argomento. Questo è uno strumento piuttosto buono anche se ha la sua parte di falsi positivi. Alcuni altri svantaggi sono:
Infine, c'è git-secrets che può segnalare cose come i segreti AWS. La parte migliore è che puoi aggiungere anche le tue espressioni regolari per i segreti che sai che dovrebbe cercare. Uno svantaggio importante è che non fa un buon lavoro nel trovare stringhe ad alta entropia come fa truffleHog. Puoi anche scansionare solo una particolare directory che è un repository, quindi nessuna scansione ricorsiva da una directory di repository.
Quindi, come puoi vedere, ci sono strumenti decenti là fuori, ma dovevano essere combinati in qualche modo. C'era anche la necessità di scansionare ricorsivamente più repository e non solo uno. E, per quanto riguarda i gist? Ci sono organizzazioni e utenti. Poi, ci sono repository per organizzazioni e utenti. Ci sono anche gist degli utenti. Tutti questi dovrebbero essere scansionati. E scansionati in modo che possano essere automatizzati e facilmente consumati da altri strumenti/framework.
2/9/19 - Aggiunto il flag blacklist per saltare alcuni nomi di repository durante la scansione. Grazie a @sjqnn per la PR. Creata e pubblicata una nuova immagine Docker. GLHF!
7/31/18 - Semplificata l'installazione di trufflehog utilizzando pip. @mhmdiaa ha corretto un bug riguardante la funzione di output di trufflehog che non univa e ordinava correttamente. Aggiornato il file regex per includere cose come password. Creata e pubblicata una nuova immagine Docker. GLHF!
7/15/18 - Aggiornato il fork di repo-supervisor perché l'upstream aveva alcune modifiche. Ricostruita una nuova immagine Docker utilizzando l'ultima versione di Trufflehog. Fornito il file rules.json che contiene tutte le regex che Trufflehog utilizza per trovare segreti. Aggiunta la possibilità di unire anche gli output (in json) di entrambi gli strumenti utilizzando il flag -mergeOutput. Ridotto drasticamente la dimensione dell'immagine Docker utilizzando build multi-stadio e dep per la gestione delle dipendenze. Un grande ringraziamento a @mhmdiaa per tutto questo!
12/12/17 - Per alcuni repository grandi, truffleHog fallisce e termina. Ma non vogliamo fermarci lì. Vogliamo notificare all'utente che la scansione è fallita per quel repository e continuare a scansionare gli altri repository. Questo è ora implementato nell'ultima immagine Docker.
12/11/17 - Rimosso gitsecrets perché truffleHog ora supporta la funzionalità regex. Semplicemente, aggiungendo le tue regex nel file rules.json e ricostruendo l'immagine Docker, otterremo fondamentalmente la funzionalità che gitsecrets forniva in precedenza, quindi non c'è più bisogno di gitsecrets. Ho anche aggiunto il supporto per la scansione di repository e gist di GitHub Enterprise. @high-stakes ha aiutato a ottenere una PR che (si spera) risolve il bug di Goroutine limitando il numero di thread. Infine, è stato aggiunto anche il supporto per la scansione di repository privati per un'organizzazione.
12/08/17 - Rimosso il mio fork di truffleHog. Ora utilizzo la versione upstream insieme alla funzionalità regex di truffleHog + modalità entropia. Presto, credo che potremo sostituire sia gitsecrets che repo supervisor con il solo truffleHog una volta risolti alcuni problemi.
Se vuoi mostrare un po' di affetto, il mio indirizzo BTC è 1PtMhXWCcMZCitcDfaEBe7jnV9sjKoNvq7.
-output = Questo è il nome del file in cui verranno memorizzati tutti i risultati. Per impostazione predefinita, è results.txt.
-cloneForks = Questo è un flag booleano opzionale per clonare i fork dei repository dell'organizzazione e dell'utente. Per impostazione predefinita, è impostato su 0, cioè nessuna clonazione dei fork. Se i fork devono essere clonati, questo valore deve essere impostato su 1. Oppure, basta menzionare -cloneForks insieme ad altri flag.
-orgOnly = Questo è un flag booleano opzionale per saltare la clonazione dei repository utente appartenenti a un'organizzazione. Per impostazione predefinita, è impostato su 0, cioè comportamento normale. Se non si desidera scansionare i repository utente e solo i repository dell'organizzazione, questo valore deve essere impostato su 1. Oppure, basta menzionare -orgOnly insieme ad altri flag.
-toolName = Questo è un flag stringa opzionale per specificare quale strumento utilizzare per la scansione. Per impostazione predefinita, è impostato su all, cioè thog e repo-supervisor verranno entrambi utilizzati per la scansione. I valori sono thog o repo-supervisor.
-teamName = Nome del team dell'organizzazione che ha accesso ai repository privati per la scansione. Questo flag non è stato completamente testato, quindi non posso garantirne la funzionalità.
-scanPrivateReposOnly = Questo è un flag booleano opzionale per specificare se si desidera scansionare i repository utente privati o meno. Menzionarlo NON scannerà i repository utente pubblici. Inoltre, è necessario fornire la chiave SSH montando il volume sul container. Inoltre, funziona solo con il flag user, repoURL o org.
Quando il flag org viene menzionato insieme al flag scanPrivateReposOnly e senza il flag orgOnly, scannerà i repository pubblici E privati appartenenti a questa organizzazione a cui l'utente ha accesso (il cui token è fornito). Quindi continuerà a scansionare SOLO i repository privati dell'utente (il cui token è fornito). Infine, continuerà a scansionare tutti i gist pubblici e segreti di questo utente (il cui token è fornito). In sintesi, il flag scanPrivateReposOnly influisce realmente solo sui flag user e repoURL.
-enterpriseURL = Flag opzionale per fornire l'URL di GitHub Enterprise, se desideri scansionare repository enterprise. Dovrebbe essere qualcosa come https://github.org.com/api/v3 insieme alla chiave SSH montata sul container. Fare riferimento a scansione di GitHub Enterprise di seguito.
-threads = Il valore predefinito è 10. Serve per limitare il numero di thread se il tuo sistema non è abbastanza potente. Per la maggior parte dei casi, lasciarlo a 10 dovrebbe andare bene.
-thogEntropy = Questo è un flag opzionale che indica fondamentalmente se desideri ottenere segreti basati sull'alta entropia da truffleHog o meno. I segreti ad alta entropia di truffleHog producono MOLTO rumore, quindi se non vuoi tutto quel rumore e se stai eseguendo git-all-secrets su una grande organizzazione, consiglio di non menzionare questo flag. Per impostazione predefinita, è impostato su False, il che significa che truffleHog produrrà risultati solo in base alle espressioni regolari nel file rules.json. Se stai scansionando un'organizzazione abbastanza piccola con un set limitato di repository o un utente con pochi repository, menzionare questo flag ha più senso.
-mergeOutput = Flag opzionale per unire e deduplicare l'output degli strumenti utilizzati (attualmente truffleHog e repo-supervisor). Il valore predefinito è False.
-blacklist = Nomi di repository forniti come valori separati da virgola che NON devono essere scansionati.
Quando si specifica il flag scanPrivateReposOnly:
-v.ssh quando usi il flag e non l'URL https.Fare riferimento a scansione di repository privati di seguito.
Quando si specifica teamName è importante che il token fornito appartenga a un utente che è membro del team. Potrebbero verificarsi risultati imprevisti altrimenti. Fare riferimento a scansione di un team di un'organizzazione di seguito.
Quando si specifica il flag enterpriseURL, considererà sempre l'URL SSH anche se fornisci l'URL https di un repository. Tutta la clonazione/scansione enterprise avviene tramite l'URL ssh e non l'URL https.
Come menzionato sopra, assicurati che la chiave SSH utilizzata (per scansionare l'URL SSH) non abbia alcuna passphrase impostata.
12/07/17 - Ho aggiornato la documentazione con ulteriori dettagli e spiegazioni sui vari flag.
12/05/17 - Integrato il supporto per la scansione di repository privati tramite chiave SSH. Questa è stata una richiesta per molto tempo e ora è possibile farlo. Inoltre, modificato lo schema dei tag delle immagini Docker. D'ora in poi, l'immagine più recente avrà il tag latest. E tutte le versioni precedenti saranno taggate con un numero. Tutto ciò non sarebbe stato possibile senza il team SimpliSafe, in particolare Matthew Cox (https://github.com/matthew-cox). Quindi un grande ringraziamento a te Matt!
10/14/17 - Creata e pubblicata la nuova immagine abhartiya/tools_gitallsecrets:v6. Questa nuova immagine ha la versione più recente di git-secrets e anche di repo-supervisor, cioè ho unito alcune modifiche upstream nel mio fork insieme ad alcune modifiche aggiuntive che avevo già apportato nel mio fork. La nuova immagine utilizza queste modifiche, quindi tutto è all'ultimo e più grande!* 14/10/17 - Costruita e pubblicata la nuova immagine abhartiya/tools_gitallsecrets:v5. Questa immagine corregge un bug molto stupido e fastidioso che probabilmente causava il fallimento di repo supervisor. Qualcosa è cambiato nel modo in cui i valori delle variabili d'ambiente vengono letti nel Dockerfile, portando repo supervisor a non capire quale percorso di node utilizzare. Inferno Node!
29/09/17 - Costruita e pubblicata la nuova immagine con il flag orgOnly - abhartiya/tools_gitallsecrets:v4
22/08/17 - Aggiunto l'opzione -orgOnly da kciredor: analizza l'organizzazione specificata e salta i repository utente.
26/06/17 - Rimossi alcuni messaggi di output in repo-supervisor che stampavano errori quando non venivano trovati segreti. Output inutile! Costruita e pubblicata la nuova immagine - abhartiya/tools_gitallsecrets:v3
25/06/17 - Aggiunto il flag toolName per specificare quale strumento utilizzare per la scansione. Costruita e pubblicata la nuova immagine - abhartiya/tools_gitallsecrets:v2
14/06/17 - Aggiunto repo-supervisor come strumento di scansione, inoltre aggiornato e aggiunto il numero di versione all'immagine Docker - abhartiya/tools_gitallsecrets:v1
14/06/17 - Aggiunto il flag cloneForks per evitare di clonare i fork dei repository di organizzazioni e utenti. Per impostazione predefinita è false. Se desideri scansionare i fork, imposta il valore a 1, ad esempio -cloneForks=1