Differenze tra le versioni di "Sicurezza/2005-2006"

Da WikiDsy.
(La pagina richiede un editaggio migliore)
m
 
(27 versioni intermedie di 14 utenti non mostrate)
Riga 1: Riga 1:
[[Categoria:Corsi 2005-2006]]
+
[[Categoria:Corsi 2005-2006]][[Categoria:Appunti]]
 
<!-- non cancellare le righe precedenti -->
 
<!-- non cancellare le righe precedenti -->
  
Riga 37: Riga 37:
 
** Titolo: ''"Firewall e sicurezza di rete"'',II Edizione
 
** Titolo: ''"Firewall e sicurezza di rete"'',II Edizione
 
** Autori: W.Cheswick,S.Bellouin,A.Rubin
 
** Autori: W.Cheswick,S.Bellouin,A.Rubin
** Casa Editrice: Edision Wesley
+
** Casa Editrice: Addison Wesley
 
** Prezzo: 32 €
 
** Prezzo: 32 €
  
Riga 155: Riga 155:
 
=== Lezione di Mercoledì 12-10-05 ===
 
=== Lezione di Mercoledì 12-10-05 ===
  
==== La pagina richiede un editaggio migliore ====
 
 
Ripasso in veloce carrellata dei permessi classici in [http://en.wikipedia.org/wiki/Linux Linux]:
 
Ripasso in veloce carrellata dei permessi classici in [http://en.wikipedia.org/wiki/Linux Linux]:
 
1)Directories
 
1)Directories
Riga 188: Riga 187:
 
Sticky non consentono la modifica dei files a nessuno ad eccezione dell'owner.
 
Sticky non consentono la modifica dei files a nessuno ad eccezione dell'owner.
  
Esempio:  -rw-r--r-- 1 dieter staff 1617 Oct 28 11:01 adrmp.tex  
+
Esempio:<br> -rw-r--r-- 1 dieter staff 1617 Oct 28 11:01 adrmp.tex <br>
 
La stringa sopra specifica i permessi per il file adrmp.tex. L'owner  
 
La stringa sopra specifica i permessi per il file adrmp.tex. L'owner  
 
può leggere e scrivere sul file mentre gli altri solo leggerlo. Il numero 1
 
può leggere e scrivere sul file mentre gli altri solo leggerlo. Il numero 1
Riga 205: Riga 204:
 
Se un programma è SUID (associa all'eseguibile in esecuzione i permessi
 
Se un programma è SUID (associa all'eseguibile in esecuzione i permessi
 
del propietario ) l'execute permission dell'owner è "s",se SGID (per i gruppi)  
 
del propietario ) l'execute permission dell'owner è "s",se SGID (per i gruppi)  
associa all'eseguibile in esecuzione i permessi del gruppo di appartenenza.
+
associa all'eseguibile in esecuzione i permessi del gruppo di appartenenza.<br>
Es: -rws rwx rwx  --> permessi per SUID
+
Es: -rws rwx rwx  --> permessi per SUID<br>
Es: -rwx rws rwx  --> permessi per SGID
+
Es: -rwx rws rwx  --> permessi per SGID<br>
  
 
-2.1) Comandi -
 
-2.1) Comandi -
  
2.1.1)UMASK
+
2.1.1)UMASK<br>
 
I permessi di default per un utente vengono definiti dalla sua maschera. La maschera
 
I permessi di default per un utente vengono definiti dalla sua maschera. La maschera
 
è impostabile tramite umask. La umask è un ottale da 4 cifre che specifica i diritti
 
è impostabile tramite umask. La umask è un ottale da 4 cifre che specifica i diritti
che non vengono attribuiti. Si deve ricordare i valori dei permessi:<nowiki>
+
che non vengono attribuiti. Si deve ricordare i valori dei permessi:<br>
- r: 4  w: 2  x: 1
+
- r: 4  w: 2  x: 1<br>
- rw: 6 rx: 5 rwx: 7 (la loro somma definisce il numero).
+
- rw: 6 rx: 5 rwx: 7 (la loro somma definisce il numero).<br>
Es: umask 0777 vieta ogni accesso al file (corrisponde a ----------);
+
Es: umask 0777 vieta ogni accesso al file (corrisponde <nowiki>a ----------</nowiki>);<br>
    umask 0022 tutti i permessi all'owner,"rx" per gruppo e altri.
+
umask 0022 tutti i permessi all'owner,"rx" per gruppo e altri.<br>
Se si digita umask senza specificare nulla possiamo vedere la nostra maschera.
+
Se si digita umask senza specificare nulla possiamo vedere la nostra maschera.<br>
Es:  
+
Es: <br>
  
[orion@christian ~]$ umask
+
[orion@christian ~]$ umask<br>
0002
+
0002<br>
Vuol dire che i file che creo avranno di default questi permessi:
+
Vuol dire che i file che creo avranno di default questi permessi:<br>
Es:  drwxrwxr-x 2 orion orion  4096 19 set 17:48 Ciao  (directories)
+
Es:  drwxrwxr-x 2 orion orion  4096 19 set 17:48 Ciao  (directories)<br>
Es: -rw-rw-r-- 1 orion orion      0 19 set 20:05 prova  (files)
+
Es: -rw-rw-r-- 1 orion orion      0 19 set 20:05 prova  (files)<br>
  
Per i files vale quest'operazione:  0666 & 0002 = 0664 = rw-rw-r--
+
Per i files vale quest'operazione:  0666 & 0002 = 0664 = rw-rw-r--<br>
Da qui i valori visti nell'esempio,perchè i permessi effettivamente assegnati
+
Da qui i valori visti nell'esempio,perchè i permessi effettivamente assegnati<br>
al nuovo file sono determinati come il risultato di mode & ~umask.</nowiki>
+
al nuovo file sono determinati come il risultato di mode & ~umask.<br>
  
2.1.2)chattr
+
2.1.2)chattr<br>
 
chattr permette di cambiare gli attributi di un file su file system ext2/ext3.
 
chattr permette di cambiare gli attributi di un file su file system ext2/ext3.
 
chattr -RV -Sacdisu nomefile. Si può impostare gli attributi anche con gli operatori
 
chattr -RV -Sacdisu nomefile. Si può impostare gli attributi anche con gli operatori
 
+(aggiunge gli attr. a quelli esistenti),-(sottrae a quelli già esistenti) e = (rende
 
+(aggiunge gli attr. a quelli esistenti),-(sottrae a quelli già esistenti) e = (rende
 
gli attributi come ciò che è indicato alla destra dell'uguale).
 
gli attributi come ciò che è indicato alla destra dell'uguale).
-R li cambia ricorsivamente per tutti i file nella directory;
+
* -R li cambia ricorsivamente per tutti i file nella directory;
-V evidenzia i cambiamenti;
+
* -V evidenzia i cambiamenti;
 
 
 
* -S: scrive i cambiamenti in modo sincrono su disco;
 
* -S: scrive i cambiamenti in modo sincrono su disco;
 
* -a: scrive i dati in modalità append;
 
* -a: scrive i dati in modalità append;
Riga 248: Riga 246:
 
* -u: il file una volta cancellato è memorizzato,potendo così recuperarlo;
 
* -u: il file una volta cancellato è memorizzato,potendo così recuperarlo;
  
2.1.3)lsattr
+
2.1.3)lsattr<br>
Mostra gli attributi di un file.
+
Mostra gli attributi di un file.<br>
lsattr [ -Radv ] [ file...  ]
+
lsattr [ -Radv ] [ file...  ]<br>
 
* -R: mostra ricorsivamente gli attributi delle directory e del loro contenuto.
 
* -R: mostra ricorsivamente gli attributi delle directory e del loro contenuto.
 
* -a: mostra tutti i file nelle directory,compresi quelli che iniziamo con ‘.’.
 
* -a: mostra tutti i file nelle directory,compresi quelli che iniziamo con ‘.’.
Riga 257: Riga 255:
  
 
Esempio uso combo chattr+lsattr:
 
Esempio uso combo chattr+lsattr:
<nowiki>
 
[orion@christian ~]$ chattr =Ss prova
 
[orion@christian ~]$ lsattr
 
------------- ./My Skype Pictures
 
s-S---------- ./prova</nowiki>
 
  
2.1.4)chown
+
[orion@christian ~]$ chattr =Ss prova<br>
Cambia l’utente e il gruppo proprietari dei file.  
+
[orion@christian ~]$ lsattr<br>
chown [-cfhvR] utente[:gruppo] file...
+
<nowiki>-------------</nowiki>./My Skype Pictures<br>
utente e gruppo possono esser nomi o rispettivi ID.
+
<nowiki>s-S----------</nowiki> ./prova</nowiki><br>
 +
 
 +
2.1.4)chown<br>
 +
Cambia l’utente e il gruppo proprietari dei file. <br>
 +
chown [-cfhvR] utente[:gruppo] file...<br>
 +
utente e gruppo possono esser nomi o rispettivi ID.<br>
 
* -R: cambia ricorsivamente la proprietà delle directory e dei file
 
* -R: cambia ricorsivamente la proprietà delle directory e dei file
    contenuti (e continua anche se ci sono degli errori).
+
contenuti (e continua anche se ci sono degli errori).
 
* -c(--changes): descrive in dettaglio ogni modifica fatta alla proprietà di un
 
* -c(--changes): descrive in dettaglio ogni modifica fatta alla proprietà di un
    file.
+
file.
 
* -f(--silent, --quiet): non  mostra  messaggi d’errore sui file la cui proprietà non può
 
* -f(--silent, --quiet): non  mostra  messaggi d’errore sui file la cui proprietà non può
    essere cambiata.
+
essere cambiata.
 
* -h(--no-dereference): modifica gli stessi link simbolici invece dei file a cui si
 
* -h(--no-dereference): modifica gli stessi link simbolici invece dei file a cui si
    riferiscono. È disponibile solo se la chiamata di sistema lchown è presente.
+
riferiscono. È disponibile solo se la chiamata di sistema lchown è presente.
 
* -v(--verbose): descrive in dettaglio le azioni intraprese (o meno) per ogni
 
* -v(--verbose): descrive in dettaglio le azioni intraprese (o meno) per ogni
    file.
+
file.
  
 
Es: chown -R --from=root andrew miadir  (cambia ricorsivamente l'owner a andrew di tutti
 
Es: chown -R --from=root andrew miadir  (cambia ricorsivamente l'owner a andrew di tutti
i files appartenenti a root nella directory mia dir).
+
i files appartenenti a root nella directory mia dir).
  
2.1.5)chgrp
+
2.1.5)chgrp<br>
Cambia il gruppo proprietario dei file.
+
Cambia il gruppo proprietario dei file.<br>
chgrp [-cfvR] gruppo file...
+
chgrp [-cfvR] gruppo file...<br>
le opzioni hanno lo stesso significato di quelle di chown.
+
le opzioni hanno lo stesso significato di quelle di chown.<br>
  
2.1.6)chmod
+
2.1.6)chmod<br>
Cambia i permessi di accesso di un file.
+
Cambia i permessi di accesso di un file.<br>
chmod [-cfvR] [ugoa...][+-=][rwxXstugo...] file
+
chmod [-cfvR] [ugoa...][+-=][rwxXstugo...] file<br>
 
*  u: owner g: gruppo o: altri a: tutti (ugo)
 
*  u: owner g: gruppo o: altri a: tutti (ugo)
 
*  r: leggibile w: scrivibile x: eseguibile  
 
*  r: leggibile w: scrivibile x: eseguibile  
 
*  X: eseguibile solo se il file è una directory o è già eseguibile
 
*  X: eseguibile solo se il file è una directory o è già eseguibile
    per  alcuni  utenti;
+
per  alcuni  utenti;
 
*  s: imposta l’user o group ID sull’esecuzione (SGID/SUID);
 
*  s: imposta l’user o group ID sull’esecuzione (SGID/SUID);
 
*  t: sticky bit,se impostato per una directory, significa che solo il
 
*  t: sticky bit,se impostato per una directory, significa che solo il
    proprietario del file o della directory può rimuovere il file dalla
+
proprietario del file o della directory può rimuovere il file dalla
    detta  directory(vedi dir "tmp");
+
detta  directory(vedi dir "tmp");
 
*  u: imposta stessi permessi del propietario;
 
*  u: imposta stessi permessi del propietario;
 
*  g:    " " "  del gruppo;
 
*  g:    " " "  del gruppo;
Riga 302: Riga 300:
 
   
 
   
 
I permessi possono essere espressi anche con un ottale a quattro cifre (se  
 
I permessi possono essere espressi anche con un ottale a quattro cifre (se  
uso meno cifre,le restanti vengono considerate zeri). Esempi:
+
uso meno cifre,le restanti vengono considerate zeri). Esempi:<br>
<nowiki>
 
0001  --> ---------x
 
0402  --> -r------w-
 
0664  --> -rw-rw-r--
 
0010  --> ------x---
 
0020  --> -----w----
 
1000  --> sticky bit
 
2000  --> SGID su esecuzione
 
4000  --> SUID su esecuzione
 
</nowiki>
 
  
Es:<nowiki>
+
0001  --> <nowiki>---------x</nowiki><br>
[orion@christian ~]$ touch ciao
+
0402  --> <nowiki>-r------w-</nowiki><br>
[orion@christian ~]$ ll|grep ciao
+
0664  --> <nowiki>-rw-rw-r--</nowiki><br>
-rw-rw-r-- 1 orion orion      0 19 set 21:32 ciao
+
0010  --> <nowiki>------x---</nowiki><br>
[orion@christian ~]$ chmod 1066 ciao
+
0020  --> <nowiki>-----w----</nowiki><br>
[orion@christian ~]$ ll|grep ciao
+
1000  --> sticky bit<br>
----rw-rwT 1 orion orion      0 19 set 21:32 ciao</nowiki>
+
2000  --> SGID su esecuzione<br>
 +
4000  --> SUID su esecuzione<br>
 +
<br>
  
3)IDENTIFICAZIONE E AUTENTICAZIONE UTENTI: USER NAMES e PASSWORD
+
Es:<br>
3.1)I files delle password e degli utenti
+
[orion@christian ~]$ touch ciao<br>
 +
[orion@christian ~]$ ll|grep ciao<br>
 +
-rw-rw-r-- 1 orion orion      0 19 set 21:32 ciao<br>
 +
[orion@christian ~]$ chmod 1066 ciao<br>
 +
[orion@christian ~]$ ll|grep ciao<br>
 +
<nowiki>----rw-rwT 1 orion orion  0 19 set 21:32 ciao</nowiki><br>
 +
 
 +
3)IDENTIFICAZIONE E AUTENTICAZIONE UTENTI: USER NAMES e PASSWORD<br>
 +
3.1)I files delle password e degli utenti<br>
  
 
Il file /etc/passwd è il database degli utenti su ogni sistema Unix.  
 
Il file /etc/passwd è il database degli utenti su ogni sistema Unix.  
Riga 334: Riga 332:
 
Username:Password:UserID:GroupID:Info:HomeDirectory:Shell
 
Username:Password:UserID:GroupID:Info:HomeDirectory:Shell
 
Info riguarda informazioni varie(nome completo,telefono,ecc)inserite dall'utente  
 
Info riguarda informazioni varie(nome completo,telefono,ecc)inserite dall'utente  
all'atto della creazione dell'account.
+
all'atto della creazione dell'account.<br>
Es:<nowiki>
+
Es:<br>
[orion@christian ~]$ cat /etc/passwd|grep orion
+
[orion@christian ~]$ cat /etc/passwd|grep orion<br>
orion:x:500:500:Christian:/home/orion:/bin/bash
+
orion:x:500:500:Christian:/home/orion:/bin/bash<br>
  
Ecco i permessi per /etc/shadow:
+
Ecco i permessi per /etc/shadow:<br>
-r--------  1 root root    1230 19 ago 23:33 shadow</nowiki>
+
<nowiki>-r--------  1 root root    1230 19 ago 23:33 shadow</nowiki><br>
  
 
Il file risulta accessibile solo in lettura da root.Ad esso fanno riferimento diversi files,
 
Il file risulta accessibile solo in lettura da root.Ad esso fanno riferimento diversi files,
Riga 349: Riga 347:
 
raggruppati in 11 caratteri ASCII di 6 bit e associati ai caratteri ASCII(0..9,A..Z,a..z).
 
raggruppati in 11 caratteri ASCII di 6 bit e associati ai caratteri ASCII(0..9,A..Z,a..z).
 
La pass registrata viene fatta precedere da 2 caratteri di 6 bit che rappresentano il salto.  
 
La pass registrata viene fatta precedere da 2 caratteri di 6 bit che rappresentano il salto.  
Le righe in /etc/shadow si presentano nella seguente forma:
+
Le righe in /etc/shadow si presentano nella seguente forma:<br>
Username:password:lastchange:min:max:warn:inactive:expire:
+
Username:password:lastchange:min:max:warn:inactive:expire:<br>
  
Username: Il nome dell'utente a cui fa riferimento la password;
+
* Username: Il nome dell'utente a cui fa riferimento la password;<br>
Password: password criptata (13 caratteri). Puo assumere anche altri valori quali * (asterisco)  
+
* Password: password criptata (13 caratteri). Puo assumere anche altri valori quali <owiki>*</nowiki> (asterisco) <br>che sta ad indicare che l'utente è disabilitato e !! (o nessun carattere) che significa che l'utente non ha password (cosa molto pericolosa in termini di sicurezza);
che sta ad indicare che l'utente è disabilitato e !! (o nessun carattere) che significa che  
+
* lastchange: Numero di giorni compresi fra il 1 gennaio 1970 e l'ultima modifica della password;<br>
l'utente non ha password (cosa molto pericolosa in termini di sicurezza);
+
* min: Minimo numero di giorni dall'ultima data di modifica prima di poter nuovamente cambiare la password;<br>
lastchange: Numero di giorni compresi fra il 1 gennaio 1970 e l'ultima modifica della password;
+
* max: Durata massima della password (sempre in giorni);<br>
min: Minimo numero di giorni dall'ultima data di modifica prima di poter nuovamente cambiare la password;
+
* warn: Numero di giorni di preavviso all'utente prima di invalidare la password;<br>
max: Durata massima della password (sempre in giorni);
+
* inactive: Numero di giorni di inattività possibili per quell'utente.<br>
warn: Numero di giorni di preavviso all'utente prima di invalidare la password;
+
* expire: Data dopo la quale quel login non può più essere usato.<br>
inactive: Numero di giorni di inattività possibili per quell'utente.
 
expire: Data dopo la quale quel login non può più essere usato.
 
  
3.2)passwd
+
3.2)passwd<br>
Il comando passwd cambia la password.
+
Il comando passwd cambia la password.<br>
passwd [ utente [ password ] ]
+
passwd [ utente [ password ] ]<br>
 
Se non specifico alcun utente,la cambia per l'utente corrente.La modalità ad 1 e 2 argomenti
 
Se non specifico alcun utente,la cambia per l'utente corrente.La modalità ad 1 e 2 argomenti
 
può essere usata solo da root.
 
può essere usata solo da root.
  
* [http://en.wikipedia.org/wiki/Access_control_list ACL](Access Control List):
+
ACL
** è possibile aggiungere utenti o gruppi con un nome specifico;i comandi ACL possono rimpiazzare quelli di <tt>chmod</tt>; tuttavia, suid/sgid/sticky bit possono essere impostati solo con chmod;
+
Le ACL rappresentano delle estensioni ai normali permessi UNIX. Files e dir possono contenere
** ACL minimale: permessi classici;
+
informazioni più dettagliate. C'è la possibilità di dichiarare utenti e gruppi con nome,a cui
** ACL estesa: maschera,utente,gruppi aggiuntivi,...
+
si associano permessi specifici. La gestione degli utenti e gruppi viene sottoposta al filtro
** Access ACL: più diffusa,trova applicazione per files e directories;
+
di una maschera (non umask),che rappresenta l'insieme massimale di ciò che è permesso fare.
** default ACL: solo su directories;
+
Entries:<br>
 +
* user::permessi --> permessi associati all'utente propietario non filtrati dalla maschera ACL.
 +
* group::permessi --> permessi associati al gruppo propietario non filtrati dalla maschera ACL.
 +
* user:utente:permessi --> permessi associati all'utente con nome
 +
* user:gruppo:permessi --> permessi associati al gruppo con nome
 +
* mask::permessi --> maschera dei permessi concessi ad utenti/gruppi con nome
 +
* other::permessi --> permessi associati agli altri,non filtrati dalla maschera ACL.
 +
Le ACL minimali sono quelle che hanno 3 entries per definire i classici permessi per user,group e
 +
others. Se hanno più di 3 entries vengono dette "estese".
 +
ACL minimali esempio:<br>
 +
 
 +
[orion@localhost ~]$ umask<br>
 +
0002<br>
 +
[orion@localhost ~]$ vi prova (salvo file)<br>
 +
[orion@localhost ~]$ ll|grep pr<br>
 +
-rw-rw-r-- 1 orion orion    28 20 set 10:41 prova<br>
 +
[orion@localhost ~]$ getfacl prova (corrisponde a --all-effective)<br>
 +
# file: prova<br>
 +
# owner: orion<br>
 +
# group: orion<br>
 +
user::rw-<br>
 +
group::rw-<br>
 +
other::r--<br>
 +
 
 +
La concessione dei permessi viene data o meno a seconda dell'entry selezionata,alla mask se coinvolta
 +
e alla richiesta effettuata.<br>
 +
Ordine:<br>
 +
1)Se UID del processo è dell'owner,le entries per l'onwer determinano l'accesso;<br>
 +
2)Se UID del processo sono quelle di qualche utente con nome,le sue entries determinano i permessi;<br>
 +
3)Se uno dei GID dei processi è uguale a quello del gruppo propietario e le sue entries contengono
 +
i permessi richiesti,questa entry definisce l'accesso;<br>
 +
4)Se uno dei GID dei processi è uguale a quello di uno dei gruppi con nome e le sue entries contengono
 +
i permessi richiesti,questa entry definisce l'accesso;<br>
 +
5)i permessi di altri definiscono l'accesso;<br>
 +
6)Se viene scelta la entry per owner o quella si altri ed esse contegono i permessi richiesti,l'accesso
 +
è consentito;<br>
 +
7)Se la entry scelta è quella di un utente/gruppo con nome o quella del gruppo propietario,ed esse hanno
 +
i permessi richiesti e la maschera(se presente)contiene anch'essa i permessi,l'accesso è consentito;<br>
 +
8)Altrimenti l'accesso è negato;<br>
 +
 
 +
Le access ACL definiscono i permessi d'accesso agli oggetti del file system. Le default ACL definiscono
 +
i permessi ereditati da un oggetto del file system dalla parent directory al momento della sua creazione.
 +
Solo le directories possono essere associate alle default ACL perchè per altri file non-directory non avrebbero
 +
senso. Non giocano un ruolo diretto nel controllo degli accessi.Directories create all'interno di ACL default
 +
directories ereditano le loro default ACL sia come default sia come access ACL,mentre se sono files solo come access ACL.<br>
 +
 
 +
4.1)getfacl<br>
 +
getfacl [-dRLP] file<br>
 +
--access            display the file access control list only<br>
 +
  -d, --default          display the default access control list only<br>
 +
      --omit-header      do not display the comment header<br>
 +
      --all-effective    print all effective rights<br>
 +
      --no-effective      print no effective rights<br>
 +
      --skip-base        skip files that only have the base entries<br>
 +
  -R, --recursive        recurse into subdirectories<br>
 +
  -L, --logical          logical walk, follow symbolic links<br>
 +
  -P  --physical          physical walk, do not follow symbolic links<br>
 +
      --tabular          use tabular output format<br>
 +
      --numeric          print numeric user/group identifiers<br>
 +
      --absolute-names    don't strip leading '/' in pathnames<br>
 +
 
 +
[orion@localhost ~]$ getfacl -d prova<br>
 +
# file: prova<br>
 +
# owner: orion<br>
 +
# group: orion<br>
 +
 
 +
4.2)setfacl<br>
 +
setfacl 2.2.34 -- set file access control lists<br>
 +
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...<br>
 +
-m, --modify=acl        modify the current ACL(s) of file(s)<br>
 +
  -M, --modify-file=file  read ACL entries to modify from file<br>
 +
  -x, --remove=acl        remove entries from the ACL(s) of file(s)<br>
 +
  -X, --remove-file=file  read ACL entries to remove from file<br>
 +
  -b, --remove-all        remove all extended ACL entries<br>
 +
  -k, --remove-default    remove the default ACL<br>
 +
      --set=acl          set the ACL of file(s), replacing the current ACL<br>
 +
      --set-file=file    read ACL entries to set from file<br>
 +
      --mask              do recalculate the effective rights mask<br>
 +
  -n, --no-mask          don't recalculate the effective rights mask<br>
 +
  -d, --default          operations apply to the default ACL<br>
 +
  -R, --recursive        recurse into subdirectories<br>
 +
  -L, --logical          logical walk, follow symbolic links<br>
 +
  -P, --physical          physical walk, do not follow symbolic links<br>
 +
      --restore=file      restore ACLs (inverse of `getfacl -R')<br>
 +
 
 +
I files per cui valgono delle ACL estese hanno un "+" in fondo alla stringa
 +
dei permessi. La maschera ACL predefinita è rw-. Concorre a formarla l'unione dei
 +
permessi degli utenti con nome e dei gruppi. I permessi effettivi sono quelli specificati
 +
dalla intersezione della maschera e i permessi dell'utente/gruppo. <br>
 +
 
 +
5) UTENTI e GRUPPI<br>
 +
Si possono vedere e modificare graficamente le proprie informazioni di account (finger
 +
information,ossia possiamo recuperare tali info attraverso "finger username") attraverso
 +
"userinfo" digitato da shell. E' possibile vedere l'utente(UID) che sta usando la shell
 +
con "whoami","who" mostra chi è loggato e "w" anche cosa sta facendo.
 +
L'interfaccia grafica per amministrare gli utenti in fedora è richiamabile da shell con
 +
system-config-users (da root).
 +
Ecco alcuni files importanti:<br>
 +
* /etc/gshadow --> info sicure sugli account di gruppo<br>
 +
* /etc/passwd --> info sugli account<br>
 +
* /etc/shadow --> info sicure sugli account;<br>
 +
* /etc/group --> info sui gruppi<br>
 +
* /etc/default/useradd --> info predefinite<br>
 +
* /etc/skel --> directory contenente files predefiniti;<br>
 +
 
 +
5.1)useradd<br>
 +
useradd [-c commento] [-d home_dir]<br>
 +
              [-e data_scadenza] [-f tempo_inattività]<br>
 +
              [-g gruppo_iniziale] [-G gruppo[,...]]<br>
 +
              [-m [-k dir_scheletro]] [ -o] [-p password]<br>
 +
              [-s shell] [-u uid] login<br>
 +
 
 +
      useradd -D [-ggruppo_predefinito] [-bhome_predefinita]<br>
 +
              [-e data_scadenza_predefinita] [-f inattività_predefinita]<br>
 +
              [-s shell_predefinita]<br>
 +
 
 +
es:    [root@localhost etc]# useradd francina<br>
 +
[root@localhost etc]# passwd francina<br>
 +
Changing password for user francina.<br>
 +
New UNIX password:<br>
 +
BAD PASSWORD: it is based on a dictionary word<br>
 +
Retype new UNIX password:<br>
 +
Sorry, passwords do not match.<br>
 +
New UNIX password:<br>
 +
BAD PASSWORD: it is too short<br>
 +
Retype new UNIX password:<br>
 +
passwd: all authentication tokens updated successfully.<br>
 +
 
 +
Da notare che il sistema ci avvisa se scegliamo password deboli. In questo caso abbiamo
 +
scelto "troll".<br>
 +
 
 +
5.2)userdel<br>
 +
Cancella un account.<br>
 +
Es. userdel -r foobar  <br>
 +
Cancella anche la home e relativi files.<br>
 +
 
 +
5.3) usermod<br>
 +
Modifica un account esistente.<br>
 +
usermod [-c commento] [-d home_dir [-m]]<br>
 +
              [-e data_scadenza] [-f tempo_inattività]<br>
 +
              [-g gruppo_iniziale] [-G gruppo[,...]]<br>
 +
              [-l nome_login] [-p password]<br>
 +
              [-s shell] [-u uid [ -o]] [-L|-U] login<br>
 +
5.4) Allo stesso modo ci sono groupadd,groupdel e gropumod.<br>
 +
 
 +
5.5)chfn<br>
 +
Cambia le proprie finger information.<br>
 +
chfn  [ -f nome_vero]  [ -o ufficio]  [ -p telefono_ufficio] [ -h telefono_casa] [ -u ] [ -v ] [ nome_utente]<br>
  
N.B.: sono stati asseganti degli esercizi in classe,che non sono stati eseguiti per mancanza di tempo;
+
5.6) ROOT: su e sudo<br>
 +
In linux ci si logga solitamente come utenti con minori privilegi rispetto al superuser.
 +
Per alcune operazioni però si rendono necessari i privilegi amministrativi.
 +
"su" vi fa diventare utenti root a tutti gli effetti e disponete di tutti i privilegi su
 +
tutto. "sudo" permette di eseguire un eseguibile/file con i permessi amministrativi (o di altro
 +
utente) senza esser propriamente root. Inoltre può dare l'accesso solo ad alcune azioni,
 +
immettendo non la pass di root bensì la propria (o nessuna nel caso si sia configurato in
 +
tal maniera il file "sudoers").Il file /etc/sudoers definisce coloro che sono abilitati
 +
all'uso di sudo e cosa possono fare attraverso di esso.<br>
 +
 
 +
N.B.: sono stati asseganti degli esercizi in classe,che non sono stati eseguiti per mancanza di tempo;<br>
 +
 
 +
''Link esterni''
 +
* [http://www.suse.de/~agruen/acl/linux-acls/online/ ACL e permessi];
  
  
Riga 404: Riga 560:
 
* Abbiamo usato il tool [http://en.wikipedia.org/wiki/John_the_Ripper ''John the Ripper''],usato per craccare le password di sistema degli utenti;scaricabile da [http://www.openwall.com/john/ qui]
 
* Abbiamo usato il tool [http://en.wikipedia.org/wiki/John_the_Ripper ''John the Ripper''],usato per craccare le password di sistema degli utenti;scaricabile da [http://www.openwall.com/john/ qui]
 
* sono [http://security.dico.unimi.it/sicurezza0506/#syllabus on-line] le slides della teoria spiegata e gli esercizi relativi;
 
* sono [http://security.dico.unimi.it/sicurezza0506/#syllabus on-line] le slides della teoria spiegata e gli esercizi relativi;
 +
 +
'''John The Ripper'''<br>
 +
E' un password cracker con lo scopo primario di identificare password deboli. <br>
 +
Installazione:<br>
 +
1) scaricare l'archivio a http://www.openwall.com<br>
 +
2) [orion@localhost john]$ tar zxf john-1.7.0.2.tar.gz<br>
 +
3) [orion@localhost john]$ cd john-1.7.0.2/src<br>
 +
4) [orion@localhost src]$ make <br>
 +
5) trovare nel listato il proprio sistema. Nel mio caso sto usando Fedora 5
 +
su sistema x86 a 32 bit. Scelgo "linux-x86-any";<br>
 +
6) [orion@localhost src]$ make clean linux-x86-any  (premere invio)<br>
 +
7) Se la compilazione va a buon fine,ci rechiamo nella directory dell'eseguibile
 +
e attiviamo i test di benchmarking:<br>
 +
[orion@localhost src]$ cd ..<br>
 +
[orion@localhost john-1.7.0.2]$ ls<br>
 +
doc  README  run  src<br>
 +
[orion@localhost john-1.7.0.2]$ cd run<br>
 +
[orion@localhost run]$ john --test<br>
 +
8) Possiamo editare il file john.conf per modificare alcune opzioni:<br>
 +
 +
* Wordlist = FILENAME<br>
 +
 +
Specifica una lista di password di default nel caso non specifichiamo il metodo di craccaggio nè
 +
una lista di passowrd. Il file di default è "$JOHN/password.lst"<br>
 +
 +
* Idle = Y|N<br>
 +
 +
"Y" (yes): cosuma meno risorse di sistema ma meno efficace nel craccaggio;<br>
 +
"N" (no),: opzione di default;<br>
 +
 +
* Save = SECONDS<br>
 +
 +
Ogni quanti secondi viene fatto un backup in caso di crash. Default: 600 secondi (10 minuti).<br>
 +
 +
Beep = Y|N<br>
 +
 +
"Y" (yes): John emette un suono quando trova una pass (bell character ASCII code 7) <br>
 +
"N" (no): default.<br>
 +
 +
MODALITA'<br>
 +
----
 +
********* "Incremental" mode parameters. ***************<br>
 +
 +
Per definirli creare una sezione [Incremental:MODE], con MODE come modalità (ce ne sono di predefiniti).<br>
 +
Parametri supportati:<br>
 +
 +
File = FILENAME<br>
 +
 +
Specifica il charset file name (nessuno di default).<br>
 +
 +
MinLen = LENGTH<br>
 +
 +
Lunghezza minima della pass da provare(default 0).<br>
 +
 +
MaxLen = LENGTH<br>
 +
 +
Lunghezza massima della pass da provare(default 8).<br>
 +
 +
CharCount = COUNT<br>
 +
 +
Per limitare il numero di caratteri differenti usati. Questo può far si che john
 +
tenti password più semplici a discapito di quelle più complesse,anche per le pass
 +
+ corte.  Di default si usano quanti più caratteri differenti si può usare.<br>
 +
 +
Extra = CHARACTERS<br>
 +
 +
Per fargli provare caratteri che non appaiono nei charset files.<br>
 +
 +
********* EXTERNAL CRACKING MODALITY *****************************<br>
 +
Per definirli creare una sezione [List.External:MODE], con MODE come modalità (ce ne sono di predefiniti).
 +
Dovrebbero venire definite delle funzioni in un subset del linguaggio C,che verranno compilate ed eseguite
 +
quando richiamate da linea di comando. Ci sono delle funzioni predefinite. <br>
 +
 +
6.1) Modalità di craccaggio<br>
 +
 +
* Wordlist mode: sfrutta un file contenente una lista di passowrd papabili. Si possono usare
 +
le mangling rules per effettuare delle variazioni alle parole (se ho nella lista "quadro" può
 +
provare "Quadro" o "QuaDro"). John non ordina le parole da sè nell'attività di craccaggio e
 +
sarebbe meglio ordinarle alfabeticamente rimuovendo le linee bianche. Questo migliora la performance.
 +
Questo apporta anche vantaggi nel trattare stringhe consecutive i cui primi 8 caratteri siano uguali
 +
(per la traditional DES-based crypt(3)) e john non tenta la pass due volte.<br>
 +
Sorting: tr A-Z a-z < SOURCE | sort -u > TARGET
 +
* "Single crack" mode: prova i nomi di login,il nome di completo e i nomi delle home degli utenti.<br>
 +
* "Incremental" mode.: prova tutte le combo possibili come password. Si presuppone abbia termine se
 +
si usa una lunghezza massima delle password ridotta oppure se si usa un charset ridotto (solo lettere
 +
per esempio). Si deve specificare il limite delle password da trovare e un charset.<br>
 +
* "external mode": metodo di craccaggio definito dall'utente;<br>
 +
 +
6.2) Regole<br>
 +
 +
Rule reject flags.<br>
 +
 +
-c      reject this rule unless current hash type is case-sensitive<br>
 +
-8      reject this rule unless current hash type uses 8-bit characters<br>
 +
-s      reject this rule unless some passwords were split at loading<br>
 +
 +
Character classes.<br>
 +
 +
??      matches "?"<br>
 +
?v      matches vowels: "aeiouAEIOU"<br>
 +
?c      matches consonants: "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"<br>
 +
?w      matches whitespace: space and horizontal tabulation characters<br>
 +
?p      matches punctuation: ".,:;'?!`" and the double quote character<br>
 +
?s      matches symbols "$%^&*()-_+=|\<>[]{}#@/~"<br>
 +
?l      matches lowercase letters [a-z]<br>
 +
?u      matches uppercase letters [A-Z]<br>
 +
?d      matches digits [0-9]<br>
 +
?a      matches letters [a-zA-Z]<br>
 +
?x      matches letters and digits [a-zA-Z0-9]<br>
 +
 +
The complement of a class can be specified by uppercasing its name.  For
 +
example, "?D" matches everything but digits.<br>
 +
 +
Simple commands.<br>
 +
 +
:      no-op: do nothing to the input word<br>
 +
l      convert to lowercase<br>
 +
u      convert to uppercase<br>
 +
c      capitalize<br>
 +
C      lowercase the first character, and uppercase the rest<br>
 +
t      toggle case of all characters in the word<br>
 +
TN      toggle case of the character in position N<br>
 +
r      reverse: "Fred" -> "derF"<br>
 +
d      duplicate: "Fred" -> "FredFred"<br>
 +
f      reflect: "Fred" -> "FredderF"<br>
 +
{      rotate the word left: "jsmith" -> "smithj"<br>
 +
}      rotate the word right: "smithj" -> "jsmith"<br>
 +
$X      append character X to the word<br>
 +
^X      prefix the word with character X<br>
 +
 +
Length control commands.<br>
 +
 +
<N      reject the word unless it is less than N characters long<br>
 +
>N      reject the word unless it is greater than N characters long<br>
 +
'N      truncate the word at length N<br>
 +
 +
 +
        English grammar commands.<br>
 +
 +
p      pluralize: "crack" -> "cracks", etc. (lowercase only)<br>
 +
P      "crack" -> "cracked", etc. (lowercase only)<br>
 +
I      "crack" -> "cracking", etc. (lowercase only)<br>
 +
 +
 +
        Insert/delete commands.<br>
 +
 +
[      delete the first character<br>
 +
]      delete the last character<br>
 +
DN      delete the character in position N<br>
 +
xNM    extract substring from position N for up to M characters<br>
 +
iNX    insert character X in position N and shift the rest right<br>
 +
oNX    overstrike character in position N with character X<br>
 +
 +
Note that square brackets ("[" and "]") are special characters to the
 +
preprocessor: you should escape them with a backslash ("\") if using
 +
these commands.<br>
 +
 +
 +
        Charset conversion commands.<br>
 +
 +
S      shift case: "Crack96" -> "cRACK(^"<br>
 +
V      lowercase vowels, uppercase consonants: "Crack96" -> "CRaCK96"<br>
 +
R      shift each character right, by keyboard: "Crack96" -> "Vtsvl07"<br>
 +
L      shift each character left, by keyboard: "Crack96" -> "Xeaxj85"<br>
 +
 +
 +
        Memory access commands.<br>
 +
 +
M      memorize the word<br>
 +
Q      reject the word unless it has changed<br>
 +
 +
 +
        Character class commands.<br>
 +
 +
sXY    replace all characters X in the word with Y<br>
 +
s?CY    replace all characters of class C in the word with Y<br>
 +
@X      purge all characters X from the word<br>
 +
@?C    purge all characters of class C from the word<br>
 +
!X      reject the word if it contains character X<br>
 +
!?C    reject the word if it contains a character in class C<br>
 +
/X      reject the word unless it contains character X<br>
 +
/?C    reject the word unless it contains a character in class C<br>
 +
=NX    reject the word unless character in position N is equal to X<br>
 +
=N?C    reject the word unless character in position N is in class C<br>
 +
(X      reject the word unless its first character is X<br>
 +
(?C    reject the word unless its first character is in class C<br>
 +
)X      reject the word unless its last character is X<br>
 +
)?C    reject the word unless its last character is in class C<br>
 +
%NX    reject the word unless it contains at least N instances of X<br>
 +
%N?C    reject the word unless it contains at least N characters of class C<br>
 +
 +
 +
        Extra "single crack" mode commands.<br>
 +
 +
When defining "single crack" mode rules, extra commands are available
 +
for word pairs support, to control if other commands are applied to the
 +
first, the second, or to both words:<br>
 +
 +
1      first word only<br>
 +
2      second word only<br>
 +
+      the concatenation of both (should only be used after a "1" or "2")<br>
 +
 +
6.3) John nei sistemi con shadow password ed esempi vari<br>
 +
 +
Su Fedora 5 sembra che l'eseguibile authconfig (versione grafica authconfig-gtk) permetta
 +
la visualizzazione e scelta dell'uso degli algoritmi di cifratura e il supporto ad altre cose.<br>
 +
 +
[orion@localhost run]$ su<br>
 +
[orion@localhost run]$ umask 077<br>
 +
[root@localhost run]# unshadow /etc/passwd /etc/shadow > /home/orion/john/mypasswd<br>
 +
[root@localhost john]# ll<br>
 +
totale 816<br><nowiki>
 +
drwx------ 5 orion orion  4096 23 mar 15:07 john-1.7.0.2
 +
-rwxrwxr-x 1 orion orion 802354 21 set 09:49 john-1.7.0.2.tar.gz
 +
-rwxrwxr-x 1 orion orion    331 21 set 09:49 john-1.7.0.2.tar.gz.sign
 +
-rw------- 1 orion orion  2094 21 set 14:42 mypasswd</nowiki><br>
 +
 +
Una volta ottenuto il file con la fusione di /etc/passwd e /etc/shadow possiamo
 +
lavorarci sopra. Le password craccate saranno immagazzinate in un file denominato
 +
"john.pot" e visibili tramite "john --show --shells=-/etc/expired mypasswd". Con l'ultimo
 +
comando evitiamo di mostrarci nel report le password scadute.<br>
 +
* john --show --users=0 mypasswd  (mostra se la pass dell'utente con un certo ID - qui root -
 +
  è stata craccata;
 +
* john --show --groups=0,1 mypasswd  (vale per i gruppi privilegiati);
 +
* john --single mypasswd mypasswd2 .. (prova modalità single crack);
 +
* john --wordlist=password.lst --rules mypasswd  (modalità wordlist con mangling rules);
 +
* john --incremental mypasswd  (modalità incrementale);
 +
* john -i=alpha -u=501 mypasswd (usa la modalità incrementale sfruttando caratteri ASCII per craccare
 +
  la pass dell'utente con ID 501);
 +
* john --make-charset=custom.chr mypasswd  (sfrutta un charset personale);
 +
* mailer mypasswd  (invia un avvertimento agli utenti con pass deboli);
 +
* john -i=all -u=501 --session=CrackFra mypasswd (dà un nome alla sessione per craccare l'account dell'
 +
  utente con ID 501 sfruttando tutti i caratteri a disposizione);
 +
* john --restore=NomeSessione (riprende la sessione,utile per modalità incrementale);
 +
 +
Es pratico: Account francina,ID 501,pass scelta "troll":<br>
 +
 +
[orion@localhost run]$ john -i=all -u=501 --session=CrackFra mypasswd<br>
 +
                          ........<br>
 +
                          ........<br>
 +
troll            (francina)<br>
 +
guesses: 1  time: 0:00:20:24  c/s: 3916  trying: troll<br>
 +
 +
Dopo 20 minuti provando tutte le combinazioni con tutti i caratteri,siamo arrivati
 +
al craccaggio della password debole. Se avessimo scelto "alpha" come modalità,avremmo
 +
impiegato molto meno tempo.<br>
  
 
----
 
----
Riga 455: Riga 857:
 
* [http://www.badpenguin.org/docs/gnupg.html Usare GNU Privacy Guard-a cura di Antonio Gallo]
 
* [http://www.badpenguin.org/docs/gnupg.html Usare GNU Privacy Guard-a cura di Antonio Gallo]
 
* [http://enigmail.mozdev.org/gpgconf.html#obgpg Guida a GPG sul sito di Enigmail]
 
* [http://enigmail.mozdev.org/gpgconf.html#obgpg Guida a GPG sul sito di Enigmail]
 +
 +
'''GPG'''<br>
 +
GPG è una libera implementazione dello stadard OpenPGP e può esser scaricato da
 +
http://www.gnupg.org/. Che io sappia nei sistemi Linux è già a disposizione fin dall'
 +
installazione del sistema operativo di default. E' essenzialmente un programma a linea
 +
di comando ma esistono dei front-end grafici (desktop e per MUA),anche per altri sistemi
 +
operativi (vedere http://www.gnupg.org/related_software/frontends.html#gui).
 +
Il mio front-end grafico preferito per thunderbird è Enigmail.
 +
In GPG,che sfrutta la crittografia simmetrica e non solo,la chiave privata non va divulgata
 +
ed è protetta da una passphrase.<br>
 +
 +
7.1) Verificare l'autenticità di un file e listare le chiavi nel portafogli.<br>
 +
Per esempio verifichiamo l'autenticità di JohnTheRipper scaricato prima.<br>
 +
1) Scarichiamo la chiave pubblica da http://www.openwall.com/signatures/openwall-signatures.asc<br>
 +
2) <br>
 +
[orion@localhost john]$ ls<br>
 +
john-1.7.0.2  john-1.7.0.2.tar.gz  john-1.7.0.2.tar.gz.sign<br>
 +
[orion@localhost john]$ wget http://www.openwall.com/signatures/openwall-signatures.asc<br>
 +
--16:20:09--  http://www.openwall.com/signatures/openwall-signatures.asc<br>
 +
=> `openwall-signatures.asc'<br>
 +
Risoluzione di www.openwall.com in corso... 195.42.179.202<br>
 +
Connessione a www.openwall.com|195.42.179.202:80... connesso.<br>
 +
HTTP richiesta inviata, aspetto la risposta... 200 OK<br>
 +
Lunghezza: 2,893 (2.8K) [text/plain]<br>
 +
 +
<nowiki>100%[====================================>] 2,893        --.--K/s</nowiki><br>
 +
 +
16:20:10 (20.30 KB/s) - "openwall-signatures.asc" salvato [2893/2893]<br>
 +
 +
[orion@localhost john]$ ls<br>
 +
john-1.7.0.2        john-1.7.0.2.tar.gz.sign<br>
 +
john-1.7.0.2.tar.gz  openwall-signatures.asc<br>
 +
3) importiamola nel nostro portafogli:<br>
 +
gpg --import openwall-signatures.asc<br>
 +
gpg: key 295029F1: public key "Openwall Project <signatures@openwall.com>" imported<br>
 +
gpg: Numero totale esaminato: 1<br>
 +
gpg:              importate: 1  (RSA: 1)<br>
 +
gpg: non è stata trovata alcuna chiave definitivamente affidabile<br>
 +
4)Verifichiamo l'importazione:<br>
 +
[orion@localhost john]$ gpg --list-keys<br>
 +
/home/orion/.gnupg/pubring.gpg<br>
 +
<nowiki>------------------------------</nowiki><br>
 +
pub  1024D/C431416D 2002-10-22<br>
 +
uid                  JPackage Project (JPP Official Keys) <jpackage@zarb.org><br>
 +
sub  1024g/F3813DB7 2002-10-22<br>
 +
 +
pub  1024R/295029F1 1999-09-13<br>
 +
uid                  Openwall Project <signatures@openwall.com><br>
 +
5) Verifichiamo l'autenticità del file:<br>
 +
[orion@localhost john]$ gpg --verify john-1.7.0.2.tar.gz.sign<br>
 +
gpg: Signature made gio 23 mar 2006 15:23:17 CET using RSA key ID 295029F1<br>
 +
gpg: Good signature from "Openwall Project <signatures@openwall.com>"<br>
 +
gpg: ATTENZIONE: questa chiave non è certificata con una firma fidata!<br>
 +
gpg:          Non ci sono indicazioni che la firma appartenga al proprietario.<br>
 +
Impronta digitale della chiave primaria: 0C 29 43 AE 1E CD 24 EA  6E 0C B6 EE F5 84 25 69<br>
 +
 +
gpg ci dice che il file è stato firmato da Openwall Project in persona. Ci avvisa altresì
 +
che la chiave non è fidata. E' un avviso di default se non vengono specificati i gradi di fiducia
 +
per le chiavi nel nostro portafoglio.<br>
 +
 +
7.2) Esportazione di una chiave in formato ASCII<br>
 +
 +
[orion@localhost john]$ gpg --armor --output firmajohn.asc --export 295029F1<br>
 +
[orion@localhost john]$ ls<br>
 +
firmajohn.asc  john-1.7.0.2  john-1.7.0.2.tar.gz  john-1.7.0.2.tar.gz.sign<br>
 +
 +
7.3) Generazione e revoca delle chiavi.<br>
 +
 +
* gpg --gen-key  --> genera un nuovo paio di chiavi,seguiamo le istruzioni;<br>
 +
ES: otteniamo <br>
 +
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model<br>
 +
gpg: depth: 0  valid:  1  signed:  0  trust: 0-, 0q, 0n, 0m, 0f, 1u<br>
 +
pub  1024D/C38FA517 2006-09-21<br>
 +
Key fingerprint = E8D9 E321 6A82 2BA6 6F84  8663 E272 FFC9 C38F A517<br>
 +
uid                  Doppio Malto (/* no comment */) <dmalto@gmail.com><br>
 +
sub  2048g/50096B4F 2006-09-21<br>
 +
 +
* REVOCA:<br>
 +
 +
[orion@localhost john]$ gpg --output revocamalto.asc --gen-revoke C38FA517<br>
 +
 +
sec  1024D/C38FA517 2006-09-21 Doppio Malto (/* no comment */) <dmalto@gmail.com><br>
 +
 +
Create a revocation certificate for this key? (y/N) y<br>
 +
Per favore scegli il motivo della revoca:<br>
 +
0 = Nessuna ragione specificata<br>
 +
1 = Questa chiave è stata compromessa<br>
 +
2 = Questa chiave è stata sostituita<br>
 +
3 = La chiave non è più usata<br>
 +
Q = Cancella<br>
 +
(Probabilmente volevi scegliere 1)<br>
 +
Cosa hai deciso? 3<br>
 +
Inserisci una descrizione opzionale; terminala con una riga vuota:<br>
 +
> Mi sono rotto :)<br>
 +
><br>
 +
Motivo della revoca: La chiave non è più usata<br>
 +
Mi sono rotto :)<br>
 +
Is this okay? (y/N) y<br>
 +
 +
You need a passphrase to unlock the secret key for<br>
 +
user: "Doppio Malto (/* no comment */) <dmalto@gmail.com>"<br>
 +
1024-bit DSA key, ID C38FA517, created 2006-09-21<br>
 +
 +
Forzato l'output con armatura ASCII.<br>
 +
Creato un certificato di revoca.<br>
 +
 +
Per favore spostalo su un media che puoi nascondere; se l'uomo nel mezzo
 +
riuscirà ad accedere a questo certificato potrà usarlo per rendere
 +
inutilizzabile la tua chiave. È una buona idea stamparlo ed archiviarlo,
 +
nel caso il media diventasse illeggibile. Ma fai attenzione: il sistema di
 +
stampa della tua macchina potrebbe immagazzinare i dati e renderli disponibili
 +
ad altri!<br>
 +
[orion@localhost john]$ cat revocamalto.asc<br>
 +
<nowiki>-----BEGIN PGP PUBLIC KEY BLOCK-----</nowiki><br>
 +
Version: GnuPG v1.4.5 (GNU/Linux)<br>
 +
Comment: A revocation certificate should follow<br>
 +
 +
iFkEIBECABkFAkUSpbASHQNNaSBzb25vIHJvdHRvIDopAAoJEOJy/8nDj6UXfmQA<br>
 +
nRHGwNMOj1j0L54rkLsmeb8zUvRYAKCs4XBt26vj55OCU1UdnQDti89YUQ==<br>
 +
=1toC<br>
 +
<nowiki>-----END PGP PUBLIC KEY BLOCK-----</nowiki>
 +
 +
Il certificato di revoca va fatto subito così se si perde la passphrase oppure
 +
non si desidera più utilizzare la chiave può essere pubblicato per comunicare che
 +
la chiave non verrà più usata. Ad ogni modo è possibile ancora usarla per firmare e decrittare
 +
i messaggi del passato. Il certificato può essere importato per vedere che appartenga veramente
 +
alla chiave che ci si aspetta.<br>
 +
 +
7.4)FIngerprinting e firma delle chiavi<br>
 +
 +
Facciamo il fingerprinting della "nostra" (Doppio Malto):<br>
 +
 +
gpg --edit-key C38FA517<br>
 +
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.<br>
 +
This program comes with ABSOLUTELY NO WARRANTY.<br>
 +
This is free software, and you are welcome to redistribute it<br>
 +
under certain conditions. See the file COPYING for details.<br>
 +
 +
È disponibile una chiave segreta.<br>
 +
 +
pub  1024D/C38FA517  created: 2006-09-21  expires: mai        usage: SC<br>
 +
trust: ultimate      validity: ultimate<br>
 +
sub  2048g/50096B4F  created: 2006-09-21  expires: mai        usage: E<br>
 +
[ultimate] (1). Doppio Malto (/* no comment */) <dmalto@gmail.com><br>
 +
 +
Comando> help<br>
 +
quit        abbandona questo menù<br>
 +
save        salva ed esci<br>
 +
help        mostra questo aiuto<br>
 +
fpr        show key fingerprint<br>
 +
list        elenca le chiavi e gli user ID<br>
 +
uid        scegli l'user ID N<br>
 +
key        select subkey N<br>
 +
check      check signatures<br>
 +
sign        sign selected user IDs [* see below for related commands]<br>
 +
lsign      sign selected user IDs locally<br>
 +
tsign      sign selected user IDs with a trust signature<br>
 +
nrsign      sign selected user IDs with a non-revocable signature<br>
 +
adduid      aggiungi un user ID<br>
 +
addphoto    aggiungi un ID fotografico<br>
 +
deluid      delete selected user IDs<br>
 +
addkey      add a subkey<br>
 +
addcardkey  add a key to a smartcard<br>
 +
keytocard  move a key to a smartcard<br>
 +
bkuptocard  move a backup key to a smartcard<br>
 +
delkey      delete selected subkeys<br>
 +
addrevoker  aggiungi una chiave di revoca<br>
 +
delsig      delete signatures from the selected user IDs<br>
 +
expire      change the expiration date for the key or selected subkeys<br>
 +
primary    flag the selected user ID as primary<br>
 +
toggle      toggle between the secret and public key listings<br>
 +
pref        elenca le preferenze (per esperti)<br>
 +
showpref    elenca le preferenze (prolisso)<br>
 +
setpref    set preference list for the selected user IDs<br>
 +
keyserver  set the preferred keyserver URL for the selected user IDs<br>
 +
notation    set a notation for the selected user IDs<br>
 +
passwd      cambia la passphrase<br>
 +
trust      cambia il valore di fiducia<br>
 +
revsig      revoke signatures on the selected user IDs<br>
 +
revuid      revoke selected user IDs<br>
 +
revkey      revoke key or selected subkeys<br>
 +
enable      enable key<br>
 +
disable    disable key<br>
 +
showphoto  show selected photo IDs<br>
 +
clean      compact unusable user IDs and remove unusable signatures from key<br>
 +
minimize    compact unusable user IDs and remove all signatures from key<br>
 +
 +
* The `sign' command may be prefixed with an `l' for local signatures (lsign),
 +
a `t' for trust signatures (tsign), an `nr' for non-revocable signatures
 +
(nrsign), or any combination thereof (ltsign, tnrsign, etc.).<br>
 +
 +
Comando> fpr<br>
 +
pub  1024D/C38FA517 2006-09-21 Doppio Malto (/* no comment */) <dmalto@gmail.com><br>
 +
Impronta digitale della chiave primaria: E8D9 E321 6A82 2BA6 6F84  8663 E272 FFC9 C38F A517<br>
 +
 +
Questa impronta è da annotare e pubblicare.<br>
 +
 +
Comando> sign<br>
 +
 +
pub  1024R/295029F1  created: 1999-09-13  expires: mai        usage: SCEA<br>
 +
trust: sconosciuto  validity: sconosciuto<br>
 +
Impronta digitale della chiave primaria: 0C 29 43 AE 1E CD 24 EA  6E 0C B6 EE F5 84 25 69<br>
 +
 +
Openwall Project <signatures@openwall.com><br>
 +
 +
Are you sure that you want to sign this key with your<br>
 +
key "Doppio Malto (/* no comment */) <dmalto@gmail.com>" (C38FA517)<br>
 +
 +
Really sign? (y/N) y<br>
 +
 +
Comando> check<br>
 +
uid  Openwall Project <signatures@openwall.com><br>
 +
sig!        295029F1 1999-09-13  [autofirma]<br>
 +
sig!        C38FA517 2006-09-21  Doppio Malto (/* no comment */) <dmalto@gmail.<br>
 +
 +
7.5) CIFRARE/DECIFRARE<br>
 +
 +
Vogliamo dire ciao ad Open Wall<br>
 +
 +
[orion@localhost john]$ vi ciao<br>
 +
[orion@localhost john]$ cat ciao<br>
 +
Ciao :)<br>
 +
[orion@localhost john]$ gpg --output ciao.gpg --recipient Openwall --encrypt ciao<br>
 +
[orion@localhost john]$ ls<br>
 +
ciao      firmajohn.asc  john-1.7.0.2.tar.gz      revocamalto.asc<br>
 +
ciao.gpg  john-1.7.0.2  john-1.7.0.2.tar.gz.sign<br>
 +
 +
Open Wall farà gpg --output ciao --decrypt ciao.gpg<br>
 +
 +
7.6)FIRMARE<br>
 +
 +
[orion@localhost john]$ gpg --clearsign ciao<br>
 +
 +
You need a passphrase to unlock the secret key for<br>
 +
user: "Doppio Malto (/* no comment */) <dmalto@gmail.com>"<br>
 +
1024-bit DSA key, ID C38FA517, created 2006-09-21<br>
 +
[orion@localhost john]$ cat ciao.asc<br>
 +
<nowiki>-----BEGIN PGP SIGNED MESSAGE-----</nowiki><br>
 +
Hash: SHA1<br>
 +
 +
Ciao :)<br>
 +
<nowiki>-----BEGIN PGP SIGNATURE-----</nowiki><br>
 +
Version: GnuPG v1.4.5 (GNU/Linux)<br>
 +
 +
iD8DBQFFEral4nL/ycOPpRcRAnJSAJ0Qulhr/o9bdU8ozSSJIORWiRvRzgCfasmb<br>
 +
3LY7gpvzmNiZ1WYdLurRmfw=<br>
 +
=XrKp<br>
 +
<nowiki>-----END PGP SIGNATURE-----</nowiki>
 +
 +
L'opzione clearsign firma e fa rimanere leggibile un documento.
 +
L'opzione --sign firma e comprime il documento ma non è leggibile.
 +
Con --detach-sig rendiamo la firma allegabile:<br>
 +
 +
[orion@localhost john]$ gpg --armor --output ciao.sig --detach-sig ciao<br>
 +
 +
You need a passphrase to unlock the secret key for<br>
 +
user: "Doppio Malto (/* no comment */) <dmalto@gmail.com>"<br>
 +
1024-bit DSA key, ID C38FA517, created 2006-09-21<br>
 +
 +
[orion@localhost john]$ ls<br>
 +
ciao      firmajohn.asc  john-1.7.0.2.tar.gz      revocamalto.asc<br>
 +
ciao.sig  john-1.7.0.2  john-1.7.0.2.tar.gz.sign<br>
 +
[orion@localhost john]$ cat ciao.sig<br>
 +
<nowiki>-----BEGIN PGP SIGNATURE-----</nowiki>
 +
Version: GnuPG v1.4.5 (GNU/Linux)<br>
 +
 +
iD8DBQBFEref4nL/ycOPpRcRAiNEAJ4khMO5rDzA5tDalpWJobyb0/HP+ACgiwhe<br>
 +
ifOP3dpcN8Lx4QIMFNYAtvM=<br>
 +
=POT3<br>
 +
<nowiki>-----END PGP SIGNATURE-----</nowiki>
 +
[orion@localhost john]$<br>         
 +
 +
7.7) Spedire le chiavi<br>
 +
 +
gpg --keyserver nomeServer --send-key UIDchiave<br>
 +
 
----
 
----
  

Versione attuale delle 06:03, 16 giu 2009


Sicurezza, anno 2005/2006

Sicurezza è un corso complementare per la laurea in comunicazione digitale e altri corsi di laurea.

Docenti

Danilo Bruschi e-mail: <bruschi [at] dico [dot] unimi [it]>

Orari delle lezioni

Lunedì Mercoledì
17:30-19:30 Aula Alfa 17:30-19:30 Aula Sigma

Le lezioni del lunedì tratteranno la parte teorica del corso e saranno tenute dal prof. Bruschi,mentre le lezioni del mercoledi` tratteranno la parte pratica del corso e saranno tenute dai dott. Cavallaro e Lanzi

Orario di ricevimento dei docenti

Ricevimento su appuntamento:

  • Prof. Bruschi <bruschi [at] dico [dot] unimi [dot] it>
  • Dott. Lanzi <andrew [at] security [dot] dico [dot] unimi [dot] it>
  • Dott. Cavallaro <sullivan [at] security [dot] dico [dot] unimi [dot] it>

Sito del corso

Se andate qui trovate il programma del corso (vedi PDF),le modalità d'esame e quant'altro di necessario.

Materiale didattico

  • Primo libro:
    • Titolo: "Firewall e sicurezza di rete",II Edizione
    • Autori: W.Cheswick,S.Bellouin,A.Rubin
    • Casa Editrice: Addison Wesley
    • Prezzo: 32 €
  • Secondo libro:
    • Titolo: "Computer Security"
    • Autore: D.Gollmann
    • Casa editrice: J.Wiley
    • Lingua: solo inglese
    • prezzo: 50 € scontato, alla CLUED,settore didattico JoY§TiCk

In più ci sarà alro materiale sparso,presentato a lezione. Vi terremo aggiornati ;). Ad ogni modo il prof ribadisce che il primo libro(quello in italiano)tratterà il 70% delle lezioni e che i lrestante 30% deriverà dal secondo e da altro materiale. Non verranno presentate slides alle lezioni di teoria del lunedì,nè messe a disposizione sul sito. Per quanto riguarda le lezioni di pratica invece ci saranno delle slides pubblicate sul sito.

Modalità d'esame

Si raccomandano come prerequisiti l'aver frequentato il corso di Reti di calcolatori e Sistemi Operativi,ma l'aver verbalizzato il voto o l'averli seguiti non è vincolante in alcun modo per seguire e sostenere il corso e l'esame. Si raccomanda inoltre di poter lavorare su Linux,in quanto la pratica verterà su questo sistema operativo. L'esame consiste di due modalità:

  • SCRITTO: domande a risposta aperta;
  • PRATICA: implementazioni varie su Linux;

Per le ultime notizie consultare questa lezione.


N.B.: La quasi totalità dei link a pagine esterne al wikiDsy sono stati inseriti dal sottoscritto e NON dal professore. Questo per far si di integrare meglio quanto spiegato a lezione con il vasto materiale disponibile in rete.

Editaggio a cura di: Voodoo 19:03, Mar 3, 2006 (CET)

Diario del corso

Lezione di Lunedì 3-10-05

Argomenti trattati nella lezione di oggi:

  • Cosa vuol dire fare sicurezza: prevenire azioni non autorizzate che posson provocare conseguenze spiacevoli,nel nostro caso ciò si applica ai sistemi informativi e alla loro prevenzione;
  • Distinzione tra SECURITY e SAFETY;
  • Perchè esiste la sicurezza;
  • Peculiarità in campo di sicurezza:
    1. Non esiste alcun sistema sicuro;
    2. La sicurezza costa in termini di:
      1. soldi;
      2. tempo;
      3. privacy;
      4. flessibilità del sistema;
  • l'importanza di saper fare delle scelte,valutare elementi critici in un sistema e dare dalle priorità ad essi. In pratica la politica di gestione degli elementi da difendere;
  • Quindi si vede la fase si ANALISI del rischio e la GESTIONE dello stesso,svolta dal management aziendale;
  • I beni desiderabili(ASSET)da parte degli attaccanti:
    1. informazioni,dati memorizzati;
    2. servizi erogati dalla macchina e loro uso;
    3. la protezione dei precedenti implica la protezione delle persone che stanno dietro ad essi;
  • Chi fa sicurezza deve garantire che un sistema goda di:
    1. confidenzialità;
    2. integrità;
    3. disponibilità;

Al termine della lezione è stata trattata a grandi linee la nascita e l'evoluzione della sicurezza in campo informatico,ricordando una data storica,2 novembre 1988,per via di un crash di un numero ingente di macchine negli USA nel giro di poco tempo,causato da un programma(una tipologia che verrà chiamata WORM)scritto da R.J.Morris.
Alcuni link d'interesse che trattano la storia:

http://snowplow.org/tom/worm/worm.html

http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-it-4/ch-sgs-ov.html


Lezione di Mercoledì 5-10-05

  • Introduzione del corso;
  • Installazione di Debian tramite VMWare;

Vedere qui per scaricare la versione di prova; altri emulatori utilizzabili sono Qemu e Bochs


Lezione di Lunedì 10-10-05

Introduzione alla crittografia

La crittografia è un valido sostegno al mantenimento della confidenzialità delle informazioni;

  • attori della scenografia crittografica:
    • mittente;
    • destinatario;
    • intruso (man in the middle);
  • definizione di operazioni di cifratura e decifratura;
  • Esempi di codici crittografici storici:
    • codice di cesare: qui potete leggere in breve come si comporta questo codice e quiun esempio di crittanalisi che sfrutta le ricorrenze dei caratteri;
    • Aenigma: codice trattato esaurientemente in wikipedia. Qui si possono trovare anke simulatori della macchina aenigma
  • Protocolli a chiave pubblica o asimmetrica:
    • il primo è pubblicato agli inizi degli anni 80;
    • presenza di due chiavi;
    • sfruttano proprietà dei numeri primi e campi aritmetici modulari;
    • il protocollo Diffie-Hellman è usato per l oscambio delle chiavi pubbliche;
    • La chiave pubblica è a disposizione di tutti e viene usata per cifrare i messaggi,i quali verranno decifrati con la chiave privata del destinatario;
    • notevole lentezza nel calcolo degli algoritmi(può richiedere ore per grossi documenti);
    • notevole sicurezza dei dati e ottima gestione delle chiavi;
  • Protocolli a chiave privata o simmetrica:
    • algoritmi efficienti e veloci
    • le trasformazioni sono effettuate anche in hardware,un ulteriore livello per renderle più efficaci;
    • utilizzano operazioni di "or","shift" e permutazioni;
    • buon livello di sicurezza anche con chiavi contenute;
    • gestione delle chiavi critica,poichè mittente e destinatario utilizzano la stessa chiave(segreta),con la scomoda necessità di comunicarla per esser nota da ambo le parti;
    • il più usato è il DES(molto usato per le transazioni bancarie);
    • visti i limiti del DES,vengono sviluppati AES e Triple DES;
    • Sia AES sia DES lavorano con una codifica denominata ECB,anche se non è molto sicura per testi lunghi,dove è meglio impiegare la CBC;

Altri spunti quie il libro on-line Kriptonite anche scaricabile in formato PDF compresso in uno zip
Altro approfondimento: qui


Lezione di Mercoledì 12-10-05

Ripasso in veloce carrellata dei permessi classici in Linux: 1)Directories

  • ls: l'opzione --color colora i files (dir sono blu). ls -l

mi fa vedere i permessi per la dir;

  • pwd : ci dice full path per directory corrente;
  • cd path : mi sposto nella directories. Se faccio cd ~ mi sposta

direttamente nella home;

la dir "." è la dir corrente;".." è la parent dir;

  • mkdir : crea cartella;
  • rmdir: cancella cartella vuota;
  • rm -r: cancella dir e files all'interno;

2)Permessi

Sequenza di 9 caratteri che indicano i permessi di lettura ("r"), scrittura("w") e esecuzione ("x"). Se al loro posto c'è un trattino, significa che il permesso è negato. I primi tre caratteri appartengono all'owner,gli altri tre al gruppo e gli ultimi al resto del mondo.

-rwx rwx rwx  --> permessi per files
drwx rwx rwx  --> permessi per directory
brwx rwx rwx  --> permessi per block device
crwx rwx rwx  --> permessi per character device

Per le directories i permessi di lettura significa che posso vederne il contenuto, di scrittura che posso aggiungere/rimuovere files e di esecuzione che posso attraversare la directory,renderla la dir corrente o aprire files.Le directories Sticky non consentono la modifica dei files a nessuno ad eccezione dell'owner.

Esempio:
-rw-r--r-- 1 dieter staff 1617 Oct 28 11:01 adrmp.tex
La stringa sopra specifica i permessi per il file adrmp.tex. L'owner può leggere e scrivere sul file mentre gli altri solo leggerlo. Il numero 1 si riferisce ai puntatori al file,"dieter" è l'owner e "staff" rappresenta il gruppo di appartenenza. "1617" è la grandezza in bytes,segue la data di ultima modifica ("mtime",si differenzia da "atime" - ultimo accesso,visibile con ls -lu - e da "itime" - ultima modifica all'inode,visibile con ls -lc). Struttura inode:

  • mode : tipo file,diritti d'accesso;
  • uid: id owner;
  • gid: id gruppo;
  • atime,mtime,itime;
  • block count: dimensione file;
  • locazione fisica;

Se un programma è SUID (associa all'eseguibile in esecuzione i permessi del propietario ) l'execute permission dell'owner è "s",se SGID (per i gruppi) associa all'eseguibile in esecuzione i permessi del gruppo di appartenenza.
Es: -rws rwx rwx --> permessi per SUID
Es: -rwx rws rwx --> permessi per SGID

-2.1) Comandi -

2.1.1)UMASK
I permessi di default per un utente vengono definiti dalla sua maschera. La maschera è impostabile tramite umask. La umask è un ottale da 4 cifre che specifica i diritti che non vengono attribuiti. Si deve ricordare i valori dei permessi:
- r: 4 w: 2 x: 1
- rw: 6 rx: 5 rwx: 7 (la loro somma definisce il numero).
Es: umask 0777 vieta ogni accesso al file (corrisponde a ----------);
umask 0022 tutti i permessi all'owner,"rx" per gruppo e altri.
Se si digita umask senza specificare nulla possiamo vedere la nostra maschera.
Es:

[orion@christian ~]$ umask
0002
Vuol dire che i file che creo avranno di default questi permessi:
Es: drwxrwxr-x 2 orion orion 4096 19 set 17:48 Ciao (directories)
Es: -rw-rw-r-- 1 orion orion 0 19 set 20:05 prova (files)

Per i files vale quest'operazione: 0666 & 0002 = 0664 = rw-rw-r--
Da qui i valori visti nell'esempio,perchè i permessi effettivamente assegnati
al nuovo file sono determinati come il risultato di mode & ~umask.

2.1.2)chattr
chattr permette di cambiare gli attributi di un file su file system ext2/ext3. chattr -RV -Sacdisu nomefile. Si può impostare gli attributi anche con gli operatori +(aggiunge gli attr. a quelli esistenti),-(sottrae a quelli già esistenti) e = (rende gli attributi come ciò che è indicato alla destra dell'uguale).

  • -R li cambia ricorsivamente per tutti i file nella directory;
  • -V evidenzia i cambiamenti;
  • -S: scrive i cambiamenti in modo sincrono su disco;
  • -a: scrive i dati in modalità append;
  • -c: compressione e decompressione dei file eseguita dal kernel;
  • -d: il file non è candidato al backup al lancio di dump;
  • -i: immodificabile,non è possibile neppure linkarlo (solo root);
  • -s: cancellazione con sovrascrittura del file;
  • -u: il file una volta cancellato è memorizzato,potendo così recuperarlo;

2.1.3)lsattr
Mostra gli attributi di un file.
lsattr [ -Radv ] [ file... ]

  • -R: mostra ricorsivamente gli attributi delle directory e del loro contenuto.
  • -a: mostra tutti i file nelle directory,compresi quelli che iniziamo con ‘.’.
  • -d: mostra le directory come gli altri file, piuttosto che mostrare il loro contenuto.
  • -v: mostra la versione dei file.

Esempio uso combo chattr+lsattr:

[orion@christian ~]$ chattr =Ss prova
[orion@christian ~]$ lsattr
-------------./My Skype Pictures
s-S---------- ./prova</nowiki>

2.1.4)chown
Cambia l’utente e il gruppo proprietari dei file.
chown [-cfhvR] utente[:gruppo] file...
utente e gruppo possono esser nomi o rispettivi ID.

  • -R: cambia ricorsivamente la proprietà delle directory e dei file

contenuti (e continua anche se ci sono degli errori).

  • -c(--changes): descrive in dettaglio ogni modifica fatta alla proprietà di un

file.

  • -f(--silent, --quiet): non mostra messaggi d’errore sui file la cui proprietà non può

essere cambiata.

  • -h(--no-dereference): modifica gli stessi link simbolici invece dei file a cui si

riferiscono. È disponibile solo se la chiamata di sistema lchown è presente.

  • -v(--verbose): descrive in dettaglio le azioni intraprese (o meno) per ogni

file.

Es: chown -R --from=root andrew miadir (cambia ricorsivamente l'owner a andrew di tutti i files appartenenti a root nella directory mia dir).

2.1.5)chgrp
Cambia il gruppo proprietario dei file.
chgrp [-cfvR] gruppo file...
le opzioni hanno lo stesso significato di quelle di chown.

2.1.6)chmod
Cambia i permessi di accesso di un file.
chmod [-cfvR] [ugoa...][+-=][rwxXstugo...] file

  • u: owner g: gruppo o: altri a: tutti (ugo)
  • r: leggibile w: scrivibile x: eseguibile
  • X: eseguibile solo se il file è una directory o è già eseguibile

per alcuni utenti;

  • s: imposta l’user o group ID sull’esecuzione (SGID/SUID);
  • t: sticky bit,se impostato per una directory, significa che solo il

proprietario del file o della directory può rimuovere il file dalla detta directory(vedi dir "tmp");

  • u: imposta stessi permessi del propietario;
  • g: " " " del gruppo;
  • o: " " " degli altri;

I permessi possono essere espressi anche con un ottale a quattro cifre (se uso meno cifre,le restanti vengono considerate zeri). Esempi:

0001 --> ---------x
0402 --> -r------w-
0664 --> -rw-rw-r--
0010 --> ------x---
0020 --> -----w----
1000 --> sticky bit
2000 --> SGID su esecuzione
4000 --> SUID su esecuzione

Es:
[orion@christian ~]$ touch ciao
[orion@christian ~]$ ll|grep ciao
-rw-rw-r-- 1 orion orion 0 19 set 21:32 ciao
[orion@christian ~]$ chmod 1066 ciao
[orion@christian ~]$ ll|grep ciao
----rw-rwT 1 orion orion 0 19 set 21:32 ciao

3)IDENTIFICAZIONE E AUTENTICAZIONE UTENTI: USER NAMES e PASSWORD
3.1)I files delle password e degli utenti

Il file /etc/passwd è il database degli utenti su ogni sistema Unix. Ad ogni user è dedicata una riga che definisce quali sono i suoi principali attributi. Sui sistemi Unix meno recenti in questo file viene scritta anche la password (criptata), su quelli più recenti viene scritta, generalmente, in /etc/shadow, che ha maggiori restrizioni in termini di sicurezza (in /etc/passwd si rimpiazza il campo con qualcos'altro,su Fedora c'è "x"). Le righe di /etc/passwd si presentano nella seguente forma: Username:Password:UserID:GroupID:Info:HomeDirectory:Shell Info riguarda informazioni varie(nome completo,telefono,ecc)inserite dall'utente all'atto della creazione dell'account.
Es:
[orion@christian ~]$ cat /etc/passwd|grep orion
orion:x:500:500:Christian:/home/orion:/bin/bash

Ecco i permessi per /etc/shadow:
-r-------- 1 root root 1230 19 ago 23:33 shadow

Il file risulta accessibile solo in lettura da root.Ad esso fanno riferimento diversi files, fra cui /etc/passwd e tutti i comandi per la gestione degli utenti (useradd, userdel, usermod). Fa uso della funzione crypt,basata su una variante di DES con chiavi a 56 bit. Interrompe la password ai primi 8 caratteri e prende i primi 7 bit di ogni carattere (7*8=56) per formare la chiave.La codifica viene iterata 25 volte. I 64 bit di output vengono mappati in caratteri raggruppati in 11 caratteri ASCII di 6 bit e associati ai caratteri ASCII(0..9,A..Z,a..z). La pass registrata viene fatta precedere da 2 caratteri di 6 bit che rappresentano il salto. Le righe in /etc/shadow si presentano nella seguente forma:
Username:password:lastchange:min:max:warn:inactive:expire:

  • Username: Il nome dell'utente a cui fa riferimento la password;
  • Password: password criptata (13 caratteri). Puo assumere anche altri valori quali <owiki>*</nowiki> (asterisco)
    che sta ad indicare che l'utente è disabilitato e !! (o nessun carattere) che significa che l'utente non ha password (cosa molto pericolosa in termini di sicurezza);
  • lastchange: Numero di giorni compresi fra il 1 gennaio 1970 e l'ultima modifica della password;
  • min: Minimo numero di giorni dall'ultima data di modifica prima di poter nuovamente cambiare la password;
  • max: Durata massima della password (sempre in giorni);
  • warn: Numero di giorni di preavviso all'utente prima di invalidare la password;
  • inactive: Numero di giorni di inattività possibili per quell'utente.
  • expire: Data dopo la quale quel login non può più essere usato.

3.2)passwd
Il comando passwd cambia la password.
passwd [ utente [ password ] ]
Se non specifico alcun utente,la cambia per l'utente corrente.La modalità ad 1 e 2 argomenti può essere usata solo da root.

ACL Le ACL rappresentano delle estensioni ai normali permessi UNIX. Files e dir possono contenere informazioni più dettagliate. C'è la possibilità di dichiarare utenti e gruppi con nome,a cui si associano permessi specifici. La gestione degli utenti e gruppi viene sottoposta al filtro di una maschera (non umask),che rappresenta l'insieme massimale di ciò che è permesso fare. Entries:

  • user::permessi --> permessi associati all'utente propietario non filtrati dalla maschera ACL.
  • group::permessi --> permessi associati al gruppo propietario non filtrati dalla maschera ACL.
  • user:utente:permessi --> permessi associati all'utente con nome
  • user:gruppo:permessi --> permessi associati al gruppo con nome
  • mask::permessi --> maschera dei permessi concessi ad utenti/gruppi con nome
  • other::permessi --> permessi associati agli altri,non filtrati dalla maschera ACL.

Le ACL minimali sono quelle che hanno 3 entries per definire i classici permessi per user,group e others. Se hanno più di 3 entries vengono dette "estese". ACL minimali esempio:

[orion@localhost ~]$ umask
0002
[orion@localhost ~]$ vi prova (salvo file)
[orion@localhost ~]$ ll|grep pr
-rw-rw-r-- 1 orion orion 28 20 set 10:41 prova
[orion@localhost ~]$ getfacl prova (corrisponde a --all-effective)

  1. file: prova
  2. owner: orion
  3. group: orion

user::rw-
group::rw-
other::r--

La concessione dei permessi viene data o meno a seconda dell'entry selezionata,alla mask se coinvolta e alla richiesta effettuata.
Ordine:
1)Se UID del processo è dell'owner,le entries per l'onwer determinano l'accesso;
2)Se UID del processo sono quelle di qualche utente con nome,le sue entries determinano i permessi;
3)Se uno dei GID dei processi è uguale a quello del gruppo propietario e le sue entries contengono i permessi richiesti,questa entry definisce l'accesso;
4)Se uno dei GID dei processi è uguale a quello di uno dei gruppi con nome e le sue entries contengono i permessi richiesti,questa entry definisce l'accesso;
5)i permessi di altri definiscono l'accesso;
6)Se viene scelta la entry per owner o quella si altri ed esse contegono i permessi richiesti,l'accesso è consentito;
7)Se la entry scelta è quella di un utente/gruppo con nome o quella del gruppo propietario,ed esse hanno i permessi richiesti e la maschera(se presente)contiene anch'essa i permessi,l'accesso è consentito;
8)Altrimenti l'accesso è negato;

Le access ACL definiscono i permessi d'accesso agli oggetti del file system. Le default ACL definiscono i permessi ereditati da un oggetto del file system dalla parent directory al momento della sua creazione. Solo le directories possono essere associate alle default ACL perchè per altri file non-directory non avrebbero senso. Non giocano un ruolo diretto nel controllo degli accessi.Directories create all'interno di ACL default directories ereditano le loro default ACL sia come default sia come access ACL,mentre se sono files solo come access ACL.

4.1)getfacl
getfacl [-dRLP] file

--access            display the file access control list only
-d, --default display the default access control list only
--omit-header do not display the comment header
--all-effective print all effective rights
--no-effective print no effective rights
--skip-base skip files that only have the base entries
-R, --recursive recurse into subdirectories
-L, --logical logical walk, follow symbolic links
-P --physical physical walk, do not follow symbolic links
--tabular use tabular output format
--numeric print numeric user/group identifiers
--absolute-names don't strip leading '/' in pathnames

[orion@localhost ~]$ getfacl -d prova

  1. file: prova
  2. owner: orion
  3. group: orion

4.2)setfacl
setfacl 2.2.34 -- set file access control lists
Usage: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m, --modify=acl modify the current ACL(s) of file(s)

 -M, --modify-file=file  read ACL entries to modify from file
-x, --remove=acl remove entries from the ACL(s) of file(s)
-X, --remove-file=file read ACL entries to remove from file
-b, --remove-all remove all extended ACL entries
-k, --remove-default remove the default ACL
--set=acl set the ACL of file(s), replacing the current ACL
--set-file=file read ACL entries to set from file
--mask do recalculate the effective rights mask
-n, --no-mask don't recalculate the effective rights mask
-d, --default operations apply to the default ACL
-R, --recursive recurse into subdirectories
-L, --logical logical walk, follow symbolic links
-P, --physical physical walk, do not follow symbolic links
--restore=file restore ACLs (inverse of `getfacl -R')

I files per cui valgono delle ACL estese hanno un "+" in fondo alla stringa dei permessi. La maschera ACL predefinita è rw-. Concorre a formarla l'unione dei permessi degli utenti con nome e dei gruppi. I permessi effettivi sono quelli specificati dalla intersezione della maschera e i permessi dell'utente/gruppo.

5) UTENTI e GRUPPI
Si possono vedere e modificare graficamente le proprie informazioni di account (finger information,ossia possiamo recuperare tali info attraverso "finger username") attraverso "userinfo" digitato da shell. E' possibile vedere l'utente(UID) che sta usando la shell con "whoami","who" mostra chi è loggato e "w" anche cosa sta facendo. L'interfaccia grafica per amministrare gli utenti in fedora è richiamabile da shell con system-config-users (da root). Ecco alcuni files importanti:

  • /etc/gshadow --> info sicure sugli account di gruppo
  • /etc/passwd --> info sugli account
  • /etc/shadow --> info sicure sugli account;
  • /etc/group --> info sui gruppi
  • /etc/default/useradd --> info predefinite
  • /etc/skel --> directory contenente files predefiniti;

5.1)useradd
useradd [-c commento] [-d home_dir]

              [-e data_scadenza] [-f tempo_inattività]
[-g gruppo_iniziale] [-G gruppo[,...]]
[-m [-k dir_scheletro]] [ -o] [-p password]
[-s shell] [-u uid] login
      useradd -D [-ggruppo_predefinito] [-bhome_predefinita]
[-e data_scadenza_predefinita] [-f inattività_predefinita]
[-s shell_predefinita]

es: [root@localhost etc]# useradd francina
[root@localhost etc]# passwd francina
Changing password for user francina.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
Sorry, passwords do not match.
New UNIX password:
BAD PASSWORD: it is too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

Da notare che il sistema ci avvisa se scegliamo password deboli. In questo caso abbiamo scelto "troll".

5.2)userdel
Cancella un account.
Es. userdel -r foobar
Cancella anche la home e relativi files.

5.3) usermod
Modifica un account esistente.
usermod [-c commento] [-d home_dir [-m]]

              [-e data_scadenza] [-f tempo_inattività]
[-g gruppo_iniziale] [-G gruppo[,...]]
[-l nome_login] [-p password]
[-s shell] [-u uid [ -o]] [-L|-U] login

5.4) Allo stesso modo ci sono groupadd,groupdel e gropumod.

5.5)chfn
Cambia le proprie finger information.
chfn [ -f nome_vero] [ -o ufficio] [ -p telefono_ufficio] [ -h telefono_casa] [ -u ] [ -v ] [ nome_utente]

5.6) ROOT: su e sudo
In linux ci si logga solitamente come utenti con minori privilegi rispetto al superuser. Per alcune operazioni però si rendono necessari i privilegi amministrativi. "su" vi fa diventare utenti root a tutti gli effetti e disponete di tutti i privilegi su tutto. "sudo" permette di eseguire un eseguibile/file con i permessi amministrativi (o di altro utente) senza esser propriamente root. Inoltre può dare l'accesso solo ad alcune azioni, immettendo non la pass di root bensì la propria (o nessuna nel caso si sia configurato in

tal maniera il file "sudoers").Il file /etc/sudoers definisce coloro che sono abilitati 

all'uso di sudo e cosa possono fare attraverso di esso.

N.B.: sono stati asseganti degli esercizi in classe,che non sono stati eseguiti per mancanza di tempo;

Link esterni



Lezione di Lunedì 17-10-05

  • descrizione generale dell'algoritmo RSA;
    • descrizione dell'algoritmo,a partire dalla scelta di due numeri primi a piacere molto grandi;
    • la scelta dei numeri è molto importante ai fini della robustezza del codice;
    • visto un esempio di cifratura della parola Hello;
  • La funzione hash e il suo ruolo per la firma digitale;
    • la chiave privata oltre a decifrare viene impiegata per firmare i messaggi,più propriamente per firmare l'hash del messaggio: questo a fianco della confidenzialità dei dati,va ad aggiungere la garanzia dell'identità reale delle persone;

Riassunto delle modalità di crittazione dei messaggi:

  • crittazione semplice tramite chiave pubblica e decrittazione tramite quella privata

EB[M] (encryption da A)
SB(EB[M]) (decryption di B)

  • crittazione dell'hash tramite firma: EB[(M,SAH[M])] (encryption di A);
    A firma l'hash del messaggio con la sua chiave privata. B riceve il messaggio,spacchetta
    tramite la sua privata im messaggio,ne calcola l'hash,vede l'hash calcolato da A decrittandolo
    con la chiave pubblica del medesimo e ne confronta i risultati;
  • crittazione veloce mista: EB[K],K[(M,SAH[M])] (encryption di A)
    A cifra con la sua chiave privata l'hash del messaggio,come prima,ma poi cifra con la crittografia
    a chiave privata,generando un numero K grande,per rendere veloce il processo. Dopo di che,critta
    la chiave privata K con la chiave pubblica di B,per rednergliela nota.

Per concludere,anche se non esplicitamente trattati nel corso,aggiungerei un richiamo ai remailers: sono dei server che trattano automaticamente la posta in arrivo tramite istruzioni impartite dall'utente. Il mittente critta i messaggi attraverso PGP o un altro client denominato mixmaster,(disponibile sia per Linux sia per Windows),attraverso la chiave pubblica del remailer,il quale provvederà a decrittarlo e a rispedirlo alla destinazione anonimamente. Per un maggior grado di sicurezza si consiglia di usare una catena di remailers,per diminuire drasticamente le possibilità di rintracciamento del messaggio.


Lezione di Mercoledì 19-10-05

  • Abbiamo usato il tool John the Ripper,usato per craccare le password di sistema degli utenti;scaricabile da qui
  • sono on-line le slides della teoria spiegata e gli esercizi relativi;

John The Ripper
E' un password cracker con lo scopo primario di identificare password deboli.
Installazione:
1) scaricare l'archivio a http://www.openwall.com
2) [orion@localhost john]$ tar zxf john-1.7.0.2.tar.gz
3) [orion@localhost john]$ cd john-1.7.0.2/src
4) [orion@localhost src]$ make
5) trovare nel listato il proprio sistema. Nel mio caso sto usando Fedora 5 su sistema x86 a 32 bit. Scelgo "linux-x86-any";
6) [orion@localhost src]$ make clean linux-x86-any (premere invio)
7) Se la compilazione va a buon fine,ci rechiamo nella directory dell'eseguibile e attiviamo i test di benchmarking:
[orion@localhost src]$ cd ..
[orion@localhost john-1.7.0.2]$ ls
doc README run src
[orion@localhost john-1.7.0.2]$ cd run
[orion@localhost run]$ john --test
8) Possiamo editare il file john.conf per modificare alcune opzioni:

  • Wordlist = FILENAME

Specifica una lista di password di default nel caso non specifichiamo il metodo di craccaggio nè una lista di passowrd. Il file di default è "$JOHN/password.lst"

  • Idle = Y|N

"Y" (yes): cosuma meno risorse di sistema ma meno efficace nel craccaggio;
"N" (no),: opzione di default;

  • Save = SECONDS

Ogni quanti secondi viene fatto un backup in caso di crash. Default: 600 secondi (10 minuti).

Beep = Y|N

"Y" (yes): John emette un suono quando trova una pass (bell character ASCII code 7)
"N" (no): default.

MODALITA'


                  • "Incremental" mode parameters. ***************

Per definirli creare una sezione [Incremental:MODE], con MODE come modalità (ce ne sono di predefiniti).
Parametri supportati:

File = FILENAME

Specifica il charset file name (nessuno di default).

MinLen = LENGTH

Lunghezza minima della pass da provare(default 0).

MaxLen = LENGTH

Lunghezza massima della pass da provare(default 8).

CharCount = COUNT

Per limitare il numero di caratteri differenti usati. Questo può far si che john tenti password più semplici a discapito di quelle più complesse,anche per le pass + corte. Di default si usano quanti più caratteri differenti si può usare.

Extra = CHARACTERS

Per fargli provare caratteri che non appaiono nei charset files.

                  • EXTERNAL CRACKING MODALITY *****************************

Per definirli creare una sezione [List.External:MODE], con MODE come modalità (ce ne sono di predefiniti). Dovrebbero venire definite delle funzioni in un subset del linguaggio C,che verranno compilate ed eseguite quando richiamate da linea di comando. Ci sono delle funzioni predefinite.

6.1) Modalità di craccaggio

  • Wordlist mode: sfrutta un file contenente una lista di passowrd papabili. Si possono usare

le mangling rules per effettuare delle variazioni alle parole (se ho nella lista "quadro" può provare "Quadro" o "QuaDro"). John non ordina le parole da sè nell'attività di craccaggio e sarebbe meglio ordinarle alfabeticamente rimuovendo le linee bianche. Questo migliora la performance. Questo apporta anche vantaggi nel trattare stringhe consecutive i cui primi 8 caratteri siano uguali

(per la traditional DES-based crypt(3)) e john non tenta la pass due volte.

Sorting: tr A-Z a-z < SOURCE | sort -u > TARGET

  • "Single crack" mode: prova i nomi di login,il nome di completo e i nomi delle home degli utenti.
  • "Incremental" mode.: prova tutte le combo possibili come password. Si presuppone abbia termine se

si usa una lunghezza massima delle password ridotta oppure se si usa un charset ridotto (solo lettere per esempio). Si deve specificare il limite delle password da trovare e un charset.

  • "external mode": metodo di craccaggio definito dall'utente;

6.2) Regole

Rule reject flags.

-c reject this rule unless current hash type is case-sensitive
-8 reject this rule unless current hash type uses 8-bit characters
-s reject this rule unless some passwords were split at loading

Character classes.

?? matches "?"
?v matches vowels: "aeiouAEIOU"
?c matches consonants: "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ"
?w matches whitespace: space and horizontal tabulation characters
?p matches punctuation: ".,:;'?!`" and the double quote character
?s matches symbols "$%^&*()-_+=|\<>[]{}#@/~"
?l matches lowercase letters [a-z]
?u matches uppercase letters [A-Z]
?d matches digits [0-9]
?a matches letters [a-zA-Z]
?x matches letters and digits [a-zA-Z0-9]

The complement of a class can be specified by uppercasing its name. For example, "?D" matches everything but digits.

Simple commands.

no-op: do nothing to the input word

l convert to lowercase
u convert to uppercase
c capitalize
C lowercase the first character, and uppercase the rest
t toggle case of all characters in the word
TN toggle case of the character in position N
r reverse: "Fred" -> "derF"
d duplicate: "Fred" -> "FredFred"
f reflect: "Fred" -> "FredderF"
{ rotate the word left: "jsmith" -> "smithj"
} rotate the word right: "smithj" -> "jsmith"
$X append character X to the word
^X prefix the word with character X

Length control commands.

<N reject the word unless it is less than N characters long
>N reject the word unless it is greater than N characters long
'N truncate the word at length N


       English grammar commands.

p pluralize: "crack" -> "cracks", etc. (lowercase only)
P "crack" -> "cracked", etc. (lowercase only)
I "crack" -> "cracking", etc. (lowercase only)


       Insert/delete commands.

[ delete the first character
] delete the last character
DN delete the character in position N
xNM extract substring from position N for up to M characters
iNX insert character X in position N and shift the rest right
oNX overstrike character in position N with character X

Note that square brackets ("[" and "]") are special characters to the preprocessor: you should escape them with a backslash ("\") if using these commands.


       Charset conversion commands.

S shift case: "Crack96" -> "cRACK(^"
V lowercase vowels, uppercase consonants: "Crack96" -> "CRaCK96"
R shift each character right, by keyboard: "Crack96" -> "Vtsvl07"
L shift each character left, by keyboard: "Crack96" -> "Xeaxj85"


       Memory access commands.

M memorize the word
Q reject the word unless it has changed


       Character class commands.

sXY replace all characters X in the word with Y
s?CY replace all characters of class C in the word with Y
@X purge all characters X from the word
@?C purge all characters of class C from the word
!X reject the word if it contains character X
!?C reject the word if it contains a character in class C
/X reject the word unless it contains character X
/?C reject the word unless it contains a character in class C
=NX reject the word unless character in position N is equal to X
=N?C reject the word unless character in position N is in class C
(X reject the word unless its first character is X
(?C reject the word unless its first character is in class C
)X reject the word unless its last character is X
)?C reject the word unless its last character is in class C
%NX reject the word unless it contains at least N instances of X
%N?C reject the word unless it contains at least N characters of class C


       Extra "single crack" mode commands.

When defining "single crack" mode rules, extra commands are available for word pairs support, to control if other commands are applied to the first, the second, or to both words:

1 first word only
2 second word only
+ the concatenation of both (should only be used after a "1" or "2")

6.3) John nei sistemi con shadow password ed esempi vari

Su Fedora 5 sembra che l'eseguibile authconfig (versione grafica authconfig-gtk) permetta la visualizzazione e scelta dell'uso degli algoritmi di cifratura e il supporto ad altre cose.

[orion@localhost run]$ su
[orion@localhost run]$ umask 077
[root@localhost run]# unshadow /etc/passwd /etc/shadow > /home/orion/john/mypasswd
[root@localhost john]# ll
totale 816
drwx------ 5 orion orion 4096 23 mar 15:07 john-1.7.0.2 -rwxrwxr-x 1 orion orion 802354 21 set 09:49 john-1.7.0.2.tar.gz -rwxrwxr-x 1 orion orion 331 21 set 09:49 john-1.7.0.2.tar.gz.sign -rw------- 1 orion orion 2094 21 set 14:42 mypasswd

Una volta ottenuto il file con la fusione di /etc/passwd e /etc/shadow possiamo lavorarci sopra. Le password craccate saranno immagazzinate in un file denominato "john.pot" e visibili tramite "john --show --shells=-/etc/expired mypasswd". Con l'ultimo comando evitiamo di mostrarci nel report le password scadute.

  • john --show --users=0 mypasswd (mostra se la pass dell'utente con un certo ID - qui root -
 è stata craccata;
  • john --show --groups=0,1 mypasswd (vale per i gruppi privilegiati);
  • john --single mypasswd mypasswd2 .. (prova modalità single crack);
  • john --wordlist=password.lst --rules mypasswd (modalità wordlist con mangling rules);
  • john --incremental mypasswd (modalità incrementale);
  • john -i=alpha -u=501 mypasswd (usa la modalità incrementale sfruttando caratteri ASCII per craccare
 la pass dell'utente con ID 501);
  • john --make-charset=custom.chr mypasswd (sfrutta un charset personale);
  • mailer mypasswd (invia un avvertimento agli utenti con pass deboli);
  • john -i=all -u=501 --session=CrackFra mypasswd (dà un nome alla sessione per craccare l'account dell'
 utente con ID 501 sfruttando tutti i caratteri a disposizione);
  • john --restore=NomeSessione (riprende la sessione,utile per modalità incrementale);

Es pratico: Account francina,ID 501,pass scelta "troll":

[orion@localhost run]$ john -i=all -u=501 --session=CrackFra mypasswd

                          ........
........

troll (francina)
guesses: 1 time: 0:00:20:24 c/s: 3916 trying: troll

Dopo 20 minuti provando tutte le combinazioni con tutti i caratteri,siamo arrivati al craccaggio della password debole. Se avessimo scelto "alpha" come modalità,avremmo impiegato molto meno tempo.


Lezione di Lunedì 24-10-05

  • Problema di impersonificazione nella crittografia a chiave pubblica la soluzione risiede nelle Certification authority,i quali firmano con la loro chiave privata l'hash del nostro certificato digitale,il quale contiene chiave pubblica ed estremi anagrafici;inoltre per provare effettivamente la loro identità,le CA pubblicano sulla gazzetta ufficiale gli hash delle loro chiavi pubbliche;
  • la robustezza di un algoritmo dipende molto dalla pubblicità dello stesso;
  • attacchi brute force per chiavi DES a 40 bit: richiederebbe 2 anni con la generazione di  : 71434440*109 di chiavi; algoritmi migliori ci riescono per chiavi di 56 bit in circa 35 giorni;
    • lista di Certification authority: qui

PROTEZIONE DI UN SISTEMA OPERATIVO

  • Stratificazione in un sistema informatico:
  1. Applicazioni;
  2. Sistema operativo:
    1. Interfaccia applicazioni;
    2. Servizi di sistema operativo;
    3. kernel;
  3. Hardware;

La sicurezza per un livello viene implementata a livello inferiore. Fare sicurezza a livello applicazione significa impedire che le applicazioni interferiscano con le altre.
N.B.: l'hardware è il massimo livello di protezione che abbiamo,in cui è impossibile per il system manager attuare modifiche a meno di manomissioni a questo livello;

Requisiti di un OS per esser definito sicuro:

  • accesso al sistema garantito ad utenti autorizzati;
  • processi utente possono usare il OS secondo i privilegi loro accordati;
  • l'utilizzo dell'OS da parte di processi utente deve essere consentito e non abusivo;
  • Trusted OS: tipicamente per applicazioni militari; i sistemi operativi possono essere cetificati da uno dei 7 livelli di sicurezza indicati da delle lettere.SELinux è tra B1 e B2,Windows NT 5.0 è tra C2 e B1;
  • distinzione processi utente e processi del sistema operativo:
    • status bit;
    • programma trap;
    • interrupt;
    • Il SO si fa carico delle richieste delle applicazioni e restituisce i risultati nel loro spazio di memoria;
  • politica di gestione dei processi e dei dati nel processore Motorola 68000;

Lezione di Mercoledì 26-10-05

Esercizi con GnuPG: vedi qui

GPG
GPG è una libera implementazione dello stadard OpenPGP e può esser scaricato da http://www.gnupg.org/. Che io sappia nei sistemi Linux è già a disposizione fin dall' installazione del sistema operativo di default. E' essenzialmente un programma a linea di comando ma esistono dei front-end grafici (desktop e per MUA),anche per altri sistemi operativi (vedere http://www.gnupg.org/related_software/frontends.html#gui). Il mio front-end grafico preferito per thunderbird è Enigmail. In GPG,che sfrutta la crittografia simmetrica e non solo,la chiave privata non va divulgata ed è protetta da una passphrase.

7.1) Verificare l'autenticità di un file e listare le chiavi nel portafogli.
Per esempio verifichiamo l'autenticità di JohnTheRipper scaricato prima.
1) Scarichiamo la chiave pubblica da http://www.openwall.com/signatures/openwall-signatures.asc
2)
[orion@localhost john]$ ls
john-1.7.0.2 john-1.7.0.2.tar.gz john-1.7.0.2.tar.gz.sign
[orion@localhost john]$ wget http://www.openwall.com/signatures/openwall-signatures.asc
--16:20:09-- http://www.openwall.com/signatures/openwall-signatures.asc
=> `openwall-signatures.asc'
Risoluzione di www.openwall.com in corso... 195.42.179.202
Connessione a www.openwall.com|195.42.179.202:80... connesso.
HTTP richiesta inviata, aspetto la risposta... 200 OK
Lunghezza: 2,893 (2.8K) [text/plain]

100%[====================================>] 2,893 --.--K/s

16:20:10 (20.30 KB/s) - "openwall-signatures.asc" salvato [2893/2893]

[orion@localhost john]$ ls
john-1.7.0.2 john-1.7.0.2.tar.gz.sign
john-1.7.0.2.tar.gz openwall-signatures.asc
3) importiamola nel nostro portafogli:
gpg --import openwall-signatures.asc
gpg: key 295029F1: public key "Openwall Project <signatures@openwall.com>" imported
gpg: Numero totale esaminato: 1
gpg: importate: 1 (RSA: 1)
gpg: non è stata trovata alcuna chiave definitivamente affidabile
4)Verifichiamo l'importazione:
[orion@localhost john]$ gpg --list-keys
/home/orion/.gnupg/pubring.gpg
------------------------------
pub 1024D/C431416D 2002-10-22
uid JPackage Project (JPP Official Keys) <jpackage@zarb.org>
sub 1024g/F3813DB7 2002-10-22

pub 1024R/295029F1 1999-09-13
uid Openwall Project <signatures@openwall.com>
5) Verifichiamo l'autenticità del file:
[orion@localhost john]$ gpg --verify john-1.7.0.2.tar.gz.sign
gpg: Signature made gio 23 mar 2006 15:23:17 CET using RSA key ID 295029F1
gpg: Good signature from "Openwall Project <signatures@openwall.com>"
gpg: ATTENZIONE: questa chiave non è certificata con una firma fidata!
gpg: Non ci sono indicazioni che la firma appartenga al proprietario.
Impronta digitale della chiave primaria: 0C 29 43 AE 1E CD 24 EA 6E 0C B6 EE F5 84 25 69

gpg ci dice che il file è stato firmato da Openwall Project in persona. Ci avvisa altresì che la chiave non è fidata. E' un avviso di default se non vengono specificati i gradi di fiducia per le chiavi nel nostro portafoglio.

7.2) Esportazione di una chiave in formato ASCII

[orion@localhost john]$ gpg --armor --output firmajohn.asc --export 295029F1
[orion@localhost john]$ ls
firmajohn.asc john-1.7.0.2 john-1.7.0.2.tar.gz john-1.7.0.2.tar.gz.sign

7.3) Generazione e revoca delle chiavi.

  • gpg --gen-key --> genera un nuovo paio di chiavi,seguiamo le istruzioni;

ES: otteniamo
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
pub 1024D/C38FA517 2006-09-21
Key fingerprint = E8D9 E321 6A82 2BA6 6F84 8663 E272 FFC9 C38F A517
uid Doppio Malto (/* no comment */) <dmalto@gmail.com>
sub 2048g/50096B4F 2006-09-21

  • REVOCA:

[orion@localhost john]$ gpg --output revocamalto.asc --gen-revoke C38FA517

sec 1024D/C38FA517 2006-09-21 Doppio Malto (/* no comment */) <dmalto@gmail.com>

Create a revocation certificate for this key? (y/N) y
Per favore scegli il motivo della revoca:
0 = Nessuna ragione specificata
1 = Questa chiave è stata compromessa
2 = Questa chiave è stata sostituita
3 = La chiave non è più usata
Q = Cancella
(Probabilmente volevi scegliere 1)
Cosa hai deciso? 3
Inserisci una descrizione opzionale; terminala con una riga vuota:
> Mi sono rotto :)
>
Motivo della revoca: La chiave non è più usata
Mi sono rotto :)
Is this okay? (y/N) y

You need a passphrase to unlock the secret key for
user: "Doppio Malto (/* no comment */) <dmalto@gmail.com>"
1024-bit DSA key, ID C38FA517, created 2006-09-21

Forzato l'output con armatura ASCII.
Creato un certificato di revoca.

Per favore spostalo su un media che puoi nascondere; se l'uomo nel mezzo riuscirà ad accedere a questo certificato potrà usarlo per rendere inutilizzabile la tua chiave. È una buona idea stamparlo ed archiviarlo, nel caso il media diventasse illeggibile. Ma fai attenzione: il sistema di stampa della tua macchina potrebbe immagazzinare i dati e renderli disponibili ad altri!
[orion@localhost john]$ cat revocamalto.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: A revocation certificate should follow

iFkEIBECABkFAkUSpbASHQNNaSBzb25vIHJvdHRvIDopAAoJEOJy/8nDj6UXfmQA
nRHGwNMOj1j0L54rkLsmeb8zUvRYAKCs4XBt26vj55OCU1UdnQDti89YUQ==
=1toC
-----END PGP PUBLIC KEY BLOCK-----

Il certificato di revoca va fatto subito così se si perde la passphrase oppure non si desidera più utilizzare la chiave può essere pubblicato per comunicare che la chiave non verrà più usata. Ad ogni modo è possibile ancora usarla per firmare e decrittare i messaggi del passato. Il certificato può essere importato per vedere che appartenga veramente alla chiave che ci si aspetta.

7.4)FIngerprinting e firma delle chiavi

Facciamo il fingerprinting della "nostra" (Doppio Malto):

gpg --edit-key C38FA517
gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

È disponibile una chiave segreta.

pub 1024D/C38FA517 created: 2006-09-21 expires: mai usage: SC
trust: ultimate validity: ultimate
sub 2048g/50096B4F created: 2006-09-21 expires: mai usage: E
[ultimate] (1). Doppio Malto (/* no comment */) <dmalto@gmail.com>

Comando> help
quit abbandona questo menù
save salva ed esci
help mostra questo aiuto
fpr show key fingerprint
list elenca le chiavi e gli user ID
uid scegli l'user ID N
key select subkey N
check check signatures
sign sign selected user IDs [* see below for related commands]
lsign sign selected user IDs locally
tsign sign selected user IDs with a trust signature
nrsign sign selected user IDs with a non-revocable signature
adduid aggiungi un user ID
addphoto aggiungi un ID fotografico
deluid delete selected user IDs
addkey add a subkey
addcardkey add a key to a smartcard
keytocard move a key to a smartcard
bkuptocard move a backup key to a smartcard
delkey delete selected subkeys
addrevoker aggiungi una chiave di revoca
delsig delete signatures from the selected user IDs
expire change the expiration date for the key or selected subkeys
primary flag the selected user ID as primary
toggle toggle between the secret and public key listings
pref elenca le preferenze (per esperti)
showpref elenca le preferenze (prolisso)
setpref set preference list for the selected user IDs
keyserver set the preferred keyserver URL for the selected user IDs
notation set a notation for the selected user IDs
passwd cambia la passphrase
trust cambia il valore di fiducia
revsig revoke signatures on the selected user IDs
revuid revoke selected user IDs
revkey revoke key or selected subkeys
enable enable key
disable disable key
showphoto show selected photo IDs
clean compact unusable user IDs and remove unusable signatures from key
minimize compact unusable user IDs and remove all signatures from key

  • The `sign' command may be prefixed with an `l' for local signatures (lsign),

a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.).

Comando> fpr
pub 1024D/C38FA517 2006-09-21 Doppio Malto (/* no comment */) <dmalto@gmail.com>

Impronta digitale della chiave primaria: E8D9 E321 6A82 2BA6 6F84  8663 E272 FFC9 C38F A517

Questa impronta è da annotare e pubblicare.

Comando> sign

pub 1024R/295029F1 created: 1999-09-13 expires: mai usage: SCEA
trust: sconosciuto validity: sconosciuto
Impronta digitale della chiave primaria: 0C 29 43 AE 1E CD 24 EA 6E 0C B6 EE F5 84 25 69

Openwall Project <signatures@openwall.com>

Are you sure that you want to sign this key with your
key "Doppio Malto (/* no comment */) <dmalto@gmail.com>" (C38FA517)

Really sign? (y/N) y

Comando> check
uid Openwall Project <signatures@openwall.com>
sig! 295029F1 1999-09-13 [autofirma]
sig! C38FA517 2006-09-21 Doppio Malto (/* no comment */) <dmalto@gmail.

7.5) CIFRARE/DECIFRARE

Vogliamo dire ciao ad Open Wall

[orion@localhost john]$ vi ciao
[orion@localhost john]$ cat ciao
Ciao :)
[orion@localhost john]$ gpg --output ciao.gpg --recipient Openwall --encrypt ciao
[orion@localhost john]$ ls
ciao firmajohn.asc john-1.7.0.2.tar.gz revocamalto.asc
ciao.gpg john-1.7.0.2 john-1.7.0.2.tar.gz.sign

Open Wall farà gpg --output ciao --decrypt ciao.gpg

7.6)FIRMARE

[orion@localhost john]$ gpg --clearsign ciao

You need a passphrase to unlock the secret key for
user: "Doppio Malto (/* no comment */) <dmalto@gmail.com>"
1024-bit DSA key, ID C38FA517, created 2006-09-21
[orion@localhost john]$ cat ciao.asc
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Ciao :)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFFEral4nL/ycOPpRcRAnJSAJ0Qulhr/o9bdU8ozSSJIORWiRvRzgCfasmb
3LY7gpvzmNiZ1WYdLurRmfw=
=XrKp
-----END PGP SIGNATURE-----

L'opzione clearsign firma e fa rimanere leggibile un documento. L'opzione --sign firma e comprime il documento ma non è leggibile. Con --detach-sig rendiamo la firma allegabile:

[orion@localhost john]$ gpg --armor --output ciao.sig --detach-sig ciao

You need a passphrase to unlock the secret key for
user: "Doppio Malto (/* no comment */) <dmalto@gmail.com>"
1024-bit DSA key, ID C38FA517, created 2006-09-21

[orion@localhost john]$ ls
ciao firmajohn.asc john-1.7.0.2.tar.gz revocamalto.asc
ciao.sig john-1.7.0.2 john-1.7.0.2.tar.gz.sign
[orion@localhost john]$ cat ciao.sig
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQBFEref4nL/ycOPpRcRAiNEAJ4khMO5rDzA5tDalpWJobyb0/HP+ACgiwhe
ifOP3dpcN8Lx4QIMFNYAtvM=
=POT3
-----END PGP SIGNATURE----- [orion@localhost john]$

7.7) Spedire le chiavi

gpg --keyserver nomeServer --send-key UIDchiave


Lezione di Mercoledì 2-11-05

Esercizi con GnuPG: vedi qui


Lezione di Lunedì 7-11-05

Fare sicurezza di un sistema vuol dire fare sicurezza a livello di sistema operativo(kernel). Bisogna:

  1. evitare che i processi interferiscano tra loro;
  2. evitare che i processi modifichino/interferiscano con il sistema operativo in maniera illegittima;
  3. proteggere le informazioni;
  4. garantire l'autenticità dei soggetti che utilizzano il sistema;

Strategie:

  • Separazione logica delle entità: processi in esecuzione sono messi in aree di memoria separate logicamente(rilocazione in loading time ed execution time);
  • Controllo degli accessi: si decide chi può fare cosa a chi,mediante l'uso della matrice degli accessi,sfruttata dal ProcessControlBlock (dispendioso) o dalle ACL(più efficiente,sono la base del sistema di protezione di UNIX);
  • meccanismi di autenticazione per gli utenti(tipicamente username e password);
  • Storia di Windows: wikipedia e template
  • Per una panormaica sui sistemi operativi,vedere i pdf del corso omonimo,presso comunicazione digitale: qui
  • Accenno a kerberos(solo detto cos'è): qui

Lezione di Mercoledì 9-11-05


Lezione di Lunedì 14-11-05

Fase di identificazione: tipicamente l'inserimento di un user-id da dichiarare all'inizio della sessione di lavoro;
Fase di autenticazione: sfrutta in genere uno o più di questi parametri:

  1. ciò che l'utente possiede;
  2. ciò che l'utente sa;
  3. ciò che l'utente è;

Paradigma "ciò che sai"

  • Meccanismo delle password e punti deboli:
  1. le password vanno memorizzate su disco: calcolo dell'hash della password,memorizzato su disco. Sulla password fornita dall'utente,viene eseguito l'hash e confrontato con quello su disco,nel caso coincidano,allora l'utente ha accesso al sistema (si basa sulla presunta impossibilità di inveritre la funzione di hash);
  2. le password possono essere scelte deboli: si consiglia l'uso di caratteri alfanumerici e speciali, dando alla password una certa lunghezza in caratteri(dai 6 in su). C'è il problema che la complessità scelta può portare ad una difficoltà alla memorizzazione,con la conseguente imprudenza di alcuni utenti di scriverla in luoghi insicuri(agende,libri o luoghi limitrofi alla macchina). Attacchi possibili:
  • Attacco dizionario: raccolta di parole ricorrenti nella lingua della vittima di cui si fa l'hash,da confrontare con la password da scoprire. Se coincidono la password è stata scovata. Vedere alcuni riferimenti:
http://en.wikipedia.org/wiki/Dictionary_attack (definizione)
http://www.cs.jhu.edu/~fabian/courses/CS600.624/pwdweb.pdf (sicurezza contro attacchi dizionario)
Viene ricordata la storia di Morris e del suo Internet worm,che ha usato un attacco dizionario. Si ricorda John the ripper,uno dei programmi più usati in questo ambito. Bisogna vere un file di password.
  • Attacco phishing: e-mail truffaldine che fingono l'identità di qualcun'altro(banche,ecc) per far dirottare solitamente l'utente su un sito clonato,molto simile(in base all'abilità del truffatore) per ottenere dati personali e finanziari. Si veda :
http://www.antiphishing.org/
http://www.webopedia.com/TERM/p/phishing.html (definizione)

Paradigma "ciò che hai,ciò che sai"

  • Uso delle One-time password: password "usa-e-getta" valide una volta sola,anche se intercettate non saranno valide per altre autenticazioni.
  • smart-card: pin sblocca la smart card inserita.

Paradigma "ciò che si è"

  • Biometria: meccanismi di identificazione in base a caratteristiche fisiche difficili da contraffare. Caratteristiche studiate,con tasso d'errore a fianco,sono:
    • impronta digitale (0.1%);
    • rètina e iride dell'occhio (0.01%);
    • impronta della mano;
    • voce;
    • forma del viso (50%);

Problema di privacy e sostituibilità.

Una soluzione che coniuga tutti i parametri sarebbe il possesso di una smart-card,sbloccabile sempre con il solito pin,sulla quale vi è anche la propria impronta digitale: in questo modo c'è un confronto diretto dell'impronta senza invadere la privacy. Un possibile attacco ai riconoscitori di impronte digitali può essere l'applicazione di una sostanza impercettibile al tatto,sul riconoscitoree di impronte digitali. Quando l'utente se ne è andato,si toglie la pellicola sulla quale vi è rimasta l'impronta,per poi venir trattata in laboratorio,prodicendo pelle sintetica applicabile su un dito finto(situazione accaduta in Giappone).
I costi sono zero per le password,ma si va dalle 15€ alle 30€ per lettori smart-card e smart-card e dispositivi OTP. Il processo di sostituzione password avverrà entro 5-10 anni,ma le nuove tecnologie avranno comunque dei margini di errore,anche se infinitesimi perchè son sempre e comunque delle tecnologie.

Meccanismi di audit

  • logging: registrazione eventi che possono fornire informazioni sul sistema;
  • auditing: analisi dei log;
  • monitoring: controllo delle attività di un sistema;

Problemi e soluzioni:

  • i log è meglio memorizzarli su dispositivi WORM,per evitare cancellazione/riscrittura;
  • scegliere cosa monitorare per evitare produzione ingente di dati;
  • Usufruire di log consolidation,per disporre di tutti i log di diverse piattaforme in un formato standard,analizzabile velocemente attraverso un database centrale;
  • Sfruttare net correlation,attraverso la quale identificare automaticamente attività sospette;

Lezione di Mercoledì 16-11-05


Lezione di Lunedì 21-11-05 SOSPESA

Lezione sospesa causa indisposizione del docente


Lezione di Mercoledì 23-11-05


Lezione di Lunedì 28-11-05

XTERM è un demone del sistema operativo attraverso il quale l'utente spcifica le proprietà del terminale. Attraverso i suoi bug di programmazione è possibile,piazzando una stringa opportuna,farsi restituire una shell con i diritti di root.
La tecnica del buffer overflow bypassa del tutto il sistema operativo. L'internet worm di Morris sfruttò quest'attacco,dimostrando che era possibile utilizzare questa tecnica anche da remoto.
Mediamente vengono scoperte circa 2700 vulnerabilità al giorno,di cui circa il 40% sfrutta questa tecnica.
Il buffer overflow è un problema tipico del C e dei linguaggi in genere poco tipizzati,cioè che fanno un controllo debole sui tipi.
Molto in sintesi,questa tecnica mi consente,lanciando il programma(solitamente con i permessi di root) di qualcun'altro,di fargli sovrascrivere il return address di una funzione di modo che punti ad un'altra sezione in cui ho inserito il mio codice.

Aggiunta

  • a fronte di questi problemi e altre vulnerabilità che la programmazione in C porta con sè,è stato studiato un dialetto di questo linguaggio di nome Cyclone,per tentare di evitare Buffer overflows e altre particolarità indesiderate.

Lezione di Mercoledì 30-11-05

TCP/IP Summary:

Vedere: Materiale didattico


Altri analizzatori di traffico:


Lezione di Lunedì 5-12-05

Codice maligno è un codice progettato per fare danni volutamente ad un sistema,il tutto in modo che l'utente non sappia nulla,per poter passare inosservato. Ce ne sono migliaia basta,andare sui siti degli antivirus e vedere le liste(ecco un Esempio). Sono in circolazione dal 1980 circa,evolvendosi fino ai worm dei giorni nostri. Una distinzione particolare riguarda alcune categorie di codice dei virus:

  • codici polimorifici: mutano continuamente il codice del virus mantenendo sostanzialmente identico l'algoritmo. Spesso per fare ciò si servono della crittografia: alcune parti del codice vengono crittografate e decrittate da una porzione di codice(loader) che effettua le trasformazioni al bisogno. Gli antivirus spesso si concentrano sulla porzione in chiaro del codice;
  • codici metamorifici: il virus si riprogramma sempre di modo che i file infettati e le sue rappresentazioni non sono mai uguali,pur mantenendo uguale l'algoritmo,questo per evitare il meccanismo di pattern recognition usato dagli antivirus.


Tipologie di Malware:

  • virus: non è propriamente un programma ma un insieme maligno di istruzioni in grado di replicarsi autonomamente,una volta eseguite dall'ospite in cui è inoculato. All'esecuzione dell'opsite verranno eseguite le istruzioni del virus,che prenderà possesso di gran parte del sistema. L'ospite va diffuso per propagarsi,non si distribuisce da sè,può solo infettare nuovi files.
http://www.attentialvirus.com/
  • worm: non necessita un ospite per diffondersi,è un programma che può assumere varie sembianze ma funziona da sè. Si propaga in modo autonomo,solitamente attraverso mail con allegati(mass mailing)in cui viene replicata una copia del worm stesso. Può sfruttare vulnerabilità dei sistemi per entrare automaticamente in esecuzione e diffondersi.
    Solitamente quando un worm entra in funzione,si propaga attaccando i bersagli attraverso vari modi:
    massmailing cercando all'interno dell'harddisk,file che contengono indirizzi attraverso pattern di ricerca(solitamente frugano nella rubrica di posta elettronica), oppure worm più sofisticati utilizzano motori interni per la generazione di bersagli.
    Lo scanning è utile per capire su quali di questi bersagli si può attuare le potenzialità del worm sfruttando la loro vulnerabilità. Quindi riassumendo i bersagli possono essere:
    • e-mail
    • file server;
    • P2P;
    • sistema di messaggistica per scambio file;
    • Bluetooth;
    • vulnerabilità lato client per eseguire del proprio codice,come per esempio per i browser,inducendoli ad eseguire codice maligno che magari effettua un download del worm.
http://virus.html.it/
  • backdoor: programma per bypassare le protezioni e consentire il controllo del sistema remotamente. Uno famoso è BackOrifice,tool di amministrazione remota,ha la stessa funzione di VNC:lanciato il server sulla macchina remota mi posso collegare all'host e zombificarlo,amministrandolo senza avere il permesso altrui. Rientrano tutte le tipologie di software che permettono l'amministrazione remota senza il permesso dell'admin.
    Anche se non correlato,per chi volesse vedere i programmi di amministrazione remota,eccone alcuni:
    • VNC e simili
TightVNC
RealVNC
UltraVNC
  • trojan horse: programmi che dicono di far una certa cosa ma ne fanno anche un'altra in sottofondo. Non sono concepiti per replicarsi automaticamente,per propagarlo un modo classico è diffondere il software nei sistemi di filesharing implementandolo in alcuni programmi craccati o spacciandolo per le keygen di programmi commerciali. Prendono possesso del sistema e inviano informazioni mandandole a host remoti.
    In questa categoria potremmo far rientrare anche gli spyware, programmi che raccolgono informazioni sul sistema dell'utente ed inviandole remotamente senza il suo consenso,per poter in base ai dati raccolti,eseguire una pubblicità mirata. Essi necessitano dell'intervento dell'utente per installarsi.
  • rootkit: sono strumenti utilizzati dopo un attacco:preso possesso del sistema altrui,per sfruttare il sistema si deve evitare che ci si accorgano della sua presenza. Quindi attraverso di essi si maschera la presenza di file,processi e connessioni,che si vuol mantenere nascoste. Possono rimpiazzare le normali utility del sistema(come netstat,ls,ecc). Riuscire a capire la sua presenza è difficile,l'unico modo per esser sicuri è il confronto dell'md5 dell'utility originale con quello che si sta usando. Lavorano a livello utente e a livello kernel: nella prima modalità rimpiazzono utility,modificano librerie di sistema o applicazioni per nascondere l'informazione desiderata;quelli a livello kernel,s'inseriscono direttamente nell'SO attraverso dei moduli o driver che rimpiazzano le sys call dell'SO con nuove system call che producono effetti disparati e comunque diversi dall'originale.E' più complicato installarlo a livello kernel ma una volta fatto è più facile da nascondere,gli eseguibili rimangono sempre quelli e si possono nascondere i driver. Oltre a ciò,il rimpiazzo di funzioni ha un effetto di mascheramento globale per tutte le applicazioni che le usano,quindi l'effetto è molto più pervasivo. Se un sistema è compromesso a livello kernel posso utilizzare dei cd di analisi i quali contengono gli stessi applicativi con le librerie in binario,ma se le funzioni per il lettore cd sono state modificate,nessuno ci garantisce che il controllo dia esiti fidati. Bisognerebbe far partire il sistema con un SO fidato e poi lavorare confrontando i comandi.
  • Macrovirus e scriptvirus: eseguiti dalle macro di files come quelli della suite di applicazioni Microsoft Office,scritti in linguaggio di scripting(come visual basic script).L'interprete è l'applicazione,l'ospite è uno dei doc concepiti per avere delle macronello script virus la macchina. In uno scriptvirus l'interprete è quello del linguaggio e l'ospite sono tutti i programmi all'interno del disco potenzialmente sfruttabili(file HTML per javascript,vbscript per esempio);

Tipologie di payload nei malware

  • non distruttivo: il malware è fine a sè stesso,con il solo scopo di bypassare i sistemi di sicurezza e gloriarsi di ciò;
  • accidentalmente distruttivo: non pensato originariamente dall'autore per creare danni,ma poi ne ha creati lo stesso;
  • distruttivo: il malware crea danni volontariamente;

Ad oggi è difficile trovare degli standard nel classificare i virus,in quanto anche le case produttrici di antivirus stesse,li chiamano in maniera diversa e li descrivono con particolarità differenti.
Se non altro un punto comune di solito,lo si può riscontrare nella specificazione della piattaforma vulnerabile al malware e in genere gli effetti dannosi che provoca. La soluzione di rimozione è solitamente differente da antivirus a antivirus.

Virus,infezioni e tipologie:

  • boot sector: utilizzata dai primi virus,ai tempi del DOS,perchè faceva accedere direttamente al disco fisso. Vanno a rimpiazzare i primi 512 byte e vengono eseguiti prima di ogni altra cosa,rimanendo in memoria dopo la fase di boot. I SO moderni non permettono un accesso diretto,anche se una cosa così si potrebbe ancora fare con periferiche infette,creando per esempiop un CD-ROM ad hoc.
  • infezione nei file: il virus cerca i file nel sistema attraverso critri di ricerca,inserendosi. L'opsite eseguito dall'utente,permetterà al virus di entrare in esecuzione,propagandosi per prima cosa,col proseguire poi eseguendo il payload.

Per ospite intendiamo eseguibili(.exe,.com,ecc..),e si parla di virus scritti in codice macchina,eventualmente in linguaggio di programmazione e poi usando la parte compilata. Per i metodi di infezione,quello più semplice è la sovrascrittura:ho struttura dati come una tabella,che rappresenta una sezione del programma,sezione dati,mentre la sezione testo rappresenta quello eseguibile. La sovrascrittuea prende la sezione testo sovrascrivendone un pezzo:per entrare in funzione,si sovrascrive la prima istruzione del codice dell'ospite ad essere eseguita facendo eseguire subito il payload del virus,altrimenti se la sovrascrittura è avvenuta in altre parti,ci si deve preoccupare che prima o poi si arrivi in quella sezione per farlo eseguire.
Il payload viene ingrandito e linserito all'inizio o in coda del codice dell'ospite. L'idea è far funzionare il programma ospite in modo corretto e far agire parimenti il virus,per non destar sospetti. Un'idea è inserire il payload nelle cavità: è possibile che,per questioni di performance,le sezioni del programma ospite abbiano dimensioni multiple della pagina di memoria,qundi potrebbe esserci dello spazio inutilizzato in cui ci si può inserire il virus. Possiamo prendere questi buchi e collegarli tra di loro tramite istruzioni di salto.
I metodi classici per correggere l'entry point possono essere facilmente beccati. Se ad esempio ho un programma di 30 MB con entry point che dovrebbe essere all'inizio e si trova alla fine,lo si becca subito(una delle tecniche degli antivirus);di contro ci son metodi di camuffamento per passare inosservati.

  • Antiviruse suo funzionamento: possono agire localmente o analizzando il traffico di rete.Hanno un motore di scansione e delle signatures,cioè le definizioni dei virus,confrontate dalla scansione con i vari files del sistema. A livello host è il classico antivirus come Norton,mentre a livello di rete,accede al traffico e ne fa una scansione in tempo reale. A livello host molti worm la prima cosa che fanno è disattivare l'antivirus. Bisogna rimpiazzare certe funzioni svolte dall'SO di modo che si effettui certe routine dell'antivirus al posto di quelle classiche.
    • pattern matching: cercano nell'eseguibile alcuni pattern classici dei virus di cui si hanno le signatures. Di solito si cerca di scegliere i metodo più adatto per ogni virus.
    • string scanning: si cercano particolari stringhe delle applicazioni maligne. I virus si evolvono in fretta e modificati per confondere gli antivirus.
    • string matching con caratteri jolly: meno preciso ma permettedi identificare anche delle varianti di certi pattern.
    • Smart pattern matching: estraggo le info importanti di un file,le parole chiavi di un linguaggio,tutto ciò che rappresenta qualcosa che potrebbe essere un virus viene esaminato. Si usano filtri per ricercare ciò che interessa per un particolare tipo di virus,oppure cercando una particolare struttura di files,emulando lo stesso criterio dei virus per selezionare l'ospite. Analisi euristica invece va alla ricerca di anomalie,funzioni pericolose:se trovate in un eseguibile si solleva un allarme. C'è da dire che non sono funzioni particolarmente affidabili.

Antivirus

Gli hoax invece sono delle burle: contestualmente ai virus,anche se il loro campo si estende anche a truffe di vario genere,sono avvisi pieni di terrore o minacce di epidemie causate da temibili virus,ma che in realtà non corrispondono a nulla di vero. Molto spesso ancora oggi,gli utenti ci cascano e scatenano delle vere catene di S.Antonio via mail o anche attraverso instant messaging,producendo del traffico inutile,con l'unico effetto di intasare la rete e le caselle di posta altrui. Poco più sotto c'è un esempio:

Hoax

Allarme Virus! Se ricevi un messaggio con oggetto WIN A HOLIDAY non aprirlo. Formatterà immediatamente il contenuto del tuo hard disk. Si tratta di un nuovo virus non ancora conosciuto, inoltra questa informazione a tutti i tuoi amici ...



Lezione di Mercoledì 7-12-05 PONTE

Ponte causa feste;


Lezione di Lunedì 12-12-05

Fare sicurezza sugli host spesso si riduce a fare hardening del sistema operativo,cioè rimuovere tutte le componenti e funzionalità che non servono per l'espletamento delle funzioni del sistema per il quale è stato realizzato. Difendere l'host vuol dire di fatto mettersi nella prospettiva che qualcuno già presente sull'host non deve attuare azioni dannose.
Oltre a questo si sfruttano gli Instrusion Detection Systems,sistemi intelligenti che si accorgono di anomalie e manipolazioni del sistema non desiderate,verificatesi sull'host: essi sono dei moduli che vengono montati sul sistema operativo monitorando continuamente le attività svolte sul sistema(è da notare che svolge azione di detection,quindi segnala un'azione ma non la vieta,al contrario del firewall,che fa azione di prevention,quindi vieta l'azione se intercettata).Quanto agli attacchi che arrivano dalla rete si può fare di più.

Esistono 3 tipi di rete:

Schema di rete Ethernet
  1. LAN
  2. MAN
  3. WAN
  • Internet è una rete di reti,interconnessione di reti di varie tipologie,è lo strato(internetwork) che consente il collegamento di tutte le sue parti. Internet si è diffusa facendo riferimento alle LAN.

Ci sono due strati di rete:uno che consente di comunicare all'interno della rete locale e lo strato di internetwork che permette alla nostra rete di comunicare con altre reti.
I protocolli usati per fare internetworking sono TCP/IP. Al di sotto dei protocolli usati da Internet troviamo un protocollo di rete locale denominato Ethernet. A causa della presenza di questi due strati di rete,gli host si ritrovano di fatto ad avere due indirizzi:

  1. IP address: indirizzo che identifica l'host a livello internet. Esso viene fornito ed è a 32 bit;
  2. MAC address: indirizzo che identifica l'host a livello locale. Viene scritto nella scheda di rete ed è a 48 bit.

Attualmente la versione in uso di IP è IPv4,che prevede indirizzi da 32 bit,permettendo di indirizzare 232 host,circa 4 miliardi. Gli indirizzi vengono comprati e riservati,ma ormai non esiste più la possibilità di avere un indirizzo IP proprio perchè si stanno esaurendo. Ecco perchè da molti anni è iniziata la nuova versione di IP,la IPv6,con indirizzi da 128 bit.


Le caratteristiche di IP d'interesse per la sicurezza sono:

  • spedisce pacchetti di dimensioni finite,al massimo 64Kb(65536 bytes). Messaggi più lunghi di questo valore massimo vengono frammentati in pacchetti più piccoli.
  • è connectionless,quindi i pacchetti possono seguire una traiettoria utile qualsiasi per arrivare all'host di destinazione. Il ruoting trova il percorso ottimale per instradare i dati;
  • non è affidabile,non garantisce l'effettiva consegna(servizio best-effort);
  • non controlla le informazioni che deve inviare,nessuna verifica sul mittente: SRC e DST sono indirizzi IP rispettivamente del mittente e del destinatario,presenti nell'header IP.


Il TCP supplisce alle inaffidabilità dell'IP:

  • costruito sopra l'IP;
  • meccanismo di trasporto per i pacchetti;
  • stabilisce una connessione diretta con l'host di destinazione,garantendo che seguendo questa connessione,i pacchetti non vadano persi(meccanismo affidabile). In caso il pacchetto vada perso o corrotto,viene rispedito tramite meccanismi di acknowledgement.
  • La connessione viene stabilita attraverso un 3-way handshake:
    1. un host A invia un pacchetto SYN più un numero casuale(chiamiamolo k)ad un altro host B con cui vuole comunicare;
    2. B riceve il pacchetto e spedisce un pacchetto di risposta denominato SYN-ACK ad A,più un numero r. A questo punto la connessione è semiaperta.
    3. A manda un ACK di risposta a B e la connessione a questo punto è aperta.


Una connessione TCP è contraddistinta da 4 numeri:

  • local e remote host,local e remote port.
  • Le porte sono numeri che vanno da 1 a 65535,identificative per indicare le sessioni di un host. I servizi di rete più famosi hanno numeri di porte fissi(well-known ports,le prime 1024 porte,servizi assegnabili a processi che girano come root,quindi non accessibili ad altri processi). Ogni processo ha una tabella che dice quali connessioni ha aperte. Una connessione semiaperta/aperta verrà indicato con un posto nella tabella. Alla ricezione di un SYN viene riservato un posto nella tabella,se scade il timeout,viene cancellato,altrimenti alla ricezione di un ACK viene riconfermato e allocato.

Altri protocolli

  • UDP: è IP ad alto livello di fatto. Protocollo di consegna inaffidabile dei dati e di fatto però usa anch'esso le porte. Non usa l'handshaking del TCP. E' molto usato per i servizi multimediali e di streaming,per non rallentare il flusso d'informazioni dovendo rispedire pacchetti persi:infatto vengono scartati se persi.
  • ICMP: protocollo per fornire informazioni per host sullo stato degli host nella rete,usato solo da essi. Utile per il routing calibrato per host che rispondono alle richieste di connessione. Ha una tabella per identificare se un host è down senza verificare effettivamente lo stato dell'host.
  • ARP: assegna agli indirizzi IP in MAC address. Usato per conoscere l'indirizzo MAC di un host quando ne è noto solo l'indirizzo IP,tramite broadcasting di un pacchetto ARP contenente l'indirizzo IP del destinatario: se il destinatario è presente nella rete,risponderà con il suo indirizzo MAC. Associerà poi i valori corrispondenti nella sua tabella. Tutti i messaggi che una macchina genera per l'host xxx.xxx.xxx.xxx,andranno all'host di indirizzo MAC corrispondente. Se vogliamo ricevere i messaggi di Pippo con indirizzo IP y e MAC address M,si va a sostituire con il nostro MAC address al posto di M(attacco arp-poisoning). in questo modo ci si intromette fra due macchine,costituendo il cosiddetto Man in the middle. E' importante notare che l'arp-request prenderà "per buono" l'ultimo host che risponderà fornendo il suo MAC address,quindi se due host in una LAN rispondono ad una arp request,sarà il MAC address dell'ultimo host a venire associato a quell'IP di cui si chiedeva a chi appartenesse. Ci possono essere situazioni infatti in cui ci sono due macchine virtuali su una stessa macchina con due IP diversi. ARP non fa alcun controllo. Un tool open source usato per l'intercettazione del traffico è Ettercap,scaricabile da questo sito.
  • DNS: è di fatto un database distribuito che contiene indirizzi IP delle macchine,recuperabili attraverso una serie di query internazionali. Anche il DNS è soggetto a DNS poisoning,dirottando il traffico verso un altra direzione.
  • DHCP: serve ad assegnare indirizzi IP. Si può avere configurazione statica)il nostro host avrà sempre lo stesso indirizzo IP),o dinamica(si assegna ad ogni nuovo boot un indirizzo IP tra un pool di indirizzi disponibili). E' importante che il provider mantenga il log dell'assegnamento degli indirizzi.
Stack ISO/OSI

All'application layer si usano Socket Stream del TCP,se è una Socket Raw sta usando IP. E' possibile fare attacchi a questo livello. I servizi più interessanti a questo livello sono:

  • SMTP: protocollo per inviare la posta,vede l'implementazione principale in ambito Unix sendmail,in ambito Windows,Exchange. L'internet worm di Morris faceva un buffer overflow su sendmail(in passato aveva un baco al mese che permetteva un root compromise).
  • POP/IMAP:ricezione posta
  • FTP,SSH,RTP,ecc. Vedere qui per una visione dei protocolli più usati.
  • WWW: è di fatto un multiprotocollo,basato sul paradigma client/server in cui sussiste una connessione TCP fra di essi(parla più protocolli fra i quali HTTP,FTP,SMTP,via audio,ecc). L'unico problema è se stabilire una connessione per ogni oggetto spedito o mantenerne una per tutti gli oggetti spediti(per oggetti si intende immagini,testo,applet,ecc). Ciò viene ovviato usando i cookie per memorizzare lo stato di una connessione e ridurre il numero di sessioni aperte con lo stesso client.

I cookie vengono depositati sul client e ricordano sessioni aperte con i client. Il cookie contiene dati(solitamente cifrati e non leggibili dal client)depositati sull'hard disk del client,solevando questioni di privacy. L'altro grosso problema è legato ai codici scaricabili,fra i quali le applet e gli ActiveX. Es:visito un sito e scarico del codice eseguibile, prima di eseguirlo il browser dice se è fidato o meno:l'ActiveX è allegato dalla firma digitale,viene certificato digitalmente. Il browser comunica da chi è firmato e poi posso scegliere se eseguirlo o meno. Nonostante ciò è legato ad un modello di trusting dell'utente medio,che spesso si fida di tutto. Per quanto riguarda l'applet,viene messa in una zona della memoria blindata,che non può accedere a risorse della memoria(modello sandbox). Con ActiveX si può fare tutto mentre con java nulla fondamentalmente,anche se è stato arricchito il modello java,vedendo l'utente in grado di decidere quali risorse mettere a disposizione dell'applet. Troviamo poi i Web defacement,cioè il defacciamento delle home page dei siti,la loro modifica,che di fatto non producono grossi danni,ma provocano un danno d'immagine. un altro problema è legato al phishing,ossia le truffe informatiche che spesso clonano siti di istituti di credito per rubarne gli estremi finanziari.


Lezione di Mercoledì 14-12-05


Lezione di Lunedì 19-12-05

Intervento di Whitfield Diffie in una teleconferenza riguardo all'Information Security nell'ultimo secolo e i problemi in prospettiva che questa disciplina si troverà ad affrontare. Sostanzialmente dice che la sicurezza dell'informazione è sempre stata sorpassata dalle tecnologie che pian piano venivano introdotte. Quindi bosignava rivedere le tecnologie di sicurezza per adeguarle a nuovi strumenti di trasmissione dell'informazione. Lo stesso è valso per le tecniche crittografiche.
Con l'avvento dei computer nella seconda guerra mondiale e la potenza di calcolo inerente,costringeva a rivedere le tecnologie di protezione perchè rendevano scopribili facilmente le trasmissioni. Quindi la sicurezza dell'informazione è passata alla sicurezza fisica del computer,cioè vietare l'accesso a persone non autorizzate.
Con l'arrivo del time sharing fra più processi presenti contemporaneamente sulla stessa macchina,bisogna vedere cosa permettere e chi far eseguire. Così c'eran due filoni:

  1. chi si occupava di controllare le azioni dei processi;
  2. scrivere programmi bug free per evitare attacchi(buffer overflow,ecc);

Pubblicizza poi il sistema Solaris,che dovrebbe garantire le qualità di sicurezza migliori sul mercato. Inoltre annuncia una rivoluzione annunciata dai Web Services(per esempio programmi che contattano i vari motori di ricerca per la ricerca di materiale,oppure manipolazione di foto tramite un servizio che contatta siti che offrono tali servizi,ecc). Nella fase attuale proteggiamo le informazioni,in un mondo di Web services siamo noi che offriamo i dati,la nostra macchina dovrebbe essere aperta al traffico computazionale di dati con altre macchine remote,quindi non la si può più pensare come una fortezza inaccessibile,altrimenti si finisce con il venire tagliati fuori. I meccanismi di controllo del firewall vanno ripensati,i nostri dati circoleranno fra le mani di persone estranee. La sicurezza diventerà più simile alla disciplina contrattualistica,prima di consegnare i nostri beni si contratterà con la controparte i servizi che offre e le garanzie di sicurezza che ci dà.

Sulla rete Internet è facile nascondere le proprie tracce(anonimità) o farle perdere. Per persone predisposte può contribuire ad incentivare attività illecite. Spesso non è comunque sufficiente avere i log degli IP per incriminare una persona,quindi a volte si ricorre all'intercettazione telefonica(ad ogni modo i costi possono anche essere elevati,ecco perchè spesso non suscitano scalpore certi reati informatici minori,come il defacement di siti). Il pc medio che è in rete è solitamente non protetto,quindi può diventare facile vittima per persone con certe skills e che hanno interessi a sfruttarlo. Spesso si può ricorrere a macchine bucate(honeypot)collegate a sistemi di monitoraggio che logga tutto,cosicchè l'hacker che viola un sistema viene controllato inconsapevolmente.
Il preludio di ogni attacco avviene tramite portscanning(vedere anche qui),ovvero si testano tutte le porte per vedere quali di esse rispondono,quali applicazioni offrono un servizio(un esempio di tool di questo tipo è Nmap). Il portscanning è facilmente individuabile,viene loggato il nostro IP,quindi si devono attuare tecniche di mascheramento del proprio IP(i firewall odierni sono comunemente tarati per rilevare con facilità questo tipo di attacco).
Una volta che conosco i servizi,e capito il sistema operativo che li ospita e la sua versione(tramite fingerprinting),vado a vedere quali vulnerabilità sono già note per un certo OS(per esempio consultando siti specializzati come Security Focus). A questo punto si tratta di trovare degli exploit,codice che ci permette di sfruttare le vulnerabilità di una macchina(la loro pubblicazione è illegale,è istigazione a delinquere).
Il mascheramento della propria identità avviene mascherando il proprio IP: è possibile modificare l'indirizzo IP di un pacchetto,dalla mia macchina può uscire un pacchetto con l'IP di un'altra macchina.

  • ip-spoofing:la macchina A,volendo impersonificare C,manda un pacchetto SYN con l'indirizzo IP di C a B per stabilire una connessione. Ovviamente B risponde con un SYN ACK a C. A questo punto una prima ipotesi è che C mandi un RESET della connessione a B,poichè non ha inviato alcun pacchetto SYN. Se questo non accade dovrei mandare l'ACK con il numero scelto casualmente da B che non conosciamo. Se noi indoviniamo tal numero possiamo spedire l'ACK e stabilire la connessione. Sono stati fatti degli studi per cui ci possono essere dei modelli di prevedibilità del numero casualmente scelto dal generatore di numeri casuali avendo già una sequenza di numero scelti. Facendo di solito tre o questtro tentativi si riesce ad indovinarlo. L'unico problema sta in C: o cerchiamo un indirizzo non usato da qualcuno,di modo che non risponda a B,oppure mettiamo in C in condizione di non rispondere tramite attacco DoS,si fa un flooding di pacchetti di modo che C di fatto non può rispondere a B. Quindi B suppone che A sia C. Le uniche cose che si possno fare in questo modo sono transazioni one-way.
    Il primo attacco ip-spoofing è stato realizzato secondo la storia da Kevin Mitnick. Mitnick era essenzialmente un esperto di social engineering e nelle intromissioni nel sistema telefonico,captando le frequenze dell'FBI. Si dice che Mitnick avesse attaccato la macchina di Shimomura tramite IP-spoofing,sebbene avesse negato dapprima la paternità di quest'attacco.

L'attacco DoS è un arrivo massiccio di pacchetti tramite ip spoofati su una porta che di fatto rende impossibile erogare il servizio. Una tecnica elementare è il SYN Flood: è basata sull'handshaking tipico del TCP. Invio un SYN,quindi l'host riserva un posto nella tabella delle connessioni semiaperte,se entro il timeout non arriva l'ACK viene cancellato il posto. Si costringe quindi a saturare la tabella costringendo l'host a non ricevere più connessioni. Più macchine si concentrano su uno stesso bersaglio,più è efficace l'attacco. Si parla a questo punto di DDoS. Contro l'attacco Dos si può fare poco di fatto: fra le strategie di difesa si può volere l'autenticità dei pacchetti mandati. Ciò sarà possibile con IPv6,con il quale non sarà più possibile modificare l'identità di una macchina perchè in realtà,il meccanismo di autenticazione dei pacchetti userà la firma digitale. I pacchetti dovranno essere firmati da chi li manda,e non si potrà usare una firma diversa da quella che si possiede.

Libri citati

Altri links



Lezione di Mercoledì 21-12-05


Lezione di Lunedì 09-01-06

NOTIZIE UTILI PER GLI APPELLI DI SICUREZZA:


  • stabilita la data dell'appello di teoria per il 20 febbraio,seguiranno dettagliate informazioni sul materiale che verrà richiesto,con un esempio di scritto(vedere il sito).
  • L'appello successivo va direttamente a giugno.
  • La parte di teoria e pratica concorrono ciascuna per metà al voto finale.
  • L'esame di laboratorio verrà fatto probabilmente in laboratorio e consisterà nel saper fare gli esercizi assegnati per casa o svolti in laboratorio durante le lezioni.
  • Le parti possono essere fatte indipendentemente(Es: teoria a febbraio,laboratorio a giugno).


Un'attività estremamente facile da intraprendere è l'intercettazione delle informazioni,per le seguenti cause:

  • il protocollo HTTP non prevede cifratura;i progettisti del protocollo hanno deciso così,perchè 40 anni fa la banda disponibile sui canali si aggirava a 4 Kbit/s,quindi introdurre la cifratura sui canali avrebbe voluto dire rallentare la banda stessa, ,compomettendo in maniera pesante l'uso delle applicazioni;
  • in ambito LAN,una modifica della scheda di rete(modalità promiscua)permette la ricezione di messaggi da parte di tutti;
  • è sufficiente compromettere un router e mettersi in ascolto sulla scheda di rete per sniffare tutto il traffico passante;per la natura packet switching di Internet,la compromissione di un router comunque permette la visione di alcuni pacchetti,non di tutti(alcuni pacchetti seguiranno rotte alternative).

Partendo da queste considerazioni si sono sviluppati protocolli crittografici in cui le parti prima di comunicare,si accordano su una chiave. Dopo di che il traffico viene cifrato con questa chiave. Ad ogni modo,il problema che potrebbe sorgere è legato all'integrità del messaggio,mentre vengono preservate riservatezza e identità(a patto che la chiave non venga scoperta). Se la modifica è fortunata,può compomettere il significato finale del messaggio. Entra quindi in azione nuovamente l'hash del messaggio,cifrato anch'esso con la chiave. Alla ricezione del messaggio,si decifra l'hash e viene nuovamente ricalcolato per farne un confronto. Una modifica dell'hash è estremamente improbabile.
Nascono però problemi di:

  • efficienza: l'algoritmo impiega troppo nel cifrare i messaggi,se usiamo crittografia asimmetrica;
  • la chiave: la crittografia simmetrica ha rischi noti e spiegati in lezioni precedenti;

La soluzione è l'uso della crittografia asimmetrica per lo scambio delle chiavi e crittografia simmetrica per la cifratura(più veloce nella fase di cifratura). Una possibile comunicazione vede l'utente C1 cifrare con la chiave pubblica di C2 un numero casuale(qualche cifra,nell'ordine dei millisecondi). Se C2 ha la chiave privata corrispondente decifra il messaggio,C2 quindi calcola l'altra parte della chiave,lo cifra a sua volta con la chiave pubblica di C1 e lo spedisce al medesimo. L'unione dei due numeri forma la chiave privata per una specifica sessione. Tutto ciò va ripetuto per ogni sessione,proprio per la ristrettezza d'uso,possiamo usare cifre piccole ed esser più veloci.

Livelli di cifratura

La cifratura del dato la posso far fare all'applicazione che genera il dato,richiedendomi di modificare però le applicazioni(browser,e-mail client). Oppure si può far fare questo lavoro a livello rete o trasporto. Parametri di scelta:
cifrare a un livello d'applicazione vuol dire che alla ricezione la decifratura avverrà nel medesimo livello. Un elemento sensibile va rivelato solo al destinatario. Una cifratura a livello trasporto o rete è passibile di sniffing lungo il transito. Abbiamo bisogno quindi di una cifratura a livello applicativo affinchè sia solo l'utente finale a visionare io messaggio. Il PGP è un classico esempio di cifratura a livello d'applicazione.
Telnet è un protocollo insicuro,perchè il traffico passa in chiaro. Anche in questo caso abbiamo bisogno di una cifratura,ma andrebbe riscritta l'applicazione Telnet,e aggiungere la parte che ci assicuri la cifratura(da qui l'SSH,e questo anche per altri protocolli).
La cifratura a livello di trasporto è eseguita dal TCP. In questo caso l'attività è trasparente,la modifica dell'applicazione è minore ma comunque va predisposta per lavorare con il TCP sicuro. La versione attuale del TCP sicuro è il TLS(vedi anche qui),prima era SSL.
L'applicazione usa TCP attraverso le socket,quindi vanno usate altri tipi di socket. Quindi relativamente all'applicazione verrà modificata la libreria inerente,mentre l'operazione di cifratura è quasi totalmente demandata a livelli inferiori. Le sessioni Web tipicamente sono cifrate a questo livello. I browser tipicamente dialogano con un server,si ritiene che il server sia oggetto fidato per cui si cifra solo il tratto tra il clietn e il server. La cifratura a livello TCP permette la cifratura delle sessioni,quindi parte del traffico viene reso sicuro,in quanto il traffico è più lento quando vengono eseguite operazioni di cifratura.
La cifratura a livello IP rende l'applicazione totalmente ignara di ciò che succede. IP non conosce le informazioni contenute che riceve;si può per esempio cifrare a prescindere da nozioni di sessione del TCP,tutto il traffico verso una certa destinazione,esclusivamente nel tratto di rete,senza fare alcuna modifica all'applicazione. Ad ogni modo si paga in termini prestazionali,perchè tutto il traffico è cifrato,quindi comporta un rallentamento perenne del traffico verso certe destinazioni. Ha comunque come vantaggio l'assoluta trasparenza a livello applicativo.IPsec è la componente di IP sicuro,presente su tutti i kernel ormai. Per la comunicazione le macchine devono essere entrambe IPsec.

Problemi politici

Il trattato di non belligeranza firmato da 30 nazioni dopo la seconda guerra mondiale,impegnava le nazioni a vietare l'esportazione,verso paesi firmatari del trattato,di armi pericolose,in special modo quelle nucleari. Si dà il caso che la crittografia venga considerata dal suddetto trattato al pari di un'arma pericolosa(si pensi che il PGP era vietato in Spagna fino al 2002,lo stesso vale per la Francia,mentre in Russia la crittografia è tutt'ora bandita ). Quindi prodotti sviluppati in ciascun paese non possono essere esportati. Ecco perchè gli USA si sono impegnati a non esportare l'algoritmo DES. Tutto ciò nel mondo Internet ha posto dei vincoli alla comunicazione degli host in rete. Quindi successivamente la crittografia è stata tolta dalla lista nera ed è stata consentita l'esportazione della crittografia in applicazioni usate solo per scopi finanziari ed economici. Quindi prima del 2001 gli USA usavano tecnologie crittografiche forti,mentre l'Europa campava sull'uso di algoritmi già craccati in precedenza.
Dal 95 al 2002,tutto il resto del mondo tranne gli USA,avevano la necessità di usare prodotti crittografici di una certa robustezza,e gli unici che li avevano fabbricati,erano gli USA che non li potevano esportare. Il resto del mondo ha preferito aspettare che le grandi compagnie ci portassero i loro prodotti(ciò dà da pensare riguardo all'autonomia europea e non).
La realizzazione di software che fa uso di algoritmi e protocolli brevettati necessita l'autorizzazione degli autori o il pagamento di royalties,una volta che se ne fa un uso commerciale dei prodotti stessi,pena la galera.

TLS e SSL

TLS è un protocollo usato comunemente(tipicamente quando vediamo https nel browser). C'è una fase di handshake con un certificato vuoto per mettersi d'accordo sull'uso di una chiave di sessione. Questa fase è passibile d'attacco Man in the middle,per via del mancato uso del certificato X509,anche se è molto difficile. SSL tipicamente usa RSA più altri,per la parte di handshaking. Una volta scambiate le chiavi i protocolli scelti per la comunicazione sono RC4(nella versione 40 e a 128 bit),DES(nella versione 40 e a 128 bit) e TripleDES. Oltre a ciò si usano gli algoritmi di hashing per le firme digitali,cioè MD5(hash a 128 bit) e SHA1(hash a 160 bit). SHA1 attualmente sta soppiantando MD5 nel mondo commerciale. Tipica sessione SSL:

  • tipicamente la sessione viene aperta dal client. Esso interroga il server,mandandogli l'ora,un numero casuale,e un codice(cypher suite),il quale indica gli algoritmi di cifratura che il client è disponibile ad usare. La cypher suite 001 indica l'uso di SSL con RSA(per handshake),non usa cifratura di canale e usa come algoritmo di hashing MD5. Essa viene indicata così: SSL with RSA with null_MD5. Sono tabelle di codici.

Cypher suite 0008: RSA export with DES 40,CDC,SHA (usa RSA versione export,fa riferimento ai problemi politici trattati prima,è la versione debole che usa chiavi di 512 byte invece di 1024; con DES 40 bit in versione CDC,con algorimo di hashing lo SHA).

  • A sua volta il server risponde con un numero casuale,la sua chiave pubblica,session-id e una cyper suite. Il server può anche rifiutare la proposta del client. Se il codice della suite è uguale allora la proposta viene accettata.
  • il client calcola un numero casuale di 48 bytes(Pre-Master Secret),lo cifra con la chiave pubblica del server e la rispedisce a quest'ultimo;
  • dalla Pre-Master Secret vengono estratte 6 chiavi attraverso manipolazioni varie,le quali verrano utilizzati durante la sessione. Client e server usano chiavi indipendenti per cifrare,non condividono le chiavi.
    Versione SSL 1.0:
    • chiave client;
    • server right;
    • chiave per authentication code sui messaggi;
    • Initialization vector,fase di inizializzazione nel DES;
      • questa release è passibile di Man in the middle,cioè la chiave del server KS può essere intercettata e viene spedita al client una chiave KM appartentente ad un terzo. Il client ha KM,convinto sia quella del server,cifra il Pre-Master secret con KM,ricavando le chiavi. Il malintenzionato riceve il messaggio,lo decifra e lo manda al server,mettendosi nella condizione di avere le chiavi e intercettare tutta la comunicazione. La strategia pensata per risolvere il problema,prevede una join venture della Netscape con Verisign. Invece di mandare la chiave pubblica, si manda un certificato digitale,sostituendo il passaggio di invio di KS con l'invio di un cetificato,verificato dal client(one-way authentication,ma è possibile che anche il server richieda la cetificazione al client).

I server web per far funzionare SSL devono avere un certificato firmato da una Certification authority riconosciuta dal browser(la chiave pubblica è memorizzata nel browser). SSL 3.0 o TLS prevede quindi lo scambio di certificati.

Altri link


Lezione di Mercoledì 11-01-06


Lezione di Lunedì 16-01-06

Firewall

Lo stesso kernel Linux dispone nativamente di un firewall. I firewall non open-source di terze parti solitamente si differiscono per interfacce di configurazione più evolute,nonostante la qualità di servizio sia più o meno la stessa. Abbiamo 4 tipologie di firewall,classificati in base al livello dello stack TCP/IP in cui lavorano:

  1. datalink: discrimino in base agli indirizzi sorgente e destinazione,in una rete LAN sono i MAC address;
  2. Rete(IP): abbiamo sorgente/destinazione più gli altri header nei pacchetti IP;
  3. Trasporto(TCP/UDP): abbiamo le porte(sorg/dest),in più nel TCP campi vari; in questa categoria piazziamo il gateway a livello trasporto.
  4. Application protocol(HTTP,SMTP,ecc): gateway a livello d'applicazione o comunemente chiamati proxy. Posso analizzare differenti tipologie di protocolli, la complessità sta nel fatto che i proxy devono sapere come funzionano esattamente questi protocolli;

Un'altra tipologia sono gli host gate: lavorano a livello di host,il firewall è integrato nell'host che deve proteggere,fa parte del sistema operativo,usato per proteggere la macchina connessa ad Internet. Ha delle infromazioni in più,relative alle tipologie di processi e utenti che li usano.

Packet Filter:

  • sono la tipologia di firewall più semplice:
  • originariamente implementati nei router;
  • i filtri erano chiamati ACL,liste che discriminavano il flusso di traffico. Poi si sono evoluti in packet filter;
  • costi bassi,sicurezza perimetrale(livello più basso);
  • packet filter più evoluti,hanno maggiori capacità di filtraggio;
  • Lavorano singolarmente sui pacchetti: osservano i campi dei pacchetti,se è abilitato il pacchetto passa e raggiunge l'host altrimenti viene scartato(blocco della connessione). Il filtraggio è indipendente dal contesto,quindi ciascun pacchetto viene elaborato singolarmente.
  • allo stesso modo posso permettere a degli host di comunicare con l'host su cui è installato il firewall,basta lavorare su indirizzi sorgente/destinazione.
  • questi filtri hanno il vantaggio principale di proteggere dall'ip spoofing(impersonificazione di un altro host).

Configurazione di un firewall,3 fasi:

  1. definizione delle politiche:scrivere quali sono le operazioni che ogni host/rete può fare nei confronti di altri host/rete.Vanno definiti i parametri leciti o meno dello stack TCP,cioè quali valori possono assumere e quali no.
  2. la politica va trasfromata in qualcosa di universale,che racchiude esattamente il concetto della politica;
  3. traduzione nella sintassi del firewall:le regole sono tra alto e basso livello,vanno codificate in comandi di configurazione dell'apparato di rete e del sistema operativo. Ciò può avere problemi,perchè ogni apparato può avere una propria sintassi,quindi le fasi precedenti assumono una certa importanza per facilitare quest'ultima.

Un esempio: ho in una rete un server di posta A,ma vogliamo che un particolare host B non inoltri posta attraverso A. Devo creare delle regole per rappresentare questa politica. La regola più semplice prevede una politica P "accetta/blocca". Per questo tipo di politca necessitiamo quindi solo degli indirizzi sorgente e destinazione. Inoltre autorizziamo il server SMTP A a rispondere a tutti gli host,di modo che host e server possano dialogare. B non deve essere autorizzato ad usare il server,di conseguenza SMTP non potrà nemmeno rispondergli.
N.B.: è importante l'ordine con cui vengono definite le regole,mettendo prima quelle che hanno minore probabilità di essere verificate,poichè esse vengono processate nell'ordine con cui vengono inserite.
Un altro caso vede i client della nostra rete che comunicano attraverso il firewall verso il server SMTP,devono essere autorizzati per spedire la posta. La politica P accetta sorgente dalla rete local con destinazione il server SMTP sulla porta 25. Volendo avere risposta dal server SMTP,autorizziamo il percorso inverso,dal server SMTP dalla porta 25 alla rete local. Questa configurazione presenta però un problema di sicurezza: la comunicazione fra host è autorizzata su qualsiasi porta.

Gateway a livello trasporto: Il client è a conoscenza della presenza del gateway,che è un intermediario nella comunicazione client/server. Il client si collega dapprima al gateway(il quale si comporta da server) e poi il gateway avanza la richiesta,se accettabile,al server(e qui si comporta da client).
Questi gateway lavorano dal livello TCP in su. I protocolli più usati fra client e gateway sono SOCKS4 e SOCKS5. Ciò può aggiungere anche l'autenticazione da parte del client prima di accedere ad host esterni alla sua rete.

Proxy: E' un gateway a livello applicazione. Il client per collegarsi al server deve passare attraverso al proxy. Anch'esso quindi agisce sia da client sia da server. La differenza rispetto al precedente è che il proxy è tarato sul protocollo a livello d'applicazione,quindi per eseguire dei filtraggi,deve conoscere perfettamente il protocollo applicativo usato. Un proxy HTTP,per esempio,prima di inoltrare richieste dei client ai server,può impedire ad un iprange(una certa rete)di compiere o meno certe azioni(come scaricare file mp3).
E' altresi possibile richiamare altre applicazioni come degli antivirus,per controllare dei files scaricati dal client e tenere traccia di tutte le richieste effettuate.
I client sono perfettamente a conoscenza della presenza del proxy,ma posso far passare particolari servizi attraverso il proxy senza configurare il client(proxy trasparente).


Links: firewall e socks:

Alcuni Firewall:


Lezione di Mercoledì 18-01-06

Sono online le soluzioni degli esercizi proposti durante le lezioni di laboratorio.


Lezione di Lunedì 23-01-06

  • Lo scritto di Sicurezza dei sistemi e delle reti: istruzioni per l’uso
  • Si hanno a disposizione 36 punti,18 per ciascuna parte;
  • 8-9-10 Febbraio c'è InfoSecurity a Milano,una mostra dedicata alla sicurezza informatica,dedicata al ramo aziendale. Per i biglietti(disponibili solo elettronicamente) scrivere a info@clusit.it,dicendo che si è studenti del corso tentuti dal prof.Bruschi. Verrà restituito un codice da presentare alla biglietteria.
  • per problemi riguardo ad argomenti non compresi,contattare il prof.Bruschi per e-mail per prendere un appuntamento,non rivolgergli domande nelle e-mail.


Cifratura a livello di rete:protocollo IPSec

Il protocollo IPsec è stato definito insieme al protocollo IPv6. Visti i problemi di sicurezza legati al protocollo IP,è stato deciso di anticipare l'implementazione del protocollo IPsec rispetto ad IPv6. Nonstante ciò non viene molto usato perchè non molto noto e soprattutto l'utilizzo è complesso. IPsec sta diventando uno standard nelle VPN,reti private virtuali,cioè canali stabiliti tra utenti internet end2end che consente la trasmissione di traffico cifrato di dati. Il traffico è intercettato prima di arrivare alla scheda di rete,così come all'arrivo,viene prima decifrato prima di essere passato a livello IP e d'applicazione. La cifratura a livello rete è completamente trasparente a livello applicativo. Le VPN sono molto utilizzate nel telelavoro da casa,in cui i dipendenti possono lavorare in maniera sicura con i calcolatori dell'azienda,poichè il traffico è cifrato.
Esistono società che hanno generato client basati su software propietario. IPsec è uno standard gratuito.
Peculiarità:

  • riservatezza tramite crittazione del traffico;
  • lavora solo end2end(la versione multicast non è stata ancora implementata);
  • servizio di autenticità,i pacchetti non vengono modificati durante il loro spostamento nella rete;
  • può lavorare in:
    • transport mode: usato solo fra host che supportano entrabi IPsec;
    • tunnel mode: quando sono i firewall comunicanti fra loro,ad usare IPsec per gli host.

Il pacchetto di partenza viene incapsulato all'interno di un altro pacchetto. Il gateway riceve un pacchetto IP da A e lo incapsula in un altro IP,con indirizzo di destinazione del gateway di B. La tecnica di tunneling,può essere anche usato per bypassare il firewall,mandando pacchetti di un altro protocollo incapsulati in uno HTTP,dove quando verrà aperto,troverà un demone che riconosca le informazioni e le estragga. Viene garantita l'autenticità del payload del pacchetto TCP e di alcuni campi del pacchetto TCP(per esempio non può essere garantito il TTL dei pacchetti,poichè si modifca durante il percorso).
SSL garantisce la sicurezza della connessione,mentre IPsec fa questo servizio pacchetto per pacchetto. Consente inoltre di verificare anche l'identità del mittente,quindi se implementato annullerebbe totalmente la possibilità di effettuare ip spoofing. MD5 e SHA1 sono i soliti protocolli per garantire l'autenticità dei pacchetti. Modificando il layout dei pacchetti,abbiamo per forza bisogno di host che supportino entrambi IPsec perchè possa avvenire la comunicazione. Nel tunnel mode viene aggiunto un nuovo header,venendo autenticato tutto il pacchetto.
I protocolli usati da IPsec per la cifratura sono il DES(verrà sostituito dall'AES),TripleDES,RC5 Idea,TripleIdea,Blowfish. Di fatto viene cifrato tutto il pacchetto TCP,l'IP address originale non viene cifrato(in transport mode),con tunnel mode viene cifrato tutto il pacchetto IP,anche l'IP di origine.
La prima cosa che viene fatta in ambito IPsec è la deifinizione di security association,strumento attraverso il quale l'utente definisce il trattamento da operarsi su tipologie di traffico(pacchetti) legati a certe connessioni. I flussi di dati vengono distinti in base ad indirizzo di partenza,porta di partenza e realtivi indirizzo e porta di arrivo(quindi si permette di lavorare su dati,le porte,di livello superiore). Il traffico è unidirezionale,può applicare anche sulla stessa connessione trattamenti diversi per traffico uscente ed entrante,quindi due security association. Inoltre va distinto il traffico IPsec da quello normale. L'efficienza del calcolatore e della trasmissione di rete è inversamente proporzionale a quanto uso IPsec. IPsec sa come gestire il traffico tramite le security association memorizzate in database per il traffico uscente ed entrante. Il database delle security policy consentono ad IPsec di identificare un certo tipo di traffico,mentre la security association specifica quali misure vogliamo effettuare(quindi anche quale cifratura applicare). Policy è politica,association è azione,è livello implementativo. Le fasi sono distinte e permettono di operare su di esse indipendentemente nel caso si vogliano fare delle modifiche in futuro. Le security policy sono una tripla:

  • un selettore,che distingue il traffico;
  • un indicatore sul tipo di trasformazione che vogliamo effettuare;
  • la politica da adottare;

Vanno stabilite delle chiavi con l'altra parte comunicante,le quali mediamente durano 20 minuti. La gestione delle chiavi è realizzata in vari modi:

  • manuale:scambio di chiavi tramite canale sicuro e usate per i canali sicuri(telefono);
  • automatica:protocolli provvedono a gestire le chiavi;

Il protocollo che descrive le modalità di scambio delle chiavi è ISAKMP. Esso definisce le procedure di autenticazione,ecc senza entrare nel dettaglio,ma solo i formati dei messaggi,la modalità con cui costruire il protocollo,lasciando ai vendors l'implementazione. Ciò ha portato a diverse implementazioni. ISAKMP assume che gli host possano autenticarsi,magari avendo a bordo un certificato digitale rilasciato ad una macchina,il quale attesta che ha un indirizzo IP simbolico preciso. Chi si fa garante che il certificato non venga manipolato è il system manager. Perchè IPsec funzioni correttamente ogni macchina dovrebbe avere questi certificati digitali. ISAKMP prevede anche scambi di password in stile Diffie-Hellman.
C'è anche IKE,una rivisitazione del Diffie-Hellman. Può usare una password comune o crittografia a chiave pubblica,con certificati digitali. Tutto questo viene fatto dal protocollo IP.

Links:


Risorse Linux - Unix

Per chi fosse interessato,ho raccolto alcuni links utili per l'apprendimento di questo sistema operativo. Coloro che vogliono contribuire a infoltirlo maggiormente,sono calorosamente benvenuti: