IDS/IPS SNORT Chi sono? Alessio Rocchi. Studente di Informatica all'unipi. Socio @System. Membro Xoned Security Team. Varie ed altre. Di cosa Parlo? SNORT come IDS/IPS. Interfaccia web di controllo per SNORT. Accenni su come scrivere regole. Una parte del materiale usato per creare le slides e` preso da snortattack.org.
Cosa sono gli IDS/IPS? IDS sta` per: Intrusion Detection System, ovvero un metodo atto a generare degli alerts in caso di riscontri positivi su alcuni eventi specificati dall'amministratore IPS invece significa: Intrustion Prevention System, a differenza degli IDS questi ultimi non si limitano a genere alerts, ma si occupano anche di bloccare l'evento che ha sollevato l'eccezione. Per fare tutto cio` possiamo utilizzare SNORT.
Requisiti Sistema operativo: Linux Distribuzione: Qualsiasi, noi useremo Gentoo per questa guida. Web Server: Qualsiasi, noi utilizzeremo Apache. IDS/IPS: SNORT. Web Monitor Application: BASE. Database Server: MySQL (o Postgres). Conoscenze sul TCP/IP. Una buona dose di pazienza.
Installazione SNORT Editiamo /etc/make.conf inserendo le seguenti USE flags: dynamicplugin,postgres,apache2,php,pcre Andiamo ad emergere snort: emerge -av snort Creiamo il database dove risiederanno I logs. /etc/init.d/mysql start mysql -u root -p create database snort_log; Settiamo I permessi per l'utente grant INSERT,SELECT,UPDATE,CREATE,DELETE,EXECUTE on snort_log.* to 'utente@localhost'; SET PASSWORD FOR 'utente@localhost'=password('new_password'); flush privileges; exit;
Installazione SNORT Parte II Importiamo il database e la sua struttura. bzcat /usr/share/doc/snort-[version]/schemas/create_mysql.bz2 \ mysql -u root -p snort_log Editiamo /etc/conf.d/snort inserendo: SNORT_OPTS="-D -u snort -i $IFACE -c $CONF" Editiamo /etc/snort/snort.conf e mofichiamo: output database: log, mysql, user=utente dbname=snort_log \ password=[password scelta quando abbiamo creato l'utente \ user 'utente'] host=localhost Controlliamo I permessi ed avviamo snort: chown root:snort /etc/snort/snort.conf chmod 640 /etc/snort/snort.conf /etc/init.d/snort start Controlliamo che snort funzioni correttamente: echo "SELECT hostname FROM sensor;" mysql -u root -p snort_log
Analisi dei reports I reports generati da snorts sono notevolmente fastidiosi da leggere e da filtrare. Ci serve un qualche tool che ci dia accesso immediato e possibilita` di eseguire filtri sui reports nel minor tempo e complessita` possibili. Per questo, possiamo avvalerci di BASE, un tool scritto un php derivante da ACID.
Installazione BASE Controlliamo di avere le seguenti flags in /etc/make.conf php session pcre hardenedphp gd pear apache2 *postgres mysql ssl png gif jpeg cli xml Smascheriamo ed emergiamo le dipendenze echo "dev-php/pear-image_color" >> /etc/portage/package.keywords echo "dev-php/pear-image_canvas" >> /etc/portage/package.keywords echo "dev-php/pear-numbers_roman" >> /etc/portage/package.keywords echo "dev-php/pear-image_graph" >> /etc/portage/package.keywords echo "dev-php5/jpgraph" >> /etc/portage/package.keywords emerge gd dev-php5/jpgraph adodb dev-lang/php PEAR-PEAR Procediao emergendo BASE echo "net-analyzer/base" >> /etc/portage/package.keywords emerge base Adesso passiamo alla configurazione di BASE.
Configurazione di BASE Controlliamo la configurazione e settiamo correttamente I parametri $alert_dbname = "snort_log"; $alert_host = "localhost"; $alert_port = ""; $alert_user = "utente"; $alert_password = "[password inserita quando abbiamo creato l'utente di snort]"; Procediamo inserendo nel browser il seguente indirizzo: https://localhost/base/base_db_setup.php Una volta terminato il Setup possiamo urlare il seguente indirizzo: https://localhost/base/base_main.php Notate che il protocollo usato per l'accesso non e` http standard ma https quindi tramite SSL, questo per evitare che I dati passino in chiaro ed un qualche malintenzionato possa intercettare qualche dato prezioso. Il setup base del nostro IDS e` terminato.
SNORT come IPS SNORT puo` essere utilizzato anche come IPS. Di base, non provvede a fornire tali funzioni, grazie pero` all'estensione inline, possiamo utilizzarlo come un IPS, in quanto puo` appoggiarsi non alle libpcap per il capturing dei pacchetti ma ad iptables con l'estenesione queue che permette a snort di gestire I singoli pacchetti che veicolano sull'interfaccia di rete.
Preprocessori per reti LAN Clamav - questo preprocessore è presente solo se specificato in fase di installazione (--enable-clamav). Riscontra la presenza di Virus definiti nel database di Clamav che non siano ne crittografati ne file compressi. Questo preprocessore risulta estremamente efficace nel blocco di messaggi di posta Phishing. Rpc decode - questo preprocessore riassembla un flusso rpc in un singolo pacchetto per facilitarne l'analisi, se il preprocessore stream4 è presente analizzerà solo il traffico proveniente dal client. Telnet decode - questo preprocessore normalizza il flusso di caratteri del protocollo telnet di una sessione. Indircarne le porte da analizzare.
Rules per reti LAN Una volta che sono stati dichiarati i preprocessori, Snort ha bisogno che nel file di configurazione vengano dichiarate le rules da applicare. Ci sono diversi metodi di applicazione delle rules: alert - genera un messaggio di alert e successivamente logga in un file o database il riscontro della regola. log - logga in un file o database. pass - ignora il traffico riscontrato. drop - tramite iptables droppa il pacchetto e logga in file o database reject - tramite iptables resetta la connessione se TCP, se UDP manda un messaggio di icmp host unreachable e logga in file o database sdrop - tramite iptables droppa il pacchetto e non logga.
Esempio di rules In questo caso il compito di questa rules è bloccare miosito.com, fa parte di un insieme di rules scritte per bloccare la navigazione a siti di casinò online, non considerati a norma dalla legge italiana. Il drop imposta l'azione che deve compiere iptables nel momento incui la rules viene rilevata. drop tcp $home_net any -> any $http ports ( msg:"italian-law"; flow:established;content: "miosito.com"; classtype:policy-violation; reference:url, www.refurl.net; )