Перейти к основному содержимому
Detect

Detect / Пользователю

Руководство пользователя

Запуск проверки, чтение отчёта, разбор находки, повторный анализ, передача результатов в Accent.

Введение

Detect — статический анализатор исходного кода. Он разбирает код, не запуская программу, и ищет места, где данные из внешнего источника доходят до опасной операции без проверки.

Собственного веб-интерфейса управления у Detect нет. Работа идёт из командной строки, через программный интерфейс по сети или со страницы сервиса, которую поднимает администратор.

Установку, настройку и доступ к серверу модели описывает руководство администратора.

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

  • Проверка проекта. Каталог с кодом, репозиторий по ссылке или архив .zip; отчёт по найденным уязвимостям на русском языке.
  • Прослеживание путей данных между файлами. Источник в одном файле и опасная операция в другом связываются в одну цепочку.
  • Режимы находок. Результаты разделяются по степени определённости, чтобы было проще выбрать порядок проверки.
  • Несколько проектов. Каждый проект проверяется своим запуском, проход по каталогам задаётся циклом.
  • Повторный анализ по изменениям. Поддерживается проверка изменений после предыдущего анализа.
  • Сравнение двух проверок. Видно, что появилось, что исправлено и что сместилось по строкам.
  • Отчёты для смежных систем. SARIF 2.1.0 для системы сборки и отдельный отчёт для сервиса триажа Accent.
  • Маскирование секретов. В некоторых полях отчёта обнаруженные секреты заменяются специальной меткой. Перед передачей результатов проверьте их на наличие конфиденциальной информации.

Подготовка к работе

Команды выполняются из каталога Detect, в окружении Python, которое готовит установщик: source .venv/bin/activate. Если Detect развёрнут сервисом, адрес сервера сообщает администратор. По умолчанию сервис слушает порт 8001.

Проверьте, что сервис готов принимать проверки:

curl -sS "http://127.0.0.1:8001/ready"

Неготовность возвращает код 503 с разбором того, чего не хватает. Страница с описанием интерфейса и формами — http://127.0.0.1:8001/docs.

Для работы с программным интерфейсом v1 используйте токен, выданный администратором. Другие способы доступа разрешены только в контролируемом контуре по правилам организации.

Описание операций

Первая проверка​

Каталог на диске​

python ai_ast.py --code-dir "/srv/projects/checkout" --job-id "checkout-2026-10-07"

Репозиторий по ссылке​

python ai_ast.py --code-dir "https://git.example.com/team/checkout.git" --job-id "checkout-git"

Несколько проектов. Каждый проект проверяется своим запуском. Распакуйте архивы и пройдите по ним циклом:

for dir in /srv/projects/*/; do
name=$(basename "$dir")
python ai_ast.py --code-dir "$dir" --job-id "$name"
done

Рабочий каталог каждого проекта окажется в runtime_runs/<имя>/.

Без языковой модели. Программа выполняет анализ без обращения к серверу модели. Такой режим удобно использовать для сопоставимых повторных проверок.

python ai_ast.py --code-dir "/srv/projects/checkout" --job-id "checkout-fast" --analysis-profile no_llm --no-use-llm

Нужны оба параметра. Один --analysis-profile no_llm модель не выключает.

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

Убедиться, что результат целый. Согласованность файлов результата проверяется так:

python -c "import json;d=json.load(open('runtime_runs/checkout-2026-10-07/verdicts_sast_artifact_consistency.json',encoding='utf-8'));print(d['status'],d['errors'])"

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

Компактная выдача​

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

python ai_ast.py --code-dir "/srv/projects/checkout" --job-id "checkout" --artifact-mode compact

В каталоге results/checkout/ окажется три файла.

ФайлСодержимое
findings.jsonНаходки на русском языке, 16 полей на каждую
verdicts.csvСтрока на каждый файл проекта
results.sarifСтандартный отчёт для систем сборки и сред разработки

Рабочие материалы при этом остаются в runtime_runs/<имя>/, они нужны повторному анализу по изменениям. Если их удалить, следующая проверка будет полной. Там же лежит triage-input.sarif, когда он создавался: в компактную выдачу он не входит.

Каталог выдачи меняется параметром --compact-output-dir.

Чтение отчёта​

Какой файл открыть​

ФайлКому
findings.json или verdicts_sast_ru.jsonЧеловеку: находки на русском языке
verdicts.csvДля таблиц и скриптов
results.sarifДля систем сборки и сред разработки
triage-input.sarifДля Accent, когда решение принимает он
report.sarifИтоговый отчёт для Accent через интерфейс v1
verdicts_sast.jsonПри спорах: полная доказательная база

Режим находки говорит, с чего начинать​

РежимЧто значитЧто делать
confirmedНайдены достаточные признаки уязвимостиПроверить и устранить проблему
manual_reviewПризнаки есть, доказательство неполноеПрочитать код
advisoryСправочное наблюдениеУчесть при доработке

Чем различаются severity, impact, likelihood и confidence​

severity говорит, насколько опасен вид уязвимости вообще. impact и likelihood относятся к конкретной находке в конкретном месте. confidence показывает, насколько анализатор уверен в самой находке. Разбор начинайте с находок, где высок confidence: высокая критичность вида сама по себе не говорит, что находка верна.

Разбор находки​

Шаг 1. Открыть место​

Файл берётся из поля path, строка из start_line. Сверьте с code_snippet.

Шаг 2. Понять утверждение​

short_description называет проблему, cwes даёт точный вид. Описание вида по номеру есть на cwe.mitre.org.

Шаг 3. Проверить, доходят ли данные извне​

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

Шаг 4. Проверить защиту​

Нестандартную защиту, свою функцию проверки или декоратор из внутренней библиотеки анализатор может не узнать.

Шаг 5. Решить​

ВыводДействие
Уязвимость настоящаяИсправить
Защита есть, анализатор её не узналЛожное срабатывание
Место недостижимо извнеЛожное срабатывание
Решить не удаётсяПередать специалисту вместе с verdicts_sast.json

Ложные срабатывания​

Частые причины​

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

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

Повторный анализ по изменениям​

Первая проверка становится базой:

python ai_ast.py --code-dir "/srv/projects/checkout" --job-id "checkout-base"

Следующие пересчитывают только изменённое:

python ai_ast.py --code-dir "/srv/projects/checkout" --job-id "checkout-2" --incremental --incremental-baseline "checkout-base"

Что учитывается: изменения проекта и сведения предыдущей завершённой проверки. Объём повторной работы зависит от характера изменений.

Когда проверка окажется полной, хотя просили повторную​

ПричинаЧто произошло
Обновилась версия анализатораПравила изменились, старые результаты не годятся
Изменились настройки, правила, модель или профиль анализаТо же
Базы нетНеверное имя или путь
База повреждена или неполнаПрошлая проверка завершилась с ошибкой

Анализатор в этих случаях выполняет полную проверку и записывает причину в run_summary.json, поле stage2.incremental.refusal_reason.

Нужен постоянный каталог. Если расположение проекта меняется между проверками, ускорение может быть меньше ожидаемого. Каталог runtime_runs/checkout-base/ и есть база, удалять его не нужно. Компактная выдача его не изменяет.

Сравнение двух проверок​

Сравнение выполняет сервис, и обе проверки должны быть запущены через него:

curl -sS "http://127.0.0.1:8001/sessions/BASE_ID/diff/NEW_ID"

Ответ показывает, какие находки появились, какие исправлены, какие остались и какие сместились по строкам.

Список файлов, изменившихся между версиями, возвращает GET /v1/analyses/{id}/versions, когда новая версия отправлена с номером прошлого анализа.

Передача результатов в Accent​

Какой файл передавать​

Как работаете с AccentФайлГде взять
Решение по находкам принимает Accenttriage-input.sarifКомандная строка или интерфейс v1
Detect проверяет находки своей модельюreport.sarif, при необходимости ответ /keyИнтерфейс v1, POST /v1/analyses

Файл results.sarif для Accent не предназначен. Это отчёт для систем сборки, и по умолчанию в нём только подтверждённые находки.

Как получить triage-input.sarif для одной проверки​

python ai_ast.py --code-dir "/srv/projects/checkout" --job-id "checkout-triage" --analysis-profile no_llm --no-use-llm --triage-sarif

Файл окажется в runtime_runs/checkout-triage/triage-input.sarif. Нужны --analysis-profile no_llm и --no-use-llm: без них проверка пройдёт целиком и завершится ошибкой triage_sarif_requires_no_llm_profile.

Для нескольких проектов​

for dir in /srv/projects/*/; do
name=$(basename "$dir")
python ai_ast.py --code-dir "$dir" --job-id "$name-triage" \
--analysis-profile no_llm --no-use-llm --triage-sarif
done

Отчёт каждого проекта окажется в runtime_runs/<имя>-triage/triage-input.sarif.

Через интерфейс v1. Нужен токен.

curl -sS -X POST "http://127.0.0.1:8001/v1/triage/analyses" -H "Authorization: Bearer $DETECT_API_TOKEN" -H "Content-Type: application/zip" --data-binary @project.zip
curl -sS "http://127.0.0.1:8001/v1/analyses/$ID" -H "Authorization: Bearer $DETECT_API_TOKEN"
curl -sS "http://127.0.0.1:8001/v1/analyses/$ID/triage-input.sarif" -H "Authorization: Bearer $DETECT_API_TOKEN" -o triage-input.sarif

Указанные способы предназначены для подготовки отчёта для Accent в режиме без языковой модели.

Что внутри triage-input.sarif. В файл включаются находки, предназначенные для дальнейшего рассмотрения Accent. Состав определяется форматом обмена используемой версии.

Поле находкиЧто означает
ruleIdИдентификатор применённого правила
properties.cwesНомер вида уязвимости
properties.severityКритичность
properties.findingModeРежим находки по правилам Detect, без участия модели
properties.confidence, impact, likelihoodУверенность, влияние, вероятность
properties.finding_keyУстойчивый ключ находки
properties.verified_by_detectВсегда false: модель Detect находку не проверяла
properties.pre_llm_candidateВсегда true: кандидат до проверки моделью

В файл могут входить фрагменты исходного кода и дополнительные сведения о находках. Перед отправкой файла за пределы контролируемого контура проверьте его содержимое и разрешённый канал передачи.

Этот файл предназначен для обработки находок сервисом Accent. Поле findingMode может использоваться как служебный признак типа результата.

Итоговый отчёт через интерфейс v1. Когда Detect работает со своей моделью, Accent получает проект через POST /v1/analyses и запрашивает GET /v1/analyses/{id}/report.sarif. У каждой находки там есть detect_verdict со значением confirmed или needs_review, признак verified_by_detect, ключ finding_key, объяснение и рекомендация на русском языке. Поле verified_by_detect показывает, выполнялась ли дополнительная проверка на стороне Detect.

Те же три поля одним списком возвращает GET /v1/analyses/{id}/key. Фактический профиль анализа и версии показывает GET /v1/analyses/{id}/versions. Если сервер модели был недоступен, там будет no_llm.

Проверка перед передачей​

python -c "import json;s=json.load(open('runtime_runs/checkout-triage/triage-input.sarif',encoding='utf-8'));r=s['runs'][0];res=r.get('results',[]);p=r['properties'];print('findings:',len(res),'| preLlm:',p.get('preLlm'),'| llmStage3:',p.get('llmStage3'),'| all unverified:',all(not x['properties'].get('verified_by_detect') for x in res))"

Ожидаются preLlm: True, llmStage3: False и all unverified: True.

Работа через страницу сервиса​

Страница http://127.0.0.1:8001/docs содержит описание интерфейса и формы. В карточке «Detect v1 — загрузка ZIP через проводник» выберите архив проекта, введите токен, при повторной проверке укажите номер прошлого анализа в поле base_analysis_id и отправьте архив. Кнопки запрашивают статус, SARIF, служебные файлы, ключ и версии.

Кнопка отправляет архив на итоговый анализ через POST /v1/analyses. Файл triage-input.sarif так не получить, для него нужны команды из раздела о передаче результатов в Accent.

Запуск проверки по сети. Для интеграции с внешними системами используйте интерфейс v1 и токен доступа. Служебные способы запуска предназначены только для закрытой административной сети и требуют согласованных средств контроля доступа.

Работа с проверками​

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

Повторная проверка может использовать предыдущий завершённый анализ. Если исходная проверка не завершена, сервис может вернуть ошибку 409; повторите действие после завершения исходной проверки либо задайте полную проверку по инструкции администратора.

Встраивание в сборку​

python ai_ast.py --code-dir "." --job-id "$BUILD_ID" --artifact-mode compact

Опубликуйте results/<имя>/results.sarif, и GitHub, GitLab и Azure DevOps покажут находки прямо в запросе на слияние. По умолчанию в SARIF попадают только подтверждённые находки; параметр --sarif-include-nonconfirmed добавляет остальные.

Если сборка передаёт результаты в Accent, публикуйте для него triage-input.sarif.

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

Раз в неделю имеет смысл запускать полную проверку. Повторные хороши для скорости, полная служит контрольной точкой.

Аварийные ситуации​

  1. Команда завершилась, а verdicts_sast_artifact_consistency.json отсутствует. Проверка не дошла до конца. Причину смотрите в run_summary.json, поля stage2.status и stage3.status.
  2. Повторный анализ выполнился полной проверкой. Отпечаток настроек изменился либо база повреждена. Причина записана в run_summary.json, поле stage2.incremental.refusal_reason.
  3. 409 triage_input_requires_pre_llm_analysis. Проект отправлен в POST /v1/analyses. Для отчёта до проверки моделью нужен POST /v1/triage/analyses.
  4. 409 на повторе проверки. Прошлая проверка не завершилась, базы у неё нет. Передайте в теле запроса {"incremental": false}.
  5. 401 на любом запросе к /v1. Токен не передан или неверен. Получите токен у администратора.
  6. Сервис отвечает 503 на GET /ready. Сервис не готов принимать проверки, и в ответе перечислено, чего не хватает. Обратитесь к администратору.

Памятка

ЗадачаКоманда
Проверить проектpython ai_ast.py --code-dir "/srv/projects/checkout" --job-id "имя"
Только три файла результатаДобавить --artifact-mode compact
Повторный анализ по изменениямДобавить --incremental --incremental-baseline "прошлое_имя"
Повторяемый результат с модельюДобавить --workers 1
Без языковой моделиДобавить --analysis-profile no_llm --no-use-llm
SARIF для AccentДобавить --analysis-profile no_llm --no-use-llm --triage-sarif
Несколько проектовЦикл по каталогам с вызовом ai_ast.py на каждый
Сравнить две проверкиGET /sessions/{база}/diff/{новая}
ВопросГде ответ
Что нашлиfindings.json или verdicts_sast_ru.json
Какие файлы затронутыverdicts.csv
Почему система решила именно такverdicts_sast.json
Как прошла проверкаrun_summary.json
Почему повторный анализ стал полной проверкойrun_summary.json, поле stage2.incremental.refusal_reason
Сходятся ли файлы между собойverdicts_sast_artifact_consistency.json
Что передать в Accenttriage-input.sarif или report.sarif
С моделью ли выполнен анализ/v1/analyses/{id}/versions, поле analysis_profile

Поля каждого файла разбирает руководство по файлам результатов.

Часто задаваемые вопросы (FAQ)

Техническая поддержка

Если возникли вопросы по работе Detect, обратитесь к администратору системы или в службу поддержки: support@cybear.ru. Приложите run_summary.json проблемной проверки, вывод GET /v1/analyses/{id}/versions и её номер.

Поддержка Cybear

Не нашли ответ в документе?

Техподдержка: support@cybear.ru · +7 (495) 790-66-88, добавочный 3.

Написать в поддержку