Ho bisogno di analizzare un registro Apache con Snort e altri IDS / WAF (Suricata, mod_security e Shadow Daemon). Per fare ciò, stavo pensando di creare pacchetti TCP con le richieste GET e POST archiviate nel log di Apache con Scapy in Python. Qualcosa del genere:
packet= IP(dst=dst_ip)/TCP(dport=9999)/Raw(load=payload) #payload contains the http request
Conservo questi pacchetti TCP in un file PCAP per poi analizzarlo con Snort o con gli altri IDS / WAF che ho detto.
Il problema con questo metodo di creazione dei pacchetti è che non c'è stato nella comunicazione e Snort lo rileva con questo avviso:
[**] [129:2:1] Data on SYN packet [**]
[Classification: Generic Protocol Command Decode] [Priority: 3]
09/01-20:29:50.816860 127.0.0.1:20 -> 127.0.0.1:9999
TCP TTL:64 TOS:0x0 ID:1 IpLen:20 DgmLen:102
******S* Seq: 0x0 Ack: 0x0 Win: 0x2000 TcpLen: 20
[Xref => http://www.securityfocus.com/bid/34429][Xref => http://cve.mitre.org/cgi-bin/cvename.cgi?name=2009-1157]
Quindi, ho adattato il codice per aggiungere una sequenza e un numero di riconoscimento:
ip = IP(src=src_ip, dst=dst_ip)
packet = (ip / TCP(sport=src_port, dport=dest_port, flags='PA',
seq=seq_n, ack=ack_n) / Raw(load=fullrequest[0])
seq_n = seq_n + len(payload.encode('UTF8'))
In questo modo, c'è una sequenza ma l'avviso Dati sul pacchetto SYN cambia per un altro (anche se invece di lasciare tanti avvisi quanti lo stesso numero di pacchetti, solo il 22% dei pacchetti viene lanciato un avviso):
[**] [129:12:1] Consecutive TCP small segments exceeding threshold [**]
[Classification: Potentially Bad Traffic] [Priority: 2]
09/01-20:49:15.037299 127.0.0.1:60664 -> 127.0.0.1:80
TCP TTL:64 TOS:0x0 ID:1 IpLen:20 DgmLen:94
***AP*** Seq: 0x156E7 Ack: 0xB Win: 0x2000 TcpLen: 20
Alla fine, ho scelto di creare una struttura client-server con socket (invio del payload da una macchina virtuale a un'altra), analizzare il traffico con WireShark e quindi salvare i pacchetti come PCAP. Il problema qui è che Snort non rileva un singolo attacco. Inoltre, non posso automatizzare questa operazione di analisi.
Esempio di attacco:
"GET /shoutbox.php?conf=../../../../../../../../etc/passwd HTTP/1.1"
"GET /cgi-bin/apexec.pl?etype=odp&template=../../../../../../../../../../etc/hosts%00.html&passurl=/category/ HTTP/1.1"
Sto usando Snort con Pulledpork per scaricare le regole e l'ho provato con un PCAP che stavo usando nel post (non costruito manualmente) e sta rilevando gli attacchi. Forse c'è qualcosa di sbagliato al momento della creazione dei pacchetti.
Ecco il mio confetto di Snort e Pulledpork:
Snort: snort.conf
Pulledpork: pulledpork.conf
Ecco i miei PCAP:
Primo modo (Dati sul pacchetto SYN): output. pcap
Seconda via (segmenti piccoli TCP consecutivi che superano la soglia): output_seq.pcap
Cosa posso fare di sbagliato? Qualche suggerimento? Qual è il modo più semplice per rilevare gli attacchi in un registro Apache con IDS / WAF?