Add python-docx dependency and a new script to generate a Word document detailing the IDS features and mapping them to ISO 27001 Annex A controls. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 7a657272-55ba-4a79-9a2e-f1ed9bc7a528 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 2744be16-afcd-406e-ae68-fcf62f19bcc3 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/449cf7c4-c97a-45ae-8234-e5c5b8d6a84f/7a657272-55ba-4a79-9a2e-f1ed9bc7a528/RyXWGQA
623 lines
28 KiB
Python
623 lines
28 KiB
Python
#!/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}")
|