
Reconhecimento de padrões para hosts, serviços e conteúdo
Recog é um framework para identificar produtos, serviços, sistemas operacionais e hardware por meio da correspondência de fingerprints com dados retornados por diversas sondas de rede. O Recog torna simples extrair informações úteis de banners de servidores web, campos de descrição de sistema do SNMP e muito mais.
O Recog é open source; consulte o arquivo LICENSE para obter mais informações.
Em 31 de março de 2022, o conteúdo do Recog - arquivos XML de fingerprints e utilitários - foi separado da implementação da biblioteca do framework Recog. O repositório original Recog agora contém o conteúdo do Recog, e o repositório Recog-Ruby contém a implementação em Ruby. O conteúdo do Recog é incluído no Recog-Ruby como um submódulo git e fica aninhado no diretório recog. Todas as versões da gem Recog pós-separação, iguais ou superiores a 3.0.0, irão: 1. conter o diretório de fingerprints XML sob o diretório recog e 2. incluir apenas a ferramenta recog_match, uma vez que as demais ferramentas são focadas no gerenciamento de fingerprints.
Junto com a separação do repositório, o branch padrão foi renomeado de master para main. Qualquer clone criado antes dessas alterações precisará ser atualizado manualmente no seu ambiente local. Se você tiver um fork, navegue até as configurações do seu fork e siga as instruções sobre renomear um branch para alterar o branch padrão para main.
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
Opcionalmente, execute o seguinte comando para remover as referências de rastreamento ao nome do branch antigo.
# dry-run to confirm stale references that will be deleted before proceeding
git remote prune origin --dry-run
git remote prune origin
Se você usou anteriormente o branch de rastreamento upstream upstream-master, execute os seguintes comandos para remover o branch antigo e criar um novo branch de rastreamento upstream.
git branch -d upstream-master
git checkout -b upstream-main --track upstream/main
Opcionalmente, execute o seguinte comando para remover as referências de rastreamento ao nome do branch upstream antigo.
# dry-run to confirm stale references that will be deleted before proceeding
git remote prune upstream --dry-run
git remote prune upstream
| Recurso ✨ | rapid7/recog-ruby | rapid7/recog-java | runZeroInc/recog-go |
|---|---|---|---|
| Ferramenta CLI de verificação de fingerprints | ✅ | ✅ | ✅ |
| Ferramenta CLI de correspondência de fingerprints | ✅ | ✅ | |
| Suporta exemplos codificados em base64 | ✅ | ✅ | ✅ |
| Suporta exemplos externos baseados em sistema de arquivos | ✅ | ✅ | ✅ |
| Interpolação de parâmetro CPE na correspondência de fingerprints | ✅ | ✅ | ✅ |
O Recog consiste tanto em arquivos XML de fingerprints quanto em uma variedade de código, principalmente em Ruby, que facilita o desenvolvimento, o teste e o uso dos fingerprints contidos. Para usar o código Ruby incluído, é necessária uma versão recente do Ruby (2.31+), juntamente com Rubygems e a gem bundler. Uma vez que essas dependências estejam instaladas, use os seguintes comandos para obter o código-fonte mais recente e instalar quaisquer dependências adicionais.
$ git clone [email protected]:rapid7/recog.git
$ cd recog
$ bundle install
Observe que, embora os próprios fingerprints XML sejam bastante estáveis e bem testados, a base de código Ruby ainda é relativamente nova e sujeita a mudanças rápidas. Entre em contato conosco (research[at]rapid7.com) antes de utilizar o código do Recog em qualquer projeto em produção.
Os fingerprints no Recog são armazenados em arquivos XML, cada um projetado para corresponder a uma string ou campo específico de resposta de protocolo. Por exemplo, o arquivo ssh_banners.xml pode determinar o sistema operacional, o fornecedor e, às vezes, o produto de hardware por meio da correspondência com a string inicial do banner do daemon SSH.
Um arquivo de fingerprint consiste em um documento XML como o seguinte:
<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>
A primeira linha deve consistir sempre na declaração da versão do XML. O primeiro elemento deve ser sempre um bloco fingerprints com um atributo matches indicando a quais dados este arquivo de fingerprint deve corresponder. O atributo matches normalmente está na forma protocol.field.
Dentro do elemento fingerprints, deve haver um ou mais elementos fingerprint. Cada fingerprint deve conter um atributo pattern, que contém a expressão regular a ser usada para corresponder aos dados. Um atributo opcional flags pode ser especificado para controlar como a expressão regular deve ser interpretada. Consulte a documentação do Recog para FLAG_MAP para obter mais informações.
Dentro do fingerprint, um elemento description deve conter uma string legível por humanos que descreve este fingerprint.