Semplice Honeynet con OpenBSD

Christopher J. Reining
creining@packetfu.org

Versione originale @  http://www.packetfu.org/hnd.html
Traduzione a cura di Daniele Muscetta




Bene, mi sono finalmente deciso a metter su una honeynet. Questo e'stato un mio intresse per gia' qualche tempo ormai, specialmente dopo aver visto il lavoro fatto da Lance Spitzner e gli altri con il Progetto Honeynet. Il mio scopo con la honeynet e' quello di rafforzare ed affinare le mie skills di analisi forense dopo che un sistema sia stato compromesso e quello di imparare quali strumenti e metodi gli attaccanti stiano correntemente usando. Prima che partissi avevo realizzato che avere una honeynet e'una cosa seria, dal momento che la honeypot, quando compromessa, puo' poi essere usata per entrare in altre macchine, effettuare attacchi D/DoS, o comunque usata per altri scopi infami. Ho preso precauzioni per limitare le possibilita' che le forze dell'ordine vengano a trovarmi. Spero che funzionino bene ;)

Il Progetto



Il setup della rete per questo progetto e' piuttosto semplice:




Diagramma della HoneyNet




Il bridge e' completamente trasparente per gli attaccanti - essi non sanno di passare attraverso questa macchina. Pertanto, questa e'una macchina ottima dove effettuare tutto il logging del traffico tra la honeypot e Internet. Usero'  pf, il packet filter nativo di OpenBSD 3.1, per permettere le connessioni in entrata verso la honeypot e per permettere solo connessioni verso l'esterno di tipo icmp echo, tcp porta 21 (ftp), tcp/udp 53 (dns), tcp 80 (http) e tcp 6667 (irc). Prendo questa misura di sicurezza per ridurre la mia responsabilita' e allo stesso tempo cercare di non destare sospetti nell'attaccante. La seconda misura di logging attiva sul bridge (il logging di pf e' la prima), sara'  Snort, un potente sniffer e IDS. La terza ed ultima misura di logging sara' il fidato tcpdump. Questo catturera' tutti i pacchetti con massimo dettaglio da e verso l'IP della honeyopt.
Sul bridge viene anche controllato il flusso di dati. Fate riferimento al paper sul 'data control' per le honeypot che si trova su Honeynet Project.
Grazie al team brasiliano dell'Honeynet Research Alliance posso usare un tool sviluppato appositamente per pf di openbsd, che serve allo scopo del 'data control' che si chiama sessionlimit. Dopo che la honeypot e' stata compromessa questo interagira' con pf per contenere le attivita' dell'intruso. Non c'e' alcun modo in cui io possa garantire che gli intrusi non si metteranno a svlgere attivita' dannose ma spero di poter limitare questa loro possibilita' tramite questo tool. L'interfaccia sul bridge con l'indirizzo IP pubblico sara' usata strettamente per ragioni di gestione remota. Questa interfaccia verra' filtrata per permettere solamente connessioni SSH da specifici IP e solo permettere traffico http in uscita allo scopo di aggiornare le regole di snort e per poter notificare via mail di tali aggiornamenti.


La Configurazione


Prima di tutto ho configurato il bridge OpenBSD. Quando mi riferisco alle interfacce sono configurate cosi' - rl0 e' l'interfaccia senza indirizzo ip connessa ad Internet, rl1 e' l'interfaccia senza indirizzo IP connessa alla honeypot, e rl2 e' l'interfaccia con un indirizzo IP pubblico usata a scopi di gestione, connessa ad Internet.

Modificere a /etc/rc.conf:


Abiliare il packet forwarding in /etc/sysctl.conf cosi' che sia attivo al prossimo reboot:


Creare /etc/hostname.rl0:


Creare /etc/hostname.rl1:


rl2 otterra' il proprio indirizzo IP assegnato via DHCP dall'Internet Service Provider:


Creare /etc/bridgename.bridge0:


Il file di configurazione di pf, /etc/pf.conf, deve essere creato, ed ecco come l'ho fatto io:



Snort era il prossimo passo. Primo, ho creato un utente snort con login /sbin/nologin. Poi ho scaricato Snort 1.9.0, compilato, e modificato snort.conf per adattarsi ai miei bisogni. Ho anche installato Oinkmaster. Oinkmaster e' uno script in perl che permete di aggiornare le regole di snort con le ultime regole disponibili su snort.org. Ho scompattato il tar.gz in /home/snort e aggiunto una entry in crontab per far aggiornare le regole di snort ogni giorno alle 3:00 PM. L'output di Oinkmaster, cioe' ogni regola che venga cancellata, aggiunta o modificata, mi viene mandato in mail se ci sono cambiamenti.
Ecco la mia entry in crontab:


IL passo successivo e' il data control con sessionlimit. Monitorera' la state table (Nota: traffico in uscita devono mantenere lo stato) e blocchera' le connessioni in uscita dalla honeypot quando 1) il numero di entri nella state tables incremente troppo velocemente, 2) quando la honeypot effettua piu' di 20 connessioni, e 3) quando il numero di bytes associati con una connessione ICMP ha raggiunto un limite predefinito - il default e' 65k (un banale ping of death). Tenete in mente che la sessione interattiva dell'attaccante con la honeynet non verra' influenzato, ma solo le connessioni in uscita. Dopo 30 minuti, le regolo aggiunte da sessionlimit a pf scadranno. Tutto questo viene loggato su syslog. Dal momento che intendiamo andare 'in diretta', starteremo sessionlimit manualmente:


Ora abilitiamo il packet forwarding:


Inizializzaimo le interfacce manualmente, tiriamo su il bridge, e lasciamo che rl2 prenda un indirizzo ip:


Accertiamoci che tutte le interfacce del bridge siano up e configurate correttamente:


Abilitiamo pf e carichiamone le regole:


Startiamo Snort a mano:


Infine, faccio girare tcpdump a manu su rl1 per catturare tutto il traffico proveniente dall'ip della mia honeypot. Un utile modificatore della riga di comando che fu aggiunto in tcpdump 3.7.1 e'-C che ruota il file salvato ogni n * 1000000 bytes.
In questo modo non dovro'poi caricare un file enorme in ethereal, lo rende un po' piu' gestibile:


Per un avvio facile di Snort, tcpdump e sessionlimit, ho creato un wrapper script chiamato honeypot-wrapper. in questo modo tutto quello che ho da fare e' lanciare lo script passandogli come parametro l'indirizzo IP della honeypot, per startare questi tre servizi:







La messa in Produzione

Il sistema operativo che ho scelto per la mia prima honeypot e'OpenBSD 3.1 vanilla. Non c'e' molto da spiegare qui - installte il S.O. e connettete l'honeypot al bridge. Con tutto funzionante come appena descritto, tutto cio' che rimane da fare e' sedersi ed aspettare che qualcuno abbocchi all'amo. Io mantengo accesso ssh sull'interfaccia di management del bridge. di modo che posso loggarmi dal mio IP di management e guardarmi i file di alert in /home/snort/log/alert. HO anche creato uno script 'quick & dirty' nella directory ~snort per vedere un riassunto del numero di attacchi:



Ed eccone l'output:


Ed infatti, qualcuno abbocco' all'esca dopo appena due giorni, compromettendo la macchina usando l'exploit SSH di Gobbles.


Conclusioni

Questo setup completo, incluso il tempo necessario a mettere insieme l'hardware necessario, mi ha tenuto impegnato per qualche ora qui e qualche ora li' nel corso di un finesettimana. Uso hardware antico - un Pentium 133MHz per il Bridge OpenBSD e un Pentium 166MHz come Honeypot. Dopo aver visto che il mio setup era in piedi e stava funzionava correttamente ne ero molto felice, ed ero contento in genere con il design della Honeypot che avevo scelto, per la sua semplicita' ed eleganza.

Da Fare

Far girare Snort sotto i daemontools di DJB. Far girare Snort in ambiente chroot(). Far girare tcpdump in ambiente chroot() e con utente non-root.