Dešifriranje vrednosti atributa userAccountControl v Active Directoryu

UserAccountControl je eden pomembnih atributov uporabniških računov in računalnikov Active Directory. Ta atribut določa stanje računa v domeni: ali je račun aktiven ali zaklenjen, ali je možnost spremembe gesla ob naslednji prijavi omogočena, ali lahko uporabnik spremeni geslo itd.). Vendar nimajo vsi skrbniki jasne predstave o tem, kako se uporablja atribut UserAccountControl in zakaj se uporablja v AD..

Na primer, odprite lastnosti katerega koli računa AD na konzoli ADUC in pojdite na zavihek Račun (Račun). V razdelku upoštevajte skupino uporabniških atributov Nadzor računa (Nastavitve računa). Tu so na voljo naslednje možnosti računa:

  • Uporabnik mora spremeniti geslo ob naslednji prijavi (Zahtevati spremembo gesla ob naslednji prijavi);
  • Uporabnik ne more spremeniti gesla;
  • Geslo nikoli ne poteče (geslo ni omejeno);
  • Shranite geslo z uporabo reverzibilne enkripcije (nezanesljivo šifriranje) - nevarno;
  • Račun je onemogočen
  • Pametna kartica je potrebna za interaktivno prijavo (pametna kartica je potrebna za interaktivno prijavo v omrežje);
  • Račun je občutljiv in ga ni mogoče prenesti (račun je pomemben in ga ni mogoče prenesti);
  • Za ta račun uporabite vrste šifriranja Kerberos DES (za ta račun uporabite samo vrste šifriranja Kerberos DES);
  • Ta račun podpira Kerberos AES 128/256 bitno šifriranje (Ta račun podpira 128/256-bitno šifriranje Kerberos AES);
  • Ne zahtevajte predhodne avtentikacije Kerberos (brez predhodne overitve Kerberos).

Vsak od teh atributov računa je v bistvu bitna vrednost, ki je lahko v stanju 1 (resnično) ali 0 (napačno). Vendar te vrednosti niso shranjene kot ločeni atributi AD, namesto tega se uporablja atribut UserAccountControl.

Vsebina:

  • UserAccountControl - atribut Active Directory
  • Skript PowerShell za dešifriranje vrednosti UserAccountControl

UserAccountControl - atribut Active Directory

Skupna vrednost vseh teh možnosti je shranjena v vrednosti atributa računa UserAccountControl, t.j. namesto tega se za shranjevanje vseh teh možnosti v različne atribute uporablja en atribut Active Directory. Atribut UserAccountControl je bitna maska, vsak bit je ločena zastava, ki prikazuje vrednost ene od podanih možnosti in ima lahko drugačno vrednost (vklopljen ali izklopljen). V skladu s tem bo uporabnik, odvisno od omogočenih možnosti računa, dobil drugačno vrednost za atribut UserAccountControl. Trenutno vrednost vrednosti atributa si lahko ogledate na zavihku Urejevalnik atributov ali pa uporabite naslednji ukazni program PowerShell Get-ADUser:

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

V tem primeru vrednost atributa 0x10202 (v decimalnih zapisih) 66050) Kaj pomenijo te številke??

Spodaj je tabela razpoložljivih zastavic računov v AD. Vsaka zastava ustreza določenemu bitju atributa UserAccountControl, vrednost UserAccountControl pa je enaka vsoti vseh zastav.

ZastavaVrednost v HEX Decimalna vrednost
SCRIPT (Run Login Script)0x00011
RAČUNOVODSKO (račun onemogočen)0x00022
HOMEDIR_REQUIRED (potrebna je domača mapa)0x00088
LOCKOUT (račun je zaklenjen)0x001016
PASSWD_NOTREQD (geslo ni potrebno)0x002032
PASSWD_CANT_CHANGE (Zavrni spremembo uporabniškega gesla)0x004064
ENCRYPTED_TEXT_PWD_ALLOWED (Shrani geslo z reverzibilnim šifriranjem)0x0080128
TEMP_DUPLICATE_ACCOUNT (uporabniški račun, katerega glavni račun je shranjen na drugi domeni)0x0100256
NORMAL_ACCOUNT (privzeti račun. Običajni aktivni račun)0x0200512
INTERDOMAIN_TRUST_ACCOUNT0x08002048
WORKSTATION_TRUST_ACCOUNT0x10004096
SERVER_TRUST_ACCOUNT0x20008192
DONT_EXPIRE_PASSWORD (Geslo ni poteklo)0x1000065536
MNS_LOGON_ACCOUNT0x20000131072
SMARTCARD_REQUIRED (za interaktivni dostop do omrežja je potrebna pametna kartica)0x40000262144
TRUSTED_FOR_DELEGATION0x80000524288
NOT_DELEGATED0x1000001048576
USE_DES_KEY_ONLY0x2000002097152
DONT_REQ_PREAUTH (Kerberos overjanje ni potrebno)0x4000004,194,304
PASSWORD_EXPIRED (Uporabniško geslo je poteklo)0x8000008388608
TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216
PARTIAL_SECRETS_ACCOUNT0x0400000067108864

Na primer, obstaja navaden račun, za katerega je zahteva za spremembo gesla onemogočena. Vrednost userAccountControl dobimo na naslednji način

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048

V skladu s tem se je vrednost userAccountControl iz mojega primera (66050) izkazala na naslednji način:

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

Za običajno zaklenjen račun bo vrednost userAccountControl 514:

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

Privzete vrednosti UserAccountControl za značilne objekte domene:

  • Standardni uporabnik: 0x200 (512)
  • Krmilnik domene: 0x82000 (532480)
  • Delovna postaja / strežnik: 0x1000 (4096)

S filtri lahko izbirate med objekti AD z določeno vrednostjo atributa useraccountcontrol. Na primer za prikaz vseh aktivnih (običajni računi):

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

Seznam vseh blokiranih računov:

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

Seznam računov z neomejenim geslom:

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

Iz tabele lahko dodate potrebne bite in izberete predmete AD s pomočjo naslednjih ukazov:

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

Skript PowerShell za dešifriranje vrednosti UserAccountControl

Za udobje bi radi imeli pri roki orodje, ki bi vrednost bitčne maske UserAccountControl samodejno pretvorilo v normalno človeško obliko. Poskusimo napisati preprosto funkcijo za skripte PowerShell, ki sprejme decimalno vrednost atributa UserAccountControl in prikaže seznam vključenih računovodskih možnosti. Ker Atribut UserAccountControl je bitna maska, vsakemu bitju lahko dodelite opis besedila.

Dobil sem takšen skript PowerShell za pretvorbo vrednosti UserAccountControl v berljivo obliko:

Funkcija ConvertUserAccountControl ([int] $ UAC)

$ UACPropertyFlags = @ ((
PISMO,
"RAČUNOVODSKO",
"REZERVIRAN",
"HOMEDIR_REQUIRED",
"LOKKOUT",
"PASSWD_NOTREQD",
"PASSWD_CANT_CHANGE",
"ENCRYPTED_TEXT_PWD_ALLOWED",
"TEMP_DUPLICATE_ACCOUNT",
"NORMAL_ACCOUNT",
"REZERVIRAN",
"INTERDOMAIN_TRUST_ACCOUNT",
"WORKSTATION_TRUST_ACCOUNT",
"SERVER_TRUST_ACCOUNT",
"REZERVIRAN",
"REZERVIRAN",
"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",
"REZERVIRAN",
PARTIAL_SECRETS_ACCOUNT
"REZERVIRAN"
"REZERVIRAN"
"REZERVIRAN"
"REZERVIRAN"
"REZERVIRAN"
)

$ Atributi = ""
1 ... ($ UACPropertyFlags.Length) | Kjer-objekt $ UAC -bAnd [math] :: Pow (2, $ _) | ForEach-Object If ($ Attributes.Length -EQ 0) $ Attributes = $ UACPropertyFlags [$ _] Drug $ Attributes = $ Attributes + "|" + $ UACPropertyFlags [$ _]
Vrni atribute $

Preverite, koliko je vrednost UserAccountControl 66050:

ConvertUserAccountControl 66050

Kot vidite, je skript vrnil, da ima uporabnik omogočene atribute:

ACCOUNTDISABLE + NORMAL_ACCOUNT + DONT_EXPIRE_PASSWORD

Isti skript je mogoče uporabiti za dešifriranje vrednosti UserAccountControl med letenjem, kadar nalagate informacije o svojih akreditacijah AD v priročni obliki s pomočjo ukaznega okna Get-AdUser ali Get-AdComputer, na primer:

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

RAČUNOVODSKO | NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

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

SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION