
recog v3.1.30
Распознавание образов для хостов, сервисов и контента
Recog: A Recognition Framework
Recog — это фреймворк для идентификации продуктов, сервисов, операционных систем и оборудования путём сопоставления отпечатков (fingerprint) с данными, полученными от различных сетевых зондов. Recog упрощает извлечение полезной информации из баннеров веб-серверов, полей описания системы SNMP и многого другого.
Recog является открытым программным обеспечением; дополнительную информацию см. в файле LICENSE.
Table of Contents
- Repository split
- Recog library language implementations
- Installation
- Maturity
- Fingerprints
- Testing matches
- Contributing
Repository split
31 марта 2022 года содержимое Recog — XML-файлы отпечатков и утилиты — было отделено от реализации библиотеки фреймворка Recog. Исходный репозиторий Recog теперь содержит содержимое Recog, а репозиторий Recog-Ruby содержит реализацию на языке Ruby. Содержимое Recog включено в Recog-Ruby как git-подмодуль и находится в каталоге recog. Все версии гема Recog после разделения, равные или больше 3.0.0, будут: 1) содержать каталог XML-отпечатков внутри каталога recog и 2) включать только инструмент recog_match, поскольку остальные инструменты ориентированы на управление отпечатками.
Default branch rename
Вместе с разделением репозитория ветка по умолчанию была переименована с master на main. Все клоны, созданные до этих изменений, должны быть вручную обновлены в локальной среде. Если у вас есть форк, перейдите в его настройки и следуйте инструкциям по переименованию ветки, чтобы изменить ветку по умолчанию на main.
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
При желании выполните следующую команду, чтобы удалить отслеживающие ссылки на старое имя ветки.
# сухой прогон для подтверждения устаревших ссылок, которые будут удалены перед выполнением
git remote prune origin --dry-run
git remote prune origin
Если вы ранее использовали вышестоящую отслеживающую ветку upstream-master, выполните следующие команды, чтобы удалить старую ветку и создать новую вышестоящую отслеживающую ветку.
git branch -d upstream-master
git checkout -b upstream-main --track upstream/main
При желании выполните следующую команду, чтобы удалить отслеживающие ссылки на старое имя вышестоящей ветки.
# сухой прогон для подтверждения устаревших ссылок, которые будут удалены перед выполнением
git remote prune upstream --dry-run
git remote prune upstream
Recog library language implementations
- Ruby: rapid7/recog-ruby
- Java: rapid7/recog-java
- Go: runZeroInc/recog-go
Feature parity
| Feature ✨ | rapid7/recog-ruby | rapid7/recog-java | runZeroInc/recog-go |
|---|---|---|---|
| Fingerprint verification CLI tool | ✅ | ✅ | ✅ |
| Fingerprint match CLI tool | ✅ | ✅ | |
| Supports base64 encoded examples | ✅ | ✅ | ✅ |
| Supports filesystem-based external examples | ✅ | ✅ | ✅ |
| Fingerprint match CPE param interpolation | ✅ | ✅ | ✅ |
Installation
Recog состоит как из XML-файлов отпечатков, так и из набора кода, в основном на Ruby, который упрощает разработку, тестирование и использование содержащихся отпечатков. Для использования включённого Ruby-кода требуется свежая версия Ruby (2.31+), а также Rubygems и гем bundler. После установки этих зависимостей используйте следующие команды, чтобы получить последнюю версию исходного кода и установить все дополнительные зависимости.
$ git clone [email protected]:rapid7/recog.git
$ cd recog
$ bundle install
Maturity
Обратите внимание: хотя сами XML-отпечатки достаточно стабильны и хорошо протестированы, кодовая база Ruby всё ещё довольно нова и может быстро меняться. Пожалуйста, свяжитесь с нами (research[at]rapid7.com), прежде чем использовать код Recog в каких-либо производственных проектах.
Fingerprints
Отпечатки в Recog хранятся в XML-файлах, каждый из которых предназначен для сопоставления с определённой строкой ответа протокола или полем. Например, файл ssh_banners.xml может определить ОС, производителя, а иногда и аппаратный продукт, сопоставляя начальную строку баннера демона SSH.
Файл отпечатков представляет собой XML-документ следующего вида:
<fingerprints matches="ssh.banner">
<fingerprint pattern="^RomSShell_([\d\.]+)$">
<description>Allegro RomSShell SSH</description>
<example service.version="4.62">RomSShell_4.62</example>
<param pos="0" name="service.vendor" value="Allegro"/>
<param pos="0" name="service.product" value="RomSShell"/>
<param pos="1" name="service.version"/>
</fingerprint>
</fingerprints>
Первая строка всегда должна содержать объявление версии XML. Первым элементом всегда должен быть блок fingerprints с атрибутом matches, указывающим, какие данные должен сопоставлять этот файл отпечатков. Атрибут matches обычно имеет вид protocol.field.
Внутри элемента fingerprints должен быть один или несколько элементов fingerprint. Каждый fingerprint должен содержать атрибут pattern, в котором хранится регулярное выражение для сопоставления с данными. Необязательный атрибут flags может указывать, как интерпретировать регулярное выражение. См. документацию Recog по FLAG_MAP для получения дополнительной информации.
Внутри отпечатка элемент description должен содержать читаемую человеком строку, описывающую этот отпечаток.
Должен присутствовать хотя бы один элемент example, однако предпочтительнее несколько. Эти элементы используются как часть тестового покрытия в rspec, которое проверяет, что предоставленные данные соответствуют указанному регулярному выражению. Кроме того, если отпечаток использует элементы param для извлечения значений полей из данных (описано далее), вы можете добавить эти ожидаемые извлечения в качестве атрибутов элементов example. В приведённом выше примере:
<example service.version="4.62">RomSShell_4.62</example>