Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Účty počítačů a jejich hesla
únor 19
Účty počítačů a jejich hesla

Zrovna včera měl jeden známý problém s hesly počítačů v doméně, tak jsem se rozhodl, že o tom rovnou sepíšu menší článeček. Už jsem se tu vyjadřoval o testování klientské konektivity, takže to ještě doplním o detaily těch hesel.

Účty počítačů v doméně

Každý počítač musí mít v Active Directory (AD) doméně svůj účet počítače. Je to účet uživatelský obohacený o další atributy týkající se počítačů. Jedná se tedy o rozšíření základního typu user (user class) na typ computer (computer class). Rozšíření přidává jen několik atributů jako je například operatingSystem, operatingSystemVersion a operatingSystemServicePack. Má to také trošku jiný výchozí security descriptor (default security descriptor) - počítače si mohou sami sobě (SELF) měnit hodnotu atributu servicePrincipalName, což normální uživatelé nemohou. A samozřejmě si počítač může sám sobě upravovat ty atributy s verzí operačního systému, aby se to mohlo měnit, když si třeba nainstalujete novou verzi service packu.

Důležité však je, že to je normální uživatelský účet. To znamená, že má login (sAMAccountName, ukončený znakem dolaru $), heslo a také třeba členství ve skupinách (memberOf). Heslo se na DC (Domain Controller) uchovává ve formě hash. V AD jsou ukládány i atributy jako je poslední změna hesla (pwdLastSet), nebo poslední ověření (přihlášení), což jsou dva atributy (lastLogon a lastLogonTimestamp). Každý účet (uživatel i počítač) má svůj SID. Tohle si můžete všimnout na obrázcích:

Jen pro pořádek, toho, že to je uživatel si můžete všimnout taky například když byste hledali v AD pomocí následujícího LDAP vyhledávacího dotazu (LDAP search string) všechny uživatele a ono to najde i účty počítačů:

(objectClass=user)

Jestli chcete hledat jenom uživatele, musíte to buď upravit, nebo používat atribut objectCategory.

(&(objectClass=user)(!objectClass=computer))
(objectCategory=person)

Hesla počítačů

Říkal jsem, že počítače mají v AD uložena svoje hesla (hash) a také svůj účet čas od času (ve skutečnosti celkem hojně), používají. Libovolný proces, který běží na stanici pod účtem SYSTEM, Network Service, pod servisní identitou (něco jako NT SERVICE\service-name) nebo pod AppPoolIdentity, ho používají pro přístup do sítě.

Co to třeba je? Stanice si stahuje Group Policy objekty ze sdíleného adresáře na Domain Controllerech (DC). K tomu potřebuje také napřed ale přístup do LDAP Active Directory. Když si počítač vydává sám certifikáty pomocí Autoenrollmentu, nebo ověřuje CRL certifikátů, které bývá uloženo také v AD. Když člověk používá DFS Namespace uložené v AD, musí se stanice také zeptat LDAPu. A plno dalších použití. Speciálně servery, jako je DHCP, RRAS, NPS/IAS, TMG/ISA/UAG, AD CS, AD FS, AD RMS, WDS a vlastně všechny.

Dokonce si to můžete vyzkoušet sami. Stačí, když si spustíte příkazovou řádku pod účtem SYSTEM, nebo Network Service a můžete si přístupy vyzkoušet sami (PSEXEC je ke stažení tady):

PSEXEC -d -i -s cmd
PSEXEC -d -i -u "NT Authority\Network Service" cmd

Uložení hesla na stanici $MACHINE.ACC

Na řadičích domény (DC) jsou hesla uložena jen ve formě hash. Ale stanice si heslo pamatuje v plné formě. Má ho uložené v registrech v klíči

HKLM\Security\Policy\Secrets\$Machine.ACC

Stanice si v tom klíči ukládá svoje aktuální heslo. Protože si to heslo ale pravidelně mění (jednou za 30 dnů ve výchozím stavu), tak si tam ukládá i předchozí verzi hesla. To je kvůli tomu, že po změně hesla ještě chvilku trvá, než si to DC mezi sebou zreplikují (replication latency).

Heslo z těch registrů jenom tak jednoduše nedostanete (je tam ještě šifrováno nějakými dalšími kliči). Mohli byste k tomu použít například nástroj Cain & Abel - ale pozor, to není nijak podporovaná operace a ten program je navíc ještě občas považován za hekovací nástroj - ne že by vám to nějak samo ublížilo, ale mohou to používat hekři, a těch se musíte pekelně bát!!! Na následujícím obrázku vidíte jedno heslo počítače:

Všimněte si, že to je opravdu pěkné heslo, zapsatelné dokonce z klávesnice. Jen je hooodně dlouhé a náhodné. Každá mašina si to heslo mění pravidelně každých 30 dnů, ale i tato změna se dá vypnout pomocí Group Policy :

Computer Configuration
  Windows Settings
    Security Settings
      Local Policies
        Security Options
          Domain Member: Maximum machine account password age = 30
          Domain Member: Disable machine account password change = Disabled

Kdo mění heslo? Mění ho služba Netlogon, která také aktualizuje další atributy počítače v Active Directory. Tahle služba je vlastně klientem Active Directory. Kontrolu stáří hesla provádí při svém startu a potom každou hodinu. Takže jakmile je to už déle, než 30 dnů (nebo jak je to nastaveno), tak prostě heslo změní.

Proč je vůbec heslo stanice důležité?

No heslo potřebují ty systémové služby a také klienti. Jestliže se chce klient připojit na server a ověřit se pomocí protokolu Kerberos, musí se mu vygenerovat TGS tiket, který je právě zašifrován tím heslem stanice (tedy pokud ta služba běží pod nějakým tím systémovým účtem). Dokonce i když se klient ověřuje pomocí NTLM je potřeba heslo stanice - služba Netlogon si totiž NTLM údaje musí sama ověřit na DC a tato komunikace sama o sobě musí být ověřena přávě heslem stanice.

V tom minulém článku jsmě testovali kvalitu hesla stanice pomocí nástroje NLTEST. A v článku o replikačních problémech jsme o tom hovořili v souvislosti s dlouho odstaveným DCčkem.

No a proč to zajímá nás?

Protože se nám množí takový nešvar zvaný virtuální počítače. A tyto počítače se velmi jednoduše kopírují a obnovují ze zálohy (snapshot) atd. Představte si, co když si obnovíte starší snapshot nějakého počítače, který je členem domény (nebo třeba image).

Je docela možné, bez ohledu na stáří snapshotu, že od doby co jste ho vytvořili si už stanice stihla změnit heslo na doméně. Když potom obnovíte ten starší snapshot, obnovíte tím také její starší registry. Ve straších registrech je samozřejmě teprve předchozí heslo. Je tam sice i před-předchozí heslo, ale to nám nepomůže. DCčka už mají heslo nové, o které jste přišli tím, že jste vrátili stanici se zálohy.

Projevuje se to například touto událostí v logu na nějakém DCčku:

Event ID: 5723, 5722, 5805, 3210
Event Type: Error
Source: Netlogon
Message: The session setup from the computer DOMAINMEMBER failed to authenticate.
         The name of the account referenced in the security database is DOMAINMEMBER.
Message: The session setup from the computer DOMAINMEMBER failed to authenticate.
         The following error occurred: Access is denied.
Message: The session setup from the computer DOMAINMEMBER failed to authenticate.
         The name(s) of the account(s) referenced in the security database is DOMAINMEMBER$.
         The following error occurred: The system detected a possible attempt to compromise security.
         Please ensure that you can contact the server that authenticated you.
Message: This computer could not authenticate with DOMAINMEMBER, a Windows
         domain controller for domain DOMAIN, and therefore this computer might deny logon requests.
         This inability to authenticate might be caused by another computer on the same network
         using the same name or the password for this computer account is not recognized.
         If this message appears again, contact your system administrator.

A NLTEST /SC_VERIFY, kterým to vyzkoušíte ze stanice, vám vrátí něco jako Access Denied.

Jak to vyřešit?

Co teď? Jsou dvě metody jak to vyřešit:

  1. odpojit počítač z domény a znovu ho tam připojit. To vyžaduje restart toho stroje, což je trošku zbytečné
  2. použít nástroj NETDOM RESETPWD a udělat to bez restartu mašiny:
NETDOM RESETPWD /Server:DCEX1 /UserD:gopas\wks-admin /PasswordD:Pa$$w0rd

V předchozím příkladu je v položce Server uvedeno jméno DC, vůči kterému chcete změnu (reset) provést a účet gopas\wks-admin je libovolný uživatel, který má právo provést reset hesla daného účtu počítače na doméně. Takže něco jako správce dané organizační jednotky (OU) apod. Na stanici tento příkaz musíte pustit pod účtem nějakého člena lokální skupiny Administrators (a nezapomeňte na User Account Control, jestliže ho nemáte vypnutý).

Ono nakonec ten restart mašiny stejně asi provedete, abyste to všechno uvedli do nějakého výchozího stavu, ale není to tak masivní metoda. Problém s připojováním/odpojováním počítače z domény je ten, že to zbytečně cpe do lokální skupiny Users skupinu Domain Users a do místní skupiny Administrators dává skupinu Domain Admins. Což tam třeba nechcete a ono vám to změní samo tohle nastavení. Takže NETDOM je lepší.

Poznámka k verzi NETDOM. Použijte NETDOM správné verze, jinak to nepojede - Windows XP potřebují NETDOM ze Support Tools pro Windows XP. Windows Server 2003 má také svoje Support Tools, takže raději použijte správnou verzi. Na Windows Vista a Windows 7 si musíte stáhnout RSAT (Remote Server Administration Tools - pro Windows 7 SP1 tady) a z nich si přidat součstku Active Directory Domain Services Tools.

No a až to budete mít, prostě zkuste ověřit, že všechno funguje jako v minulém článku pomocí NLTEST - například pro doménu GOPAS:

NLTEST /SC_VERIFY:gopas

Rozdíl NLTEST /SC_RESET a NETDOM RESETPWD

Ještě poslední poznámka. Existují občas fámy o funkcích těchto dvou příkazů. Takže:

  • NLTEST /SC_RESET - pouze přinutí službu Netlogon, aby všechno zapomněla, vyhledala si náhodně nějaké "nejbližší" DCčko a zkusila se vůči němu ověřit stávajícím heslem. To znamená, že se heslo nemění. Jen se použije k testu vůči nějakému DC. Když ten příkaz pustíte vícekrát, měli byste vidět, jestli se ověření povede vůči každému DCčku - možná se špatně replikují? Prostě jen diagnostika.
  • NETDOM RESETPWD - opravdu provede reset hesla počítače na doméně. Lze to použít v jakémkoliv stavu hesla na doméně - to znamená, že je jedno, jestli na účtu počítače je zrovna to správné heslo, nebo jiné, nebo je heslo prázdné - prostě záchraný nástroj při potížích.

Volba Reset Account na účtu počítače

Když se podíváte na následující obrázek, uvidíte ještě třeti matoucí volbu:

Jmenuje se to Reset Account. To je divné, ne? Jak bych mohl na doméně resetovat heslo a přitom ho takto nějak vzdáleně natlačit zpět na tu stanici? No to je taky blbost. Tahle volba na doméně připraví účet počítače k jeho pohodlnému připojení, pokud na účtu zatím žádný počitač připojený není - udělá to tak, že prostě nastaví prázdné heslo! Takže pokud tam nějaký stroj zrovna připojený máte, tímhle ho vlastně z domény vykopnete - protože ten počítač se bude snažit i nadále používat svoje stávající heslo a přitom na doméně bude jiné (prázdné).

Takže NEdělat, pokud opravdu nechcete zrovna připojovat nový počítač do domény na stávající účet.

Volba Reset Password v nástroji ADSI Edit

Je tu ještě jedna volba ohledně hesla počítače. Je to v nástroji ADSI Edit, kde můžete na účtu počítače vybraty Reset Password a nějaké nové heslo zadat - jak je vidět na obrázku:

To je tam proto, že ADSI Edit je potvora, která je obecná a prostě vidí, že to je účet a tím pádem nabízí změnu hesla. Nemá to smysl, protože heslo na stanici stejně nenastavíte - leda byste třeba věděli jaké zrovna to heslo na stanici je (Cain) a prostě ho chtěli na doméně ručně vyresetovat.

 

 

 

Comments

Otazka

Ahoj. Dik za info, ale otazka znie ci si niekedy cez Netdom aj member serveru resetoval heslo. Ci to mas odskusane, lebo mne to moc neslo?  Ale skusim si to odsimulovat.
Ondrej Zilinec - jeden znamy on 20.2.2012 14:45

Re: Účty počítačů a jejich hesla

samo, to funguje. delal sem to nejmin 100x :-)
Ondas on 20.2.2012 20:18

OK

Tak to teda skusim, lebo aj tak mi to nechcelo chodit na produkcnom systeme, ale to mozno bolo aj tych 14 hodin prace za mnou :)

Dakujem,

Ondrej Zilinec
Ondrej Zilinec on 21.2.2012 11:10

Re: Účty počítačů a jejich hesla

Ako casto sa synchronyzuje atribut lastLogonTimestamp s loklanym pocitacom ? Keby som sa chcel riadit touto hodnotou a chcel by som vyhadzat vsetky ucty z AD starsie ako nejaky datum aby som na nieco nenarazil...
Roman on 24.2.2012 13:12

Re: Účty počítačů a jejich hesla

ondas on 24.2.2012 15:00

Re: Účty počítačů a jejich hesla

Ahoj,
zkusil jsem postup na reset neplatného hesla a na Windows XP nefunguje.  Zde je výstup:
C:\Program Files\Support Tools>NLTEST /SC_VERIFY:petr
Flags: 80
Trusted DC Name
Trusted DC Connection Status Status = 5 0x5 ERROR_ACCESS_DENIED
Trust Verification Status = 5 0x5 ERROR_ACCESS_DENIED
The command completed successfully

C:\Program Files\Support Tools>NETDOM RESETPWD /Server:petrdc /UserD:petr\administrator /PasswordD:Ab1234.
The machine account password for the local machine could not be reset.
Zadanß domÚna neexistuje nebo nenÝ k dispozici.

The command failed to complete successfully.

C:\Program Files\Support Tools>

Podle tohoto nejsem sám: http://social.technet.microsoft.com/Forums/en/winserverDS/thread/514b04d5-7df6-47c0-a78a-12b43424e959
Petr Špaček on 7.4.2012 23:50

Re: Účty počítačů a jejich hesla

když mě pošlete mail, můžeme to zkusit pořešit. To může být několika různými věcmi. Zaprvé je potřeba zkontrolovat, jakou doménu ta stanice vůbec chce používat ve vlastnostech počítače (System control panel). Potom bych si jednoznačně vypnul NetBIOS. Potom bych ji zkusil vyhledat pomocí NSLOOKUP, viz můj článek http://www.sevecek.com/Lists/Posts/Post.aspx?ID=32. Určitě si ověřte, že uživatel, pod kterým zpouštíte ten příkaz na stanici je skutečně členem lokální skupiny Administrators (whoami /groups). Jestli se to DC takto skutečně najde, tak už je pak potřeba ověřit, jak to vypadá v ADčku. Jestli tam ten účet stanice existuje, jestli uživatel Administrator skutečně existuje v AD, není přejmenovaný, zakázaný a má skutečně tohle heslo, jestli má skutečně Full Control na ten účet stanice, jestli není na PETRDC firewall a jestliže ano, v jakém je stavu a pokud bych z tohoto nic nezjistil, tak by bylo potřeba si vzít Network Monitor a prozkoumat síťovou komunikaci a zapnul auditing a díval se také v logu na tom DCčku.
Onďas on 8.4.2012 8:47

Jak na heslo

Zapomněli jste heslo ke svému počítači? Nemůžete se přihlásit? Za 5 minut váš problém vyřešíte a heslo si nastavíte podle libosti. Jak na to snadno a bez starostí se dozvíte na www.erada.cz/?p=1316 . Nemusíte už zkoušet zaručeně fungující návody a instalovat další a další programy a neutratíte přitom ani korunu. Funguje spolehlivě na Windows 8, 7, XP, server 2008 a dalšími. Potřebujete jen CD nebo disketu.
Vojtěch on 19.10.2014 19:56

Příčina nevytvoření nového hesla

Chtěl bych se zeptat, jaká může být příčina, že si klient nevytvoří v doméně nové heslo? Mám pár klientů, kteří mají pwdLastSet starší jak 3 měsíce a nejsou schopni si nastavit nové heslo v doméně? Přes netdom to není problém. Ostatní klienti si hesla vytváří.

sc_verify a sc_query je access denied 0x5

Jinak hezký článek ;-)
Michal Kolář on 15.10.2015 10:42

Re: Účty počítačů a jejich hesla

myslite jako ucty pocitacu nebo uzivatelu? pokud se jedna o pocitace, a opravdu dostavate Access Denied i v pripade, ze ten NLTEST spoustite jako "Run as administrator", tak to znamena tu pricinu - ten pocitac to svoje heslo ma spatne, takze si ho ani nemuze zmenit.

kdyz pak zkusite napriklad GPUPDATE, tak taky byste mel videt, ze si pocitac neosvezi politiku. Proste spatne heslo.

Musite pripojit/odpojit z domeny.

To se proste nekdy stava. Duvody nezname. Muj typ je obvykle poskozeni registru, nebo nefunkcni replikace AD.
ondass on 15.10.2015 10:49

Příčina nevytvoření nového hesla

Ano jde o učet počítače. Takže chápu to správně, že pokud se tedy ptám na dotaz sc_query, tak počítač se neověří svým heslem vůči doméně a tím pádem nezíská požadované informace.

V té době se u nás měnila doména a příčinu tedy asi vidím ve špatné replikaci mezi doménami při změně. Může to tak být?

Děkuji
Michal Kolář on 15.10.2015 11:20

Re: Účty počítačů a jejich hesla

další článeček o účtech počítačů a jejich heslech: https://www.sevecek.com/Lists/Posts/Post.aspx?ID=483 
ondass on 3.12.2015 7:18

Re: Účty počítačů a jejich hesla

další poznámky k výchozí hodnotě hesla počítače v doméně: https://www.sevecek.com/Lists/Posts/Post.aspx?ID=534
ondass on 3.12.2015 7:41

nemam local admina... jsem v perdeli ?

hi,
jsem in trouble - pc po restartu napisalo ze ztratilo duveru k domene .. uz jsem videl thousand times .. ale nyni nemam pristup k pc fyzicky a lokalni admin tam asi neni, neob je ale zakazany. jediny ucet ktery jsem nasem v poznamkachz na jejich srv je lokalni ucet te pani ucetni s prazdnym heslom..

na dalku ping na to pc jede, psxec \\ ale neprojde, share taky jiz nevidim .. je to k vzteku ale asi konecna ? jedine tam jet, reset pwd z hirens cd atd..

ale mam vikend na hackovani :) tak nejaka idea ?

eN
NiK on 29.1.2016 18:28

možný důvod

U nás se počítač vykopnul z domény tím, že se vrátil bod obnovení. Bylo to v eventlogu. Může se systém sám vrátit k předchozímu bodu obnovení (např. v rámci samouzdravení), nebo to musí někdo spustit?
Hrošík on 25.11.2019 23:00

Add Comment

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Type number two as digit *


Semhle vyplňte číslici dvě. Předchozí antispemové pole nefunguje úplně dokonale, zdá se, že jsou i spamery, které pochopily, že je občas potřeba vyplnit autora :-)

Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments