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

| 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:
| pf=YES portmap=NO inetd=NO ntpd=NO |
| net.inet.ip.forwarding=1
# 1=Permette l'inoltro di pacchetti (routing) |
| # echo up >
/etc/hostname.rl0 |
| # echo up >
/etc/hostname.rl1 |
| # echo dhcp NONE NONE
NONE /etc/hostname.rl2 |
| # echo add rl0 add
rl1 up /etc/bridgename.bridge0 |
| # pf.conf Set di
Regole per pf # # Per vedere il log: # tcpdump -n -e -ttt -r /var/log/pflog # # Per vedere i pacchetti che vengono loggati in tempo reale (una effetto tipo 'tail -f' del logfile): # tcpdump -n -e -ttt -i pflog0 # VARIABILI # La mia interfaccia di gestione. pf puo' automaticamente usare le interfacce al posto degli IP # molto comodo se si hanno IP dinamici mgmtif="rl2" # Queste interfacce non avranno uno indirizzo ip outif="rl0" inif="rl1" # Indirizzi IP abilitati a fare gestione remota mgmtips ="{ x.x.x.x/32, x.x.x.x/32 }" # Indirizzo IP pubblico della honeypot honeypot ="x.x.x.x/32" # Servizi in uscita autorizzati dalla honeypot (TCP) allowed_svcs_tcp="{ ftp, domain, www, ircd }" # Servizi in uscita autorizzati dalla honeypot (UDP) allowed_svcs_udp="{ domain, bootps }" # http://www.iana.org/assignments/ipv4-address-space # http://rfc.net/rfc1918.html # IP range che non possono essere su Internet - Se provenienti da 'fuori' saranno sicuramente spoofati reserved ="{ 0.0.0.0/8, 10.0.0.0/8, 20.20.20.0/24, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.2.0/24, 192.168.0.0/16, 204.152.64.0/23, 224.0.0.0/3, 255.255.255.255 }" # SPOOFERS # Non permettere che indirizzi riservati vengano spoofati block in quick on $outif from $reserved to any block out quick on $outif from $honeypot to $reserved # blocca e logga i pacchetti in uscita che non hanno l'IP della honeypot come sorgente block out log quick on $outif from ! $honeypot to any # DEFAULT POLICY # il filtraggio sul bridge verra' fatto sulla interfaccia esterna (rl0) # La honeypot verra' autorizzata a connettersi in uscita solo a servizi pre-determinati block out log on $outif all # Tutto il traffico puo' entrare sull'honeypot pass in on $outif all keep state # ssh sara' l'unico traffico autorizzato verso l'interfaccia di gestione block in log on $mgmtif all # solo smtp, dns, e http saranno autorizzati ad uscire dalla interfaccia di gestione block out log on $mgmtif all # NOISE # rumore (broadcast, etc) che arriva al mio cable modem viene droppato silenziosamente block in quick on $mgmtif inet from any to { 255.255.255.255, 224.0.0.1 } # Connessioni in uscita dalla Honeypot pass out log quick on $outif inet proto tcp from $honeypot to any \ port $allowed_svcs_tcp flags S/SA keep state pass out log quick on $outif inet proto udp from $honeypot to any \ port $allowed_svcs_udp keep state pass out log quick on $outif inet proto icmp from $honeypot to any \ icmp-type 8 code 0 keep state # Connessioni per Gestione Remota pass in log quick on $mgmtif inet proto tcp from $mgmtips to $mgmtif \ port ssh keep state pass out quick on $mgmtif inet proto tcp from $mgmtif to any \ port { smtp, domain, http } flags S keep state pass out quick on $mgmtif inet proto udp from $mgmtif to any \ port domain keep state |
| 0 15 * * * cd
$HOME/oinkmaster-0.6 ;
TMP=`mktemp /tmp/oinkmaster.XXXXX` && (./oinkmaster.pl -o $HOME/rules/ -q -c > $TMP 2>&1; if [ -s $TMP ]; then mail -s "Snort Oinkmaster Update `date +%m-%d-%Y`" me@foo.bar < $TMP; fi; rm $TMP) |
| #
/usr/local/bin/sessionlimit -H x.x.x.x
-i rl1 & |
| # sysctl -w
net.inet.ip.forwarding=1 |
| # ifconfig rl0 delete # ifconfig rl1 delete # brconfig bridge0 add rl0 add rl1 up # dhclient rl2 |
| # ifconfig rl0 # ifconfig rl1 # ifconfig rl2 # brconfig bridge0 |
| # pfctl -e # /sbin/pfctl -R /etc/pf.conf |
| #
/home/snort/snort-1.9.0/src/snort -i
rl1 -deq -h x.x.x.x/32 -l /home/snort/log -c
/home/snort/rules/snort.conf -D |
| # tcpdump -i rl1 -n
-s 1500 -C 2 -w
/var/log/tcpdump/tcpdump.log host x.x.x.x & |
| #!/bin/sh # Startup di snort, tcpdump, sessionlimit per la honeynet SNORT=/home/snort/snort-1.9.0/src/snort CONFIG=/home/snort/rules-1.9.0/snort.conf SNORTLOG=/home/snort/log TCPDUMP=/usr/local/bin/tcpdump TCPDUMPLOG=/var/log/tcpdump/tcpdump.log SESSIONLIMIT=/usr/local/bin/sessionlimit if [ -n "$1" ]; then ip=$1 else echo -n "Usage: `basename $0` (honeypot ip)\n" exit fi if [ -x $SNORT ]; then echo -n " Snort starting...\n" $SNORT -i rl1 -g snort -u snort -deq -h $ip/32 \ -l $SNORTLOG -c $CONFIG -D >/dev/null 2>&1 fi if [ -x $TCPDUMP ]; then echo -n " Tcpdump starting...\n" $TCPDUMP -i rl1 -n -s 1500 -C 2 -w $TCPDUMPLOG host $ip & \ >/dev/null 2>&1 fi if [ -x $SESSIONLIMIT ]; then echo -n " Sessionlimit starting...\n" /usr/local/bin/sessionlimit -H $ip -i rl1 & \ >/dev/null 2>&1 fi |
| La messa in Produzione |
| #!/bin/sh grep -v 'spp' ~snort/log/alert | grep '\[\*\*\]' | sort | uniq -c |
| # ./summary 9 [**] [1:1227:4] X11 outbound client connection detected [**] 3 [**] [1:1394:3] SHELLCODE x86 NOOP [**] 5 [**] [1:1418:2] SNMP request tcp [**] 4 [**] [1:1420:2] SNMP trap tcp [**] 4 [**] [1:1421:2] SNMP AgentX/tcp request [**] 1 [**] [1:1810:1] MISC Successful Gobbles SSH exploit [**] 1 [**] [1:1812:1] MISC Gobbles SSH exploit attempt [**] 1 [**] [1:249:1] DDOS mstream client to handler [**] 5 [**] [1:469:1] ICMP PING NMAP [**] 7 [**] [1:474:1] ICMP superscan echo [**] 1 [**] [1:498:3] ATTACK RESPONSES id check returned root [**] 1 [**] [1:587:2] RPC portmap request status [**] 1 [**] [1:598:5] RPC portmap listing [**] 9 [**] [1:618:2] SCAN Squid Proxy attempt [**] 3 [**] [1:628:1] SCAN nmap TCP [**] |
| 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.