Русский

Массовое сканирование безопасности

Находите репозитории 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,prompt
payments,https://github.com/example/payments.git,0123456789abcdef0123456789abcdef01234567,services/api,standard,Review payment authorization and refunds.
identity,https://github.com/example/identity.git,fedcba9876543210fedcba9876543210fedcba98,,deep,Review session and identity boundaries.

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

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

Чтобы узнать полный 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. Этот параметр не задает количество независимых исполнителей стандартного сканирования внутри каждого глубокого сканирования; настройте эти ограничения с помощью [deep_scan]. Используйте --mode deep, чтобы выбрать глубокое сканирование для строк, в которых не задан собственный mode. Каждая строка CSV по-прежнему может задавать собственный режим сканирования и область репозитория.

Задайте [deep_scan].max_time_hours, чтобы ограничить выполнение исполнителей для каждого глубокого сканирования в кампании. Флаг --max-time-hours работает с scan, но не с bulk-scan.

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

Передача контекста и инструкций по безопасности

Добавляйте архитектурные документы, модели угроз или политики безопасности к каждому сканированию с помощью --knowledge-base. Повторите флаг, чтобы добавить другие файлы или каталоги:

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --knowledge-base /path/to/architecture.md \
  --knowledge-base /path/to/security-policies

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

npx @openai/codex-security bulk-scan repositories.csv \
  --output-dir /path/outside/repositories/security-scans \
  --scan-prompt-file scan-instructions.md \
  --post-scan-prompt-file follow-up.md

CLI добавляет значение prompt из CSV для каждого репозитория после общих инструкций по сканированию. Дополнительные инструкции выполняются в том же аутентифицированном сеансе после успешного сканирования, а также сканирования с неполным покрытием или ошибками, но не после отмены или сканирования, достигшего предельной стоимости. Пути к файлам с запросами разрешаются относительно текущего каталога.

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

По умолчанию при массовом сканировании используется 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.

Чтобы использовать OpenRouter или Fireworks, задайте соответственно OPENROUTER_API_KEY или FIREWORKS_API_KEY и укажите --provider и --model. Сведения об учетных данных и примеры см. в разделе Настройка OpenRouter или Fireworks или Настройка Amazon Bedrock.

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

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

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 возобновит незавершенные сканирования репозиториев и пропустит завершенные. Сканирования с неполным покрытием не выполняются повторно. Их результаты остаются доступными, а команда завершается с кодом 2.

Не изменяйте реестр репозиториев, инструкции по сканированию и дополнительные инструкции для существующего выходного каталога. 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 .