Skip to content

RizieroG/NCIs_Project2025

Repository files navigation

🔐 SDN DoS Detection & Mitigation – NCIs Project (A.A. 2024/2025)

Autore: Riziero Graziani
Corso: Network and Cloud Infrastructures (NCIs)
Università degli Studi di Napoli Federico II
Docente: Prof. Giorgio Ventre


📘 Descrizione del progetto

Questo progetto implementa un sistema di rilevazione e mitigazione degli attacchi DoS (Denial of Service) in un ambiente Software Defined Networking (SDN), utilizzando:

  • Mininet come emulatore di rete;
  • Ryu controller come piattaforma SDN programmabile;
  • Redis come policy store esterno e canale di comunicazione.

L’obiettivo è migliorare le precedenti soluzioni monolitiche e basate su soglie statiche, affrontando in modo modulare e adattivo cinque problemi chiave dei sistemi SDN anti-DoS:

  1. Over blocking
  2. Static thresholds
  3. Controller-centric decisions
  4. Lack of modular design between detection and mitigation
  5. Rigid (un)blocking policies

🧩 Architettura generale

L’architettura è composta da più moduli Ryu indipendenti, che comunicano tramite eventi applicativi (EvDoSAlert) e attraverso Redis:

{ Monitoring → Detection (EWMA, CUSUM, RateLimiter) → Fusion → Enforcement }{ Redis REST API + CLI (policy store esterno) }

Ogni modulo svolge un ruolo distinto:

  • Monitoring: misura il traffico host-to-host (byte/s, pkt/s) tramite OpenFlow e lo visualizza con MiniNAM.
  • EWMA, CUSUM, RateLimiter: tre rilevatori indipendenti che generano alert con score normalizzato [0,1].
  • Fusion: aggrega gli alert (ensemble) con pesi dinamici, applica le regole DROP flow-level sugli edge switch e gestisce backoff, cooldown e reset.
  • Redis REST API & CLI: archivio condiviso delle policy (blacklist direzionale src|dst) e interfaccia di controllo esterna.

⚙️ Requisiti

  • Python ≥ 3.8
  • Ryu SDN framework
  • Mininet
  • Redis Server
  • Flask (per il microservizio REST)
  • hping3 / iperf3 (per i test di traffico e attacco)

🚀 Avvio del sistema

  1. Avvio di Redis

    redis-server &
  2. Avvio del servizio REST esterno

    python3 blacklist_service.py
  3. Avvio del controller Ryu con tutti i moduli

    python3 controller/main_controller.py
  4. Avvio della topologia Mininet

    sudo python3 MiniNAM.py --custom ~/path/to/project/topology_mini_nam.py --topo mytopo --controller remote --mac
  5. (Opzionale) Redis-cli Tool

    export BLACKLIST_API_KEY=changeme
    
    python3 blacklist_topo_cli.py --topo topology_mini_nam.py

🧠 Logica di rilevamento

EWMA

  • Due medie mobili (veloce e lenta) e confronto statistico tramite Z-score: anomalia se short_mean > long_mean + ZK * σ_eff.

  • Adatta la soglia in base alla variabilità del flusso e include warm-up, grace e deduplica.

CUSUM

  • Accumula scostamenti persistenti dalla baseline EWMA.

  • Soglie dinamiche K/H scalate con √baseline per evitare falsi allarmi.

Rate Limiter

  • Modello a token bucket con rate ammesso e burst.

  • Genera alert solo per overage significativi e persistenti.

🔄 Mitigazione e Fusion

La FusionApp riceve alert da tutti i detector, calcola uno score aggregato pesato:

agg = 0.3 * EWMA + 0.5 * CUSUM + 0.2 * RateLimiter

Applica o rimuove le regole di DROP con hysteresis temporale:

  • Hold-off prima dell’attivazione

  • Durata minima e clear hold-off prima della rimozione

  • Cooldown e backoff progressivo (5–10–20–40–60s)

Le regole sono flow-level ed edge-only, quindi colpiscono solo la sorgente malevola.

🧰 Integrazione con Redis

  • Ogni regola installata viene salvata come:

    blacklist:flow:<SRC>|<DST>
    
  • TTL = durata del blocco; alla scadenza, la regola è rimossa automaticamente.

  • Pub/Sub su blacklist_updates per aggiornamenti in tempo reale.

  • CLI (blacklist_topo_cli.py) per gestire manualmente le regole via REST API.

🧩 Problemi risolti

Limite iniziale Soluzione adottata
Over-blocking Regole edge-only, flow-level, TTL in Redis
Static threshold Detector adattivi con EWMA/CUSUM dinamici
Controller-centric Policy store esterno con API REST + Redis Pub/Sub
Design non modulare Architettura a eventi Ryu (EvDoSAlert)
Policy inflessibile Hold-off, cooldown e backoff con reset automatico

📂 Struttura della repository

├── controller
│   ├── blacklist_service.py
│   ├── cusum_mitigation.py
│   ├── events.py
│   ├── ewma_mitigation.py
│   ├── monitoring.py
│   ├── main_controller.py
│   ├── rl_mitigation.py
│   └── simple_switch_13.py
├── .gitignore
├── blacklist_topo_cli.py
├── topology_mini_nam.py
├── flusso_continuo.cli
├── NCIs_Project_Report.pdf
└── README.md

📚 Riferimenti

🧑‍💻 Developed by Riziero Graziani

Releases

No releases published

Packages

No packages published

Languages