Tohle jste možná už v Active Directory, ve vlastnostech nějakého účtu, viděli, ne?
Na co to je? Najdete to na záložce Account, pod čudlíkem Log on to a jmenuje se to Logon workstations (atribut userWorkstations). Pro nějaký uživatelský účet to omezí seznam počítačů, na který se dá "přihlásit". To je dost obecná hláška.
Různí pseudobezpečnostní experti to doporučují jako bezva ochranu, například pro servisní účty. Kamoš mě na to zrovna upozornil. Vůbec nechápu, proč takové články čte, když si může číst tu u mě na webu, no rozumíte tomu? :-)
Co to přesně dělá?
Ovlivňuje to jak NTLM, tak i Kerberos ověřování.
Pro Kerberos to znamená, že účet, který má tuto hodnotu nějak vyplněnou, si nemůže vydat TGT (uživatelský tiket, krbtgt) z jiného počítače, než ze seznamu počítačů vyjmenovaných. Pokud nedostanete TGT, tak nedostanete ani žádný další TGS, který byste potřebovali pro přístup do sítě na libovolné siťové služby. Jak to DCčko pozná, odkud ten TGT AS (authentication service) požadavek posíláte? Uvnitř TGT AS request paketu je polícko Addresses a uvnitř něho je napsáno jméno počítače, ze kterého se to odesílá.
Chybová hláška pro tento TGT AS request je KDC_ERR_POLICY (12). Takže tím končí sranda s Kerberosem. Alespoň na oko.
Pokud se jedná o NTLM, tak součástí NTLM Authenticate Message, tedy té zprávy, která už obsahuje NTLM response z klienta na server, je políčko WorkstationString. Tohle zase obsahuje jméno počítače, ze kterého to NTLM ověření děláte.
Chybová hlášku, kterou dostanete při takovém NTLM pokusu z nežádoucí stanice, je STATUS_INVALID_WORKSTATION (0xC0000070, The user isn't allowed to sign in to this computer, nebo přesněji The user account is restricted such that it may not be used to log on from the source workstation.). Takže tím končí sranda s NTLM. Alespoň na oko.
Obě chybové hlášky jsou vidět na DC v Security event logu:
Event ID: 4776
Event type: Audit failure
Event subcategory: Credentials validation
Message: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0, Error code: 0xC0000070, Source workstation
Což uvádí jméno zdrojového počítače. Takže v případě NTLM je to v pohodě prozkoumatelné.
Event ID: 4768
Event type: Audit failure
Event subcategory: Kerberos Authentication Service
Message: A Kerberos authentication ticket (TGT) was requested. Result code 0xC
V tomhle případě se soudruh Kerberos neobtěžuje uvádět jméno počítače, takže z události vidíte pouze zdrojovou IP adresu, což může, ale taky nemusí moc pomoci.
Nejdrsnější je, když ten login chcete použít z nepovoleného doménového počítače pro připojení na vzdálenou plochu počítače, který je povolený. To by mělo jít, ne? Pokud ten klient není v doméně, tak to jde. Ale když je v doméně, probíhá tam Kerberos před-autentizace toho RDP spojení a tím pádem to selže s podivnou hláškou:
MSTSC RDP client - Remote Desktop Connection
An authentication error has occured
The local security authority cannot be contacted
This could be due to an expired password
Please update your password if it has expired
Jak se to chová, pokud se opravdu přihlásím na povoleném počítači
Takže heslo daného účtu lze použít jen na vyjmenovaných strojích. Ale do sítě se s tím už pak dostanete kamkoliv. To byste museli omezit pomocí User rights assignment nebo nějak jinak.
Takže jde čistě jen o to, aby se to heslo nezadávalo nikde jinde, než na vyjmenovaných strojích.
Taky je dobré si uvědomit, že zadat ho můžete vždycky, akorát vám to potom dál už nepojede :-)
Alespoň na oko
Celé to je podvod. Ani políčko Adresses uvnitř TGT AS request paketu, ani ten WorkstationString uvnitř NTLM Authenticate Message není nijak ověřovaný. To tam prostě klientský počítač dobrovolně vloží podle toho, jak je nastavený.
Ani k tomu, abyste si požádali o Kerberos tikety, nebo prováděli NTLM ověřování, nemusíte mít svoji stanici v doméně. Prostě vykonstruujete ty pakety a vložíte do nich jakékoliv jméno vás napadne. Nebo si pro jednoduchost ten počítač správně pojmenujete. Dokonce to do těch paketů nemusíte vkládat vůbec (viz. Java Kerberos klient, nebo Samba přes NTLM nebo i Kerberos, pokud je tak nenastavíte).
Je to krásně vidět například na lidech, co tohle mají nastaveno na účtu, a používají Outlook Anywhere z domácího počítače. To jim potom admini musí nastavit jméno jejich domácího počítače (něco jako MaruskaDoma, nebo AntoninParby, kámošův stroj se jmenuje HPS - tedy hovno prdel sračka, to je naše značka) do toho seznamu v Active Directory, jinak se nepřipojí. Prostě jak si stroj myslí, že se jmenuje, to prostě hodí do těch paketů.
Tak zvaná bezpečnost pro servisní účty
Blbost. Jedná se o jednoduchý obstrukční mechanismus, aby přihlašovací údaje toho účtu někdo nezadával na všemožných strojích. Nelze to dokonce použít ani pro runas /netonly. Takže se to hodí jako obstrukce. Pokud ale to heslo znám a budu moc chtít, rozhodně ho použiju i jinde, jen to bude trošku větší dřina.
Vhodné použití
Dobře, servisní účty možná. Ale paráda je to pro Domain Admins a jiné dedikované serverové správce. Tyhle účty se nemají vůbec co používat jinde, než na svých serverech. Jen to trošku kazí to RDPčko.