GitHub усилила secret scanning контекстным ИИ

GitHub представила контекстный классификатор секретов для системы secret scanning, который повышает качество обнаружения утечек и ускоряет проверки. По данным компании, взвешенная доля принятых срабатываний выросла на 11,5%, а медианное время пост-пуш сканирования сократилось на 86%.

Secret scanning в GitHub анализирует содержимое репозиториев, коммиты, pull request и другие поверхности. Цель — находить утёкшие ключи, токены и другие учётные данные до того, как ими смогут воспользоваться злоумышленники. При этом слишком частые ложные срабатывания отвлекают разработчиков, а пропуски делают защиту бессмысленной.

Особенно сложной задачей являются так называемые generic secrets — строки, которые по форме напоминают ключи или токены, но могут быть служебными идентификаторами, хешами, примерами в документации или фикстурами в тестах. Это так называемые hard negatives: строки, формально подходящие под шаблон секретов, но непригодные как реальные креденшелы.

Ранее GitHub применял конвейер на базе крупной языковой модели (LLM), однако новая архитектура сделала возможной поддержку generic secret detection и в push protection. Теперь разработчик может получить результат проверки до завершения push, а не только после коммита.

Новая система построена как двухэтапный конвейер:

  • регулярные выражения (regex) выделяют все строки, похожие на креденшелы, создавая широкий набор кандидатов;
  • каждый кандидат передаётся в дообученный классификатор на базе ModernBERT, который анализирует значение вместе с путём файла, типом секрета, именами переменных и окружающим кодом или текстом.

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

GitHub подчёркивает, что модель не заменяет детерминированное сканирование, а дополняет его. Regex по‑прежнему используется для быстрого и широкого охвата кандидатов, а ModernBERT задействуется там, где машинное обучение даёт наибольший эффект — при различении «похоже на секрет» и «скорее всего, реальный секрет».

ModernBERT выбран из-за компактности и эффективности. Он подходит для классификации коротких фрагментов кода и текста с высоким потоком запросов и низкой задержкой. Крупная универсальная LLM на этом этапе конвейера была бы избыточной: задача сводится к узкому бинарному решению с измеряемой границей принятия решения и жёсткими требованиями по скорости.

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

Обучение было сосредоточено на трёх категориях: реальные секреты, реалистичные ложные срабатывания и hard negatives, которые часто вводят в заблуждение чисто правил-based подход. В каждую запись входили кандидат, путь файла, тип секрета и ограниченный объём контекста вокруг него.

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

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

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

Обученная модель экспортируется в формат ONNX с 8-битной квантизацией. Это позволяет выполнять инференс быстро и с низкими затратами ресурсов. Новый конвейер оценивался в продакшене в два этапа: сначала против действующей системы на одном и том же публичном трафике, затем в A/B‑эксперименте с клиентами.

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

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

Команда делает вывод, что гибридный подход эффективнее: регулярные выражения обеспечивают скорость и прозрачность, а ModernBERT даёт контекстное понимание и уменьшение числа ложных срабатываний. Небольшой дообученный классификатор может оказаться практичнее крупной модели, если задача узкая, метрики качества чётко определены, а эффективность сервинга критична.

GitHub рассматривает эту работу как шаг к более точному, масштабируемому и удобному секрет-сканированию. Компания благодарит команды инженеров, специалистов по данным и продуктовых менеджеров GitHub и Microsoft, которые участвовали в создании датасетов, системы оценки, инфраструктуры развёртывания и плана по выводу нового сканера в продакшен.

Источник: технический блог GitHub.

Читать новости ИИ и технологий в Telegram.


Оцените статью
Gimal-Ai