Zastosowanie uczenia maszynowego do filtrowania DDoS

12

Na kursie uczenia maszynowego Stanforda Andrew Ng wspomniał o stosowaniu ML w IT. Jakiś czas później, kiedy dostałem DDoS o średniej wielkości (około 20 tys. Botów) na naszej stronie, postanowiłem z nim walczyć za pomocą prostego klasyfikatora sieci neuronowej.

Napisałem ten skrypt Pythona w około 30 minut:
https://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos

Wykorzystuje pyBrain i pobiera 3 dzienniki nginx jako dane wejściowe, z których dwa służą do szkolenia sieci neuronowej:

  1. Z dobrymi zapytaniami
  2. Ze złymi

I jeden dziennik do klasyfikacji

Od złych zapytań ..

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/" "-"

...I dobrze...

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"

... konstruuje słownik:

['__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']

Każdy wpis, w którym szkolimy naszą sieć / wpis, który musimy sklasyfikować ...

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)"

... zostaje przekonwertowany na wektor cech:

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

Po tym wszystkim istnieje standardowa ścieżka podziału zestawu danych na zestawy szkoleniowe i testowe, szkolenia sieci neuronowych i wybranie najlepszego. Po tym procesie (który może zająć dość dużo czasu w zależności od rozmiaru zestawu danych) możemy w końcu sklasyfikować dzienniki za pomocą wyszkolonej sieci.

Ale oto kilka problemów z tym podejściem:

  1. Nadzorowane uczenie maszynowe jest trochę niewłaściwe dla tego rodzaju problemu, ponieważ aby wykryć boty , najpierw muszę wykryć boty i wyszkolić sieć neuronową z tymi danymi.
  2. Nie biorę zachowania klienta na konto. Lepiej jest rozważyć wykres przejścia między stronami dla każdego użytkownika.
  3. Nie biorę lokalizacji klientów na konto. Jeśli jeden komputer w sieci zostanie zainfekowany jakimś wirusem, istnieje większe prawdopodobieństwo, że inne komputery w tej sieci zostaną zainfekowane.
  4. Nie biorę danych geolokalizacyjnych na konto. Oczywiście, jeśli prowadzisz witrynę w Rosji, szanse klientów z Brazylii są niewielkie.
  5. Nie wiem, czy to właściwy sposób wykorzystania sieci neuronowej i klasyfikacji do rozwiązania takiego problemu. Być może lepiej mi było z jakimś systemem wykrywania anomalii.
  6. Lepiej jest, gdy metoda ML jest „online” (lub tak zwana „streaming”), aby można ją było trenować w locie.

Oto pytania:
co byś zrobił, gdybyś miał do czynienia z tym samym problemem obrony przed atakiem DDoS, biorąc pod uwagę tylko bieżące dzienniki serwera (składające się z dobrych klientów i botów) oraz dane historyczne (dzienniki z poprzedniego dnia / tygodnia / miesiąca) z przeważnie dobrymi klientami)?
Które podejście do uczenia maszynowego wybrałbyś?
Jakich algorytmów byś użył?

SaveTheRbtz
źródło

Odpowiedzi:

11

Co powiesz na algorytmy wykrywania anomalii? Jak wspomniałeś o lekcji Andrew Ng, prawdopodobnie widziałeś sekcję „XV. ANOMALIA DETECTION” na ml-class.org , ale i tak.

Wykrywanie anomalii będzie lepsze niż nadzorowana klasyfikacja w scenariuszach podobnych do twojego, ponieważ:

  • zwykle masz bardzo mało anomalii (tj. zbyt mało „pozytywnych” przykładów)
  • zwykle masz bardzo różne rodzaje anomalii
  • przyszłe anomalie mogą nie przypominać tych, które do tej pory miałeś

Ważnym punktem w wykrywaniu anomalii jest to, które funkcje wybrać. Dwie popularne porady dotyczące wyboru funkcji

  • Rozkład Gaussa (lub zniekształć je, aby tak było)

  • prawdopodobieństwo p (anomalia) będzie nieporównywalne z p (normalnym) - powiedzmy, anomalne wartości są bardzo duże, podczas gdy normalne są bardzo małe (lub odwrotnie).

Nie jestem pewien, czy geolokalizacja pomogłaby w twoim scenariuszu, ale zachowanie klienta na pewno miałoby znaczenie - chociaż prawdopodobnie różni się w zależności od aplikacji. Może się okazać, że stosunek GET / POST ma znaczenie. Lub stosunek wielkości odpowiedzi do liczby żądań. Lub liczba pojedynczych odsłon. Jeśli masz takie informacje w logach - zdecydowanie możesz użyć tych danych do analizy retrospektywnej, a następnie czarnej listy IP :)

andreister
źródło
+1 za wykrycie anomalii. Dodałbym również „liczbę prób logowania z ostatnich 5 minut” i „liczbę prób logowania z ip X ostatnich 5 minut”.
neuron
Główny problem z wykrywaniem anomalii (tak jak podano to w klasie ML) polega na tym, że nie można jej używać do ogromnej liczby funkcji o złożonych relacjach między nimi - jest to zbyt kosztowne obliczeniowo. W moim przykładzie mam 23 funkcje z 2 (!!) zapytań, nawet bez grafu połączeń, geolokalizacji i dodatkowych nginxzmiennych w logu. Nie mogę używać PCA, ponieważ atakujący mogą zmienić zachowanie botów.
SaveTheRbtz
@SaveTheRbtz ponownie „obliczeniowo drogi” - IIRC, wykrywanie anomalii przedstawione w klasie ml było po prostu oszacowaniem gęstości, więc pomnożyłbyś prawdopodobieństwa swoich funkcji jak w p (x1) * .. * p (xN), które, ja uwierz, czy O (n) więc szukasz O (logn) czy coś? Ale tak czy inaczej, to jest dobre pytanie i to mnie myśleć o automatyczny wybór funkcji - tak zadał pytanie na machinelearning.stackexchange.com/questions/184
andreister
Mówiąc ściślej - mówię o 100 000 funkcji na 1 MB pliku dziennika. PS. Miłe pytanie!
SaveTheRbtz
1

To trudny problem, oto kilka spostrzeżeń:

  • Ten artykuł może ci pomóc - opiera się na nadzorowanych technikach uczenia się (w kontekście klasyfikacji wielu klas) w celu wykrycia reklam przeciwnych. Ponieważ strategie przeciwne ewoluują, autorzy muszą polegać na ludzkich ekspertach, którzy opisują rzadkie „anomalie”. Wykorzystują między innymi techniki rankingowe oparte na SVM.
  • Jak zauważyli inni, możesz wypróbować wykrywanie anomalii / wartości odstających oparte na uczeniu się bez nadzoru, ale wymagałoby to wiele dostrajania, aby uzyskać równowagę między fałszywie dodatnimi a fałszywymi negatywami.
  • Posiadanie dobrego zestawu funkcji jest bardzo ważne - wybór metodologii jest drugorzędny (tj. Prosta technika, taka jak Naive Bayes lub regresja logistyczna jest często wystarczająca przy dobrym zestawie funkcji)
Jewgienij
źródło