IDS i IPS amb Snort

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

Base ids.png

Acrònims:

  • IDS: Intrusion Detection System
  • IPS: Intrusion Prevention System
  • NIDS: Network Intrusion Detection System
  • NIPS: Network Intrusion Prevention System

Snort és un Network Intrusion Prevention System (NIPS) i Network Intrusion Detection (NIDS), open source, capaç de realitzar registre (logging) de paquets i anàlisi de tràfic a temps real de xarxes IP.

Snort realitza anàlisi de protocol, cerca/detecció de contingut en el paquets, i s'utilitza de forma habitual per bloquejar (funcionament actiu) o detectar (funcionament passiu) diferents tipus d'atacs i tests, com poden ser buffer overflows, stealth port scans, web application atacs, SMB probes, i intents d'OS fingerprinting, entre d'altres possibilitats. S'utilitza bàsicament per a la prevenció d'intrusions, rebutjant els atacs quan tenen lloc. Snort es pot utilitzar en combinació amb altre software com ara SnortSnarf, sguil, OSSIM i Basic Analysis and Security Engine (BASE, que utilitzarem nosaltres) per proporcionar una informació visual de les dades d'intrusió.

Instal.lació

nota. En aquesta pràctica s'utilitza la ip 192.168.1.133. Tu hauràs de considerar la teva IP (ifconfig per a la interfície que utilitzis), que en la A35, utilitzant wireless, hauria de ser de la forma 192.168.10.x. També has de considerar que la teva xarxa és la 192.168.10.0/24. Els alumnes que utilitzin màquina virtual poden tenir problemes.

Instal.la els següents paquets (entre d'altres que segurament ja tens instal.lats en el teu sistema, mira el primer document)

$ sudo bash
# apt-get install libpcap-dev flex php5-gd php-pear
# mkdir ~/snortfiles
# cd ~/snortfiles

Nota: igual que tcpdump, snort utilitza la llibreria libpcap per capturar els paquets. pcap ve de packet capture

  • php-pear - PEAR - PHP Extension and Application Repository

Hem de descarregar les següents aplicacions:

  • Base 1.4.5 (Basic Analysis and Security Engine)

BASE is the Basic Analysis and Security Engine. It is based on the code from the Analysis Console for Intrusion Databases (ACID) project. This application provides a web front-end to query and analyze the alerts coming from a SNORT IDS system.

# wget http://downloads.sourceforge.net/project/secureideas/BASE/base-1.4.5/base-1.4.5.tar.gz
  • ADOdb 4991
# wget http://downloads.sourceforge.net/project/adodb/adodb-php-4-and-5/adodb-4991-for-php/adodb4991.tgz
  • Barnyard2 1.7
# wget http://www.securixlive.com/download/barnyard2/barnyard2-1.7.tar.gz

Barnyard2 is an open source interpreter for Snort unified2 binary output files. Its primary use is allowing Snort to write to disk in an efficient manner and leaving the task of parsing binary data into various formats to a separate process that will not cause Snort to miss network traffic.

Ja podem instal.lar snort:

# apt-get install snort-mysql

192.168.1.0/24: bloc de 256 adreces

NOTA: en aquest cas posem 192.168.1.0/24 perquè aquesta és la xarxa en què volem treballar. A l'institut utilitzarem 192.168.0.0/16, i si ens volem limitar a la A35: 192.168.10.0/24.

Si configurem Snort amb mode promiscu vol dir que podem monitoritzar tot el tràfic que passi per la nostra interfície, encara que aquesta no sigui el destinatari. Mode no-promiscu vol dir que només ens interessa el tràfic que va dirigit a nosaltres (per exemple, si algú ens fa un ping).

Disabling promiscuous mode means that Snort will only see packets         │  
 │ addressed to the interface it is monitoring. Enabling it allows Snort to  │  
 │ check every packet that passes the Ethernet segment even if it's a        │  
 │ connection between two other computers.b

Si ens hem equivocat, hem de reconfigurar el snort:

# dpkg-reconfigure snort-mysql

(TBD: http://www.question-defense.com/2012/11/04/list-of-ubuntu-snort-debconf-variables)

Nosaltres només utilitzarem snort amb una sola interfície de xarxa en la màquina on s'instal.larà. Si n'utilitzéssim dues (com en el cas del pdf que se't dóna més amunt, podríem tenir una configuració més completa i segura)

# mysql -u root -p
mysql> create database snort;
mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost;
mysql> SET PASSWORD FOR snort@localhost=PASSWORD('yourpasswordhere');
mysql> exit
#

Importem l'esquema de bases de dades de snort:

# cd /usr/share/doc/snort-mysql/
# zcat create_mysql.gz | mysql -u root -p snort

és a dir, descomprimim el fitxer create_mysql.gz (amb zcat), i el seu contingut, que són les ordres de create table, el volquem a dins de la base de dades snort. Verifiquem que ja tenim les taules:

# mysql -u root -ppassword
mysql> SHOW DATABASES;
mysql> use snort;
mysql> SHOW TABLES;
+------------------+
| Tables_in_snort  |
+------------------+
| data             |
| detail           |
| encoding         |
| event            |
| icmphdr          |
| iphdr            |
| opt              |
| reference        |
| reference_system |
| schema           |
| sensor           |
| sig_class        |
| sig_reference    |
| signature        |
| tcphdr           |
| udphdr           |
+------------------+

mysql> exit

Editem el fitxer de configuració: snort.conf

# joe /etc/snort/snort.conf

El professor haurà explicat l'objectiu d'aquest fitxer de configuració, i les seves diferentes parts. Els canvis a realitzar són els següents (pensa en si estàs utilitzar la interfície de xarxa eth0 o eth1 (normalment la wireless és eth1)):

#var HOME_NET any
#var HOME_NET $eth0_ADDRESS
var HOME_NET $eth1_ADDRESS
...
#output log_tcpdump: tcpdump.log
...
# output alert_unified: filename snort.alert, limit 128
# output log_unified: filename snort.log, limit 128
output unified2: filename snort.log, limit 128

NOTA IMPORTANT: De moment posaràs la següent informació:

  • var HOME_NET 192.168.1.131 -> amb aquesta línia estem dient que aquesta és la IP per on passarà tot el tràfic que analitzarà el snort. 192.168.1.131 és la IP del professor, en una xarxa que no és la de l'institut. Tu hauràs de posar la teva IP.
  • var EXTERNAL_NET any -> estem dient que snort escoltarà el tràfic de qualsevol interfície de xarxa de què disposem. Podem posar un rang per si tenim una subxarxa.

D'una banda tenim la interfície que s'utilitza per a detectar les intrusions, però també hem de pensar quines són les interfaces en què volem rebre les dades..

Ara de fet s'ha acabat la instal.lació de snort.

Instal.lació i configuració de BASE

Però ara ho hem d'acabar de configurar-ho, doncs la idea de snort és que es registrin les incidències a una base de dades, i que hi hagi una interfície web per veure els resultats i informes. Configurarem BASE i ADOdb. Per fer-ho, utilitzarem el gestor de paquets de php pear (podem utilitzar pear help, pear list per veure informació)

# pear install --alldeps Mail
PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imagick.ini on line 1 in Unknown on line 0
downloading Mail-1.2.0.tgz ...
Starting to download Mail-1.2.0.tgz (23,214 bytes)
........done: 23,214 bytes
downloading Net_SMTP-1.6.1.tgz ...
Starting to download Net_SMTP-1.6.1.tgz (13,164 bytes)
...done: 13,164 bytes
downloading Net_Socket-1.0.10.tgz ...
Starting to download Net_Socket-1.0.10.tgz (5,429 bytes)
...done: 5,429 bytes
downloading Auth_SASL-1.0.6.tgz ...
Starting to download Auth_SASL-1.0.6.tgz (9,119 bytes)
...done: 9,119 bytes
install ok: channel://pear.php.net/Mail-1.2.0
install ok: channel://pear.php.net/Net_Socket-1.0.10
install ok: channel://pear.php.net/Auth_SASL-1.0.6
install ok: channel://pear.php.net/Net_SMTP-1.6.1

De la mateixa manera:

# pear install --alldeps Mail_Mime
# pear install --alldeps Image_Canvas-0.3.2
# pear install --alldeps Image_Graph-0.7.2

I veiem com aquests paquets s'han instal.lat:

# pear list
PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/imagick.ini on line 1 in Unknown on line 0
Installed packages, channel pear.php.net:
=========================================
Package          Version State
Archive_Tar      1.3.3   stable
Auth_SASL        1.0.6   stable
Console_Getopt   1.2.3   stable
Image_Canvas     0.3.2   alpha
Image_Color      1.0.4   stable
Image_Graph      0.7.2   alpha
Mail             1.2.0   stable
Mail_Mime        1.8.2   stable
Net_SMTP         1.6.1   stable
Net_Socket       1.0.10  stable
Numbers_Roman    1.0.2   stable
PEAR             1.9.0   stable
Structures_Graph 1.0.2   stable
XML_Util         1.2.1   stable

anem al directori snortfiles que hem creat prèviament:

# cd ~/snortfiles
# tar -zxvf adodb4991.tgz
# tar -zxvf base-1.4.5.tar.gz
# mv adodb /var/www
# mv base-1.4.5 /var/www

fitxer /etc/php5/apache2/php.ini:

    Find “Dynamic Extensions” and add the following to the end of that section:
    extension=mysql.so
    extension=gd.so

    Find “error_reporting = E_ALL & ~E_DEPRECATED”
    Replace with error_reporting = E_ALL & ~E_NOTICE
    save and exit

i ara ja podem editar el fitxer apache2.conf, com hem fet en d'altres ocasions, per tal de configurar un site Apache on veurem els informes de seguretat:

# joe /etc/apache2/apache2.conf

Afegim al final de tot:

servername snortsvr.local

i reiniciem el servidor (en aquest cas ho fem amb apache2ctl, que és un front-end del dimoni d'Apache, veure man apache2ctl):

# apache2ctl restart

Només ens queda afegir un enllaç simbòlic a base-1.4.5 (per tal de poder referenciar-lo simplement com a base i fer-lo independent de la versió):

 
# cd /var/www
# ln -s base-1.4.5 ./base
# chmod a+w base

I ara ja podem veure la pàgina de base (que és el front-end web de snort):

Ens reenvia al directori SETUP, i això és el que haurem de fer ara, configurar la connexió de snort i de la base de dades:

  • 1) Set the path to adodb to /var/www/adodb (nota: no ficar la barra final!)
  • 2) Database Name=snort, Database Host=localhost,Database User=snort, Database Password=yourpassword (ficar el password de l'usuari snort per connectar-se a la base de dades snort, el que has ficat abans)
  • 3) check use authentication system
    • Admin User Name=snort
    • Password=yourpassword
    • Full Name=snort
  • 4) Click Create BASE AG and click on step 5
  • 5) Test your login and password and verify everything is working OK

Un cop hem fet els canvis en el fitxer de configuració (que està a base/base_conf.php) ja podem treure permisos:

# chmod og-w base

1a prova: snort com a sniffer

# snort -c /etc/snort/snort.conf -i eth1 -dev (utilitzar eth0/eth1, el que correspongui)(arrencar com a root)

L'opció -dev és interessant (fa de sniffer), perquè veig informació en la sortida de pantalla (el problema és que no està documentada l'opció -dev fent # snort -h o # man snort). (He vist aquesta opció a http://www.youtube.com/watch?v=nAWN989WA0A)

       Snort has three primary uses.  It can be used as a straight packet sniffer like tcpdump(1), a packet logger (useful
       for network traffic debugging, etc), or as a full blown network intrusion detection system.

Per veure com funciona, només cal refrescar una pàgina web en el firefox, i veure com en la consola de sortida del snort es detecta informació.

Instal.lació i configuració de Barnyard2

# cd ~/snortfiles
# tar -zxvf barnyard2-1.7.tar.gz
# cd barnyard2-1.7
# ./configure --with-mysql && make && make install
# cp etc/barnyard2.conf /etc/snort
# mkdir /var/log/barnyard2

# joe /etc/snort/barnyard2.conf

Find “#config hostname: thor” and change it to “config hostname: localhost”
Find “#config interface: eth0″ and change it to “config interface: eth0” (canviar-ho pel que correspongui: eth0, eth1. Mirar ifconfig. Típicament, si treballes amb wireless és eth1).
Find “output database” and insert below that line “output database: alert, mysql, user=snort password=password dbname=snort host=localhost”
Save and exit

(recordar de ficar el password correcte!)

Començar a treballar

Primer de tot arrenquem el snort: (com es veu en la primera línia, estem treballant en mode IDS)

# snort -c /etc/snort/snort.conf -i eth1 (utilitzar eth0/eth1, el que correspongui)(arrencar com a root)

Running in IDS mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
Parsing Rules file "/etc/snort/snort.conf"
PortVar 'HTTP_PORTS' defined :  [ 80 ]
PortVar 'SHELLCODE_PORTS' defined :  [ 0:79 81:65535 ]
PortVar 'ORACLE_PORTS' defined :  [ 1521 ]
PortVar 'FTP_PORTS' defined :  [ 21 ]
Tagged Packet Limit: 256
Loading dynamic engine /usr/lib/snort_dynamicengine/libsf_engine.so... done
Loading all dynamic preprocessor libs from /usr/lib/snort_dynamicpreprocessor/...
  Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_dce2_preproc.so... done
  Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_ftptelnet_preproc.so... done
  Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_smtp_preproc.so... done
  Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_ssl_preproc.so... done
  Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_dcerpc_preproc.so... done
  Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_dns_preproc.so... done
  Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//lib_sfdynamic_preprocessor_example.so... done
  Loading dynamic preprocessor library /usr/lib/snort_dynamicpreprocessor//libsf_ssh_preproc.so... done
  Finished Loading all dynamic preprocessor libs from /usr/lib/snort_dynamicpreprocessor/
Log directory = /var/log/snort
...
Not Using PCAP_FRAMES

Si veiem al final el text Not Using PCAP_FRAMES vol dir que ho estem fent bé.

Fer un ping. Configurar les regles

Les regles estan definides a la carpeta /etc/snort/rules (mirar), i alhora en el fitxer de configuració /etc/snort/snort.conf tenim definides quines d'aquestes regles estan actives.

Anem a fer uns pings al nostre servidor i anem a veure com aquests pings queden registrats en els logs (i en la base de dades) del sistema de detecció d'intrusions (és a dir, en el snort, que és el IDS que estem configurant).

En un altre terminal, fem:

$ ls -la /var/log/snort
...
-rw-------  1 root  adm     0 2011-11-28 01:35 snort.log.1322440514

Veiem que hi ha un snort.log amb un sufix de 10 dígits.

# joe /var/log/snort/barnyard.waldo

/var/log/snort
snort.log
1322440514                                    
0

(hauràs de ficar els 10 dígits que t'han sortit a tu)

Ara executem barnyard2 sobre aquest fitxer:

# /usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf -G /etc/snort/gen-msg.map -S /etc/snort/sid-msg.map -d /var/log/snort -f snort.log -w /var/log/snort/barnyard.waldo

...
Opened spool file '/var/log/snort/snort.log.1322440514'
Waiting for new data

A la consola del barnyard2 és on es registrarà la informació dels possibles atacs, que alhora la tindrem a la web de forma gràfica a mida que la refresquem (F5)

Ara anem a detectar un ping, que és protocol ICMP. En el fitxer de configuració /etc/snort/snort.conf llegeixo:

# The following rulesets are disabled by default:
#
#   web-attacks, backdoor, shellcode, policy, porn, info, icmp-info, virus,
#   chat, multimedia, and p2p

Per tant he d'afegir les regles per a ICMP. Les regles estan definides en la carpeta /etc/snort/rules, i aquí puc veure que hi ha els fitxers icmp.rules i icmp-info.rules. Per tant, afegeixo les línies:

include $RULE_PATH/icmp.rules -> aquesta regla ja estava
include $RULE_PATH/icmp-info.rules

És important ficar la regla icmp-info.rules. Un altre tema important és adonar-se que fer un ping a la pròpia màquina no es considera un problema de seguretat i no es detecta. Per fer la prova s'ha de fer un ping a una altra màquina (es detecta el echo), o millor, des d'una altra màquina a la nostra màquina (recorda que pots obrir una sessió SSH en el servidor 192.168.0.10)

Per tant, ara ja podem fer un ping a la nostra màquina (des d'una altra màquina), i veure com queda registrat aquest ping a tres nivells:

  • en la consola del barnyard2
  • en el BASE, que és la nostra interfície web
  • en la base de dades mysql (BASE llegeix del mysql). Per veure la informació en el mysql:
mysql> select * from data;
mysql> select * from event;
mysql> select * from icmphdr;
mysql> select * from iphdr;
mysql> select * from signature;
mysql> desc data
mysql> desc icmphdr;
mysql> select * from icmphdr i,data d where i.sid=d.sid and i.cid=d.cid;

Prova amb nmap

proves que es poden fer (en funció dels servidors que tinguem instal.lats): ping nmap, telnet, ssh

Per exemple, fer

$ nmap 192.168.1.131

des d'una altra màquina el barnyard2 detecta la següent informació:

11/28-13:30:50.912660  [**] [1:1421:11] SNMP AgentX/tcp request  [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.1.128:42691 -> 192.168.1.131:705
11/28-13:30:51.200170  [**] [1:1418:11] SNMP request tcp  [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.1.128:43133 -> 192.168.1.131:161

i en el BASE queda registrat de la següent manera:


   	 ID  	 < Firma >  	 < Marca de tiempo >  	 < Dirección Origen >  	 < Dirección Dest >  	 < Proto capa 4 > 
	#0-(1-62) 	[cve] [icat] [cve] [icat] [bugtraq] [bugtraq] [bugtraq] [snort] SNMP request tcp 	2011-11-28 13:30:51 	192.168.1.128:43133 	192.168.1.131:161 	TCP
	#1-(1-61) 	[cve] [icat] [cve] [icat] [bugtraq] [bugtraq] [bugtraq] [snort] SNMP AgentX/tcp request 	2011-11-28 13:30:50 	192.168.1.128:42691 	192.168.1.131:705 	TCP

Els log

Els log els podem veure a /var/log/snort. Ara bé, com que estem utilitzant el format unified2 (fitxer de configuració /etc/snort/snort.conf), que és un sistema binari, no podem veure informació textual dins dels fitxers log. Però aquests fitxes són digerits per barnyard2, i com es comenta, es guanya en eficiència.

# unified: Snort unified binary format alerting and logging
# -------------------------------------------------------------
# The unified output plugin provides two new formats for logging and generating
# alerts from Snort, the "unified" format.  The unified format is a straight
# binary format for logging data out of Snort that is designed to be fast and
# efficient.  Used with barnyard (the new alert/log processor), most of the
# overhead for logging and alerting to various slow storage mechanisms such as
# databases or the network can now be avoided.
#
# Check out the spo_unified.h file for the data formats.
#
# Two arguments are supported.
#    filename - base filename to write to (current time_t is appended)
#    limit    - maximum size of spool file in MB (default: 128)
#
# output alert_unified: filename snort.alert, limit 128
# output log_unified: filename snort.log, limit 128
output unified2: filename snort.log, limit 128

la idea és que tenim un nom de fitxer base, snort, al qual afegim un timestamp (una marca de quan es crea el fitxer). Cada vegada que arrenca barnyard2 es crea un fitxer nou (que és el cas perquè ara estem fent proves). En el cas d'estar en producció (24/7/365), el normal és que quan s'arriba al límit de 128MB es creen fitxers nous.

Les regles: rules

Snort utilitza un llenguatge de descripció de rebles simple, lleuger, flexible i bastant potent. Hi ha unes quantes regles simples que s'han de recordar quan es defineixen les regles amb Snort.

El primer és que les regles de Snort han d'estar en una sola línia, el parser de Snort no sap processar regles on hi hagi retorns de carro.

Les regles de Snort es divideixen en dues seccions: la capçalera de la regla i les opcions de la regla. La capçalera conté informació de l'acció, protocol, direccions IP/màscares d'origen i destí, i els ports. La secció d'opcions conté els missatges d'alerta, i quines parts del paquet seran inspeccionats per decidir si la regla s'ha de processar o no.

Aquest és un exemple de regla:

alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)

Fins al primer parèntesi és la capçalera, i tot el que hi ha dins els parèntesi són les opcions. En aquest exemple com a opcions tenim content i msg. Utilitzar opcions és opcional, no és obligatori, i s'utilitza per definir regles més precises. Totes les opcions han de ser certes per tal que l'alerta es processi (AND lògic de totes les opcions). A l'hora, les diferents línies en un fitxer de rules es pot considerar com un OR lògic.

En el nostre cas anem a considerar el cas més senzill de fer un ping. Quan fem un ping des d'una altra màquina al nostre servidor IDS (Snort), en la consola del Barnyard2 recollim:

11/29-00:55:09.066176  [**] [1:368:6] ICMP PING BSDtype  [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.1.128 -> 192.168.1.131
veig que el [1:368:6] que surt en la regla es tradueix com a sid:368; rev:6; (identificador de la regla, número de revisió de la regla). La regla és:

Veiem que la regla que s'activa és la 386 (sid), revisió 6, que podem trobar en el fitxer icmp-info.rules:

alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"ICMP PING BSDtype"; itype:8; content:"|08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17|"; depth:32; reference:arachnids,152; classtype:misc-activity; sid:368; rev:6;)

Ho podem llegir com: es produeix una alerta quan en el protocol ICMP es rep un paquet provinent de qualsevol màquina de la xarxa al nostre servidor IDS, en qualsevol port. Si amb un sniffer miréssim el contingut del paquet veuríem el valors hexadecimals que es mostren en l'opció content.

un altre tipus de ping és el que fem des de la nostra màquina a una altra, i que rebem un echo:

11/29-00:59:26.498831  [**] [1:408:5] ICMP Echo Reply [**] [Classification: Misc activity] [Priority: 3] {ICMP} 192.168.1.1 -> 192.168.1.131
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"ICMP Echo Reply"; icode:0; itype:0; classtype:misc-activity; sid:408; rev:5;)

NOTA: El més correcte per tenir regles actuals és baixar-se la última versió de snort a snort.org, doncs la instal.lació a Ubuntu 10.04 instal.la la versió de snort 2.8.5, que ja està una mica passada.

Prova amb telnet

Per testejar snort puc fer per exemple telnet. Com que telnet no és un protocol segur, es considera un atac. El primer que he de fer és instal.lar el servidor telnet, si no està instal.lat.

# apt-get install telnetd

Afegim la següent línia al fitxer telnet.rules, per tal de detectar un intent de login incorrecte:

alert tcp $TELNET_SERVERS 23 -> $EXTERNAL_NET any (msg:"TELNET login incorrect"; content:"Login incorrect"; flow:from_server,established; reference:arachnids,127; classtype:bad-unknown; sid:718; rev:6;)

En les màquines linux el client de telnet ja està instal.lat. Des de windows, recordem que amb putty podem marcar l'opció telnet en comptes de SSH.

$ telnet 192.168.1.131

i ara ja puc fer un telnet:

$ telnet 192.168.1.131
Trying 192.168.1.131...
Connected to 192.168.1.131.
joan-laptop login: 
Password: 
Linux joan-laptop 2.6.32-34-generic #77-Ubuntu SMP Tue Sep 13 19:40:53 UTC 2011 i686 GNU/Linux
Ubuntu 10.04.3 LTS

Welcome to Ubuntu!

Però si faig un login amb un usuari que no existeix, Snort ho detecta amb la regla que acabem de crear:

11/29-12:07:35.397735  [**] [1:718:6] TELNET login incorrect  [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 192.168.1.131:23 -> 192.168.1.128:41288

Snort com a IPS: mode prevenció (in-line mode)

Es tracta de què quan rebem un paquet sospitós, aquest es descarta, no es deixa arribar al destí (a més de registrar-lo). La idea bàsica és que en les rules, en comptes de alert s'ha de posar drop. Per fer-ho, hem de compilar Snort des de les fonts amb l'opció in-line mode (no és el nostre cas, que hem instal.lat Snort des d'un paquet ubuntu dels repositoris, i de fet ens ha quedat instal.lada la versió 2.8.5 que no és ni molt menys la última)

Snort in-line rule options:

  • Drop – The drop rule tells iptables to drop the packet and log it via usual snort means
  • Sdrop – The sdrop rule tells iptables to drop the packet. Nothing is logged.
  • Reject – The reject rule type tells iptables to drop the packet; log it via usual snort means; and send a TCP reset if the protocol is TCP or an ICMP port unreachable if the protocol is UDP.

S'utilitzaria l'opció -Q

# snort -c /etc/snort/snort.conf -i eth1 -Q
Enabling inline operation
Running in IDS mode
...

Si treballéssim en mode IPS, la pràctica més senzilla que podríem fer és detectar la regla que s'activa quan fem um ping. Canviar alert per drop, i aleshores, la màquina que fa el ping no rebria la informació del ping, doncs el paquet se'l menja el snort i no es processa.

Altres referències

Vídeos

en aquest video es veu clarament com faig un ping i un telnet i els logs el detecten. A part de veure els resultats a BASE (interfície web), també s'ha de veure la informació directament en els log, que en principi estana a /var/log/snort (però aquí la informació no està en text pla)

Powerpoint:

  • Fitxer:IPS Lecture.ppt.zip

En el powerpoint hi ha diferents topologies de xarxa. Els sistemes IDS/IPS poden ser hardware, com els sistemes Cisco que es veuen en el Powerpoint.

Conclusions de fer la pràctica a classe

  • la pràctica ha funcionat correctament a classe. L'ordinador del professor en la mateixa xarxa que els ordinadors de l'alumne (A35, wireless, subxarxa 192.168.10.X)
  • Els alumnes han tingut problemes en la instal.lació/configuració de BASE. És important adonar-se que tenir problemes amb BASE no invalida el funcionament correcte de Snort. Els alumnes han de poder veure com snort registra informació dins la bd.
  • snort es pot reconfigurar fent
$ dpkg-reconfigure snort

i es pot tornar a entrar els paràmetres. Concretament, la configuració de la base de dades.

  • si l'engegada de snort reporta algun problema (queda registrat el problema en la sortida per pantalla, per exemple, un problema amb la regla virus.rules), mirar de resoldre aquest problema (en aquest cas, comentar la regla virus.rules en el fitxer de configuració).
  • Recordar que d'aquesta pràctica allò important és Snort, i BASE i barnyard2 són accessoris.
  • Recordar que diferents versions de l'Ubuntu poden descarregar diferents versions d'una aplicació quan fem apt-get install. Si volem treballar amb mode IPS s'haurà de compilar Snort des de les fonts.

Entrega

Recorda la normativa per entregar les pràctiques al Moodle: ASIX-M11-SAD#Normativa_d.27entrega_de_les_pr.C3.A0ctiques_al_Moodle


creat per Joan Quintana Compte, novembre 2011