
Scanner statico di token e credenziali
Static Token And Credential Scanner
STACS è uno scanner di credenziali statiche basato su YARA che supporta formati di file binari, analisi di archivi nidificati, set di regole e liste di esclusione componibili, e report in SARIF.
Attualmente, STACS supporta la decompressione ricorsiva di:
Poiché STACS opera sui tipi di file rilevati, i formati di file proprietari basati su questi formati, così come altri tipi di file che li utilizzano, sono automaticamente supportati. Ciò include immagini Docker, APK Android, file JAR Java, RPM, pacchetti Debian (.deb), pacchetti macOS (.pkg) e altro ancora!
STACS è progettato per essere utilizzato da qualsiasi team che pubblichi artefatti binari. STACS fornisce agli sviluppatori la possibilità di verificare automaticamente l'inclusione accidentale di credenziali statiche e materiale chiave nelle loro release.
Tuttavia, ciò non significa che STACS non possa essere utile per applicazioni SaaS, software enterprise o persino codice sorgente!
Ad esempio, STACS può essere utilizzato per trovare credenziali statiche in immagini Docker caricate su registri di container pubblici e privati. Può anche essere utilizzato per trovare credenziali accidentalmente compilate in eseguibili, pacchetti per dispositivi mobili e "archivi enterprise", come quelli utilizzati dai server applicativi Java.
STACS rileva credenziali statiche utilizzando "pacchetti di regole" forniti a STACS al momento dell'esecuzione. Questi pacchetti di regole definiscono un set di regole YARA da applicare ai file forniti a STACS. Quando viene trovata una corrispondenza con una regola, viene generato un "rilevamento". Questi rilevamenti rappresentano potenziali credenziali all'interno di un file e vengono segnalati in modo che uno sviluppatore possa correggerli o "ignorarli".
Se il rilevamento risulta essere un falso positivo (cioè una corrispondenza su qualcosa di diverso da una credenziale reale), lo sviluppatore può generare un set di "liste di esclusione" per garantire che queste corrispondenze non appaiano nei report futuri.
La vera potenza di STACS deriva dal rilevamento automatico e dalla decompressione di archivi nidificati, nonché dalle liste di esclusione e dai pacchetti di regole componibili.
Per consentire un utilizzo flessibile e collaborativo, STACS supporta liste di esclusione componibili. Ciò consente a una lista di esclusione di includere altre liste di esclusione, permettendo la composizione di un "albero di esclusioni" basato su linee guida organizzative. Queste liste di esclusione sono particolarmente utili nelle organizzazioni in cui vengono utilizzati molti degli stessi framework o prodotti. Se un team ha già contrassegnato un rilevamento come falso positivo, gli altri team beneficiano del fatto di non dover triare lo stesso rilevamento.
Allo stesso modo delle liste di esclusione, anche i pacchetti di regole sono componibili. Ciò consente a un'organizzazione di definire un set di regole di base per tutti i team, consentendo comunque ai team di mantenere set di regole specifici per i loro prodotti.
Il modo più semplice per utilizzare STACS è utilizzare le immagini Docker pubblicate su Docker Hub. Tuttavia, STACS può anche essere installato direttamente da PyPI di Python, o clonando questo repository. Vedi le sezioni pertinenti di seguito per iniziare!
Un servizio cloud è in arrivo che consentirà l'integrazione diretta nelle pipeline di build e release per abilitare il rilevamento di credenziali statiche prima del rilascio!
Utilizzando le immagini pubblicate, STACS può essere utilizzato per scansionare gli artefatti immediatamente! Le immagini Docker di STACS forniscono una serie di mount di volume per i file che si desidera scansionare, da montare direttamente nel container di scansione.
Ad esempio, per scansionare tutto nella cartella corrente, è possibile eseguire il seguente comando (Docker deve essere installato).
docker run \
--rm \
-v "$(pwd):/mnt/stacs/input:ro" \
stacscan/stacs:latest
Se si desidera ricevere un output "gradevole" e leggibile, utilizzare il seguente comando:
docker run \
--rm \
-e STACS_OUTPUT_PRETTY=1 \
-v "$(pwd):/mnt/stacs/input:ro" \
stacscan/stacs:latest
Per impostazione predefinita, STACS invia ogni rilevamento in formato SARIF direttamente su STDOUT e, per mantenere l'ordine, tutti i messaggi di log vengono inviati su STDERR. Per casi d'uso più avanzati, sono forniti una serie di altri mount di volume. Questi consentono all'utente di controllare i pacchetti di regole, le liste di esclusione e le directory della cache da utilizzare.
STACS può anche essere installato direttamente da PyPi di Python. Questo fornisce un comando stacs che gli sviluppatori possono utilizzare per scansionare i progetti direttamente nei loro ambienti di sviluppo locali.
STACS può essere installato direttamente da PyPi utilizzando:
pip install stacs
Nota bene: La release di STACS da PyPi non include alcuna regola. Sarà necessario clonare anche quelle dal repository delle regole della community affinché STACS funzioni!
Non ancora. Tuttavia, sono previsti piani per una versione ospitata di STACS che possa essere facilmente integrata nei sistemi di build esistenti e che contenga pacchetti di regole e liste di esclusione predefiniti aggiuntivi.
Purtroppo, i falsi positivi sono un effetto collaterale inevitabile durante il rilevamento di credenziali statiche. Se le regole sono troppo granulari, la manutenzione delle regole diventa un onere e STACS potrebbe perdere credenziali. Se le regole sono troppo ampie, STACS potrebbe generare troppi falsi positivi!
Per aiutare, STACS fornisce una serie di strumenti per ridurre il numero di falsi positivi che finiscono nei report finali.
Principalmente, STACS fornisce un meccanismo che consente agli utenti di definire liste di esclusione componibili per "ignorare" un insieme di rilevamenti. Queste regole possono essere ampie come ignorare tutti i file basati su un pattern, o granulari come un rilevamento specifico su una particolare riga di un file.
Questa informazione viene automaticamente propagata nei report, quindi i rilevamenti "ignorati" verranno contrassegnati come "soppressi" nell'output SARIF, includendo anche il motivo dell'esclusione nell'output per la tracciabilità.
Se si utilizza l'output "gradevole" (--pretty / STACS_OUTPUT_PRETTY), i risultati verranno stampati in un formato leggibile dall'uomo sulla console.

Se si utilizza SARIF, sono disponibili vari visualizzatori che rendono questi dati più facili da leggere, come questo fantastico visualizzatore web di Microsoft. Di seguito è riportato un esempio dei rilevamenti da un'immagine container Docker:

Purtroppo, ciò sembra essere dovuto a una limitazione di Docker Desktop per Mac. L'I/O per i bind mount è davvero molto lento.