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:
che è un sintomo di tentativo di attacco tramite accesso ad aree non consentite.
Passiamo ora alle installazioni dei pacchetti che abbiamo citato.
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:
alla fine avremo snort istallato e già attivo, ma sono necessarie vari interventi:
- fermare il server snort tramite:
> service snortd stop
- 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 impostare
var HOME_NET any
adattare questo path solo se necessario, ma dovrebbe essere già esatto
var RULE_PATH /etc/snort/rules
impostare 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 invece 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/
impostare
INTERFACE=eth0
CONF=/etc/snort/snort.conf
USER=snort
GROUP=snort
PASS_FIRST=0
LOGDIR=/var/log/snort
#ALERTMODE=fast
# ATTENZIONE !!! il impostazionio indicato sopra è fondamentale
# per utlizzare snort con mysql.
# Si raccomanda di accertarsi che questa riga sia commentata
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
JPGraph
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.
Scompattare il tarball direttamente nella Document Root di apache, in genere
/var/www/html.
dare alle directory create chmod 755 e ai files chmod 644.
ADODB
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.
Scompattare anch'esso nella Document Root di apache
dare alle directory create chmod 755 e ai files chmod 644.
ACID
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.
Scompattare anch'esso nella Document Root di apache
dare alle directory create chmod 755 e ai files chmod 644 ed effettuare i seguenti
impostazioni 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
A questo punto riavviate snort tramite:
service snortd start
accertatevi che apache sia attivo:
service httpd status
e accedete a ad ACID digitando nel browser:
http://localhost/acid
al primo accesso acid vi chiederà di integrare il database con delle sue tabelle,
rispondete positivamente.
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'.
WEBMIN
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.
La maggior parte dei moduli per gestire sono già istallati tramite rpm, alcuni
tra i quali snort invece devono essere istallati successivamente. Per cui 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
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".
Nella versione istallata da me ho trovato un errore nel codice Perl del modulo che
non mi consentiva di visualizzare, cliccando su "Rule Set", di visualizzare 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.
Questi sono i pannelli di amministrazione delle regole di snort tramite
webmin.
Conclusioni
L'istallazione di un IDS effieciente 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.
Dove collocare 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 della rete proposto.
Nota dell'autore: 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. Si tenga presente che questo tutorial vuole essere una guida base per l'istal- lazione e configurazione, per cui si rimanda alla copiosa manualistica per gli approfondimenti.