Università Degli Studi di Perugia Anno accademico 2008/2009 Studente Paolo Fiocchetti Professore Stefano Bistarelli Seminario: Unix Security
Indice Sicurezza a strati Funzionamento dei permessi in Unix File di log Individuazione dell'hacker
Cenni storici Unix nasce nel 1969 con Ken Thompson e, in seguito, Denis Richie Multiutente Robusto Versatile Sicurezza intrinseca Laboratori Bell e Università
Cenni sul livello software più basso...cioè?
Livello 2 – Boot Loader LILO floppy da BIOS chmod 600 /etc/lilo.conf password restricted Grub All'avvio si preme il tasto “c” Si avvia una shell Si setta la password Anche i boot loader possono avere una password
User Account 1 Ogni utente per usare un sistema Unix deve creare un account al quale verranno assegnati: UID (user identities) GID (group identities) Numeri a 16 bit che identificano univocamente con un numero un certo utente (UID) e l'appartenenza a un certo gruppo (GID). Certi UID hanno significati particolari come quello di root che è sempre 0 (zero).
User Account 2 Gli account utente sono contenuti all'interno del file /etc/passwd user name:password:UID:GID:ID string:home directory:login shell Problema! Tutti possono accedere e leggere le password seppur criptate... quindi?
User Account 3... si affianca al normale /etc/passwd la gestione del file /etc/shadow: username:password:lastchange:min:max:warn:in active:expire leggibile solo da root password criptate con algoritmi più complessi e robusti è possibile gestire il tempo di scadenza, la durata minima e massima e i tempi di notifica della password
Gli oggetti 1 In Unix ogni file punta a una struttura chiamata appunto Inode: mode type of file and access rights uid username of the owner atimeaccess time gid owner group physical location block count size of file itime inode alteration time mtime modification time
Gli oggetti 2 Tramite il comando ls -l otteniamo: drwx paolo bombers 167 Nov 00:01 privatopeol/ -rwxrw-r-- 2 paolo bombers 12 Dec 07:13 lyrics.txt Il primo bit: ‘-’ file ‘d’ directory ‘s’ socket ‘b’ block device file ‘l’ symbolic link ‘c’ character device file ‘p’ FIFO
I permessi 1 Tramite il comando ls -l otteniamo: drwx paolo bombers 167 Nov 00:01 privatopeol/ -rwxrw-r-- 2 paolo bombers 12 Dec 07:13 lyrics.txt ● Username ● Gruppo ● Grandezza
I permessi 2 drwx paolo bombers 167 Nov 00:01 privatopeol/ -rwxrw-r-- 2 paolo bombers 12 Dec 07:13 lyrics.txt I bit dei permessi sono raggruppati in triplette in cui la prima tratta il proprietario, la seconda il gruppo l'ultima gli altri ‘-’ indica che non si ha quel permesso drwx : il proprietario ha tutti i permessi -rwxrw-r-- : tutti possono leggere il file, il gruppo e l'utente lo possono modificare e il proprietario può eseguirlo
I permessi 3 Il proprietario del file e il superutente possono modificare i permessi del file (chmod) Il superutente soltanto può modificare il proprietario del file (chown)
I permessi 4 3-bit per i permessi 1 da il permesso, 0 lo rifiuta Read only Read/Write Read/Write/Execute Bit come valori binari: Read only => => 4 Read/Write => => 6 Read/Write/Execute => => 7
I permessi 5 Il range dei bit va da 0-7 quindi un numero ottale è sufficiente: rw-r--r-- uguale a 644 rwxrwxrwx uguale a 777 Altri 3 bit opzionali servono per: dare permessi a utenti (UID) dare permessi a utenti (GID) sticky bit
I permessi 6 Conversion table: 0040 read by group 4000 set UID on execution 0020 write by group 2000 set GID on execution 0010 execute by group 1000 set sticky bit 0004 read by other0400 read by owner 0002 write by other 0200 write by owner 0001 execute by other0100 execute by owner
Permessi su directory In lettura: ls In scrittura: cp In esecuzione ➢ cd ➢ aprire un file al suo interno
Sticky bit 1 Nome deriva dal suo vecchio uso Poco utile per file Molto utile per directory È sicuramente vera una di queste asserzioni: ➢ l'utente è proprietario del file ➢ l'utente è proprietario della directory ➢ l'utente è l'amministratore
Sticky bit 2 Esempio: /tmp ha lo Sticky bit impostato, quindi: $ls -ld /tmp drwxrwxrwt 6 root root 1024 Aug 10 01:03 /tmp sticky bit è indicato usando la lettera t al posto della x nei permessi per gli altri
chmod & chown chmod altera i permessi di un file o una cartella ➢ chmod 754 filename ➢ chmod u+rwx, g+rx, o+r filename chown assegna al file un altro proprietario ➢ chown nproprietario nomefile ➢ chown nproprietario:ngruppo filename
Permessi di default 1 Il permesso di default è 666. Mentre il valore di umask si ottiene eseguendo il programma es: Quindi creando un file ottengo i permessi:
Permessi di default 2 Ricapitolando: La maschera di default è 666 Creo un file Digitando umask ottengo 0022 Ottengo un file con i permessi -rw-r--r-- Perché: = 644 che equivale a: -rw-r--r--
Permessi di default 3 È ovviamente possibile ridefinire la maschera di default con il comando umask nuovamascheradidefault
Due tool molto carini xlock blocca una sessione di X vlock blocca la console virtuale Entrambe danno accesso alla sessione precedente inserendo la password corretta
Aiuto! Arrivano gli utenti locali Dare loro solo i privilegi di cui hanno bisogno Fare attenzione dove e quando fanno un login Rimuovere gli account inutilizzati Eseguire il tool last Controllare i file di log
File di log 1 I file di log si trovano principalmente in: /var/log (Solaris, Linux, BSD, and free BSD) /usr/adm (usato da vecchi sistemi Unix) /var/adm (/usr/ montata read-only) Consultare il file /etc/syslog.conf
File di log 2 acct o pacct aculog lastlog loginlog messages sulog utmp * tmpx wtmp * wtmpx vold.log xferlog
File di log – lastlog 1 Unix salva l'ultimo login di ciascun utente nel file di log lastlog. Tramite il comando finger: $finger jack Login name: jack Name: Paolo Directory: /Users/jack Shell: /bin/bash Last login Tue Jul 12 07:49:59 on tty01 No Mail. No Plan.
File di log – lastlog 2 Purtroppo lastlog salva soltanto l'ultimo login Problema! Risolto per esempio con: mv /var/adm/lastlog.3 /var/adm/lastlog.4 mv /var/adm/lastlog.2 /var/adm/lastlog.3 mv /var/adm/lastlog.1 /var/adm/lastlog.2 cp /var/adm/lastlog /var/adm/lastlog.1
File di log – utmp & wtmp 1 /etc/utmp tiene traccia di chi è attualmente loggato Usato da: who, whodo, w, users, and finger /var/adm/wtmp tiene traccia di tutti i login e logout Fondamentalmente fornisce le stesse informazioni del comando last I due file possono essere visualizzati tramite il tool utmpdump.
File di log – utmp & wtmp 2 Quanto occupano questi file? ● utmp al massimo qualche kilobyte ● wtmp cresce finché c'è spazio sull'hard disk WTMP: problema da non sottovalutare!
File di log – loginlog 1 I sistemi Unix V (Solaris) usano questo file per salvare i tentativi non andati a buon fine (dopo 5 tentativi) di password. Implementabile con: # touch /var/adm/loginlog # chmod 600 /var/adm/loginlog # chown root /var/adm/loginlog
File di log – loginlog 2 # cat /var/adm/loginlog simsong:/dev/pts/8:Mon Nov 27 00:42: simsong:/dev/pts/8:Mon Nov 27 00:42: simsong:/dev/pts/8:Mon Nov 27 00:42: simsong:/dev/pts/8:Mon Nov 27 00:42: simsong:/dev/pts/8:Mon Nov 27 00:42: #
File di log – acct & pacct 1 Questi speciali file di log servono a salvare ogni comando lanciato da un utente Supervisiona: utilizzo CPU giochi (su server) vecchi programmi
File di log – acct & pacct 2 Cosa ci dicono account comando tty data ora Cosa NON ci dicono directory argomenti I programmi lastcomm o acctcom ci permettono di leggere questi file di log
File di log - access_log Monitoraggio Download Siti Usando il comando getstat: mac-22.cs.utexas.edu - - [09/Apr/1995:14:33: ] "GET /unix-haters-title.gif HTTP/1.0" Quindi occhio con facebook... in byte
File di log – syslogd 1 Berkeley sendmail program /etc/syslogd or /etc/syslog Ogni programma ➢ Nome ➢ Struttura ➢ Priorità ➢ Messaggio di log Esempio: $login login: Root LOGIN REFUSED on ttya
File di log – syslogd 2 Quando all'avvio parte syslog controlla la sua configurazione all'interno del file /etc/syslog.conf *.err;kern.debug;auth.notice /dev/console daemon,auth.notice /var/adm/messages lpr.* /var/adm/lpd-errs auth.* root,nosmis *.emerg * *.alert |dectalker mark.* /dev/console
Conclusione sui log ● Amministratore ● Server log ● Swatch ● Octopussy ● Handmake Prevenire è meglio che curare!!! Ma i file di log non prevengono affatto!!!
Adesso, facciamo sul serio!
Individuazione dell'hacker 1 Un hacker esperto cancella le sue tracce Edita i file di log Entra con privilegi root Contromisure: redirigere i log anche su un server modificare la configurazione del syslogd nel file /etc/syslogd.conf aggiungendo linee di questo genere:
Individuazione dell'hacker 2 Va anche detto che questo deve essere INESPUGNABILE
Individuazione dell'hacker 3 Un hacker con privilegi root crea dei file con SETUID bit settato in modo da riottenere quel permesso in futuro Oppure cerca dei file esistenti con quel bit Cosa ovvia: per l'hacker è sufficiente lasciare una shell di proprietà di root con il SETUID settato e con permessi di esecuzione per tuttishell di proprietà di root Come ci si deve comportare?
Individuazione dell'hacker 4 creare un elenco di questi file con relative proprietà (path, data e dimensione) attraverso dei find confrontare periodicamente questo elenco con una versione che consideriamo affidabile se ci sono differenze c'è stato un attacco tutto dipende dall'affidabilità del file in questione TRIPWIRE
Individuazione dell'hacker 5 Un' altra attività tipica degli hacker è attivare degli sniffer Copiare sulla macchina in file illeggibili, come “.. “ (punto punto spazio), le password Per verificare la presenza di file di questo genere si può utilizzare il seguente comando: $find / -name ".*" -print | cat -v A mio avviso il problema principale
Individuazione dell'hacker 6 Passwords cifrate attraverso la funzione C crypt La funzione crypt: Cifra la password utilizzando un algoritmo crittografico(DES, MD5,...) Utilizza una tecnica chiamata “Password salting” per perturbare l'algoritmo. Alla codifica della password viene affiancato un salt il cui scopo è quello di complicare gli attacchi basati su dizionario.
Individuazione dell'hacker 7 CRACK ➢ Crack -makeonly (configura e crea gli eseguibili) ➢ Crack -makedict (crea il dizionario) ➢ Crack -nice 10 /etc/passwd ➢ Crack-Reporter Crack-Reporter TRIPWIRE ➢ tripwire --init ➢ tripwire --check > ~/report_tripwirereport_tripwire
Quindi Cambiare password spesso ➢ Sniffare una password che non posso usare è una cosa abbastanza inutile Usare password complicate ➢ Il vocabolario non contiene la parola “sf%556*érrt3” Ricordarsi le password!
Conclusioni Tutto è possibile!