
Estrutura de análise estática de fluxo de dados (taint analysis) em estágios para workflows do GitHub Actions. Detecta vulnerabilidades de injeção de código usando rastreamento de fluxo de dados e um classificador de impacto, gerando relatórios SARIF para segurança de CI/CD.
Este repositório contém o código do nosso artigo do USENIX Security '23 "ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions". Argus é uma ferramenta abrangente de análise de segurança projetada especificamente para GitHub Actions. Construído com o objetivo de melhorar a segurança de fluxos de trabalho CI/CD, o Argus utiliza técnicas de rastreamento de contaminação (taint-tracking) e um classificador de impacto para detectar potenciais vulnerabilidades em fluxos de trabalho do GitHub Actions.
Visite nosso site - secureci.org para mais informações.
Taint-Tracking: O Argus usa algoritmos sofisticados para rastrear o fluxo de dados potencialmente não confiáveis desde fontes específicas até sumidouros críticos de segurança em fluxos de trabalho do GitHub Actions. Isso permite a identificação de vulnerabilidades que podem levar a ataques de injeção de código.
Classificador de Impacto: O Argus classifica as vulnerabilidades identificadas em classes de gravidade Alta, Média e Baixa, fornecendo uma compreensão mais clara do impacto potencial de cada vulnerabilidade identificada. Isso é crucial para priorizar os esforços de mitigação.
Este script Python fornece uma interface de linha de comando para interagir com repositórios do GitHub e ações do 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: O modo de operação. Escolha 'repo' ou 'action'. Este parâmetro é obrigatório.--url: A URL do GitHub. Use USERNAME:TOKEN@URL para repositórios privados. Este parâmetro é obrigatório.--output-folder: A pasta de saída. O valor padrão é '/tmp'. Este parâmetro é opcional.--config: O arquivo de configuração. Este parâmetro é opcional.--verbose: Modo verbose. Se esta opção for fornecida, o nível de registro é definido como DEBUG. Caso contrário, é definido como INFO. Este parâmetro é opcional.--branch: O nome do branch. Você deve fornecer exatamente um de: --branch, --commit, --tag. Este parâmetro é opcional.--commit: O hash do commit. Você deve fornecer exatamente um de: --branch, , . Este parâmetro é opcional.Para usar este script para interagir com um repositório do GitHub, você pode executar um comando como o seguinte:
python argus.py --mode repo --url https://github.com/username/repo.git --branch master
Isso executaria o script no modo repo no branch master do repositório especificado.
O Argus pode ser executado dentro de um contêiner Docker. Para fazer isso, siga os passos:
resultsVocê pode visualizar resultados SARIF através de um visualizador online ou com uma extensão do Visual Studio Code (VSCode).
Visualizador Online: O SARIF Web Viewer é uma ferramenta online que permite visualizar arquivos SARIF. Você pode enviar seu arquivo SARIF (argus_report.sarif) diretamente para o site para visualizar os resultados.
Extensão do VSCode: Se você preferir usar o VSCode, pode instalar a extensão SARIF Viewer. Após instalar a extensão, você pode abrir seu arquivo SARIF (argus_report.sarif) no VSCode. Os resultados aparecerão no painel SARIF Explorer, que fornece uma visão detalhada e navegável dos resultados.
Lembre-se de manusear o arquivo SARIF com cuidado, especialmente se ele contiver informações sensíveis do seu código.
Se houver um problema relacionado à necessidade de autorização do Github para executar, você pode fornecer username:TOKEN na variável de ambiente GITHUB_CREDS. Isso será usado para todas as requisições feitas ao Github. Observe que não armazenamos essas informações em nenhum lugar nem criamos nada na conta do Github - usamos apenas para clonar os repositórios.
O Argus é um projeto de código aberto e recebemos contribuições da comunidade. Seja reportando um bug, sugerindo um recurso ou escrevendo código, suas contribuições são sempre bem-vindas!
Se você usar o Argus em sua pesquisa, por favor, cite nosso artigo:
@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},
}
O Argus é licenciado sob a Licença GPL.
--commit--tag--tag: A tag. Você deve fornecer exatamente um de: --branch, --commit, --tag. Este parâmetro é opcional.--action-path: O caminho (relativo) para a ação. Você não pode fornecer --action-path no modo repo. Este parâmetro é opcional.--workflow-path: O caminho (relativo) para o workflow. Você não pode fornecer --workflow-path no modo action. Este parâmetro é opcional.