Analizando el registro de Apache con Snort

0

Necesito analizar un registro de Apache con Snort y otros IDS / WAFs (Suricata, mod_security y Shadow Daemon). Para hacerlo, estaba pensando en crear paquetes TCP con las solicitudes GET y POST almacenadas en el registro de Apache con Scapy en Python. Algo como esto:

packet= IP(dst=dst_ip)/TCP(dport=9999)/Raw(load=payload) #payload contains the http request

Almaceno estos paquetes TCP en un archivo PCAP para luego analizarlos con Snort u otros IDS / WAF que dije.

El problema con este método de construcción de paquetes es que no hay un estado en la comunicación y Snort lo detecta con esta alerta:

[**] [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]

Luego, adapté el código para agregar una secuencia y un número de confirmación:

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'))

De esta manera, hay una secuencia pero la alerta Datos en el paquete SYN cambia por otra (aunque en lugar de dejar tantas alertas como la misma cantidad de paquetes, solo el 22% de los paquetes se lanzan una alerta):

[**] [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

Al final, elegí crear una estructura cliente-servidor con sockets (enviando la carga útil de una máquina virtual a otra), analizar el tráfico con WireShark y luego guardar los paquetes como PCAP. El problema aquí es que Snort no detecta un solo ataque. Además, no puedo automatizar esta operación de análisis.

Ejemplo de ataques:

"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"

Estoy usando Snort con Pulledpork para descargar las reglas y lo he intentado con un PCAP que estaba usando en el postgrado (no construido manualmente) y está detectando ataques. Tal vez haya algo mal en el momento de crear paquetes.

Aquí está mi confección Snort y Pulledpork:

Snort:

Aquí están mis PCAPs:

Primera forma (datos en el paquete SYN):

Segunda vía (Segmentos pequeños TCP consecutivos que exceden el umbral): output_seq.pcap

¿Qué puedo estar haciendo mal? ¿Alguna pista? ¿Hay alguna forma más fácil de detectar ataques en un registro de Apache con IDS / WAF?

    
pregunta Neveralways 04.09.2018 - 17:56
fuente

1 respuesta

2

Tu enfoque para esto es ... un poco mal orientado.

No es necesario que esté creando paquetes para reproducir eventos de un registro de Apache. El registro es una lista de solicitudes HTTP, así que use una biblioteca que pueda realizar solicitudes HTTP adecuadas, como la propia biblioteca requests . De todos modos, ni siquiera tiene toda la información que necesita para elaborar estos paquetes: en el caso de los POST, no sabe cuál fue la carga útil en realidad, solo el lugar donde se envió.

Configure sus IDSes para que todos monitoreen la misma interfaz. Dada una lista de URL / rutas, escriba una secuencia de comandos para simplemente request cada una. Luego haga que cada IDS descargue su salida en algún lugar y vea qué detectó cada uno. Puede repetir este proceso y evaluar o ajustar las reglas según sea necesario.

    
respondido por el Ivan 04.09.2018 - 19:54
fuente

Lea otras preguntas en las etiquetas