La regola Snort non funziona quando si combinano i campi "contenuto"

2

Sto provando a scrivere una regola snort che emette un avviso ogni volta che un server web restituisce un documento HTML contenente una stringa specifica.

Ho trovato la seguente regola:

alert tcp any any -> any any (msg:"Yay"; flow:to_client,established; content:"Content-Type: text/html"; http_header; content:"Hello there"; metadata:service http; sid:12345678; rev:1;)

La prima query content controlla se la risposta contiene un documento HTML, la seconda verifica la presenza della stringa specifica su cui voglio testare la risposta.

La cosa strana è che quando si rimuove uno dei campi content , l'avviso funziona correttamente. In combinazione, tuttavia, non è così.

Qualcuno sa perché?

    
posta ruhleder 03.06.2015 - 23:48
fonte

1 risposta

1

So che questa è una domanda vecchia, ma questa è stata una cosa che ho incontrato molte volte, quindi immagino che fornire una risposta possa aiutare gli altri che si sono imbattuti in questo.

La mia spiegazione

Secondo la mia esperienza, alcune versioni di Snort hanno problemi quando si passa dall'utilizzo delle opzioni HTTP che rispondono all'analisi del preprocessore e poi si passa a non utilizzarle. Data la regola che hai fornito, la prima stringa di contenuto:

content:"Content-Type: text/html"; http_header;

Utilizza il preprocessore http e il tipo di motore Snort entra nella modalità di analisi delle parti della richiesta / risposta. Seguito con la stringa del contenuto:

content:"Hello there";

... senza specificare dove trovarlo, il motore Snort ha difficoltà a trovarlo.

Naturalmente, questa è la mia "teoria" basata sull'esperienza e sulla risoluzione dei problemi.

Soluzioni possibili

  1. Specifica content:"Hello there"; prima dell'altro contenuto (sposta a sinistra). Se applicabile, specifica fast_pattern:only; .

  2. Lascia il content:"Hello there"; dove si trova, ma prova ad aggiungere l'opzione pkt_data; prima di esso. Questo dovrebbe dire a Snort di dimenticare l'analisi degli elementi di richiesta / risposta HTTP e spostare il doe_ptr all'inizio della richiesta HTTP (ad esempio il pacchetto) e quindi cercare il contenuto. Oppure, se tale contenuto è previsto nei dati del file della risposta, utilizzare invece l'opzione file_data; . Di nuovo, pkt_data; o file_data; richiedono di mettere quelle opzioni prima le opzioni di content che devono essere influenzate.

risposta data 13.07.2018 - 18:49
fonte

Leggi altre domande sui tag