HOWTO sull'istallazione e configurazione dell'IDS Snort
partendo dai pacchetti rpm
su sistemi Linux RedHat like.
15/05/2004
Versione 1.1.2
Sommario
- 1 Introduzione
- 2 Software utilizzato
- 2.1 Pacchetti da istallare necessariamente
- 2.2 Pacchetti che si considerano già istallati
- 2.3 Pacchetti opzionali da istallare
- 2.4 Funzioni
- 3 Ma come funziona Snort e che fa?
- 4 Procedimento di istallazione dei pacchetti
- 5 CONCLUSIONI
Abstract:
Questo tutorial prende spunto dall'eccellente articolo pubblicato su OpenSource n. 6 Febbraio 2004 da Mauro Tedesco, del quale vuole essere un'integrazione destinata a coloro che hanno una macchina linux che utilizza i package rpm per l'istallazione dei programmi. Infatti le istruzioni inserite nel suddetto articolo non sempre sono adatte a questa evenienza, e la mancata conoscenza di certi particolari può dare molti mal di testa. Per questioni di comodità di consultazione verranno qui riportate anche parte delle istruzioni "esatte". Si tenga presente che questo tutorial vuole essere una guida base per l'istallazione e configurazione, per cui si rimanda alla copiosa manualistica per gli approfondimenti.
1 Introduzione
Snort è un IDS, cioè un Intrusion Detection System. In pratica è un programma che consente di rilevare eventuali tentativi di intrusione in un sistema, tramite il confronto delle ``impronte'' dei pacchetti di rete in arrivo e quelle conservate in un database (rules). Rilevata un'attività sospetta può svolgere sia compiti di registrazione che di avviso all'amministratore. NON SVOLGE COMPITI DI DIFESA ATTIVA, a differenza dei firewall, che quindi rimangono a carico di altre applicazioni.
Verrà spiegato come istallare snort insieme ad altri pacchetti che ne consentono un uso produttivo ed una rapida consultazione dei report, tenendo presente che snort può essere istallato ed usato per produrre report formato testo con- sultabili con qualunque editor, ma questo significa in pratica perdere la visione d'insieme di ciò che sta accadendo, oltre a molto tempo per la consultazione.
2 Software utilizzato
2.1 Pacchetti da istallare necessariamente
- snort -> IDS
2.2 Pacchetti che si considerano già istallati
- apache -> Web server
- mysql -> Database realazionale
- php -> Inteprete del linguaggio di programmazione omonimo
- Perl -> Inteprete del linguaggio di programmazione omonimo
2.3 Pacchetti opzionali da istallare
- JPGraph -> Librerie per la creazione di grafici tramite php
- ADODB -> Librerie php per l'interfacciamento ai database
- Acid -> Interfaccia web in php per l'elaborazione dei dati di snort
- Webmin -> Interfaccia web in Perl per l'amministazione di apache, mysql, snort e molto altro. Non ha bisogno di apache per funzionare
2.4 Funzioni
Questi pacchetti servono a conservare (mysql), a consultare (apache, php, JPGraph, ADODB, Acid) e amministrare (Webmin, Perl) in maniera rapida ed efficace i report.
Lo schema di funzionamento finale dei vari pacchetti è il seguente:
Snort rileva i dati e li immette nel RDBMS MySQL, viene amministrato tramite Webmin, i report inseriti nel database vengono elaborati e visualizzati tramite Acid che è scritto in php e fa uso di ADODB per accedere a MySQL e di JPGraph per creare i grafici. Acid ha bisogno di apache per funzionare, essendo un'applicazione web.
3 Ma come funziona Snort e che fa?
In maniera molto semplice (e anche piuttosto rozza) si può dire che snort è uno ``sniffer'' di pacchetti, cioè un programma capace di ``catturarli'' e leggerli, ma oltre a ciò e anche in grado di ``interpretarli'', cioè di capire e/o immaginare per quale scopo sono stati generati, ed in particolare se perseguono scopi leciti o illeciti.
Questa capacità non deriva chiaramente da qualche dote divinatoria, ma da un confronto con delle ``firme'' depositate nella directory ``rules'' sotto forma di files di testo. Questi files, divisi per argomento, contengono delle stringhe di questo tipo:
------- alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:" WEB-MISC /cgi-bin/// access"; flow:to_server,established; uricontent:"/cgi-bin///"; nocase; rawbytes; classtype:attempted-recon; sid:1144; rev:5;) -------
che consentono a snort di interpretare il significato dei pacchetti che analizza. Anche se non sembra, queste regole sono relativamente facili da interpretare, ad esempio quella riportata sopra vuol dire:
-| STRINGA | SIGNIFICATO |
| alert | genera un allarme |
| tcp | quando trovi un pacchetto TCP |
| $EXTERNAL_NET any | proveniente da una qualunque porta esterna alla rete |
| -> | destinato |
| $HTTP_SERVERS $HTTP_PORTS | alla porta del servizio di web server |
| uricontent:"/cgi-bin///"; | che contiene nell'URI la stringa "/cgi-bin///" |
| msg: "WEB-MISC /cgi-bin/// access"; | ed emetti il messaggio "WEB-MISC /cgi-bin/// access" |
| sid:1144; | questo alert è inserito al numero 1144 del DB di snort |
-
in pratica questo alert viene generato nel momento in cui viene fatta una richiesta GET ad un webserver che ha nell'URI qualcosa del genere:
http://www.shishii.com/cgi-bin////prova.pl
o anche:
http://www.shishii.com/cgi-bin/\/\/prova.pl
che è un sintomo di tentativo di attacco tramite accesso ad aree non consentite.
4 Procedimento di istallazione dei pacchetti
4.1 MySQL
Per prima cosa creiamo il database che verrà usato da snort. Diamo per acquisita l'istallazione e l'attivazione di MySQL.Dal prompt dei comandi dare i comandi:
shell> mysql -u root -p <digitare password>
siamo entrati nella shell di mysql
creaiamo il database "snort"
mysql> CREATE DATABASE snort;
attiviamo il database mysql per creare l'utente di accesso
mysql> use mysql;
diamo i diritti all'utente snort
mysql> GRANT INSERT,SELECT ON snort.* TO snort@127.0.0.1 \ IDENTIFIED BY 'password'; mysql> quit;
4.2 SNORT
4.2.1 scaricare da qui i pacchetti rpm
si raccomanda di scaricare ed istallare sia snort*.rpm che snort-mysql*.rpm
http://www.snort.org/dl/binaries/linux/
4.2.2 istallazione
Entrare nella directory in cui si è scaricato snort e digitare da utente root:
rpm -Uvh snort*
alla fine avremo snort istallato e già attivo, ma sono necessari vari interventi.
4.2.3 configurazione
- fermare il server snort tramite:
# service snortd stop
- per prima cosa accertarsi che siano stati creati l'utente e il gruppo snort tramite lettura dei files /etc/password e /etc/group. Se non esistono crearli con le apposite utility.
- nel file /etc/snort/snort.conf
decommentare ed adattare alla propria rete la seguente variabile, ad esempio:
var HOME_NET 10.0.0.0/24
se ci sono dubbi settare
var HOME_NET any
- adattare il seguente path solo se necessario, ma dovrebbe essere già esatto
var RULE_PATH /etc/snort/rules
- settare i dati di accesso a MySQL, decommentando se necessario questa riga output database:
log, mysql, user=snort password=<password> dbname=snort host=localhost
- alla fine del file commentare (# disattivare) o decommentare (attivare) le regole che ci servono.
- Ritengo molto utile attivare il rilevamento delle seguanti sezioni:
include $RULE_PATH/web-attacks.rules include $RULE_PATH/shellcode.rules
oltre a quelle attive di default ``sconsiglio'' di attivare:
include $RULE_PATH/p2p.rules
cioè la rilevazione di client peer-to-peer, se usate tali software, altrimenti in poco tempo saturate il database.
- A mio avviso è importante attivare anche il rilevamento di eventuali portscanner tipo ``nmap'':
preprocessor portscan: $HOME_NET 4 3 portscan.log
se ricevete troppi allarmi provenienti da un host (in genere della stessa rete) di cui siete assolutamente sicuri potete evitare il sovraccarico di lavoro settando opportunamente:
preprocessor portscan-ignorehosts 0.0.0.0
inserendo al posto di 0.0.0.0 l'IP dell'host in questione.
- nel file /etc/sysconfig/ settare:
INTERFACE=eth0 CONF=/etc/snort/snort.conf USER=snort GROUP=snort PASS_FIRST=0 LOGDIR=/var/log/snort # ALERTMODE=fast
ATTENZIONE !!! è fondamentale commentare, e quindi disattivare, il settaggio "ALERTMODE" per utilizzare snort con mysql. Si raccomanda di accertarsi di ciò
DUMP_APP=1 BINARY_LOG=1 NO_PACKET_LOG=0
- nel file /etc/init.d/snortd verificare la riga
# chkconfig: 235 xx yy
e confrontarla con quella presente in /etc/init.d/mysqld
# chkconfig: - 78 12
modificare snortd in modo che il secondo numero (xx) sia superiore al 78 di mysqld e il terzo (yy) sia inferiore a 12 ciò serve a fare in modo che snort parta dopo il server mysqld e si fermi prima, altrimenti si verificheranno errori.
- digitare i seguenti comandi da root che servono a fissare il giusto ordine di partenza dei server:
# chkconfig -del snortd # chkconfig -add snortd # chkconfig -level 235 snortd on # chkconfig -level 235 mysqld on # chkconfig -level 35 httpd on
- adesso si deve popolare il database che userà snort:
# cd /usr/share/doc/snort*/contrib # mysql -usnort -p<password> -Dsnort < create_mysql # gzip -d snortdb-extra.gz # mysql -usnort -p<password> -Dsnort < snortdb-extra
4.3 JPGraph
http://members.chello.se/jpgraph/jpgdownloads/jpgraph-1.14.tar.gz
4.3.1 Scaricare il tarball di queste librerie grafiche scritte in PHP
che sono peraltro da considerarsi interessanti anche ad altri scopi. Necessitano di PHP >= 4.1 con il supporto GD, però non è un problema grave in quanto, che mi risulti tutte le maggiori distro istallano PHP con questo supporto.
4.3.2 Scompattare il tarball direttamente nella Document Root di apache
in genere /var/www/html.
# tar -xzvf jpgraph-1.14.tar.gz
dare alle directory create chmod 755 e ai files chmod 644.
4.4 ADODB
http://php.weblogs.com/ADODB#downloads
4.4.1 scegliere l'ultima versione di adodb e scaricare il tarball
queste librerie PHP servono a script tipo ACID per potere utilizzare vari tipi di database senza necessità di modificare il codice.
4.4.2 Scompattare anch'esso nella Document Root di apache
# tar -xzvf adodb411.tgz
dare alle directory create chmod 755 e ai files chmod 644.
4.5 ACID
http://acidlab.sourceforge.net/acid-0.9.6b23.tar.gz
4.5.1 Scaricare il tarball di questa interfaccia verso i report di snort scritta in php
è veramente utile e potente. Consente una consultazione molto chiara e organizzata dei dati, che altrimenti potrebbero risultare un ammasso indigeribile di stringhe.
4.5.2 Scompattare anch'esso nella Document Root di apache
# tar -xzvf acid-0.9.6b23.tar.gz
dare alle directory create chmod 755 e ai files chmod 644 ed effettuare i seguenti settaggi in acid/acid_conf.php:
$DBlib_path = "/var/www/html/adodb"; // inserire il path delle librerie adodb $DBtype = "mysql"; // indicare il RDBMS usato, nel nostro caso mysql $alert_dbname = "snort"; $alert_host = "localhost"; $alert_port = ""; $alert_user = "snort"; $alert_password = "<password>"; $archive_dbname = "snort"; $archive_host = "localhost"; $archive_port = ""; $archive_user = "snort"; $archive_password = "<password>"; // inserire i dati per l'accesso al database in entrambe le // sezioni $ChartLib_path = "/var/www/html/jpgraph-1.14/src"; // inserire il path degli script della libreria grafica // jpgraph che stanno in src
4.5.3 A questo punto riavviate snort tramite:
# service snortd start
accertatevi che apache sia attivo:
# service httpd status
e accedete ad ACID tramite browser:
http://localhost/acid
al primo accesso acid vi chiederà di integrare il database con delle sue tabelle, rispondete positivamente.
Infine... godetevi questa bellissima interfaccia!Questo è il pannello di ingresso di Acid, dove si ha subito una prospettiva della situazione. In alto a sinistra sono indicati gli ultimi alert ancora non visionati. Tutte le scritte azzurre sono link a pagina di report eleborati nelle maniere più varie.
-
-
Questo è il pannello di report cronologico riassuntivo.
-
-
Questo è il pannello di approfondimento su un singolo alert, che si ottiene cliccando nel pannello precedente nei link nella colonna ID. Si tratta di tutte le informazioni possibili ottenibili tramite l'analisi dei pacchetti e eventuali riscontri in rete, come ad esempio DNS, ecc.
-
-
Qui potete vedere la pagina di spiegazione delle caratteristiche di un alert, comprensivo di livello pericolo, analisi tecnica, analisi di attacco, ecc. Si tratta di un servizio impagabile a cui si accede cliccando nei pannelli precedenti sui link 'snort'.
-
4.6 WEBMIN
4.6.1 Scaricare l'ultima versione di webmin in formato rpm.
Si tratta di una potente interfaccia scritta in Perl verso quasi tutto il vostro sistema. Ci si può fare di tutto, gestire apache, mysql, snort, creare utenti, gestire interfacce di rete ecc. Una cosa importante è che pur essendo un applicazione web non ha bisogno di apache, in quanto è egli stesso un server, che gira sulla porta 10000.
La maggior parte dei moduli per gestire sono già istallati tramite rpm, alcuni, tra i quali snort, invece devono essere istallati successivamente.
4.6.2 Scaricare il modulo snort da qui:
http://msbnetworks.net/snort/download/snort-1.1.wbm
- salvarlo in una qualunque directory
- accedere a webmin digitando nel browser:
http://localhost:10000
- loggarsi con root <password di root>
- cliccare su Webmin Configuration
- poi su Webmin Modules
- nel primo form selezionare "From local file" inserire il path e cliccare invio.
Troveremo il modulo di amministazione di snort nella sezione "Server".
Questi sono i pannelli di amministrazione delle regole di snort tramite Webmin.
-
-
4.6.3 Modifiche
Nella versione istallata da me ho trovato un errore nel codice Perl del modulo che non mi consentiva di visualizzare, cliccando su "Rule Set", il contenuto della regola, cosa piuttosto fastidiosa. Ho risolto inserendo nel file /usr/libexec/webmin/snort/index.cgi alla riga 77, la seguente stringa:
$rule =~ s/\$RULE_PATH//; # mia modifica
che non fa altro che eliminare "$RULE_PATH" dall'URL linkato nella pagina che per qualche motivo non viene interpolata.
5 CONCLUSIONI
L'istallazione di un IDS efficiente come snort in una LAN è cosa buona e giusta, sia nel caso di un'azienda che di un privato evoluto (informaticamente), oltre a potere monitorare e rimediare ad eventuali intrusioni, i log possono essere usati come prove a discarico nel caso in cui la propria rete sia stata usata da altri per scopi illeciti.
5.1 Ma dove mettere snort?
Certamente vanno evitate macchine di produzione con altri server presenti, poichè, essendo esse stesse obiettivo degli attacchi, una volte compromesse subirebbero anche la cancellazione dei log di snort. Per evitare questo si potrebbe mettere MySQL su un'altra macchina molto protetta, ma anche così ci possono essere dei buchi.
Io penso che il modo migliore di istallare snort sia il seguente:
- interporre tra il router (anche un semplice router ADSL ethernet) e l'HUB o lo switch della rete un semplice, economico HUB (va bene anche uno che funziona a 10M)
- collegare a questo HUB la macchina con snort ( e possibilmente il resto).
- Il collegamento deve essere fatto tramite una scheda di rete settata in modalità promiscua e senza IP! In questo modo sarà assolutamente invisibile, ma allo stesso tempo ``snifferà'' tutti i pacchetti destinati alla rete.
- Questa macchina dovrà avere un'altra scheda di rete settata con parametri di rete diversi da quelli della rete da difendere, e a cui ci si può collegare con un semplice cavo ritorto da qualunque altra macchina del sistema per tutte le necessità. In pratica l'attaccante non si accorgerà nemmeno di essere controllato da snort e se anche lo sapesse, per esempio tramite indagini, non potrebbe intervenire su quella macchina che è isolata e raggiungibile solo tramite l'altra scheda.
Questo è lo schema di rete proposto.
-
| Indice del sito |
