In che modo ndpi rileva effettivamente il protocollo HTTP?

4

Ho scavato il ndpi codebase e ho cercato di capire come sta effettivamente rilevando il protocollo HTTP.

Quello che ho trovato finora è che sono per cercare il tipo di richiesta nel payload e se non trovato eseguono alcuni controlli per classificarlo come risposta HTTP, ma è sufficiente per classificare un pacchetto? Ovviamente qualcuno può intrecciarsi con i dati della richiesta e ignorare quei controlli sulle stringhe.

La stessa cosa che ho visto nel protocollo SSDP ( solo verifiche delle stringhe).

Qual è la vista di alto livello della categorizzazione del pacchetto come HTTP (o qualsiasi protocollo "x")?

    
posta hashcode55 14.03.2017 - 22:22
fonte

2 risposte

6

What is the high level view of categorizing the packet as HTTP (or any "x" protocol)?

I numeri di porta standard sono vicini ottieni una classificazione ufficiale dei protocolli a livello di applicazione. Ma in pratica, i servizi spesso non aderiscono alle loro porte predefinite e non esiste semplicemente un modo universale per rilevare quale protocollo di livello 7 viene utilizzato. Pertanto, l'analisi approfondita dei pacchetti si basa in gran parte sull'euristica delle espressioni regolari o sul semplice confronto delle stringhe di base (come nel codice di riferimento di nDPI).

Nella maggior parte dei casi non esiste un modo migliore per rilevare un protocollo rispetto alla ricerca di schemi tipici nei pacchetti (preferibilmente iniziali) - come una riga di richiesta GET con intestazioni successive per identificare una connessione HTTP. Di conseguenza, hai ragione che è facile eludere questi controlli oscurando il protocollo (spesso fatto dalle applicazioni BitTorrent). Il progetto di filtro Linux Layer 7 fuori produzione ha un Domande frequenti che risolvono questi problemi:

Q: Isn't this just another pointless step in an arms race in which protocols will continually adapt to evade classification?

A: You can look at it like that, but essentially no. Internet standards like HTTP will not do this. Only P2P programs and the like will. This means that, at worst, what you will need to do is to shape the "unknown" classification down, leaving the most bandwidth for known protocols like HTTP, SMTP, and so on.

Dai anche un'occhiata alla l7protocols wiki che documenta vari metodi di identificazione del protocollo, molti dei quali basati su espressioni regolari.

    
risposta data 15.03.2017 - 01:09
fonte
3

Da aggiungere alla risposta di Arminius :
Esistono diversi casi d'uso per le soluzioni DPI:

  • Un caso d'uso è solo per classificare rapidamente il traffico per ottimizzare la latenza di rete per il traffico importante, come preferire il traffico VoIP e rallentare BitTorrent. In questo caso d'uso è importante utilizzare euristiche rapide che non devono essere così rigorose perché nel peggiore dei casi il traffico sbagliato viene accelerato o rallentato.
  • Un altro caso d'uso è la sicurezza. Qui è importante rilevare il protocollo in modo affidabile perché è necessario decidere se il traffico deve essere passato senza ulteriori analisi, dovrebbe essere bloccato o ispezionato in modo più dettagliato. Anche se l'euristica come in nDPI viene utilizzata anche in questi casi, spesso può essere aggirata. Un'alternativa migliore, ma in genere molto più lenta, sarebbe invece un'analisi del protocollo più dettagliata e l'applicazione del protocollo, come fatto per esempio nei proxy HTTP.
risposta data 15.03.2017 - 07:09
fonte

Leggi altre domande sui tag