-->

Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

BotNet


Una rete di dispositivi compromessi, che vengono controllati da un malintenzionato, noto come "botmaster".

botnet

Una è una rete di dispositivi compromessi, spesso chiamati "bot" o "zombie", che vengono controllati da un malintenzionato, noto come "botmaster".
Questi dispositivi vengono utilizzati per svolgere attività malevole senza il consenso dei proprietari, come attacchi DDoS (Distributed Denial of Service), invio di spam, furto di dati, o altre attività illegali su Internet. Le botnet operano a insaputa degli utenti, e i dispositivi compromessi possono essere computer, smartphone, dispositivi IoT (Internet of Things), e molti altri.

Dataset CTU-13

Il CTU-13 è un dataset comunemente usato per lo studio del traffico di rete generato da botnet.
Esso contiene dati etichettati che comprendono traffico normale, traffico generato da botnet e traffico di background (non legato a nessuna delle due categorie).
Viene spesso utilizzato per sviluppare e testare modelli di machine learning che rilevano attività botnet.

Obiettivo

Utilizzare un modello di machine learning basato su un tree classifier per rilevare traffico botnet utilizzando il dataset CTU-13, salvando e caricando il modello con il modulo pickle.

Codice per Creare un Modello di Rilevamento Botnet con Tree Classifier

Ecco un esempio di codice Python che utilizza **pandas**, **scikit-learn**, e **pickle** per caricare i dati, addestrare un modello e salvare il modello addestrato:
 
import pandas as pd
import pickle
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report, accuracy_score

# Supponendo che il dataset CTU-13 sia disponibile in formato CSV
# Caricamento del dataset (modifica il percorso del file con il tuo)
data = pd.read_csv('ctu13_dataset.csv')

# Pre-elaborazione dei dati
# Selezione delle caratteristiche più rilevanti dal dataset
# Assumiamo che il dataset abbia colonne come 'duration', 'src_bytes', 'dst_bytes', 'packets', 'label'
features = data[['duration', 'src_bytes', 'dst_bytes', 'packets']]  # Esempio di caratteristiche
labels = data['label']  # La colonna 'label' contiene l'etichetta (botnet o normale)

# Divisione del dataset in dati di training e di test
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.3, random_state=42)

# Creazione del modello ad albero decisionale
model = DecisionTreeClassifier(random_state=42)

# Addestramento del modello
model.fit(X_train, y_train)

# Salvataggio del modello addestrato in formato pickle
with open('decision_tree_model.pkl', 'wb') as model_file:
    pickle.dump(model, model_file)
    print("Modello salvato con pickle.")

# Caricamento del modello addestrato (se si desidera riutilizzare il modello in futuro)
with open('decision_tree_model.pkl', 'rb') as model_file:
    loaded_model = pickle.load(model_file)
    print("Modello caricato da pickle.")

# Predizioni sui dati di test
y_pred = loaded_model.predict(X_test)

# Valutazione del modello
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred)

# Visualizzazione dei risultati
print(f'Accuratezza del modello: {accuracy}')
print('Rapporto di classificazione:\n', report)
 

Spiegazione del Codice

Caricamento del Dataset

Viene utilizzato il dataset CTU-13, che deve essere disponibile in formato CSV.
Il percorso al file CSV deve essere specificato correttamente.

Pre-elaborazione

  • Vengono selezionate alcune colonne dal dataset che rappresentano caratteristiche del traffico di rete, come la durata della connessione, il numero di byte inviati/ricevuti, e il numero di pacchetti.
  • La colonna delle etichette (`labels`) contiene l'informazione se il traffico è stato generato da una botnet o è traffico normale.

Divisione del Dataset

I dati vengono suddivisi in due parti: dati di addestramento (70%) e dati di test (30%). Questo è un passo standard per garantire che il modello possa essere valutato su dati non visti.

Creazione e Addestramento del Modello

Viene creato un classificatore ad albero decisionale (`DecisionTreeClassifier`), che viene addestrato utilizzando i dati di training.

Salvataggio del Modello con Pickle

Una volta addestrato, il modello viene salvato su disco utilizzando `pickle`. In questo modo, puoi riutilizzare il modello in futuro senza doverlo riaddestrare ogni volta.

Caricamento del Modello con Pickle

Il modello salvato può essere ricaricato in qualsiasi momento utilizzando `pickle.load`. Questo permette di fare predizioni sui nuovi dati senza dover riaddestrare il modello.

Valutazione del Modello

Dopo il caricamento, il modello viene utilizzato per fare previsioni sui dati di test, e le prestazioni del modello vengono valutate utilizzando metriche come accuratezza, precisione, richiamo e F1-score (visualizzate con il `classification_report`).

Uilità del codice

Il codice fornito, crea un modello di machine learning per rilevare il traffico botnet, ha applicazioni pratiche soprattutto in contesti di sicurezza informatica per il monitoraggio di reti e la prevenzione di attacchi.
  • Rilevamento Automatico di Attività Botnet in una Rete Aziendale
  • Monitoraggio di Reti di Grandi Dimensioni o Data Center
  • Protezione Proattiva per Servizi Cloud e IOT
  • Rilevamento di Attacchi DDoS (Distributed Denial of Service)
  • Implementazione in Sistemi di Rilevamento Intrusioni (IDS/IPS)