Una guida agli attributi collegati di Active Directory
Feb 20, 2017
L’attributo collegato di Active Directory è un tipo speciale di attributo utilizzato per descrivere le relazioni tra oggetti. Questo articolo spiega cosa sono gli attributi collegati e come funzionano.
Handpicked related content:
Cosa rende un attributo un attributo collegato?
Ogni attributo in Active Directory è definito da un oggetto AttributeSchema nella partizione dello schema di Active Directory. Gli oggetti AttributeSchema che definiscono attributi collegati sono gli unici oggetti schema che possiedono un attributo LinkID popolato. Di conseguenza, identificare tutti gli attributi collegati in un dominio è semplice come utilizzare PowerShell per cercare nello schema oggetti con un LinkID popolato, come questo:
Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -LDAPFilter "(LinkID=*)"
Gli attributi collegati esistono generalmente in coppie, un collegamento diretto e un collegamento inverso, che è definito dal valore dell'attributo LinkID:
- Forward link — The LinkID value is always a positive even integer.
- Back link — Il valore di LinkID è sempre un intero dispari positivo; infatti, è il valore del LinkID del relativo forward link aumentato di uno.
Gli attributi con i valori di LinkID più piccoli sono l'attributo Member e l'attributo MemberOf, che vengono utilizzati per tenere traccia dell'appartenenza ai gruppi in Active Directory. Quindi modifichiamo il nostro script PowerShell per limitare l'output solo a quei due attributi:
L'output ci rivela diversi fatti importanti riguardo a questi due attributi:
- Il valore di LinkID dell'attributo Member è 2, che è un numero intero pari. Ciò significa che l'attributo Member è un collegamento diretto.
- Il valore LinkID dell'attributo MemberOf è 3, che è un numero intero dispari. Ciò significa che l'attributo MemberOf è un collegamento inverso.
- Il valore LinkID del collegamento inverso MemberOf è il valore LinkID del collegamento diretto dell'attributo Member più uno (3 = 2 + 1). Ciò significa che l'attributo Member e l'attributo MemberOf sono attributi collegati associati.
Uno script PowerShell leggermente diverso può essere utilizzato per recuperare direttamente il nome dell'attributo collegato associato al collegamento diretto o al collegamento inverso, anche se non ti dice esplicitamente se l'attributo è un collegamento diretto o un collegamento inverso. Dovresti guardare il valore LinkID e determinarlo da solo.
Come funzionano gli attributi collegati di Active Directory?
Ora che abbiamo stabilito cosa sono gli attributi collegati e come identificarli, è il momento di esplorare il loro comportamento.
Gli attributi collegati memorizzano informazioni su una relazione tra due oggetti, a differenza degli attributi convenzionali di Active Directory, che memorizzano informazioni su un oggetto. Questa differenza funzionale si riflette nel fatto che Active Directory memorizza i valori degli attributi collegati in modo diverso rispetto a come memorizza i valori degli altri attributi.
Come sono memorizzati gli attributi collegati
I dati di Active Directory sono memorizzati nel file di database ntds.dit. I valori degli attributi convenzionali sono conservati in una tabella chiamata datatable. Gli attributi collegati hanno la loro tabella dedicata, denominata in modo appropriato link_table. Se diamo uno sguardo all'interno di uno snapshot del file di database ntds.dit del mio laboratorio, possiamo vedere come Active Directory memorizza i valori degli attributi collegati:
I riferimenti agli oggetti nella link_table utilizzano il tag del nome distinto dell'oggetto (DNT), che è in realtà la chiave primaria interna dei record nella datatable ntds.dit. Questo impedisce che le modifiche al nome distinto di un oggetto richiedano un aggiornamento delle voci associate nella link_table.
Lo screenshot evidenzia tre campi importanti nella link_table:
- link_DNT — Riferimento a un oggetto di collegamento diretto.
- backlink_DN — Un riferimento all'oggetto collegamento inverso associato.
- link_base — Un riferimento al LinkID dell'attributo di collegamento diretto. Questo campo utilizza il valore LinkID del collegamento diretto per identificare la relazione tracciata tra i due oggetti (anche se, come si può vedere nello screenshot, i valori nella tabella sono in realtà il valore LinkID diviso per 2).
Conseguenze pratiche di questo approccio alla memorizzazione degli attributi collegati
Anche se questo approccio di archiviazione può sembrare un po' strano, è in realtà un design geniale che comporta alcune importanti conseguenze pratiche:
- I valori dei link in avanti sono memorizzati; i valori dei link inversi sono costruiti. Questo è facilmente il concetto più importante da comprendere da questa discussione: I link inversi non memorizzano effettivamente informazioni. Poiché un'associazione tra due oggetti è un'entità singola, Active Directory non ha bisogno di memorizzare più di una copia dell'associazione. Quando viene interrogato un link in avanti, Active Directory può semplicemente restituire le voci della tabella dei link dove il DNT dell'oggetto interrogato corrisponde al valore nel campo link_DNT e il LinkID del link in avanti corrisponde al valore nel campo link_base. Quando viene interrogato un link inverso, Active Directory può calcolare i suoi valori restituendo le voci della tabella dei link dove il DNT dell'oggetto interrogato corrisponde al valore nel campo backlink_DNT e il LinkID del link in avanti associato (calcolato sottraendo 1 dal LinkID del link inverso) corrisponde al valore nel campo link_base.
- I valori dei link in avanti sono scrivibili; i valori dei link indietro sono di sola lettura. Una volta che si sa che Active Directory memorizza solo i valori dei link in avanti, questo probabilmente sembra ovvio. Tuttavia, ha una conseguenza importante: quando un attributo collegato viene modificato, Active Directory aggiorna il link in avanti, che modifica l'oggetto che possiede quel link. Il link indietro, che possiede un valore costruito di sola lettura, non può mai essere modificato, quindi l'oggetto che possiede il link indietro non viene modificato neanche.
Per illustrare perché questo è importante, consideriamo l'aggiunta di un utente a un gruppo. Questo aggiornamento modifica solo l'attributo Membro del gruppo; l'attributo MemberOf dell'utente non viene modificato. Poiché l'oggetto del gruppo ha subito una modifica materiale, i campi dei metadati che riflettono tale cambiamento (ad esempio, gli attributi “ModifyTimeStamp” e “WhenChanged”) vengono aggiornati. Quegli stessi campi dei metadati non sono aggiornati sull'oggetto utente perché, anche se il suo attributo MemberOf ora restituirà un valore diverso, l'attributo MemberOf stesso non è stato modificato. - I collegamenti in avanti sono obbligatori; i collegamenti inversi sono facoltativi. Alcuni articoli sugli attributi collegati affermano che gli attributi collegati hanno sempre sia un collegamento in avanti che uno inverso. Sebbene ciò sia spesso vero, la presenza di un collegamento inverso non è strettamente necessaria. Infatti, se utilizziamo PowerShell per recuperare coppie di attributi collegati, possiamo vedere che non ogni collegamento in avanti nel mio laboratorio ha un collegamento inverso associato:
Vantaggi di questo Approccio per l'Archiviazione degli Attributi Collegati
Ricordi quando ho detto che il modo in cui vengono memorizzati gli attributi collegati è piuttosto geniale? L'approccio di Active Directory per la memorizzazione dei valori degli attributi collegati offre effettivamente due benefici davvero significativi.
Innanzitutto, memorizzare solo i valori dei link in avanti e utilizzarli per calcolare i valori dei link inversi associati riduce le dimensioni del database Active Directory.
Un altro vantaggio fondamentale, che è leggermente meno evidente, deriva dal fatto che Active Directory memorizza ogni associazione individualmente. Poiché ogni associazione di un collegamento diretto ha la propria voce nella link_table, ogni voce può mantenere il proprio Update Sequence Number (USN). Questo comportamento è chiamato Linked Value Replication (LVR) e permette ad Active Directory di replicare ogni singola associazione indipendentemente. Ad esempio, se aggiungi un utente a un gruppo con 100 membri esistenti, viene replicata solo la voce dell'utente appena aggiunto. Questo può ridurre significativamente il volume di replicazione necessario per propagare le modifiche agli attributi collegati.
Fatto Bonus
Before I tie a bow on all of this, there’s one other behavior that is worth mentioning: Linked attribute values are removed from deleted objects unless the AD Recycle Bin is enabled. When an object that has a linked attribute is deleted, even though Active Directory maintains the object itself for a time as a tombstone, the object’s associated link_table entries are also deleted. Enabling the Active Directory Recycle Bin changes this behavior and retains the associated link_table entries for the duration of the deleted object’s tombstone period.
Conclusione
Poiché gli attributi collegati di Active Directory sono memorizzati in modo diverso rispetto ad altri attributi di Active Directory, si comportano in modo diverso. Questo è particolarmente vero per gli attributi di back link. Se c'è una sola cosa da ricordare da questo articolo, deve essere il fatto che i back link sono attributi costruiti — i loro valori non sono memorizzati direttamente e, di conseguenza, non si comportano affatto come gli altri attributi, specialmente per quanto riguarda gli aggiornamenti. Active Directory generalmente fa un ottimo lavoro nel nascondere i suoi comportamenti di back-end per il bene di un'esperienza utente coerente, ma comprendere queste differenze sottostanti sugli attributi e le loro conseguenze può prevenire problemi.
Come Netwrix può aiutare
Proteggi il tuo Active Directory da un capo all'altro con la soluzione di sicurezza Active Directory di Netwrix. Ti permetterà di:
- Scopri i rischi per la sicurezza in Active Directory e dai priorità ai tuoi sforzi di mitigazione.
- Rafforza le configurazioni di sicurezza in tutta la tua infrastruttura IT.
- Rilevate e contenete tempestivamente minacce avanzate, come gli attacchi di tipo DCSync e Golden Ticket.
- Rispondi istantaneamente alle minacce note con opzioni di risposta automatizzate.
Minimizza le interruzioni aziendali con un rapido recupero di Active Directory.
Condividi su
Scopri di più
Informazioni sull'autore
Joe Dibley
Ricercatore di sicurezza
Ricercatore di sicurezza presso Netwrix e membro del Netwrix Security Research Team. Joe è un esperto in Active Directory, Windows e una vasta gamma di piattaforme software aziendali e tecnologie, Joe ricerca nuovi rischi per la sicurezza, tecniche di attacco complesse e relative mitigazioni e rilevamenti.
Scopri di più su questo argomento
Leggi sulla Privacy dei Dati per Stato: Diversi Approcci alla Protezione della Privacy
Esempio di Analisi del Rischio: Come Valutare i Rischi
Il Triangolo CIA e la sua applicazione nel mondo reale
Cos'è la gestione dei documenti elettronici?
Analisi quantitativa del rischio: Aspettativa di perdita annuale