
Фреймворк многоэтапного статического анализа заражения для рабочих процессов GitHub Actions. Обнаруживает уязвимости внедрения кода с помощью отслеживания заражения и классификатора воздействия, выводя отчеты SARIF для безопасности CI/CD.
Этот репозиторий содержит код для нашей статьи на USENIX Security '23 "ARGUS: A Framework for Staged Static Taint Analysis of GitHub Workflows and Actions". Argus — это комплексный инструмент анализа безопасности, специально разработанный для GitHub Actions. Созданный с целью повышения безопасности CI/CD пайплайнов, Argus использует методы отслеживания потоков данных (taint-tracking) и классификатор воздействия для обнаружения потенциальных уязвимостей в рабочих процессах GitHub Actions.
Посетите наш веб-сайт — secureci.org для получения дополнительной информации.
Отслеживание потоков данных (Taint-Tracking): Argus использует сложные алгоритмы для отслеживания потоков потенциально недоверенных данных от определённых источников к критическим с точки зрения безопасности стокам (sinks) в рабочих процессах GitHub Actions. Это позволяет выявлять уязвимости, которые могут привести к атакам с внедрением кода.
Классификатор воздействия: Argus классифицирует выявленные уязвимости по трём уровням серьёзности: Высокий, Средний и Низкий, что даёт более чёткое понимание потенциального влияния каждой найденной уязвимости. Это крайне важно для определения приоритетов при устранении уязвимостей.
Этот скрипт на Python предоставляет интерфейс командной строки для взаимодействия с репозиториями GitHub и действиями 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: Режим работы. Выберите 'repo' или 'action'. Этот параметр обязателен.--url: URL GitHub. Используйте USERNAME:TOKEN@URL для частных репозиториев. Этот параметр обязателен.--output-folder: Папка для вывода. Значение по умолчанию — '/tmp'. Этот параметр необязателен.--config: Файл конфигурации. Этот параметр необязателен.--verbose: Подробный режим. Если указан этот параметр, уровень логирования устанавливается в DEBUG. В противном случае — INFO. Этот параметр необязателен.--branch: Имя ветки. Необходимо указать ровно один из параметров: --branch, --commit, --tag. Этот параметр необязателен.--commit: Хеш коммита. Необходимо указать ровно один из параметров: --branch, --commit, . Этот параметр необязателен.Чтобы использовать этот скрипт для взаимодействия с репозиторием GitHub, вы можете выполнить команду, подобную следующей:
python argus.py --mode repo --url https://github.com/username/repo.git --branch master
Это запустит скрипт в режиме repo в указанной ветке master заданного репозитория.
Argus можно запустить внутри Docker-контейнера. Для этого выполните следующие шаги:
resultsВы можете просмотреть результаты SARIF с помощью онлайн-просмотрщика или расширения для Visual Studio Code (VSCode).
Онлайн-просмотрщик: SARIF Web Viewer — это онлайн-инструмент, позволяющий визуализировать SARIF-файлы. Вы можете загрузить свой SARIF-файл (argus_report.sarif) непосредственно на сайт для просмотра результатов.
Расширение VSCode: Если вы предпочитаете использовать VSCode, установите расширение SARIF Viewer. После установки расширения откройте свой SARIF-файл (argus_report.sarif) в VSCode. Результаты появятся в панели SARIF Explorer, которая обеспечивает детализированное и удобное для навигации представление результатов.
Обращайтесь с SARIF-файлом осторожно, особенно если он содержит конфиденциальную информацию из вашей кодовой базы.
Если возникает проблема, связанная с необходимостью авторизации GitHub для выполнения, вы можете указать username:TOKEN в переменной окружения GITHUB_CREDS. Эти данные будут использоваться для всех запросов к GitHub. Обратите внимание: мы нигде не сохраняем эту информацию и не создаём ничего в учётной записи GitHub — мы используем её только для клонирования репозиториев.
Argus — это проект с открытым исходным кодом, и мы приветствуем вклад сообщества. Сообщение об ошибке, предложение новой функции или написание кода — ваши вклады всегда ценятся!
Если вы используете Argus в своих исследованиях, пожалуйста, процитируйте нашу статью:
@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 лицензируется под лицензией GPL.
--tag--tag: Тег. Необходимо указать ровно один из параметров: --branch, --commit, --tag. Этот параметр необязателен.--action-path: (Относительный) путь к action. Нельзя указывать --action-path в режиме repo. Этот параметр необязателен.--workflow-path: (Относительный) путь к workflow. Нельзя указывать --workflow-path в режиме action. Этот параметр необязателен.