
Триаж уязвимостей с проверкой происхождения данных. Сопоставляет CVE с локально собранными корпусами (NVD/KEV/EPSS, ExploitDB, nmap script.db) и выдаёт команды верификации, классифицированные по тому, какое воздействие их выполнение оказывает на целевую систему.
Инструмент для триажа уязвимостей. Он берёт то, что уже обнаружило сканирование, определяет, какие CVE предположительно применимы, сообщает, насколько он уверен и почему, и даёт вам команды для самостоятельной проверки.
Он ничего не сканирует и ничего не эксплуатирует.
git clone https://github.com/xGhst0/reconkg && cd reconkg && pip install -e . --break-system-packages && python -m reconkg.selfcheck
Этот последний шаг сообщает, что он может и что не может видеть: был ли найден script.db от nmap, какие корпуса настроены и сколько реалистичных отпечатков действительно дают результат. Запустите его первым. Из коробки ответ — «девять написанных вручную CVE», и selfcheck говорит именно об этом, а не позволяет вам предполагать иное.
Девять встроенных записей — это демонстрационный набор. Для чего-либо реального:
export NVD_API_KEY=... # free: https://nvd.nist.gov/developers/request-an-api-key
python -m reconkg.fetch --dest ~/.reconkg/feeds --all
python -m reconkg.builddb --feeds ~/.reconkg/feeds --out ~/.reconkg/vuln.db
export RECONKG_VULN_DB=~/.reconkg/vuln.db
export RECONKG_EXPLOIT_DB=~/.reconkg/exploits.db
export RECONKG_SCRIPT_DB=/usr/share/nmap/scripts/script.db
Без API-ключа NVD ограничивает до 5 запросов за 30 секунд, и полная
загрузка занимает около четырёх часов вместо двадцати пяти минут. Она
сохраняет контрольные точки, поэтому прерванная загрузка возобновляется. --since загружает только то, что изменилось.
Если переменная корпуса задана, а файл не удаётся открыть, reconkg отказывается запускаться. Тихо обслуживать девять записей, когда вы запросили 300 000, означало бы сканирование, которое ничего не находит и выглядит так, будто оно сработало.
python -m reconkg.app # serves http://127.0.0.1:8765/ui
python -m reconkg.console # REPL
app привязывается только к loopback, без флага для изменения этого. Этот процесс хранит ваши результаты сканирования и отправляет команды, направленные на хосты, которые вы тестируете; SSH-туннель — небольшая цена по сравнению с тем, чтобы это было доступно из остальной сети. --port перемещает его, RECONKG_PORT задаёт значение по умолчанию.
Аутентификация. Каждый маршрут требует Authorization: Bearer <token>, из RECONKG_TOKENS в форме name:role:token (роли: viewer, scanner, operator, admin; токены не менее 16 символов). Если он не задан, app создаёт один только для этого процесса и выводит его при запуске — не записывается на диск, разный при каждом перезапуске.
Браузер не может прикрепить заголовок к обычной навигации, поэтому прямое открытие /ui вернёт 401. Используйте расширение для внедрения заголовков или работайте через API:
export RECONKG_TOKENS="me:admin:$(openssl rand -hex 16)"
curl -H "Authorization: Bearer ${RECONKG_TOKENS##*:}" \
http://127.0.0.1:8765/api/corpus
Интерфейс показывает граф знаний с происхождением по клику, так что вы видите, почему CVE был привязан к хосту, вместо того чтобы доверять оценке, а также реестр, упорядоченный по приоритету триажа с учётом KEV и EPSS.
Каждая предлагаемая команда несёт категорию NSE, описывающую, что её выполнение сделает с целью. Этот словарь принадлежит nmap, а не выдуман здесь.
| Категория | Что делает reconkg |
|---|---|
safe, discovery, version | компонуется, показывается по умолчанию |
intrusive, vuln, unclassified | компонуется, показывается при установке флажка, с предупреждением об авторизации |
exploit, dos, fuzzer, brute | называется, но никогда не компонуется |
Последняя строка — это граница. Если для зацепки существует рабочий эксплойт,
reconkg сообщает вам модуль или шаблон и где его найти. Он не собирает это в
вызов с уже подставленной вашей целью. Предложения Metasploit
останавливаются на show options — шаге, где вы читаете RHOSTS обратно и
подтверждаете, что это хост, против которого вы авторизованы.
Это разница в одно нажатие клавиши на машине, которой вы владеете, и гораздо большая разница в том, чем является инструмент.
Безопасность классифицируется по проверке, а не по инструменту. Это не
придирчивость: текущие CVE-шаблоны nuclei достигают обнаружения путём
эксплуатации — один отправляет полезную нагрузку
subprocess.run('cat /etc/passwd') через RCE в Langflow и сопоставляет с
root:.*:0:0:. Всё, что исходит из принципа «nuclei обнаруживает, Metasploit
эксплуатирует», ошибается на первом же встреченном шаблоне, поэтому nuclei
считается неклассифицированным и находится за опциональным включением.
selfcheck печатает реальный
процент попаданий, а не льстящий.describe() помечает
корпус как устаревший после 30 дней и указывает, какой фид устарел.pip install -r requirements-dev.txt
python -m pytest tests/ -q # 1219 tests
python -m audit.mutation # mutation testing, 12 targets at 100%
python -m audit.scale_bench # corpus scale benchmark
docs/ содержит проектные заметки и обоснование решений, описанных выше. audit/AUDIT.md — это журнал находок: 47 находок за десять раундов состязательного анализа, включая разбор одной формы бага, на которую приходится 13 из них, и честную оценку того, что помогло и что не помогло его предотвратить.
MIT — см. LICENSE.
reconkg не поставляет данные об уязвимостях. Корпуса собираются на вашей машине из фидов, которые вы загружаете сами, — так их лицензии остаются вашей заботой; в частности, индекс ExploitDB распространяется под GPL-2.0-or-later и намеренно никогда здесь не перераспространяется.
Всё, что выдаёт reconkg, — это предложение для человека, который будет это запускать. Запуск проверок intrusive или vuln против системы, которой вы не владеете или на тестирование которой у вас нет письменного разрешения, в большинстве юрисдикций незаконен.