Windows Security
Fabio Santini
.NET Senior Developer Evangelist
[email protected]
Microsoft Italy
Windows Security
Raffaele Rialdi
Microsoft C# MVP
MVP Profile
Blog
[email protected]
Vevy Europe SpA
http://mvp.support.microsoft.com
http://snipurl.com/f0cv
http://blogs/ugidotnet.org/raffaele
Agenda







Termini base
SID, Logon Session, ACL, Privilegi, LSA…
Protocolli di autenticazione
Impersonation e Delegation
Code Access Security del Framework.NET
Auditing
Q&A
Termini base

Autorizzazione != Autenticazione





Autenticazione – Chi sei?
Autorizzazione – Cosa puoi fare?
Principal – un’entità che può essere autenticata
Authority – un’entita che rappresenta un set
specifico di principal
Trust – è importante ‘fidarsi’ di alcune authority
che sono in grado di verificare correttamente le
identità

Authorities (domini) possono fidarsi a vicenda (la
fiducia è transitiva da win2k)
Termini base

User Accounts:


Gli user account sono identificati da uno user name
e una password. Lo user name è l’etichetta e la
password è la stringa di autenticazione per
l’account.
Group account

Si utilizzano i group account per definire i permessi
a utenti simili e per semplificare la gestione degli
account.
Trusted Computing Base (TCB)

TCB – definita come Federal Standard 1037C



Il Kernel mode è la parte principale del TCB, non ha limiti di accesso
a nessuna risorsa di sistema
Lo User mode può essere parte del TCB in relazione al tipo di
processo e della impostazioni
Il disegno di un sistema operativo deve dividere in maniera
assoluta codice “fidato” da codice “non fidato”


per definizione, kernel code è fidato
tutto quello che scrivete è per default non fidato
parte non fidata
parte fidata senza
limiti
TCB
Kernel
TCB
mód
Utente administrator



L’utente Administrator in Windows è
considerato parte della TCB
Il suo ruolo è quello di definire il TCB e di
configurare i livelli di fiducia che il sistema
operativo deve usare per ogni account
Windows non può essere messo in sicurezza
da un administrator “distratto” 
Principal e account

Il Principal è un’entità che può essere principalmente
autenticata come:




L’account rappresenta un set di dati riguardanti un
principal
Un account esiste in contesti differenti:



User
Computer
Local account
Network
La differenza sta nel tipo di authority che gestisce
l’account


Local – TCB e l’authority
Network – Domain è l’authority
I domini sono regni fidati

I domini possono contenere



Gli account di dominio si estendono sui
computer in rete


MyDomain\MyAccount è riconosciuto su tutti i
computer che fanno parte di un certo dominio
La fiducia tra domini estende il regno


Utenti
Computer
Se YourDomain si fida di MyDomain, allora
YourDomain riconosce MyDomain\MyAccount
Un client in un dominio può autenticarsi su un
qualunque server che è raggiungibile da un
percorso di fiducia dal server verso il client
Ogni computer è un isola 



Un account su un computer è separato da un
altro account su un computer differente
Local account possono autenticarsi in rete se i
propri user name e password corrispondono
sugli altri computer (tipico nel workgroup)
Altrimenti in generale questi sono account
differenti:



Computer1\User1
Computer2\User1
Domain\User1
Schema di autenticazione
Principal
Authentication
Logon Session
Authorization
NTLM/Kerberos
.SAM/AD
Domain
Domain Controller /
Backup Domain Controller
Token
SID
LSA
Lsass.exe
.SAM
Cos’è un SID?


SID = Security Identifier
Un valore univoco in tempo e in spazio che
determina un oggetto di sicurezza del sistema



L’unica eccezione è il SID legato alla Logon Session
999 (SYSTEM)
Si basa su un identificatore di 96 bit creato
quando si installa Windows
Struttura del SID è: S-R-I-SA-SA-SA [- RID]

RID (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
LSA



LSA = Local Security Authority
Una struttura flessibile che fornisce il servizio
di autenticazione
Eseguito in un processo privilegiato lsass.exe
LSA è il processo principale che lavora con i
local accounts => può lavorare come un DC in
piccole reti
LSA
.SAM
COMP1\User1 – SID1
Authomatic logon
(Network Logon Session)
LSA

.SAM
COMP2\User1 – SID2
Processo di autenticazione
WINLOGON (Winlogon.exe)
Interactive Logon
Session
GINA (Msgina.dll)
TOKEN
Local Security Authority (LSA)
Authentication Package
LSA policy
database
NETLOGON (Local Computer)
NETLOGON (Domain Computer)
Authentication Package
Security Account Manager
Local user
database
Logon Session

Un istanza di un principal che gira su un computer




Una sessione inizia da un’autenticazione del TCB


Per ogni autenticazione locale o remota il kernel genera una
nuova logon session
La logon session viene distrutta non appena tutti i token che
la referenziano vengono chiusi (reference count)
Per gli utenti guest viene creata una logon session speciale
chiamata null session
Tre eccezioni: Al boot vengono create le logon session per
Local System, Local Service, Network Service che quindi non
necessitano di password
Logon session mantiene dati importanti


Alla logoff, l'OS cerca di chiudere tutti i processi collegati alla
logon session associata all'utente loggato
Usata per memorizzare le credenziali del client in cache
(kerberos tickets…)
Logon session


Non è un termine astratto, una logon session è
“fisicamente” un operazione del sistema
operativo
Logon session = Reception in Microsoft 


I visitatori ottengono il loro badge che fornisce la
loro identità e i loro diritti
La Logon session può essere vista dagli
sviluppatori attravero il token
Honza
Interactive
Logon
Session
Computer A
Honza
Honza
Network
Logon
Session
Computer C
Network
Logon
Session
Computer B
Tipi di Logon Session
System
Logon
Session
Network
Logon
Session
Deamon
Logon
Session
Interactive
Logon
Session
System Logon Session



Ogni computer ha una sola SLS
Ha sempre lo stesso identificativo 999 (0x3E7)
SID: S-1-5-18
Secondary Logon Sessions

Windows 2000 ha introdotto un nuovo servizio


Esegue un processo in una secondary logon
session




RunAs in Win2k, Secondary Logon in XP
Autentica l’utente, esegue il processo nella stessa
windows session, ma in una nuova logon session
Può o non può caricare i profili
CreateProcessWithLogonW
Disponibile nel menù di contesto degli
eseguibili
RunAs




RunAs
User logon (interactive logon
session)
User’s profile
Registry
Token

Token è un oggetto kernel che tiene i dati di una
identity:






User’s SID
Group SID
Privilegi
Ogni processo ha il suo token che rappresenta il
principal
Alcuni processi vengono eseguiti come SYSTEM
account quando il computer si avvia
Quando un utente esegue il log il processo di shell
viene eseguito in user mode sotto uno specifico
principal

WinLogon.exe (SYSTEM) inizializza la shell dell’utente con il
metodo CreateProcessAsUser => e il token dell’utente viene
propagato a tutti i processi eseguiti
Processi e token

Ogni processo in Windows viene eseguito con
la propria identity



Ogni processo è inizializzato con il proprio token
I nuovi processi ricevono una copia del token dal
processo originario
I token stabiliscono le restrizioni sul processo, i
suoi privilegi per accedere alle risorse,etc.
Dealer\Bob
explorer.exe
Dealer\Bob
winword.exe
Tokens di Processi e Thread

Ogni processo viene eseguito con un token


I thread di un processo possono avere un
token




Tipicamente lo stesso del parent
Se si, il thread sta “impersonando” l’utente con il
quale è stato creato il token
Se no, il thread viene eseguito con lo stesso token
del processo padre
Quando un processo è partito il token non può
essere cambiato
Il token di un thread può essere cambiato in
ogni momento

Può essere “converito” al token del processo

In questo caso il thread non ha più il suo token
Tokens


Process Explorer for Windows
9x/NT/2000/XP/S2K3
www.sysinternals.com
Privilegi

Un meccanismo che permette di eseguire il
tuning delle policy di sicurezza


Alcuni privilegi interessanti:





es., Invece di configurare ogni file per essere
gestito dal backup operators group è sufficiente
assegnare al gruppo i privilegi di backup
Backup, restore
Shutdown del sistema, cambio del clock di sistema
Debug di un programma
Eseguire come parte del sistema operativo (TCB)
Una volta concesso, il privilegio diventa parte
del token dell’utente

Ma può essere abilitato o disabilitato
Il token nei processi e nei
thread

Il token del thread è


Usato per controllare l’accesso agli oggetti del
kernel
Usato come identità di rete in molti casi



SQL Server integrated security
Named pipes, etc
Il token di processo è



Copiato in un nuovo processo per default
Usato per chiamate DCOM in uscita per default
L’unico vero contesto di sicurezza sempre
disponibile

Potrebbe non esserci un token di thread
Impersonation e delegation

Un nuovo token di security viene assegnato al thread
(tipicamente quello dell'utente autenticato).
Il token di processo rimane invariato.

L'API RevertToSelf elimina il token del thread annullando
l'impersonazione.

Kerberos non consente la propagazione del token di thread.
Questo significa che il processo che impersona può usare quel
token solo sul PC locale e non in rete


La soluzione (sbagliata) è delegation che è disabilitata by-default

La soluzione migliore è il cambio di architettura, ma spesso non è la
scelta più semplice
Nella vita reale impersonation è la delega
Nella vita reale delegation è la procura
Delegation (default disabilitata)
Utenti che hanno il privilegio di impostare delegation (default = administrators)
Delegation per localsystem
Delegation per un utente
Dove siamo?
Il modello di sicurezza classico





Autenticazione utenti
Applicazioni girano usando un account utente (token)
Utenti e Gruppi possono essere organizzati in gruppi
Ai gruppi o agli utenti possono essere assegnati o tolti
permessi per accedere a risorse (NTFS, rete, device, etc.)
Per il codice (Activex, VBA, ...) il sistema è quello di:


firmare con un certificato X509
fidandosi ciecamente del
programmatore che l'ha firmato
chiedere all'utente finale la conferma
... risultato = disastro
Il modello della CAS nel Framework.NET
CAS = Code Access Security




IE può ospitare all'interno della pagina HTML dei controlli
Winform.
La CAS può far girare questi controlli senza alcuna richiesta
all'utente
La stessa cosa vale per intere applicazioni o solo assembly
scaricati da internet
La CAS è fondamentale per chi scrive controlli ("Least
Privilege Model")
La CAS dà agli admin un potere che mai hanno avuto prima



Limita ciò che può essere eseguito nel codice
Protegge il PC da codice di provenienza incerta
(spyware, adware, malaware, virus, worm, ...)
Impedisce selettivamente che del codice possa accedere a
certe funzionalità dell'OS
CAS: a cosa non serve

Non è un sistema di protezione del
software contro gli hacker

Non è un sistema che autorizza l'uso del
software sotto licenza

Protegge l'utente che usa il software solo
se vuole essere protetto (admin può
disabilitare la CAS ...)
Questione di punti di vista ...
NT
Esecuzione
Autorizzazione
Permission
User
Token
ACL
Evidence
Autenticazione
Codice
CAS
Autenticazione
Risorsa
Autorizzazione
La difficoltà sta nel... glossario












Evidence
Strong name
Code Group
Full trust
Partial trust
Security Policy
Permission
Permission Set
Stack Walk
Assert
Demand
...
Prove di protezione
Nome sicuro
Gruppi di codice
Attendibilità totale
Attendibilità parziale
...
Autorizzazioni
Set di autorizzazioni
...
...
...
...
Configurazione della CAS

Si esegue tramite CasPol (command line)
oppure tramite il Framework Configuration Tool
Permission: "cosa vuoi fare?"
(autorizzazione)





I permessi sono le autorizzazioni ad eseguire
una certa operazione
Il framework ne predefinisce un certo numero
I permessi definiti nella CAS sono trasversali a
quelli più noti come NTFS, SQL, etc.
Per ciascun permesso è possibile definire dei
valori molto dettagliati
È possibile costruire dagli admin tool o
programmaticamente un gruppo di
permessi chiamato Permission Set
Evidence: "chi sei?"
(autenticazione)


Evidence è la prova oggettiva per sapere di chi è o da dove
proviene il codice managed
La CAS può identificare un assembly basandosi su:








Cartella dove risiede
Sito o Url da cui viene scaricato
Zona in cui si trova
Strong Name presente nel suo manifest
Hash dell'assembly
Firma digitale (Authenticode, stessa degli Activex)
Al caricamento dell'assembly in memoria, viene subito
ricavata l'evidence
È possibile da codice associare una evidence ad un
AppDomain in modo da isolare degli assembly
Code Group
e Security Policy


I Code Group sono l'associazione di un evidence con un insieme
di permessi
Una Security Policy è una collection di Code Group
Evidence
Permission Set
Al runtime viene fatto il calcolo dei
permessi effettivi

1.
Unione
Intersezione

2.
void SetAppDomainPolicy(PolicyLevel domainPolicy);
MA ...

in configurazioni complesse non sempre
l'unione è esaustiva di quello che vorremmo
Exclusive
Level Final
Come gestire la CAS da codice?

Lo strumento principale sono:


le classi xxxPermission e relativi attributi
Queste classi permettono di chiedere alla CAS di:

eseguire controlli e (se necessario) lanciare la SecurityException
PermissionSet
ISecurityEncodable
IStackWalk
CodeAccessPermission
IPermission
FileIOPermission
UIPermission
EnvironmentPermssion
FileIOPermission
Attribute
UIPermission
Attribute
EnvironmentPermssion
Attribute
CodeAccessPermission
Attribute
Stack Walk

La CAS effettua uno 'stack walk' per verificare
che i chiamanti abbiano i permessi di eseguire
una determinata operazione (file I/O, socket, ...)
Metodo1
permission
Metodo2
negata
SecurityException
Stack walk
Metodo3
OK
Stack walk
Metodo4
Demand
// Richiesta imperativa ...
FileIOPermission perm = new FileIOPermission(
FileIOPermissionAccess.AllAccess, @"c:\");
perm.Demand();
// ... oppure dichiarativa (sull'assembly)
[assembly:FileIOPermission(
SecurityAction.Demand, All = @"C:\") ]
Strong Name






Lo strong name dovrebbe essere "aziendale" e ben
custodito
Esegue una sorta di "firma" sull'assembly
Le specifiche ECMA raccomandano l'uso dello strong
name solo per il versioning e MAI per sicurezza
Esistono sistemi per ingannare il CLR e far caricare un
Assembly tampered anche se firmato con strong name.
La registrazione in GAC richiede lo strong name
Se un assembly partially trusted chiama un full trusted
con strong name, questo necessita dell'attributo:
[assembly:AllowPartiallyTrustedCallers]
Tool:
Exporting and deploying
Security Policy
Create
File.MSI
Deploy
Tool
Adjusting Security
Tool:
Evaluating an assembly
Tool:
Trusting an assembly
Auditing

Auditing di Windows permette agli eventi di
audit di apparire dentro il Security Event Log.
Vi avverte su potenziali problemi di sicurezza

Potete fare audit di:



Log on/Log off:
Accesso a file:
Gestione utenti e gruppi:


Security Policy Changes:


Creazione, cambiamento o cancellazione di utenti o gruppi
Ogni modifica sui diritti degli utenti o sul cambiamento di
policy.
Restart, Shutdown, e System Process Tracking:

Monitorizza l’attivazione dei programmi, la duplicazione degli
handle, accesso indiretto agli oggetti e terminazione dei
processi.
Auditing
Auditing

Per abilitare l’auditing, devete avere una logon
session come membro del gruppo
Administrators group (Domain Admins sono
membri).
Auditing




Quando fate auditing, potete avere:
Success: Un successo indica che l’utente ha
ottenuto correttamente l’accesso alla risorse.
Failure: Un fallimento indica che l’utente ha
tentato di accedere ad una risorsa per la quale
non ha sufficienti permessi.
Esempio – Cosa significa avere una serie di
fallimenti e poi un successo ? Cosa ha fatto
l’amministratore della macchina per interferire
con tale processo ?
Domande?
© 2004 Microsoft Corporation. All rights reserved.
Some parts of this presentation are copyrighted by Skilldrive.com
This presentation is for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS
OR IMPLIED, IN THIS SUMMARY.
Scarica

Slide 1 - Microsoft