Gato (GitHub Attack Toolkit)

Reconnaissance

Gato — инструмент для перечисления и эксплуатации уязвимостей CI/CD-пайплайнов в GitHub-репозиториях, позволяющий выявлять скомпрометированные self-hosted runners и извлекать секреты из артефактов workflow.


Установка
git clone https://github.com/praetorian-inc/gato
cd gato
python3 -m venv venv
source venv/bin/activate
pip install .
переведено ИИ

[!WARNING]

Этот репозиторий устарел и архивирован

Gato заменён на Trajan — инструмент Praetorian для обнаружения уязвимостей и автоматизации атак в CI/CD на нескольких платформах. Trajan объединяет возможности атак на CI/CD GitHub Actions (Gato) и GitLab (Glato) в одном активно поддерживаемом проекте.

Пожалуйста, перейдите на Trajan: https://github.com/praetorian-inc/trajan

В этом репозитории больше не будут выпускаться обновления, исправления ошибок или патчи безопасности.


Supported Python versions

Gato (GitHub Attack TOolkit)

gato

Gato, или GitHub Attack Toolkit, — это инструмент для перечисления и атак, который позволяет как специалистам по обороне (blue team), так и специалистам по информационной безопасности выявлять и эксплуатировать уязвимости конвейера в публичных и приватных репозиториях организации GitHub.

Инструмент имеет возможности пост-эксплуатации для использования скомпрометированного персонального токена доступа, а также возможности перечисления для выявления отравленных уязвимостей выполнения конвейера и секретов артефактов действий в публичных репозиториях.

GitHub рекомендует использовать самохостящиеся раннеры только для приватных репозиториев, однако тысячи организаций используют самохостящиеся раннеры. Конфигурации по умолчанию часто уязвимы, и Gato использует комбинацию анализа файлов воркфлоу и анализа логов запуска для выявления потенциально уязвимых репозиториев в масштабе.

Версия 1.7

Gato версии 1.7 представляет сканер секретов артефактов Actions (Actions Artifacts Secrets Scanner).

Сканер секретов артефактов Actions перечисляет артефакты воркфлоу GitHub Actions в поисках секретов. Исследователи Praetorian использовали сканер для выявления критических уязвимостей в нескольких известных открытых проектах. Подробности этих уязвимостей будут опубликованы после завершения процессов раскрытия. Эта работа изначально вдохновлена исследованиями Palo Alto Networks.

Сканер секретов артефактов Actions выполняет следующие действия: 1. Скачивает артефакты воркфлоу GitHub Actions из целевого репозитория 2. Рекурсивно извлекает скачанные артефакты 3. Сканирует артефакты на наличие секретов с помощью NoseyParker 4. Отчётует результаты

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 накладывает следующие ограничения для сокращения времени, затрачиваемого на один репозиторий: - Скачивает только один артефакт на имя - Скачивает максимум 50 артефактов на репозиторий - Скачивает максимум 10 файлов размером более 536 МБ - Не скачивает файлы размером более 2,68 ГБ

Эти ограничения оптимизированы таким образом, чтобы сканер секретов артефактов Actions мог просканировать топ-200 организаций GitHub в течение 48 часов. Если вы хотите изменить эти ограничения, вы можете обновить их в функции scan_wf_artifacts() файла gato/enumerate/repository.py.

Новые возможности

  • Добавлен сканер секретов артефактов Actions
  • Поддержка запуска модулей на списке организаций GitHub
  • Возможность отключить перечисление самохостящихся раннеров
  • Опция отключения задержки (sleep)
  • Разграничение публичных и приватных репозиториев в выводе
  • Несколько исправлений ошибок
  • Поддержка перечисления токенов установки GitHub App

Для кого это?

  • Инженеры по безопасности, желающие оценить уровень доступа, который скомпрометированный классический PAT может предоставить злоумышленнику
  • Синие команды (blue teams), желающие создать детектирование атак с использованием самохостящихся раннеров
  • Красные команды (Red Teamers)
  • Охотники за баг-баунти, желающие попробовать и доказать RCE на организациях, использующих самохостящиеся раннеры

Возможности

  • Перечисление привилегий классического PAT GitHub
  • Перечисление на основе GitHub Code Search API
  • Перечисление через SourceGraph Search
  • Парсинг логов запуска GitHub Action для выявления Self-Hosted Runners (самостоятельных исполнителей)
  • Массовый разреженный клонирование репозиториев (Bulk Repo Sparse Clone)
  • Парсинг рабочих процессов GitHub Action
  • Автоматическое создание Pull Request на форке для выполнения команд
  • Автоматическое создание рабочих процессов для выполнения команд
  • Автоматический экстракт секретов из рабочих процессов
  • Поддержка SOCKS5-прокси
  • Поддержка HTTPS-прокси
  • Сканирование секретов в артефактах рабочих процессов GitHub Actions

Начало работы

Установка

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. Для запуска модуля атаки через форк PR (fork PR attack) также необходимо, чтобы sed был установлен и доступен в системном пути.

Ветка разработки (Dev Branch)

Мы поддерживаем ветку разработки, в которой содержатся более новые функции Gato, которые ещё не были добавлены в основную ветку. Вероятность встретить ошибки повышена; однако мы всё равно запускаем наш интеграционный тестовый набор на ветке dev, так что явных (blatant) багов быть не должно.

Если вы хотите использовать ветку dev, просто переключитесь на неё перед запуском pip install — всё!

Если вы столкнётесь с какими-либо багами для вашего конкретного случая использования, конечно, создайте issue (заявление о проблеме)!

Использование

После установки инструмента можно запустить, выполнив gato или praetorian-gato.

Мы рекомендуем просмотреть параметры базового инструмента с помощью gato -h, а параметры каждого из модулей инструмента, запустив:

  • gato search -h
  • gato enum -h
  • gato attack -h

Для работы инструмента требуется токен классического или приложения GitHub (GitHub App Installation token). Чтобы создать его, войдите в GitHub и перейдите в Настройки разработчика GitHub, выберите Generate New Token (Создать новый токен), а затем Generate new token (classic).

После создания токена установите переменную окружения GH_TOKEN в вашей оболочке, выполнив export GH_TOKEN=<ВЫДЕРЖАННЫЙ_ТОКЕН>. В качестве альтернативы вы можете сохранить токен в надёжном менеджере паролей и вводить его, когда приложение запросит его у вас.

При создании токена установки GitHub App приложение должно иметь доступ как минимум к Actions:read и Contents:read для выполнения модулей перечисления.

Для устранения неполадок и дополнительной информации, например установка в режиме разработчика или запуск модульных тестов, пожалуйста, обратитесь к wiki.

Документация

Подробная документация доступна на wiki, а также рекомендации по OpSec для различных модулей инструмента!

Ошибки (Bugs)

Если вы считаете, что обнаружили баг в программном обеспечении, пожалуйста, создайте issue, включив в него вывод инструмента и действия, которые вы пытались выполнить.

Если вы не уверены, является ли поведение багом, используйте раздел обсуждений (discussions) вместо этого!

Вклад (Contributing)

Вклад приветствуется! Пожалуйста, изучите нашу методологию проектирования и стандарты кодирования перед работой над новой функцией!

Кроме того, если вы предлагаете значительные изменения в инструменте, пожалуйста, создайте 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.
Войдите, чтобы оставить комментарий