Sicurezza delle reti
Firma digitale
Con la firma digitale garantisco l'autenticità e l'integrità, ma il messaggio può essere in chiaro e non garantisco la confidenzialità. Il problema è dare la certezza di usare la chiave pubblica di qualcuno, si risolve utilizzando i certificati. Ci sono società che vengono pagate per validare le chiavi pubbliche. In un certificato ci sono le informazioni della persona, la chiave pubblica e le informazioni dell'autorità che ha firmato il certificato. Per generare una chiave pubblica si usa un certificato. La lista delle chiavi pubbliche delle certification authority è salvata nel browser.
La digital envelop mette insieme più tecniche, sia crittografia simmetrica che asimmetrica. Si usa questa perché è più veloce di usare solo la crittografia a chiave pubblica (asimmetrica), si usa la pubblica solo per crittografare la chiave.
Hardening
Hardening significa prendere un sistema operativo e renderlo il più sicuro possibile. Il concetto è quello di togliere tutto quello che non è necessario: non puoi rompere quello che non c'è! Usare sandboxing, ovvero separare l'esecuzione dei processi, magari utilizzare un utente specifico per ogni processo. Se ne utilizzo uno per tutto, uno dei processi potrebbe prendere i privilegi di root e riuscire a fare tutto. Usare macchine virtuali.
Il mondo Ubuntu utilizza AppArmor e una filosofia vecchia: tutto è un file, è più semplice da configurare, a differenza di SELinux (su Android e Fedora) e Grsecurity. Con le capabilities, se un eseguibile vuole cambiare password, anziché dargli l'onnipotenza di diventare root, gli do solo la possibilità di leggere e scrivere il database delle password, non utilizzano quindi lo set user ID. Esiste una lista di capabilities.
Lo svantaggio delle capabilities è che sono poco conosciute, non sostituiscono set user ID ma lo affiancano. Perciò, se qualcuno è entrato, deve controllare entrambi, sia set user ID che capabilities. Inoltre, set user ID si vede col comando ls, mentre per le capabilities servono dei programmi appositi. Le capabilities su molti sistemi Linux già affiancano set user ID. Nemmeno il prof sa perché le capabilities non sostituiscono i set user ID, pensa che sia probabilmente per mantenere una retrocompatibilità.
Tecniche crittografiche
Ci sono tre tecniche crittografiche (antiforensics): solo home directory crittografata, delle partizioni, magari eccetto boot, tutto compreso boot. Secondo il prof, meglio usare crittografia implementata in software anziché in hardware, perché se si rompe l’hardware devo trovare il controller hardware uguale che magari è fuori produzione, però in software è più lento. Non ha senso crittografare la home se poi si lascia in chiaro tmp e partizioni di swap. Lo swap sono pagine di RAM salvate su disco, anche se non è più usato nei sistemi moderni continua a esistere.
Nei sistemi tipicamente non è criptato l’hard disk, perciò se lo smonto posso accedere a tutti i dati eccetto le password che dovrebbero essere criptate. Le tecniche sono tutte aggiuntive. È pericoloso ad esempio se mi rubano il PC perché accedono al file dove ci sono i cookie ad esempio di Facebook.
Una delle prime cose che si fa è bussare porta per porta per vedere i servizi attivi, il tool più famoso è Nmap, che scandisce intere sottoreti, vede se ci sono porte TCP o UDP in ascolto. Di default non le scandisce tutte (sono 216) ma le porte tipicamente più utilizzate. Posso anche dirgli tutte. Se è TCP parte il 3-way handshake, se è UDP può leggere e non rispondere. Se ritorna un messaggio ICMP che dice che il messaggio non è arrivato, però ci sono anche dei modi per fare in modo che questo messaggio non arrivi.
Access controls
Il computer ha un firmware che si chiama BIOS, ma anche la CPU ce l’ha e può essere aggiornata da remoto.
La dice i permessi, i proprietari (utente, gruppo), la lunghezza (il nome non consuma lunghezza), il nome (scritto nell’inode), posso, essendo il proprietario, togliermi i permessi e rimettermeli. Solo root può cambiare i proprietari. Quando io eseguo un binario viene eseguito con user ID, group ID di chi ha lanciato il binario in quel momento. Il terzo bit chiamato sticky (appiccicoso), non viene usato più quasi per nulla ma non si può togliere per retrocompatibilità.
In un mondo di tanti gruppi, l’access control tradizionale di UNIX è inadeguato. Nascono perciò ACL, le Access Control List, un meccanismo dove si tenta di aggiungere espressività mantenendo retrocompatibilità. Lo stesso file non è più vincolato ad avere un singolo user ID e un singolo group ID ma una lista, un file non per forza deve avere una ACL, un file classico potrebbe avere l’altro metodo. Per capire se c’è un ACL c’è un bit che lo dice. Proprietario, gruppo e mondo sono i classici. ACL i bit del gruppo cambiano significato, solo quelli, perché i gruppi sono i meno utilizzati e comunque non si toglie la possibilità di esprimere il gruppo. Questi rappresentano il massimo dei diritti di ogni utente nella maschera.
Si sono inventati praticamente un modo per indicare listandoli tutti gli utenti e tutti i gruppi, questo è fatto per ogni file. Posso aggiungere nell’inode un entry name per ogni utente, i 3 bit del gruppo servono solo per dire il livello massimo da non poter superare. I gruppi penso vadano sempre come entry name in questo modo ne posso avere di più, nella masked entry ci possono essere infiniti gruppi ma uno solo sarà proprietario. Questo è il discretionary. Nei nuovi sistemi ogni file ha un proprietario, di solito chi l’ha creato.
Esiste un modo automatico per sapere chi può leggere, eseguire, ecc., altrimenti sarebbe da fare a mano ma è impensabile. Discretionary access control c’è in Apple, Linux e Windows. Il mandatory lo usano i servizi segreti e il role based (va bene in ambito bancario) è quando si cambia da un utente all’altro. Una volta i sistemi operativi erano solo discretionary, ora per aumentare la sicurezza hanno preso un po’ di mandatory e role based.
Il mandatory access control invece ha una serie di livelli, meccanismo di etichette per ogni risorsa nel sistema e per ogni utente, meccanismo classico di sicurezza militare ma nella vita reale è un meccanismo mostruosamente rigido. Il compartimento non è altro che una classificazione orizzontale (i livelli sono a classificazione verticale). Un progetto può essere a cavallo tra due livelli. Per ogni singola risorsa gli do un’etichetta che avrà un rank e un compartimento, a questo punto ho classificato le informazioni, per classificare le persone uso un concetto.