Rilevamento di Segreti in Commit Eliminati: Guida a force-push-scanner
La sicurezza nello sviluppo software è una priorità assoluta, soprattutto nell'era DevOps. La divulgazione accidentale di segreti, come credenziali hardcoded o chiavi API, rappresenta un rischio significativo. Per mitigare questo rischio, è fondamentale il rilevamento segreti in ogni fase del ciclo di vita del software. Uno strumento utile in questo contesto è force-push-scanner, sviluppato da Truffle Security. Questo tool permette di scansionare repository GitHub alla ricerca di segreti potenzialmente esposti in commit eliminati a seguito di un force push, sfruttando i dati archiviati da GH Archive. Pensiamo, ad esempio, a chiavi private AWS, token di accesso a database o credenziali per servizi cloud, che, se compromessi, potrebbero causare danni ingenti. In questo tutorial, esploreremo come installare, configurare ed utilizzare force-push-scanner per proteggere i tuoi progetti.
Obiettivi del tutorial:
- Comprendere il rischio di segreti divulgati con force push.
- Installare e configurare force-push-scanner.
- Scansionare un repository GitHub alla ricerca di segreti.
- Interpretare i risultati della scansione e mitigare i rischi.
1. Comprendere il Rischio dei Force Push e dei Segreti
Un force push (
git push --force
) è un'operazione che sovrascrive la cronologia dei commit remoti, allineandola forzatamente alla cronologia locale. Questo può accadere quando uno sviluppatore, ad esempio, si accorge di aver committato accidentalmente dei segreti (credenziali, chiavi API, etc.) e cerca di rimuoverli riscrivendo la storia del repository. I commit rimossi tramite force push diventano dangling commits (commit orfani), non più direttamente raggiungibili. Sebbene il garbage collector di Git possa eliminarli nel tempo, servizi come GitHub li conservano per un periodo più lungo. force-push-scanner interviene proprio in questo scenario, analizzando questi commit orfani alla ricerca di segreti.
Esempi di segreti comunemente esposti:
- Chiavi API: Chiavi per servizi come AWS, Google Cloud, o Stripe, che permettono l'accesso alle risorse del cloud.
- Credenziali di database: Username e password per database MySQL, PostgreSQL, MongoDB, etc.
- Token di accesso: Token per servizi come GitHub, GitLab, o Bitbucket, che permettono l'accesso al codice sorgente.
- Certificati SSL/TLS: Certificati utilizzati per la crittografia delle comunicazioni.
GH Archive è un archivio pubblico di eventi GitHub, una miniera di informazioni per analizzare trend e comportamenti all'interno dell'ecosistema. force-push-scanner sfrutta i dati di GH Archive relativi agli eventi di force push per identificare i commit orfani da analizzare.
2. Rischi Associati all'Esposizione di Segreti
L'esposizione di segreti può avere conseguenze disastrose per la sicurezza di un progetto. I rischi includono:
- Accesso non autorizzato: Gli attaccanti possono utilizzare le credenziali esposte per accedere a sistemi e dati sensibili.
- Furto di dati: Gli attaccanti possono rubare dati personali, informazioni finanziarie o segreti commerciali.
- Interruzione del servizio: Gli attaccanti possono interrompere il servizio modificando o cancellando dati.
- Danni reputazionali: La violazione della sicurezza può danneggiare la reputazione di un'azienda e la fiducia dei clienti.
- Sanzioni legali: In alcuni casi, l'esposizione di dati personali può comportare sanzioni legali e multe.
La gravità dei danni dipende dal tipo di segreto esposto e dal livello di accesso che esso fornisce. Ad esempio, l'esposizione di una chiave API con accesso completo a un account AWS può permettere a un attaccante di controllare completamente l'infrastruttura cloud di un'azienda.
graph LR A[Segreto Esposto] --> B{Accesso Non Autorizzato} B --> C[Furto di Dati] B --> D[Interruzione del Servizio] B --> E[Danni Reputazionali] B --> F[Sanzioni Legali]
3. Installazione e Configurazione di force-push-scanner
Ecco i passaggi per installare e configurare force-push-scanner:
- Prerequisiti: Assicurati di avere Python installato (preferibilmente versione 3.6 o superiore) e
pip
, il gestore di pacchetti di Python. - Clonare il repository:
git clone https://github.com/trufflesecurity/force-push-scanner.git cd force-push-scanner
- Installare le dipendenze:
pip install -r requirements.txt
- Database dei Force Push Commits:
force-push-scanner necessita di un database contenente informazioni sugli eventi di force push. Il modo più semplice per ottenerlo è scaricare il database SQLite precompilato (force_push_commits.sqlite3
) tramite il form fornito da Truffle Security: https://forms.gle/344GbP6WrJ1fhW2A6. Questo database permette di effettuare ricerche locali per utente/organizzazione. - (Alternativa) Utilizzo di BigQuery:
Se preferisci, puoi interrogare direttamente il dataset pubblico di GH Archive tramite BigQuery. La query SQL di esempio fornita nel README è:
SostituisciSELECT * FROM `external-truffle-security-gha.force_push_commits.pushes` WHERE repo_org = '
'; <ORG>
con il nome dell'organizzazione o utente che vuoi analizzare. Esporta i risultati in formato CSV e salvali in un file.
4. Esecuzione di Scansioni e Personalizzazione
Ora che hai installato e configurato force-push-scanner, puoi eseguire scansioni per identificare potenziali segreti esposti. Ecco i comandi principali:
Scansione con il database SQLite (raccomandato):
python force_push_scanner.py <org> --db-file /path/to/force_push_commits.sqlite3 --scan
<org>
: Sostituisci con il nome dell'organizzazione o dell'utente GitHub da scansionare.- --db-file: Specifica il percorso del file del database SQLite (
force_push_commits.sqlite3
). - --scan: Abilita la scansione con TruffleHog. Senza questa opzione, lo script si limiterà a listare gli eventi di force push.
Scansione con file CSV (esportato da BigQuery):
python force_push_scanner.py <org> --events-file /path/to/force_push_commits.csv --scan
<org>
: Sostituisci con il nome dell'organizzazione o dell'utente GitHub da scansionare.- --events-file: Specifica il percorso del file CSV contenente i dati esportati da BigQuery.
- --scan: Abilita la scansione con TruffleHog.
Altre opzioni utili:
- --verbose o
-v
: Abilita il logging dettagliato per il debug. Utile per identificare eventuali problemi durante l'esecuzione. -h
: Visualizza l'help completo con tutte le opzioni disponibili.
5. Interpretazione dei Risultati e Mitigazione dei Rischi
Una volta completata la scansione, force-push-scanner fornirà un output contenente informazioni sugli eventi di force push rilevati e, se l'opzione --scan è stata utilizzata, i risultati della scansione di TruffleHog. Ogni risultato di TruffleHog includerà il link al commit incriminato, permettendoti di esaminare il codice sorgente e verificare la presenza del segreto.
Best practices per la gestione dei segreti:
- Non committare mai segreti nel repository: Utilizza variabili d'ambiente, vault di segreti (es. HashiCorp Vault), o altri meccanismi per gestire le credenziali in modo sicuro.
- Adotta la rotazione delle credenziali: Cambia regolarmente le password e le chiavi API per limitare i danni in caso di compromissione.
- Utilizza strumenti di secret scanning: Integra strumenti come force-push-scanner e TruffleHog nella tua pipeline CI/CD per rilevare automaticamente i segreti esposti.
- Educa il tuo team: Sensibilizza gli sviluppatori sull'importanza della sicurezza dei segreti e sulle best practices per la loro gestione.
Fonti e approfondimenti
Conclusione
force-push-scanner è uno strumento prezioso per identificare e mitigare il rischio di segreti esposti accidentalmente tramite force push. Integrando questo strumento nella tua pipeline di sviluppo e seguendo le best practices per la gestione dei segreti, puoi migliorare significativamente la postura di sicurezza del tuo codice e proteggere le tue applicazioni da potenziali attacchi.
Domande per la riflessione:
- Quali sono le misure di sicurezza che hai implementato per proteggere i segreti nel tuo repository GitHub?
- Come pensi di integrare force-push-scanner nella tua pipeline CI/CD?
- Quali sono le sfide principali che incontri nella gestione dei segreti nel tuo team di sviluppo?
Commenti 0
Nessun commento ancora. Sii il primo a dire la tua!
I commenti sono moderati e saranno visibili dopo l'approvazione.