🏢Active DirectoryComputersConfigAttack Paths

Quota di account macchina in Active Directory (ms-DS-MachineAccountQuota): il valore predefinito che permette a qualsiasi utente di aggiungere un computer

Per impostazione predefinita, ms-DS-MachineAccountQuota permette a qualsiasi utente di Active Directory di unire 10 computer al dominio — la causa profonda silenziosa dietro le catene di escalation RBCD e di relay NTLM.

Younes AZABARDi Younes AZABAR9 min di lettura
Quota di account macchina in Active Directory (ms-DS-MachineAccountQuota): il valore predefinito che permette a qualsiasi utente di aggiungere un computer

Quota di account macchina in Active Directory (ms-DS-MachineAccountQuota): le basi

La quota di account macchina di Active Directory — l'attributo ms-DS-MachineAccountQuota, memorizzato sull'oggetto dominio stesso — è impostata su 10 per impostazione predefinita su ogni dominio. Questo significa che qualsiasi utente di dominio autenticato, senza alcun diritto amministrativo delegato, può unire fino a dieci nuovi account computer al dominio appena installato. Questo è vero fin dall'introduzione dell'attributo con Windows 2000 Server, ed è ancora il valore predefinito sui domini creati oggi, a meno che un amministratore non lo abbia esplicitamente rafforzato.

Un ingegnere Microsoft ha documentato questo valore predefinito senza mezzi termini sul blog TechNet dell'azienda già nel 2005: «La maggior parte di voi conosce il limite di 10 volte in cui gli utenti autenticati possono unire macchine a un dominio», descrivendo ms-DS-MachineAccountQuota come la proprietà dell'oggetto dominio che lo controlla, modificabile tramite ADSI Edit. Il riferimento attuale di Microsoft sulle policy di sicurezza per il diritto utente associato Aggiungi workstation al dominio (SeMachineAccountPrivilege) conferma lo stesso numero dal lato del privilegio: «Un utente a cui è assegnato questo diritto può aggiungere fino a 10 workstation al dominio», e sui controller di dominio questo diritto è concesso per impostazione predefinita al gruppo Utenti autenticati.

ℹ️

ℹ️ Nota: la quota e il diritto utente sono due controlli distinti che condividono lo stesso valore predefinito. ms-DS-MachineAccountQuota limita quanti computer un determinato account può creare; SeMachineAccountPrivilege controlla se un account può usare quella via di join self-service basata sulla quota.

Perché il valore predefinito non racconta tutta la storia

Esiste una seconda via, indipendente dalla quota, da conoscere prima di "correggere" questa impostazione: la stessa documentazione Microsoft precisa che «gli utenti possono unire un computer a un dominio anche se dispongono del permesso Create Computer Objects su un'unità organizzativa (OU) o sul contenitore Computers», e che gli utenti con quel permesso delegato «possono aggiungere un numero illimitato di dispositivi al dominio, indipendentemente dal fatto che dispongano o meno del diritto utente Aggiungi workstation al dominio». Azzerare la quota non cambia nulla per un account che detiene già i diritti delegati Create Computer objects su una OU — i due meccanismi devono essere rivisti insieme, il che spiega perché questa impostazione continua a comparire nelle rassegne delle configurazioni di sicurezza errate più comuni di Active Directory, anni dopo essere stata documentata per la prima volta.

Perché un account computer self-service è un punto d'appoggio

Un account computer non è un oggetto banale. È un principal di sicurezza a tutti gli effetti, con un proprio SID e una password scelta dal creatore (o generata da uno strumento) — che per impostazione predefinita finisce nel contenitore CN=Computers, di cui è proprietario il creatore e non gli amministratori di dominio. Di per sé non porta alcun privilegio particolare. Ciò che fornisce è un'identità unita al dominio e interamente controllata dall'attaccante — il prerequisito mancante per diverse tecniche di abuso della delega già trattate altrove in questo catalogo, in particolare l'abuso della delega vincolata basata sulle risorse (RBCD) e la più ampia superficie di attacco degli oggetti computer.

Creare questo account non richiede nulla di più di un utente di dominio standard e una quota superiore a zero. Gli strumenti pubblici lo rendono un'operazione di una sola riga, tutte documentate in riferimenti della community come la pagina MachineAccountQuota di The Hacker Recipes:

# Impacket — creazione di un account computer via SAMR
addcomputer.py -computer-name 'PWN01$' -computer-pass 'P@ssw0rd123!' \
  -dc-host dc01.corp.local corp.local/lowpriv:'Password1'
# Powermad — stesso risultato via LDAP da un host Windows unito al dominio
New-MachineAccount -MachineAccount PWN01 -Password (ConvertTo-SecureString 'P@ssw0rd123!' -AsPlainText -Force)

bloodyAD e Certipy account create espongono la stessa primitiva via LDAP, per gli operatori che preferiscono un unico strumento multipiattaforma. Nessuno di questi richiede privilegi elevati — solo il valore predefinito di 10 in ms-DS-MachineAccountQuota.

⚠️

⚠️ Avvertenza: un attaccante non ha bisogno di compromettere nulla per arrivare a questo passaggio. Un solo set di credenziali di dominio a basso privilegio — spesso ottenute tramite phishing o password spraying — è sufficiente.

La catena di attacco: da un account computer gratuito all'abuso della delega

Passo 1 — Confermare che la quota sia sfruttabile

Una rapida query LDAP, anonima o autenticata, contro l'oggetto dominio rivela il valore in vigore:

ldapsearch -x -H ldap://dc01.corp.local -D 'corp\lowpriv' -w 'Password1' \
  -b 'DC=corp,DC=local' -s base '(objectClass=domain)' ms-DS-MachineAccountQuota

Se il valore restituito è maggiore di zero, e l'account che esegue la query non ha altre restrizioni, la creazione di account computer self-service è disponibile.

Passo 2 — Creare un account computer controllato dall'attaccante

Usando uno qualsiasi degli strumenti mostrati sopra, l'attaccante consuma un'unità della propria quota per creare un account macchina. Questa singola azione produce un SID macchina con una password nota — un'identità che non esisteva un istante prima e che gli amministratori di dominio non hanno provisionato, esaminato né approvato.

Passo 3 — Incatenare verso l'abuso della delega

L'account computer appena creato non è, di per sé, privilegiato — ma diventa l'identità controllata attraverso cui transitano le catene RBCD e di relay NTLM. Negli scenari di relay, tecniche di coercizione (ad esempio, l'autenticazione forzata in stile PetitPotam) vengono usate per inoltrare l'autenticazione NTLM di una vittima verso LDAP/LDAPS su un controller di dominio; ntlmrelayx.py di Impacket può quindi usare la sua opzione --delegate-access per creare un account computer durante quella sessione inoltrata e, nello stesso passaggio, configurare msDS-AllowedToActOnBehalfOfOtherIdentity sul target inoltrato, in modo che il nuovo account computer possa impersonare utenti arbitrari nei suoi confronti tramite S4U2Self/S4U2Proxy — trasformando una singola autenticazione inoltrata in accesso RBCD permanente. La meccanica completa dell'RBCD stesso, così come l'insieme più ampio dei modi in cui gli attributi e le ACL di un oggetto computer vengono abusati, sono trattati nei due articoli collegati sopra; la quota di account macchina è l'impostazione che fornisce all'attaccante l'oggetto computer di cui quelle catene hanno bisogno in primo luogo.

Rilevamento

IndicatoreID evento / AttributoFonteCosa cercare
Account computer creato4741Log di sicurezza del DCTargetUserName termina con $; SubjectUserName è un utente standard invece di un account di provisioning/servizio atteso
Marcatore di creazione self-servicemS-DS-CreatorSIDLDAP, oggetto computerValorizzato solo quando l'oggetto è stato creato tramite la via self-service basata sulla quota, da un account non admin e non delegato — un oggetto computer creato da un admin o per delega lascia questo campo vuoto
Valore di quota in vigorems-DS-MachineAccountQuotaOggetto dominio (LDAP)Qualsiasi valore diverso da zero su un dominio dove il join self-service non è un flusso di lavoro previsto
Creazione a rafficaAggregato di 4741SIEMLo stesso SubjectUserName che crea più oggetti computer in poco tempo — un utente legittimo raramente unisce diverse macchine in pochi minuti
# Valore attuale della quota
Get-ADObject (Get-ADDomain).DistinguishedName -Properties ms-DS-MachineAccountQuota

# Oggetti computer creati via la via self-service per quota (mS-DS-CreatorSID valorizzato)
Get-ADComputer -Filter * -Properties ms-DS-CreatorSID |
    Where-Object { $_.'ms-DS-CreatorSID' } |
    Select-Object Name, DistinguishedName, ms-DS-CreatorSID

Stabilire una baseline per il provisioning legittimo

💡

💡 Suggerimento: stabilisci una baseline del volume "normale" di eventi 4741 per la tua pipeline di provisioning legittima (SCCM, Intune Hybrid Join, imaging) prima di generare alert su di essa — altrimenti l'onboarding ordinario dei dispositivi annegherà il segnale.

Gli strumenti di provisioning legittimi in genere vengono eseguiti con account di servizio dedicati, unendo le macchine a una OU nota secondo una pianificazione prevedibile. Qualsiasi evento 4741 in cui SubjectUserName sia un account utente finale standard, o in cui l'oggetto computer risultante finisca fuori da quella OU, merita un controllo, indipendentemente dal volume.

Remediation

  1. Disattivare la quota azzerandola a livello di dominio. Questo è il cambiamento con il maggiore impatto:

    Set-ADDomain -Identity corp.local -Replace @{'ms-DS-MachineAccountQuota'='0'}
    

    Verifica con la query Get-ADObject della sezione Rilevamento.

  2. Limitare e riassegnare il diritto "Aggiungi workstation al dominio". Secondo le stesse indicazioni di sicurezza Microsoft, rimuovilo dal gruppo Utenti autenticati nella policy predefinita dei controller di dominio, e concedi SeMachineAccountPrivilege solo a un gruppo di provisioning dedicato. La quota da sola non chiude questa porta — il diritto utente è il secondo controllo, e le stesse indicazioni Microsoft segnalano che lasciarlo su Utenti autenticati costituisce una «vulnerabilità moderata».

  3. Limitare e delegare Create Computer objects in modo ristretto. Concedi questo permesso solo su una OU dedicata ai computer, solo all'account o al gruppo che effettivamente provisiona le macchine (account di servizio di imaging, SCCM, Intune Hybrid Join) — mai a Utenti autenticati o Utenti del dominio. Questo permesso delegato aggira completamente la quota: il perimetro conta più del numero.

  4. Monitorare e generare un alert sull'ID evento 4741 combinato con un mS-DS-CreatorSID valorizzato, in particolare per gli oggetti computer che finiscono fuori dalla OU di provisioning attesa.

  5. Verificare di nuovo dopo ogni migrazione o nuova creazione di dominio. ms-DS-MachineAccountQuota è impostato per oggetto dominio; un dominio appena promosso o migrato reintroduce il valore predefinito di 10 a meno che non venga esplicitamente rafforzato di nuovo.

Verificare la correzione

Dopo aver azzerato la quota e riassegnato il diritto utente, conferma che la modifica sia realmente efficace tentando un join al dominio da un account di test standard, non delegato — deve fallire con un errore di accesso negato. Riesegui la query Get-ADObject della sezione Rilevamento per confermare il valore memorizzato, poiché il ritardo di propagazione dei GPO può altrimenti far sembrare una modifica applicata prima che abbia raggiunto ogni controller di dominio.

🚨 Pericolo: gli amministratori di dominio, così come qualsiasi account con delega separata di Create Computer objects, non sono mai limitati dalla quota. Portarla a 0 è necessario, ma non sufficiente — abbina questa modifica alle modifiche del diritto utente e della delega precedenti.

Questa impostazione è esattamente il tipo di controllo su un singolo attributo che ha il suo posto in un audit di sicurezza di Active Directory ricorrente piuttosto che in una correzione una tantum, dato che torna silenziosamente al suo valore predefinito su qualsiasi dominio appena creato o migrato.

Come EtcSec rileva questo problema

L'audit Active Directory di EtcSec segnala un ms-DS-MachineAccountQuota lasciato sopra zero come Quota di account macchina elevata sopra il valore predefinito, e traccia separatamente le condizioni di sfruttamento come Abuso della quota di account macchina, correlando il valore di quota in vigore con i risultati di delega e di oggetti computer come RBCD su oggetto computer e Abuso di RBCD, in modo che la catena che va da "qualsiasi utente può aggiungere un computer" a "qualsiasi utente può impersonare un principal privilegiato su un host target" venga evidenziata come un unico percorso di attacco anziché come quattro risultati non correlati.

ℹ️

ℹ️ Nota: EtcSec verifica automaticamente questa vulnerabilità a ogni audit AD. Esegui un audit gratuito per verificare il tuo ambiente.

Esplora le pagine di identity security collegate a questo tema