• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Whips and Windows Architecture
 

Whips and Windows Architecture

on

  • 1,515 views

 

Statistics

Views

Total Views
1,515
Views on SlideShare
1,503
Embed Views
12

Actions

Likes
0
Downloads
9
Comments
0

5 Embeds 12

http://www.robertobattistoni.it 6
http://www.slideshare.net 2
http://www.linkedin.com 2
http://localhost:9999 1
http://localhost 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Whips and Windows Architecture Whips and Windows Architecture Presentation Transcript

    • Università degli studi di Roma “La Sapienza” Dipartimento di Informatica Roberto Battistoni‫‏‬ Bruno Vavalà (rbattistoni@acm.org)‫‏‬ (vavalab@gmail.com)‫‏‬ Corso di sicurezza dei dati e delle reti 2008/2009: prof. Luigi V. Mancini
    • Roberto Battistoni – www.robertobattistoni.it 2
    • 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. 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 3
    • Roberto Battistoni – www.robertobattistoni.it 4
    • Roberto Battistoni – www.robertobattistoni.it 5
    • Roberto Battistoni – www.robertobattistoni.it 6
    • • 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. 1 1 1 1 1 1 5 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 | | +---------------------------------------------------------------+ Roberto Battistoni – www.robertobattistoni.it 7
    • 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 8
    • 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 9
    • 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. Numero di revisione: la versione del SRM che ha • NN u m e rod d iRR e v is io n e u m e ro i e v is io n e creato il descrittore. FF la g la g • Flag: modificatori che definiscono il funzionamento SS ID pp ro p rie ta rio del descrittore di protezione. ID ro p rie ta rio • SID proprietario: l’ID di sicurezza del proprietario SS ID dd igg ru p p o ID i ru p p o dell’oggetto. DDAACCLL PP o in te r • SID di gruppo: l’ID di sicurezza del gruppo primario o in te r (solo per POSIX). SS ACCLL PP o in te r A o in te r • DACL (Discretionary ACL): lista di utenti e gruppi autorizzati o meno ad accedere all’oggetto ed il tipo di accesso. DDAACCLL oo p z io n a le p z io n a le • SACL(System ACL): specifica quale tipo di operazioni eseguite da utenti o gruppi sull’oggetto devono essere controllate (auditing). SS ACCLL oo p z io n a le A p z io n a le Roberto Battistoni – www.robertobattistoni.it 10
    • • 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 11
    • Roberto Battistoni – www.robertobattistoni.it 12
    • • Un processo privilegiato è un processo con qualche privilegio di Windows. • Un processo pericoloso o attaccabile è un processo privilegiato che contiene privilegi pericolosi. • I servizi di Windows, analoghi ai demoni Unix, sono processi attaccabili. Sono attaccabili quindi quei processi che hanno particolari privilegi “pericolosi” per il sistema. • Quasi tutti i servizi in Windows effettuano l’autenticazione con l’utente predefinito LocalSystem, che ha quasi tutti i privilegi di Windows. LocalSystem appartiene al gruppo Administrators. • 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 e NetworkService. • Una vulnerabilità in un servizio permette ad un utente malizioso di ottenere i diritti di Administrator. Quasi tutti gli attacchi vengono fatti su servizi che sono in ascolto su porte di rete: Privilege Escalation. Roberto Battistoni – www.robertobattistoni.it 13
    • • “S-1-5-18” (Well Il processo è un servizio, o il thread Known SID) è stato generato da un servizio. • Nel caso che lo User SID sia Local System allora può Se esiste un essere anche un Group SID pari processo di al ServiceSID sistema. “S-1-5-6”. Roberto Battistoni – www.robertobattistoni.it 14
    • Roberto Battistoni – www.robertobattistoni.it 15
    • • Una chiamata di sistema critica è una chiamata di sistema che può essere invocata con parametri pericolosi. • Una chiamata di sistema pericolosa è una chiamata di sistema critica invocata da un processo pericoloso. • Una chiamata di sistema critica è pericolosa per il sistema solo se il processo che la invoca è un processo pericoloso. Roberto Battistoni – www.robertobattistoni.it 16
    • • 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). Roberto Battistoni – www.robertobattistoni.it 17
    • Roberto Battistoni – www.robertobattistoni.it 18
    • • Le API Native sono esportate dal Kernel con due tipi NtCreateFile: di nomi Zw* e Nt*. Le prime richiamano sempre il mov eax,0x0000001A dispatcher KiSystemService() mentre le seconde no. lea edx,[esp+04] Non tutte le API native sono esportate dalla libreria int 0x2E NTOSKRNL.LIB del DDK di Windows. Per cui non ret 0x2C 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 19
    • • 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 20
    • Roberto Battistoni – www.robertobattistoni.it 21
    • • 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. 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). 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. 06/11/05
    • Roberto Battistoni – www.robertobattistoni.it 25
    • • 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. Roberto Battistoni – www.robertobattistoni.it 26
    • • 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. Roberto Battistoni – www.robertobattistoni.it 27
    • WHIPS è realizzato attraverso un modulo del kernel (driver) in Windows 2000/XP. WHIPS modifica la System Service Table (SST) nel kernel sostituendo le API native originarie con nuove API native che effettuano i controlli del RM. Roberto Battistoni – www.robertobattistoni.it 28
    • Ecco il servizio da attaccare!!!! WHIPS! LAN, Intranet, Internet, attacco locale. Richiesta Richiesta OK! API nativa API nativa innocua! pericolosa! Roberto Battistoni – www.robertobattistoni.it 29
    • Roberto Battistoni – www.robertobattistoni.it 30
    • Bernaschi, Gabrielli, Mancini, “REMUS: a security-enhanced operating system”, ACM Transactions on Information and System Security, Vol. 1) 5, No. 1, pp. 36-61, Feb. 2002. http://remus.sourceforge.net/ 2) Battistoni, Gabrielli, Mancini, quot;A Host Intrusion Prevention System for Windows Operating Systemsquot;, ESORICS 2004, 9th European Symposium On Research in Computer Security Sophia Antipolis, French Riviera , France - September 13-15, 2004. http://whips.sourceforge.net. Borate, Dabak, Phadke, “Undocumented Windows NT”, M&T Books, 1999. 3) Cogswell, Russinovich, “Windows NT System-Call Hooking”, Dr. Dobb’s Journal, p. 261, 1997. 4) Howard, LeBlanc, “Writing Secure Code”, Microsoft Press, 2001. 5) Nebbet, “Windows NT/2000: Native API reference”, Macmillan Technical Publishing (MTP), 2000. 6) Oney, “Programming the Microsoft Windows Driver Model”, Microsoft Press, 1999. 7) www.osronline.com, “Nt vs. Zw - Clearing Confusion On The Native API”, The NT Insider, Vol 10, 8) 9) Issue 4, July-August 2003, Published: 15-Aug-03. Russinovich, Solomon, “Inside Windows 2000: Third Edition”, Mondadori-Microsoft Press, 2001. 10) Russinovich, “Inside the Native API”, Systems Internals, 1998, http://www.sysinternals.com/ntdll.htm. 11) Schmidt, “Microsoft Windows 2000 Security Handbook”, Que, 2001. 12) Schreiber,‫“‏‬Undocumented‫‏‬Windows‫ 0002‏‬Secrets”,‫‏‬Addison‫‏‬Wesley,‫.1002‏‬ 13) 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 31
    • Roberto Battistoni – www.robertobattistoni.it 32