Banner Shishii
Pagina aggiornata il:  22/01/2005 12:06

Pagina Stampabile     Pagina Stampabile

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

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

  1. snort -> IDS

2.2 Pacchetti che si considerano già istallati

  1. apache -> Web server
  2. mysql -> Database realazionale
  3. php -> Inteprete del linguaggio di programmazione omonimo
  4. Perl -> Inteprete del linguaggio di programmazione omonimo

2.3 Pacchetti opzionali da istallare

  1. JPGraph -> Librerie per la creazione di grafici tramite php
  2. ADODB -> Librerie php per l'interfacciamento ai database
  3. Acid -> Interfaccia web in php per l'elaborazione dei dati di snort
  4. 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

# service snortd stop
var HOME_NET 10.0.0.0/24

se ci sono dubbi settare

var HOME_NET any
var RULE_PATH /etc/snort/rules
log, mysql, user=snort 
password=<password> dbname=snort host=localhost
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.

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.

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
# 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.

# chkconfig -del snortd
# chkconfig -add snortd
# chkconfig -level 235 snortd on
# chkconfig -level 235 mysqld on
# chkconfig -level 35 httpd on
# 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.

-
pannello di ingresso di Acid
-

Questo è il pannello di report cronologico riassuntivo.

-
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.

-
pannello di approfondimento su un singolo alert
-

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'.

-
pagina di spiegazione delle caratteristiche di un alert

4.6 WEBMIN

http://www.webmin.com

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

http://localhost:10000 

Troveremo il modulo di amministazione di snort nella sezione "Server".

Questi sono i pannelli di amministrazione delle regole di snort tramite Webmin.

-
pannello di amministrazione delle regole di snort tramite Webmin
-
pannello 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:

Questo è lo schema di rete proposto.

-
schema di rete proposto

Indice del sito