Открытый пайплайн для обнаружения уязвимостей на базе LLM: использует состязательную верификацию и динамическое тестирование, чтобы находить и подтверждать реальные проблемы безопасности в коде.
Инструмент для обнаружения уязвимостей с использованием AI-ассистирования, включает возможности разработки эксплойтов и составления отчётов.
Автономная ИИ-платформа пентеста с LLM-разведкой, анализом уязвимостей, цепочками атак и автоматическим пост-эксплуатационным перебором
Бесплатный фреймворк для обратной разработки от АНБ США. Поддерживает дизассемблирование, декомпиляцию в псевдо-C, анализ графа вызовов, …
Автономные AI-агенты для пентестинга, которые динамически запускают код, находят уязвимости и подтверждают их работающими proof-of-concept эксплойтами, …
# Требования: Go 1.25+ и Anthropic API-ключ с доступом к Claude Opus 4.6 git clone https://github.com/knostic/OpenAnt.git cd OpenAnt/apps/openant-cli/ make build ln -sf "$(pwd)/apps/openant-cli/bin/openant" /usr/local/bin/openant # Пример использования openant setup llm openant scan /path/to/repo --llm-config my-llm openant serve

OpenAnt от Knostic — это продукт для поиска уязвимостей на основе моделей большого языка (LLM) с открытым исходным кодом, который помогает специалистам по безопасности проактивно находить подтверждённые уязвимости, минимизируя ложноположительные и ложноотрицательные срабатывания. Этап 1: обнаружение. Этап 2: атака. То, что выживает, — реально.
Мы гордимся этим продуктом и находимся в процессе раскрытия найденных уязвимостей, но помните, что изначально это был исследовательский проект, и некоторые его функции всё ещё находятся в бета-версии. Мы приветствуем вклад сообщества, чтобы сделать его лучше.
Учитывая всплеск уязвимостей, обнаруженных с помощью ИИ, мы надеемся, что OpenAnt станет инструментом, помогающим поддерживающим открытый исходный код опережать злоумышленников: они могут использовать его самостоятельно или отправить свой репозиторий на сканирование бесплатно.
Кроме того, так как Knostic сосредоточен на защите агентов и помощников по программированию, а не на исследованиях уязвимостей или безопасности приложений, и мы любим открытый исходный код, мы решили выпустить OpenAnt под лицензией Apache 2.0. К тому же, вы, возможно, слышали о 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), выбираете поставщика для каждого этапа конвейера (любой из поставленных адаптеров ниже), один раз вводите его API-ключ для каждого поставщика (Bedrock использует цепочку учётных данных AWS — оставьте ключ пустым), и мастер проверяет каждую уникальную пару поставщик+модель запросом из 1 токена перед записью в ~/.config/openant/config.json. Запустите сканирование с этой конфигурацией, используя --llm-config:
openant scan /path/to/repo --llm-config my-llm
Значения по умолчанию в мастере отражают рекомендации проекта для каждого этапа (более мощные модели для обнаружения/проверки/анализа достижимости; более лёгкие модели для контекста, отчётов и генерации тестов) — вы можете изменить любой ответ на свой вкус.
| Тип поставщика | API-ключ от | Примечания |
|---|---|---|
anthropic |
console.anthropic.com | Эталонный адаптер. НЕ входит в подписки Claude Pro / Max — отдельный биллинг. |
openai |
platform.openai.com | НЕ входит в подписки ChatGPT / Codex — отдельный биллинг. |
google |
aistudio.google.com | НЕ входит в Gemini Advanced — отдельный биллинг. |
bedrock |
— (цепочка учётных данных AWS) | Claude на AWS Bedrock. Нет api_key: учётные данные берутся из переменных окружения AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY или профиля ~/.aws, регион — из AWS_REGION. Идентификаторы моделей — это профили вывода (us.anthropic.claude-sonnet-4-6, global.anthropic.claude-haiku-4-5-20251001-v1:0, ...) — включите их в разделе "Доступ к моделям" в консоли Bedrock и перечислите их с помощью aws bedrock list-inference-profiles. Предлагается в openant setup llm (оставьте API-ключ пустым — цепочка учётных данных AWS, проверка пропускается) — полное руководство: utilities/llm/providers/BEDROCK.md. |
openrouter |
openrouter.ai | Шлюз ко многим поставщикам с одним ключом и одним предоплаченным балансом (также считывает OPENROUTER_API_KEY). Идентификаторы моделей — это slugи vendor/model (anthropic/claude-sonnet-4.6, openai/gpt-4o-mini, ...) — просмотреть их можно на openrouter.ai/models. Предлагается в openant setup llm (оставьте базовый URL пустым для значения по умолчанию OpenRouter) — полное руководство: utilities/llm/providers/OPENROUTER.md. |
Все четыре поддерживают вызов инструментов, поэтому любой из них может управлять фазами 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 должна перечислять все семь фаз конвейера:
{
"$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 (vLLM, Bedrock, внутренние шлюзы); OpenRouter имеет собственный тип провайдера первого класса openrouter. Конфигурация 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+. CLI на Go выбирает интерпретатор в следующем порядке:
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/<организация>/<репозиторий>/, содержащая 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 scan — и каждое глагольное имя шага (analyze, verify, …) при пошаговом выполнении —
завершается с кодом 1, если найдены уязвимости — это означает, что инструмент работает корректно, а не завершился с ошибкой. Контракт:
| Код завершения | Значение |
|---|---|
| 0 | Чистое сканирование — уязвимости не найдены |
| 1 | Найдены уязвимости (успешное выполнение) |
| 2 | Ошибка — само сканирование завершилось сбоем (проверьте errors в JSON-обёртке на stdout) |
Общие шаги CI и супервизоры процессов воспринимают любой ненулевой код завершения как ошибку, что приводит к неверной классификации успешного выполнения с результатами. Ориентируйтесь на контракт, а не на разбор stdout:
rc=0
openant scan --verify /path/to/repo || rc=$? # || captures: set -e safe
if [ "$rc" -gt 1 ]; then
echo "scan FAILED (exit $rc)" >&2; exit "$rc"
fi
# rc 0 = clean, rc 1 = findings found — both are successful runs
Конструкция || rc=$? важна: в CI по умолчанию используется set -e (GitHub Actions run:, Jenkins sh),
где простой вызов openant scan, завершающийся с кодом 1, прервёт выполнение скрипта до строки захвата —
то есть воспроизведёт ту самую ошибку классификации, ради предотвращения которой существует этот раздел.
openant serve запускает локальный веб-интерфейс для того же конвейера сканирования: отправьте
URL репозитория или локальный путь, наблюдайте за потоковым выводом логов сканирования и читайте
HTML-отчёт, сводку в формате markdown и раскрытия — всё из браузера.
openant serve # http://127.0.0.1:8080, opens your browser
openant serve --addr 127.0.0.1:9000 # choose a port
Сервер привязывается только к loopback (он отклоняет любые не-loopback --addr) и предназначен для локального использования одним пользователем. Результаты сканирования сохраняются в ~/.openant/webui/ между перезапусками. Анализ по-прежнему отправляет исходный код вашему настроенному поставщику LLM, как и в CLI.
Для репозиториев, где полное сканирование слишком медленное или затратное, OpenAnt может ограничить конвейер только теми единицами, тела которых пересекаются с фрагментами git diff:
openant scan --diff-base origin/main # diff vs a ref
openant scan --pr 123 # diff vs the base of a GitHub PR
openant scan --staged # diff vs HEAD using the staged index
openant scan --incremental # diff vs the last successful scan
Флаг --staged считывает git diff --cached и предназначен для хуков pre-commit или локальных запусков типа "просканировать то, что я собираюсь закоммитить". Базой является HEAD, а вершиной — индекс, поэтому сканируются файлы, добавленные через git add, а изменения только в рабочей области — нет.
Более короткая форма openant diff принимает те же флаги, например:
openant diff --staged --skip-dynamic-test
Конвейер работает с одним проектом за раз. Запуск openant init устанавливает newly инициализированный проект как активный, поэтому все последующие команды по умолчанию направлены на него.
Если вы работаете с несколькими проектами, у вас есть два варианта:
# 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 # shows all projects, marks active
openant project show # details of active project
openant project switch <org/repo> # switch active project
Список задач без строгого порядка:
openant setup llm) в соответствии с руководством для участников. Упростите доступ к локальному/внутреннему выводу.PR welcome по любому из этих пунктов — сначала откройте issue, если объем работы нетривиален, чтобы мы могли согласовать детали, прежде чем вы начнете работать.
Этот проект лицензирован по Apache 2. Подробности см. в файле LICENSE.
Этот проект предназначен только для оборонительных и исследовательских целей. OpenAnt все еще находится на стадии исследований, используйте его осторожно и на свой страх и риск. Knostic, OpenAnt и связанные разработчики, исследователи и поддерживающие лица не несут никакой ответственности за любое неправильное использование, ущерб или последствия, возникшие в результате использования этого инструмента.
Сканируйте только тот код, которым вы владеете или на тестирование которого у вас есть явное разрешение. Если вы обнаружили уязвимость в чужом проекте законным путем, пожалуйста, следуйте практике координированного раскрытия уязвимостей и сообщите об этом поддерживающим лицам, прежде чем делать это публичным.