Il processo di Logon e la sicurezza per l’utente interattivo e per i servizi Marco Russo DevLeap http://blogs.devleap.com/marco [email protected] Agenda Processo di Logon Lsass Winlogon Sessioni, Windows Station e Desktop Differenze e ruoli Processo di logon Perché è importante il processo di logon Garantisce sicurezza dell’accesso al sistema Consente di comprendere le cause di eventuali problemi e le fonti di possibili attacchi Cosa succede al Boot Avviamento Kernel (MBR, Boot, Ntldr, NtDetect, Ntbootdd, Ntoskrnl, Hal) Avviamento servizi di sistema Processo System – contiene tutti i driver Gestito da Local Security Authority (LSA) Avviamento SMSS Session manager, avvia Winlogon e CSRSS Avviamento CSRSS Sottosistema Win32 – processo user-mode controparte di Win32.sys che è la parte kernel Avviamento WINLOGON Avvia SCM (Service Control Manager) e LSASS (Local Security Authority Sub-System) Cosa succede al Logon CTRL-ALT-CANC Gestito da Local Security Authority (LSA) Richiesta utente e password (o PIN smartcard) Creazione access token Operazione fisicamente a carico di SMSS, processo user-mode che accede a API native, non accessibili da altri processi Avviamento processo shell (explorer.exe) con access token così ottenuto HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\Shell Un processo per default eredita access token da processo padre Explorer è il processo che crea altri processi Elementi principali della security di Windows Local Security Authority (LSA) – processo locale eseguito in modalità utente Autentica utenti locali Local Security Authority (LSA) – processo eseguito su Domain Controller Autentica utenti su macchine in rete Security Reference Monitor – componente kernel Gestione del controllo sull’accesso agli oggetti kernel Componenti security (kernel + user) WinLogon MSGINA LSASS Event Logger Active Directory LSA Policy LSA Server User Mode SAM Server Active Directory MSVC1_0.dl Kerberos.dll SAM System Threads Kernel Mode System Service Dispatcher (kernel mode callable interfaces) Kernel Hardware Abstraction Layer (HAL) NtosKrnl.Exe hardware interfaces (buses, I/O devices, interrupts, interval timers, DMA, memory cache control, etc., etc.) Local Procedure Call Configuration Mgr (registry) Processes & Threads Virtual Memory Security Reference Monitor Power Mgr. Object Mgr. File System Cache Device & File Sys. Drivers Plug and Play Mgr. I/O Mgr Windows USER, GDI Graphics Drivers Componenti security LSA – Local Security Authority Processo modalità utente (\Windows\System32\Lsass.exe) che implementa policy (password, logon), autenticazione e invio informazioni audit al security event log LSASS policy database: registry HKLM\SECURITY WinLogon MSGINA LSA Policy LSASS NetLogon Active Directory LSA Server SAM Server Event Logger Active Directory MSVC1_0.dl Kerberos.dll SAM Componenti LSASS SAM Service Insieme di funzioni (\Windows\System32\Samsrv.dll ) responsabili del database contenente utenti e gruppi definiti sulla macchina locale Database SAM database: Contiene utenti e gruppi locali, con rispettivi password e attributi. Memorizzato nel registry: HKLM\SAM. Password cracker: attaccano l’hash della password dell’utente locale memorizzato nel SAM SAM Service Process Explorer http://www.sysinternals.com/Utilities/ProcessExplorer.html Componenti LSASS Active Directory Servizio di directory che gestisce un database con le informazioni sugli oggetti di un dominio Un dominio è un insieme di computer e dei gruppi associati, gestiti come una singola entità Il server di Active Directory è implementato come servizio (\Windows\System32\Ntdsa.dll) eseguito nel processo Lsass Package autenticazione DLL eseguite nel processo Lsass cge implementano la policy di autenticazione di Windows: LanMan: \Windows\System32\Msvc1_0.dll Kerberos: \Windows\System32\Kerberos.dll Negoziazione: usa LanMan o Kerberos (il più appropriato) Componenti LSASS Net Logon service (Netlogon) Servizio Windows (\Windows\System32\Netlogon.dll) eseguito in Lsass che risponde alle richieste di logon provenienti dal protocollo Microsoft LAN Manager 2 Windows NT (pre-Windows 2000) Autenticazione gestita come logon locali Netlogon individua anche I domain controller WinLogon MSGINA LSA Policy LSASS NetLogon Active Directory LSA Server SAM Server Event Logger Active Directory MSVC1_0.dl Kerberos.dll SAM Componenti security Processo Logon (Winlogon) Processo \Windows\System32\Winlogon.exe responsabile per logon interattivo e risposta a SAS (CTRL-ALT-CANC) Graphical Identification and Authentication (GINA) DLL eseguita in Winlogon usata per richiedere nome utente e password o PIN smartcard Default: \Windows\System32\Msgina.dll Registry: HKLM\Software\Microsoft\Windows NT\CurrentVersion\WinLogon\GinaDLL WinLogon MSGINA LSA Policy LSASS NetLogon Active Directory LSA Server SAM Server Event Logger Active Directory MSVC1_0.dl Kerberos.dll SAM Security Reference Monitor Controlla accesso a oggetti, manipola privilegi e genera messaggi audit Funzioni in Ntoskrnl.exe Alcune sono documentate nel DDK Esposte in modalità utente come Windows API SAM Service Depends (Platform SDK) Comunicazione tra SRM e LSA Comunicazione via local procedure call (LPC) SeLsaCommandPort/SeRmCommand porte per inizializzazione Uso di porte private e shared memory una volta che l’inizializzazione è completa Set audit event Create logon session Delete logon session Local security authority (LSA) server Private comm. port SeLsaCommandPort Private comm. port User mode Kernel mode Private comm. port SeRmCommandPort Security reference monitor (SRM Private comm. port Write audit message Delete logon session Shared section Cosa rende il logon sicuro? Prima che chiunque faccia logon, il desktop visibile è quello di Winlogon Winlogon registra CTRL+ALT+DEL (Secure Attention Sequence = SAS) SAS passa al desktop Winlogon Nessuna applicazione può deregistrarlo, perché solo il thread che registra un hotkey può deregistrarlo Se la gestione dell’input di Windows riceve un codice SAS, disabilita eventuali keyboard hook per evitare che sia intercettato Logon Dopo aver ricevuto nome utente e password, GINA li invia al Local Security Authority Sub System (LSASS) LSASS chiama un package di autenticazione per verificare il logon Logon locale o dominio legacy: usa MSV1_0. Utente e password sono criptati e confrontati con il database Security Accounts Manager (SAM) Se il logon è a un dominio Active Directory (AD), usa Kerberos che comunica con un domani controller AD Se trova corrispondenza, recupera account utente, gruppi a cui appartiene e privilegi Logon LSASS crea un token per la sessione di logon e Winlogon lo associa al primo processo della sessione Token creati con API NtCreateToken API Ogni processo riceve una copia del token del processo padre Non si possono aggiungere SID e privilegi a un token Una sessione di logon è attiva solo fino a che c’è almeno un token associato alla sessione Sessioni Logon LogonSessions http://www.sysinternals.com/Utilities/LogonSessions.html Logon locale Winlogon MSGINA LPC LSASS MSV1_0 SAMSRV Logon remoto - Active Directory Se il logon è per un utente di dominio, le credenziali criptate sono inviate a LSASS sul domain controller Domain Controller LSASS Winlogon NTDSA MSGINA UDP LPC Local Machine LSASS Kerberos Active Directory Sessioni, Windows Station, Destkop Sessioni Una sessione è un oggetto kernel Rappresenta una sessione di lavoro Ogni processo è associato a una sessione Definisce un namespace per gli oggetti kernel Evita condivisioni indesiderate di oggetti tra sessioni diverse Il namespace degli oggetti kernel per default è locale alla sessione La sessione locale è la 0 (detta Console) Tutti i servizi e l’utente interattivo sono in sessione 0 Terminal Server fornisce sessioni da 1 in avanti Windows Station Una Windows Station è una “stazione logica” di Windows Ogni sessione ha le sue Windows Station Ogni Windows Station ha: Una clipboard Una atom table Tabella ID-Stringa, usata per le finestre di Windows Uno o più Desktop Windows Station La sessione 0 ha più Windows Station WinSta0 – usata per tutti i processi interattivi Service-0x0-3e7$ - servizi non interattivi [LogonSession] – servizi eseguiti con user account Una per ogni utente diverso associato ai servizi I servizi interattivi sono associati a WinSta0 Altrimenti non visualizzano interfaccia utente Eccezione: dialog box conflag MB_SERVICE_NOTIFICATIOn e MB_DEFAULT_DESKTOP_ONLY Desktop Ogni Windows Station può avere più desktop Di solito serve solo per WinSta0 della sessione Solo un desktop attivo per Windows Station Ogni desktop può avere più finestre Una finestra appartiene sempre a un solo desktop Esistono tool per passare da un desktop all’altro Virtual Desktop Manager (XP Power Toys), shareware Per default esistono due desktop \Windows\WinSta0\Default Associato a tutte le applicazioni \Windows\WinSta0\Winlogon Usato esclusivamente da Winlogon per il Logon utente Sessioni, Windows Station e Desktop Legame tra Sessioni, Windows Station e Desktop Le Windows Station di sessioni non interattive hanno un desktop in più Disconnect Desktop, in pratica è un desktop vuoto Usato quando utente remoto si sconnette lasciando sessione aperta Riduce trasferimento di dati sulla rete Windows Station Desktop Process Explorer http://www.sysinternals.com/Utilities/ProcessExplorer.html WinObj http://www.sysinternals.com/Utilities/WinObj.html Conclusioni Il logon è un’attività eseguita da processi eseguiti in user-mode ma strettamente controllati dal kernel Utenti locali e remoti hanno lo stesso punto di ingresso, anche se l’autenticazione può avvenire con metodi differenti L’isolamento tra utenti diversi avviene tramite isolamento tra le sessioni L’isolamemento tra servizi e applicazioni avviene con le Windows Station L’isolamento tra applicazioni e finestra logon avviene tramite desktop diversi © 2005 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.