Русский

Запуск массового сканирования безопасности

Находите репозитории GitHub или запускайте возобновляемое сканирование безопасности на основе реестра CSV.

Используйте npx @openai/codex-security bulk-scan для проверки репозиториев в рамках одной кампании. Находите репозитории в личной учётной записи GitHub или организации либо предоставьте CSV, в котором каждый репозиторий привязан к точной ревизии Git.

Выбор источника репозиториев

Источник Когда использовать
Поиск на GitHub Интерактивно выбирайте репозитории в личной учётной записи GitHub или организации.
Реестр CSV Запускайте повторяемую автоматизированную кампанию для точных ревизий репозиториев.

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

Поиск репозиториев GitHub

Войдите в систему с помощью GitHub CLI:

gh auth login

Запустите интерактивное массовое сканирование:

npx @openai/codex-security bulk-scan

CLI проведёт вас через следующие шаги:

  1. Выберите личную учётную запись GitHub или организацию.
  2. Просмотрите репозитории, активные за последние 90 дней.
  3. Выполните поиск в списке репозиториев и выберите репозитории для сканирования.
  4. Выберите каталог для результатов сканирования.
  5. Проверьте выбранные репозитории и подтвердите кампанию.

При поиске исключаются архивные репозитории и форки. CLI записывает точный коммит ветки по умолчанию для каждого выбранного репозитория в <output-directory>/repositories.csv. Сканирование не начнётся, пока вы не подтвердите выбор.

Чтобы использовать GitHub Enterprise Server, сначала войдите на свой хост GitHub:

gh auth login --hostname github.example.com

Задайте GH_HOST при запуске поиска репозиториев:

GH_HOST=github.example.com npx @openai/codex-security bulk-scan

Для интерактивного поиска требуется терминал. В CI, контейнерах или при наличии подготовленного списка репозиториев используйте вместо него реестр CSV.

Создание CSV с репозиториями

Создайте CSV с одной строкой для каждого репозитория и закреплённой ревизии:

id,repository,revision,scope,mode
payments,https://github.com/example/payments.git,0123456789abcdef0123456789abcdef01234567,services/api,standard
identity,https://github.com/example/identity.git,fedcba9876543210fedcba9876543210fedcba98,,deep

CSV поддерживает следующие столбцы:

Столбец Обязательный Описание
id Да Уникальный идентификатор репозитория. Используйте буквы, цифры, точки, дефисы или символы подчёркивания.
repository Да URL HTTPS, URL SSH или путь к локальному репозиторию. Относительные пути разрешаются от каталога CSV.
revision Да Полный 40- или 64-символьный SHA коммита Git. Имена веток, теги и сокращённые хеши коммитов не поддерживаются.
scope Нет Каталог относительно репозитория для сканирования. Не указывайте значение, чтобы сканировать весь репозиторий.
mode Нет standard или deep. Не указывайте значение, чтобы использовать режим, выбранный для команды.

Чтобы узнать полный SHA коммита локального репозитория, выполните:

git -C /path/to/repository rev-parse HEAD

Запуск кампании из CSV

Передайте CSV и закрытый каталог вывода, находящийся вне репозиториев:

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4

--workers определяет количество одновременных сканирований репозиториев; значение по умолчанию — 4. Используйте --mode deep, чтобы выбрать глубокое сканирование для строк без собственного mode. При этом для каждой строки CSV по-прежнему можно выбрать собственный режим сканирования и область репозитория.

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

Выбор модели и уровня рассуждений

По умолчанию массовое сканирование использует gpt-5.6-sol с уровнем рассуждений xhigh. Чтобы выбрать другую модель и уровень для кампании CSV:

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4 \
  --model gpt-5.6-terra \
  --effort high

Те же параметры доступны при интерактивном поиске репозиториев:

npx @openai/codex-security bulk-scan --model gpt-5.6-terra --effort high

Поддерживаются уровни minimal, low, medium, high и xhigh.

Просмотр результатов кампании

Каталог вывода содержит закреплённую конфигурацию кампании, журнал результатов только для добавления и отдельные артефакты для каждого репозитория и каждой попытки:

security-scans/
├── manifest.json
├── results.jsonl
├── checkouts/
└── artifacts/
    ├── payments/
    │   └── attempt-1/
    │       ├── scan-manifest.json
    │       ├── findings.json
    │       ├── coverage.json
    │       └── report.md
    └── identity/
        └── attempt-1/
            ├── scan-manifest.json
            ├── findings.json
            ├── coverage.json
            └── report.md
  • manifest.json содержит репозитории, закреплённые ревизии, области и режимы сканирования кампании.
  • results.jsonl содержит каждую попытку обработки репозитория, её статус, каталог артефактов и доступные сведения о стоимости или ошибках.
  • report.md предоставляет удобочитаемый отчёт об одной попытке обработки репозитория.
  • findings.json и coverage.json содержат обнаруженные в этой попытке проблемы и проверенную область.

Экспортируйте результаты одного завершённого сканирования репозитория, если вам нужен переносимый результат:

npx @openai/codex-security export \
  /path/outside/repositories/security-scans/artifacts/payments/attempt-1 \
  --export-format sarif \
  --output /path/outside/repositories/payments.sarif

Результаты могут содержать фрагменты исходного кода и сведения об уязвимостях. Храните каталог вывода в закрытом доступе, вне сканируемых репозиториев, и применяйте к нему подходящую политику хранения.

Возобновление кампании

Запустите исходную команду с теми же CSV и каталогом вывода:

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4

CLI возобновит обработку репозиториев, для которых ещё требуется выполнить работу. Завершённый репозиторий пропускается, только если соответствующая квитанция и все необходимые артефакты сканирования по-прежнему существуют.

Не изменяйте реестр репозиториев для существующего каталога вывода. CLI проверяет закреплённый манифест и отклоняет другую кампанию. Используйте новый каталог вывода при изменении репозиториев, ревизий, областей или режимов сканирования.

Повторные попытки при ошибках репозитория

Используйте --max-attempts, чтобы повторить обработку репозитория после временной ошибки извлечения или сканирования:

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --workers 4 \
  --max-attempts 3

По умолчанию для каждого репозитория выполняется одна попытка. Каждая попытка получает собственную квитанцию и каталог артефактов.

Массовое сканирование использует следующие коды завершения:

Код завершения Значение
0 Все репозитории успешно обработаны.
2 Не удалось обработать репозиторий, сканирование охватило область не полностью либо команда столкнулась с ошибкой ввода или выполнения.
130 Кампания прервана нажатием Ctrl-C.
143 Кампания завершена сигналом SIGTERM.

Запуск массового сканирования в Docker

Репозиторий Codex Security содержит усиленную конфигурацию Compose для автоматизированных кампаний CSV на хосте Linux с Docker. Хост должен поддерживать создание непривилегированных пространств имён пользователей.

Подключите CSV с репозиториями, результаты сканирования и данные состояния входа как постоянные каталоги. Передавайте учётные данные OpenAI через окружение или менеджер секретов. Для закрытых репозиториев GitHub таким же способом предоставьте GH_TOKEN или GITHUB_TOKEN.

Запустите образ с подключёнными CSV и каталогом вывода:

docker compose run --rm codex-security \
  bulk-scan /input/repositories.csv \
  --output-dir /output \
  --workers 4

Чтобы возобновить кампанию, используйте те же подключённые CSV и каталог вывода. Для GitHub Enterprise Server задайте в CODEX_SECURITY_GIT_HOST свой хост GitHub.

Описание всех доступных флагов см. в справочнике по команде bulk-scan. Ответы на распространённые вопросы об охвате сканирования и обнаруженных проблемах см. в часто задаваемых вопросах по CLI.