Massimo Bernaschi [email protected]
Transcript
Massimo Bernaschi [email protected]
Informazioni su Unix/Linux e Windows utili per l’analisi di sistemi compromessi Massimo Bernaschi [email protected] 1/8/08 Unix/Linux vs. Window I sistemi operativi Unix/Linux e Windows sono sensibilmente diversi tra loro anche se offrono funzionalità molte simili a livello utente. Le differenze sono a livello: nucleo (kernel) del sistema che interagisce con l'hardware; interfaccia utente: shell testuale o grafica. 2 Interfaccia utente In Windows l'interfaccia grafica è fortemente integrata con il sistema operativo. In Linux l'interfaccia è totalmente gestita a livello utente ed esistono diverse GUI (Graphical User Interface) praticamente tutte basate sul sistema di gestione dello schermo X-Windows. Le principali GUI per Linux sono: Gnome e KDE. Anche per l'interfaccia testuale esistono diverse alternative in Linux: shell bash, tcsh, korn Sotto Windows esiste un solo interprete di comandi di sistema anche se le moderne versioni (incluse in Windows NT, 2000, XP) offrono maggiore flessibilità (ad esempio completamento della linea comandi). Recentemente la Microsoft ha annunciato la disponibilità di una nuova PowerShell. 3 Alcuni dei comandi eseguibili dall'interprete di linea WINDOWS UNIX/LINUX attrib chmod backup tar dir ls cls clear copy cp del rm deltree rm -rf / rmdir edit ed / vi move/rename mv cd cd md mkdir type cat more more / less 4 Utenti e privilegi Sia Linux che Windows supportano diversi tipi (o classi) di utenti: privilegiati (root o Administrator) e standard. Anche se supporta la definizione di più utenti, Windows rimane, in sostanza, un sistema monoutente nel senso che un solo utente per volta può utilizzare il sistema, a meno di non installare il Terminal Server. Gli utenti possono essere inseriti in “gruppi”. L'accesso alle risorse (e.g., file) avviene sulla base di “privilegi”e “diritti” (che non sono la stessa cosa...). 5 File e file system Windows supporta i file system FAT (FAT12, FAT16, FAT32) e NTFS. •Mantiene il vecchio concetto di “volume” (C:, D:,…). •NTFS è il file system più moderno con funzionalità di journaling e possibilità di cifratura dei contenuti. •Attenzione la cifratura non richiede password aggiuntive! •Windows non fa distinzione tra maiuscole e minuscole nei nomi dei file. •Il set di caratteri utilizzabili all'interno di un nome di file o cartella è molto più ristretto rispetto a Unix/Linux. •E’ possibile scrivere da Linux in una partizione NTFS attraverso il supporto offerto da Captive-NTFS: http://www.jankratochvil.net/project/captive/. •Per scrivere in un file system ext2 da Windows si può usare invece il modulo disponibile su http://www.tuningsoft.com/projects/projects.htm 6 NTFS Nel NTFS ogni componente di sistema è un file (anche le informazioni sul file system stesso). Il file più importante nel NTFS è il Master File Table (MFT). Ogni file è rappresentato da un record nel MFT e può essere visto come una collezione di “attributi”. •Anche i dati di un file sono visti come un attributo. •Possono esistere più flussi di dati associati ad un file (ADS). •Distinzione tra file di testo e file binari. La struttura del NTFS può essere visualizzata con da http://www.iac.rm.cnr.it/oem3sr2.zip nfi, parte dei support tools disponibili 7 NTFS La MFT può essere vista come una lista di tutti i contenuti del volume NTFS (directory di tutti gli altri file appartenenti al volume) organizzata come un insieme di righe in un database relazionale. 8 NTFS - Master File Table O gni record della tabella ha lunghezza fissa (che viene definita quando il volume viene formattato) e descrive un file oppure una “cartella”. • I file sufficientemente piccoli ( circa 1500 byte) sono interamente contenuto nel record del MFT. NTFS riserva i primi 16 record per informazioni speciali. 9 NTFS Reference number Un file è identificato da un valore a 64-bit chiamato file reference. Il file number corrisponde alla posizione del record del file nella MFT (meno 1) Il sequence number è utilizzato per test di consistenza interna del NTFS. 10 NTFS - Principali attributi del file •Standard Information (#16): include informazioni come i timestamp ed il link count. • i timestamp forniscono le date di creazione, modifica, aggiornamento, lettura. •Attribute List: lista tutti i record di attributi che non trovano spazio nel record MFT. •File Name (#48): un attributo “ripetibile” (può essere presente più volte). Nella forma lunga il nome può arrivare a 255 caratteri Unicode. Nella forma breve si usa il classico formato 8.3 (case-insensitive). •Security Descriptor (#50): descrive il proprietario del file e chi lo può accedere. •Data (#128): contiene i dati del file. NTFS permette di avere più “flussi” di dati per file (Alternate Data Stream). •Object ID (#64): un identificatore di file unico per ogni volume. •Index Root (#144): la radice del B-Tree. Usato per implementare cartelle ed altri indici. •Index Allocation (#160): i sottonodi del B-Tree. Usato per implementare cartelle ed altri indici. •Bitmap (#176): fornisce una mappa che rappresenta i record in uso nel MFT o nella cartella 11 NTFS - Security Descriptor •Il Security Descriptor contiene una o due Access Control List (ACL) e due Security Identifier (SID) che indicano il proprietario del file ed il gruppo. • La prima ACL è opzionale e contiene informazioni per l’auditing. • La seconda ACL contiene una o più Access Control Entry (ACE). Ogni ACE indica un utente ed un’azione (“chi-può-fare-cosa”) •Un tipico SID appare come: S-1-5-21-646518322-1873620750-619646970-1110 (non proprio banale da interpretare…). Il modello di sicurezza di NTFS è di tipo “discrezionale” ed è più flessibile di quello standard Unix/Linux. Per manipolare le ACL è possibile usare il comando standard CACLS. Oppure la versione “estesa” XCACLS (http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/xcacls-o.asp) 12 NTFS - Permessi sui file C inque modi predefiniti di accesso キ キ キ キ キ Nessuno accesso Lettura Scrittura Controllo Completo Accesso speciale Permission R X W D P O No Access Read Yes Yes Change Yes Yes Yes Full Control Yes Yes Yes Yes Yes Yes Special Access (any combination) Yes Yes Yes Yes Yes Yes R X W D P O Mostra i dati del file, gli attributi, il proprietario ed i permessi Permette di eseguire il file Permette di scrivere il file o cambiare gli attributi Permette di cancellare il file Permette di cambiare i permessi Prende l’ownership del file 13 FILES UNIX/LINUX Tre tipi (principali) di files: • Files ordinari • Directories • Files speciali Il sistema assegna a ciascun file un identificatore numerico, detto i-number ("inode-number"), che permette di rintracciarlo nel file system. L’inode stesso è una struttura dati che contiene informazioni sul file 14 FILES ORDINARI • Semplici sequenze di byte ("byte stream"); • Possono contenere informazioni di qualsiasi tipo (dati, programmi sorgente, programmi oggetto,...); • Il sistema non impone nessuna struttura; • Il nome del file non è contenuto nel file. 15 Informazioni nell’i-node Tipo di file Numero di (hard) link al file UID del proprietario GID del proprietario Permessi di accesso Dimensione del file in bytes Tabella degli indirizzi dei blocchi dati Ora e data dell'ultimo accesso Ora e data dell'ultima modifica Ora e data dell'ultima modifica dell'i-node 16 DIRECTORIES • Sono sequenze di bytes come i files ordinari • Non sempre possono essere manipolate dai programmi ordinari che agiscono sui file (e.g., mv funziona, ma rm o cp non funzionano senza l’aggiunta di particolari opzioni) • Il loro contenuto è una serie di directory entries: che definiscono l'associazione fra gli i-number (usati dal sistema) e i filename mnemonici (usati dall'utente): entry •••• entry •••• i-number (2 bytes in SV) filename (14 bytes in SV) 17 FILENAME SINONIMI (links) Un file può avere più nomi (ma sempre un solo i-number) a 89 Esempio: b c 107 e d 210 f 402 89 ••• b 107 Il file 107 ha 3 links 107 c 107 d 210 ••• 210 •••e 107 f 402 ••• 402 18 Permessi di accesso ai file ls –la -rwxrw-r-x user group filename drwxrwxr-x user group dirname (u) (g) (o) r=read, w=write, x=execute (per i file ordinari) r=leggi, w=crea/cancella, x=ricerca (per le directory) r=leggi, w=scrivi, x=n/a (per i file speciali, quali i device) chmod a+w filename (a sta per all=user+group+other) chmod g-xw filename chown, chgrp: cambiano rispettivamente proprietario/gruppo ESERCIZIO (non come root!; eseguire su - guest): echo “ciao” > pippo; ls –la pippo; chmod u+r pippo; chmod a-rwx pippo; cat pippo; cat pippo; 19 Permessi di accesso ai file (2) % ls -l total 4 -rw-r--r-- 1 roberto usrmail 17 Mar 11 16:16 file1 -rw-r--r-- 1 roberto usrmail 17 Mar 11 16:17 file2 permessi owner numero di links al file tipo di file - file ordinario d directory b device a blocchi c device a caratteri s link simbolico ... group owner dim del file (car) data/ora ultima modifica nome file 20 File System • / è la directory root; punto di riferimento per tutte le directory. Ogni file ha un proprio pathname univoco: – /home/user1/papers 21 Organizzazione albero Unix/Linux / /etc /dev /usr /bin /sbin /home /proc /root /mnt /tmp /lib /var directory radice (root) file di configurazione file corrispondenti ai dispositivi (device) software di sistema binari essenziali binari di sistema essenziali tipicamente contiene user home LINUX:informazioni su processi e sistema directory personale utente root mount point per filesystem area per file temporanei le librerie essenziali dati variabili (log e spool area) N.B. La struttura varia da versione a versione 22 Linux file systems Linux è forse il sistema operativo in grado di gestire il più alto numero di file system eterogenei. Linux proprietario: CD-ROM: ext2, ext3, reiserfs ISO9660 con estensioni Inoltre: ADFS - Acorn Disc File System AFFS - Amiga fast filesystem BeFS - BeOS filesystem BFS - UnixWare Boot Filesystem CrosStor filesystem DTFS - Desktop filesystem EFS - Enhanced filesystem (Linux) EFS - Extent filesystem (IRIX) FFS - BSD Fast filesystem GPFS - General Parallel Filesystem HFS - HP-UX Hi perf. filesystem NTFS (file system NT-Windows) HTFS - High throughput filesystem JFS - Journaled filesystem (HP-UX, AIX, OS/2 5, Linux) LFS - Linux log structured filesystem MFS - Macintosh filesystem Minix filesystem NWFS - Novell NetWare filesystem NSS - Novell Storage Services ODS - On Disk Structure filesystem QNX filesystem Reiser filesystem RFS (CD-ROM Filesystem) RomFS - Rom filesystem SFS - Secure filesystem Spiralog filesystem (OpenVMS) System V and derived filesystems Text - (Philips' CD-ROM Filesystem) VFAT (Windows) UDF - Universal Disk Format (DVD-ROM filesystem) UFS V7 Filesystem VxFS - Veritas filesystem (HP-UX, SCO UnixWare, Solaris) XFS - Extended filesystem (IRIX) Xia FS Network filesystems Encrypted filesystems 23 File nascosti Sia Linux che Windows permettono di “nascondere” dei file, cioè di rendere non visibili alcuni file (tipicamente di sistema) quando si richiede la lista di quelli presenti in una directory (o cartella). Tuttavia il modo in cui è offerta questa funzionalità è profondamente diverso: in Linux un file o una directory diventano invisibili quando il nome comincia con un punto . è possibile utilizzare l'opzione -a del comando ls per visualizzare tutti i file. in Windows l’invisibilità è un attributo, modificabile come una delle altre proprietà del file. 24 Protezione di un processo sotto Linux: generalità A ciascun processo sono associati alcuni attributi: • Real User ID e Effective User ID Normalmente sono identici, e coincidenti con lo User ID dell'utente che lo ha lanciato • Real Group ID e Effective Group ID Normalmente sono identici, e coincidenti con il Group ID dell'utente che lo ha lanciato Questi attributi vengono controllati prima di permettere ad un processo di effettuare operazioni su file o altri processi. La combinazione delle informazioni sull’identità dell’utente e sui modi di accesso al file determina, ad esempio, se l’accesso ad un file è consentito oppure no. 25 set user id Tra gli attributi di ogni file esistono due bit detti “set user id” e “set group id” Se il bit di “set user id” è attivato in un file eseguibile, il processo che lo eseguirà avrà: • il Real User Id uguale allo User Id dell'utente che ha lanciato il processo, e • l'Effective User Id uguale allo User Id dell'owner del file eseguibile Se il bit di "set group id" è attivato in un file eseguibile, il processo che lo eseguirà avrà: • il Real Group Id uguale al Group Id dell'utente che ha lanciato il processo, e • l'Effective Group Id uguale al Group Id dell'owner del file eseguibile In questo modo si può realizzare uno speciale meccanismo di protezione. 26 Un altro tipo di protezione per i files L'esigenza: Fare in modo che un dato file sia accessibile in una specificata modalità solo attraverso uno specifico programma Esempio: permettere di modificare il file delle password /etc/passwd La soluzione: programma "setuid": quando viene eseguito, il programma si comporta come se fosse eseguito dall'owner del suo eseguibile (e non da chi lo ha lanciato) 27 Esempio Programma normale SETUID OFF SETUID ON PROG. OWNER DELL’ESEGUIBILE FILE LEGGIBILE SOLO DALL’OWNER Programma set user id FILE X PROCESSO CHE ESEGUE PROG. SETUID ON SETUID ON PROG. OWNER EFFECTIVE USER REAL USER OWNER DELL’ESEGUIBILE FILE LEGGIBILE SOLO DALL’OWNER PROCESSO CHE ESEGUE PROG. FILE OWNER EFFECTIVE USER REAL USER (Es.: login e /etc/passwd; lpr e file di spooling,...) 28 Il filesystem /proc • /proc è un filesystem “virtuale” che permette di accedere alla configurazione del kernel ed allo stato del sistema • Ogni file rappresenta una risorsa del sistema • I file sono accessibili come file testo • Consente, entro certi limiti, di interagire con il kernel stesso per passargli delle informazioni (modificando ad esempio il comportamento dello stack TCP/IP o le impostazioni della memoria virtuale in modo da aumentare le performance) Il kernel si occupa di generare on line il contenuto ed i nomi dei file corrispondenti, e questo ha il grande vantaggio di rendere accessibili i vari parametri a qualunque comando di shell e di permettere la navigazione dell'albero dei valori. 29 Il filesystem /proc 30 Esempio: le informazioni sul processore $cat /proc/cpuinfo processor : 0 vendor_id : AuthenticAMD cpu family : 6 model : 6 model name : AMD Athlon(tm) XP 1600+ stepping : 2 cpu Mhz : 1395.595 cache size : 256 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 1 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow bogomips : 2785.28 31 Il comando sysctl • sysctl è un comando che permette di leggere e scrivere i parametri del kernel • Realizza l’interfaccia con il kernel su sistemi Unix in genere • I parametri a cui la system call sysctl permettere di accedere sono organizzati in maniera gerarchica all'interno di un albero; per accedere ad uno di essi occorre specificare un cammino attraverso i vari nodi dell'albero, in maniera analoga a come avviene per la risoluzione di un pathname. 32 sysctl e i parametri del kernel In Linux si può accedere alle stesse informazioni sul kernel in due maniere • Attraverso il comando sysctl (provare il comando sysctl -a | more) • Attraverso l'uso del filesystem /proc Generalmente la sysctl viene usata per scrivere, mentre i files in /proc per leggere 33 /proc/sys L'albero dei valori di sysctl viene presentato in forma di file nella directory /proc/sys, cosicché è possibile accedervi specificando un pathname e leggendo e scrivendo sul file corrispondente al parametro scelto. Ma oltre alle informazioni ottenibili da sysctl dentro /proc sono disponibili moltissime altre informazioni, fra cui ad esempio anche quelle fornite da uname che sono mantenute nei file ostype, hostname, osrelease, version e domainname di /proc/kernel/. 34 Esempio Le directory "numeriche" sono i singoli processi in esecuzione nella macchina nell'istante in cui abbiamo lanciato il comando ls /proc. Per vedere il contenuto di ogni singola directory occorre essere root (o i proprietari del processo). opus:/proc # ls -la 114 total 0 dr-xr-xr-x 3 named named 0 Nov 30 12:20 . dr-xr-xr-x 89 root root 0 Nov 30 2000 .. -r—r—r— 1 root root 0 Nov 30 12:20 cmdline lrwx——— 1 root root 0 Nov 30 12:20 cwd -> /var/named -r———— 1 root root 0 Nov 30 12:20 environ lrwx——— 1 root root 0 Nov 30 12:20 exe -> /usr/sbin/named dr-x——— 2 root root 0 Nov 30 12:20 fd pr—r—r— 1 root root 0 Nov 30 12:20 maps -rw———- 1 root root 0 Nov 30 12:20 mem lrwx——— 1 root root 0 Nov 30 12:20 root -> / -r—r—r— 1 root root 0 Nov 30 12:20 stat -r—r—r— 1 root root 0 Nov 30 12:20 statm -r—r—r— 1 root root 0 Nov 30 12:20 status 35 Il contenuto … … è praticamente lo stesso. Solo i valori dei singoli parametri cambiano a seconda del processo scelto. Esaminando i vari “files" della sottodirectory di /proc che identifica un processo possiamo scoprire varie cose relative al processo stesso: -r—r—r— 1 root root 0 Nov30 12:20 cmdline Questo contiene l'intera linea di comando invocata per avviare il processo. lrwx——— 1 root root 0 Nov 30 12:20 cwd -> /var/named è un link simbolico alla directory di lavoro di quel particolare processo. -r———— 1 root root 0 Nov 30 12:20 environ questo contiene tutte le variabili di ambiente che sono definite per quel particolare processo, nella forma VARIABILE=valore. Come per cmdline, anche queste sono elencate senza nessuna formattazione né spazi tra i vari parametri. lrwx——— 1 root root 0 Nov 30 12:20 exe -> /usr/sbin/named link al file eseguibile che è in esecuzione. 36 Il contenuto dr-x——— 2 root root 0 Nov 30 12:20 fd Questa directory contiene l'elenco dei file descriptors che sono usati dal processo in esame . pr—r—r— 1 root root 0 Nov 30 12:20 maps Questa pipe contiene la "mappa" delle aree di memoria che sono attualmente "mappate" a file su disco. lrwx——— 1 root root 0 Nov 30 12:20 root -> / Questo link mostra quale è la directory "root" per quel particolare processo. Un processo potrebbe avere una root che non corrisponde alla "vera" root. -r—r—r— 1 root root 0 Nov 30 12:20 status Questo file fornisce informazioni relative allo stato del processo, cioè se è "dormiente" o se è attivo, il suo PID, UID, PPID ed altre informazioni simili. Queste informazioni sono le stesse che possono essere visualizzate usando ps e top. 37 Comandi di diagnostica Unix mette a disposizione vari comandi utili per capire cosa fa un processo e come si comporta il sistema. Utili per scovare eventuale attività illecita su un sistema compromesso. Su Linux si possono comunemente trovare i seguenti tools: strace Traccia le chiamate di sistema e i segnali del programma specificato mentre lo esegue (/usr/bin/strace) ldd Stampa l'elenco delle librerie condivise utilizzate dal comando specificato (/usr/bin/ldd) lsof Elenca i file aperti del sistema (/usr/sbin/lsof) 38 strace Traccia le chiamate di sistema e i segnali del programma specificato mentre lo esegue. Es: bash$ strace ls 2> /tmp/strace.out Ovviamente va utilizzato solo per fini particolarmente la velocità di esecuzione). diagnostici (rallenta Spesso non è nemmeno necessario capire l'output di strace (piuttosto verboso), basta cercare righe dove si riportano errori e vengono indicati path o funzioni specifiche. 39 ldd Stampa l'elenco delle librerie condivise utilizzate dal comando specificato Esempio massimo[1004]->ldd /bin/ls libtermcap.so.2 => /lib/libtermcap.so.2 (0x40028000) libc.so.6 => /lib/i686/libc.so.6 (0x4002c000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) 40 lsof Elenca i file aperti dal sistema. Visualizza una tabella dettagliata di tutti i file aperti in quel momento e fornisce informazioni sui loro proprietari, sulle dimensioni, sui processi ad essi associati ed altro ancora. I file aperti possono essere: • un normale file, • una directory • un file speciale a blocchi o caratteri • una libreria • un socket, ... E' utile per vedere le risorse utilizzate da un processo e per capire cosa sta facendo bash$ lsof COMMAND PID USER FD TYPE Init 1 root mem Init 1 root mem Init 1 root mem Cardmgr 213 root mem ... DEVICE REG REG REG REG SIZE 3,5 3,5 3,5 3,5 NODE 30748 73120 931668 36956 NAME 30303 8069 8075 30357 /sbin/init /lib/ld-2.1.3.so /lib/libc-2.1.3.so /sbin/cardmgr 41 Gestione servizi log I demoni ed il kernel mandano informazioni al demone syslogd. Syslog scrive tali informazioni su file, seguendo le indicazioni specificate nel proprio file di configurazione /etc/syslog I file di log vengono scritti usualmente in: /var/log Un logrotate su sistemi critici permette di effettuare una copia remota dei file di log (copia periodica, compressa e spedita via mail). NB: Loglevel troppo alti potrebbero violare la privacy degli utenti !! 42 /etc/syslog.conf Il file si può suddividere in due campi, separati da uno o più spazi bianchi o TAB: SELECTOR: Diviso a sua volta in due parti separate da un punto: facility (identifica chi o cosa ha prodotto il messaggio) e priority (identifica il livello di priorità del messaggio) ACTION: Identifica il “logfile” dove vengono scritti i log corrispondenti. Oltre ad un normale file può essere un device come la stampante o una console. Esempio Tutti i log riguardanti la posta sono scritti in /var/log/maillog mail.* /var/log/maillog 43 Un esempio: RedHat Linux [neo@dido neo]$ cat /etc/syslog.conf [...] Nel file /var/log/messages vengono loggati tutti i messaggi di livello informativo, tranne quelli relativi alla posta (mail), all'accesso al sistema (authpriv) e al cron *.info;mail.none;authpriv.none;cron.none /var/log/messages [...] Tutti i log, di qualsiasi priorità, che hanno a che fare con l'accesso al sistema, sono loggati in /var/log/secure authpriv.* /var/log/secure [...] Tutti i log riguardanti la posta sono scritti in /var/log/maillog mail.* /var/log/maillog [...] Tutti i log di comandi eseguiti in cron sono scritti in /var/log/cron cron.* /var/log/cron 44 Un esempio: RedHat Linux [...] Tutti i log con priorità di emergenza vengono inviati ai terminali di ogni utente collegato al sistema *.emerg * I log relativi al boot (a cui è associata, su questo sistema la facility local7) sono scritti in /var/log/boot.log local7.* /var/log/boot.log Alcune interessanti opzioni che si possono configurare su questo file sono del tipo: Tutti i log del sistema vengono inviati al syslog server chiamato pippo (il nome deve essere risolvibile) *.* @pippo Tutti i movimenti di posta vengono scritti sulla console tty10 mail.* /dev/tty10 Tutti gli accessi al sistema sono stampati direttamente su una stampante locale authpriv.* /dev/lp0 45 Controllo accessi: last last mostra gli ultimi utenti collegati, il servizio utilizzato (telnet, ftp), la durata del collegamento e l’indirizzo di provenienza last guest mostra solo le connessioni dell’utente guest In caso di violazione del sistema, può risulta inutile poiché è il primo file che chiunque pensa a cancellare o falsificare. per maggiori informazioni: man last 46 Riferimento D. A. Solomon, M.E. Russinovich Inside Microsoft … Capitolo Capitolo Capitolo Capitolo Capitolo Capitolo Capitolo Capitolo Capitolo Capitolo Capitolo Capitolo Capitolo 1 - Concetti e strumenti 2 - Architettura del sistema 3 - Meccanismi del sistema 4 - Avvio e arresto del sistema 5 - Meccanismi di gestione 6 - Processi, thread e job 7 - Gestione della memoria 8 - Protezione 9 - Sistema I/O 10 - Gestione dell'archiviazione 11 - Gestore cache 12 - File system 13 - Funzionalità di rete In italiano Esiste un nuovo Microsoft Windows Internals ma in inglese. 47 Windows NT/2000/XP/Vista: schema a blocchi Concetti chiave i. Win32 API ii. Servizi, funzioni e routines iii. Processi, threads e jobs iv. Memoria virtuale v. Kernel/user mode vi. Oggetti e handles vii. Registry viii. Unicode 48 Spazio degli indirizzi • Spazio degli indirizzi a 32bit piatto (lineare) • 32 bits per lo spazio degli indirizzi si traduce in 4 GB di memoria virtuale Sulla maggior parte dei sistemi Windows alloca • metà dello spazio (la metà inferiore dei 4-GB, da x00000000 a x7FFFFFFF) ai processi utente (user process space) • e l’altra metà (la metà superiore, da x80000000 a xFFFFFFFF) per le operazioni protette del kernel e dei drivers (system space) I due spazi degli indirizzi della memoria virtuale di Windows NT/2000/XP Tratto da: David A. Solomon and Mark E. Russinovich. Inside Microsoft Windows 2000, 3rd ed. 49 Kernel Mode vs. User Mode NOTE L’architettura Intel x86 definisce 4 privilege levels, o rings, per proteggere il codice di sistema e i suoi dati dalla sovrascrittura da parte di codice di un livello di privilegio inferiore. Windows NT/2000/XP usa • il livello 0 (ring 0) per il kernel mode • il livello level 3 (ring 3) per lo user mode 50 Kernel mode Codice di sistema e drivers che girano in Kernel-mode condividono lo stesso spazio virtuale degli indirizzi Windows non fornisce nessun meccanismo di protezione dello spazio virtuale per codice che gira in kernel mode In altre parole, I processi in kernel mode possono scavalcare il livello di sicurezza offerto da Windows ed accedere a tutti gli oggetti allocati in maniera incontrollata Quindi la programmazione dei moduli del SO e quelli dei drivers dovrebbe garantire che non vengano violati i requisiti di sicurezza del sistema Bisogna essere molto sicuri della “non malignità” del codice driver che si installa Questa vulnerabilià ha portato al concetto di signature per i drivers e ai Driver Verifiers 51 Processi di sistema I processi di sistema sono dei processi speciali, sempre in esecuzione, che supportano il sistema operativo. Vengono eseguiti in user mode tranne il processo chiamato system. • Il processo idle contiene un unico thread che prende il controllo nello stato idle della CPU. • Il processo system (la scelta del nome può confondere) è un processo speciale che gira solo in kernel mode. I suoi threads sono chiamati system threads. • Il Session Manager (SMSS.EXE ). • Il Win32 subsystem (CSRSS.EXE ). • Il processo WinLogon (WINLOGON.EXE ). 52 Il Session Manager Il processo Session Manager (SMSS.EXE ) è uno dei primi processi ad essere creato in fase di boot del sistema. Compie importanti funzioni di inizializzazione, come, ad esempio: • impostare l’ambiente e creare le variabili di ambiente, • definire i nomi di devices (stile ms-dos) come LPT1 and COM1, • caricare la porzione del kernel corrispondente al sottosistema Win32 • far partire il processo di logon WinLogon. 53 Il processo Winlogon Questo processo gestisce il logon e logoff degli utenti e processa il Ctrl-Alt-Delete. WinLogon è responsabile per l’attivazione della Windows shell (che normalmente è il Windows Explorer) 54 Il processo system Il processo system costituisce il kernel di basso livello e corrisponde all’eseguibile NTOSKRNL.EXE. Esegue la maggior parte dei compiti più importanti come: • Schedulazione dei threads (Thread scheduling) • Gestione delle eccezioni (Exception handling) • Gestione degli interrupts (Interrupt handling) • Sincronizzazione di più processori • Creazione degli oggetti del kernel 55 Il Win32 subsystem Il sottosistema Win32 consiste delle Win32 API, sotto forma di un insieme di DLL le più importanti delle quali sono: • KERNEL32.DLL • GDI32.DLL • USER32.DLL. 56 Windows Registry • Il Registry è un database gerarchico che contiene informazioni di configurazione del sistema e degli utenti – informazioni (statiche) richieste per il boot e la configurazione; – informazioni (dinamiche) sullo stato del sistema in esecuzione; • Organizzato in “hives” (alveari) – Le diverse parti del registry sono contenuti in files differenti • Molti parametri del registry possono essere modificati con una utility grafica – Tuning/configurazione avanzate richiedono accesso diretto • Regedt32 o Regedit Vedi anche: http://www.windowsitlibrary.com/Content/224/1.html 57 Registry Data Types Il Registry è un database gerarchico che contiene: • chiavi (keys), concettualmente simili alle directory •valori (values), corrispondenti ai files di un filesystem Una chiave è un contenitore che consiste di altre chiavi (subkeys) o di valori. I valori, invece, sono “dati” (di diverso tipo). 58 Registry Data Types Le chiavi di livello più alto si chiamano root keys. I termini chiave e sottochiave (subkey e key) sono intercambiabili, solo le root keys non sono subkeys. Usando la metafora del file system ci si riferisce alle chiavi con una sintassi come quella usata per indicare il pathname di un file, ad esempio: rootkey\subkey\subkey…\key 59 Registry Data Types Le chiavi possono assumere uno dei seguenti 11 tipi di valore: Value Type Description REG_NONE REG_SZ REG_EXPAND_SZ No value type Fixed-length Unicode NULL-terminated string Variable-length Unicode NULL-terminated string that can have embedded environment variables REG_BINARY Arbitrary-length binary data REG_DWORD 32-bit number REG_DWORD_LITTLE_ENDIAN 32-bit number, low byte first. This is equivalent to REG_DWORD. REG_DWORD_BIG_ENDIAN 32-bit number, high byte first REG_LINK Unicode symbolic link REG_MULTI_SZ Array of Unicode NULL-terminated strings REG_RESOURCE_LIST Hardware resource description REG_FULL_RESOURCE_DESCRIPTOR Hardware resource description REG_RESOURCE_REQUIREMENTS_LIST Resource requirements 60 Registry Data Types La maggior parte dei valori delle chiavi REG_DWORD, REG_BINARY, o REG_SZ. del Registry sono Valori del tipo REG_DWORD possono contenere numeri o Boolean (on/off); REG_BINARY possono contenere numeri più grandi di 32 bit o dati raw come password criptate; REG_SZ contiene stringhe (di tipo Unicode) che possono rappresentare nomi, pathnames e tipi. 61 Organizzazione del Registry Cinque hives principali per le informazioni sulla macchina • \HKEY_LOCAL_MACHINE\System – Controlla il boot e l’esecuzione dei processi • \HKEY_LOCAL_MACHINE\Hardware – Configurazione dell’hardware, utilizzo delle risorse – Volatile (non sopravvive al reboot) • \HKEY_LOCAL_MACHINE\Software – Dati software (non è critica per il boot) • \HKEY_LOCAL_MACHINE\SAM – Database degli accounts e dei gruppi (replicato sui domain controllers) • \HKEY_LOCAL_MACHINE\Security – Politiche di sicurezza system-wide (sui domain controllers) 62 Files su disco corrispondenti Hive Registry Path HKEY_LOCAL_MACHINE\SYSTEM Hive File Path HKEY_LOCAL_MACHINE\SAM %SYSTEMROOT% \System32\Config\Sam HKEY_LOCAL_MACHINE\SECURITY %SYSTEMROOT%\System32\Config\Security HKEY_LOCAL_MACHINE\SOFTWARE %SYSTEMROOT%\System32\Config\Software HKEY_LOCAL_MACHINE\HARDWARE Volatile hive HKEY_LOCAL_MACHINE\SYSTEM\Clone Volatile hive HKEY_USERS\<security ID of username> \Documents and Settings\<username>\Ntuser.dat HKEY_USERS\<security ID of username>_Classes \Documents and Settings\<username>\Local Settings\Application Data\Microsoft\Windows\Usrclass.dat HKEY_USERS\.DEFAULT %SYSTEMROOT%\System32\Config\Default %SYSTEMROOT%\System32\Config\System 63 Registrazione di “eventi” sotto Windows Windows utilizza l'Event Viewer per mostrare gli eventi registrati in tre tipi di registro: • registro applicazione; • registro eventi sistema; • registro protezione: per default la registrazione degli eventi di protezione è disabilitata! 1. Pannello di controllo 2. Strumenti di amministrazione 3. Criteri di protezione locali 4. Impostazioni protezione 5. Criteri locali 6. Criteri di controllo Per ogni opzione nel pannello di destra si può selezione la registrazione dell’evento “successo” o “fallimento”. 64 Tools per Windows 1/8/08 Tools Preview Tool Eseguibile Fonte Funzionalità Performance Monitor Perfmon.exe Windows 2000 Monitor di sistema, visualizza contatori di performance Task Manager Taskman.exe Windows 2000 Fornisce informazioni sui processi e sulle loro prestazioni Pslist pslist.exe www.sysinternals.com Mostra l’albero dei processi con l’opzione /t Registry Monitor Regmon.exe www.sysinternals.com Mostra l’attività del registry File Monitor Filemon.exe www.sysinternals.com Mostra l’attività del file system Handle Handle.exe www.sysinternals.com Mostra informazioni sugli handles (simile a lsof sotto Unix/Linux) Process Explorer Procexp.exe www.sysinternals.com Mostra informazioni sui processi in esecuzione List dlls Listdlls.exe www.sysinternals.com Mostra le dll utilizzate da ogni task 66 Tools Preview 2 Tool Fonte Funzionalità psloglist www.sysinternals.com mostra gli eventi registrati nell’Event Log. physmem www.sysinternals.com mostra il contenuto della memoria sia in esadecimale che in ASCII. Equivale a usare il comando od -cx /dev/mem sotto Unix/Linux. depends 1. 2. 3. 4. www.dependencywalker.com mostra tutte le dipendenze di un programma eseguibile. collegarsi come “corso” (password corso) Aprire un finestra “DOS” cd Desktop/FOREDIR/forensics Per installare regmon: andare su www.sysinternals.com sezione “System Information” 67 Performance Monitor (perfmon.exe) Monitor di sistema, visualizza contatori di performance 68 Kernel Mode vs. User Mode Esercitazione • Trovare i processi che spendono la maggior parte del tempo in kernel-mode – – – – – – – Esegui Performance Monitor (perfmon.exe) Clicca su “+” (aggiungi contatore) Seleziona “Processo” come oggetto prestazione Clicca su %Tempo Privilegiato Seleziona i processi System, Explorer e Csrss Clicca su “Aggiungi”, clicca su “Chiudi” Usa le frecce su/giù per scrollare sui contatori (usa CTRL/H per abilitare l’evidenziazione) 69 Kernel Mode vs. User Mode Esercitazione System spende tutto il suo tempo in kernel mode Csrss spende quasi tutto il suo tempo in kernel mode Explorer spende tempo sia in user che in kernel mode 70 Task manager 71 Organizzazione del Registry (regedit.exe, regedt32.exe) Esercitazione Visualizza e modifica il registry regedt32.exe regedit.exe 72 Organizzazione del Registry (regmon.exe) Esercitazione www.sysinternals.com Mostra l’attività del registry 73 File monitor (filemon.exe) www.sysinternals.com Mostra l’attività del file system 74 Procexp.exe Esercitazione Identificare le componenti 75 Altre utilities Tool Eseguibile Funzionalità pmon pmon.exe Win2K Support Tools Mostra i processi in esecuzione. Simile al top di Unix memsnap memsnap.exe Win2K Support Tools Salva su file uno snapshot dei counters di memoria dei processi kill Kill.exe Win2K Support Tools kill ipconfig ipconfig.exe Windows 2K Mostra la configurazione di rete filever Filever.exe Win2K Support Tools Mostra le informazioni sui file attributi compresi Win2K SP4 Support Tools http://www.microsoft.com/windows2000/downloads/servicepacks/SP4/supporttools.asp 76 Process Viewer (psviewer.exe) Mostra i dettagli dei processi e dei threads processi threads 77 HandlEx.exe www.sysinternals.com Nella finestra superiore mostra una lista dei processi attivi. In quella inferiore • gli handles del processo selezionato • le DLLs che il processo selezionato ha caricato Mostra informazioni sugli handles e sulle DLL in uso 78 tlist.exe (tasklist.exe in WinXP) tlist –t mostra l’albero dei processi ed i dettagli sui threads 79 tlist.exe C:\Documents and Settings\corso>tlist /? Microsoft (R) Windows NT (TM) Version 5.1 TLIST Copyright (C) Microsoft Corp. 1981-1999 usage: TLIST <<-m <pattern>> | <-t> | <pid> | <pattern> | <-p <processname>>> [options]: -t Print Task Tree <pid> List module information for this task. <pattern> The pattern can be a complete task name or a regular expression pattern to use as a match. Tlist matches the supplied pattern against the task names and the window titles. -m <pattern> Lists all tasks that have DLL modules loaded in them that match the given pattern name -s Show services active in each process. -p <processname> Returns the PID of the process specified or –1 if the specified process doesn't exist. If there are multiple instances of the process running only the instance with the first PID value is returned. 80