Dešifriranje vrijednosti atributa userAccountControl u Active Directoryu

UserAccountControl jedan je od važnih atributa korisničkih računa i računala Active Directory. Ovaj atribut određuje status računa u domeni: je li račun aktivan ili zaključan, je li omogućena mogućnost promjene lozinke kod sljedeće prijave, može li korisnik promijeniti lozinku itd.). Međutim, nemaju svi administratori jasnu ideju o tome kako se koristi atribut UserAccountControl i zašto se koristi u AD-u..

Na primjer, otvorite svojstva bilo kojeg AD računa u ADUC konzoli i idite na karticu račun (Račun). Primjetite grupu atributa korisnika u odjeljku Kontrola računa (Postavke računa). Ovdje su dostupne sljedeće opcije računa:

  • Korisnik mora promijeniti lozinku pri sljedećoj prijavi (Zahtijeva promjenu lozinke pri sljedećoj prijavi);
  • Korisnik ne može promijeniti lozinku;
  • Lozinka nikada ne ističe (lozinka nije ograničena);
  • Spremite lozinku pomoću reverzibilne enkripcije (nesigurna enkripcija) - nesigurno;
  • Račun je onemogućen
  • Pametna kartica potrebna je za interaktivnu prijavu (potrebna je pametna kartica za interaktivnu prijavu u mrežu);
  • Račun je osjetljiv i ne može biti delegiran (račun je važan i ne može biti delegiran);
  • Za ovaj račun koristite vrste enkripcije Kerberos DES (za ovaj račun koristite samo vrste šifriranja Kerberos DES);
  • Ovaj račun podržava Kerberos AES 128/256 bitnu enkripciju (Ovaj račun podržava 128/256-bitnu Kerberos AES enkripciju);
  • Ne zahtijeva Kerberos prethodnu provjeru identiteta (bez prethodne provjere Kerberos).

Svaki od ovih atributa računa u osnovi je bitna vrijednost koja može biti u stanju 1 (True) ili 0 (False). No, te se vrijednosti ne pohranjuju kao zasebni atributi AD, umjesto toga koristi se atribut UserAccountControl.

sadržaj:

  • UserAccountControl - Atribut Active Directory
  • PowerShell skripta za dešifriranje UserAccountControl vrijednosti

UserAccountControl - Atribut Active Directory

Ukupna vrijednost svih ovih opcija pohranjuje se u vrijednost atributa računa UserAccountControl, odnosno umjesto toga, jedan atribut Active Directory koristi se za spremanje svih ovih opcija u različite atribute. Atribut UserAccountControl je bitna maska, svaki bit je zasebna zastava koja prikazuje vrijednost jedne od navedenih opcija i može imati različitu vrijednost (uključeno ili isključeno). Prema tome, ovisno o omogućenim opcijama računa, korisnik će dobiti drugačiju vrijednost za atribut UserAccountControl. Možete vidjeti trenutnu vrijednost atributa na kartici Uređivač atributa ili pomoću sljedećeg PowerShell Get-ADUser cmdleta:

get-aduser user1 -properties * | odaberite ime, UserAccountControl | ft

U ovom primjeru vrijednost atributa 0x10202 (u decimalnom zapisu 66.050). Što znače ovi brojevi??

Ispod je tablica dostupnih zastava računa u AD-u. Svaka od zastava odgovara određenoj bit atributa UserAccountControl, a vrijednost UserAccountControl jednaka je zbroju svih zastava.

zastavaVrijednost u HEX-u Decimalna vrijednost
SCRIPT (Pokreni prijavu za prijavu)0x00011
RAČUNOVODSTVO (račun onemogućen)0x00022
HOMEDIR_REQUIRED (potrebna je početna mapa)0x00088
LOCKOUT (račun je zaključan)0x001016
PASSWD_NOTREQD (nije potrebna lozinka)0x002032
PASSWD_CANT_CHANGE (Zabrani promjenu korisničke lozinke)0x004064
ENCRYPTED_TEXT_PWD_ALLOWED (Spremite lozinku koristeći reverzibilno šifriranje)0x0080128
TEMP_DUPLICATE_ACCOUNT (korisnički račun čiji je glavni račun pohranjen na drugoj domeni)0x0100256
NORMAL_ACCOUNT (zadani račun. Normalni aktivni račun)0x0200512
INTERDOMAIN_TRUST_ACCOUNT0x08002048
WORKSTATION_TRUST_ACCOUNT0x10004096
SERVER_TRUST_ACCOUNT0x20008192
DONT_EXPIRE_PASSWORD (Lozinka nije istekla)0x1000065.536
MNS_LOGON_ACCOUNT0x20000131072
SMARTCARD_REQUIRED (Pametna kartica potrebna za interaktivni pristup mreži)0x40000262144
TRUSTED_FOR_DELEGATION0x80000524288
NOT_DELEGATED0x1000001048576
USE_DES_KEY_ONLY0x2000002097152
DONT_REQ_PREAUTH (nije potrebna Kerberos autentifikacija)0x4000004194304
PASSWORD_EXPIRED (Korisnička lozinka je istekla)0x8000008388608
TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216
PARTIAL_SECRETS_ACCOUNT0x0400000067108864

Na primjer, postoji redovan račun za koji je zahtjev za promjenu zaporke onemogućen. Vrijednost userAccountControl dobiva se na sljedeći način

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048

Prema tome, vrijednost userAccountControl iz mog primjera (66050) pokazala se kako slijedi:

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) + RAČUNOVODSTVO (2) = 66050

Za normalno zaključani račun vrijednost userAccountControl bit će 514:

(NORMAL_ACCOUNT (512) + RAČUNOVODSTVENO (2) = 514)

Zadane vrijednosti UserAccountControl za tipične objekte domene:

  • Standardni korisnik: 0x200 (512)
  • Kontroler domene: 0x82000 (532480)
  • Radna stanica / poslužitelj: 0x1000 (4096)

Pomoću filtara možete odabrati između AD objekata s određenom vrijednošću atributa useraccountcontrol. Na primjer, za prikaz svih aktivnih (uobičajeni računi):

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 512)"

Popis svih blokiranih računa:

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 514)"

Popis računa s neograničenom zaporkom:

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol = 66048)"

Možete dodati potrebne bitove iz tablice i odabrati AD objekte pomoću sljedećih naredbi:

$ UserAccountControl_hex = 0x10000 + 0x0080 + 0x200000
Get-ADUser -Filter UserAccountControl -band $ UserAccountControl_hex

PowerShell skripta za dešifriranje UserAccountControl vrijednosti

Radi praktičnosti želite imati pri ruci alat koji bi automatski pretvarao vrijednost UserAccountControl bitmaske u normalan ljudski oblik. Pokušajmo napisati jednostavnu funkciju za skripte PowerShell koja uzima decimalnu vrijednost atributa UserAccountControl i prikazuje popis uključenih računovodstvenih opcija. jer Atribut UserAccountControl je bitna maska, svakom bitu možete dodijeliti tekstualni opis.

Dobio sam takvu PowerShell skriptu za pretvorbu vrijednosti UserAccountControl u čitljiv oblik:

Funkcija ConvertUserAccountControl ([int] $ UAC)

$ UACPropertyFlags = @ (
„Scenarij”,
"ACCOUNTDISABLE",
„REZERVIRANO”,
"HOMEDIR_REQUIRED",
"Lockout",
"PASSWD_NOTREQD",
"PASSWD_CANT_CHANGE",
"ENCRYPTED_TEXT_PWD_ALLOWED",
"TEMP_DUPLICATE_ACCOUNT",
"NORMAL_ACCOUNT",
„REZERVIRANO”,
"INTERDOMAIN_TRUST_ACCOUNT",
"WORKSTATION_TRUST_ACCOUNT",
"SERVER_TRUST_ACCOUNT",
„REZERVIRANO”,
„REZERVIRANO”,
"DONT_EXPIRE_PASSWORD",
"MNS_LOGON_ACCOUNT",
"SMARTCARD_REQUIRED",
"TRUSTED_FOR_DELEGATION",
"NOT_DELEGATED",
"USE_DES_KEY_ONLY",
"DONT_REQ_PREAUTH",
"PASSWORD_EXPIRED",
"TRUSTED_TO_AUTH_FOR_DELEGATION",
„REZERVIRANO”,
"PARTIAL_SECRETS_ACCOUNT"
„REZERVIRANO”
„REZERVIRANO”
„REZERVIRANO”
„REZERVIRANO”
„REZERVIRANO”
)

$ Atributi = ""
1 ... ($ UACPropertyFlags.Length) | Where-Object $ UAC -bAnd [math] :: Pow (2, $ _) | ForEach-Object If ($ Attributes.Length -EQ 0) $ Atributi = $ UACPropertyFlags [$ _] Ostalo $ Atributi = $ Atributi + "|" + $ UACPropertyFlags [$ _]
Vratite $ Atribute

Provjerite koja je vrijednost UserAccountControl 66050:

ConvertUserAccountControl 66050

Kao što vidite, skripta je vratila da korisnik ima omogućene atribute:

ACCOUNTDISABLE + NORMAL_ACCOUNT + DONT_EXPIRE_PASSWORD

Ista skripta može se upotrijebiti za dešifriranje vrijednosti UserAccountControl u pokretu, prilikom preuzimanja podataka o njihovim AD vjerodajnicama u prikladnom obliku pomoću cmdleta Get-AdUser ili Get-AdComputer:

get-aduser sam-prnt -properties * | odaberite @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)

RAČUNOVODSTVENO | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

get-adcomputer sam-dc01 -properties * | odaberite @ n = 'UsrAcCtrl'; e = ConvertUserAccountControl ($ _. userAccountControl)

SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION