Правильно создавать TCP-пакеты в Python - PullRequest
0 голосов
/ 02 сентября 2018

Мне нужно проанализировать журнал 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"

Что я могу делать не так? Любой намек?

1 Ответ

0 голосов
/ 07 сентября 2018

Ответил здесь:

https://security.stackexchange.com/questions/193036/analyzing-apache-log-with-snort

По сути, вместо создания собственных пакетов лучше использовать библиотеку requests и отправлять запросы напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...