Progetto del corso di Advanced-CyberSecurity 2024/2025
Realizzazione di un'architettura Zero Trust
Team Members Β· Overview Β· Architettura Β· Complete Project Structure Β· Policy Implementate Β· Come Buildare e Avviare Β· Verifica SSL e Interazioni PEP Β· Esecuzione Use Cases Β· Account Types Β· Monitoring, Logs e Splunk Β· Contributing
Tecnologie utilizzate:
Questo progetto realizza un'infrastruttura di sicurezza informatica per un sistema bancario, ispirata ai principi dell'architettura Zero Trust, su una rete suddivisa in tre segmenti: interna, esterna e Wi-Fi. L'obiettivo Γ¨ monitorare e regolare rigorosamente tutto il traffico verso il database, risorsa critica dellβinfrastruttura.
Ogni richiesta di accesso alle risorse Γ¨ sottoposta a controlli rigorosi di autenticazione, autorizzazione e monitoraggio, con valutazione dinamica della fiducia basata su molteplici fattori. Lβarchitettura Γ¨ progettata per essere adattiva e resiliente, proteggendo il database tramite accessi controllati, monitoraggio continuo, micro-segmentazione e reazione rapida alle anomalie. In questo modo, ogni richiesta viene trattata come sospetta fino a prova contraria, garantendo una sicurezza moderna e mirata.
Lβarchitettura del sistema si fonda su un modello a microservizi, dove ogni componente di sicurezza Γ¨ isolato in un container Docker dedicato. Questo approccio garantisce:
- Segmentazione logica e fisica delle funzioni di rete
- Maggiore sicurezza grazie allβisolamento dei servizi
- ScalabilitΓ e manutenibilitΓ semplificate
-
Client
Tre tipologie di client (external, internal, wifi), ciascuno collegato a una rete separata (esterna, interna, Wi-Fi).
Ogni client puΓ² inviare richieste di accesso alle risorse protette. -
Gateway
Punto di controllo centrale che:- Applica regole firewall tramite iptables
- Gestisce il proxy Squid per il traffico HTTP/HTTPS
- Monitora il traffico di rete con Snort (IDS)
- Redirige e filtra il traffico verso il PEP
-
Policy Enforcement Point (PEP)
- Riceve tutte le richieste dai client tramite il gateway
- Autentica lβutente
- Inoltra la richiesta di autorizzazione al PDP
-
Policy Decision Point (PDP)
- Valuta la richiesta secondo policy dinamiche, punteggi di fiducia, blacklist e regole granulari
- Restituisce una decisione (allow/deny) al PEP
-
Database (PostgreSQL)
- Rappresenta la risorsa sensibile
- Protetto tramite TLS
- Accessibile solo dopo aver superato tutti i controlli Zero Trust
-
Splunk
- Raccoglie e analizza i log generati da tutti i componenti
- Fornisce dashboard di monitoraggio e allarmi automatici in caso di eventi sospetti
-
Il client invia una richiesta β
Il traffico passa attraverso il gateway, che applica controlli di sicurezza e inoltra la richiesta al PEP. -
Autenticazione e autorizzazione β
Il PEP autentica lβutente e chiede al PDP se lβoperazione Γ¨ consentita. -
Valutazione della richiesta β
Il PDP applica policy di sicurezza, verifica blacklist e punteggi di fiducia, e restituisce la decisione. -
Accesso al database β
Se autorizzato, il PEP esegue lβoperazione richiesta sul database. -
Monitoraggio centralizzato β
Tutti gli eventi e i log vengono inviati a Splunk per analisi e risposta automatica agli incidenti.
.
βββ client_external/
β βββ Dockerfile
β βββ entrypoint.sh
β βββ uc.sh
βββ client_internal/
β βββ Dockerfile
β βββ entrypoint.sh
β βββ uc.sh
βββ client_wifi/
β βββ Dockerfile
β βββ entrypoint.sh
β βββ uc.sh
βββ db/
β βββ certs/
β β βββ server.crt
β β βββ server.key
β βββ init/
β β βββ 03_ssl.sh
β βββ data.sql
β βββ schema.sql
βββ gateway/
β βββ Dockerfile
β βββ apply_blacklist.sh
β βββ entrypoint.sh
β βββ local.rules
β βββ policy.yaml
β βββ requirements.txt
β βββ rules.sh
β βββ snort.conf
β βββ squid.conf
βββ logs/
β βββ policy-engine/
β βββ router/
β βββ snort/
β β βββ logs (snort.log files)
β βββ squid/
β βββ access.log
β βββ cache.log
βββ pdp/
β βββ data/
β β βββ blacklist/
β β β βββ blacklist.txt
β β βββ GeoLite2-Country.mmdb
β β βββ trust_db.json
β βββ .env
β βββ Dockerfile
β βββ encrypt_existing.py
β βββ entrypoint.sh
β βββ pdp.py
β βββ policies.py
β βββ utils.py
βββ pep/
β βββ db_scripts/
β β βββ db_DAO.py
β β βββ db_exec.py
β β βββ db_operations.py
β β βββ __init__.py
β βββ .env
β βββ create_users.py
β βββ Dockerfile
β βββ pep.py
β βββ users_db.json
β βββ user_auth.py
βββ splunk-apps/
βββ dashboard/
β βββ default/
β βββ data/
β β βββ ui/
β β βββ nav/default.xml
β β βββ views/
β β βββ snort_attack_dashboard.xml
β β βββ squid_traffic_dashboard.xml
β βββ metadata/default.meta
βββ log_inputs/
β βββ local/
β β βββ app.conf
β β βββ inputs.conf
β β βββ props.conf
β β βββ savedsearches.conf
β βββ metadata/local.meta
βββ lookups/
βββ geo_attr_countries.csv
βββ geo_attr_us_states.csv
βββ geo_countries.kmz
βββ geo_us_states.kmz
βββ known_clients.csv
βββ READMELe principali policy di sicurezza implementate nellβarchitettura Zero Trust sono:
-
Reputazione storica degli IP e monitoraggio eventi
- Snort-Attack-Detection-30Days: Se un IP genera piΓΉ di 60 alert Snort negli ultimi 30 giorni, viene inserito immediatamente in blacklist e bloccato.
- Non-Working-Hours-Detection-More-Than-10-IPs: PiΓΉ di 5 accessi da IP noti fuori orario lavorativo (20:00-08:00) negli ultimi 30 giorni riducono il punteggio di fiducia dellβIP di 15 punti.
- TrustReputation-Increase: Nessun evento malevolo in 30 giorni comporta un aumento di 1 punto fiducia.
- TrustReputation-Decrease: HTTP POST anomali simili a DoS verso il PEP comportano una riduzione di 40 punti fiducia.
- Attacchi DoS: comportano una riduzione della fiducia.
-
Monitoraggio in tempo reale degli attacchi
- PortScanning-HighRate-Detection: Port scanning ad alta frequenza porta a blacklist e blocco immediato dellβIP.
- ShellCode-Injection-Detection: Tentativi di shellcode injection nei log Snort portano a blacklist e blocco immediato dellβIP.
-
Controllo in tempo reale della rete di origine
- Rete esterna (
172.21.0.0/24): riduzione di 5 punti fiducia. - Rete Wi-Fi (
172.22.0.0/16): riduzione di 5 punti fiducia. - Rete interna (
172.20.0.0/16): aumento di 10 punti fiducia.
- Rete esterna (
-
Geolocalizzazione
- Richieste da IP non italiani subiscono una penalitΓ di 40 punti nel punteggio di fiducia.
-
Controllo orario delle richieste
- Le richieste fuori orario lavorativo vengono monitorate e possono essere bloccate tramite proxy Squid.
-
Autenticazione utente e fiducia basata sul ruolo
- Nessuna operazione sul database Γ¨ consentita senza login.
- Punteggi di fiducia iniziali per ruolo:
- Direttore: 85
- Consulente: 75
- Cassiere: 70
- Cliente: 60
-
Autorizzazione alle operazioni sulle risorse
- Per autorizzare unβoperazione su una risorsa del database devono essere verificate tutte le seguenti condizioni:
- Il ruolo dellβutente consente lβoperazione.
- Il ruolo consente lβaccesso alla risorsa.
- La media tra punteggio di fiducia dellβIP e dellβutente supera una soglia prestabilita.
Tipo Documento Operazione Soglia minima (read/write/delete) Dati personali read / write / delete 60 / 80 / 80 Dati transazionali read / write / delete 65 / 75 / 80 Documenti operativi read / write / delete 60 / 70 / 80 Ruolo Permessi Direttore Tutte le operazioni su tutti i documenti Consulente Solo lettura e scrittura su documenti operativi Cassiere Lettura e scrittura su documenti transazionali e operativi Cliente Sola lettura su documenti personali - Per autorizzare unβoperazione su una risorsa del database devono essere verificate tutte le seguenti condizioni:
- Assicurarsi di essere nella directory root del progetto
- Verificare che i file
.shusino line endings Unix (LF)find . -type f -name "*.sh" -exec sed -i 's/\r$//' {} +
- Creare file
.envnella root con i seguenti contenuti:POSTGRES_USER=<insert user> POSTGRES_PASSWORD=<insert password> POSTGRES_DB=<insert name db> SPLUNK_PASSWORD=<insert password>
- Avviare tutti i container con build
docker compose up --build -d
- Verificare lo stato dei servizi
docker compose ps
- Fermare ed eliminare i container, network e volumi
docker compose down -v
- Controllare che PostgreSQL accetti connessioni SSL
docker exec -it db bash psql "sslmode=require host=localhost dbname=bankDB user=user password=cyber_pwd"
- Esempi di richieste al PEP via
curl-
Login:
curl -X POST http://172.24.0.3:3100/login \ -H "Content-Type: application/json" \ -c cookies.txt \ -d '{"username": "giovanni.rossi", "password": "pass_direttore"}'
-
Operazione di lettura:
curl -X POST http://172.24.0.3:3100/request \ -H "Content-Type: application/json" \ -b cookies.txt \ -d '{"operation": "read", "document_type": "Dati Transazionali", "doc_id": 1}'
-
Operazione di scrittura:
curl -X POST http://172.24.0.3:3100/request \ -H "Content-Type: application/json" \ -b cookies.txt \ -d '{ "operation": "write", "document_type": "Dati Transazionali", "nome_file": "fattura_123.pdf", "contenuto": "Contenuto della fattura...", "sensibilita": "sensibile" }'
-
Operazione di cancellazione:
curl -X POST http://172.24.0.3:3100/request \ -H "Content-Type: application/json" \ -b cookies.txt \ -d '{"operation": "delete", "document_type": "Dati Transazionali", "doc_id": 2}'
-
Per eseguire gli script di use case (uc.sh) allβinterno dei container:
docker exec -it <nome_servizio> bash ./uc.shEsempio:
docker exec -it client_internal bash ./uc.shI tipi di account sono:
{
"accounts": [
{ "username": "giovanni.rossi", "role": "Direttore", "password": "pass_direttore" },
{ "username": "marco.bianchi", "role": "Cassiere", "password": "pass_cassiere" },
{ "username": "luca.verdi", "role": "Consulente", "password": "pass_consulente" },
{ "username": "maria.neri", "role": "Cliente", "password": "pass_cliente" }
]
}Modificare o aggiungere nuovi tipi di account tramite lo script pep/create_users.py.
I log sono raccolti in logs/ e mostrano:
- Policy Engine:
logs/policy-engine - Router:
logs/router - Snort:
logs/snort - Squid:
logs/squid
Dopo aver avviato i container, aprire nel browser:
http://localhost:8000/
per accedere a Splunk e visualizzare le dashboard personalizzate. Il nome utente Γ¨: "admin", mentre la password Γ¨ quella che viene inserita nel file .env, presente nella sezione π οΈ Come Buildare e Avviare.
-
Snort Attack Dashboard
- Visualizza in tempo reale gli alert IDS generati da Snort.
- Grafico temporale dei rilevamenti per evidenziare picchi di attacco.
- Top signature alert piΓΉ frequenti.
- Classifica IP sorgenti piΓΉ attivi.
- Contatori riassuntivi di alert totali e severitΓ .
-
Squid Traffic Monitoring Dashboard
- Trend orario delle richieste proxy negli ultimi 30 giorni.
- Top 10 URL piΓΉ richiesti con percentuale di traffico.
- Top 10 IP client piΓΉ attivi.
- Indicatori numerici di richieste totali e URL unici nelle ultime 24h.
- Distribuzione dei metodi HTTP (GET, POST, ecc.).
Apri issue, discussion o pull request per suggerimenti e miglioramenti!
