Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist...

53

Transcript of Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist...

Page 1: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.
Page 2: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Windows SecurityWindows Security

Fabio SantiniFabio Santini.NET Senior Developer Evangelist.NET Senior Developer [email protected] [email protected] Microsoft ItalyMicrosoft Italy

Page 3: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Windows SecurityWindows Security

Raffaele RialdiRaffaele RialdiMicrosoft C# MVPMicrosoft C# MVP http://mvp.support.microsoft.comhttp://mvp.support.microsoft.comMVP ProfileMVP Profile http://snipurl.com/f0cvhttp://snipurl.com/f0cvBlogBlog http://blogs/ugidotnet.org/raffaelehttp://blogs/ugidotnet.org/raffaele

[email protected]@vevy.comVevy Europe SpAVevy Europe SpA

Page 4: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

AgendaAgenda Termini baseTermini base SID, Logon Session, ACL, Privilegi, LSA…SID, Logon Session, ACL, Privilegi, LSA… Protocolli di autenticazioneProtocolli di autenticazione Impersonation e DelegationImpersonation e Delegation Code Access Security del Framework.NETCode Access Security del Framework.NET AuditingAuditing Q&AQ&A

Page 5: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Termini baseTermini base AutorizzazioneAutorizzazione !=!= Autenticazione Autenticazione

AutenticazioneAutenticazione – – Chi seiChi sei?? Autorizzazione – Cosa puoi fareAutorizzazione – Cosa puoi fare??

Principal – Principal – un’entità che può essere autenticataun’entità che può essere autenticata AuthorityAuthority – – un’un’entita che rappresenta un set entita che rappresenta un set

specifico di specifico di principalprincipal TTrust – rust – è importante ‘fidarsi’ di alcune è importante ‘fidarsi’ di alcune authority authority

che sono in grado di verificare correttamente le che sono in grado di verificare correttamente le identitàidentità AuthoritiesAuthorities ( (dominidomini) ) possono fidarsi a vicenda possono fidarsi a vicenda ((la la

fiducia è transitiva fiducia è transitiva da da win2k)win2k)

Page 6: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Termini baseTermini base User Accounts:User Accounts:

Gli user account sono identificati da uno user name Gli user account sono identificati da uno user name e una password. Lo user name è l’etichetta e la e una password. Lo user name è l’etichetta e la password è la stringa di autenticazione per password è la stringa di autenticazione per l’account. l’account.

Group account Group account Si utilizzano i group account per definire i permessi Si utilizzano i group account per definire i permessi

a utenti simili e per semplificare la gestione degli a utenti simili e per semplificare la gestione degli account. account.

Page 7: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Trusted Computing Base (TCB)Trusted Computing Base (TCB) TCB – TCB – definita come definita come Federal Standard 1037CFederal Standard 1037C

Il Kernel mode è la parte principale del Il Kernel mode è la parte principale del TCBTCB, non ha limiti di accesso , non ha limiti di accesso a nessuna risorsa di sistemaa nessuna risorsa di sistema

Lo User mode può essere parte del TCB in relazione al tipo di Lo User mode può essere parte del TCB in relazione al tipo di processo e della impostazioniprocesso e della impostazioni

Il disegno di un sistema operativo deve dividere in maniera Il disegno di un sistema operativo deve dividere in maniera assoluta codice “fidato” da codice “non fidato”assoluta codice “fidato” da codice “non fidato” per definizione, kernel code è fidatoper definizione, kernel code è fidato tutto quello che scrivete è per default non fidatotutto quello che scrivete è per default non fidato

TCBKernelmód

TCBKernelmódTCBTCB

parte non fidataparte fidata senza

limiti

Page 8: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Utente administratorUtente administrator L’utente Administrator in Windows è L’utente Administrator in Windows è

considerato parte della TCBconsiderato parte della TCB Il suo ruolo è quello di definire il TCB e di Il suo ruolo è quello di definire il TCB e di

configurare i livelli di fiducia che il sistema configurare i livelli di fiducia che il sistema operativo deve usare per ogni accountoperativo deve usare per ogni account

Windows non può essere messo in sicurezza Windows non può essere messo in sicurezza da un administrator “distratto” da un administrator “distratto”

Page 9: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Principal e accountPrincipal e account Il Il Principal Principal è un’entità che può essere principalmente è un’entità che può essere principalmente

autenticata comeautenticata come:: UserUser ComputerComputer

L’account rappresenta un set di dati riguardanti un L’account rappresenta un set di dati riguardanti un principalprincipal

Un account esiste in contesti differentiUn account esiste in contesti differenti:: Local accountLocal account NetworkNetwork

La differenza sta nel tipo di authority che gestisce La differenza sta nel tipo di authority che gestisce l’accountl’account LocalLocal – – TCB e l’authorityTCB e l’authority NetworkNetwork – – Domain è l’authorityDomain è l’authority

Page 10: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

I domini sono regni fidatiI domini sono regni fidati I domini possono contenereI domini possono contenere

UtentiUtenti ComputerComputer

Gli account di dominio si estendono sui Gli account di dominio si estendono sui computer in retecomputer in rete MyDomain\MyAccount è riconosciuto su tutti i MyDomain\MyAccount è riconosciuto su tutti i

computer che fanno parte di un certo dominiocomputer che fanno parte di un certo dominio

La fiducia tra domini estende il regnoLa fiducia tra domini estende il regno Se YourDomain si fida di MyDomain, allora Se YourDomain si fida di MyDomain, allora

YourDomain riconosce MyDomain\MyAccountYourDomain riconosce MyDomain\MyAccount

Un client in un dominio può autenticarsi su un Un client in un dominio può autenticarsi su un qualunque server che è raggiungibile da un qualunque server che è raggiungibile da un percorso di fiducia dal server verso il clientpercorso di fiducia dal server verso il client

Page 11: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Ogni computer è un isola Ogni computer è un isola Un account su un computer è separato da un Un account su un computer è separato da un

altro account su un computer differentealtro account su un computer differente Local account possono autenticarsi in rete se i Local account possono autenticarsi in rete se i

propri user name e password corrispondono propri user name e password corrispondono sugli altri computer (tipico nel workgroup)sugli altri computer (tipico nel workgroup)

Altrimenti in generale questi sono account Altrimenti in generale questi sono account differentidifferenti:: Computer1\User1Computer1\User1 Computer2\User1Computer2\User1 Domain\User1Domain\User1

Page 12: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Schema di autenticazione Schema di autenticazione

Principal AuthenticationLogon Session

DomainDomain Controller /

Backup Domain Controller

TokenSID

AuthorizationNTLM/Kerberos

.SAM

.SAM/AD

LSALsass.exe

LSALsass.exe

Page 13: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Cos’è un Cos’è un SID?SID? SID = Security IdentifierSID = Security Identifier Un valore univoco in tempo e in spazio che Un valore univoco in tempo e in spazio che

determina un oggetto di sicurezza del sistemadetermina un oggetto di sicurezza del sistema L’unica eccezione è il SID legato alla L’unica eccezione è il SID legato alla Logon Session Logon Session

999999 (SYSTEM) (SYSTEM)

Si basa su un identificatore di Si basa su un identificatore di 9696 bit bit creato creato quando si installa Windowsquando si installa Windows

Struttura del Struttura del SID SID èè: S-R-I-SA-SA-SA: S-R-I-SA-SA-SA [- RID] [- RID] RID (identificativo relativo), predefinito in winnt.hRID (identificativo relativo), predefinito in winnt.h

Administrátor: S-1-5-21-XXXX-XXXX-XXXX-500

Guest: S-1-5-21-XXXX-XXXX-XXXX-501

Page 14: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

LSALSA LSA = Local Security AuthorityLSA = Local Security Authority Una struttura flessibile che fornisce il servizio Una struttura flessibile che fornisce il servizio

di autenticazionedi autenticazione Eseguito in un processo privilegiato Eseguito in un processo privilegiato lsass.exelsass.exe LSA LSA è il processo principale che lavora con i è il processo principale che lavora con i

local accounts =local accounts => può lavorare come un > può lavorare come un DC DC in in piccole retipiccole reti

.SAM

COMP1\User1 – SID1

.SAM

COMP2\User1 – SID2L

SA

LS

AL

SA

LS

A

Authomatic logon(Network Logon Session)

Page 15: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

WINLOGON (Winlogon.exe)WINLOGON (Winlogon.exe)

GINA (Msgina.dll)GINA (Msgina.dll)

Local Security Authority (LSA)Local Security Authority (LSA)

Authentication PackageAuthentication Package

NETLOGON (Local Computer)NETLOGON (Local Computer)

NETLOGON (Domain Computer)NETLOGON (Domain Computer)

Authentication PackageAuthentication Package

Security Account ManagerSecurity Account Manager

Local userLocal userdatabasedatabase

LSA policyLSA policyddatabaseatabase

Processo di autenticazioneProcesso di autenticazioneProcesso di autenticazioneProcesso di autenticazione

Interactive LogonSession

Interactive LogonSession

TOKENTOKEN

Page 16: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Logon SessionLogon Session Un istanza di un principal che gira su un computerUn istanza di un principal che gira su un computer

Per ogni autenticazione locale o remota il kernel genera una Per ogni autenticazione locale o remota il kernel genera una nuova logon sessionnuova logon session

La logon session viene distrutta non appena tutti i token che La logon session viene distrutta non appena tutti i token che la referenziano vengono chiusi (reference count)la referenziano vengono chiusi (reference count)

Per gli utenti guest viene creata una logon session speciale Per gli utenti guest viene creata una logon session speciale chiamata null sessionchiamata null session

Una sessione inizia da un’autenticazione del TCBUna sessione inizia da un’autenticazione del TCB Tre eccezioni: Al boot vengono create le logon session per Tre eccezioni: Al boot vengono create le logon session per

Local System, Local Service, Network Service che quindi non Local System, Local Service, Network Service che quindi non necessitano di passwordnecessitano di password

Logon session mantiene dati importantiLogon session mantiene dati importanti Alla logoff, l'OS cerca di chiudere tutti i processi collegati alla Alla logoff, l'OS cerca di chiudere tutti i processi collegati alla

logon session associata all'utente loggatologon session associata all'utente loggato Usata per memorizzare le credenziali del client in cache Usata per memorizzare le credenziali del client in cache

(kerberos tickets…)(kerberos tickets…)

Page 17: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Logon sessionLogon session Non è un termine astratto, una logon session è Non è un termine astratto, una logon session è

“fisicamente” un operazione del sistema “fisicamente” un operazione del sistema operativooperativo

Logon session = Logon session = Reception in MicrosoftReception in Microsoft I visitatori ottengono il loro badge che fornisce la I visitatori ottengono il loro badge che fornisce la

loro identità e i loro dirittiloro identità e i loro diritti La LLa Logon session ogon session può essere vista dagli può essere vista dagli

sviluppatori attravero il tosviluppatori attravero il tokenken

Computer A

Honza

InteractiveLogon

Session

Computer B

Honza

NetworkLogon

Session

Computer C

Honza

NetworkLogon

Session

Page 18: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Tipi di Tipi di Logon SessionLogon Session

SystemLogon

Session

InteractiveLogon

Session

DeamonLogon

Session

NetworkLogon

Session

Page 19: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

System Logon SessionSystem Logon Session Ogni computer ha una sola Ogni computer ha una sola SLSSLS Ha sempre lo stesso identificativo Ha sempre lo stesso identificativo 999 (0x3E7)999 (0x3E7) SID: S-1-5-18SID: S-1-5-18

Page 20: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Secondary Logon SessionsSecondary Logon Sessions Windows 2000 ha introdotto un nuovo servizioWindows 2000 ha introdotto un nuovo servizio

RunAs in Win2k, Secondary Logon in XPRunAs in Win2k, Secondary Logon in XP

Esegue un processo in una secondary logon Esegue un processo in una secondary logon sessionsession Autentica l’utente, esegue il processo nella stessa Autentica l’utente, esegue il processo nella stessa

windows session, ma in una nuova logon sessionwindows session, ma in una nuova logon session Può o non può caricare i profiliPuò o non può caricare i profili

CreateProcessWithLogonWCreateProcessWithLogonW Disponibile nel menù di contesto degli Disponibile nel menù di contesto degli

eseguibilieseguibili

Page 21: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

RunAsRunAs

RunAsRunAs User logon (interactive logon User logon (interactive logon

session)session) UserUser’s profile’s profile RegistryRegistry

Page 22: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

TokenToken Token è un oggetto kernel che tiene i dati di una Token è un oggetto kernel che tiene i dati di una

identityidentity:: User’sUser’s SID SID GroupGroup SID SID PrivilegiPrivilegi

Ogni processo ha il suo token che rappresenta il Ogni processo ha il suo token che rappresenta il principalprincipal

Alcuni processi vengono eseguiti come SYSTEM Alcuni processi vengono eseguiti come SYSTEM account quando il computer si avviaaccount quando il computer si avvia

Quando un utente esegue il log il processo di shell Quando un utente esegue il log il processo di shell viene eseguito in user mode sotto uno specifico viene eseguito in user mode sotto uno specifico principalprincipal WinLogon.exe (SYSTEM) WinLogon.exe (SYSTEM) inizializza la shell dell’utente con il inizializza la shell dell’utente con il

metodo metodo CreateProcessAsUserCreateProcessAsUser ==> e il token dell’utente viene > e il token dell’utente viene propagato a tutti i processi eseguitipropagato a tutti i processi eseguiti

Page 23: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Processi e tokenProcessi e token Ogni processo in Windows viene eseguito con Ogni processo in Windows viene eseguito con

la propria identityla propria identity Ogni processo è inizializzato con il proprio tokenOgni processo è inizializzato con il proprio token I nuovi processi ricevono una copia del token dal I nuovi processi ricevono una copia del token dal

processo originarioprocesso originario I token stabiliscono le restrizioni sul processo, i I token stabiliscono le restrizioni sul processo, i

suoi privilegi per accedere alle risorse,etc.suoi privilegi per accedere alle risorse,etc.

Dealer\Bob

winword.exe

Dealer\Bob

explorer.exe

Page 24: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Tokens di Processi e ThreadTokens di Processi e Thread Ogni processo viene eseguito con un tokenOgni processo viene eseguito con un token

Tipicamente lo stesso del parentTipicamente lo stesso del parent I thread di un processo possono avere un I thread di un processo possono avere un

token token Se si, il thread sta “impersonando” l’utente con il Se si, il thread sta “impersonando” l’utente con il

quale è stato creato il tokenquale è stato creato il token Se no, il thread viene eseguito con lo stesso token Se no, il thread viene eseguito con lo stesso token

del processo padredel processo padre Quando un processo è partito il token non può Quando un processo è partito il token non può

essere cambiatoessere cambiato Il token di un thread può essere cambiato in Il token di un thread può essere cambiato in

ogni momentoogni momento Può essere “converito” al token del processoPuò essere “converito” al token del processo

In questo caso il thread non ha più il suo tokenIn questo caso il thread non ha più il suo token

Page 25: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

TokensTokens

Process Explorer for Windows Process Explorer for Windows 9x/NT/2000/XP/S2K39x/NT/2000/XP/S2K3

www.sysinternals.comwww.sysinternals.com

Page 26: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

PrivilegiPrivilegi Un meccanismo che permette di eseguire il Un meccanismo che permette di eseguire il

tuning delle policy di sicurezzatuning delle policy di sicurezza es., Invece di configurare ogni file per essere es., Invece di configurare ogni file per essere

gestito dal backup operators group è sufficiente gestito dal backup operators group è sufficiente assegnare al gruppo i privilegi di backupassegnare al gruppo i privilegi di backup

Alcuni privilegi interessanti:Alcuni privilegi interessanti: Backup, restoreBackup, restore Shutdown del sistema, cambio del clock di sistemaShutdown del sistema, cambio del clock di sistema Debug di un programmaDebug di un programma Eseguire come parte del sistema operativo (TCB)Eseguire come parte del sistema operativo (TCB)

Una volta concesso, il privilegio diventa parte Una volta concesso, il privilegio diventa parte del token dell’utentedel token dell’utente Ma può essere abilitato o disabilitatoMa può essere abilitato o disabilitato

Page 27: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Il token nei processi e nei Il token nei processi e nei threadthread Il token del thread èIl token del thread è

Usato per controllare l’accesso agli oggetti del Usato per controllare l’accesso agli oggetti del kernelkernel

Usato come identità di rete in molti casiUsato come identità di rete in molti casi SQL Server integrated securitySQL Server integrated security Named pipes, etcNamed pipes, etc

Il token di processo èIl token di processo è Copiato in un nuovo processo per defaultCopiato in un nuovo processo per default Usato per chiamate DCOM in uscita per defaultUsato per chiamate DCOM in uscita per default L’unico vero contesto di sicurezza sempre L’unico vero contesto di sicurezza sempre

disponibiledisponibile Potrebbe non esserci un token di threadPotrebbe non esserci un token di thread

Page 28: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Impersonation e delegationImpersonation e delegation Un nuovo token di security viene assegnato al thread Un nuovo token di security viene assegnato al thread

(tipicamente quello dell'utente autenticato).(tipicamente quello dell'utente autenticato).Il token di processo rimane invariato.Il token di processo rimane invariato.

L'API RevertToSelf elimina il token del thread annullando L'API RevertToSelf elimina il token del thread annullando l'impersonazione.l'impersonazione.

Kerberos non consente la propagazione del token di thread. Kerberos non consente la propagazione del token di thread. Questo significa che il processo che impersona può usare quel Questo significa che il processo che impersona può usare quel token solo sul PC locale e non in retetoken solo sul PC locale e non in rete

La soluzione (sbagliata) è delegation che è disabilitata by-defaultLa soluzione (sbagliata) è delegation che è disabilitata by-default

La soluzione migliore è il cambio di architettura, ma spesso non è la La soluzione migliore è il cambio di architettura, ma spesso non è la scelta più semplicescelta più semplice

Nella vita reale impersonation è la delegaNella vita reale impersonation è la delegaNella vita reale delegation è la procuraNella vita reale delegation è la procura

Page 29: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Delegation (default disabilitata)Delegation (default disabilitata)

Delegation per localsystemDelegation per localsystem Delegation per un utenteDelegation per un utente

Utenti che hanno il privilegio di impostare delegation (default = administrators)Utenti che hanno il privilegio di impostare delegation (default = administrators)

Page 30: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Dove siamo?Dove siamo?Il modello di sicurezza classicoIl modello di sicurezza classico

Autenticazione utentiAutenticazione utenti Applicazioni girano usando un account utente (token)Applicazioni girano usando un account utente (token) Utenti e Gruppi possono essere organizzati in gruppiUtenti e Gruppi possono essere organizzati in gruppi Ai gruppi o agli utentiAi gruppi o agli utenti possono essere assegnati o tolti possono essere assegnati o tolti

permessi per accedere a risorse (NTFS, rete, device, etc.)permessi per accedere a risorse (NTFS, rete, device, etc.)

Per il codicePer il codice (Activex, VBA, ...) il sistema è quello di: (Activex, VBA, ...) il sistema è quello di: firmare con un certificato X509firmare con un certificato X509

fidandosi ciecamente delfidandosi ciecamente delprogrammatore che l'ha firmatoprogrammatore che l'ha firmato

chiedere all'utente finale la confermachiedere all'utente finale la conferma

... risultato = disastro... risultato = disastro

Page 31: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Il modello della CAS nel Framework.NETIl modello della CAS nel Framework.NETCAS = Code Access SecurityCAS = Code Access Security

IE può ospitare all'interno della pagina HTML dei controlli IE può ospitare all'interno della pagina HTML dei controlli WinformWinform. . La CAS può far girare questi controlli La CAS può far girare questi controlli senza alcuna richiesta senza alcuna richiesta all'utenteall'utente

La stessa cosa vale per intere applicazioni o solo assembly La stessa cosa vale per intere applicazioni o solo assembly scaricati da internetscaricati da internet

La CAS è fondamentale per La CAS è fondamentale per chi scrive controllichi scrive controlli ("Least ("Least Privilege Model")Privilege Model")

La La CASCAS dà agli dà agli admin admin un potere che mai hanno avuto primaun potere che mai hanno avuto prima LimitaLimita ciò che può essere eseguito nel codice ciò che può essere eseguito nel codice ProteggeProtegge il PC da codice di provenienza incerta il PC da codice di provenienza incerta

(spyware, adware, malaware, virus, worm, ...)(spyware, adware, malaware, virus, worm, ...) ImpedisceImpedisce selettivamente che del codice possa accedere a selettivamente che del codice possa accedere a

certe funzionalità dell'OScerte funzionalità dell'OS

Page 32: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

CAS: a cosa CAS: a cosa nonnon serve serve

Non è un sistema di protezione del Non è un sistema di protezione del software contro gli hackersoftware contro gli hacker

Non è un sistema che autorizza l'uso del Non è un sistema che autorizza l'uso del software sotto licenzasoftware sotto licenza

Protegge l'utente che usa il software solo Protegge l'utente che usa il software solo se vuole essere protetto (admin può se vuole essere protetto (admin può disabilitare la CAS ...)disabilitare la CAS ...)

Page 33: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Questione di punti di vista ...Questione di punti di vista ...

Risorsa

ACL

Token

UserEsecuzione

Permission

Evidence

Codice

Autenticazione

Autorizzazione

Autenticazione

Autorizzazione

CAS

NT

Page 34: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

La difficoltà sta nel... glossarioLa difficoltà sta nel... glossario EvidenceEvidence Prove di protezioneProve di protezione Strong nameStrong name Nome sicuroNome sicuro Code GroupCode Group Gruppi di codiceGruppi di codice Full trustFull trust Attendibilità totaleAttendibilità totale Partial trustPartial trust Attendibilità parzialeAttendibilità parziale Security PolicySecurity Policy ...... PermissionPermission AutorizzazioniAutorizzazioni Permission SetPermission Set Set di autorizzazioniSet di autorizzazioni Stack WalkStack Walk ...... AssertAssert ...... DemandDemand ...... ...... ......

Page 35: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Configurazione della CASConfigurazione della CAS Si esegue tramite CasPol (command line)Si esegue tramite CasPol (command line)

oppure tramite il Framework Configuration Tooloppure tramite il Framework Configuration Tool

Page 36: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Permission: "cosa vuoi fare?" Permission: "cosa vuoi fare?" (autorizzazione)(autorizzazione)

I permessi sono le autorizzazioni ad eseguire I permessi sono le autorizzazioni ad eseguire una certa operazioneuna certa operazione

Il framework ne predefinisce un certo numeroIl framework ne predefinisce un certo numero I permessi definiti nella CAS sono I permessi definiti nella CAS sono trasversalitrasversali a a

quelli più noti come NTFS, SQL, etc.quelli più noti come NTFS, SQL, etc. Per ciascun permesso è possibile definire dei Per ciascun permesso è possibile definire dei

valori molto dettagliativalori molto dettagliati

È possibile costruire dagli admin tool o È possibile costruire dagli admin tool o programmaticamente un gruppo diprogrammaticamente un gruppo dipermessi chiamato permessi chiamato Permission SetPermission Set

Page 37: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Evidence: "chi sei?" Evidence: "chi sei?" (autenticazione)(autenticazione)

Evidence è la prova oggettivaEvidence è la prova oggettiva per sapere per sapere di chi èdi chi è o o da dove da dove provieneproviene il codice managed il codice managed

La CAS può identificare un assembly basandosi su:La CAS può identificare un assembly basandosi su: Cartella dove risiedeCartella dove risiede Sito o Url da cui viene scaricatoSito o Url da cui viene scaricato Zona in cui si trovaZona in cui si trova Strong Name presente nel suo manifestStrong Name presente nel suo manifest Hash dell'assemblyHash dell'assembly Firma digitale (Authenticode, stessa degli Activex)Firma digitale (Authenticode, stessa degli Activex)

Al caricamento dell'assembly in memoria, viene subito Al caricamento dell'assembly in memoria, viene subito ricavata l'evidencericavata l'evidence

È possibile da codice associare una evidence ad un È possibile da codice associare una evidence ad un AppDomain in modo da isolare degli assemblyAppDomain in modo da isolare degli assembly

Page 38: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Code GroupCode Groupe Security Policye Security Policy I Code Group sono l'associazione di un evidence con un insieme I Code Group sono l'associazione di un evidence con un insieme

di permessidi permessi Una Security Policy è una collection di Code GroupUna Security Policy è una collection di Code Group

Evidence Permission Set

Page 39: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Al runtime viene fatto il calcolo dei Al runtime viene fatto il calcolo dei permessi effettivipermessi effettivi

1.1.

2.2.

Unione

Intersezione

void SetAppDomainPolicy(PolicyLevel domainPolicy);

Page 40: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

MA ...MA ... in configurazioni complesse non sempre in configurazioni complesse non sempre

l'unione è esaustiva di quello che vorremmol'unione è esaustiva di quello che vorremmo

Level Final

Exclusive

Page 41: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Come gestire la CAS da codice?Come gestire la CAS da codice? Lo strumento principale sono:Lo strumento principale sono:

le classi xxxPermission e relativi attributi le classi xxxPermission e relativi attributi Queste classi permettono di chiedere alla CAS di:Queste classi permettono di chiedere alla CAS di:

eseguire controlli e (se necessario) lanciare la SecurityExceptioneseguire controlli e (se necessario) lanciare la SecurityException

ISecurityEncodableISecurityEncodable

IStackWalkIStackWalk

IPermissionIPermission

FileIOPermissionFileIOPermission UIPermissionUIPermission EnvironmentPermssionEnvironmentPermssion

PermissionSetPermissionSet

FileIOPermissionAttribute

FileIOPermissionAttribute

UIPermissionAttribute

UIPermissionAttribute

EnvironmentPermssionAttribute

EnvironmentPermssionAttribute

CodeAccessPermissionAttribute

CodeAccessPermissionAttribute

CodeAccessPermissionCodeAccessPermission

Page 42: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Stack WalkStack Walk La CAS effettua uno 'stack walk' per verificare La CAS effettua uno 'stack walk' per verificare

che i chiamanti abbiano i permessi di eseguire che i chiamanti abbiano i permessi di eseguire una determinata operazione (file I/O, socket, ...)una determinata operazione (file I/O, socket, ...)

SecurityException

OK

Demand

Stack walk

Metodo1

Metodo2

Metodo3

Metodo4

permissionnegata

Stack walk

// Richiesta imperativa ...

FileIOPermission perm = new FileIOPermission(FileIOPermissionAccess.AllAccess, @"c:\");

perm.Demand();

// Richiesta imperativa ...

FileIOPermission perm = new FileIOPermission(FileIOPermissionAccess.AllAccess, @"c:\");

perm.Demand();

// ... oppure dichiarativa (sull'assembly)

[assembly:FileIOPermission(SecurityAction.Demand, All = @"C:\") ]

// ... oppure dichiarativa (sull'assembly)

[assembly:FileIOPermission(SecurityAction.Demand, All = @"C:\") ]

Page 43: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Strong NameStrong Name

Lo strong name dovrebbe essere "aziendale" e ben Lo strong name dovrebbe essere "aziendale" e ben custoditocustodito

Esegue una sorta di "firma" sull'assemblyEsegue una sorta di "firma" sull'assembly Le specifiche ECMA raccomandano l'uso dello strong Le specifiche ECMA raccomandano l'uso dello strong

name name solo per il versioningsolo per il versioning e e MAI per sicurezzaMAI per sicurezza Esistono sistemi per ingannare il CLR e far caricare un Esistono sistemi per ingannare il CLR e far caricare un

Assembly tampered anche se firmato con strong name.Assembly tampered anche se firmato con strong name.

La registrazione in GAC richiede lo strong nameLa registrazione in GAC richiede lo strong name Se un assembly partially trusted chiama un full trusted Se un assembly partially trusted chiama un full trusted

con strong name, questo necessita dell'attributo:con strong name, questo necessita dell'attributo:[assembly:AllowPartiallyTrustedCallers][assembly:AllowPartiallyTrustedCallers]

Page 44: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Tool:Tool:Exporting and deployingExporting and deployingSecurity PolicySecurity Policy

File.MSI

Create

Deploy

Page 45: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

ToolToolAdjusting SecurityAdjusting Security

Page 46: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Tool:Tool:Evaluating an assemblyEvaluating an assembly

Page 47: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Tool:Tool:Trusting an assemblyTrusting an assembly

Page 48: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

AuditingAuditing Auditing di Windows permette agli eventi di Auditing di Windows permette agli eventi di

audit di apparire dentro il Security Event Log. audit di apparire dentro il Security Event Log. Vi avverte su potenziali problemi di sicurezzaVi avverte su potenziali problemi di sicurezza Potete fare audit di:Potete fare audit di:

Log on/Log off: Log on/Log off: Accesso a file: Accesso a file: Gestione utenti e gruppi: Gestione utenti e gruppi:

Creazione, cambiamento o cancellazione di utenti o gruppiCreazione, cambiamento o cancellazione di utenti o gruppi Security Policy Changes: Security Policy Changes:

Ogni modifica sui diritti degli utenti o sul cambiamento di Ogni modifica sui diritti degli utenti o sul cambiamento di policy.policy.

Restart, Shutdown, e System Process Tracking: Restart, Shutdown, e System Process Tracking: Monitorizza l’attivazione dei programmi, la duplicazione degli Monitorizza l’attivazione dei programmi, la duplicazione degli

handle, accesso indiretto agli oggetti e terminazione dei handle, accesso indiretto agli oggetti e terminazione dei processi.processi.

Page 49: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

AuditingAuditing

Page 50: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

AuditingAuditing Per abilitare l’auditing, devete avere una logon Per abilitare l’auditing, devete avere una logon

session come membro del gruppo session come membro del gruppo Administrators group (Domain Admins sono Administrators group (Domain Admins sono membri). membri).

Page 51: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

AuditingAuditing Quando fate auditing, potete avere:Quando fate auditing, potete avere: Success: Un successo indica che l’utente ha Success: Un successo indica che l’utente ha

ottenuto correttamente l’accesso alla risorse.ottenuto correttamente l’accesso alla risorse. Failure: Un fallimento indica che l’utente ha Failure: Un fallimento indica che l’utente ha

tentato di accedere ad una risorsa per la quale tentato di accedere ad una risorsa per la quale non ha sufficienti permessi.non ha sufficienti permessi.

Esempio – Cosa significa avere una serie di Esempio – Cosa significa avere una serie di fallimenti e poi un successo ? Cosa ha fatto fallimenti e poi un successo ? Cosa ha fatto l’amministratore della macchina per interferire l’amministratore della macchina per interferire con tale processo ?con tale processo ?

Page 52: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

Domande?Domande?

Page 53: Windows Security Windows Security Fabio Santini.NET Senior Developer Evangelist fsantini@microsoft.com Microsoft Italy.

© 2004 Microsoft Corporation. All rights reserved.Some parts of this presentation are copyrighted by Skilldrive.comThis presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS OR IMPLIED, IN THIS SUMMARY.