Massimo Bernaschi [email protected]

Commenti

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
[[email protected] 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