Applicazione dell'apprendimento automatico per il filtro DDoS


12

Nel corso di Machine Learning di Stanford, Andrew Ng ha menzionato l'applicazione dell'ML in IT. Qualche tempo dopo, quando ho ottenuto DDoS di dimensioni moderate (circa 20k bot) sul nostro sito, ho deciso di lottare contro di esso usando un semplice classificatore di reti neurali.

Ho scritto questo script Python in circa 30 minuti:
https://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos

Utilizza pyBrain e accetta come input 3 log nginx , due dei quali per addestrare Neural Network:

  1. Con buone domande
  2. Con quelli cattivi

E un registro per la classificazione

Da cattive domande ..

0.0.0.0 - - [20/Dec/2011:20:00:08 +0400] "POST /forum/index.php HTTP/1.1" 503 107 "http://www.mozilla-europe.org/" "-"

...e bene...

0.0.0.0 - - [20/Dec/2011:15:00:03 +0400] "GET /forum/rss.php?topic=347425 HTTP/1.0" 200 1685 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0"

... costruisce un dizionario:

['__UA___OS_U', '__UA_EMPTY', '__REQ___METHOD_POST', '__REQ___HTTP_VER_HTTP/1.0', 
'__REQ___URL___NETLOC_', '__REQ___URL___PATH_/forum/rss.php', '__REQ___URL___PATH_/forum/index.php',
'__REQ___URL___SCHEME_', '__REQ___HTTP_VER_HTTP/1.1', '__UA___VER_Firefox/3.0',
'__REFER___NETLOC_www.mozilla-europe.org', '__UA___OS_Windows', '__UA___BASE_Mozilla/5.0',
'__CODE_503', '__UA___OS_pl', '__REFER___PATH_/', '__REFER___SCHEME_http', '__NO_REFER__',
'__REQ___METHOD_GET', '__UA___OS_Windows NT 5.1', '__UA___OS_rv:1.9',
'__REQ___URL___QS_topic', '__UA___VER_Gecko/2008052906']

Ogni voce che formiamo la nostra rete con / voce che dobbiamo classificare ...

0.0.0.0 - - [20/Dec/2011:20:00:01 +0400] "GET /forum/viewtopic.php?t=425550 HTTP/1.1" 502 107 "-" "BTWebClient/3000(25824)"

... viene convertito in feature-vector:

[False, False, False, False, True, False, False, True, True, False, False, False, False, False, False, False, False, True, True, False, False, False, False]

Dopo tutto ciò, esiste un percorso standard di suddivisione del set di dati in training e set di test, formazione delle reti neurali e selezione del migliore. Dopo questo processo (che può richiedere molto tempo a seconda della dimensione del set di dati) possiamo finalmente classificare i log usando una rete addestrata.

Ma qui ci sono una serie di problemi con questo approccio:

  1. L'apprendimento automatico supervisionato è un po 'sbagliato per quel tipo di problema, perché per rilevare i robot devo prima rilevare i robot e addestrare la rete neurale con quei dati.
  2. Non prendo il comportamento del cliente in un account. È meglio considerare il grafico delle transizioni da una pagina all'altra per ciascun utente.
  3. Non prendo la località dei clienti in un account. Se un computer in rete è infetto da alcuni virus, allora ci sono più possibilità che altri computer in quella rete siano infetti.
  4. Non prendo i dati di una geolocalizzazione in un account. Ovviamente se gestisci un sito in Russia, ci sono poche possibilità di clienti dal Brasile.
  5. Non so se fosse il modo giusto di utilizzare la rete neurale e la classificazione per risolvere tale problema. Forse sto meglio con un sistema di rilevamento delle anomalie.
  6. È meglio quando il metodo ML è "online" (o il cosiddetto "streaming") in modo che possa essere addestrato al volo.

Quindi ecco le domande:
cosa faresti se dovessi affrontare lo stesso problema di difesa da un attacco DDoS dato solo i registri del server web attuali (che consistono in buoni client e bot) e dati storici (registri per il giorno / settimana / mese precedente con clienti per lo più buoni)?
Quale approccio di Machine Learning sceglieresti.
Quali algoritmi useresti?

Risposte:


11

Che ne dici di algoritmi di rilevamento anomalie? Mentre menzioni la lezione di Andrew Ng probabilmente hai visto la sezione "XV. RILEVAMENTO DELL'ANOMALIA" su ml-class.org , ma comunque.

Il rilevamento delle anomalie sarà superiore a una classificazione controllata in scenari simili ai tuoi perché:

  • normalmente hai pochissime anomalie (es. esempi troppo "positivi")
  • normalmente hai tipi molto diversi di anomalie
  • le anomalie future potrebbero non assomigliare a quelle che hai avuto finora

Il punto importante nel rilevamento delle anomalie è, quali caratteristiche scegliere. Due consigli comuni qui sono per scegliere le funzionalità

  • Distribuzione gaussiana (o distorcerli per essere così)

  • probabilità p (anomalia) essere incomparabile a p (normale) - diciamo, i valori anomali sono molto grandi mentre quelli normali sono molto piccoli (o viceversa).

Non sono sicuro che la geolocalizzazione possa aiutare per il tuo scenario, ma il comportamento del cliente sarebbe sicuramente importante, anche se probabilmente differirebbe da un'applicazione all'altra. È possibile che il rapporto tra GET / POST sia importante. O un rapporto tra le dimensioni della risposta e il conteggio delle richieste. O il numero di hit a pagina singola. Se si dispone di tali informazioni nei registri, sicuramente è possibile utilizzare i dati per l'analisi retrospettiva, seguita dalla lista nera IP :)


+1 per il rilevamento di anomalie. Aggiungerei anche "numero di accessi tentati negli ultimi 5 minuti" e "numero di accessi tentati da ip X negli ultimi 5 minuti".
neurone,

Il problema principale con il rilevamento di anomalie (come è stato dato in Classe ML) è che non è possibile utilizzarlo per enormi quantità di funzionalità con relazioni complesse tra loro - è troppo costoso dal punto di vista computazionale. Nel mio esempio ho 23 funzionalità su 2 (!!) query anche senza grafico delle chiamate, geolocalizzazione e nginxvariabili aggiuntive nel registro. E non posso usare PCA perché gli aggressori possono cambiare il comportamento dei robot.
SaveTheRbtz,

@SaveTheRbtz re "computazionalmente costoso" - IIRC, il rilevamento di anomalie presentato in classe ml era solo una stima della densità, quindi si moltiplicavano semplicemente le probabilità delle caratteristiche come in p (x1) * .. * p (xN) che, I credi, è O (n) quindi stai cercando O (logn) o qualcosa del genere? Ma in ogni caso, si tratta di una domanda giusta e mi ha fatto pensare a selezione automatica funzione - così ha chiesto una domanda a machinelearning.stackexchange.com/questions/184
andreister

Per essere più precisi, sto parlando di un massimo di 100.000 funzionalità per 1 Mb di file di registro. PS. Bella domanda!
SaveTheRbtz,

1

Questo è un problema difficile, ecco alcune osservazioni:

  • Questo documento potrebbe esservi di aiuto - si basa sulle tecniche di apprendimento supervisionato (nel contesto della classificazione multi-classe) per rilevare annunci pubblicitari. Poiché le strategie contraddittorie si evolvono, gli autori devono fare affidamento su esperti umani che annotano rare "anomalie". Usano tra l'altro tecniche di classificazione basate su SVM.
  • Come notato da altri, è possibile provare il rilevamento di anomalie / anomalie basate sull'apprendimento non supervisionato, ma ciò richiederebbe molta ottimizzazione per ottenere il giusto equilibrio tra falsi positivi e falsi negativi.
  • Avere un buon set di funzionalità è molto importante - la scelta della metodologia è secondaria (cioè una tecnica semplice come Naive Bayes o la regressione logistica è spesso sufficiente dato un buon set di funzionalità)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.