Il modello di sicurezza in Windows 2000 è l'insieme degli strumenti e delle componenti del sistema utilizzate per implementare i meccanismi di sicurezza presenti.
Il modello di sicurezza si basa sui concetti di autenticazione e autorizzazione: l’autenticazione identifica l’utente durante il logon e l’accesso a servizi di rete; l’autorizzazione, invece, è il meccanismo che si preoccupa di controllare l’accesso alle risorse, sulla base dei permessi stabiliti. Inoltre è supportato dai servizi di sicurezza di Windows 2000, servizi che sono composti da diversi elementi che molto spesso interagiscono tra loro.
L’unità fondamentale del modello di sicurezza di Windows 2000 è rappresentata da un oggetto. Un oggetto include qualunque risorsa del sistema che possa essere protetto: files, stampanti, dischi, threads, processi, ect ..
Per contenere i permessi di accesso per ogni oggetto vengono utilizzate le ACL (Access Control List). Ogni ACL è una sequenza di zero o più ACE (Access Control Entry), che rappresenta la singola voce di controllo dell’accesso.
Figura 1 - Access Control List
Esistono due tipi di ACL:
facoltativi (Discretionary Access Control List) e di sistema (System Access
Control List). Le DACL garantiscono i permessi di accesso sull’oggetto a cui
sono assegnati, mentre le SACL contengono informazioni di controllo, quali:
Una volta garantita la protezione sugli oggetti, bisogna identificare gli utenti che tentano di accedere alle risorse e verificare che hanno i relativi permessi.
All’interno del modello di sicurezza, ad ogni utente viene assegnato univocamente un Security ID (SID) che viene generato al momento della creazione dell’account; inoltre ai processi utente viene associato un oggetto chiamato access token, che serve come “patente” per poter usare le risorse.
Figura 2 - Access Token
Gli access token sono generati durante la fase di logon, dopo che l’utente è stato autenticato; contengono, il SID dell’utente, SID del gruppo a cui l’utente appartiene, e l’ACL di default dell’utente. Quando un processo o un thread tenta di accedere all’oggetto, il sistema attraverso l’access token cerca di identificare l’utente, allo scopo di verificare se l’utente può accedervi ed eseguire l’operazione richiesta. Se l’accesso è consentito, il sistema operativo fornisce un handle a quell’oggetto, il cui scopo è molto simile a quello del file descriptor utilizzato per accedere ai file.
Ad ogni oggetto viene assegnato
un SD (Security Descriptor), in cui vengono inseriti:
Nel SD sia il DACL che il SACL possono essere vuoti, cioè contenere zero ACE. Se il DACL è vuoto, solo il proprietario può accedere all’oggetto; se il SACL è vuoto, non viene eseguito nessun controllo.
![]() |
|
Figura 4 - Security Descriptor di un file | |
Il modello di sicurezza include le seguenti componenti fondamentali:
SRM(Security Reference Monitor): E' un processo in modalità kernel che si occupa del monitoraggio dell’accesso agli oggetti, garantendo che l’accesso ad un determinato oggetto sia coerente con il Security Descriptor associato.
Nel momento in cui un’applicazione tenta di accedere ad un oggetto, l’ SRM analizza il DACL dell’oggetto per verificare che l’applicazione abbia i permessi di accesso. In particolare ciascuna ACE viene esaminato secondo un ordine preciso, e se il SID contenuto nell’ACE corrisponde ad SID contenuto nel token, allora l’ACE viene elaborato, per verificare i diritti di accesso.
Se tutti i diritti di accesso richiesti dal chiamante possono essere garantiti, l’accesso all’oggetto secondo le modalità richieste ha esito positivo; altrimenti, se uno di essi non può essere garantito, l’accesso fallisce
I messaggi di audit relativi al successo o al fallimento di un accesso vengono scritte da LSA su opportuni files di log.
Per motivi di efficienza, i controlli di accesso vengono eseguito al momento della creazione dell’ handle di un oggetto.
LSA (Local Security Authority): E’ un processo in
modalità utente
che si occupa di garantire che l’utente abbia accesso al sistema. In
particolare:
§
Autentica gli utenti durante la fase di
logon: in tale fase i dati
di accesso dell’utente vengono consegnati ad Active Directory o al
SAM
mediante il relativo programma di autenticazione, per verificarli.
§
Generare il token di accesso: una volta che l’utente è stato
autenticato, il suo SID, il SID dei
gruppi di appartenenza e il suo
ACL di
default, vengono utilizzare per generare un token di
accesso.
§
Gestire la politica di sicurezza: l’ SRM interroga LSA per avere
informazioni sugli accessi, informazioni che LSA verifica utilizzando il
Security Policy Database.
§
Vigila sulla politica di controllo.
§ Aggiorna il registro degli eventi i dati di audit forniti dal SRM.
Processo di accesso (Process Logon): E’ un processo in modalità utente che si occupa di reperire utilizzando GINA le credenziali di un utente (account e password) e passarle ad LSA affinché le autentichi.
GINA (Graphical Identification and Authentication): GINA è una DLL sostituibile che contiene l’interfaccia utente per fornire le credenziali di accesso (nome utente e password). Se si utilizza una smartcard, GINA viene sostituita con la DLL opportuna. Esiste anche la possibile di scrivere una GINA personalizzata, utilizzando le informazioni contenuti nel SDK.
SAM (Security Account Manager): Il database SAM viene utilizzato da
Windows 2000 per memorizzare le informazioni sugli account utente. Interagisce
con LSA durante la fase di autenticazione di un utente, confrontando le
informazioni ricevute da LSA con le informazioni memorizzate, e in caso di
corrispondenza esatta ritorna il SID dell’utente e quello dei
gruppi di cui è
membro.
AD (Active Directory):
è un archivio gerarchico e orientato agli
oggetti condiviso su un dominio o
su una foresta di dominio, contenente informazioni sugli account locali e sulla
politiche legate alla rete.
Servizio d’accesso di rete (Network Logon Service): E’ un servizio di modalità utente, che supporta l’autenticazione degli accessi per i computer di un dominio.
Pacchetti di sicurezza: I pacchetti inclusi con Windows 2000 sono:
§
Kerberos;
§
MSV_0;
§
Schannel.
Kerberos è un protocollo ormai celebre, mentre MSV_0 è un protocollo proprietario di Microsoft che è una regressione ai tempi andati del vecchio LanManager. Quanto a Schannel, esso implementa i protocolli del canale protetto, quali SSL (Secure Socket Layer) e PKI (infrastruttura di chiave pubblica).
SSPI (Security Support Provider Interface): E’ una comune API che fornisce i servizi di sicurezza integrata per l’autenticazione, l’integrità e la privacy di qualunque protocollo d’applicazione distribuito. Essa può tornare molto utile a quegli sviluppatori che adoperano nelle proprie applicazioni file di password o password memorizzate in campi di database e intendono proteggere tali dati: suddetti sviluppatori possono così avvantaggiarsi di questa interfaccia, per ottenere facilmente i servizi di sicurezza direttamente dal sistema operativo.
PKI (Public Key Infrastructure):
fornisce gli strumenti utili a costruire e gestire un forte sistema di sicurezza
basato sulle chiavi pubbliche.
EFS (Encrypting File System): consente di proteggere i dati memorizzati su un computer, criptando i
files o le cartelle specificate.
IPSec (Internet Protocol Security): è una suite che permette di far viaggiare i dati in maniera sicura e
cifrata tra due computer su una rete insicura.
CryptoAPI (Cryptography API): fornisce tutte le funzioni necessarie per garantire l’autenticazione, la
privacy e l’integrità dei dati scambiati nella rete.
Figura
5
– Interazione tra componenti nella fase di autenticazione utente
L’autenticazione utente viene eseguita nel momento in cui lo stesso
tenta di accedere al sistema. L’autenticazione segue percorsi diversi a
seconda che si utilizzino le stazioni di lavoro o i server. Inoltre, per venire
incontro a quelle aziende che utilizzano per le stazioni di lavoro ancora NT o i
vecchi sistemi legaci come Windows 95 e 98, come protocollo di autenticazione
viene utilizzato anche NTLM (NT LanManager), oltre che il più nuovo e più
collaudato Kerberos.
La procedura di accesso comincia quando, premendo CTRL+ALT+CANC compare la
finestra di dialogo per l’immissione delle credenziali (Nome, Password,
Dominio). Confermata l’immissione, le credenziali vengono utilizzate da LSA
per effettuare l’autenticazione
dell’utente.
In particolare, il processo di autenticazione può essere eseguito in
maniera diversa:
A prescindere da
quale sia la procedura eseguita per l'autenticazione, se l’accesso è consentito LSA chiama
l’esecutivo per creare l’access token.
Viene poi avviata la
procedura per la creazione della shell locale.
![]() |
Figura 6
– Il generico processo di logon