
Инструмент для перечисления и атак на пайплайны GitHub Actions
[!WARNING]
Этот репозиторий устарел и архивирован
Gato заменён на Trajan — мультиплатформенный инструмент Praetorian для обнаружения уязвимостей и автоматизации атак на CI/CD. Trajan объединяет возможности атак на CI/CD для GitHub Actions (Gato) и GitLab (Glato) в единый активно поддерживаемый проект.
Пожалуйста, переходите на Trajan: https://github.com/praetorian-inc/trajan
Никакие дальнейшие обновления, исправления ошибок или патчи безопасности в этот репозиторий вноситься не будут.
Gato (GitHub Attack Toolkit) — это инструмент для перечисления и атак, который позволяет как специалистам синих команд, так и специалистам по наступательной безопасности выявлять и эксплуатировать уязвимости конвейеров (pipeline) в публичных и приватных репозиториях организации GitHub.
Инструмент обладает функциями пост-эксплуатации для использования скомпрометированного персонального токена доступа, а также функциями перечисления для выявления уязвимостей отравленных конвейеров выполнения (poisoned pipeline execution) и секретов в артефактах Actions в публичных репозиториях.
GitHub рекомендует использовать самодельные раннеры (self-hosted runners) только для приватных репозиториев, однако тысячи организаций используют их. Конфигурации по умолчанию часто уязвимы, и Gato использует смесь анализа файлов рабочих процессов и анализа журналов выполнения для масштабного выявления потенциально уязвимых репозиториев.
Gato версии 1.7 представляет Сканер секретов артефактов Actions (Actions Artifacts Secrets Scanner).
Сканер секретов артефактов Actions перечисляет артефакты рабочих процессов GitHub Actions на наличие секретов. Исследователи Praetorian использовали сканер для выявления критических уязвимостей в нескольких известных проектах с открытым исходным кодом. Подробности этих уязвимостей будут опубликованы после завершения процессов раскрытия. Эта работа была первоначально вдохновлена исследованием Palo Alto Networks.
Сканер секретов артефактов Actions выполняет следующие действия:
NoseyParker должен быть установлен в $PATH системы, на которой запускается Сканер секретов артефактов Actions.
Секреты в публичных артефактах рабочих процессов могут содержать много ложных срабатываний. По умолчанию Сканер секретов артефактов Actions исключает правила и результаты, связанные с типичными ложными срабатываниями. Чтобы включить все результаты сканирования секретов, используйте флаг --include_all_artifact_secrets.
Вот пример команды, которая запускает Сканер секретов артефактов Actions для списка организаций GitHub, отключает перечисление самодельных раннеров, включает все результаты сканирования артефактов и выводит результат в JSON-файл.
gato e --enum_wf_artifacts --include_all_artifact_secrets --skip_sh_runner_enum -O testorgs.txt -oJ testorgoutput.json
По умолчанию Сканер секретов артефактов Actions накладывает следующие ограничения для сокращения времени, затрачиваемого на один репозиторий:
Эти ограничения были оптимизированы таким образом, чтобы Сканер секретов артефактов Actions мог просканировать топ-200 организаций GitHub в течение 48 часов. Если вы хотите изменить эти ограничения, вы можете обновить их в функции scan_wf_artifacts() файла gato/enumerate/repository.py.
Gato поддерживает OS X и Linux с версией Python не ниже 3.7.
Для установки инструмента просто клонируйте репозиторий и используйте pip install. Мы рекомендуем выполнять это в виртуальном окружении.
git clone https://github.com/praetorian-inc/gato
cd gato
python3 -m venv venv
source venv/bin/activate
pip install .
Gato также требует, чтобы git версии 2.27 или выше был установлен и находился в PATH системы. Для запуска модуля атаки через Fork PR также требуется установленный sed в PATH.
Мы поддерживаем ветку разработки, которая содержит новые функции Gato, ещё не добавленные в основную ветку. Вероятность столкнуться с ошибками выше; однако мы всё ещё запускаем наш интеграционный тестовый набор на ветке dev, поэтому явных ошибок быть не должно.
Если вы хотите использовать ветку dev, просто переключитесь на неё перед запуском pip install — вот и всё!
Если вы столкнётесь с какими-либо ошибками для вашего конкретного случая использования, пожалуйста, создайте issue!
После установки инструмент можно запустить командой gato или praetorian-gato.
Мы рекомендуем просмотреть параметры базового инструмента с помощью gato -h, а параметры каждого из модулей инструмента — с помощью следующих команд:
gato search -hgato enum -hgato attack -hДля работы инструменту требуется классический токен GitHub или токен установки приложения. Чтобы создать его, войдите в GitHub и перейдите в Настройки разработчика GitHub, выберите Generate New Token, а затем Generate new token (classic).
После создания токена установите переменную окружения GH_TOKEN в вашей оболочке, выполнив export GH_TOKEN=<ВАШ_СОЗДАННЫЙ_ТОКЕН>. В качестве альтернативы сохраните токен в безопасном менеджере паролей и вводите его при запросе приложения.
Если вы создаёте токен установки GitHub App, приложению необходимы как минимум права Actions:read и Contents:read для выполнения модулей перечисления.
Инструкции по устранению неполадок и дополнительные сведения, такие как установка в режиме разработчика или запуск модульных тестов, можно найти в вики.
Пожалуйста, обратитесь к вики за подробной документацией, а также к соображениям OpSec для различных модулей инструмента!
Если вы считаете, что обнаружили ошибку в программном обеспечении, пожалуйста, создайте issue, содержащее вывод инструмента, а также действия, которые вы пытались выполнить.
Если вы не уверены, является ли поведение ошибкой, воспользуйтесь разделом обсуждений (Discussions)!
Вклад приветствуется! Пожалуйста, ознакомьтесь с нашей методологией проектирования и стандартами кодирования перед работой над новой функцией!
Кроме того, если вы предлагаете значительные изменения в инструменте, пожалуйста, создайте issue, чтобы начать обсуждение мотивации изменений.
Gato лицензирован в соответствии с Apache License, Version 2.0.
Copyright 2023 Praetorian Security, Inc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.