Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Snort per Linux

Installazione e configurazione dell'IDS Snort con pacchetti rpm: il sistema per rilevare attacchi e intrusioni su sistemi Linux
Installazione e configurazione dell'IDS Snort con pacchetti rpm: il sistema per rilevare attacchi e intrusioni su sistemi Linux
Link copiato negli appunti

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

Pacchetti da istallare necessariamente:

Programma Descrizione Link
Snort Introdution Detection System
http://www.snort.org/dl/binaries/linux/

Pacchetti che si considerano già istallati:

Programma Descrizione
Apache Web server
MySQL Database relazionale
PHP Inteprete del linguaggio di programmazione omonimo
Perl Inteprete del linguaggio di programmazione omonimo

Pacchetti opzionali da istallare:

Programma Descrizione Link
JPGraph Librerie per la creazione di grafici tramite php http://members.chello.se/jpgraph/ jpgdownloads/jpgraph-1.14.tar.gz
ADODB Librerie php per l'interfacciamento ai database http://php.weblogs.com/ ADODB#downloads
Acid Interfaccia web in php per l'elaborazione dei dati di snort http://acidlab.sourceforge.net/acid-0.9.6b23.tar.gz
Webmin Interfaccia web in Perl per l'amministazione di apache,
mysql, snort e molto altro. Non ha bisogno di apache per
funzionare
http://msbnetworks.net/snort/ download/snort-1.1.wbm
Modulo Snort per Webmin Modulo per potere amministrare Snort tramite Webmin http://www.webmin.com

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.

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.

Passiamo ora alle installazioni dei pacchetti che abbiamo citato.

Installazione dei pacchetti

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;

SNORT

scaricare i pacchetti rpm, si raccomanda di scaricare ed istallare sia
snort*.rpm che snort-mysql*.rpm

istallazione:

rpm -Uvh snort*

alla fine avremo snort istallato e già attivo, ma sono necessarie vari interventi:

  1. fermare il server snort tramite:

    > service snortd stop

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

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

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

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

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

> tar -xzvf jpgraph-1.14.tar.gz

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

> tar -xzvf adodb411.tgz

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

> tar -xzvf acid-0.9.6b23.tar.gz

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.

Pannello ingresso Acid

Questo è il pannello di report cronologico riassuntivo.

Report Cronologico degli Alert

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.

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

Spiegazione alert

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

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

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.

Setting di snort tramite webmin

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

Schema rete

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.

Ti consigliamo anche