
Riconoscimento di pattern per host, servizi e contenuti.
Recog è un framework per l'identificazione di prodotti, servizi, sistemi operativi e hardware confrontando le impronte digitali con i dati restituiti da vari probe di rete. Recog semplifica l'estrazione di informazioni utili dai banner dei server web, dai campi di descrizione del sistema SNMP e molto altro.
Recog è open source; consultare il file LICENSE per maggiori informazioni.
Il 31 marzo 2022, il contenuto di Recog - i file XML delle impronte digitali e le utility - è stato separato dall'implementazione della libreria del framework Recog. Il repository originale Recog ora contiene il contenuto di Recog e il repository Recog-Ruby contiene l'implementazione in linguaggio Ruby. Il contenuto di Recog è incluso in Recog-Ruby come sottomodulo git ed è annidato nella directory recog. Tutte le versioni della gemma Recog successive alla separazione, uguali o superiori alla 3.0.0: 1. conterranno la directory delle impronte XML nella directory recog e 2. includeranno solo lo strumento recog_match poiché gli altri strumenti sono focalizzati sulla gestione delle impronte digitali.
Insieme alla separazione del repository, il branch predefinito è stato rinominato da master a main. Eventuali cloni creati prima di queste modifiche dovranno essere aggiornati manualmente nel proprio ambiente locale. Se disponi di un fork, vai alle impostazioni del fork e segui le istruzioni su rinominare un branch per impostare il branch predefinito su main.
git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
Facoltativamente, eseguire il seguente comando per rimuovere i riferimenti di tracciamento al vecchio nome del branch.
# dry-run to confirm stale references that will be deleted before proceeding
git remote prune origin --dry-run
git remote prune origin
Se in precedenza hai utilizzato il branch di tracciamento upstream upstream-master, esegui i seguenti comandi per rimuovere il vecchio branch e crearne uno nuovo di tracciamento upstream.
git branch -d upstream-master
git checkout -b upstream-main --track upstream/main
Facoltativamente, eseguire il seguente comando per rimuovere i riferimenti di tracciamento al vecchio nome del branch upstream.
# dry-run to confirm stale references that will be deleted before proceeding
git remote prune upstream --dry-run
git remote prune upstream
| Funzionalità ✨ | rapid7/recog-ruby | rapid7/recog-java | runZeroInc/recog-go |
|---|---|---|---|
| Strumento CLI per la verifica delle impronte digitali | ✅ | ✅ | ✅ |
| Strumento CLI per la corrispondenza delle impronte digitali | ✅ | ✅ | |
| Supporta esempi codificati in base64 | ✅ | ✅ | ✅ |
| Supporta esempi esterni basati su filesystem | ✅ | ✅ | ✅ |
| Interpolazione dei parametri CPE nella corrispondenza delle impronte | ✅ | ✅ | ✅ |
Recog è composto sia da file XML di impronte digitali sia da una serie di codice, per lo più in Ruby, che rende facile sviluppare, testare e utilizzare le impronte digitali in esso contenute. Per utilizzare il codice Ruby incluso, sono necessarie una versione recente di Ruby (2.31+), insieme a Rubygems e alla gemma bundler. Una volta installate queste dipendenze, utilizzare i seguenti comandi per recuperare l'ultimo codice sorgente e installare eventuali dipendenze aggiuntive.
$ git clone [email protected]:rapid7/recog.git
$ cd recog
$ bundle install
Si noti che, sebbene le impronte digitali XML siano piuttosto stabili e ben testate, il codebase Ruby è ancora abbastanza recente e soggetto a rapidi cambiamenti. Contattateci (research[at]rapid7.com) prima di utilizzare il codice di Recog in progetti di produzione.
Le impronte digitali all'interno di Recog sono memorizzate in file XML, ciascuno progettato per corrispondere a una specifica stringa o campo di risposta del protocollo. Ad esempio, il file ssh_banners.xml può determinare il sistema operativo, il vendor e talvolta il prodotto hardware confrontando la stringa del banner iniziale del demone SSH.
Un file di impronte digitali è costituito da un documento XML come il seguente:
<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>
La prima riga deve essere sempre costituita dalla dichiarazione di versione XML. Il primo elemento deve essere sempre un blocco fingerprints con un attributo matches che indica quali dati questo file di impronte digitali deve confrontare. L'attributo matches è normalmente nella forma protocol.field.
All'interno dell'elemento fingerprints devono esserci uno o più elementi fingerprint. Ogni fingerprint deve contenere un attributo pattern, che contiene l'espressione regolare da utilizzare per il confronto con i dati. È possibile specificare un attributo opzionale flags per controllare come l'espressione regolare deve essere interpretata. Consultare la documentazione di Recog per FLAG_MAP per maggiori informazioni.
All'interno del fingerprint, un elemento description deve contenere una stringa leggibile che descrive questa impronta digitale.