INTRUSION DETECTION SYSTEMS (IDS)

 

Il rilevamento di intrusioni è la pratica di usare strumenti automatici e intelligenti per rilevare tentativi di intrusione in tempo reale. Questi strumenti sono chiamati Intrusion Detection Systems (IDS). Essi rappresentano una parte importante di qualsiasi architettura di network security fornendo un livello di difesa che monitorizza il traffico di rete per attività sospette e avvisa l’amministratore del sistema quando è individuato traffico potenzialmente ostile. I sistemi di rilevamento di intrusioni sono un fenomeno relativamente nuovo, emerso nei primi anni ’80. Da allora sono stati condotti migliaia di studi sugli IDS e oggi esistono centinaia di sistemi di rilevamento delle intrusioni. Essi sono divisi fondamentalmente in due categorie:

·        Sistemi basati su regole. Si appoggiano a librerie e database di attacchi e di firme di attacchi conosciuti. Quest’ultima fa in modo che l'IDS sia programmato per interpretare una serie di pacchetti, o una parte di dati contenuti in essi, come un attacco. Per la rilevazione di un'intrusione vengono utilizzati degli algoritmi, chiamati pattern matching algorithms, che si basano sul confronto tra le stringhe memorizzate al loro interno (sono delle stringhe che contengono la configurazione di un attacco sotto forma di regola) e la stringa che è stata acquisita dall'IDS. Se la stringa acquisita dall'IDS e una di quelle memorizzate coincidono, l'algoritmo riconosce un attacco e lo comunica all'IDS che opererà nel modo più consono a quello programmato. Questo sistema viene molto usato dagli IDS commerciali che periodicamente mettono a disposizione degli utenti alcuni algoritmi con un elenco aggiornato dei tipi di attacco. In tal modo l'IDS posseduto dall'utente è sempre aggiornato. Il principale inconveniente dei sistemi basati sulle regole è che dipendono dalla tempestività: il database degli attacchi deve essere aggiornato, e mantenuto diligentemente. Inoltre, a volte ci può essere una relazione inversa fra la specificità delle regole e il tasso di rilevamenti assicurato. Cioè se una regola è troppo specifica, gli attacchi che sono simili ma non identici riusciranno a passare.

·        Sistemi che si adattano. Questi usano tecniche più avanzate, compresa l’intelligenza artificiale, non solo per riconoscere le firme degli attacchi noti, ma anche per impararne di nuove. I principali inconvenienti dei sistemi che si adattano sono la manutenzione, il fatto che richiedono conoscenze avanzate di matematiche e statistica e l’elevato costo. Sono quindi usati soprattutto in ambienti di ricerca.

A parte la divisione generale esposta in precedenza, un'altra importante divisione è quella che divide gli IDS in Host-Based IDS e in Network IDS (NIDS). Gli IDS del primo tipo permettono di individuare delle intrusioni analizzando la struttura degli audit log del sistema operativo (vedi figura 1a), riuscendo a distinguere i pattern, o strutture sospette, che possono rappresentare un attacco. Questo tipo di IDS ha una buona capacità di scoprire attacchi che sono portati da utenti locali e che mirano ad abusare delle risorse del sistema. Il loro maggior problema consiste nella loro incapacità di interpretare i “network event”, cioè gli eventi provenienti dalla rete, di basso livello.

Gli IDS del secondo tipo sono invece portati proprio all'analisi degli eventi che transitano sulla rete (vedi figura 1b). Essi cercano di rilevare gli attacchi osservando la struttura del traffico della rete. I network IDS hanno una buona capacità di rilevare gli attacchi che riguardano la manipolazione a basso livello dei dati transitanti sulla rete e possono facilmente correlare attacchi contro più macchine di una stessa rete. E' importante capire che i Network IDS, anche se hanno dei determinati vantaggi nei confronti degli Host-Based IDS, hanno anche degli svantaggi. Ad esempio hanno problemi ad esaminare e capire in particolare quello che sta succedendo ad un sistema, una cosa che invece gli IDS di tipo Host-Based sono in grado di fare più facilmente. I Network IDS lavorano analizzando il contesto dei pacchetti transitanti sulla rete. Questi sistemi controllano i pacchetti, analizzano il protocollo usato nella rete ed estraggono informazioni importanti da questi.

 


Figura 1

 

Alcuni  IDS sono:

Snort, Portsentry, Tripwire, Network Flight Recorder.

I possibili attacchi che un IDS deve individuare sono:

1.      Attacchi passivi come lo Sniffing, consistente nello spiare il traffico altrui che attraversa un elemento della rete.

2.      Attacchi attivi come gli attacchi al routing, che consiste nel cambiare in maniera illecita il corretto indirizzamento di una porzione di traffico di rete; lo spoofing in cui l’attaccante dialoga con un server sulla rete, spacciandosi per un computer autorizzato; il denial of service, ossia la negazione di un servizio offerto.

Riassumendo, i requisiti di base di un buon IDS sono i seguenti:

1.      Un sistema deve riconoscere qualsiasi attività o evento sospetto che potrebbe potenzialmente essere un attacco.

2.      Il comportamento di un intruso dovrebbe essere rilevato al più basso livello possibile.

3.      Il sistema deve essere in grado di adattarsi ai cambiamenti dei metodi di un attacco.

4.      Il sistema deve essere in grado di manipolare attacchi multipli.

5.      Il sistema deve essere scalabile e facilmente aggiornabile per rispecchiare i cambiamenti della rete.

6.      Il sistema deve essere in grado di proteggersi dagli attacchi.

Assumendo che tutte le attività intrusive sono necessariamente anomale, i sistemi che adottano una tecnica di anomaly detection compiono in sostanza un’analisi statistica per trovare scostamenti da un comportamento base. Questo tipo di sistemi hanno il vantaggio di rilevare nuovi attacchi singoli o cooperativi. Essi hanno però anche il problema di generare:

1.      FALSI POSITIVI: attività anomale che non sono intrusive ma che sono rilevate come tali.

2.      FALSI NEGATIVI: attività intrusive che non sono anomale e che quindi non sono rilevate.

 

 




SNORT

 

L’idea di Snort nasce dal programma Ip-grab di Mike Borella, ma l’autore e realizzatore è Martin Roesch (pronunciato come "fresh", ma senza la "f”). La prima release è datata 21/12/1998, ma la svolta avvenne l’8/12/99 quando nella versione 1.5 fu aggiunta l’architettura modulare. La storia delle versioni di Snort, con le modifiche ed i miglioramenti eseguiti dalla sua ideazione ad oggi, sono riportati nel ChangeLog file reperibile sul sito www.snort.org/ChangeLog.html. Le Versioni di Snort che sono state sviluppate sono le seguenti


·        22 Dic 1998 Snort-0.96.tar.gz

·        14 Gen 1999 Snort-0.97.tar.gz

·        21 Gen 1999 Snort-0.98.tar.gz

·        28 Gen 1999 Snort-0.99.tar.gz

·        18 Feb 1999 Snort-0.99b1.tar.gz

·        06 Mar 1999 Snort-0.99b2.tar.gz

·        08 Mar 1999 Snort-0.99b3.tar.gz

·        21 Mar 1999 Snort-0.99rc1.tar.gz

·        22 Mar 1999 Snort-0.99rc2.tar.gz

·        24 Mar 1999 Snort-0.99rc3.tar.gz

·        06 Apr 1999 Snort-0.99rc5.tar.gz

·        19 Apr 1999 Snort-0.99rc6.tar.gz

·        28 Apr 1999 Snort-1.0.tar.gz

·        20 Mag 1999 Snort-1.0.1.tar.gz

·        21 Giu 1999 Snort-1.1.tar.gz

·        02 Ago 1999 Snort-1.2.tar.gz

·        06 Ago 1999 Snort-1.2.1.tar.gz

·        26 Set 1999 Snort-1.3.tar.gz

·        13 Ott 1999 Snort-1.3.1.tar.gz

·        09 Dic 1999 Snort-1.5.tar.gz

·        20 Gen 2000 Snort-1.5.1.tar.gz

·        26 Feb 2000 Snort-1.5.2.tar.gz

·        20 Mar 2000 Snort-1.6.tar.gz

·        21 Mag 2001 Snort-1.7.tar.gz

·        09 Lug 2001 Snort-1.8-RELEASE.tar.gz


 

Snort è un software Open Source, con esso sono forniti i sorgenti, ed è possibile distribuirlo e/o modificarlo secondo lo standard GNU GPL. Parte di questo codice è stato preso da tcpdump sviluppato dal Network Research Group nei laboratori della Lawrence Berkeley National ed è copyrighted dall'Università della California Regents (USA). E’ un “semplice” sistema per il rilevamento di intrusioni in rete (NIDS) basato sulla libreria libpcap (http://www-nrg.ee.lbl.gov/). Il termine “semplice” non deve essere frainteso. Si tratta di un software molto efficace, con capacità di eseguire in tempo reale l’analisi del traffico e un packet logging (utile per debuggare il traffico della rete) su IP networks. Esso può compiere analisi dei protocolli, può individuare una varietà di attacchi e probes, così come buffer overflow, port scanning, attacchi CGI e probes SMB. Guardando i file di log si riesce a determinare a quale tipo di attacco si è stati soggetti. Un uso efficace di meccanismi di logging è fondamentale per la sicurezza del sistema. E' possibile usare programmi di filtro dedicati, che periodicamente effettuano uno scanning sui principali file di log di sistema, verificando eventuali “anomalie” come parecchie connessioni dallo stesso indirizzo IP in un brevissimo intervallo di tempo. Si possono anche scrivere programmi di logging dedicati per difendersi, quando possibile, da attacchi tipo SYN flooding.Usa un semplice linguaggio di descrizione di regole flessibili e potenti che consente di descrivere che tipo di traffico dovrebbe essere catturato o ignorato e di individuare traffico ostile o semplicemente sospetto sulla rete. Snort può lavorare in diversi modi:

·        Packet Sniffer: è capace di ispezionare il carico dei pacchetti sulla rete, decodificando il livello di applicazione di un pacchetto e catalogando il traffico basato su un certo contenuto di dati. Può anche filtrare il traffico attraverso BPF (comandi Berkley Packet Filter), i quali lo rendono flessibile nel catalogare specifici tipi di dati basati sul suo insieme di regole.

 

·        Packet Logger: può anche effettuare il log dei pacchetti su linea di comando indirizzati ad una specifica locazione, in un syslog, ed invia alert a video. Uno dei migliori vantaggi è che esso effettua il log in formato leggibile decodificato in una directory basata su IP sorgenti. Esegue anche il log di pacchetti in formato binario su un singolo file.

 

·        Intrusion Detection: può essere usato come IDS su reti dove sono richieste alte prestazioni. Precisamente può essere posizionato tra il firewall, che controlla una sottorete, e la linea esterna non sicura, analizzando in questo modo sia il traffico diretto al firewall, che il traffico nella sottorete controllata. Ha un piccolo sistema di firme ed è disegnato per essere un tool veloce di alerting per gli amministratori quando sono individuate attività sospette.

 

I sistemi operativi su cui si può installare Snort sono:  Linux, OpenBSD, FreeBSD, NetBSD, Solaris, SunOS 4.1.X, HP-UX, AIX, IRIX, Tru64 (tutti sistemi Unix like),  MacOS (su sistemi Macintosh), Win32 (Win9x/NT/2000).

Dopo aver installato Snort, si possono scaricare ed installare dei file di regole aggiornati periodicamente, dall’indirizzo http://www.snort.org/snort-files.htm#Rules. Questi file contengono tutte le regole per una serie di attacchi già noti, ma nulla vieta di scriversi un proprio file di regole.

 

 

 

 

 

 

 


LE REGOLE

 

Ci sono una serie di linee guida da seguire nella scrittura di nuove regole. Esse devono essere scritte su di un'unica riga, infatti, il parser di Snort non riconosce regole scritte su più linee. Bisogna suddividere le regole in due sezioni logiche:

 

·        header: contiene le azioni delle regole, protocollo, indirizzo IP di origine e destinazione, e le informazioni sulle porte. Di conseguenza esso contiene le informazioni che definiscono “chi, dove e cosa fare” dei pacchetti.

 

·        options: contiene messaggi di alert, informazioni su quali parti dei pacchetti devono essere analizzate per determinare se le regole di azione devono essere eseguite. Tale sezione non è specificatamente richiesta da tutte le regole.

 

Una regola di Snort è composta nel seguente modo:

func indica l’azione della regola e può assumere i seguenti valori:

·            alert – genera un alert usando il metodo di alert selezionato, e poi fa il log del pacchetto

·            log – fa il log del pacchetto

·            pass – ignora il pacchetto

·            activate – genera un alert e poi viene attivata un’azione dynamic

·            dynamic – rimane inattiva finché non è attivata da un’azione activate, poi agisce come un log

 

protocollo: indica il protocollo usato dal pacchetto che può essere TCP, UDP o ICMP;

 

sorg_ip/mask, dest_ip/mask: indicano rispettivamente indirizzo IP sorgente e destinazione del pacchetto insieme al blocco CIDR che indica la netmask  utilizzata. In particolare il  blocco CIDR /24 indica una Class C network, /16 una Classe B network  e /32  indica uno specifico indirizzo macchina. Per esempio la combinazione sorg_ip/mask  192.168.1.0/24 si riferisce al blocco di indirizzi da 192.168.1.1 a 192.168.1.255.

 

sorg_port, dest_port: indicano rispettivamente il numero decimale della porta sorgente e destinazione. Può essere indicato anche un intervallo usando l’operatore “:”;

Per quanto riguarda gli indirizzi IP e le porte si può usare la parola “any”, che indica che viene accettato qualsiasi valore.

 

->: indica la direzione del traffico (dalla sorgente alla destinazione) che può essere anche inversa (<-) o bidirezionale (<>);

 

Ogni opzione contiene una delle seguenti parole chiavi:

-         content: cerca un determinato pattern nel payload del pacchetto. Esso può contenere un misto di testo e dati binari. Questi ultimi sono generalmente racchiusi tra caratteri di pipe (“|”) e rappresentati in esadecimale;



-         msg: stampa un messaggio di alert a video o nel file di log. E’ semplicemente una stringa di testo che usa lo “\” come carattere di escape per indicare un carattere discreto che potrebbe altrimenti confondere il parser di regole di snort;



-         logto: crea il log del pacchetto in un file specificato dall’utente invece che sullo standard output;



-         ttl: testa il valore del campo TTL nell’header IP;



-         tos: testa il valore del campo TOS nell’header IP;



-         id: testa il campo fragment ID nell’header IP per uno specifico valore, alcuni tools di hacking settano questo campo per scopi specifici diversi;



-         ipoption: testa il valore dei campi IP option per cercare un codice specifico;



-         dsize: confronta la taglia del carico (payload) di un pacchetto con un determinato valore per prevenire problemi di buffer overflows;



gli operatore > e < sono opzionali.

-         flags: testa i flag TCP per alcuni valori;



-         seq: testa il valore del campo sequence number TCP con un determinato valore;



-         ack: testa il valore del campo acknowledgment TCP con un determinato valore. È usato per individuare  NMAP TCP ping. Un NMAP TCP ping setta  questo campo a zero e manda un pacchetto con il TCP ACK flag settato per determinare se un host sulla rete è attivo;



-         itype: testa il valore del campo type ICMP con un determinato valore;



-         icode: testa il valore del campo code ICMP con un determinato valore e quelli fuori di un certo range sono identificati come traffico sospetto;



-         icmp_id: testa il valore del campo ID ICMP ECHO con un determinato valore;



-         icmp_seq: testa il valore del campo sequence number ICMP ECHO con un determinato valore;



-         content-list: cerca un insieme di pattern nel payload del pacchetto;



-         offset: modificatore per l’opzione content, setta l’offset da cui iniziare un pattern match. È molto usato per regole di CGI scan detection dove la stringa di ricerca non è mai trovata nei primi quattro byte del payload;



-         depth: modificatore per l’opzione content, setta la massima profondità cui effettuare un tentativo di pattern matching;



-         nocase: fa il match della stringa specificata dall’opzione content senza far differenza tra lettere maiuscole e minuscole;



-         session: scarta tutte le informazioni aggiunte dal livello applicazione per una data sessione.



La parola chiave printable scarta solo i dati che l’utente dovrebbe normalmente vedere o essere capace di rappresentare. La parola chiave all sostituisce i caratteri non stampabili con i loro equivalenti esadecimali;


-         rpc: controlla i servizi RPC e automaticamente decodifica l’applicazione, procedura e versione, indicando successo quando tutte e tre le variabili corrispondono;



-         resp: causa una risposta attiva;



Le opzioni possono essere combinate in qualsiasi modo per rilevare e classificare pacchetti di interesse e sono processate usando un AND logico; quindi tutte le opzioni elencate nella regola devono essere rispettate affinché sia generato l’alert.

Esempi di Regole:


In riferimento alla regola precedente, ciò che Snort fa, si può rappresentare schematicamente nella figura seguente:




·        alert tcp any any -> 193.205.161.191/23 (msg : “Tentativo di Connessione Telnet”; content: “Last login”;)

Esecuzione di snort settandolo in alert mode, quindi, esecuzione di telnet per la connessione alla macchina su cui è installato (frames 1. e 2.). Rilevamento dei pacchetti durante il tentativo di connessione (frame 3.). Risultato generato da Snort alla fine del rilevamento (frame 4.).


1. Avvio di Snort

2. Prova di connessione telnet

3. Rilevamento pacchetti

4. Visualizzazione risultati


·        alert tcp !192.168.1.0/24 any  -> 192.169.1.0/24 111 (content: “|00 01 86 a5|”; msg: “external mountd access”;) l’indirizzo IP di questa regola indica “ogni pacchetto TCP con indirizzo IP sorgente non uguale ( operatore ‘!’) a 192.168.1.0/24 e indirizzo IP destinazione uguale a 192.168.1.0/24”.

 

·        log tcp any any -> 192.168.1.0/24 !6000:6010  viene effettuato il log del traffico TCP proveniente da ogni porta e diretto a ogni porta destinazione eccetto le porte con numero compreso nel range da  6000 a 6010.


Dalla versione 1.3.1 di Snort sono state introdotte due nuove parole chiavi:

-         include: permette di includere altri file di regole nel file di regole indicato sulla  linea di comando che chiama Snort. Il formato è il seguente:

include: <include file path/name>

            (da notare che non ci vuole il punto e virgola).

-         var: permette di dichiarare delle variabili globali. Il formato è il seguente:

var: <name> <value>

var MY_NET 192.168.1.0/24


·        alert tcp any any -> $MY_NET any (flags: S; msg: “SYN packet”;)

 

        

      

 

 



LA STRUTTURA INTERNA DI SNORT

 

La struttura interna di Snort può essere divisa in quattro moduli principali:

  • packet capturing e decoding engine
  • rules parsing e detection engine
  • logging engine
  • plugin e preprocessor engine

Per usarlo come IDS bisogna passargli a linea di comando (usando l’opzione –c) il file contenente le regole. Partendo in questo modo il programma inizializza le seguenti parti del sistema: dopo aver fatto il parsing degli argomenti della linea di comando usando la funzione ParseCmdLine() , eventualmente passando nella modalità ‘daemon’, inizializza i preprocessori ed i plugin, viene letto il file delle regole. Questa funzione è svolta dalla routine ParseRulesFile() che fa parte del modulo rules parsing engine. Durante questo processo vengono chiamate le routine di inizializzazione dei preprocessori e dei plugin. Quando tutte le regole sono state lette e tradotte nel formato interno, viene inzializzato il sistema di logging e infine viene chiamata la routine Pcap_loop(), come mostrato in figura 2. La routine Pcap_loop() chiama la routine ProcessPacket() ogni volta che viene catturato un pacchetto. ProcessPacket() è il punto di ingresso del modulo packet capturing e decoding engine e funge da switch-point per le diverse routine che svolgono un’iniziale decodifica dei pacchetti a seconda dello specifico datalink. Durante l’intero cammino del pacchetto vengono appropriatamente riempiti i campi della struttura Packet. Ogni routine ( DecodeEthPacket(), DecodePppPacket(), DecodeFDDIPacket() ecc...) riempie i campi della struttura Packet che riguardano il livello datalink e poi, prima di ritornare, chiama la routine di decodifica appropriata per il livello network. Le routine di decodifica del livello network lavorano allo stesso modo; anch’esse riempiono i campi appropriati della struttura Packet e passano  il controllo alle routine di decodifica del livello di trasporto, se queste sono definite, o altrimenti ritornano. Per adesso sono supportati solo i protocolli TCP; UDP e ICMP. Nel paragrafo 2 viene analizzato più in dettaglio il modulo packet capturing e decoding engine.

Figura 2: Schema  a blocchi di Snort

 

Quando la decodifica del pacchetto è terminata, il pacchetto, se richiesto,  viene ‘loggato’, passa attraverso i preprocessori ed infine arriva al detection engine. Quest’ultimo inizia con la funzione Detect() che scorre la lista linkata delle regole e confronta il pacchetto con ognuna di esse. Se il pacchetto combacia con una regola, il processo di rule-ceck viene fermato  e viene generata un’azione di alert o di log.

·        Packet capturing e decoding engine

      La maggior parte delle routine che appartengono a questo modulo si trovano nel file decode.c del codice sorgente di Snort. La routine ProcessPacket() è il punto di ingresso di questo modulo. Essa viene invocata da pcap_loop, una funzione libpcap, quando il pacchetto viene catturato e riceve due puntatori: uno alla struttura libpcap pcap_pkthdr che contiene informazioni sul pacchetto catturato, la sua lunghezza totale, la lunghezza catturata, i timestamp ecc., e un puntatore ad un array di u_char byte che è proprio il pacchetto catturato. Da questo punto in poi viene riempita la struttura Packet che è definita nel file header decode.h.A questo punto viene chiamata la funzione di decodifica del livello datalink (DLD) (vedi figura 3) e il puntatore grinder  è stato assegnato dalla funzione SetPacketProcessor() ad una delle funzioni DLD definite nel file decode.c. Le funzioni DLD definite al momento sono le seguenti:

·        DecodeEthPkt( )  decodifica i pacchetti per le interfacce Ethernet 10Mb/s.

·        DecodeNullPkt( ) decodifica  i pacchetti per l’interfaccia di loopback.

·        DecodeTRPPkt( ) decodifica i pacchetti per le interfacce Token Ring.

·        DecodeFDDIPkt( ) decodifica i pacchetti per le interfacce FDDI.

·        DecodePppPkt( ) decodifica i pacchetti per le interfacce ppp.

·        DecodeSlipPkt( ) decodifica i pacchetti per le interfacce slip.

·        DecodeRawPkt() su alcune piattaforme le interfacce ppp ritornano DLT_RAW quando viene richiesto 

     il tipo del datalink. Questa routine gestisce queste interfacce.

·        DecodeI4LRawPkt( ), DecodeI4LCiscoRawPkt( ), come sopra.

 

Figura 3: Schema a blocchi del ciclo in pcap_loop

 

Ogni decodificatore di pacchetti lavora allo stesso modo; riempie i puntatori appropriati della struttura Packet e poi passa il controllo alla funzione DecodeIP() o DecodeArp() come mostrato in figura 4.

 

Figura 4: Rappresentazione delle relazioni che ci sono tra i diversi decodificatori

 

 

Nel file decode.h sono definite anche le strutture dati per i diversi header dei pacchetti al livello datalink (header   Token Ring, header FDDI, header Ethernet ).

La routine DecodeIP() prende come argomenti la lunghezza del datagramma IP, un puntatore alla struttura Packet e un puntatore al pacchetto stesso.  Dopo alcune verifiche sulla lunghezza del pacchetto (non deve essere minore della lunghezza minima dell’header) e sulla versione del protocollo, se la lunghezza dell’header del pacchetto è maggiore di 20 byte allora il datagramma ricevuto contiene delle opzioni e quindi viene invocata la funzione DecodeIPOptions(). Fatto ciò vengono riempiti i rimanenti campi dell’header .  Quando viene analizzato l’header IP, la funzione DecodeIP() usa il campo ip_proto come switch per invocare la funzione di decodifica del livello di trasporto (TLD) appropriata. Al momento sono definite le funzioni di decodifica per i protocolli TCP, UDP ed ICMP. Se il protocollo non corrisponde a nessuno dei seguenti, viene settato il puntatore al payload del pacchetto IP, il decoding engine termina e il controllo passa alla routine ProcessPacket(). Altrimenti la funzione TLD  riempie i campi appropriati della struttura packet e ritorna.Nel file decode.h sono definite le strutture dati che rappresentano gli header TCP, UDP e ICMP.

               

·        Rules parsing e detection engine:  

      Questo modulo risiede per lo più nel file rules.c del codice sorgente di Snort. Esso può essere ulteriormente diviso in due moduli principali: il traduttore di regole e il detection engine.Il traduttore di regole viene attivato durante la fase di inizializzazione e il punto d’ingresso in questo modulo è la funzione ParseRulesFile(). Essa riceve il nome del file di cui fare il parsing e un contatore del livello di profondità degli include e non ritorna niente. Fondamentalmente questa funzione legge il file linea per linea, saltando i commenti, le linee vuote e rimovendo gli spazi vuoti, e poi passa le linee, una ad una, alla funzione ParseRule(). Questa funzione esegue un’espansione delle variabili, se necessaria, e poi processa ogni direttiva contenuta nella linea traducendo la regola nel formato interno di rappresentazione delle regole oppure eseguendo delle operazioni come gli include di file o definizioni di variabili ecc. Le regole internamente sono rappresentate come liste linkate bidimensionali che rappresentano rispettivamente l’header e le opzioni delle regole (vedi figura 5). Ogni regola internamente è associata alla struttura RuleTreeNode  (vedi fig 6) definita nel file rules.h. Quando una linea contenente una regola viene tradotta nella rappresentazione interna, viene chiamata la funzione ProcessHeadNode(). Questa funzione scorre la catena di regole e la inserisce alla fine. Ogni elemento RuleTreeNode contiene un puntatore alla lista linkata RuleFpList che è la lista contenente le funzioni di ‘detection’ per quell’header, un puntatore al nodo successivo (right), un puntatore alla testa della lista e uno alla lista contenente le opzioni delle regole. In un modo simile sono mantenuti i nodi contenenti le opzioni delle regole. Ogni singola opzione è rappresentata con la struttura OptTreeNode definita nel file rules.h. Il modulo detection inizia con la funzione Preprocessor() che riceve come argomento il puntatore alla struttura Packet. Questa funzione invoca tutte le funzioni dei preprocessori  contenute nella lista PreprocessList e poi chiama la routine Detect() che applica le regole contenute nelle liste descritte in precedenza al pacchetto corrente usando la funzione EvalPacket() e poi fa patire le funzioni di output alert o di log se ciò è richiesto. Le regole sono valutate da “sinistra a destra” e le opzioni “dall’alto in basso”.

Figura 5: Rappresentazione interna delle regole

 

 


Figura 6: Struttura rule tree node

  •  Logging engine

Questo modulo risiede per lo più nel file log.c (anche i plugin output possono considerarsi parte di questo modulo). Ci sono due punti d’ingresso in questo modulo, le funzioni CallAlertPlugins() (vedi figura 7) e CallLogPlugins(). Ci sono i puntatori AlertFunc e LogFunc che puntano alle funzioni menzionate, però ci sono anche le funzioni CallAlertFuncs() e CallLogFuncs() che fanno partire le funzioni di alert/log per una regola (vedi figura 5). Ci sono anche diverse routine che sono messe a disposizione per il packet logging. Queste routine vengono chiamate dai moduli di rule processing e detection engine o dal modulo che si occupa della decodifica dei pacchetti a seconda del tipo di regola o delle opzioni che contiene, delle opzioni passate a linea di comando, del settaggio dei plugin di output ecc. Ci sono funzioni che permettono vari tipi di alert: fast alert, full alert, none alert, unix socket alert, anche se queste funzioni possono considerarsi obsolete in quanto sostituite dai vari plugin output. Infine ci sono funzioni che stampano i vari tipi di pacchetti definiti come PrintEtHeader, PrintIPheader, ecc.

Figura 7: Schema a blocchi della funzione CallAlertPlugins

 Il modulo che si occupa di questa funzione si trova nel file plugbase.c e nei vari file sp* (i file degli Snort plugin). 

In generale ci sono 3 tipi di moduli add-on per Snort: i plugin, i preprocessori e i plugin output. Ognuno di questi 

viene gestito separatamente. La differenza maggiore tra essi consiste nel fatto che i plugin di solito vengono invocati 

con parole chiavi presenti nelle regole, i preprocessori vengono invocati prima che il pacchetto sia decodificato 

mentre i plugin output vengono invocati quando il programma deve generare un messaggio alert o un log. I plugin 

presenti attualmente in Snort possono essere suddivisi in due classi distinte: i preprocessori e i moduli output.

preprocessori sono stati introdotti nella versione 1.5 di Snort ed hanno permesso l’estensione delle funzionalità di 

Snort. Il codice del preprocessore viene eseguito prima che il pacchetto arrivi al detection engine ma dopo che 

esso è stato decodificato dal packet decoder che è un altro elemento fondamentale dell’architettura di Snort. 

Questo meccanismo fa sì che il pacchetto sia analizzato o modificato in modo cosiddetto “out of band”. La parola 

chiave per caricare e configurare il preprocessore è preprocessor e l’istruzione contenuta nel file delle regole di 

Snort ha il seguente formato: preprocessor <name> : <options>. I moduli preprocessori attualmente forniti con 

Snort sono:

§         Minfrag che esamina i pacchetti  che sono stati frammentati ed hanno una grandezza al di sotto di una soglia stabilita. Poiché nelle reti commerciali si è visto che difficilmente il pacchetto viene frammentato al di sotto dei 512k, di solito si usa questa grandezza come soglia.

§         HTTP Decode è usato per processare le stringhe HTTP URI e convertire i loro dati in stringhe ASCII. Questo è stato fatto per sconfiggere quegli attacchi che cercano di evitare l’analisi del contenuto delle strighe, usate per esaminare il traffico http per scopi sospetti. Questo preproccesore prende come argomenti la lista delle porte su cui girano i servizi http (generalmente 80 e 8080).

§         Portscan Detector è stato sviluppato da Patrick Mullen, è definito come un tentativo di connettersi a P porte TCP in T secondi o di mandare P pacchetti UDP in T secondi. Le porte possono anche essere sparse su diversi indirizzi IP. Crea il log sullo standard logging contenente l’inizio e la fine dei portscan da un singolo indirizzo IP sorgente; se viene specificato un file di log, esso indica gli indirizzi IP di destinazione e le porte su cui si è fatto lo scan nonché il tipo di scan.

§         Portscan Ignorehosts scritto anch’esso da Patrick Mullen serve ad indicare una lista di host su cui non si deve applicare il portscan detector. L’argomento di questo preprocessore è la lista degli indirizzi IP/CIDR degli host che si vuole scartare.

§         Defrag (sviluppato da Drados Ruiu) fornisce a Snort la capacità di affrontare completamente la deframmentazione IP, in modo da rendere molto difficile agli hackers la possibilità di raggirare il rilevamento del sistema. Defrag non prevede argomenti e può essere usato al posto del preprocessore Minfrag.

§         Stream è un modulo ancora in versione beta. Fornisce a Snort la funzionalità di riassemblare uno stream di dati TCP. Gli stream di dati TCP su una porta specificata vengono trasformati in un singolo stream che può essere analizzato da Snort per rilevare attività sospette.

§         Spade: Statistical Packet Anomaly Detection Engine fa parte di un progetto più ampio sviluppato dalla Silicon Defense chiamato Spice e sta per Stealthy Probing and Intrusion Correlation Engine. E’ composto da due parti: un sensore (Spade) e un portscan correlator (attualmente in fase di sviluppo). L’operazione base sarà la seguente: Spade monitorerà il traffico della rete e riporterà gli eventi anomali al correlator. Quest’ultimo raggrupperà questi eventi e produrrà dei report di portscan. Più in dettaglio, Spade rivedrà i pacchetti ricevuti da Snort, e riporterà quei pacchetti che ritiene anomali assegnandogli un punteggio (anomaly score). Questo punteggio è assegnato in base alla storia osservata della rete. Meno volte un pacchetto è apparso sulla rete maggiore sarà il suo anomaly score. Verrà creata una tabella delle probabilità che raccoglierà le occorrenze dei diversi tipi di pacchetti. L’anomaly score sarà calcolato direttamente dalla probabilità. Per il pacchetto X, A(X)=log2(P(X)).

§         Le funzioni responsabili delle inizializzazioni dei vari moduli sono:InitPlugins(), InitPreprocessors(), InitOutputPlugins(). Ci sono anche un insieme di funzioni di registrazione (RegisterPlugin(), RegisterPreprocessor() e RegisterOutputPlugin()), che dovrebbero essere chiamate dai plugin prima della loro inizializzazione e delle funzioni che cancellano le diverse liste di moduli all’uscita del programma (AddFunctionToRestartList(), AddFunctionToClearExitList() AddFunctionToSignalList()).

 

 



INSTALLAZIONE

 

Anche se lo spazio occupato dall’eseguibile è di pochi bytes, è preferibile installare Snort su di una macchina ad esso dedicata con nessun servizio attivo, tranne che ssh, controllabile con una metodologia sia a singola che a doppia interfaccia. 

Nella prima, si ascolta il traffico sulla rete dallo stesso lato dell’amministratore.


 

Nella seconda, un’interfaccia ascolta il traffico sulla rete in modo promiscuo mentre l’altra può essere usata dall’amministratore per controllare il sistema da remoto

 

 

La corrente versione di Snort è reperibile all’indirizzo www.snort.org, quella da noi usata è la versione 1.7. Per utilizzare Snort per la cattura dei pacchetti bisogna installare anche la libreria libpcap, di solito non installata con il sistema operativo, reperibile all’indirizzo ftp://ftp.ee.lbl.gov/libpcap.tar.Z.

 

Per eseguire l’installazione si deve accedere al sistema con i permessi di super user (root). La versione di linux utilizzata è la Suse 7.1 kernel 2.2.18. E’ possibile installare i pacchetti in un punto qualsiasi del sistema operativo.


Passo 1: installazione della libpcap.


  1. Decomprimere i pacchetti tramite i comandi gzip e tar da linea di comando:

# gzip -d -c libpcap.tar.Z | tar xvf –

I parametri indicati, sono delle azioni per i (de-compressori di files) gzip e tar:

-d decomprime il file;

-c scrive sullo standard output (mostra i risultati dell’operazione di decompressione a video);

-x estrai i files dall’archivio tar;

-v elenca i files durante l’estrazione dall’archivio;

-f permette di specificare il nome del file dell’archivio;

| dopo l’esecuzione di gzip passa al comando tar l’archivio processato per la seconda fase di decompressione

- indica a tar di processare il file indicato precedentemente

  1. Spostarsi nella directory creata dopo la decompressione dei pacchetti:

# cd libpcap-0.4/

  1. Creare le directory /usr/local/include e /usr/local/include/net dove saranno installati alcuni files nei passi precedenti. Se esistono passare al punto successivo.
  2. Per creare il file di inizializzazione, per collegare e compilare i vari pacchetti, bisogna personalizzare i vari percorsi per i pacchetti indicati nel Makefile.in, quindi eseguire lo script shell "./configure" come mostrato. E’ possibile lasciare i percorsi invariari, in questo caso, saranno usati quelli di default per l’installazione delle librerie, dei manuali, ecc. L’operazione eseguita dal file configure sarà quella di determinate tutte le caratteristiche e attributi del sistema per generare un appropriato Makefile.

# ./configure

  1. A questo punto l’esecuzione del comando "make" effettuerà la compilazione dei files tenendo conto delle informazioni raccolte finora. Se tutto va bene procedere con il passo successivo.

# make

6.      Siamo giunti agli ultimi passi dell’installazione ed effettuiamo le ultime operazioni di compilazione

# make install

  1. Per l’installazione delle librerie si deve eseguire

# make install-incl

  1. A questo punto si conclude con l’installazione dei manuali e guide in linea della libpcap

# make install-man

 

Passo 2: installazione di Snort

  1. Decomprime i pacchetti tramite i gzip e tar da linea di comando:

 # gzip -d -c snort-1.7.tar.gz | tar xvf –

  1. Spostarsi nella directory creata dalla decompressione dei pacchetti

# cd snort-1.7

  1. Per creare il file di inizializzazione, per collegare e compilare i vari pacchetti, bisogna personalizzare i vari percorsi per i pacchetti indicati nel Makefile.in, quindi eseguire lo script shell "./configure" come mostrato. E’ possibile lasciare i percorsi invariari, in questo caso, saranno usati quelli di default per l’installazione delle librerie, dei manuali, ecc. L’operazione eseguita dal file configure sarà quella di determinate tutte le caratteristiche e attributi del sistema per generare un appropriato Makefile

# ./configure

  1. Compilazione dei files tenendo conto  delle informazioni raccolte precedentemente

# make

  1. Compilazione degli ultimi files e installazione dei manuali e guide in linea

# make install

 

 



RUNNING SNORT

 

Snort non è molto difficile da usare, ma ci sono molte opzioni sulla riga di comando e non è sempre ovvio quali di esse vanno bene insieme. I possibili parametri che si possono dare in input a Snort sono elencati di seguito:

Snort [-abCdDeNopqsvVx?] [-A alert-mode] [-c rules file] [-F bpf-file] [-h home-net] [-i interface] [-l log-dir] [-m smb-hosts-file] [-n packet-count] [-r tcpdump-file] [-S n=v] expression.

§         Le opzioni più importanti sono le seguenti:

§         -A alert-mode effettua un alert usando uno specifico alert-mode (fast, full, none, unsock). Fast scrive gli alert sul file di alert di default in una singola linea; full scrive gli alert sul file di alert decodificando completamente l’header; none disabilita gli alert; unsock è una modalità sperimentale che manda gli alert su socket UNIX.

§         -a mostra i pacchetti ARP quando vengono decodificati.

§         -b effettua il log dei pacchetti in formato tcpdump.

§         -c rules-file usa il file di regole nel percorso rules-file.

§         -C stampa solo i caratteri del payload del pacchetto.

§         -d visualizza il livello applicazione dei dati quando mostra i pacchetti.

§         -D esegue Snort in daemon mode.

§         -e visualizza l’header dei pacchetti ethernet.

§         -F bpf-file legge i filtri BPF dal file bpf-file.

§         -h home-net setta la “home network” a home-net. Il formato di questo indirizzo è un prefisso di rete più un blocco CIDR, come 192.168.1.0/24.

§         -i interface si mette in ascolto sull’interfaccia specificata.

§         -l log-dir indirizza i log in un file in una directory specifica. Per default è usata /var/log/snort.

§         -M smb-hosts-file manda messaggi WinPopup alla lista di workstation contenute nel file smb-hosts-file. Il file workstation è semplice:ogni linea del file contiene il nome SMB del sistema al quale trasmettere il messaggio.

§         -n packet-count processa solo un numero di pacchetti pari a packet-count ed esce.

§         -N smette di loggare i pacchetti. Il programma continua normalmente a generare alert.

§         -o cambia l’ordine in cui le regole sono applicate ai pacchetti. Invece dell’ordine d’inizio applicato nello standard Alert->Pass->Log, le regole verranno applicate nell’ordine Pass->Alert->Log.

§         -p termina la modalità promiscua di sniffing.

§         -q non visualizza i messaggi e le informazioni di inizializzazione.

§         -r tcpdump-file legge il file tcpdump-file formattato.

§         -s manda messaggi di alert al syslog.

§         -S n=v setta la variabile “n” al valore ”v”. Utile per settare il valore di una variabile definita nel file di regole di Snort con un valore specificato nella linea di comando.

§         -v stampa i pacchetti.

§         -V mostra la versione dell’applicativo ed esce.

§         -? mostra l’uso delle istruzioni del programma ed esce.

§         expression seleziona quali pacchetti devono essere visualizzati. Se l’opzione expression non è data, saranno visualizzati tutti i pacchetti. Altrimenti, solo i pacchetti per cui expression è vera saranno visualizzati. Essa consiste di una o più primitive che sono precedute da uno o più qualificatori. Ci sono tre differenti tipi di qualificatori: type, dir, proto.

 

 


CONCLUSIONI

 

I vantaggi di Snort sono:

1.      se ci sono nuovi attacchi l’amministratore può facilmente sviluppare nuove regole per rilevarli, molto più velocemente di un qualsiasi prodotto commerciale

2.      prende poco tempo per l’installazione e l’applicazione

3.      ha una struttura modulare

4.      codice open source

5.      utilizzato in reti eterogenee: può inviare allarmi a workstation Windows attraverso Samba

6.      è estendibile usando i plugin  (http://www.linux.ie/articles/portsentryandsnortcompared.php)

 

Gli svantaggi sono:

1.      non tratta bene la deframmentazione IP.

2.      mancanza di livelli per gli alert.

3.      tutti quelli comuni agli IDS basati sul pattern matching.

 

 

 

 



NOTIZIE SULL’AUTORE

Martin Roesch è Director of Forensic Systems alla Hiverwold, Inc. E' specializzato nella progettazione e implementazione di tecnologie per l'intrusion detection ed è anche autore di Snort, un sistema Open Source per il network intrusion detection. Prima di essere assunto dalla Hiverworld, Martin è stato un Network Security Engineer alla Stanford Telecom, tecniche legali della rete e tecnologie per l'intrusion detection per il Dipartimento della Difesa Americano. E' anche il capo progetto della GTE Internetworking's NetFacade, una societa' di rete. Possiede un B.S. in Electrical e Computer  Engineering dalla Clarkson University (USA). E’ anche membro del team di sviluppo e distribuzione dei Security Toolkit di Trinux Linux.

 

 

GLOSSARIO

 

ALERT: Una rappresentazione di un evento generato per il controllo della sicurezza e per il supporto dei dati. Gli Alerts sono memorizzati sia in database o codificati in formato XML.

 

ARP: Address Resolution Protocol. Protocollo che permette di conoscere l'indirizzo Ethernet di un server conoscendo il suo indirizzo IP, in una rete TCP/IP. Il server richiedente invia un pacchetto di dati ARP al server in questione e riceve il suo indirizzo Ethernet come risposta. L'interrogazione può essere rivolta anche ad un altro server, in quanto ciascun server mantiene un registro con gli indirizzi Ethernet ed IP dei server con cui è entrato in comunicazione.

 

ASCII: American Standard Code for Information Interchange. Standard di definizione dei caratteri per computer. Questo formato serve per inviare file di documentazione via modem fra computer di tipi diversi.

 

ATTACCHI CGI: Rappresentano attacchi per far bloccare un host o per ottenere servizi per i quali non si possiede l’autorizzazione. I CGI sono programmi che vengono eseguiti da un server WEB. Gli attacchi tramite CGI cercano di sfruttare le vulnerabilita' di questi programmi.

AUDIT LOG: Letteralmente significa "LOG di verifica". Generalmente ogni accesso ad una macchina viene loggato (cioe' l'accesso stesso viene registrato in un qualche file insieme ad alcune informazioni quali l’indirizzo IP della macchina che ha tentato l'accesso, data etc). In particolare SNORT logga gli attacchi che e' in grado di individuare (tipo i Probes SMB e i CGI Attacks etc). Un Audit LOG quindi e' un semplice log di quello che e' accaduto e quando.

 

BPF: Berkley Packet Filter. Può essere considerato un agente di sistema; posizionato nel kernel del sistema operativo, effettua la selezione di pacchetti scartando quelli indesiderati.

 

BUFFER OVERFLOW: E’ diventato oggi il più comune punto di vulnerabilità rilevato nei sistemi operativi basati sulla piattaforma UNIX. L'overflow che si può verificare nei buffer del sistema è il risultato della mancanza di buoni tipi di dati nelle strutture “string” e “buffer” del linguaggio C e nell' abuso delle funzioni di tipo  “string” dalle librerie standard del C, che è il linguaggio base su cui sono costruiti i sistemi UNIX. Grazie a questi errori, i cracker, studiano la costruzione del sistema operativo, possono individuare gli errori presenti nel sistema e, con appositi programmi, prendere possesso del sistema obiettivo. Negli attacchi più comuni, gli intrusi cercano di creare un overflow nei “buffer”, o nei “remote deamons”, o nel programma “setuid”. Il metodo che usano è quello di inserire il loro codice macchina nello spazio rappresentante l'indirizzo del programma e sovrascrivere l'indirizzo di ritorno di alcune funzioni. Quando una delle funzioni “modificate” viene utilizzata deve “ritornare un valore” invece di passare quello elaborato “salta” ed elabora il codice introdotto dal cracker che normalmente crea una “shell” e manda in overflow il sistema compromettendone il regolare funzionamento.


CIDR: Classless Inter-Domain Routing. E’ un nuovo schema per l’assegnamento degli indirizzi internet che permette una più efficiente allocazione degli indirizzi IP rispetto ai vecchi schemi di indirizzi di classe A, B e C.

 

CGI: Common Gateway Interface. Programmi scritti in Perl, C, Java o Visual Basic, che consentono ai siti Internet di elaborare i dati inseriti dall'utente. Sono utilizzati, ad  esempio, per effettuare ricerche, interrogazioni di database, invio di moduli. La programmazione di CGI è complessa, ma sono disponibili per essere scaricati da Internet molti programmi CGI già pronti.

 

CGI SCAN DETECTION: Rileva un attacco tramite CGI. L’attaccante effettua dei tentativi per individuare che tipi di programmi CGI il server WEB possiede (CGI SCAN) e sfrutta le eventuali vulnerabilità di tali programmi. Snort è in  grado di rilevare se qualcuno sta provando a fare questo genere di tentativi.

 

DATAGRAM: uno o più pacchetti che costituiscono un singolo messaggio di rete.

 

DOMAIN NAME: un modo semplice per riferirsi ad un gruppo, macchine, o gruppo di macchine su internet tramite un nome registrato.

 

ETHERNET: Una tecnologia di rete Local Area Network, sviluppata originariamente da Xerox, che connette computer e trasmette dati fra loro. I dati sono suddivisi in frame e inviati via cavo.

 

FDDI: Fiber-Optic Data Distribution Interface. Standard per le reti realizzate con cavi in fibra ottica, che consentono una velocità di 100 mbps.

 

FIREWALL: Qualunque strumento che previene utenti non autorizzati dal guadagnare accesso a un certo host. Più precisamente, uno strumento di controllo dell’ indirizzo d’origine di ogni pacchetto. Se quell’indirizzo è su una lista approvata, il pacchetto guadagna l’entrata. Altrimenti è rigettato.

 

GNU: il Progetto GNU è stato lanciato nel 1984 per sviluppare un sistema operativo Unix-compatibile completo che fosse software libero. GNU è un acronimo ricorsivo per “GNU's Not Unix” (GNU Non è Unix) e si pronuncia gh-nu (con la g dura). Varianti del sistema operativo GNU, che utilizzano il kernel Linux, sono ora ampiamente utilizzate; anche se a questi sistemi ci si riferisce spesso come "Linux", essi vengono chiamati con più precisione sistemi GNU/Linux.

 

GPL: General Public License. E’ il “permesso d'autore” (copyleft), che usa le leggi sul diritto d'autore (copyright) capovolgendole per ottenere lo scopo opposto: invece che un metodo per privatizzare il software, diventa infatti un mezzo per mantenerlo libero. Il succo dell'idea di permesso d'autore consiste nel dare a chiunque il permesso di eseguire il programma, copiare il programma, modificare il programma e distribuirne versioni modificate, ma senza dare il permesso di aggiungere restrizioni. In tal modo, le libertà essenziali che definiscono il “free software” (software libero) sono garantite a chiunque ne abbia una copia, e diventano diritti inalienabili.

 

HTTP: HyperText Transfer Protocol. Protocollo per il trasferimento di pagine World Wide Web. Contributo di Martino Pavan Perfetto: definisce la sintassi della richiesta di dati e della risposta che intercorre tra un browser (il client) e un server web.

 

ICMP: In Internet quando accade qualcosa di inaspettato durante il passaggio dei pacchetti da un router all'altro, ogni evento viene riportato tramite questo protocollo. I messaggi ICMP vengono incapsulati nei pacchetti IP e spediti normalmente ai processi di networking e non ai programmi utente. A volte però capita che qualche programma ci avverta di un disguido riportato tramite questo protocollo. Un messaggio ICMP nel bel mezzo del nostro schermo potrebbe essere questo "...Time to Live was exceeded etc...". Con questo un router ci ha gentilmente informato che uno dei tanti pacchetti che formavano il file da noi inviato ha incontrato una congestione, e' entrato in un circolo vizioso (loop) oppure aveva il campo TTL troppo basso. Ecco altri messaggi:

1.      Destination Unreachable - il router non ha trovato la destinazione del pacchetto.

2.      Parameter problem - campo dell'header non valido

3.      Redirect - il router informa l'host che ha spedito il pacchetto di un qualche errore

4.      Echo Request - messaggio utile per sapere se un host è presente oppure no (utilizzato in Ping)

5.      Echo Reply - come sopra

6.      Timestamp request - come sopra con time stamp

7.      Timestamp Reply - come sopra

 

INCIDENT: una collezione di dati sottoposti ad attacchi.

 

INDIRIZZO IP: Per rendere universale un sistema di comunicazione quale è Internet, è necessario stabilire un metodo globalmente accettato per identificare i computer ad esso collegati. A tale scopo viene associato ad ogni computer connesso un particolare indirizzo univoco detto indirizzo IP (daTCP/IP). Così come il classico indirizzo formato da: nazionalità, città, via e numero civico ci permette di rintracciare una persona nel mondo, analogamente un indirizzo IP, vista la struttura di Internet, serve ad identificare il dominio di appartenenza del computer sulla rete. Un esempio di indirizzo IP è il seguente: 195.120.131.81 come si può notare si tratta di una parola di 32 bit.

 

IP_GRAB: E’ un packet sniffing tool, basato sulla libreria BPF, che mostra le informazioni complete del livello DLC, di rete e di trasporto dei pacchetti che transitano sulla rete. E’ distribuito con Debian/GNU Linux e Trinux.

 

IPX: Internet Packet eXchange. Protocollo usato per l’instradamento di dati e per servizi da server a workstation e viceversa.

 

LIBPCAP: E’ una libreria che fornisce un’interfaccia indipendente dal sistema per catturare i pacchetti al livello utente. Fornisce un monitoraggio di rete a basso livello. Grazie alla sua ampia diffusione ed utilizzo, è diventata uno standard. Varie reti basate su intrusion detection systems, sniffers, e tools di data processing, possono cooperare e scambiare dati semplicemente poiché essi usano il formato standard dei file per memorizzare il traffico sulla rete.


NETMASK: Indica quali indirizzi sono raggiungibili direttamente (nella rete locale) e quali richiedono di far passare i pacchetti attraverso un router. Se la netmask è errata, le macchine faranno uno o due errori: uno è cercare di inoltrare pacchetti locali attraverso un router, che è uno spreco di tempo e, anche se è abbastanza veloce, potrebbe essere più lento o non funzionare completamente. Il secondo errore è di non riuscire ad inviare al router pacchetti destinati a macchine remote, nel qual caso i pacchetti non giungeranno mai a destinazione. La netmask è un indirizzo simile ad un IP, con bit impostati ad uno per la parte di rete ed a zero per la parte dell'host. La netmask viene usata, come dice il nome, per mascherare parti dell'indirizzo al codice TCP/IP. Se la netmask è 255.255.0.0, i primi 2 byte sono per la rete e gli altri 2 per l'host; la più comune è 255.255.255.0, nella quale i primi 3 byte sono la parte per la rete egli ultimi tre sono per l'host.


NETWORK FLIGHT RECORDER: Può essere definito come un network sniffer programmabile e molto evoluto che seleziona tra i dati raccolti dalla rete, quelli più interessanti, li salva in una base di dati e, attraverso un'interfaccia grafica scritta in Java, ne permette una loro successiva consultazione attraverso delle query. Definire questo pacchetto semplicemente come un network-sniffer è veramente molto riduttivo, se così fosse esso sarebbe semplicemente l'ennesimo prodotto che si ispira al tcpdump. NFR è una suite composta da 6 moduli, ciascuno con una sua ben determinata funzione: Netwoork sniffer, Nfrd, Back-end processor, Alertd deamon, Base di dati, GUI (Graphics User Interface o Interfaccia Grafica).

 

NMAP: Network Mapper è un utility Open Source, licenza GNU GPL, che gira su diversi tipi di sistemi per l’esplorazione di reti o per l’auditing della sicurezza. E’ stato realizzato per effettuare una rapida scansione su grandi reti anche se lavora bene su singoli host. E’usato per pacchetti ip su reti per determinare quali host sono disponibili sulla rete, che tipo di servizi offrono, quale tipo di sistema operativo usano, che tipo di firewall e filtri di pacchetto adottano.

 

NIDS: Network Intrusion Detection System. E’ un sistema che è responsabile nell’individuare anomalie inappropriate, o altri tipi di dati considerati non autorizzati che transitano sulla rete. Non lavora come un firewall, che è configurato per garantire o inibire l’accesso ad un particolare servizio, ma cattura ed ispeziona tutto il traffico.

 

PACCHETTO: Il pacchetto (o datagramma), viene definito al Livello Network e trasmesso in rete dai router. Contiene in genere informazioni quali indirizzo, dati e molti altri campi. Al Livello Data Link la parte dati (payload) e la parte di intestazione (header) viene denotata con il termine frame; mentre queste due parti al livello Trasporto si indicano con il termine TPDU (Transfer Protocollo Data Unit). Ecco una rappresentazione schematica dei livelli di impacchettamento (uno dentro l'altro) dei dati secondo le rispettive astrazioni del modello TCP/IP:

1.      Livello Application  (HTTP - TELNET ecc)

2.      Livello Transport (TCP): +++++ TPDU (contenuto nel payload del pacchetto)

3.      Livello Network (IP): ++++ +++++ Pacchetto o datagramma (contenuto nel payload del frame)

4.      Livello Data Link: (PPP) ++++ ++++ +++++  Frame (contiene il pacchetto)

5.      Livello Fisico: cable +++ ++++ ++++ +++++ +++ sequenza di frame repeater ecc.

Nell'accezione più generica di pacchetto si astrae dal modello, sia esso OSI/RM o TCP/IP. In questo caso il termine denota una parte di dati (unita di informazione) riconoscibile in rete dall'entità mittente e destinataria, si pensi alle schede di rete, alle entità IP oppure tra due entità TCP.

 

PAYLOAD: carico utile di un pacchetto, di un frame o di un'altra unita' per la trasmissione dei dati. Nei frame, per esempio, quando parliamo del payload intendiamo quella parte del frame priva dell'header (in testa) e del checksum (in coda), ossia parliamo del pacchetto. Per un idea piu' intuitiva si veda il modello TCP/IP.

 

PLUG-IN: E’ un funzione aggiuntiva che va ad incrementare i servizi offerti da un'applicazione. I plug-in per i Browser quali RealAudio, possono aggiungere funzionalità multimediali, mentre il plug-in per Acrobat Reader permette di visualizzare file in formato pdf. Esistono poi i plug-in per Photoshop (noto programma per il fotoritocco di Adobe) per realizzare effetti particolari (rilievo, plastificazione, mosaico, etc.) sulle immagini bitmap.

 

PING: acronimo di Packet InterNet Groper, il cercatore di pacchetto di Internet . E' il metodo più semplice per testare e per avere i tempi di risposta delle connessioni TCP/IP. Il Ping manda una richiesta ad un host ed aspetta una risposta (chiamata pong). Il ping ritorna il numero di secondi necessari per la connessione.

 

PORT NUMBER: il modo in cui servizi di rete individuali sono identificati tra macchine.

PORT SCANNING: Il Port scanning è una tecnica che viene utilizzata per determinare quale porta di comunicazione del sistema obbiettivo è configurata per essere in ascolto verso le connessioni provenienti dall'esterno. Gli attaccanti sono molto interessati alla determinazione delle porte aperte in quanto rappresentano un possibile canale di comunicazione che può essere eventualmente sfruttato. Avere uno schema delle porte di comunicazione permette di scambiare più facilmente informazioni con il sistema; così è vantaggioso per tutti desiderare di poter esplorare l'ambiente di rete del sistema e trarne informazioni significative, soprattutto per i cracker. L'idea su cui si basa il port scanning consiste nel fatto che è estremamente conveniente per il cracker riuscire a sondare quante più porte di comunicazione è possibile e stabilire quali di esse sono disponibili alla comunicazione in modo da utilizzare quelle che maggiormente si adeguano ai propri bisogni. Lo scanning di queste macchine viene fatto con tecniche che mandano un gran numero di pacchetti di vari protocolli in modo da dedurre quali servizi sono in ascolto verso l'esterno dalla risposta che questi danno ai pacchetti inviati.

PORTSENTRY: E’ un port scan detector che può essere configurato per collegarsi alla porta che si vuole monitorare, riportando tutti i tentativi di scansione su tale porta ed opzionalmente eseguire un comando in accordo con l’host che effettua la scansione. Precisamente si adatta alla tipologia di attacco per la difesa.

 

PROBES SMB: Indica un attacco all’SMB. Quest’ultimo è un protocollo di Windows per condividere files tra più PC in una rete.


SAMBA: Software di uso gratuito (www.samba.org) grazie al quale è possibile inserire un server con S.O. Linux in una rete TCP/IP con S.O. di rete Windows NT. Consente a Linux di utilizzare i servizi SMB di Windows NT, e lo rende identificabile nella rete come server con sistema "Windows NT".

 

SIGNATURE: una rappresentazione di un particolare evento di tipo sicuro.

 

SMB: Server Message Block. Protocollo per le comunicazioni di rete nel sistema operativo Windows NT.

 

SNIFFER: un qualsiasi strumento, sia esso un software o un apparato hardware, che raccoglie le informazioni che viaggiano lungo una rete. Questa rete può utilizzare un protocollo di comunicazione qualunque: Ethernet, TCP/IP, IPX o altri. Le funzioni tipiche degli sniffer possono essere riassunte sinteticamente in:

1.      conversione e filtraggio dei dati e dei pacchetti in una forma leggibile dall’utente;

2.      analisi dei difetti di rete;

3.      analisi di qualità e portata della rete (performance analisys);

4.      setacciamento automatizzato di password e nomi di utenti per successiva analisi;

5.      creazione dei log, lunghi elenchi contengono traccia, in questo caso, del traffico sulla rete;

6.      scoperta di intrusioni in rete attraverso l’analisi dei log del traffico.

 

SPICE: Stealthy Portscan ed Intrusion Correlation Engine, un progetto della Silicon Defence per individuare portscans ed altro. Monitorizza i pacchetti sulla rete.

 

SPADE: Statistical Packet Anomaly Detection Engine. E’ un preprocessor plugin per Snort, che manda alerts di pacchetti anomali attraverso i meccanismi standard di reporting di Snort.

 

SYN FLOODING: E’ un attacco di rete che cerca di esaurire le risorse della macchina obbiettivo. L'attacco consiste nel mandare un grande numero di spoofed TCP connection request, cioè di false richieste di connessione attraverso il protocollo TCP. Questa elevata quantità di richieste consuma la memoria della macchina e può comportare che una legittima connessione venga negata. Anche questo tipo di attacco, come l'IP spoofing, viene spesso portato da un host ritenuto sicuro dal sistema in modo che l'attacco diventi molto più difficile da rintracciare. Questo attacco è diventato molto popolare dopo che due gruppi di hacker hanno pubblicato degli articoli, allegando il codice sorgente del programma con cui avevano realizzato il SYN flooding, per dimostrare la gravità del problema. Diversi tipi di soluzioni sono state proposte per fermare questo tipo di attacco, e la maggior parte sono state implementate nei sistemi di sicurezza.

TCP: Transmission Control Protocol. Protocollo che opera al Livello Trasporto, garantendo la trasmissione tra mittente e destinatario. Con un protocollo connection-oriented si permette ad una macchina di recapitare senza errore un flusso di byte (Byte oriented) e non un flusso di messaggi perché il software che realizza il TCP non conosce il significato dei byte in arrivo   con i byte in arrivo si limita a riordinare i pacchetti provenienti dall'IP, il livello sottostante. TCP elimina i duplicati, calcola il checksum per intero e non solo del suo header (come fa l'IP), esegue il controllo di flusso per regolare differenti velocità tra macchina mittente e destinatario, per finire informa cliente server che il Livello Network non può operare se ci sono inconvenienti quali interruzioni inaspettate di connessione.  In trasmissione TCP accetta un flusso di byte da un'applicazione, frammenta il flusso di byte in segmenti. Se vuole creare segmenti grandi allora li bufferizza prima di spedirli. Con opportuni software è possibile definire la grandezza dei segmenti (MSS). 

 

TCP/IP: Transmission Control Protocol/Internet Protocol. Protocollo standard per le reti locali per computer di diverso tipo. È il protocollo utilizzato in Internet e da molte reti locali quando vogliono usufruire di Internet o installare una Intranet.

 

TCPDUMP: è un tool di monitoraggio di rete che, con l’ausilio della libpcap, è in grado di mostrare il traffico sulla rete in un formato comprensibile per eseguire analisi di intrusioni, traffico sospetto o anomalo.

 

TOKEN RING: Una rete connessa in una topologia ad anello, in cui un segno o testimone (token) passa da computer a computer. Un computer deve attendere fino a che non riceve un segno prima di inviare dati.

 

TRINUX: E’ una distribuzione ramdisk-based di Linux che, partendo da un singolo floppy disk, carica i pacchetti da un server HTTP/FTP, da un filesystem FAT/EXT2/NTFS, o floppies aggiuntivi e contiene versioni precompilate di tools di network security Open Source, per port scanning, packet sniffing, vulnerability scanning, sniffer detection, packet construction, active/passive OS fingerprinting, network monitoring, session hijacking, intrusion detection, ed altro. Trinux fornisce anche un supporto per Perl, PHP, e il linguaggio di script Python. Alcuni dei tools inclusi in Trinux sono: curl, dsniff, ethereal, firewalk, fragrouter, hping, hunt, isic, nasl (da Nessus), nemesis, nmap, ngrep, nstreams, openssh, openssl, p0f, rain, sendip, sing, sniffit, Snort, tcpdump, vomit, zodiac sulla rete.

 

TRIPWIRE: E’ un programma che verifica l'integrità di file e directory confrontando le loro caratteristiche, come data di accesso, di modifica, etc. con quelle contenute in un database di riferimento, segnalando ogni incongruità, come nuovi file, cancellazioni o alterazioni.

 

UDP: User Datagram Protocol.

 

URI: Uniform Resource Indicator. Sistema per indicare in modo univoco una risorsa. Gli URL sono un sottoinsieme degli URI, con gli URL infatti si identificano le risorse di rete per mezzo della loro localizzazione in rete (pagine web, immagini ecc., es: http://www.dizionarioinformatico.com), mettendo in evidenza il meccanismo di accesso (protocollo). Gli URI, invece, non solo identificano risorse della rete per mezzo dei protocolli di rete, ma anche per nome o qualche altro attributo (p.e. indirizzi di posta elettronica). Generalmente un tipico URI segue la sintassi definita da quattro componenti: <scheme>://<authority><pathname>?<query>.Nota: per authority si intende un nome di dominio o un server.

 

 

 

 

 

 

 

 

 

 



APPENDICE (Installazione)

Vediamo in dettaglio i risultati dell’installazione:

LIBPCAP

# gzip -d -c libpcap.tar.Z | tar xvf –

libpcap-0.4/CHANGES

libpcap-0.4/FILES

libpcap-0.4/INSTALL

libpcap-0.4/Makefile.in

libpcap-0.4/README

libpcap-0.4/SUNOS4/

libpcap-0.4/SUNOS4/nit_if.o.sun4c.4.0.3c

libpcap-0.4/SUNOS4/nit_if.o.sparc

libpcap-0.4/SUNOS4/nit_if.o.sun3

libpcap-0.4/VERSION

libpcap-0.4/aclocal.m4

libpcap-0.4/bpf/net/bpf.h

libpcap-0.4/bpf/net/bpf_filter.c

libpcap-0.4/bpf_image.c

libpcap-0.4/config.guess

libpcap-0.4/config.sub

libpcap-0.4/configure

libpcap-0.4/configure.in

libpcap-0.4/etherent.c

libpcap-0.4/ethertype.h

libpcap-0.4/gencode.c

libpcap-0.4/gencode.h

libpcap-0.4/grammar.y

libpcap-0.4/inet.c

libpcap-0.4/install-sh

libpcap-0.4/lbl/gnuc.h

libpcap-0.4/lbl/os-solaris2.h

libpcap-0.4/lbl/os-sunos4.h

libpcap-0.4/lbl/os-ultrix4.h

libpcap-0.4/linux-include/netinet/if_ether.h

libpcap-0.4/linux-include/netinet/ip_var.h

libpcap-0.4/mkdep

libpcap-0.4/nametoaddr.c

libpcap-0.4/optimize.c

libpcap-0.4/pcap-bpf.c

libpcap-0.4/pcap-dlpi.c

libpcap-0.4/pcap-enet.c

libpcap-0.4/pcap-int.h

libpcap-0.4/pcap-linux.c

libpcap-0.4/pcap-namedb.h

libpcap-0.4/pcap-nit.c

libpcap-0.4/pcap-nit.h

libpcap-0.4/pcap-null.c

libpcap-0.4/pcap-pf.c

libpcap-0.4/pcap-pf.h

libpcap-0.4/pcap-snit.c

libpcap-0.4/pcap-snoop.c

libpcap-0.4/pcap.3

libpcap-0.4/pcap.c

libpcap-0.4/pcap.h

libpcap-0.4/ppp.h

libpcap-0.4/savefile.c

libpcap-0.4/scanner.l

 

# ./configure

creating cache ./config.cache

checking host system type... i686-pc-linux-gnu

checking target system type... i686-pc-linux-gnu

checking build system type... i686-pc-linux-gnu

checking for gcc... gcc

checking whether the C compiler (gcc  ) works... yes

checking whether the C compiler (gcc  ) is a cross-compiler... no

checking whether we are using GNU C... yes

checking whether gcc accepts -g... yes

checking gcc version... 2

checking how to run the C preprocessor... gcc -E

checking for malloc.h... yes

checking for sys/ioccom.h... no

checking for sys/sockio.h... no

checking for ANSI ioctl definitions... yes

checking for ether_hostton... yes

checking for strerror... yes

checking packet capture type... linux

checking for net/if_arp.h... yes

checking Linux kernel version... 2

checking for flex... flex

checking for flex 2.4 or higher... yes

checking for bison... bison

checking for ranlib... ranlib

checking if sockaddr struct has sa_len member... no

checking if unaligned accesses fail... no

checking for a BSD compatible install... /usr/bin/install -c

updating cache ./config.cache

creating ./config.status

creating Makefile

 

#make

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./pcap-linux.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./pcap.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./inet.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./gencode.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./optimize.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./nametoaddr.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./etherent.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./savefile.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./bpf_filter.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./bpf_image.c

flex -Ppcap_ -t scanner.l > $$.scanner.c; mv $$.scanner.c scanner.c

bison -y -p pcap_ -d grammar.y

mv y.tab.c grammar.c

mv y.tab.h tokdefs.h

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./scanner.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -Dyylval=pcap_lval -c grammar.c

sed -e 's/.*/char pcap_version[] = "&";/' ./VERSION > version.c

gcc -O2 -I.  -Ilinux-include -DHAVE_MALLOC_H=1 -DHAVE_ETHER_HOSTTON=1 -DHAVE_STRERROR=1 -DHAVE_NET_IF_ARP_H=1  -c ./version.c

ar rc libpcap.a pcap-linux.o pcap.o inet.o gencode.o optimize.o nametoaddr.o etherent.o savefile.o bpf_filter.o bpf_image.o scanner.o grammar.o version.o

ranlib libpcap.a

 

# make install

/usr/bin/install -c -m 444 -o bin -g bin libpcap.a /usr/local/lib/libpcap.a

ranlib /usr/local/lib/libpcap.a

 

#make install-incl

/usr/bin/install -c -m 444 -o bin -g bin ./pcap.h \

/usr/local/include/pcap.h

/usr/bin/install -c -m 444 -o bin -g bin ./pcap-namedb.h \

/usr/local/include/pcap-namedb.h

/usr/bin/install -c -m 444 -o bin -g bin ./net/bpf.h \

/usr/local/include/net/bpf.h

 

#make install-man

/usr/bin/install -c -m 444 -o bin -g bin ./pcap.3 \

    /usr/local/man/man3/pcap.3

 

 

SNORT

 

# gzip -d -c snort-1.7.tar.gz | tar xvf -

snort-1.7/contrib/ACID-0.9.5b9.tar.gz

snort-1.7/contrib/SnortSnarf-111500.1.tar.gz

snort-1.7/contrib/Spade-092200.1.tar.gz

snort-1.7/contrib/Guardian.tar.gz

snort-1.7/contrib/Net-SnortLog-0.1.tar.gz

snort-1.7/contrib/README

snort-1.7/contrib/address_config.sh

snort-1.7/contrib/create_mysql

snort-1.7/contrib/create_postgresql

snort-1.7/contrib/mysql.php3

snort-1.7/contrib/passiveOS.tar.gz

snort-1.7/contrib/pgsql.php3

snort-1.7/contrib/snml.dtd

snort-1.7/contrib/snort-sort.pl

snort-1.7/contrib/snort2html.pl

snort-1.7/contrib/snort_stat.pl

snort-1.7/contrib/snortdb-extra.gz

snort-1.7/contrib/snortlog

snort-1.7/contrib/snortnet.tar.gz

snort-1.7/contrib/snortwatch-0.7.tar.gz

snort-1.7/contrib/idmef-xml-plugin_0.1.tar.gz

snort-1.7/templates/sp_template.c

snort-1.7/templates/sp_template.h

snort-1.7/templates/spp_template.h

snort-1.7/templates/spp_template.c

snort-1.7/README

snort-1.7/stamp-h.in

snort-1.7/AUTHORS

snort-1.7/COPYING

snort-1.7/ChangeLog

snort-1.7/INSTALL

snort-1.7/Makefile.am

snort-1.7/Makefile.in

snort-1.7/NEWS

snort-1.7/acconfig.h

snort-1.7/aclocal.m4

snort-1.7/config.guess

snort-1.7/config.h.in

snort-1.7/config.sub

snort-1.7/configure

snort-1.7/configure.in

snort-1.7/install-sh

snort-1.7/missing

snort-1.7/mkinstalldirs

snort-1.7/snort.c

snort-1.7/snort.h

snort-1.7/log.c

snort-1.7/log.h

snort-1.7/decode.c

snort-1.7/decode.h

snort-1.7/mstring.h

snort-1.7/mstring.c

snort-1.7/rules.c

snort-1.7/rules.h

snort-1.7/plugbase.c

snort-1.7/plugbase.h

snort-1.7/sp_pattern_match.c

snort-1.7/sp_pattern_match.h

snort-1.7/sp_tcp_flag_check.c

snort-1.7/sp_tcp_flag_check.h

snort-1.7/sp_icmp_type_check.c

snort-1.7/sp_icmp_type_check.h

snort-1.7/sp_icmp_code_check.c

snort-1.7/sp_icmp_code_check.h

snort-1.7/sp_ttl_check.c

snort-1.7/sp_ttl_check.h

snort-1.7/sp_ip_id_check.c

snort-1.7/sp_ip_id_check.h

snort-1.7/sp_tcp_ack_check.c

snort-1.7/sp_tcp_ack_check.h

snort-1.7/sp_tcp_seq_check.c

snort-1.7/sp_tcp_seq_check.h

snort-1.7/sp_dsize_check.c

snort-1.7/sp_dsize_check.h

snort-1.7/spp_http_decode.h

snort-1.7/spp_http_decode.c

snort-1.7/spp_minfrag.c

snort-1.7/spp_minfrag.h

snort-1.7/spp_portscan.c

snort-1.7/spp_portscan.h

snort-1.7/sp_ipoption_check.h

snort-1.7/sp_ipoption_check.c

snort-1.7/sp_rpc_check.h

snort-1.7/sp_rpc_check.c

snort-1.7/sp_icmp_id_check.c

snort-1.7/sp_icmp_id_check.h

snort-1.7/sp_icmp_seq_check.h

snort-1.7/sp_icmp_seq_check.c

snort-1.7/sp_respond.c

snort-1.7/sp_respond.h

snort-1.7/spo_alert_syslog.c

snort-1.7/spo_alert_syslog.h

snort-1.7/spo_log_tcpdump.c

snort-1.7/spo_log_tcpdump.h

snort-1.7/prototypes.h

snort-1.7/spo_database.c

snort-1.7/spo_database.h

snort-1.7/sp_session.h

snort-1.7/sp_session.c

snort-1.7/spp_defrag.c

snort-1.7/spp_defrag.h

snort-1.7/parser.c

snort-1.7/parser.h

snort-1.7/spo_alert_fast.c

snort-1.7/spo_alert_fast.h

snort-1.7/spo_alert_full.c

snort-1.7/spo_alert_full.h

snort-1.7/spo_alert_smb.c

snort-1.7/spo_alert_smb.h

snort-1.7/spo_alert_unixsock.c

snort-1.7/spo_alert_unixsock.h

snort-1.7/sp_react.c

snort-1.7/sp_react.h

snort-1.7/spo_xml.c

snort-1.7/spo_xml.h

snort-1.7/sp_ip_tos_check.c

snort-1.7/sp_ip_tos_check.h

snort-1.7/spp_tcp_stream.c

snort-1.7/spp_tcp_stream.h

snort-1.7/snprintf.c

snort-1.7/snprintf.h

snort-1.7/checksum.c

snort-1.7/checksum.h

snort-1.7/sp_reference.c

snort-1.7/sp_reference.h

snort-1.7/sp_ip_fragbits.c

snort-1.7/sp_ip_fragbits.h

snort-1.7/spp_anomsensor.h

snort-1.7/BUGS

snort-1.7/spp_anomsensor.c

snort-1.7/RULES.SAMPLE

snort-1.7/CREDITS

snort-1.7/snort.conf

snort-1.7/USAGE

snort-1.7/backdoor-lib

snort-1.7/ftp-lib

snort-1.7/overflow-lib

snort-1.7/scan-lib

snort-1.7/web-lib

snort-1.7/webfp-lib

snort-1.7/ddos-lib

snort-1.7/misc-lib

snort-1.7/ping-lib

snort-1.7/smtp-lib

snort-1.7/webcf-lib

snort-1.7/webiis-lib

snort-1.7/finger-lib

snort-1.7/netbios-lib

snort-1.7/rpc-lib

snort-1.7/telnet-lib

snort-1.7/webcgi-lib

snort-1.7/webmisc-lib

snort-1.7/snort.8

snort-1.7/README.PLUGINS

snort-1.7/README.FLEXRESP

snort-1.7/README.database

snort-1.7/README.tcpstream

snort-1.7/README.xml

snort-1.7/README.Spade

snort-1.7/README.Spade.Usage

snort-1.7/LICENSE

snort-1.7/cdefs.h

 

#./configure

loading cache ./config.cache

checking for a BSD compatible install... (cached) /usr/bin/install -c

checking whether build environment is sane... yes

checking whether make sets ${MAKE}... (cached) yes

checking for working aclocal... found

checking for working autoconf... found

checking for working automake... found

checking for working autoheader... found

checking for working makeinfo... found

checking for gcc... (cached) gcc

checking whether the C compiler (gcc  ) works... yes

checking whether the C compiler (gcc  ) is a cross-compiler... no

checking whether we are using GNU C... (cached) yes

checking whether gcc accepts -g... (cached) yes

checking for gcc option to accept ANSI C... (cached) none needed

checking for gcc... (cached) gcc

checking whether the C compiler (gcc -g -O2 ) works... yes

checking whether the C compiler (gcc -g -O2 ) is a cross-compiler... no

checking whether we are using GNU C... (cached) yes

checking whether gcc accepts -g... (cached) yes

checking host system type... i686-pc-linux-gnu

checking whether byte ordering is bigendian... (cached) no

checking how to run the C preprocessor... (cached) gcc -E

checking for strings.h... (cached) yes

checking for string.h... (cached) yes

checking for stdlib.h... (cached) yes

checking for unistd.h... (cached) yes

checking for sys/sockio.h... (cached) no

checking for paths.h... (cached) yes

checking for inet_ntoa in -lnsl... (cached) yes

checking for socket in -lsocket... (cached) no

checking whether printf must be declared... (cached) no

checking whether fprintf must be declared... (cached) no

checking whether syslog must be declared... (cached) no

checking whether puts must be declared... (cached) no

checking whether fputs must be declared... (cached) no

checking whether fputc must be declared... (cached) no

checking whether fopen must be declared... (cached) no

checking whether fclose must be declared... (cached) no

checking whether fwrite must be declared... (cached) no

checking whether fflush must be declared... (cached) no

checking whether getopt must be declared... (cached) no

checking whether bzero must be declared... (cached) no

checking whether bcopy must be declared... (cached) no

checking whether memset must be declared... (cached) no

checking whether strtol must be declared... (cached) no

checking whether strcasecmp must be declared... (cached) no

checking whether strncasecmp must be declared... (cached) no

checking whether strerror must be declared... (cached) no

checking whether perror must be declared... (cached) no

checking whether socket must be declared... (cached) no

checking whether sendto must be declared... (cached) no

checking whether vsnprintf must be declared... (cached) no

checking whether strtoul must be declared... (cached) no

checking for snprintf... (cached) yes

checking for strerror... (cached) yes

checking for floor in -lm... (cached) yes

checking for pcap_datalink in -lpcap... (cached) yes

checking for mysql... no

checking for odbc... no

checking for postgresql... yes

checking for oracle... no

checking for openssl... no

checking for u_int8_t... (cached) yes

checking for u_int16_t... (cached) yes

checking for u_int32_t... (cached) yes

checking for a BSD compatible install... /usr/bin/install -c

creating ./config.status

creating Makefile

creating config.h

config.h is unchanged

 

#make

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c snort.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c log.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c decode.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c mstring.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c rules.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c plugbase.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_pattern_match.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_tcp_flag_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_icmp_type_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_icmp_code_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_ttl_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_ip_id_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_tcp_ack_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_tcp_seq_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_dsize_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spp_http_decode.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spp_minfrag.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spp_portscan.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_ipoption_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_rpc_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_icmp_id_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_icmp_seq_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_respond.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spo_alert_syslog.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spo_log_tcpdump.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spo_database.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_session.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spp_defrag.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c parser.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spo_alert_fast.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spo_alert_full.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spo_alert_smb.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spo_alert_unixsock.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_react.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spo_xml.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_ip_tos_check.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spp_tcp_stream.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c snprintf.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c checksum.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_reference.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c sp_ip_fragbits.c

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/pcap  -I/usr/include/pgsql -DENABLE_POSTGRESQL  -g -O2 -Wall  -c spp_anomsensor.c

gcc  -g -O2 -Wall  -L/usr/lib -o snort  snort.o log.o decode.o mstring.o rules.o plugbase.o sp_pattern_match.o sp_tcp_flag_check.o sp_icmp_type_check.o sp_icmp_code_check.o sp_ttl_check.o sp_ip_id_check.o sp_tcp_ack_check.o sp_tcp_seq_check.o sp_dsize_check.o spp_http_decode.o spp_minfrag.o spp_portscan.o sp_ipoption_check.o sp_rpc_check.o sp_icmp_id_check.o sp_icmp_seq_check.o sp_respond.o spo_alert_syslog.o spo_log_tcpdump.o spo_database.o sp_session.o spp_defrag.o parser.o spo_alert_fast.o spo_alert_full.o spo_alert_smb.o spo_alert_unixsock.o sp_react.o spo_xml.o sp_ip_tos_check.o spp_tcp_stream.o snprintf.o checksum.o sp_reference.o sp_ip_fragbits.o spp_anomsensor.o  -lpcap -lm -lnsl  -lpq

 

 

#make install

make[1]: Entering directory `/root/snort-1.7'

/bin/sh ./mkinstalldirs /usr/local/bin

/usr/bin/install -c  snort /usr/local/bin/snort

make  install-man8

make[2]: Entering directory `/root/snort-1.7'

/bin/sh ./mkinstalldirs /usr/local/man/man8

/usr/bin/install -c -m 644 ./snort.8 /usr/local/man/man8/snort.8

make[2]: Leaving directory `/root/snort-1.7'

make[1]: Leaving directory `/root/snort-1.7'

 



BIBLIOGRAFIA

 

 

Le informazioni presenti in questo documento sono state reperite dai seguenti siti web e libri, per la maggioranza di essi è stata eseguita un’opera di traduzione.

 

1.      www.snort.org Sito ufficiale di Snort.

2.      www.linuxsecurity.com/feature_stories/using-snort.html Questo documento mostra le basi dell’intrusion detection, i passi necessari per configurare un host per l’esecuzione di Snort, per testare le sue operazioni ed avvisare per possibili eventi intrusivi.

3.      www.clark.net/~roesch/snort_rules.html Come scrivere regole per mantenere sicuro un sistema. Realizzato da Martin Roesch.

4.      http://www.sans.org/infosecFAQ/intrusion/snort.htm Schierare Snort, un Lightweight network Intrusion Detection System. Di David G. Sullivan.

5.      http://www.dia.unisa.it/ads.dir/corso-security/www/CORSO-0001/snort.htm Presentazione in formato pdf, realizzata da due tesisti del Prof. Alfredo De Santis sugli argomenti di IDS e Snort.

6.      www.linux.ie/articles/portsentryandsnortcompared.php Articolo che confronta PortSentry e Snort.

7.      www.dpo.uab.edu/~andrewb/snort/manpage.html Man page di Snort.

8.      http://loa.hacklab.it/manhattan/sniffer.htm Descrizione sugli sniffer.

9.      www.securityfocus.com Offre un supporto alla sicurezza sulle reti con descrizioni di tools, news ed altro.

10.  www.ticm.com/cb/faq/idsfaq.html Questa FAQ risponde alle domande circa l’individuazione degli intrusi che attaccano i sistemi attraverso la rete, ed in maniera specifica come individuarle.

11.   http://www.whitehats.com Questo sito raccoglie una serie di informazioni sulla sicurezza, mantiene un Forum di discussione sull’argomento e offre la possibilità di scaricare una serie di tools tra i quali Snort.

12.  Linux Massima Sicurezza. Libro edito dall’Apogeo da cui sono state tratte alcune introduzioni sugli sniffer e gli usi di Snort.