Sicurezza dell’Informazione M
Marco Boschi
Matteo Galletti, Marco Rossini e Nicola Severini
A.A. 2017–2018
1 Introduzione 1
1.1 Sicurezza informatica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Attacchi e sicurezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Trasformazioni per dati sicuri 5
2.1 Protezione delle proprietà di sicurezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Riservatezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 Integrità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.3 Autenticità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.4 Autenticità e integrità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.5 Riservatezza, autenticità e integrità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.6 Identificazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Funzioni unidirezionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Chiavi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Crittoanalisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4.1 Indovinare il segreto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.2 Dedurre il segreto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5 Memorizzazione delle chiavi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Esempio 2.1 – File System Sicuro SFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6 Complessità computazionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.7 Meccanismi di base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7.1 Random Number Generator RNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7.2 Algoritmi di hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Esempio 2.2 – SHA-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.7.3 Identificazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.7.3.1 Identificazione passiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.7.3.2 Identificazione attiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.7.3.2.1 One-time password . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.7.3.2.2 Challenge-response . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.7.3.2.3 Identificazione mutua . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.7.3.2.3.1 Interleaving . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.7.3.2.3.2 Reflection . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7.3.3 Contromisure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 Cenni di crittografia classica 19
3.1 Sostituzione monoalfabetica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Trasposizione di colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3 Mascheramento della ridondanza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.4 Cifrario Playfair . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.5 Sostituzione polialfabetica – Cifrario di Vigenere . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.6 One time pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.7 Sicurezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
i
4 Cifrari simmetrici 22
4.1 Cifrari a flusso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Esempio 4.1 – WEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.1 Attacco di malleabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Esempio 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2 Cifrari a blocchi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2.1 Rete di Feistel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2.2 Modalità di cifratura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2.2.1 Cipher Block Chain CBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2.2.2 Cipher Feedback CFB e Output Feedback OFB . . . . . . . . . . . . . . . . . 25
4.2.2.2.1 CFB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2.2.2.2 OFB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2.2.3 Counter CTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3 Autenticità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.1 Message Authentication Code MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.2 Firma digitale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.4 Scambio delle chiavi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4.1 Master key . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4.2 Key Distribution Center KDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.4.3 Scambio di Diffie-Hellman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5 Cifrari asimmetrici 31
5.1 Distribuzione delle chiavi pubbliche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.1.1 Standard X.509 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.1.2 Ciclo di vita dei certificati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.1.2.1 Richiesta di un certificato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.1.2.2 Revoca di un certificato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.1.2.2.1 Certificate Revocation List CRL . . . . . . . . . . . . . . . . . . . . 34
5.1.2.2.2 Online Certificate Status Protocol OCSP . . . . . . . . . . . . . . . 34
5.1.3 Valutazione e organizzazione della PKI . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2 Modelli di fiducia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.1 Coordinamento tra CA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Esempio 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.3 Sicurezza delle reti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3.1 SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6 Crittografia a chiave pubblica 38
6.1 Richiami di algebra modulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.2 Numeri primi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.3 Cifrari asimmetrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.3.1 Frammentazione del testo in chiaro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.3.2 Determinismo e probabilismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.3.3 Modalità di impiego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.4 Cifrario RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.4.1 Generazione delle chiavi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.4.2 Aspetti computazionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.4.3 Tipologie di attacchi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.4.3.1 Forza bruta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.4.3.2 Attacchi matematici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.4.3.3 Attacchi a tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.4.3.4 Testo cifrato scelto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.4.4 Cifrario ibrido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.4.5 Firma digitale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
ii
7 Servizi sicuri per le comunicazioni di rete 44
7.1 SSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.1.1 Handshake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.1.1.1 Fase 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.1.1.2 Fase 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.1.1.3 Fase 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.1.1.4 Fase 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.1.2 Record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.1.3 Problemi di autenticazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.2 Pretty Good Privacy PGP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.2.1 Autenticazione e confidenzialità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.2.2 Compressione e compatibilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.2.3 Gestione delle chiavi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.2.4 Formato dei messaggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.3 Marche temporali sicure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7.4 Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.4.1 Autenticazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.5 IPSec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7.5.1 Modalità di impiego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.5.1.1 Costruzione del pacchetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.5.2 Servizio anti replica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
8 Sicurezza in Java 55
8.1 Java Security Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.2 Controllo dell’accesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.2.1 Architettura della JVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.2.2 Modello di sicurezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.2.2.1 Controllo dei permessi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8.2.2.2 Scelte progettuali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.2.3 Permessi basati su utente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A Esercitazione I 59
A.1 Network mapping e port scanning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
A.2 Vulnerabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
A.2.1 Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
A.2.2 Autenticazione e sessione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
A.2.3 Cross-Site Scripting XSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
A.2.4 Riferimento insicuro ad oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
A.2.5 Configurazioni errate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
A.2.6 Esposizione di dati sensibili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
A.2.7 Privilegi non limitati correttamente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
A.2.8 Cross Site Request Forgery CSRF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
A.2.9 Uso di componenti con vulnerabilità note . . . . . . . . . . . . . . . . . . . . . . . . . . 61
A.2.10 Redirect e forward non controllati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
A.2.11 Altre vulnerabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
A.2.11.1 HTML injection, XSS e abuso di funzionalità . . . . . . . . . . . . . . . . . . 62
A.2.11.2 Server Side Request Forgery SSRF . . . . . . . . . . . . . . . . . . . . . . . . 62
iii
Capitolo 1
Introduzione
La sicurezza informatica è un aspetto che ha assunto oggi grande rilevanza a causa dell’avvento degli smart-
phone e dell’Internet of Things. Ciò ha condotto i governi di molti paesi a investire sempre di più nell’acquisto
di strumenti per la difesa da attacchi informatici, da mettere a disposizione delle aziende di tutti i settori
(non solo quello tecnologico).
Gli attacchi ormai sono a scopo di lucro, non più col solo obiettivo di riuscire a entrare in un sistema e
renderne pubbliche vulnerabilità e struttura. Spesso si hanno anche casi di Denial of Service per rendere
inaccessibili i servizi causando quindi un danno economico. L’esplosione del numero di attacchi è causato
dal cambiamento nel paradigma per la gestione delle informazioni: si è infatti passati dall’elaborazione
centralizzata su linee di comunicazione e terminali dedicati a un’elaborazione distribuita su linee condivise
(spesso wireless con nuovi tipi di applicazioni come il web, peer-to-peer e l’IoT) in cui tantissimi dispositivi
dediti a compiti diversi sono fra loro collegati.
Il primo attacco avvenne nel 1988 attraverso un Internet che al tempo era limitato ai dipartimenti uni-
versitari statunitensi. Questo attacco prende il nome di Morris Worm, un programma maligno in grado di
autoreplicarsi e propagarsi attraverso tutti i nodi della rete. Robert Morris, autore dell’attacco, è il primo
hacker della storia e lo fece solo per curiosità di testing sulla rete, poi condannato a una multa e 3 anni di
reclusione. Il software da lui diffuso aveva infettato il degli host causando DoS attraverso un sovrac-
10 %
carico della CPU; la diffusione è stata possibile sfruttando alcune vulnerabilità del sistema Unix, secondo
varie modalità:
• Tentativi di fare analisi di password provando loro diverse permutazioni, a partire da un dizionario.
1
• Usando servizi da terminale come Telnet, FTP, e sfruttando alcune vulnerabilità di funzioni
finger
di libreria utilizzate come le quali non eseguivano alcun controllo sui parametri. Ciò permet-
gets(),
teva di aprire una shell su un nodo remoto per poi sfruttare vulnerabilità di altri programmi (come
per replicarsi.
sendmail)
Se già in una rete con pochi nodi è stato possibile infettarne così tanti con questo worm, è comprensibile
che con la crescita esponenziale dei nodi la pericolosità degli attacchi aumenti inevitabilmente. Sebbene il
protocollo TCP/IP sia uno strumento molto potente per la trasmissione dei dati, esso non è mai stato pensato
per prevenire gli attacchi. Telnet si appoggia a questo per aprire una shell remota, con la controindicazione
che le credenziali di accesso sono, in questo modo, trasmesse in chiaro su reti condivise. Si è per questo
motivo passati all’utilizzo del più sicuro protocollo SSH.
Il mondo della sicurezza informatica è molto ampio, pertanto non ci occuperemo di come scrivere codice
sicuro da attacchi informatici, ma lo introdurremo solamente. Gli attacchi possono essere di molti tipi
diversi:
• Spoofing: falsificazione di qualcosa per far credere ad altri che essa sia autentica. In particolare si
può fare IP spoofing, ovvero far assumere ad una macchina un IP diverso per fare in modo che essa
si sostituisca alla macchina che normalmente ha quell’IP (la quale dovrà essere scollegata per evitare
conflitti).
1 Servizio di Unix che dà informazioni sugli utenti attualmente collegati.
1
• Denial of Service DoS: la forma più comune è il SYN flooding, la quale prevede di bombardare un
server di messaggi di SYN che danno inizio al protocollo di handshake. Ciò riempie la coda di ascolto,
ma i client non manderanno mai il messaggio di ACK per completare la connessione, impedendo quindi
che possa essere chiamata la per svuotare la coda stessa, causando il sovraccarico del server.
accept()
Un’altra tecnica è il ping flooding.
• Distributed Denial of Service DDoS: si sfrutta una botnet per causare DoS.
• Hijacking: prevedendo i numeri di sequenza TCP o ascoltando il canale per individuarli (previa
disconnessione del client vero), è possibile immettere sulla rete messaggi con IP del client disconnesso
ma con un payload maligno.
• Port scanning: determina quali servizi sono in ascolto su quali porte.
• Worm e virus.
• Data sniffing: cattura dei dati di una connessione con attacchi di tipo man-in-the-middle.
Una versione più potente del DoS è il Distributed DoS DDoS. Questa tecnica sfrutta una botnet in cui
ogni nodo fa DoS verso la vittima; ciò richiede che l’attaccante abbia accesso a una serie di computer master
che si occuperanno a loro volta di controllare, attraverso canali cifrati, dei daemon su macchine remote
che effettuano il vero attacco. I bot utilizzati possono essere sia consapevoli (e ciò richie
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Elaborazione digitale dell'Informazione - Appunti
-
Appunti di Gestione dell'Informazione
-
Appunti economia dell'informazione
-
Appunti Cantiere