
OpenAnt от Knostic — ведущий продукт с открытым исходным кодом для обнаружения уязвимостей на основе LLM, помогающий защитникам proactively находить подтверждённые дефекты безопасности, минимизируя как ложноположительные, так и ложноотрицательные срабатывания. Этап 1 обнаруживает. Этап 2 атакует. Что выживает — реально.
OpenAnt от Knostic — это продукт с открытым исходным кодом для обнаружения уязвимостей на основе LLM, который помогает защитникам упреждающе находить подтверждённые уязвимости, минимизируя при этом как ложноположительные, так и ложноотрицательные результаты обнаружения. Этап 1 обнаруживает. Этап 2 атакует. То, что выживает, — реально.
Мы весьма гордимся этим продуктом и в настоящее время проходим процесс раскрытия уязвимостей по его находкам, но имейте в виду: всё начиналось как исследовательский проект, и некоторые его функции всё ещё на стадии беты. Мы приветствуем вклад сообщества, чтобы сделать его лучше.
Учитывая взрывной рост числа уязвимостей, обнаруживаемых с помощью ИИ, мы надеемся, что OpenAnt станет инструментом, который поможет мейнтейнерам open source-проектов опережать атакующих: они смогут либо использовать его самостоятельно, либо бесплатно отправлять свой репозиторий на сканирование.
Кроме того, поскольку фокус Knostic — защита агентов и ассистентов программирования, а не исследование уязвимостей или безопасность приложений, и нам нравится open source, мы решили выпустить OpenAnt под лицензией Apache 2. Вдобавок вы, возможно, слышали об Aardvark от OpenAI (теперь Codex Security) и Claude Code Security от Anthropic, и у нас нет ни малейшего намерения конкурировать с ними.
Технические детали, ограничения и стоимость токенов — в этом сообщении в блоге: https://knostic.ai/blog/openant
Чтобы отправить репозиторий на сканирование: https://knostic.ai/blog/oss-scan
Исследование и идея: Nahum Korda.
Продуктизация: Alex Raihelgaus, Daniel Geyshis.
Благодарности: Michal Kamensky, Imri Goldberg, Gadi Evron, Daniel Cuthbert, Josh Grossman и Avi Douglen.
Если вам нравится наша работа, посмотрите, что мы делаем в Knostic, чтобы защищать ваших агентов и ассистентов программирования, не позволять им удалять ваш жёсткий диск и код, а также контролировать связанные риски цепочки поставок, такие как MCP-серверы, расширения и навыки.
Соберите CLI-бинарник (требуется Go 1.25+):
cd apps/openant-cli && make build
Эта команда компилирует исходный код Go и помещает бинарник в apps/openant-cli/bin/openant.
Создайте симлинк в PATH, чтобы запускать openant откуда угодно:
ln -sf "$(pwd)/apps/openant-cli/bin/openant" /usr/local/bin/openant
Примечание: выполняйте эту команду из корня репозитория, чтобы $(pwd) разрешался в правильный абсолютный путь.
OpenAnt направляет каждую фазу конвейера через настраиваемую пару (провайдер, модель). Самый быстрый путь — интерактивный мастер:
openant setup llm
Вы задаёте имя конфигурации (например, my-llm), выбираете провайдера для каждой фазы конвейера (anthropic, openai или google), один раз вводите API-ключ для каждого провайдера, и мастер проверяет каждую уникальную пару провайдер+модель запросом на 1 токен перед записью ~/.config/openant/config.json. Запустите сканирование с этой конфигурацией через --llm-config:
openant scan /path/to/repo --llm-config my-llm
Значения по умолчанию мастера отражают рекомендации проекта для каждой фазы (более сильные модели рассуждений для обнаружения / верификации / проверки достижимости; более лёгкие модели для контекста, отчёта и генерации тестов) — вы можете изменить любой ответ по своему вкусу.
Все три поддерживают вызов инструментов (tool calling), поэтому любой из них может управлять фазами enhance и verify, использующими агентный цикл вызова инструментов.
Если вам нужны текущие значения по умолчанию Claude для каждой фазы и ничего больше, пропустите мастер:
openant set-api-key sk-ant-...
openant scan /path/to/repo
При этом используется встроенная конфигурация openant-default (скомпилирована в бинарник, config.json не нужен) — Claude Opus 4.6 для фаз обнаружения, Sonnet 4 для остальных.
Мастер записывает ~/.config/openant/config.json за вас, но вы можете редактировать его и напрямую. Каждая llm-config должна перечислять все семь фаз конвейера:
{
"$schema_version": 2,
"default_llm": "my-llm",
"llm_providers": {
"anthropic": {"type": "anthropic", "api_key": "sk-ant-..."},
"openai": {"type": "openai", "api_key": "sk-proj-..."},
"google": {"type": "google", "api_key": "AIza..."}
},
"llm_configs": {
"my-llm": {
"app_context": {"provider": "openai", "model": "gpt-4o-mini"},
"llm_reach": {"provider": "anthropic", "model": "claude-opus-4-6"},
"enhance": {"provider": "openai", "model": "gpt-4o-mini"},
"analyze": {"provider": "anthropic", "model": "claude-opus-4-6"},
"verify": {"provider": "anthropic", "model": "claude-opus-4-6"},
"dynamic_test": {"provider": "google", "model": "gemini-2.0-flash"},
"report": {"provider": "google", "model": "gemini-2.0-flash"}
}
}
}
Провайдеры принимают собственный base_url для прокси, совместимых с OpenAI / Anthropic (OpenRouter, vLLM, Bedrock, внутренние шлюзы). Конфигурация openant-default (Claude на всех фазах) встроена и всегда доступна независимо от содержимого файла.
Слой адаптеров OpenAnt — это небольшой Python-рецепт: один Python-файл, реализующий протокол LLMAdapter, одна фабрика для каркаса контрактного тестирования плюс запись в реестре — и этого уже достаточно, чтобы запустить адаптер из конфигурации, заданной вручную. Чтобы адаптер также предлагался мастером openant setup llm и проходил его проверку перед сохранением, добавьте несколько точек интеграции на Go в apps/openant-cli/cmd/setup.go (список поддерживаемых провайдеров, case для проверки, карты моделей по умолчанию для каждой фазы), а также Go-функцию проверки. После подключения адаптера 12 контрактных тестов будут запускаться против него автоматически. Полный рецепт см. в docs/features/llm-providers/HOW_TO_ADD_AN_ADAPTER.md.
Код OpenAnt для разбора, улучшения, анализа и формирования отчётов написан на Python 3.11+. Go CLI выбирает интерпретатор в таком порядке:
OPENANT_PYTHON (задайте её, чтобы закрепить конкретный интерпретатор — например, OPENANT_PYTHON=python3.11).~/.openant/venv/ (создаётся автоматически при первом использовании). CLI использует bin/python на Linux/macOS и Scripts\python.exe на Windows.python3 / python в PATH.Если ни один вариант не даёт Python 3.11+, команда завершается с ошибкой и ссылкой на python.org. Чтобы пересобрать устаревшее управляемое виртуальное окружение (например, после обновления Python), удалите ~/.openant/venv/ и выполните заново любую команду openant.
OpenAnt создаёт два каталога:
~/.config/openant/ — конфигурация CLI (config.json). Хранит ваш API-ключ, активный проект и настройки. Права доступа к файлу ограничены значением 0600.~/.openant/ — данные проектов. Для каждого инициализированного проекта создаётся рабочая область в ~/.openant/projects/<org>/<repo>/, содержащая project.json и каталог scans/ с результатами для каждого коммита.Укажите OpenAnt на репозиторий. Флаг -l (язык) обязателен — используйте go или python.
# Remote — clones the repo
openant init <repo-url> -l go
# Remote — pin to a specific commit
openant init <repo-url> -l go --commit <sha>
# Local — references the directory in-place
openant init <path-to-repo> -l go --name <org/repo>
Это создаёт рабочую область проекта и назначает его активным проектом. Все последующие команды автоматически работают с активным проектом — аргументы с путями не нужны.
Каждый шаг берёт выходные данные предыдущего из каталога сканирования проекта:
openant parse
openant enhance
openant analyze
openant verify
openant build-output
openant report -f summary
Или запустите весь конвейер одной командой:
openant scan --verify
Конвейер работает с одним проектом за раз. Выполнение openant init делает вновь инициализированный проект активным, поэтому все последующие команды по умолчанию нацелены на него.
Если вы работаете с несколькими проектами, у вас есть два варианта:
# Option 1: switch the active project
openant project switch org/repo
openant parse
# Option 2: target a project directly with -p
openant parse -p org/repo
openant project list # показывает все проекты, помечает активный
openant project show # сведения об активном проекте
openant project switch <org/repo> # переключение активного проекта
Вот что в списке, в произвольном порядке:
openant setup llm) в соответствии с руководством для контрибьюторов. Это снижает барьер для локального / on-prem инференса.PR приветствуются по любому из этих пунктов — если объём работ нетривиален, сначала откройте issue, чтобы мы могли согласовать всё до начала разработки.
Этот проект лицензирован под Apache 2. Подробности см. в файле LICENSE.
Этот проект предназначен исключительно для оборонительных и исследовательских целей. OpenAnt всё ещё находится на исследовательской стадии; используйте его осторожно и на свой страх и риск. Knostic, OpenAnt и связанные с ними разработчики, исследователи и мейнтейнеры не несут никакой ответственности за любое неправомерное использование, ущерб или последствия, возникающие в результате использования этого инструмента.
Сканируйте только тот код, который принадлежит вам или на тестирование которого у вас есть явное разрешение. Если вы обнаружили уязвимость в чужом проекте законными средствами, пожалуйста, следуйте практике координированного раскрытия уязвимостей и сообщите о ней мейнтейнерам до публичного раскрытия.
| Тип провайдера | API-ключ от | Примечания |
|---|
anthropic | console.anthropic.com | Эталонный адаптер. НЕ входит в подписки Claude Pro / Max — оплата отдельно. |
openai | platform.openai.com | НЕ входит в подписки ChatGPT / Codex — оплата отдельно. |
google | aistudio.google.com | НЕ входит в Gemini Advanced — оплата отдельно. |