VoIP and Hacking

Log delle intrusioni su MySQL grazie al target ulogd di iptables

by admin on Apr.25, 2009, under Hacking, Sicurezza

Il target -j LOG di iptables/netfilter salva un sommario testuale degli headers dei pacchetti intercettati nel sottosistema di syslog che va poi normalmente a finire in /var/log/messages, o comunque dove sia stato configurato.
Ma come fare, nel caso volessimo registrare l’intero pacchetto, o una porzione particolare di esso, per esami futuri?
Contrariamente a quanto avviene con altri moduli firewall, vi è bisogno di un programma in userspace, nella fattispecie ulogd, per poter trattare i pacchetti ottenuti.

In Debian o Ubuntu, “ulogd” è un software appartenente alla categoria Universe, quindi non ufficilmente supportato. Non ci si deve meravigliare se su Ubuntu 8.10, il package presenta un bug:

Starting netfilter userspace log daemon: Wed Apr 22 23:56:12 2009 <7> ulogd.c:462 load_plugins: ‘/usr/lib/ulogd/ulogd_MYSQL.so’: /usr/lib/ulogd/ulogd_MYSQL.so: undefined symbol: mysql_fetch_field

facilmente aggirabile con un workaround:

# env LD_PRELOAD=/usr/lib/libmysqlclient.so.15 invoke-rc.d ulogd start
Starting netfilter userspace log daemon: ulogd.

Ulogd  si connette al device netlink del kernel Linux e legge i messaggi provenienti da netfilter e accodati nel trarget ULOG di iptables.
La cosa funziona così:
Viene registrato con iptables un target di nome ULOG
se il target viene raggiunto, il pacchetto viene inoltrato utilizzando netlink multicast, quindi viene restituito immediatamente NF_CONTINUE

Le impostazioni di ciò vanno fatte editando /etc/ulogd.conf.
Per esempio, si commenti la linea relativa al plugin /usr/lib/ulogd/ulogd_LOGEMU.so, e si decommenti la linea relativa invece al plugin /usr/lib/ulogd/ulogd_PCAP.so. Quindi si faccia ripartire il daemon ulogd con:

# /etc/rc.d/init.d/ulogd start

/var/log/ulogd.log dovrebbe ora contenere alcune linee che indicano che il daemon è avviato, e /var/log/ulogd.pcap dovrebbe essere lungo 24 bytes;

Per fare un semplice test potremmo richiedere al kernel di registrare tutti i pacchetti destinati a 99.99.99.99, e poi provocare la registrazione di una qualche attività:

# iptables -I OUTPUT -d 99.99.99.99 -j ULOG –ulog-nlgroup 1 –ulog-cprange 20

nlgroup è il parametro del kernel per “netlink group”.Usando differenti numeri di nlgroup numbers, è possibile avviare più di una istanza di ulogd, ciascuna in ascolto su un differente netlink group, e quindi inviare i pacchetti a differenti files.

Il parametro cprange specifica quanti bytes catturare di ciascun pacchetto, in modo simile al parametro snap length (-s) di tcpdump. Anziché catturare l’intero pacchetto possiamo catturarne i primi 20 bytes.

Se si prova a effettuare un ping verso l’host prescelto:

# ping -c 5 99.99.99.99
PING 99.99.99.99 (99.99.99.99) 56(84) bytes of data.


— 99.99.99.99 ping statistics —
5 packets transmitted, 0 received, 100% packet loss, time 3999ms


# tcpdump -r /var/log/ulog/pcap.log -qtnp
reading from file /var/log/ulog/pcap.log, link-type RAW (Raw IP)
IP 192.168.1.10 > 99.99.99.99: [|icmp]
IP 192.168.1.10 > 99.99.99.99: [|icmp]
IP 192.168.1.10 > 99.99.99.99: [|icmp]
IP 192.168.1.10 > 99.99.99.99: [|icmp]
IP 192.168.1.10 > 99.99.99.99: [|icmp]

I 20 bytes dell’intestazione IP sono stati sufficienti a riconoscere correttamente indirizzo IP sorgente e protocollo.

Per osservare i pacchetti via via che arrivano, basta dare semplicemente in una shell:

# tail -f /var/log/ulog/ulogd.pcap | tcpdump -r - -qtnp

Per attivare la registrazione su database MySQL occorre invece decommentare la linea seguente in /etc/ulogd.conf:

plugin=”/usr/lib/ulogd/ulogd_MYSQL.so”

Una volta fatto, occorre cercare nel file le linee seguenti e modificarle in linea con le impostazioni dell’utenza mysql che andremo a creare, se non intendiamo utilizzare una utenza già presente:

[MYSQL]
table=”ulog”
pass=”cambiami”
user=”ulog”
db=”ulogd”
host=”localhost”

occorre poi (per allinearsi alle impostazioni mostrate) creare un database chiamato ulogd e un utente ulog con relativa password e dargli i permessi per operare sul database appena creato.

la struttura del database va costruita a partire dal seguente SQL:

CREATE TABLE ulog (id    INT UNSIGNED AUTO_INCREMENT UNIQUE,
raw_mac      VARCHAR(80),
oob_time_sec      INT UNSIGNED,
oob_time_usec  INT UNSIGNED,
oob_prefix      VARCHAR(32),
oob_mark      INT UNSIGNED,
oob_in      VARCHAR(32),
oob_out      VARCHAR(32),
ip_saddr      INT UNSIGNED,
ip_daddr      INT UNSIGNED,
ip_protocol      TINYINT UNSIGNED,
ip_tos      TINYINT UNSIGNED,
ip_ttl      TINYINT UNSIGNED,
ip_totlen      SMALLINT UNSIGNED,
ip_ihl      TINYINT UNSIGNED,
ip_csum      SMALLINT UNSIGNED,
ip_id      SMALLINT UNSIGNED,
ip_fragoff      SMALLINT UNSIGNED,
tcp_sport      SMALLINT UNSIGNED,
tcp_dport      SMALLINT UNSIGNED,
tcp_seq      INT UNSIGNED,
tcp_ackseq      INT UNSIGNED,
tcp_window      SMALLINT UNSIGNED,
tcp_urg      TINYINT,
tcp_urgp      SMALLINT UNSIGNED,
tcp_ack      TINYINT,
tcp_psh      TINYINT,
tcp_rst      TINYINT,
tcp_syn      TINYINT,
tcp_fin      TINYINT,
udp_sport      SMALLINT UNSIGNED,
udp_dport      SMALLINT UNSIGNED,
udp_len      SMALLINT UNSIGNED,
icmp_type      TINYINT UNSIGNED,
icmp_code      TINYINT UNSIGNED,
icmp_echoid      SMALLINT UNSIGNED,
icmp_echoseq      SMALLINT UNSIGNED,
icmp_gateway      INT UNSIGNED,
icmp_fragmtu      SMALLINT UNSIGNED,
pwsniff_user      VARCHAR(30),
pwsniff_pass      VARCHAR(30),
ahesp_spi      INT UNSIGNED,
KEY index_id    (id)
);

Ora è possibile riavviare ulogd per iniziare la raccolta dei pacchetti catturati tramite MySQL.

# invoke-rc.d ulogd restart

Se volessimo catturare alcuni dei tentativi di intrusione o semplice scansione che più comunemente mirano ai sistemi Windows per poter assegnare la palma del più sfigato, basterebbe impostare questo filtro, magari dopo aver posto un qualche wrapper ingannevole in ascolto sulle porte specifiche:

# FILTER=”-i eth0″; MSPORTS=”–destination-ports 139,445″ PREFIX=”ms_intrusion”
# iptables -A INPUT $FILTER -m mutiport -p tcp $MSPORTS -j ULOG –ulog-nlgroup 1 –ulog-prefix $PREFIX

Send post as PDF to PDF | PDF Creator | PDF Converter
:, , ,

Comments are closed.

Cerchi qualcosa in particolare?

Usa il form qui sotto per cercare nel sito:

Blogroll!

Alcuni links...

Archives

Tutte le entries, in ordine cronologio...