Skip to content

adzik558/cicids2017-ml-classification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CICIDS2017 – Klasyfikacja ataków sieciowych (XGBoost, Drzewa decyzyjne, Klasteryzacja)


Opis projektu

Celem projektu jest analiza zachowań ruchu sieciowego i wykrywanie ataków przy użyciu klasycznych metod machine learning.
Projekt został wykonany na bazie rzeczywistego zbioru CICIDS2017, zawierającego:

  • obserwacje normalnego ruchu,
  • ataki DDoS, DoS, Brute Force, Infiltration, Botnet, Web Attacks,
  • ponad 80 cech numerycznych.

Źródło danych

Ze względu na rozmiar (setki MB / miliony wierszy) analizy wykonywane były na próbkach (30–50%)

Ten projekt stanowi kompletną analizę zbioru CICIDS2017, obejmującą:

  • przygotowanie danych,
  • eksplorację i analizę statystyczną,
  • klasyfikację ataków (XGBoost, Drzewo Decyzyjne),
  • redukcję wymiarów (PCA),
  • analizę klasteryzacji (KMeans, MiniBatchKMeans, GMM, BIRCH),
  • wizualizacje oraz wnioski.

Struktura repozytorium

cicids2017-ml-classification/
├── README.md
├── requirements.txt
├── LICENSE
├── src/
│   └── clustering-and-classification-attack-types.ipynb
└── data/
    └── data

Mapowanie etykiet (string → kod numeryczny)

Kod Etykieta
0 BENIGN
1 Bot
2 DDoS
3 DoS GoldenEye
4 DoS Hulk
5 DoS Slowhttptest
6 DoS slowloris
7 Heartbleed
8 Infiltration
9 PortScan

Klasyfikacja

W projekcie użyto:

  • XGBoost

image

  • Drzewo decyzyjne

image


Wyniki klasyfikacji

XGBoost - błędne klasyfikacje:

| Prawdziwa klasa ↓ | Predykcja →      | Liczba błędów |
| ----------------- | ---------------- | ------------- |
| **BENIGN**        | 1 (Bot)          | 32            |
|                   | 2 (DDoS)         | 8             |
|                   | 3 (DoS GE)       | 2             |
|                   | 4 (DoS Hulk)     | 81            |
|                   | 5 (Slowhttptest) | 11            |
|                   | 6 (slowloris)    | 8             |
|                   | 9 (PortScan)     | 65            |
| **Bot**           | 0 (BENIGN)       | 61            |
| **DDoS**          | 0 (BENIGN)       | 12            |
|                   | 5 (Slowhttptest) | 1             |
| **DoS GoldenEye** | 0 (BENIGN)       | 3             |
|                   | 4 (DoS Hulk)     | 2             |
| **DoS Hulk**      | 0 (BENIGN)       | 35            |
|                   | 2 (DDoS)         | 2             |
|                   | 3 (DoS GE)       | 1             |
|                   | 9 (PortScan)     | 1             |
| **Slowhttptest**  | 0 (BENIGN)       | 21            |
|                   | 3 (DoS GE)       | 20            |
| **slowloris**     | 0 (BENIGN)       | 11            |
|                   | 4 (DoS Hulk)     | 1             |
| **Heartbleed**    | 0 (BENIGN)       | 5             |
|                   | 6 (slowloris)    | 1             |
| **Infiltration**  | 0 (BENIGN)       | 1             |
| **PortScan**      | 0 (BENIGN)       | 5             |
|                   | 3 (DoS GE)       | 4             |



Drzewo decyzyjne - błedne klasyfikacje:

| Prawdziwa klasa ↓ | Predykcja →  | Liczba błędów |
| ----------------- | ------------ | ------------- |
| **BENIGN**        | 1 (Bot)      | 32            |
|                   | 2 (DDoS)     | 2             |
|                   | 3 (DoS GE)   | 8             |
|                   | 4 (DoS Hulk) | 26            |
|                   | 5 (Slowhttp) | 11            |
|                   | 6 (slowl.)   | 8             |
|                   | 9 (PortScan) | 64            |
| **Bot**           | 0 (BENIGN)   | 32            |
| **DDoS**          | 0 (BENIGN)   | 3             |
|                   | 1 (Bot)      | 1             |
|                   | 4 (DoS Hulk) | 1             |
| **DoS GoldenEye** | 0 (BENIGN)   | 3             |
|                   | 5 (Slowhttp) | 2             |
| **DoS Hulk**      | 0 (BENIGN)   | 15            |
|                   | 2 (DDoS)     | 2             |
|                   | 3 (DoS GE)   | 1             |
|                   | 9 (PortScan) | 1             |
| **Slowhttptest**  | 0 (BENIGN)   | 9             |
| **slowloris**     | 0 (BENIGN)   | 3             |
|                   | 4 (DoS Hulk) | 1             |
| **Heartbleed**    | 6 (slowl.)   | 1             |
| **Infiltration**  | 0 (BENIGN)   | 1             |
| **PortScan**      | 0 (BENIGN)   | 4             |
|                   | 3 (DoS GE)   | 4             |

---

Tabela trafności przewidywań XGBoost i Drzewa decyzyjnego:

image

Klasteryzacja

Testowane algorytmy:

  • KMeans

image

  • MiniBatchKMeans

image

  • Gaussian Mixture Models (GMM)

image

  • BIRCH

image

Wyniki klasteryzacji

image

image

Podsumowanie i wnioski

Główną różnicą pomiędzy klasyfikacją a klasteryzacją jest typ uczenia:

  • Klasyfikacja jest zadaniem uczenia nadzorowanego, gdzie proces uczenia odbywa się na podstawie danych uczących z etykietami lub prawidłowymi odpowiedziami.
  • Klasteryzacja jest zadaniem uczenia nienadzorowanego, co oznacza, że nie ma dostępnych etykiet ani prawidłowych odpowiedzi w danych uczących. Celem klasteryzacji jest odkrycie struktury ukrytej w danych poprzez grupowanie podobnych obiektów.

Ponadto:

  • XGBoost jest zdecydowanie najlepszym modelem dla CICIDS2017.
  • Drzewo decyzyjne zachowuje się świetnie na niektórych próbkach (nawet 0.99 accuracy), ale znacznie gorzej na innych → podatność na overfitting.
  • Klasteryzacja wykazuje realne segmenty ruchu (silhouette ~0.77 dla KMeans).
  • Dane wymagają intensywnego czyszczenia (odstające wartości, brakujące dane).

Jak uruchomić

  1. Pobierz plik src/clustering-and-classification-attack-types
  2. Otwórz plik w Google Colab
  3. Pobierz plik z danymi (link w folderze data/data)
  4. Przejdź do Google Colab w przeglądarce
  5. Otwórz plik clustering-and-classification w Colabie
  6. Wgraj plik z wcześniej pobranymi danymi
  7. Skompiluj komórki
  8. Wyniki zostaną wyświetlone poniżej kompilowanych komórek

Uwagi techniczne

  • Notebook zawiera również komórki robocze, fragmenty eksperymentów oraz kod, który nie został uporządkowany po zakończeniu projektu.
    Zostały one pozostawione celowo, aby pokazać pełny proces pracy i analizę modeli.

  • Kompilacja całego notebooka może być czasochłonna.
    Ze względu na dużą liczbę rekordów w zbiorze CICIDS2017 (ponad 2.8 mln), pełne wykonanie kodu może trwać od kilkunastu minut do nawet godziny, w zależności od wydajności komputera.

About

Klasyfikacja ataków sieciowych w zbiorze CICIDS2017

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors