
Gestuftes statisches Taint-Analyse-Framework für GitHub Actions Workflows. Erkennt Code-Injection-Schwachstellen mittels Taint-Tracking und einem Impact-Klassifizierer und erstellt SARIF-Berichte für CI/CD-Sicherheit.
Dieses Repository enthält den Code für unser USENIX Security '23 Paper "ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions". Argus ist ein umfassendes Sicherheitsanalysetool, das speziell für GitHub Actions entwickelt wurde. Mit dem Ziel, die Sicherheit von CI/CD-Workflows zu verbessern, nutzt Argus Taint-Tracking-Techniken und einen Impact Classifier, um potenzielle Schwachstellen in GitHub Action Workflows zu erkennen.
Besuchen Sie unsere Website - secureci.org für weitere Informationen.
Taint-Tracking: Argus verwendet hochentwickelte Algorithmen, um den Fluss potenziell nicht vertrauenswürdiger Daten von bestimmten Quellen zu sicherheitskritischen Senken in GitHub Actions Workflows zu verfolgen. Dies ermöglicht die Identifizierung von Schwachstellen, die zu Code-Injection-Angriffen führen könnten.
Impact Classifier: Argus klassifiziert identifizierte Schwachstellen in die Schweregrade Hoch, Mittel und Niedrig, um ein klareres Verständnis der potenziellen Auswirkungen jeder identifizierten Schwachstelle zu ermöglichen. Dies ist entscheidend für die Priorisierung von Abhilfemaßnahmen.
Dieses Python-Skript bietet eine Befehlszeilenschnittstelle für die Interaktion mit GitHub-Repositories und GitHub-Aktionen.
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: Der Betriebsmodus. Wählen Sie entweder 'repo' oder 'action'. Dieser Parameter ist erforderlich.--url: Die GitHub-URL. Verwenden Sie USERNAME:TOKEN@URL für private Repos. Dieser Parameter ist erforderlich.--output-folder: Der Ausgabeordner. Der Standardwert ist '/tmp'. Dieser Parameter ist optional.--config: Die Konfigurationsdatei. Dieser Parameter ist optional.--verbose: Ausführlicher Modus. Wenn diese Option angegeben wird, wird die Protokollierungsebene auf DEBUG gesetzt. Andernfalls wird sie auf INFO gesetzt. Dieser Parameter ist optional.--branch: Der Branchname. Sie müssen genau eine der Optionen angeben: --branch, --commit, --tag. Dieser Parameter ist optional.--commit: Der Commit-Hash. Sie müssen genau eine der Optionen angeben: --branch, , . Dieser Parameter ist optional.Um dieses Skript zur Interaktion mit einem GitHub-Repo zu verwenden, könnten Sie einen Befehl wie den folgenden ausführen:
python argus.py --mode repo --url https://github.com/username/repo.git --branch master
Dies würde das Skript im Repo-Modus auf dem Master-Branch des angegebenen Repositories ausführen.
Argus kann in einem Docker-Container ausgeführt werden. Gehen Sie dazu wie folgt vor:
results verfügbarSie können SARIF-Ergebnisse entweder über einen Online-Viewer oder mit einer Visual Studio Code (VSCode)-Erweiterung anzeigen.
Online-Viewer: Der SARIF Web Viewer ist ein Online-Tool, mit dem Sie SARIF-Dateien visualisieren können. Sie können Ihre SARIF-Datei (argus_report.sarif) direkt auf die Website hochladen, um die Ergebnisse anzuzeigen.
VSCode-Erweiterung: Wenn Sie lieber VSCode verwenden möchten, können Sie die SARIF Viewer Erweiterung installieren. Nach der Installation der Erweiterung können Sie Ihre SARIF-Datei (argus_report.sarif) in VSCode öffnen. Die Ergebnisse werden im SARIF-Explorer-Bereich angezeigt, der eine detaillierte und navigierbare Ansicht der Ergebnisse bietet.
Denken Sie daran, die SARIF-Datei mit Vorsicht zu behandeln, insbesondere wenn sie sensible Informationen aus Ihrer Codebasis enthält.
Falls ein Problem mit der erforderlichen GitHub-Autorisierung für die Ausführung auftritt, können Sie username:TOKEN in der Umgebungsvariable GITHUB_CREDS angeben. Dies wird für alle Anfragen an GitHub verwendet. Beachten Sie, dass wir diese Informationen nirgendwo speichern und auch nichts im GitHub-Konto erstellen – wir verwenden sie nur zum Klonen der Repositories.
Argus ist ein Open-Source-Projekt, und wir begrüßen Beiträge aus der Community. Ob es sich um das Melden eines Fehlers, das Vorschlagen einer Funktion oder das Schreiben von Code handelt – Ihre Beiträge werden immer geschätzt!
Wenn Sie Argus in Ihrer Forschung verwenden, zitieren Sie bitte unser Paper:
@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 ist unter der GPL-Lizenz lizenziert.
--commit--tag--tag: Der Tag. Sie müssen genau eine der Optionen angeben: --branch, --commit, --tag. Dieser Parameter ist optional.--action-path: Der (relative) Pfad zur Aktion. Sie können --action-path nicht im Repo-Modus angeben. Dieser Parameter ist optional.--workflow-path: Der (relative) Pfad zum Workflow. Sie können --workflow-path nicht im Aktionsmodus angeben. Dieser Parameter ist optional.