#!/usr/bin/env python3 """Genera documento Word IDS - Conformità ISO 27001""" from docx import Document from docx.shared import Inches, Pt, Cm, RGBColor from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.table import WD_TABLE_ALIGNMENT from datetime import datetime doc = Document() style = doc.styles['Normal'] font = style.font font.name = 'Calibri' font.size = Pt(11) sections = doc.sections for section in sections: section.top_margin = Cm(2.5) section.bottom_margin = Cm(2.5) section.left_margin = Cm(2.5) section.right_margin = Cm(2.5) # --- COVER PAGE --- for _ in range(6): doc.add_paragraph("") title = doc.add_paragraph() title.alignment = WD_ALIGN_PARAGRAPH.CENTER run = title.add_run("INTRUSION DETECTION SYSTEM (IDS)") run.bold = True run.font.size = Pt(28) run.font.color.rgb = RGBColor(0, 51, 102) subtitle = doc.add_paragraph() subtitle.alignment = WD_ALIGN_PARAGRAPH.CENTER run = subtitle.add_run("Documentazione Funzionale e Conformità ISO/IEC 27001:2022") run.font.size = Pt(16) run.font.color.rgb = RGBColor(51, 51, 51) doc.add_paragraph("") info = doc.add_paragraph() info.alignment = WD_ALIGN_PARAGRAPH.CENTER run = info.add_run("Sistema di Rilevamento Intrusioni per Router MikroTik\ncon Machine Learning e Blocco Automatico") run.font.size = Pt(12) run.font.color.rgb = RGBColor(100, 100, 100) doc.add_paragraph("") doc.add_paragraph("") meta = doc.add_paragraph() meta.alignment = WD_ALIGN_PARAGRAPH.CENTER run = meta.add_run(f"Versione: 2.0.0\nData: {datetime.now().strftime('%d/%m/%Y')}\nClassificazione: Riservato") run.font.size = Pt(11) run.font.color.rgb = RGBColor(100, 100, 100) doc.add_page_break() # --- TABLE OF CONTENTS --- doc.add_heading('Indice', level=1) toc_items = [ "1. Introduzione e Scopo del Documento", "2. Panoramica del Sistema IDS", "3. Architettura del Sistema", "4. Funzionalità del Sistema", " 4.1 Raccolta e Analisi Log (Syslog)", " 4.2 Rilevamento Anomalie con Machine Learning", " 4.3 Blocco Automatico degli IP Malevoli", " 4.4 Gestione Whitelist e Blacklist", " 4.5 Liste Pubbliche e Threat Intelligence", " 4.6 Dashboard e Monitoraggio in Tempo Reale", " 4.7 Geolocalizzazione IP", " 4.8 Gestione Router MikroTik", " 4.9 Pulizia Automatica dei Dati", " 4.10 Monitoraggio Servizi", "5. Mappatura Controlli ISO/IEC 27001:2022", "6. Controlli Annex A Coperti", "7. Politiche di Sicurezza Implementate", "8. Gestione degli Incidenti", "9. Continuità Operativa e Disponibilità", "10. Audit e Tracciabilità", "11. Conclusioni", ] for item in toc_items: p = doc.add_paragraph(item) p.paragraph_format.space_after = Pt(2) doc.add_page_break() # --- 1. INTRODUZIONE --- doc.add_heading('1. Introduzione e Scopo del Documento', level=1) doc.add_paragraph( "Il presente documento descrive le funzionalità, l'architettura e le misure di sicurezza " "implementate nel Sistema di Rilevamento Intrusioni (IDS) progettato per ambienti di rete " "basati su router MikroTik. Lo scopo principale è fornire evidenza documentale della conformità " "del sistema ai requisiti dello standard ISO/IEC 27001:2022, con particolare riferimento ai " "controlli dell'Annex A relativi alla sicurezza delle reti, al monitoraggio, alla gestione " "degli incidenti e alla protezione delle informazioni." ) doc.add_paragraph( "Questo documento è destinato a responsabili della sicurezza informatica, auditor interni " "ed esterni, e al management aziendale coinvolto nel Sistema di Gestione della Sicurezza " "delle Informazioni (SGSI/ISMS)." ) # --- 2. PANORAMICA --- doc.add_heading('2. Panoramica del Sistema IDS', level=1) doc.add_paragraph( "L'IDS è un sistema completo di sicurezza di rete che integra raccolta log in tempo reale, " "analisi basata su Machine Learning, blocco automatico degli IP malevoli e monitoraggio " "continuo dello stato della rete. Il sistema è progettato per operare in ambienti con " "10+ router MikroTik e gestire volumi elevati di traffico (186M+ record di log di rete)." ) doc.add_heading('Caratteristiche Principali', level=2) features_main = [ "Rilevamento anomalie in tempo reale tramite Isolation Forest e classificatore ensemble", "Blocco automatico degli IP con risk score >= 80 sui router MikroTik via REST API", "Integrazione con feed di threat intelligence pubblici (Spamhaus, Talos, AWS, GCP, Microsoft Azure, Meta/Facebook, Cloudflare)", "Dashboard web interattiva con visualizzazioni in tempo reale", "Gestione whitelist/blacklist con supporto completo CIDR", "Geolocalizzazione automatica degli IP rilevati", "Sistema di pulizia automatica dei dati obsoleti", "Monitoraggio continuo dei servizi di sistema", ] for f in features_main: doc.add_paragraph(f, style='List Bullet') # --- 3. ARCHITETTURA --- doc.add_heading('3. Architettura del Sistema', level=1) doc.add_paragraph( "Il sistema adotta un'architettura a microservizi composta da tre componenti principali:" ) arch_table = doc.add_table(rows=5, cols=3) arch_table.style = 'Light Grid Accent 1' arch_table.alignment = WD_TABLE_ALIGNMENT.CENTER headers = ['Componente', 'Tecnologia', 'Funzione'] for i, h in enumerate(headers): arch_table.rows[0].cells[i].text = h for paragraph in arch_table.rows[0].cells[i].paragraphs: for run in paragraph.runs: run.bold = True arch_data = [ ['Frontend Web', 'React, ShadCN UI, TanStack Query', 'Dashboard di monitoraggio, gestione whitelist/blacklist, visualizzazione rilevamenti'], ['Backend API', 'Node.js, Express, Drizzle ORM', 'API REST, gestione database PostgreSQL, coordinamento servizi'], ['Backend ML', 'Python, FastAPI, scikit-learn, XGBoost', 'Analisi anomalie con Isolation Forest e classificatore ensemble, blocco automatico IP'], ['Database', 'PostgreSQL', 'Persistenza dati: log di rete, rilevamenti, whitelist, blacklist, configurazione router'], ] for i, row_data in enumerate(arch_data): for j, cell_text in enumerate(row_data): arch_table.rows[i+1].cells[j].text = cell_text doc.add_paragraph("") doc.add_paragraph( "La comunicazione tra i componenti avviene tramite API REST protette da autenticazione " "mediante API Key (header X-API-Key). Il database PostgreSQL è accessibile solo dai " "backend tramite connessione autenticata." ) # --- 4. FUNZIONALITÀ --- doc.add_heading('4. Funzionalità del Sistema', level=1) # 4.1 doc.add_heading('4.1 Raccolta e Analisi Log (Syslog)', level=2) doc.add_paragraph( "Il componente syslog_parser.py riceve i log syslog via protocollo UDP sulla porta 514 " "da tutti i router MikroTik configurati. I log vengono analizzati, normalizzati e " "memorizzati nel database PostgreSQL nella tabella network_logs." ) doc.add_heading('Caratteristiche:', level=3) syslog_features = [ "Ricezione syslog UDP sulla porta 514 (standard RFC 5424)", "Parsing automatico dei messaggi syslog con estrazione di IP sorgente, destinazione, porte, protocollo", "Auto-reconnect e recovery in caso di errori di connessione al database", "Politica di retention dei dati: 3 giorni di conservazione dei log grezzi", "Gestione di volumi elevati: oltre 186 milioni di record processati", ] for f in syslog_features: doc.add_paragraph(f, style='List Bullet') # 4.2 doc.add_heading('4.2 Rilevamento Anomalie con Machine Learning', level=2) doc.add_paragraph( "Il cuore del sistema è il motore di Machine Learning che utilizza un approccio ibrido " "per il rilevamento delle anomalie, combinando due algoritmi complementari per ridurre " "i falsi positivi e migliorare l'accuratezza del rilevamento." ) doc.add_heading('Algoritmi Utilizzati:', level=3) ml_features = [ "Extended Isolation Forest (EIF): algoritmo non supervisionato per il rilevamento di anomalie basato sull'isolamento dei punti dati anomali. Analizza 25 feature di rete estratte dai log.", "Classificatore Ensemble con Voting Pesato: combina XGBoost e altri classificatori per una classificazione più precisa delle anomalie rilevate.", "Risk Score (0-100): ogni IP riceve un punteggio di rischio su scala 0-100 distribuito su 5 livelli (Normale <40, Basso 40-59, Medio 60-69, Alto 70-84, Critico >=85).", "Retraining automatico settimanale del modello ML per adattarsi ai nuovi pattern di traffico.", "Analisi ogni 2 minuti dei log dell'ultima ora per rilevamento near-real-time.", ] for f in ml_features: doc.add_paragraph(f, style='List Bullet') doc.add_heading('Feature di Rete Analizzate (25 feature):', level=3) doc.add_paragraph( "Il modello analizza feature quali: frequenza delle connessioni per IP, distribuzione delle porte " "di destinazione, rapporto pacchetti in/out, diversità dei protocolli, pattern temporali, " "entropia delle connessioni, velocità di scansione porte, distribuzione geografica delle " "connessioni, e altre metriche statistiche derivate dal traffico di rete." ) # 4.3 doc.add_heading('4.3 Blocco Automatico degli IP Malevoli', level=2) doc.add_paragraph( "Gli IP identificati come critici (risk score >= 80) vengono automaticamente bloccati " "su tutti i router MikroTik configurati tramite la REST API di RouterOS." ) block_features = [ "Blocco automatico ogni 2 minuti per IP con risk score >= 80", "Comunicazione con router MikroTik tramite REST API (HTTP/HTTPS)", "Blocco parallelo su tutti i router abilitati contemporaneamente", "Verifica whitelist prima del blocco (gli IP in whitelist non vengono mai bloccati)", "Blocco massivo retroattivo: endpoint /block-all-critical per bloccare tutti gli IP critici storici non ancora bloccati", "Sblocco manuale disponibile dalla dashboard web (pulsante 'Sblocca Router')", "Auto-sblocco quando un IP viene aggiunto alla whitelist", "Timeout configurabile per le regole di blocco sul router", "Tracciamento dello stato di blocco nel database (campo blocked e blocked_at)", ] for f in block_features: doc.add_paragraph(f, style='List Bullet') # 4.4 doc.add_heading('4.4 Gestione Whitelist e Blacklist', level=2) doc.add_paragraph( "Il sistema gestisce whitelist e blacklist con supporto completo per singoli IP e " "range CIDR, utilizzando i tipi nativi INET/CIDR di PostgreSQL per un matching efficiente." ) wl_features = [ "Whitelist manuale: aggiunta/rimozione IP dalla dashboard web con motivo e note", "Blacklist automatica: alimentata da feed di threat intelligence pubblici", "Supporto completo CIDR: matching di range di rete (es. 192.168.0.0/16) con operatori PostgreSQL <<=", "Logica di priorità: Whitelist manuale > Whitelist pubblica > Blacklist", "Auto-sblocco dai router quando un IP viene aggiunto alla whitelist", "Paginazione server-side (50 record/pagina) e ricerca con debounce per performance", "Campo source per tracciare l'origine di ogni entry (manuale, Spamhaus, AWS, ecc.)", ] for f in wl_features: doc.add_paragraph(f, style='List Bullet') # 4.5 doc.add_heading('4.5 Liste Pubbliche e Threat Intelligence', level=2) doc.add_paragraph( "Il sistema integra automaticamente feed di threat intelligence da fonti pubbliche riconosciute, " "sincronizzandoli ogni 10 minuti per mantenere aggiornate le liste di IP noti come malevoli " "o appartenenti a provider cloud legittimi." ) lists_table = doc.add_table(rows=8, cols=3) lists_table.style = 'Light Grid Accent 1' lists_table.alignment = WD_TABLE_ALIGNMENT.CENTER list_headers = ['Feed', 'Tipo', 'Descrizione'] for i, h in enumerate(list_headers): lists_table.rows[0].cells[i].text = h for paragraph in lists_table.rows[0].cells[i].paragraphs: for run in paragraph.runs: run.bold = True list_data = [ ['Spamhaus DROP', 'Blacklist', "Lista di IP/CIDR noti per attività malevole (spam, botnet, C&C)"], ['Talos Intelligence', 'Blacklist', 'Feed di threat intelligence di Cisco Talos'], ['Amazon AWS', 'Whitelist', 'Range IP ufficiali dei servizi cloud AWS'], ['Google Cloud/GCP', 'Whitelist', 'Range IP ufficiali dei servizi Google Cloud'], ['Microsoft Azure', 'Whitelist', 'Range IP ufficiali dei servizi cloud Microsoft Azure'], ['Meta (Facebook)', 'Whitelist', 'Range IP di Meta (Facebook, Instagram, WhatsApp)'], ['Cloudflare', 'Whitelist', 'Range IP della CDN Cloudflare'], ] for i, row_data in enumerate(list_data): for j, cell_text in enumerate(row_data): lists_table.rows[i+1].cells[j].text = cell_text doc.add_paragraph("") doc.add_paragraph( "La merge logic applica una priorità basata sul tipo: gli IP in whitelist manuale hanno " "sempre la precedenza, seguiti dalla whitelist pubblica e infine dalla blacklist. Questo " "previene il blocco accidentale di servizi cloud legittimi." ) # 4.6 doc.add_heading('4.6 Dashboard e Monitoraggio in Tempo Reale', level=2) doc.add_paragraph( "La dashboard web fornisce una visione completa e in tempo reale dello stato della " "sicurezza di rete, con aggiornamento automatico ogni 10 secondi." ) dash_features = [ "Panoramica generale: contatori di router attivi, rilevamenti totali, IP bloccati, IP critici", "Pagina Rilevamenti: elenco paginato (50/pagina) con ricerca server-side su IP, paese, organizzazione", "Pagina Whitelist: gestione paginata con ricerca e operazioni CRUD", "Pagina Analytics: grafici e visualizzazioni del traffico normale vs attacco", "Filtri avanzati: per tipo di anomalia (DDoS, Port Scan, Brute Force, Botnet), range di risk score", "Indicatori visivi: badge colorati per livelli di rischio, stato di blocco, flag paese", "Monitoraggio servizi: stato in tempo reale di ML Backend, Database, Syslog Parser", "Operazioni dirette: pulsanti per aggiungere a whitelist, sbloccare router, avviare training ML", ] for f in dash_features: doc.add_paragraph(f, style='List Bullet') # 4.7 doc.add_heading('4.7 Geolocalizzazione IP', level=2) doc.add_paragraph( "Integrazione con il servizio ip-api.com per arricchire ogni rilevamento con informazioni " "geografiche e di rete, inclusi paese, città, ISP, numero AS e organizzazione. " "Il sistema implementa caching intelligente per ridurre le chiamate API e rispettare i " "rate limit del servizio." ) # 4.8 doc.add_heading('4.8 Gestione Router MikroTik', level=2) doc.add_paragraph( "Il sistema comunica con i router MikroTik tramite la REST API di RouterOS, " "supportando operazioni parallele su multipli router contemporaneamente." ) router_features = [ "Configurazione router: IP, porta API, credenziali, abilitazione/disabilitazione", "Test di connettività automatico", "Supporto HTTP (porta 80) e HTTPS (porta 443) con gestione certificati SSL/TLS", "Operazioni parallele su tutti i router (blocco/sblocco simultaneo)", "Gestione address-list di firewall (aggiunta, rimozione, lettura)", "Compatibilità con RouterOS 7.x e versioni successive", ] for f in router_features: doc.add_paragraph(f, style='List Bullet') # 4.9 doc.add_heading('4.9 Pulizia Automatica dei Dati', level=2) doc.add_paragraph( "Un timer systemd orario esegue lo script cleanup_detections.py che:" ) cleanup_features = [ "Rimuove rilevamenti più vecchi di 48 ore", "Sblocca automaticamente gli IP bloccati da più di 2 ore", "Mantiene la retention dei log di rete a 3 giorni", "Registra statistiche di pulizia nei log di sistema", ] for f in cleanup_features: doc.add_paragraph(f, style='List Bullet') # 4.10 doc.add_heading('4.10 Monitoraggio Servizi', level=2) doc.add_paragraph( "La dashboard fornisce monitoraggio in tempo reale dello stato dei servizi critici " "con possibilità di riavvio tramite API protette." ) service_features = [ "Monitoraggio stato: ML Backend, Database PostgreSQL, Syslog Parser", "API per gestione servizi (start/stop/restart) protette da API Key", "Integrazione con systemd per il controllo dei servizi Python", "Health check endpoint (/health) per verifica rapida dello stato del sistema", ] for f in service_features: doc.add_paragraph(f, style='List Bullet') # --- 5. MAPPATURA ISO 27001 --- doc.add_heading('5. Mappatura Controlli ISO/IEC 27001:2022', level=1) doc.add_paragraph( "La seguente tabella mappa le funzionalità dell'IDS ai controlli dell'Annex A dello " "standard ISO/IEC 27001:2022, evidenziando come il sistema contribuisce alla conformità." ) iso_table = doc.add_table(rows=1, cols=4) iso_table.style = 'Light Grid Accent 1' iso_table.alignment = WD_TABLE_ALIGNMENT.CENTER iso_headers = ['Controllo', 'Titolo', 'Funzionalità IDS', 'Copertura'] for i, h in enumerate(iso_headers): iso_table.rows[0].cells[i].text = h for paragraph in iso_table.rows[0].cells[i].paragraphs: for run in paragraph.runs: run.bold = True iso_mappings = [ ['A.5.1', 'Politiche per la sicurezza delle informazioni', 'Politiche di blocco automatico, soglie di rischio configurabili, logica di priorità whitelist/blacklist', 'Parziale'], ['A.5.7', 'Threat intelligence', 'Integrazione automatica con 7+ feed di threat intelligence (Spamhaus, Talos, AWS, GCP, Azure, Meta, Cloudflare)', 'Completa'], ['A.5.24', 'Pianificazione e preparazione della gestione degli incidenti', 'Rilevamento automatico anomalie, classificazione per livello di rischio, workflow di risposta automatizzato', 'Completa'], ['A.5.25', 'Valutazione e decisione sugli eventi di sicurezza', 'Risk scoring ML (0-100), classificazione automatica in 5 livelli, soglie configurabili', 'Completa'], ['A.5.26', 'Risposta agli incidenti di sicurezza', 'Blocco automatico IP critici sui router, sblocco manuale, gestione whitelist', 'Completa'], ['A.5.28', 'Raccolta delle evidenze', 'Log completi di tutte le operazioni, timestamp di rilevamento e blocco, geolocalizzazione', 'Completa'], ['A.8.1', 'Dispositivi endpoint utente', 'Protezione della rete tramite blocco IP malevoli a livello router (perimetrale)', 'Parziale'], ['A.8.9', 'Gestione della configurazione', 'Gestione centralizzata della configurazione dei router, migrazioni database versionante', 'Parziale'], ['A.8.15', 'Logging', 'Raccolta syslog centralizzata da tutti i router, retention 3 giorni, 186M+ record', 'Completa'], ['A.8.16', 'Attività di monitoraggio', 'Dashboard real-time, auto-refresh 10s, monitoraggio servizi, alert visivi per livelli di rischio', 'Completa'], ['A.8.20', 'Sicurezza delle reti', 'Firewall automatico via address-list MikroTik, blocco parallelo su tutti i router', 'Completa'], ['A.8.21', 'Sicurezza dei servizi di rete', 'Protezione contro DDoS, port scanning, brute force, botnet tramite rilevamento ML', 'Completa'], ['A.8.22', 'Segregazione delle reti', 'Supporto multi-router con configurazioni indipendenti, blocco selettivo per router', 'Parziale'], ['A.8.23', 'Filtraggio web', 'Blocco IP malevoli a livello di rete, integrazione blacklist/whitelist', 'Parziale'], ] for mapping in iso_mappings: row = iso_table.add_row() for i, cell_text in enumerate(mapping): row.cells[i].text = cell_text # --- 6. CONTROLLI ANNEX A --- doc.add_heading('6. Controlli Annex A Coperti - Dettaglio', level=1) doc.add_heading('A.5.7 - Threat Intelligence', level=2) doc.add_paragraph( "Il sistema implementa un processo automatizzato di raccolta e integrazione di threat intelligence " "da fonti pubbliche riconosciute a livello internazionale. La sincronizzazione avviene ogni 10 minuti " "tramite il servizio ids-list-fetcher, che scarica, analizza e aggiorna le liste nel database. " "La merge logic applica una gerarchia di priorità per evitare conflitti tra liste diverse." ) doc.add_heading('A.5.24/25/26 - Gestione Incidenti', level=2) doc.add_paragraph( "Il ciclo di vita degli incidenti di sicurezza è gestito automaticamente:\n" "1. RILEVAMENTO: Il modello ML analizza i log ogni 2 minuti e identifica anomalie\n" "2. CLASSIFICAZIONE: Ogni anomalia riceve un risk score e viene categorizzata (DDoS, Port Scan, Brute Force, Botnet)\n" "3. RISPOSTA: Gli IP con score >= 80 vengono bloccati automaticamente sui router\n" "4. DOCUMENTAZIONE: Ogni evento viene registrato con timestamp, geolocalizzazione, score e stato di blocco\n" "5. RISOLUZIONE: Pulizia automatica dopo 48 ore, sblocco dopo 2 ore, possibilità di whitelist manuale" ) doc.add_heading('A.8.15/16 - Logging e Monitoraggio', level=2) doc.add_paragraph( "Il sistema fornisce capacità complete di logging e monitoraggio:\n" "- Raccolta centralizzata dei log syslog da tutti i router via UDP:514\n" "- Conservazione dei log per 3 giorni con retention policy automatica\n" "- Dashboard di monitoraggio con aggiornamento ogni 10 secondi\n" "- Monitoraggio dello stato dei servizi (ML Backend, Database, Syslog Parser)\n" "- Visualizzazioni analitiche del traffico normale vs attacco\n" "- Paginazione e ricerca server-side per gestire grandi volumi di dati" ) # --- 7. POLITICHE DI SICUREZZA --- doc.add_heading('7. Politiche di Sicurezza Implementate', level=1) doc.add_heading('7.1 Autenticazione e Controllo Accessi', level=2) sec_features = [ "API Key authentication (header X-API-Key) per tutti gli endpoint del backend ML", "Credenziali router cifrate nel database", "Connessioni database autenticate con credenziali separate", "Supporto HTTPS/TLS per la comunicazione con i router MikroTik", ] for f in sec_features: doc.add_paragraph(f, style='List Bullet') doc.add_heading('7.2 Protezione dei Dati', level=2) data_features = [ "Database PostgreSQL con accesso autenticato", "Retention policy automatica: 3 giorni per log, 48 ore per rilevamenti", "Nessun dato sensibile esposto tramite API pubblica", "Validazione input con schema Zod per prevenire injection", "Query parametrizzate per prevenire SQL injection", ] for f in data_features: doc.add_paragraph(f, style='List Bullet') doc.add_heading('7.3 Disponibilità e Resilienza', level=2) avail_features = [ "Auto-reconnect del parser syslog in caso di disconnessione dal database", "Timer systemd con restart automatico dei servizi in caso di failure", "Health check endpoint per monitoraggio esterno", "Architettura a microservizi: il failure di un componente non blocca gli altri", ] for f in avail_features: doc.add_paragraph(f, style='List Bullet') # --- 8. GESTIONE INCIDENTI --- doc.add_heading('8. Gestione degli Incidenti', level=1) doc.add_heading('8.1 Workflow di Risposta Automatica', level=2) doc.add_paragraph( "Il sistema implementa un workflow di risposta automatica agli incidenti di sicurezza:" ) incident_table = doc.add_table(rows=6, cols=3) incident_table.style = 'Light Grid Accent 1' incident_table.alignment = WD_TABLE_ALIGNMENT.CENTER inc_headers = ['Fase', 'Azione', 'Tempistica'] for i, h in enumerate(inc_headers): incident_table.rows[0].cells[i].text = h for paragraph in incident_table.rows[0].cells[i].paragraphs: for run in paragraph.runs: run.bold = True inc_data = [ ['1. Raccolta', 'Ricezione log syslog da router MikroTik', 'Tempo reale (UDP)'], ['2. Analisi', 'Analisi ML con Isolation Forest + Ensemble', 'Ogni 2 minuti'], ['3. Classificazione', 'Assegnazione risk score e tipo anomalia', 'Automatica'], ['4. Risposta', 'Blocco automatico IP su tutti i router (score >= 80)', 'Immediato dopo analisi'], ['5. Documentazione', 'Registrazione con geolocalizzazione e timestamp', 'Automatica'], ] for i, row_data in enumerate(inc_data): for j, cell_text in enumerate(row_data): incident_table.rows[i+1].cells[j].text = cell_text doc.add_paragraph("") doc.add_heading('8.2 Tipi di Anomalie Rilevate', level=2) anomaly_table = doc.add_table(rows=6, cols=2) anomaly_table.style = 'Light Grid Accent 1' anomaly_table.alignment = WD_TABLE_ALIGNMENT.CENTER anom_headers = ['Tipo', 'Descrizione'] for i, h in enumerate(anom_headers): anomaly_table.rows[0].cells[i].text = h for paragraph in anomaly_table.rows[0].cells[i].paragraphs: for run in paragraph.runs: run.bold = True anom_data = [ ['DDoS Attack', 'Attacco Distributed Denial of Service - elevato volume di traffico da singola sorgente'], ['Port Scanning', "Scansione sistematica delle porte per identificare servizi vulnerabili"], ['Brute Force', 'Tentativi ripetuti di autenticazione con credenziali diverse'], ['Botnet Activity', 'Traffico riconducibile a reti di dispositivi compromessi (C&C)'], ['Suspicious Activity', 'Comportamento anomalo non classificabile nelle categorie precedenti'], ] for i, row_data in enumerate(anom_data): for j, cell_text in enumerate(row_data): anomaly_table.rows[i+1].cells[j].text = cell_text # --- 9. CONTINUITÀ --- doc.add_heading('9. Continuità Operativa e Disponibilità', level=1) doc.add_paragraph( "Il sistema è progettato per operare in modo continuo e autonomo, minimizzando " "l'intervento manuale e garantendo la disponibilità del servizio di monitoraggio." ) continuity_features = [ "Servizi gestiti da systemd con restart automatico in caso di failure (Restart=always)", "Timer systemd per operazioni periodiche (analisi ML ogni 2 min, pulizia oraria, sync liste ogni 10 min)", "Auto-reconnect del parser syslog in caso di perdita connessione al database", "Architettura a microservizi: il failure del backend ML non blocca la raccolta log", "Health check endpoint per integrazione con sistemi di monitoraggio esterni (Nagios, Zabbix, ecc.)", "Database PostgreSQL con supporto a backup e recovery point-in-time", "Migrazioni database versionante per aggiornamenti sicuri dello schema", ] for f in continuity_features: doc.add_paragraph(f, style='List Bullet') # --- 10. AUDIT --- doc.add_heading('10. Audit e Tracciabilità', level=1) doc.add_paragraph( "Il sistema mantiene traccia completa di tutte le operazioni per supportare attività " "di audit e conformità:" ) audit_features = [ "Log di tutti i rilevamenti con timestamp, risk score, tipo anomalia, geolocalizzazione", "Registrazione delle operazioni di blocco/sblocco con timestamp (blocked_at)", "Storico delle entry di whitelist con data di creazione e motivo", "Log delle sincronizzazioni delle liste pubbliche con conteggio IP aggiunti/rimossi", "Storico dei training del modello ML con parametri e risultati", "Log di sistema via journald per tutti i servizi (accessibili con journalctl)", "Database delle migrazioni con versioning per tracciare le modifiche allo schema", ] for f in audit_features: doc.add_paragraph(f, style='List Bullet') # --- 11. CONCLUSIONI --- doc.add_heading('11. Conclusioni', level=1) doc.add_paragraph( "Il Sistema di Rilevamento Intrusioni (IDS) implementa un insieme completo di controlli " "di sicurezza che contribuiscono significativamente alla conformità con lo standard " "ISO/IEC 27001:2022. In particolare, il sistema copre in modo completo i controlli " "relativi a:" ) conclusions = [ "Threat intelligence (A.5.7): integrazione automatica con 7+ feed pubblici", "Gestione degli incidenti (A.5.24-A.5.28): workflow completo dalla rilevazione alla risoluzione", "Logging e monitoraggio (A.8.15-A.8.16): raccolta centralizzata e dashboard real-time", "Sicurezza delle reti (A.8.20-A.8.21): protezione attiva tramite blocco automatico", ] for c in conclusions: doc.add_paragraph(c, style='List Bullet') doc.add_paragraph("") doc.add_paragraph( "Il sistema richiede integrazione con ulteriori controlli organizzativi, procedurali e " "tecnici per una conformità completa allo standard ISO 27001, tra cui: politiche formali " "documentate, formazione del personale, gestione degli asset, controllo degli accessi " "fisici e logici, e processi di audit interno periodico." ) doc.add_paragraph("") p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER run = p.add_run("--- Fine del Documento ---") run.font.color.rgb = RGBColor(128, 128, 128) run.font.size = Pt(10) # Save output_path = "IDS_Conformita_ISO27001.docx" doc.save(output_path) print(f"Documento generato: {output_path}")