
Framework di analisi statica a fasi per flussi di lavoro GitHub Actions. Rileva vulnerabilità di code injection tramite taint-tracking e un classificatore di impatto, generando report SARIF per la sicurezza CI/CD.
Questo repository contiene il codice per il nostro articolo USENIX Security '23 "ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions". Argus è uno strumento completo di analisi della sicurezza progettato specificamente per GitHub Actions. Costruito con l'obiettivo di migliorare la sicurezza dei flussi di lavoro CI/CD, Argus utilizza tecniche di tracciamento del taint e un classificatore di impatto per rilevare potenziali vulnerabilità nei flussi di lavoro di GitHub Action.
Visita il nostro sito web - secureci.org per maggiori informazioni.
Taint-Tracking: Argus utilizza algoritmi sofisticati per tracciare il flusso di dati potenzialmente non fidati da fonti specifiche a sink critici per la sicurezza all'interno dei flussi di lavoro di GitHub Actions. Ciò consente l'identificazione di vulnerabilità che potrebbero portare ad attacchi di code injection.
Impact Classifier: Argus classifica le vulnerabilità identificate in classi di gravità Alta, Media e Bassa, fornendo una comprensione più chiara dell'impatto potenziale di ciascuna vulnerabilità identificata. Questo è cruciale per dare priorità agli sforzi di mitigazione.
Questo script Python fornisce un'interfaccia a riga di comando per interagire con repository e azioni GitHub.
python argus.py --mode [mode] --url [url] [--output-folder path_to_output] [--config path_to_config] [--verbose] [--branch branch_name] [--commit commit_hash] [--tag tag_name] [--action-path path_to_action] [--workflow-path path_to_workflow]
--mode: La modalità di funzionamento. Scegliere 'repo' o 'action'. Questo parametro è obbligatorio.--url: L'URL di GitHub. Usare USERNAME:TOKEN@URL per repository privati. Questo parametro è obbligatorio.--output-folder: La cartella di output. Il valore predefinito è '/tmp'. Questo parametro è facoltativo.--config: Il file di configurazione. Questo parametro è facoltativo.--verbose: Modalità verbosa. Se questa opzione viene fornita, il livello di logging è impostato su DEBUG. Altrimenti, è impostato su INFO. Questo parametro è facoltativo.--branch: Il nome del branch. È necessario fornire esattamente uno tra --branch, --commit, --tag. Questo parametro è facoltativo.--commit: L'hash del commit. È necessario fornire esattamente uno tra --branch, , . Questo parametro è facoltativo.Per usare questo script per interagire con un repository GitHub, puoi eseguire un comando come il seguente:
python argus.py --mode repo --url https://github.com/username/repo.git --branch master
Questo eseguirebbe lo script in modalità repo sul branch master del repository specificato.
Argus può essere eseguito all'interno di un contenitore Docker. Per farlo, segui i passaggi:
resultsPuoi visualizzare i risultati SARIF tramite un visualizzatore online o con un'estensione di Visual Studio Code (VSCode).
Visualizzatore Online: Il SARIF Web Viewer è uno strumento online che ti permette di visualizzare i file SARIF. Puoi caricare il tuo file SARIF (argus_report.sarif) direttamente sul sito web per visualizzare i risultati.
Estensione VSCode: Se preferisci usare VSCode, puoi installare l'estensione SARIF Viewer. Dopo aver installato l'estensione, puoi aprire il tuo file SARIF (argus_report.sarif) in VSCode. I risultati appariranno nel pannello SARIF Explorer, che fornisce una visione dettagliata e navigabile dei risultati.
Ricorda di gestire il file SARIF con cura, specialmente se contiene informazioni sensibili dal tuo codebase.
Se c'è un problema riguardante la necessità di autorizzazione Github per l'esecuzione, puoi fornire username:TOKEN nella variabile d'ambiente GITHUB_CREDS. Questo verrà utilizzato per tutte le richieste fatte a Github. Nota, non memorizziamo queste informazioni da nessuna parte, né creiamo nulla nell'account Github - lo usiamo solo per clonare i repository.
Argus è un progetto open-source e accogliamo con favore i contributi della comunità. Che si tratti di segnalare un bug, suggerire una funzionalità o scrivere codice, i tuoi contributi sono sempre apprezzati!
Se usi Argus nella tua ricerca, cita il nostro articolo:
@inproceedings{muralee2023Argus,
title={ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions},
author={S. Muralee, I. Koishybayev, A. Nahapetyan, G. Tystahl, B. Reaves, A. Bianchi, W. Enck,
A. Kapravelos, A. Machiry},
booktitle={32st USENIX Security Symposium (USENIX Security 23)},
year={2023},
}
Argus è concesso in licenza GPL.
--commit--tag--tag: Il tag. È necessario fornire esattamente uno tra --branch, --commit, --tag. Questo parametro è facoltativo.--action-path: Il percorso (relativo) all'azione. Non è possibile fornire --action-path nella modalità repo. Questo parametro è facoltativo.--workflow-path: Il percorso (relativo) al workflow. Non è possibile fornire --workflow-path nella modalità action. Questo parametro è facoltativo.