32
Università degli studi di Roma “La Sapienza” Dipartimento di Informatica Roberto Battistoni ([email protected]) Corso di sicurezza dei dati e delle reti 2008/2009: prof. Luigi V. Mancini Bruno Vavalà ([email protected])

Whips and Windows Architecture

Embed Size (px)

Citation preview

Page 1: Whips and Windows Architecture

Università degli studi di Roma “La Sapienza”

Dipartimento di Informatica

Roberto Battistoni‏([email protected])‏

Corso di sicurezza dei dati e delle reti 2008/2009: prof. Luigi V. Mancini

Bruno Vavalà([email protected])‏

Page 2: Whips and Windows Architecture

2Roberto Battistoni – www.robertobattistoni.it

Page 3: Whips and Windows Architecture

Windows VISTA è l’evoluzione di Windows NT 4.0. Il primo SO basato su tecnologia NT

nasce nel 1993 con Windows NT 3.5. NT deriva da un progetto Digital Research, in

origine era VMS NT è diventato poi Windows NT.

3

Nei moderni SO la separazione dell’ambiente di esecuzione del kernel da quello dell’utente è ottenuto da modalità operative del processore note come anelli o ring. Windows ne supporta solo due: la modalità utente (ring 3) e la modalità kernel (ring 0). I processori Intel x86 prevedono ring da 0 a 3.

Roberto Battistoni – www.robertobattistoni.it

Page 4: Whips and Windows Architecture

4Roberto Battistoni – www.robertobattistoni.it

Page 5: Whips and Windows Architecture

5Roberto Battistoni – www.robertobattistoni.it

Page 6: Whips and Windows Architecture

6Roberto Battistoni – www.robertobattistoni.it

Page 7: Whips and Windows Architecture

7

1 1 1 1 1 15 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0+---------------------------------------------------------------+| SubAuthorityCount |Reserved1 (SBZ)| Revision |+---------------------------------------------------------------+| IdentifierAuthority[0] | 16 bit+---------------------------------------------------------------+| IdentifierAuthority[1] | 16 bit+---------------------------------------------------------------+| IdentifierAuthority[2] | 16 bit+---------------------------------------------------------------+| |+- - - - - - - - SubAuthority[] - - - - - -+ 32 bit| |+---------------------------------------------------------------+

• Identificano le entità che eseguono operazioni nel sistema e rappresentano ogni utente, gruppo, macchina o dominio. • Vi sono i Well Known SID, ovvero SID predefiniti nel sistema.

Roberto Battistoni – www.robertobattistoni.it

Page 8: Whips and Windows Architecture

8

• Token source: breve descrizione dell’entità che ha creato il token.

• Impersonation Type: tipologia di impersonation da applicare.

• Token ID: identificativo univoco del token.

• Authentication ID: identificativo assegnato dal creatore del token.

• Expiration Time: scadenza del token, attualmente non usato, i token non scadono mai.

• Default primary group e Default DACL: gruppo predefinito (solo POSIX) e DACL predefinita per oggetti creati dal processo o thread proprietario del token.

• User account SID: SID dell’utente che ha attivato il processo.

• Group 1..n SID: SID dei gruppi a cui appartiene l’utente.

• Restricted 1..n SID: SID ristretti per limitare l’azione del token.

• Privilege: lista dei privilegi assegnati al token e quindi al processo (SeBackup, SeDebug, SeShutdown, SeTakeOwnership, etc.).

Roberto Battistoni – www.robertobattistoni.it

Page 9: Whips and Windows Architecture

9

Un privilegio in Windows è il diritto di operare sull’intero sistema indipendentemente dagli oggetti contenuti in esso.

• Il contesto di protezione di un processo o thread è costituito dalle informazioni che descrivono i suoi privilegi, account e gruppi ed è rappresentato dal Token di Accesso;

• Il Security Reference Monitor (SRM) utilizza i Token di Accesso per concedere/negare l'accesso agli oggetti nel sistema a seconda del contesto di protezione del processo/thread;

• Tutti i programmi aperti dall'utente ereditano una copia del token iniziale generato all'atto del log-on dell'utente e della creazione della sua shell (explorer.exe);

• Vi sono due tipologie di Token: Token primario e Impersonation Token

• L'impersonation permette di migrare il contesto di sicurezza di un processo. Un processo eredita o il token primario oppure gli viene assegnato un token mediante Impersonation.

• In VISTA se un utente è Amministratore il processo assegnato all’utente ha 2 Access Token: uno non privilegiato e l’altro come Amministratore (UAC con DialogBox per Credenziali privilegiate)

Roberto Battistoni – www.robertobattistoni.it

Page 10: Whips and Windows Architecture

10

• Numero di revisione: la versione del SRM che ha creato il descrittore.

• Flag: modificatori che definiscono il funzionamento del descrittore di protezione.

• SID proprietario: l’ID di sicurezza del proprietario dell’oggetto.

• SID di gruppo: l’ID di sicurezza del gruppo primario (solo per POSIX).

• DACL (Discretionary ACL): lista di utenti e gruppi autorizzati o meno ad accedere all’oggetto ed il tipo di accesso.

• SACL(System ACL): specifica quale tipo di operazioni eseguite da utenti o gruppi sull’oggetto devono essere controllate (auditing).

N u m e ro d i R e v is io n eN u m e ro d i R e v is io n eN u m e ro d i R e v is io n e

D A C L o p z io n a leD A C L o p z io n a leD A C L o p z io n a le

S A C L o p z io n a leS A C L o p z io n a leS A C L o p z io n a le

F la gF la gF la g

S I D p r o p r ie ta r ioS I D p r o p r ie ta r ioS I D p r o p r ie ta r io

S I D d i g r u p p oS I D d i g r u p p oS I D d i g r u p p o

D A C L P o in te rD A C L P o in te rD A C L P o in te r

S A C L P o in te rS A C L P o in te rS A C L P o in te r

Windows implementa il controllo degli accessi di tipo discrezionale mediante i “descrittori di protezione”. Ad ogni oggetto (di Windows) è assegnato un descrittore di protezione che stabilisce cosa può essere fatto sull’oggetto e da chi. Il controllo è discrezionale per il proprietario e l'amministratore di sistema.

Roberto Battistoni – www.robertobattistoni.it

Page 11: Whips and Windows Architecture

11

• Le liste di controllo degli accessi (ACL) sono sparse sugli oggetti e definiscono i diritti che utenti e gruppi hanno sui singoli oggetti.

• Le ACE (Access Control Entry) costituiscono gli elementi della lista degli accessi dell'oggetto. La lista viene controllata sequenzialmente e l'ordine determina il comportamento.

• Se una DACL non è assegnata dal contesto o dal processo padre viene presa quella definita nel Token di Accesso mediante la DACL predefinita.

Roberto Battistoni – www.robertobattistoni.it

Page 12: Whips and Windows Architecture

12Roberto Battistoni – www.robertobattistoni.it

Page 13: Whips and Windows Architecture

13

• Un processo privilegiato è un processo con qualche privilegio di Windows.

• Un processo pericoloso o attaccabile è un processo privilegiato che contiene privilegipericolosi.

• I servizi di Windows, analoghi ai demoni Unix, sono processi attaccabili. Sono attaccabiliquindi quei processi che hanno particolari privilegi “pericolosi” per il sistema.

• Quasi tutti i servizi in Windows effettuano l’autenticazione con l’utente predefinitoLocalSystem, che ha quasi tutti i privilegi di Windows. LocalSystem appartiene al gruppoAdministrators.

• In Windows XP e VISTA, a differenza di Windows NT/2000, molti servizi effettuano il log-on con due utenti predefiniti meno privilegiati rispetto a LocalSystem: LocalService eNetworkService.

• Una vulnerabilità in un servizio permette ad un utente malizioso di ottenere i diritti diAdministrator. Quasi tutti gli attacchi vengono fatti su servizi che sono in ascolto su portedi rete: Privilege Escalation.

Roberto Battistoni – www.robertobattistoni.it

Page 14: Whips and Windows Architecture

14

“S-1-5-18” (Well Known SID)

Se esiste un Group SID parial ServiceSID

“S-1-5-6”.

• Il processo è un servizio, o il threadè stato generato da un servizio.

• Nel caso che lo User SID sia LocalSystem allora può essere anche un processo di sistema.

Roberto Battistoni – www.robertobattistoni.it

Page 15: Whips and Windows Architecture

15Roberto Battistoni – www.robertobattistoni.it

Page 16: Whips and Windows Architecture

• Una chiamata di sistema critica è una chiamata di sistema che puòessere invocata con parametri pericolosi.

• Una chiamata di sistema pericolosa è una chiamata di sistemacritica invocata da un processo pericoloso.

• Una chiamata di sistema critica è pericolosa per il sistema solo se ilprocesso che la invoca è un processo pericoloso.

16Roberto Battistoni – www.robertobattistoni.it

Page 17: Whips and Windows Architecture

• Il meccanismo per l’invocazione delle chiamate di sistema consiste nell’esecuzione di un’interruzione che effettua un cambio di contesto del processore (dalla modalità utente a quella kernel).

• Le chiamate di sistema in Windows sono denominate API native, e sono delle funzioni di programmazione esportate dal kernel del SO e messe a disposizione delle applicazioni utente mediante delle funzioni di libreria (ntdll.dll). Le API native sono circa 250 e hanno nomi con prefissi Nt e Zw (ex. NtCreateFile e ZwCreateFile).

17Roberto Battistoni – www.robertobattistoni.it

Page 18: Whips and Windows Architecture

18Roberto Battistoni – www.robertobattistoni.it

Page 19: Whips and Windows Architecture

19

NtCreateFile:

mov eax,0x0000001A

lea edx,[esp+04]

int 0x2E

ret 0x2C

• Le API Native sono esportate dal Kernel con due tipi di nomi Zw* e Nt*. Le prime richiamano sempre il dispatcher KiSystemService() mentre le seconde no. Non tutte le API native sono esportate dalla libreria NTOSKRNL.LIB del DDK di Windows. Per cui non tutte sono intercettibili a livello Kernel (con l’indirizzo sì).

• Il meccanismo per l'invocazione di un'API nativa avviene tramite la NTDLL.DLL e consiste nel sollevare un interrupt software passando i parametri dell'API nativa tramite dei registri di sistema.

“Newer versions of Windows no longer use INT 2E or go through the IDT to request the services in the system call table. Instead, they use the fast call method. In this case, NTDLL loads the EAX register with the system call number of the requested service and the EDX register with the current stack pointer, ESP. NTDLL then issues the Intel instruction SYSENTER.”

Roberto Battistoni – www.robertobattistoni.it

Page 20: Whips and Windows Architecture

20

• KiSystemService() usa la struttura System Service Descriptor Table (SDT) rappresentata dalla struttura KeServiceDescriptorTable. Vi sono 4 di queste SDT: la prima è la KeServiceDescriptorTable per la Kernel 32, la seconda KeServiceDescriptorTableShadow utilizzata per la Win32K.sys e le altre due attualmente non sono utilizzate.

• La KeServiceDescriptorTable ha due puntatori a tabelle:

• System Service Dispatch Table (SSDT) o System Service Table (SST) o KiServiceTable

• System Service Parameter Table (SSPT) o KiArgumentTable

Roberto Battistoni – www.robertobattistoni.it

Page 21: Whips and Windows Architecture

21Roberto Battistoni – www.robertobattistoni.it

Page 22: Whips and Windows Architecture

06/11/05

• Meno thread switching in attesa di completion port

• Prima di Windows Vista, una volta che l’IO veniva completato, il thread, che lo aveva causato, doveva eseguire il lavoro di completamento dell’IO, causando uno switch per l’esecuzione del processo a cui il thread apparteneva, interrompendo ogni altra esecuzione. A questo punto, l’IO Manager aggiornava lo stato della completion port, risvegliando il thread in attesa.

• Con Vista, invece, il completamento può essere effettuato direttamente dal thread in attesa.

• Capacità di cancellazione di operazioni di IO sincrone

• Alcuni comandi o programmi, che lavorano con la rete in particolare, si bloccano in attesa di risposta/timeout. Nel frattempo l’operazione potrebbe non avere più importanza.

• Su Vista i driver possono registrare una notifica di terminazione dei processi.

• Priorità di IO

• Spesso, alcuni programmi (es. media player) soffrono di ritardi causati da accessi al disco, magari impegnato da applicazioni in background.

• Soluzione: priorità di IO e riserva di banda.

Page 23: Whips and Windows Architecture

06/11/05

• Spazio di indirizzamento del kernel dinamico

• Prima era fissato al boot-time. Ora è stabilito in base alle esigenze del kernel. Interessante per un ACD molto grande.

• Priorità della memoria

• In mancanza di memoria, le pagine di un processo venivano assegnate ad una Standby List per il riutilizzo. Ora questa è suddivisa secondo priorità: basse priorità assegnate a pagine utilizzate per letture anticipate su disco.

• Superfetch

• La soluzione di assegnare priorità alle pagine di memoria non tiene conto dell’attività recente e futura del processo. Superfetch tiene traccia della memoria recentemente liberata, magari forzatamente a causa di un processo memory-intensive, e la ricarica (a bassa priorità) quando la memoria è disponibile.

• ReadyBoost

• Previa disponibilità di memoria flash, Vista crea una cache intermedia tra disco e memoria per velocizzare le operazioni di IO.

• ReadyDrive

• Vista sfrutta la memoria flash degli harddisk ibridi di nuova generazione per velocizzare: il boot, la cache del disco (oltretutto risparmiando energia).

Page 24: Whips and Windows Architecture

06/11/05

• Kernel Transaction Manager

• Un miglioramento del rollback delle transazioni implica un più veloce ed efficiente recupero dagli errori.

• Enhanced Crash Support

• Nelle versioni precedenti il supporto per i crash dump files non era abilitato fino all’avvio del Session Manager (processo). In Vista, tutto è rimandato al servizio Windows Error Reporting, che viene caricato subito dopo i boot-start drivers.

• Code Integrity Verification (Kernel Mode Code Signing)

• I driver vengono caricati se sono firmati da un publisher che ha acquisito un certificato da una valida Certification Authoroty. Mandatorio su Vista 64bit.

• PatchGuard

• Effettua un monitoring delle risorse chiave del sistema e, se venissero modificate, ne effettuerebbe lo shutdown. Non è abilitato sui sistemi 32bit.

• Address Space Load Randomization

• Le API esportante dalle DLL vengono solitamente caricate nelle stesse locazioni. Questa nuova feature randomizza il luogo di caricamento di tali DLL, quindi hard-coded syscalls dovrebbero mandare il sistema in crash.

• Service Security: viene applicato ai servizi il principio “least priviledge”, assegnando ad ognuno un service SID, per settare permessi sulle risorse proprie del servizio.

Page 25: Whips and Windows Architecture

25Roberto Battistoni – www.robertobattistoni.it

Page 26: Whips and Windows Architecture

• Un Reference Monitor per le chiamate di sistema critiche si pone come un’interfaccia di sicurezza per un sistema operativo.

• Esempio: REMUS (REference Monitor for Unix System) è un HIPS basato sul concetto di Reference Monitor per la sicurezza.

26Roberto Battistoni – www.robertobattistoni.it

Page 27: Whips and Windows Architecture

• WHIPS (Windows_nt family Host based IPS) è un HIPS per sistemi operativi della famiglia di SO Windows NT.

• Utilizza il paradigma del Reference Monitor (RM) per le chiamate di sistema critiche. Le chiamate di sistema di per sé non sono critiche; sono i loro parametri che le possono rendere tali e diventano pericolose se sono invocate da processi privilegiati.

27Roberto Battistoni – www.robertobattistoni.it

Page 28: Whips and Windows Architecture

WHIPS è realizzato attraverso un modulo del kernel (driver) in Windows 2000/XP. WHIPS modifica la System Service Table (SST) nel kernelsostituendo le API native originarie con nuove API native che effettuano i controlli del RM.

28Roberto Battistoni – www.robertobattistoni.it

Page 29: Whips and Windows Architecture

29

OK!

LAN, Intranet, Internet, attacco

locale.

Ecco il servizio da

attaccare!!!!

WHIPS!

Richiesta API nativa pericolosa!

Richiesta API nativa innocua!

Roberto Battistoni – www.robertobattistoni.it

Page 30: Whips and Windows Architecture

30Roberto Battistoni – www.robertobattistoni.it

Page 31: Whips and Windows Architecture

31

1) Bernaschi, Gabrielli, Mancini, “REMUS: a security-enhanced operating system”, ACM Transactions on Information and System Security, Vol.

5, No. 1, pp. 36-61, Feb. 2002. http://remus.sourceforge.net/

2) Battistoni, Gabrielli, Mancini, "A Host Intrusion Prevention System for Windows Operating Systems", ESORICS 2004, 9th European

Symposium On Research in Computer Security Sophia Antipolis, French Riviera , France - September 13-15, 2004.

http://whips.sourceforge.net.

3) Borate, Dabak, Phadke, “Undocumented Windows NT”, M&T Books, 1999.

4) Cogswell, Russinovich, “Windows NT System-Call Hooking”, Dr. Dobb’s Journal, p. 261, 1997.

5) Howard, LeBlanc, “Writing Secure Code”, Microsoft Press, 2001.

6) Nebbet, “Windows NT/2000: Native API reference”, Macmillan Technical Publishing (MTP), 2000.

7) Oney, “Programming the Microsoft Windows Driver Model”, Microsoft Press, 1999.

8) www.osronline.com, “Nt vs. Zw - Clearing Confusion On The Native API”, The NT Insider, Vol 10,

9) Issue 4, July-August 2003, Published: 15-Aug-03.

10) Russinovich, Solomon, “Inside Windows 2000: Third Edition”, Mondadori-Microsoft Press, 2001.

11) Russinovich, “Inside the Native API”, Systems Internals, 1998, http://www.sysinternals.com/ntdll.htm.

12) Schmidt, “Microsoft Windows 2000 Security Handbook”, Que, 2001.

13) Schreiber,‏“Undocumented‏Windows2000‏ Secrets”,‏Addison‏Wesley,2001‏.

14) Rootkits: Subverting the Windows Kernel, By Greg Hoglund, James Butler, Publisher: Addison Wesley Professional, Pub Date: July 22, 2005,

ISBN: 0-321-29431-9, http://www.rootkit.com/

15) Forenisx Project, http://syn.cs.pdx.edu/projects/4N6/

Roberto Battistoni – www.robertobattistoni.it

Page 32: Whips and Windows Architecture

32Roberto Battistoni – www.robertobattistoni.it