IVRE è un framework open source per la ricognizione della rete. Si basa su strumenti open source ben noti (Nmap, Masscan, ZGrab2, ZDNS e Zeek (Bro)) per raccogliere dati (network intelligence), archiviarli in un database (MongoDB è il backend consigliato) e fornisce strumenti per analizzarlo.
Include un’interfaccia Web finalizzata all’analisi dei risultati della scansione di Nmap (poiché si basa su un database, può essere molto più efficiente con scansioni di grandi dimensioni rispetto ad uno strumento come Zenmap, la GUI di Nmap, ad esempio).
IVRE significa Instrument de saille sur les réseaux extérieurs, ed è francese per DRUNK, Dynamic Recon of Unknown NetworKs.
È un software gratuito, il codice è su GitHub e la documentazione su Read the Docs.
PREREQUISTI
Server Ubuntu 22.05
user con diritti di sudo
AGGIORNAMENTO PRE INSTALLAZIONE
Prima di procedere con l’installazione aggiornare Ubuntu cn i seguenti comandi:
0 1 |
sudo apt update sudo apt upgrade |
INSTALLAZIONE DEL DATABASE MONGODB
Importare la chiave pubblica utilizzata dal sistema di gestione dei pacchetti
Installare gnupgcurl con il comando:
0 |
sudo apt-get install gnupg curl |
Per importare la chiave GPG pubblica di MongoDB, eseguire il seguente comando:
0 1 2 |
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \ sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \ --dearmor |
Creare un file di elenco per MongoDB in /etc/apt/sources.list.d/mongodb-org-7.0.list con il comando:
0 |
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list |
Usare il comando seguente per ricaricare il database dei pacchetti locale:
0 |
sudo apt-get update |
Installare l’ultima versione stabile di MongoDB con il comando:
0 |
sudo apt-get install -y mongodb-org |
Il comando installa il server database MongoDB insieme ai componenti principali del database inclusi gli strumenti della shell.
Una volta completata l’installazione, verificare la versione di MongoDB installata con il comando:
0 |
mongod --version |
Se è andato tutto a buon fine dovremmo vedere il seguente output:
0 1 2 3 4 5 6 7 8 9 10 11 12 |
db version v7.0.6 Build Info: { "version": "7.0.6", "gitVersion": "66cdc1f28172cb33ff68263050d73d4ade73b9a4", "openSSLVersion": "OpenSSL 3.0.2 15 Mar 2022", "modules": [], "allocator": "tcmalloc", "environment": { "distmod": "ubuntu2204", "distarch": "x86_64", "target_arch": "x86_64" } } |
Il servizio MongoDB è disabilitato al momento dell’installazione per impostazione predefinita ed è possibile verificarlo eseguendo il comando:
0 |
sudo systemctl status mongod |
Dovremmo visualizzare il seguente output:
0 1 2 3 |
mongod.service - MongoDB Database Server Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: https://docs.mongodb.org/manual |
Abilitare MongoDB all’avvio con il comando:
0 |
sudo systemctl enable mongod |
Avviare il servizio di MongoDB con il comando:
0 |
sudo systemctl start mongod |
INSTALLAZIONE DI NMAP
Per installare Nmap su Ubuntu Server eseguire il comando:
0 |
sudo apt install nmap |
Quindi verificare la versione installata con il comando:
0 |
nmap --version |
Se è andato tutto a buon fine dovremmo visualizzare il seguente output:
0 1 2 3 4 |
Nmap version 7.80 ( https://nmap.org ) Platform: x86_64-pc-linux-gnu Compiled with: liblua-5.3.6 openssl-3.0.2 nmap-libssh2-1.8.2 libz-1.2.11 libpcre-8.39 libpcap-1.10.1 nmap-libdnet-1.12 ipv6 Compiled without: Available nsock engines: epoll poll select |
INSTALLAZIONE DI IVRE
A questo punto è possibile avviare l’installazione di Ivre con il seguente comando:
0 |
sudo apt -y --no-install-recommends install python3-pymongo python3-cryptography python3-bottle python3-openssl apache2 libapache2-mod-wsgi-py3 dokuwiki |
Per impostazione predefinita, DokuWiki memorizza tutte le sue pagine in un database di file in /var/lib/dokuwiki.
Accettando questa opzione sarà possibile avere un sistema più ordinato nel momento in cui viene eliminato il pacchetto DokuWiki.
ATTENZIONE: Questo potrebbe causare la perdita di informazioni se si ha un wiki operativo che viene rimosso.
Procedere con l’eliminazione del pacchetto selezionando Yes quindi Invio
Inserire la password del wiki Administrator quindi premere OK
Reinserire la password del wiki Administrator quindi premere OK
Quindi eseguire i comandi:
0 1 2 3 |
git clone https://github.com/ivre/ivre cd ivre python3 setup.py build sudo python3 setup.py install |
Eseguire la configurazione di IVRE con i seguenti comandi:
0 1 2 3 4 5 6 7 8 9 10 11 |
sudo -s cd /var/www/html rm index.html ln -s /usr/local/share/ivre/web/static/* . cd /var/lib/dokuwiki/data/pages ln -s /usr/local/share/ivre/dokuwiki/doc cd /var/lib/dokuwiki/data/media ln -s /usr/local/share/ivre/dokuwiki/media/logo.png ln -s /usr/local/share/ivre/dokuwiki/media/doc cd /usr/share/dokuwiki patch -p0 < /usr/local/share/ivre/patches/dokuwiki/backlinks-20200729.patch cd /etc/apache2/mods-enabled |
Eseguire quindi il comando:
0 |
for m in rewrite.load wsgi.conf wsgi.load ; do |
quindi eseguire:
0 |
[ -L $m ] || ln -s ../mods-available/$m ; done |
Procedere con la configurazione con i seguenti comandi:
0 1 2 3 4 5 6 7 8 9 |
cd ../ echo 'Alias /cgi "/usr/local/share/ivre/web/wsgi/app.wsgi"' > conf-enabled/ivre.conf echo '<Location /cgi>' >> conf-enabled/ivre.conf echo 'SetHandler wsgi-script' >> conf-enabled/ivre.conf echo 'Options +ExecCGI' >> conf-enabled/ivre.conf echo 'Require all granted' >> conf-enabled/ivre.conf echo '</Location>' >> conf-enabled/ivre.conf sed -i 's/^\(\s*\)#Rewrite/\1Rewrite/' /etc/dokuwiki/apache.conf echo 'WEB_GET_NOTEPAD_PAGES = "localdokuwiki"' >> /etc/ivre.conf service apache2 reload |
Per verificare che il server web di IVRE sia attivo eseguire il comando:
0 |
ivre httpd |
Dovremmo visualizzare il seguente output:
0 1 2 3 4 5 6 7 8 9 |
This program runs a simple httpd server to provide an out-of-the-box access to the web user interface. This script should only be used for testing purposes. Production deployments should use "real" web servers (IVRE has been successfully tested with both Apache and Nginx). Bottle v0.12.19 server starting up (using WSGIRefServer())... Listening on http://127.0.0.1:80/ Hit Ctrl-C to quit. |
A questo punto è possibile aprire un browser Web e visitare http://localhost/. Dovremmo visualizzare l’interfaccia utente Web di IVRE, ovviamente senza risultati.
In teoria l’interfaccia web dovrebbe essere raggiungibile anche da remoto richiamando da un qualsiasi browser il link http://IP-DEL-SERVER-IVRE
Se così non dovesse essere editare il file ports.conf di Apache con il comando:
0 |
sudo nano /etc/apache2/ports.conf |
Al posto della riga
0 |
Listen 80 |
inserire la riga
0 |
0.0.0.0:80 |
Se si intende abilitare tutti gli IP del server IVRE al raggiungimento. Altimenti inserire la riga puntuale:
0 |
Listen IP-DEL-SERVER:80 |
Salvare e chiudere il file di configurazione.
Riavviare Apache con il comando:
0 |
systemctl restart apache2 |
A questo punto da un qualsiasi browser è possibile richiamare il link:
http://IP-DEL-SERVER-IVRE
Se è andato tutto a buon fine dovremmo visualizzare l’interfaccia utente Web IVRE, ovviamente senza risultati.
INSTALLAZIONE DEI MODULI DI PYTHON
Per verificare tutti i moduli installati e i moduli mancanti eseguire il comando:
0 |
ivre --help |
Dovremmo vedere il seguente output relativo alle dipendenze:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Dependencies: MySQLdb: *missing* OpenSSL: 21.0.0 PIL: *missing* bottle: 0.12.19 cryptography: 3.4.8 dbus: 1.2.18 krbV: *missing* matplotlib: *missing* psycopg2: *missing* pycurl: *missing* pymongo: 3.11.0 sqlalchemy: *missing* tinydb: *missing* elasticsearch: *missing* elasticsearch_dsl: *missing* |
Installare le dipendenze Missing con i seguenti comandi:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
sudo apt install python3-tinydb sudo apt-get -y install python3-sqlalchemy-ext sudo apt-get -y install python3-psycopg2 sudo apt-get -y install python3-mysqldb sudo apt install python3-pip -y pip install pillow sudo apt-get -y install python3-matplotlib pip install elasticsearch-dsl sudo apt-get -y install python3-pycurl |
Verificare nuovamente le dipendenze con il comando:
0 |
ivre --help |
Dovremmo vedere il seguente output:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Dependencies: MySQLdb: 1.4.6 OpenSSL: 21.0.0 PIL: 10.2.0 bottle: 0.12.19 cryptography: 3.4.8 dbus: 1.2.18 krbV: *missing* matplotlib: 3.5.1 psycopg2: 2.9.2 (dt dec pq3 ext lo64) pycurl: PycURL/7.44.1 libcurl/7.81.0 GnuTLS/3.7.3 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.16 pymongo: 3.11.0 sqlalchemy: 1.4.31 tinydb: 3.15.2 elasticsearch: 8.12.1 elasticsearch_dsl: 8.12.0 |
INSTALLAZIONE DEI PROGRAMMI DI SCANSIONE (OPZIONALE)
Di seguito i comandi per installare i pacchetti utilizzati per le scansioni:
Installare Masscan con il comando:
0 |
sudo apt-get -y install masscan |
Installare Zmap con il seguente comando:
0 |
sudo apt-get -y install zmap |
Se si desidera integrare screenshot, installare Tesseract, ImageMagick, FFmpeg e PhantomJS
0 1 2 3 4 5 6 |
sudo apt-get -y install tesseract-ocr-ind sudo apt install imagemagick sudo apt install ffmpeg sudo apt-get install phantomjs |
INIZIALIZZAZIONE DEL DATABASE E DOWNLOAD E IMPORTAZIONI DEI DATI
Ora possiamo inizializzare IVRE eseguendo i comandi:
0 |
ivre ipinfo --init |
Quindi premere Y
0 |
ivre scancli --init |
Quindi premere Y
0 |
ivre view --init |
Quindi premere Y
0 |
ivre flowcli --init |
Quindi premere Y
0 |
sudo ivre runscansagentdb --init |
Quindi premere Y
Ciò rimuoverà i dati esistenti dal database.
ATTENZIONE: Questi comandi possono essere utilizzati tra un’indagine e l’altra per ripulire i dati.
L’ultimo passaggio sarà quello di recuperare i dati IP con il comando:
0 |
ivre ipdata --download |
Questo comando recupera i dati IP dal sito Web IVRE e Maxmind. Questi dati sono richiesti se si desidera scansionare/elencare gli indirizzi IP da un AS o per paese.
SCANSIONE DEGLI IP INSTRADABILI
Eseguire la prima scansione di test con 1000 indirizzi IP (instradabili), con un singolo processo nmap:
sudo ivre runscans –routable –limit 1000
ATTENZIONE: questo comandi richiede davvero tanto tempo. Portare pazienza e attendere il termine.
Il comando termina quando appare il seguente output:
0 |
NO MORE DATA TO PROCESS |
Terminato il comando, importare i risultati e creare una vista con i seguenti comandi:
0 1 |
ivre scan2db -c ROUTABLE,ROUTABLE-CAMPAIGN-001 -s MySource -r scans/ROUTABLE/up ivre db2view nmap |
Verificare se tutti i dati sono caricati sul Database con il comando:
0 |
ivre view --count |
Dovremmo vedere come output un numero. Nel mio caso è 65
Aprendo l’interfaccia web dovremmo vedere una schermata come quella sovrastante con i 65 risultati appena caricati.
Dopo aver fatto tutte le analisi del caso sarà possibile cancellare i dati esistenti con i comandi:
0 |
rm -rf scans/ROUTABLE/* |
Se si desidera avviare una nuova indagine di ricognizione attiva senza dati esistenti nel database o nella vista è possibile rimuovere i dati eseguendo i due comandi:
0 1 |
ivre scancli --init ivre view --init |
SCANSIONE DI IP O SUBNET PUNTUALI
Per avviare la scansione su una sottorete che presenta alcuni IP che si intende monitorare eseguire il comando:
0 |
ivre runscans --routable --categories TEST --network 195.223.60.10/28 --output=XMLFork --processes 5 |
Nel comando sopra abbiamo eseguito le operazioni elencate:
- Creazione della categoria “TEST”, che apparirà in /scans/TEST/
- Scansione di un’intera sottorete in “rete”
- Utilizzo di cinque processi Nmap simultanemente
NOTA BENE:
La prima cosa che possiamo appurare eseguendo questa scansione è la lentezza del processo di scansione per una sottorete relativamente piccola.
Ciò potrebbe essere dovuto alla quantità di processi utilizzati (cinque dei quali sono troppo pochi). Il tempo di esecuzione totale ha richiesto circa 4 ore.
Procedere con l’inserimento dei dati nel database in modo da poter fare ulteriori indagini con i seguenti comandi:
0 |
ivre scan2db -c TEST -s test2 -r scans/TEST/up |
Se è andato tutto a buon fine dovremmo vedere il seguente output:
0 |
INFO:ivre:1 results imported. |
Eseguire quindi il comando:
0 |
ivre db2view nmap |
Dopo aver eseguito il comando ivre db2view nmap potrebbe essere necessario eseguire il comando:
0 |
ivre getwebdata |
Questo se IVRE non riesce a trovare dei file specifici
Da interfaccia web dovremmo vedere una schermata come mostrato nell’immagine sovrastante
CHECK CONFIGURAZIONE DI IVRE
Per fare il check della configurazione di IVRE con le dipendenze e i comandi installati eseguire il comando:
0 |
ivre --help |
Dovremmo visualizzare il seguente output:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
IVRE - Network recon framework Copyright 2011 - 2023 Pierre LALET <pierre@droids-corp.org> Version 0.9.20.dev173 Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] Linux vm-srv-ubu-22 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64 Dependencies: MySQLdb: 1.4.6 OpenSSL: 21.0.0 PIL: 10.2.0 bottle: 0.12.19 cryptography: 3.4.8 dbus: 1.2.18 krbV: *missing* matplotlib: 3.5.1 psycopg2: 2.9.2 (dt dec pq3 ext lo64) pycurl: PycURL/7.44.1 libcurl/7.81.0 GnuTLS/3.7.3 zlib/1.2.11 brotli/1.0.9 zstd/1.4.8 libidn2/2.3.2 libpsl/0.21.0 (+libidn2/2.3.2) libssh/0.9.6/openssl/zlib nghttp2/1.43.0 librtmp/2.3 OpenLDAP/2.5.12 pymongo: 3.11.0 sqlalchemy: 1.4.31 tinydb: 3.15.2 elasticsearch: 8.12.1 elasticsearch_dsl: 8.12.0 usage: ivre [COMMAND] available commands: airodump2db arp2db auditdom db2view flow2db flowcli getmoduli getwebdata httpd ipcalc ipdata iphost ipinfo localscan macdata macinfo p0f2db passiverecon2db passivereconworker plotdb runscans runscansagent runscansagentdb scan2db scancli scanstatus sort version view weblog2db zeek2db Try ivre help [COMMAND] |
LIMITARE L’ ACCESSO ALL’INTERFACCIA WEB DI IVRE
Se si vuole impedire l’accesso non autorizzato ai risultati di IVRE seguire questa sezione.
Innanzitutto configurare il server web per autenticare gli utenti remoti. La cosa più importante, ovviamente, è proteggere l’accesso ai file CGI (i file statici sono disponibili pubblicamente e non contengono alcun risultato).
In un ambiente AD o Kerberos, ad esempio, Apache può essere configurato per fornire l’autenticazione SSO.
Quindi se si desidera limitare l’accesso ai risultati in base al login o al dominio dell’utente è possibile aggiungere le seguenti righe nel file di configurazione di IVRE /etc/ivre.conf:
0 1 2 3 4 |
WEB_DEFAULT_INIT_QUERY = 'noaccess' WEB_INIT_QUERIES = { '@ADMIN.NETWORK.AD': 'full', } |
Per impostazione predefinita, gli utenti non avranno accesso a nessun risultato. L’utente [email protected] avrà accesso ai risultati nella categoria Sottorete. Gli utenti nell’ambito ADMIN.NETWORK.AD avranno accesso a tutti i risultati.
Sono Raffaele Chiatto, un appassionato di informatica a 360 gradi.
Tutto è iniziato nel 1996, quando ho scoperto il mondo dell'informatica grazie a Windows 95, e da quel momento non ho più smesso di esplorare e imparare.
Ogni giorno mi dedico con curiosità e passione a scoprire le nuove frontiere di questo settore in continua evoluzione.
0 Comments