Analizzando il registro di Apache con Snort

0

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?

    
posta Neveralways 04.09.2018 - 17:56
fonte

1 risposta

2

Il tuo approccio a questo è ... un po 'errato.

Non dovresti aver bisogno di creare pacchetti per riprodurre gli eventi da un log di Apache. Il log è un elenco di richieste HTTP, quindi utilizza una libreria in grado di effettuare richieste HTTP appropriate, come la stessa libreria requests . Non hai nemmeno tutte le informazioni di cui hai bisogno per creare questi pacchetti in ogni caso - nel caso dei POST, non sai quale fosse realmente il payload, solo dove è stato inviato.

Configura i tuoi ID per monitorare la stessa interfaccia. Dato un elenco di URL / percorsi, scrivi uno script semplicemente su request ciascuno. Poi fai in modo che ogni IDS scarichi il suo output da qualche parte e vedi cosa viene rilevato. Puoi ripetere questo processo e valutare o ottimizzare le regole secondo necessità.

    
risposta data 04.09.2018 - 19:54
fonte

Leggi altre domande sui tag