Назад к обновлениям
New releaseAug 10, 2026

recog v3.1.30

Распознавание образов для хостов, сервисов и контента

Поделиться

Recog: A Recognition Framework

CI Workflow Verify Workflow

Recog — это фреймворк для идентификации продуктов, сервисов, операционных систем и оборудования путём сопоставления отпечатков (fingerprint) с данными, полученными от различных сетевых зондов. Recog упрощает извлечение полезной информации из баннеров веб-серверов, полей описания системы SNMP и многого другого.

Recog является открытым программным обеспечением; дополнительную информацию см. в файле LICENSE.

Table of Contents

  1. Repository split
    1. Default branch rename
  2. Recog library language implementations
    1. Feature parity
  3. Installation
  4. Maturity
  5. Fingerprints
  6. Testing matches
    1. ftp_banners
    2. http_cookies
    3. http_servers
    4. favicons
    5. http_wwwauth
    6. tls_jarm
  7. 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, поскольку остальные инструменты ориентированы на управление отпечатками.

^back to top

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

^back to top

Recog library language implementations

^back to top

Feature parity

Feature ✨rapid7/recog-rubyrapid7/recog-javarunZeroInc/recog-go
Fingerprint verification CLI tool✅✅✅
Fingerprint match CLI tool✅✅
Supports base64 encoded examples✅✅✅
Supports filesystem-based external examples✅✅✅
Fingerprint match CPE param interpolation✅✅✅

^back to top

Installation

Recog состоит как из XML-файлов отпечатков, так и из набора кода, в основном на Ruby, который упрощает разработку, тестирование и использование содержащихся отпечатков. Для использования включённого Ruby-кода требуется свежая версия Ruby (2.31+), а также Rubygems и гем bundler. После установки этих зависимостей используйте следующие команды, чтобы получить последнюю версию исходного кода и установить все дополнительные зависимости.

$ git clone [email protected]:rapid7/recog.git
$ cd recog
$ bundle install

^back to top

Maturity

Обратите внимание: хотя сами XML-отпечатки достаточно стабильны и хорошо протестированы, кодовая база Ruby всё ещё довольно нова и может быстро меняться. Пожалуйста, свяжитесь с нами (research[at]rapid7.com), прежде чем использовать код Recog в каких-либо производственных проектах.

^back to top

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>

Категории