Мне нужно проанализировать журнал Apache с помощью Snort и других IDS / WAF (Suricata, mod_security и Shadow Daemon). Для этого я думал о создании пакетов TCP с запросами GET и POST, которые хранятся в журнале Apache с помощью Scapy в Python. Примерно так:
packet= IP(dst=dst_ip)/TCP(dport=9999)/Raw(load=payload) #payload contains the http request
Я сохраняю эти TCP-пакеты в файле PCAP для последующего анализа, анализируя их с помощью Snort или других идентификаторов IDS / WAF, которые я сказал.
Проблема этого метода построения пакетов заключается в том, что в сообщении нет состояния, и Snort обнаруживает его с помощью этого предупреждения:
[**] [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]
Затем я адаптировал код для добавления последовательности и номера подтверждения:
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'))
Таким образом, существует последовательность, но предупреждение Данные о пакете SYN изменяется для другого (хотя вместо того, чтобы оставлять столько предупреждений, сколько столько же пакетов, только 22% пакетов выдают оповещения):
[**] [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
В итоге я решил создать структуру клиент-сервер с сокетами (отправку полезных данных с одной виртуальной машины на другую), проанализировать трафик с помощью WireShark и затем сохранить пакеты как PCAP. Проблема в том, что Snort не обнаруживает ни одной атаки. Кроме того, я не могу автоматизировать эту операцию анализа.
Пример атаки:
"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"
Что я могу делать не так? Любой намек?