Che cosa è SDDL
Un linguaggio destinato a permettere lo scambio di descrittori di sicurezza tra sistemi differenti (Windows) senza necessariamente avere un contesto identico tra i sistemi stessi.
SDDL permette quindi di strutturare una stringa testuale che può essere utilizzata da alcune funzioni al fine di definire un Security Descriptor, ossia una serie di informazioni di sicurezza che possono essere applicate ai vari oggetti di sistema.
Lettura del Log Eventi
In alcuni casi, ad esempio se si raccolgono centralmente gli eventi generati sui vari sistemi, può essere necessario consentire l’accesso ai registri sulle postazioni a determinati utenti o servizi, in questo caso è tramite il gruppo locale “Event Log Readers” è possibile fare si che un determinato account abbia accesso alla lettura dei vari registri.
Tuttavia può essere necessario permettere un accesso più granulare, l’appartenenza al gruppo consente l’accesso generalizzato a TUTTI i registri.
Per poter discriminare maggiormente chi può leggere e da quale registro è necessario utilizzare SDDL, (Structured Descriptor Definition Language)
Gestione della security tramite SDDL nei registri eventi
Ogni oggetto all’interno del sistema operativo deve sottostare a criteri di accesso definita dalle ACL, in questo senso non fanno eccezione i vari registri eventi per i quali come detto in precedenza il solo gruppo “Event Log Readers” può non essere sufficiente a “modellare” la security secondo le esigenze.
Vedremo più aventi come l’utility icacls è in grado di esportare ed impostare le varie ACL su file system a partire da stringhe in formato SDDL, l’utility analoga per il registro eventi è il tool wevtutil che permette una gestione completa del sistema di archiviazione eventi di Windows
Il comando wevtutil gl security ad esempio rileva le informazioni relative al log di sicurezza compresi i permessi di accesso al channel tramite il quale il registro è utilizzato sia in lettura che in scrittura.
Nell’esempio riportato sopra, vediamo un’impostazione di default su Windows 10 e possiamo notare che l’ultima parte della stringa SDDL riporta anche un SID che è quello del gruppo locale di “Event Log Readers” questo gruppo ed il suo Secure Identifier è documentato come Well-Known SID qui.
O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)
Con la scrittura di una stringa SDDL possiamo estendere o modificare i permessi di accesso ai singoli registri eventi applicandola poi al sistema.
Ad esempio se volessimo permettere ad un determinato utente l’accesso solo al registro security, dovremo dapprima recuperarne il SID e con questo comporre la stringa da impostare
wevtutil sl security /ca:O:BAG:SYD:(A;;0xf0005;;;SY)(A;;0x5;;;BA)(A;;0x1;;;S-1-5-32-573)(A;;0x1;;;S-1-5-21-3744379440-2296965582-3114473425-1003)
il comando sopra imposta il contesto di sicurezza del channel relativo al registro di Security per l’utente il cui sid è stato rilevato tramite il comando whoami /all
vediamo ora come, tramite SDDL possiamo impostare le varie Access Control Entries (ACE) sugli oggetti, ogni parentesi è assimilabile ad un blocco che definisce un preciso accesso ad un utente/gruppo dichiarato con il proprio SID.
Con l’esempio precedente abbiamo permesso all’utente l’accesso in LETTURA al registro SECURITY
Analisi di una stringa SDDL
La struttura della stringa è composta di alcune parti Owner, Gruppo e DACL (Discretionary Access Control List)
Quest’ultima è poi strutturata e strutturabile in diverse parti, tutte racchiuse tra parentesi, che contengono i permessi veri e propri per le varie entità, ognuna di queste parti prende il nome di ACE (Access Control Entry)
O:BAG:SYD: – la prima parte dichiara che l’Owner (O) è BA ossia il Built-In Administrator Account
O:BAG:SYD: – la seconda parte dichiara che il gruppo (G) è SY, identificato come LOCAL SYSTEM.
O:BAG:SYD: – la terza parte identificata con (D) formalmente dichiara l’inizio della DACL.
Composizione di una DACL
L’insieme di tutte le ACE prendono il nome di DACL, di default le prime due ACE sono relative al Local System (SY) e Built-in-Administrator (BA) entrambe riportano il permesso di accesso (A) con Read e Write consentiti da 0x5 e 0xf0005.
Struttura di una ACE
Analizzando la ACE relativa al SID S-1-5-32-573, che è l’identificativo del gruppo Event Log Readers, vediamo che è strutturata con A;;0x1;;;<SID>
La prima lettera A indica (A)llow ed il secondo gruppo indica i tipi di permesso di accesso secondo la tabella riportata qui sotto, nel nostro caso esclusivamente il permesso di lettura.
0x1=Read
0x2=Write
0x3=Read/Write
0x4 = Delete
Il messaggio che si otterrà nel caso si tenti di cancellare il registro con il solo permesso di Read è il seguente
È consigliabile prestare attenzione al privilegio minimo per cui si intende consentire l’accesso al registro, se per ipotesi volessimo permettere la sola cancellazione degli eventi, senza consentirne la visualizzazione, il minimo permesso dovrebbe essere 0x4 ossia Delete, in questo caso lo snap in di visualizzazione riporterebbe il seguente errore.
Anche per la sola cancellazione è necessario attribuire il permesso di Read, che risulterà in una ACE di questo tipo
(A;;0x5;;;S-1-5-21-3744379440-2296965582-3114473425-1003)
Dove 0x5 è appunto l’accesso in read + delete
Utilizzo di SDDL per la gestione delle ACL su Filesystem
L’utilizzo delle stringhe SDDL può anche essere utilizzato per rilevare ed eventualmente impostare la security sugli oggetti di un Filesystem. Tramite l’utility icacls una ACL relativa ad un file o ad una determinata cartella può essere “esportata” o per meglio dire tradotta in una stringa SDDL
Vediamo come:
Qui sopra è visualizzata una ACL dichiarata su una cartella contenente un file
Con il comando Icacls, possiamo visualizzarne la security
Icacls c:\SddlAcl
Viene riportata in modo analogo alla visualizzazione precedente la M (modifica) presente nella ACL
A questo punto sempre con Icacls è possibile esportare la security dell’intera struttura, operazione che eseguita poi in restore consentirà di reimpostare i permessi sull’intero albero di cartelle
icacls c:\SddlAcl /save c:\Temp\NtfsAcl.txt /t /c
Questo comando esporta la security di un oggetto salvandola in un file /T esporta i permessi delle sottocartelle /C continua in caso di errori
Questo è il risultato dell’esportazione, ossia una stringa in formato SDDL che può essere quindi facilmente interpretata e manipolata, ad esempio per ripristinare la security.
Eseguendo il comando
icacls c:\ /restore c:\Temp\NtfsAcl.txt
verrà ripristinata la security sull’intera struttura di file e cartelle.
Riferimenti
https://blogs.technet.microsoft.com/askds/2008/04/18/the-security-descriptor-definition-language-of-love-part-1/
https://blogs.technet.microsoft.com/askds/2008/05/07/the-security-descriptor-definition-language-of-love-part-2/
https://support.microsoft.com/en-us/help/323076/how-to-set-event-log-security-locally-or-by-using-group-policy