Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > default
květen 15
Dvě služby které patří zakázat na Windows 10 a Windows 2016

Na Windows 10 i Windows 2016 jsou dvě služby, které zakazuju okamžitě. Jednu na vždy zatímco druhou si spouštím, jenom když chci.

Ta, kterou chcete spouštět alespoň čas od času, je Windows Update (wuauserv). Jiná ani lepší metoda, jak těm peklům zabránit, aby se nepřetržitě neaktualizovala, neexistuje. Až potřebuju aktualizace, jednoduše službu spustím.

Druhý kamarád mě dostal do varu svou přítomností i na Windows 2016 serveru. Zde mi to v průběhu řešení jakýchsi síťových potíží dokázalo dokonce zatuhnout Network Monitor několika miliardami HTTPS paketů. Na serveru? Ve výchozím stavu? To se někdo musel zkouřit. A výhercem se stala služba Connected User Experiences and Telemetry (DiagTrack).

Vyprávění o této službě s barevnými obrázky a množstvím zábavných odkazů naleznete zde. Nevím ovšem, proč bych to četl a přemýšlel, proč ji přepínat z jakéhosi Security módu do Basic ani jinam. Jediné, kam tahle služba patří je do Disabele. Sbohem na vždy.

květen 04
Jak na RDP serveru spustit cokoliv přes RemoteApp

Netušil jsem ani jakou tímhle vyvolám u jednoho zákazníka paniku :-) Taky to nevíte? Máte RDP farmu a na ní provozujete RDP RemoteApps. Tedy nějaké aplikace, jako je Office, nebo Adobe, nebo nějaký jiný business systém. Lidé se k tomu připojují přes RDWeb, nebo mají rovnou nějaké zástupce na ploše. V každém případě lidé vidí pouze okno své aplikace, nevidí celou plochu. A vy máte dojem, že si na tom serveru nic jiného spustit nemohou. Tak to máte špatný dojem :-)

Pokud ten program má standardní Open nebo Save as dialog, tak si spustí cokoliv chtějí. Stačí vědět jak. Prostě si necháte zobrazit i exe soubory a namísto toho, abyste na ně rovnou kliknuli, použijete pravé tlačítko a vyberete správnou volbu:

Co z toho plyne?

RemoteApp je jenom uživatelské zpříjemnění, určitě to není bezpečnostní fíčura. Server nemá principiálně jak kontrolovat, co startujete z čeho. Prostě se jenom přenáší individuální okna namísto celé plochy. Pokud chcete startování aplikací skutečně omezit, musíte použít AppLocker (Application Control Policies).

květen 03
Jak poslat email pomocí EWS na outlook.com a PowerShellu

Pokud chcete odesílat mail z nějakého PowerShell skriptu, máte všude návody, jak to udělat pomocí SMTP. Problém je, že někdy SMTP prostě není dostupné, například kvůli tomu, že vám firewall blokuje porty. Blokování TCP 25 je vcelku klasika, ale to jsem ani nepoužíval. Pro odesílání mailu po ověřeném spojení, tzn. po zadání nějakého loginu a hesla, se používá na Exchange, Office365 i outlook.com na portu TCP 587. Stejně chcete mnohdy posílat do jiných domén - relay. Jenže i to pomalu končí, jak pozoruju :-)

Takže jiná cesta je použít web service, to znamená HTTPS komunikaci s nějakou webovou službou, kterou ten Exchange/Office365/outlook.com nabízí. To je již velmi dlouho EWS (Exchange Web Services). Kdo máte Exchange, tak jste zajisté v IIS viděli virtuální adresář ews a případně jste tomu nastavovali nějaké parametry pomocí Set-WebServicesVirtualDirectory, ne?

Když to chcete použít z PowerShellu, stačí si k tomu stáhnout z Microsoftu knihovnu nazvanou Exchange Web Services Managed API (odkaz je na verzi 2.2), která jde načíst jak do PowerShell 2.0 tak i do novější verze, takže je jedno, jestli máte netfx 2.0 nebo netfx 4.x.

No a potom už vesele posíláte. Já jsem si k tomu zařídil zadarmo účet na outlook.com. Odesílání funguje i do jiných domén, dokonce se odeslané maily ani neukládají v odchozí poště :-)

function Send-OutlookEwsMail (
  [string] $login,
  [string] $password,
  [string] $rcptTo,
  [string] $subject,
  [string] $message,
  [string] $dllPath = [IO.Directory]::GetCurrentDirectory()
  )
{
  [string] $ewsAssemblyPath = Join-Path $dllPath 'Microsoft.Exchange.WebServices.dll'

  if (-not (Test-Path $ewsAssemblyPath)) {

    throw ('The EWS assembly file does not exist: {0}' -f $ewsAssemblyPath)
  }

  [System.Reflection.Assembly] $exchAssembly = [System.Reflection.Assembly]::LoadFile($ewsAssemblyPath)

  if (-not ([object]::Equals($exchAssembly, $null))) {

    [Microsoft.Exchange.WebServices.Data.ExchangeService] $exchSvc = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService
    $exchSvc.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials ($login, $password)
    $exchSvc.Url = New-Object System.Uri 'https://outlook.com/EWS/Exchange.asmx'

    [Microsoft.Exchange.WebServices.Data.EmailMessage] $exchMail = New-Object Microsoft.Exchange.WebServices.Data.EmailMessage ($exchSvc)
    [void] $exchMail.ToRecipients.Add($rcptTo)
    $exchMail.Subject = $subject
    $exchMail.Body = New-Object  Microsoft.Exchange.WebServices.Data.MessageBody ($message)
    $exchMail.Send()
  }
}

Jenom bych k tomu účtu na outlook.com dodal jednu poznámečku - ze začátku to posílalo v pohodě, až se to najednou zaseklo na hlášce:

An internal server error occurred. The operation failed. WASCL UserAction verdict is not None. Actual verdict is HipSend, ShowTierUpgrade.

No prostě se tam musíte po nějakém čase (u mě to bylo cca 8 hodin) přihlásit přes webové rozhraní a potvrdit nějakou kapču (captcha), že nejste spamovací robot - Help us fight spam email. We're sorry to have to ask you to prove you're a person. Most spam comes from automated programs, which can't solve puzzles like this.

březen 01
Přeinstalovací útoky na BitLocker nebo libovolné jiné zašifrované zařízení

Představme si rajskou hudbu každého bezpečáka. Uživatelé mají zařízení, například Windows stanice, notebook, nebo klidně i mobilní telefon. Toto zařízení je celé zašifrováno pomocí diskového šifrování, například BitLocker, nebo cokoliv jiného co je schopno využívat TPM (trusted policy module). TPM je čipová karta na základové desce (motherboard), ve které je, velmi zjednodušeně řečeno, schováno heslo k šifrovanému disku.

Samozřejmě jeho UEFI firmware plně vynucuje Secure Boot a nedovoluje se boot z jiného harddisku ani DVD. BIOS (tedy firmware) je zaheslován, CSM (compatibility support mode) je vypnut a uživatelé nemohou měnit ani vendor keys.

Pokud se jedná o podnikového uživatele, uživatel není ani členem skupiny Administrators ani na tomto svém jediném zařízení. Pokud se jedná o domácího teroristu, ten určitě pracuje pod účtem lokálních Administrators.

Zapomeňme na možnost vyčítat klíče ze zmrzlé paměti. Zapomeňme na to, že je možná někde poznačeno obnovovací heslo (recovery password, 48 digit password). Prostě nic takového neexistuje, nebo na to nelze obecně spoléhat.

Celé to znamená, že se zařízení dá nastartovat a samo naběhne až do přihlašovací obrazovky, kam se musí zadat nějaké "heslo". Jestli to je PIN, heslo, máchnutí prstem, nebo jeho otisk je mi jedno. Je ale dnes už často možné, že se to neprovádí na klávesnici, takže není možné použít hardware keylogger (všechny tyto metody ale ukládají normální uživatelovo heslo přímo na počítači na disku - jsou prostě jen náhradou za heslo a přitom se mapují na normální účet - ale disk je zašifrován BitLockerem, nebo čímkoliv jiným).

Neprůstřelné. Tedy alespoň by se zdálo. Neprůstřelnost je vždycky ale jen proti něčemu. Otázka je, čeho chceme dosáhnout.

Cíle útoku a motivace

Sledujme dva týpky. Jeden je podnikový zaměstnanec, který se chce stát lokálním adminem na svém počítači. Případně na počítači kolegy, se kterým sdílí kancelář, nebo openspace. Když se stane lokálním adminem, začne sbírat přihlašovací údaje a napadat další účty, aby se dostal postupně dál a dál po síti.

Druhým je terorirsta, nebo hacker, nebo pedofil, který pracuje z domu a je lokálním adminem na svém počítači. Až k němu přijede komando, aby mu počítače zabavilo, policie by byla ráda, kdyby se mohla podívat na jeho data. Jenže tihle parchanti nespolupracují. A krekovat z nich hesla gumovou hadicí, no uznejte, tyhle metody z minulého rok... století?

Podnikový zaměstnanec se vyznačuje schopností fyzického přístupu k počítači svému, nebo počítači kolegy. Řekněme na 15 a více minut?

Policie také nepřepadá žádného zlořáda z ničehož nic. Obvykle svůj zásah může plánovat dopředu. A může se na něho připravit. Může ho například navštívit v době, kdy není u svého zařízení a trošku se tam připravit. Možná to má různá právní a zákonná omezení, ale jsou bezpečnostní složky, které to mají trošku jinak. A nebo se o tom nikdo dozvědět ani nemusí...

Zase to znamená fyzický přístup k zařízení. Možná trošku déle, než 15 minut. Ale ne o moc.

A modří už vědí. Ostatní si přečtou. Fyzický přístup je vždycky klíčem. Pokud ho máte, vždycky bude nějaká cesta. Tady jsou dvě takové pěkné, co mě napadly.

Teroristovo heslo

Jak dostaneme z teroristy heslo do jeho počítače? Můžeme mu doma namontovat nějaké kamery a sledovat ho, jak to heslo zadává. Pak ho už jenom sebereme, nebo rovnou střelíme mezi voči (jak říká můj oblíbenej Richard Marcinko - "zabij ty hajzly všechny, bůh už si to nějak přebere").

A nebo mu to přeinstalujeme.

Nejprve uděláme imidž mašiny, abychom měli zašifrovaná data. Potom mu to přeinstalujeme, nebo vyresetujeme do továrního nastavení. V tom okamžiku jsme na jeho zařízení pány. Jsme lokálními Administrators. Co nám brání nainstalovat mu tam rovnou nějaký software keyloger? Nic. Takže keylogger, který ovládáme my. Chudák tam už nemá žádná svá data, samozřejmě. Nemá tam ani přístup, protože jeho heslo my ještě neznáme. Dostane tedy svoje zařízení zpátky úplně čisté, s keyloggerem a heslem, které sám ani nezná. Ale o tom on neví.

Vrátí se z večeře, zkouší se přihlásit na svůj noťas, keylogger zachytává jeho skutečné heslo a odesílá nám ho. Borec panikaří, protože si nemůže pustit svoje oblíbený .... Když v tom mu cosi olověného prolétá hlavou.

... A nebo neprolétá. Zařízení se restartuje a hlásí, že se samo vrátilo do továrního nastavení, zavolejte svého administrátora, odneste mě do servisu. Všechno je v pořádku pane teroristo, data máte přece v klaudu, nebo máte určitě zálohu, ne?

... A nebo se zobrazí hlášení o aktualizaci, pod tím se aplikuje původní imidž a po dalším restartu nechává teroristu znovu v klidu pracovat :-)

Zaměstnanec lokálním adminem

BitLocker v kombinaci s TPM modulem je výborná metoda, jak odstavit uživatele od lokálního adminství. Pokud ani sám uživatel nezná klíče k dešifrování systémového disku, nemůže použít zmiňovanou offline modifikační metodu, aby získal lepší přístup. Ale on by to chtěl.

Vždycky může nainstalovat hardware keylogger a zavolat na support, že mu nejede tiskárna. Přijde admin, zadá mu do keyloggeru heslo a tradá. Jenže co když admin používá správně čipovou kartu (smart card). V takovém případě zaměstnanci nějaký keylogger nepomůže (ani software keylogger). Podobně to bude když admin přichází vzdáleně přes RDP (dokonce ani nemusí používat mstsc /RestrictedAdmin režim (a ještě tady), protože uživatel sám není správcem).

Takže stanice BitLocker + TPM + uživatel nezná klíče + uživatel není členem lokálních Administrators je velmi solidní řešení. Až do okamžiku mého reinstalačního útoku.

Uživatel si prostě svoji stanici přeinstaluje. A obvykle nechá i připojit do domény. Jak každý doufám ví, ve výchozím nastavení si počítač do domény může připojit kdokoliv.

Po reinstalaci počítače je uživatel sám svým adminem. Nainstaluje si libovolnou logovací technologii, kterou chce. A zavolá na support.

Je možné, že se na nově nainstalovaný počítač jeho správce ani nedostane, ale to nevadí. Bude to vypadat, že je ten stroj tak zničený, že prostě potřebuje komplet opravit. To se děje běžně, ne? Například klasická hláška - workstation trust relationship with primary domain failed. Ten automatický logovací nástroj však může také vrátit původní imidž a nic se po restartu ani nepozná.

Pracuju na demu, uvidíme, jestli se mi to podaří na podzimní HackerFest zmáknout :-)

únor 05
Jak zobrazit zadávané heslo pomocí klávesové zkratky

Víte o čem mluvím. Takové to očíčko, které zobrazuje heslo. Jmenuje se to správně password reveal button. Ještě na Windows 8 a Windows 2012 se na to muselo kliknout myší. Od Windows 10 a i ve Windows Server 2016 stačí zmáčknout magickou kombinaci:

Alt-F8
leden 30
To bude zase psycho, aneb dvě konference současně

Už příští týden rovnou dvě konference! Jednou již tradičně startuje očekávání jara v Bratislavě (https://www.showit.sk/sk), ale je tu i zbrusu nová konference v Brně (https://www.g2bteched.cz/cs/). Tak přijďte okoštovat Holliday Inn nebo Marriott. To zase bude peklo, právě přestávám chodit spát až do příštího čtvrtka. Tady evidentně někdo musel zešílet :-)

Jo a ShowIT párty bude tentokrát v Undead Arena z čehož doufám nezešílím úplně.

leden 17
Limit na počet členů ve skupině při použití příkazu Get-AdGroupMember

Já tyhle nesmyslné web-service cmdlety moc nepoužívám, a jak vidím, tak dobře vím proč :-) Dneska padla otázka, jestli to nemá limit na počet zobrazených členů. Zkusil jsem. A ejhle:

The size limit for this request was exceeded

První úvaha byla, že tam bude nějaký parametr, kterým se to zvětší, to je přece normální. Zjištění je, že tam žádný parametr není. Pokud to potřebujete zvýšit nad 5000! členů, tak musíte měnit nějaký konfigurační soubor na všech vašich řadičích domény :-)

Říkám to pořád, s tím web-servisním AD powershellem, to se někdo musel zkouřit.

leden 11
Jak se pohybovat v PowerShell ISE command pane

Konečně jsem na to přišel! Na vývoj skriptů používám PowerShell ISE. Má to dvě zobrazení - script pane a command pane. Ve script pane se normálně edituje skript (bílé pozadí, zapne se to CTRL-I). Když svůj kód spustíte, dostanete příkazovou řádku (command pane, modré pozadí) s výpisem výsledků. Sem se přepnete CTRL-D.

No a v tom command pane se dá myší umísťovat kurzor a potom dělat bloky a kopírovat do schránky (clipboard). Jenže to jsem až do teď musel dělat myší. Musel jsem vždycky kliknout do prostoru a teprve potom fungovaly šipky. Když zmáčknete jenom šipku nahoru, tak vám to nahodí předchozí příkaz, místo aby to posunulo kurzor.

A teď jsem se naučil, že pohybovat kurzorem po tom command pane, se dá pomocí CTRL-UP (šipka nahoru). Stačí stisknout jednou a potom už fungují šipky normálně!

leden 03
My country od Fredericka Creama

Naši šli na Nový rok na Mou vlast do brněnské filharmonie. A takto pěkně přeložený program dostali. Osobně oceňuji zvláště volbu překladů jako je "country", "woods" nebo "fields" a inovativní překlady místních názvů. Speciálně ten do němčiny, což pěkně vyzdvihuje vlastenecký náboj díla:

Škoda jenom, že to ten kvalitní překladatel nedotáhl pořádně do konce. Přitom se dalo přeložit i jméno autora i všechno ostatní. Třeba takto:

  • Frederick Cream, My country
    • The High Castle
    • The Moldau
    • Charlotte
    • From Bohemian Woods and Fields
    • Camp
    • Hymen hill

 

prosinec 21
Parádní UAC bypass

Včera mi Michal Meravý (díky!) poslal super UAC bypass, trošku jsem to upravil na powershell a je to tu:

reg add hkcu\software\classes\mscfile\shell\open\command /d "cmd /c start powershell -NoExit" & eventvwr

nebo rovnou příklad zneužití

reg add hkcu\software\classes\mscfile\shell\open\command /d "cmd /c start powershell { 'chachá' | Out-File c:\uac-bypass.txt }" & eventvwr

Vo co gou? O UAC jsem tu už jednou hanlivě psal, že se jedná o "bezpečnostní" fíčuru pro domáčí uživatele. V podnikovém prostředí tak maximálně na to, aby to snížilo míru a frekvenci toho, jak si BFUčka dodrbávají počítače a kdo to pak musí pořád opravovat. Takže z mého pohledu o nic nejde. Ale líbí se mi to. Zrovna tahle metoda je prostě krásná, to se musí uznat.

Jak to funguje?

Od Windows 7 se UAC ve výchozím nastavení chová tak, že některé programy nevyžadují explicitní potvrzování čudlíkem, a přitom je systém rovnou spustí "elevated" (neboli "jako správce", neboli "as administrator"). To je případ různých systémových správcovských programů jako je control panel, nebo většina MMC konzolí (soubory s příponou .msc). A eventvwr.exe.

Zrovna tenhle eventvwr.exe je evidentně kamenem úrazu. Spustí se elevated a přitom sám v podstatě nic nedělá. Jenom spustí rovnou eventvwr.msc konzoli. A ta se spouští jen jako asociace .msc souboru.

Tento uac bypass tedy jen změní v uživatelském profilu asociaci .msc souboru z původního mmc.exe na powershell. A je to. Jakmile potom někdy spustíte eventvwr.exe, tak rovnou naskočí jako správce a spustí následně powershell už také jako správce.

Krásná ukázka exploitu, kterých bude nekonečně mnoho, pokud navrhnete nějaký software blbě. Dá se to fixnout? Ano, stačí opravit eventvwr.exe. Ale stejně bude dalších nekonečně moc cest. Stačí trošku hledat.

Pokud se jedná o pěknou historii různých UAC bypassů, tak se mrkněte sem - stránka UACMe - nabízí milión různých cest. Když si to pročtete, nabízí také seznam miliónu MS fixů, které každou tu cestu postupně opravují :-)

Jak se bránit?

Buď uživatelé nesmí být členem místní skupiny Administrators. Nebo můžete přepnout UAC tak, aby se to ptalo vždycky, když je to potřeba. To se provede buď v Group Policy, nebo lokálně v Local Security Policy:

Security Settings
  Local Policies
    Security Options
      User Account Control: Behavior of the elevation prompt for administrators in Admin Approval Mode

  = Prompt for consent

Jednoduše - musíte to přepnout z výchozího Prompt for consent for non-Windows binaries na bezpečnější (ale otravnější) Prompt for consent.

prosinec 07
Hitovka letošního roku aneb hvězdička v DNS

Nedávno jsme se shodli s kamarády, že tohle si zaslouží nominaci na IT hit roku 2016.

To jste věděli, že v DNS, už od Windows 2003 jde udělat hvězdičkový záznam, který potom bere všechny dotazy na jména, která nejsou explicitně vyjmenovaná? Může to být A i CNAME záznam. Podívejte se na obrázek:

Schválně jsem tam dal zvláštní IP adresu .55, aby to bylo vidět v nslookup. Nápříklad záznam anything.gopas.virtual explicitně neexistuje. Ale když se na něho zeptáte, tak vám to odpoví s IP adresou .55 jako kdyby existoval:

Funguje to i pro CNAME záznamy. Jenom nezapomeňte do jeho cílové hodnoty na konec dát tečku (.), ať si to tam samo nepřikládá primary DNS suffix:

Věděli jste o tom? Od kdy? Je to tam skoro od jakživa a přitom o tom není nikde žádná dokumentace. V podstatě okamžik, kdy zjistíte, že to existuje je, když po vás SharePoint App Catalog chce, abyste tohle v DNS použili.

Hezké ne?

listopad 26
Bleskový a ověřený postup opravy AD lingering objects a Kerberos autentizace

Dneska jsem na konferenci ms-fest prezentoval svoji léty vyzkoušenou, ověřenou a vyladěnou metodu, jak opravit Active Directory (AD) replikaci (replication) potom, co řadič(e) domény přešly tombstone lifetime a vznikly lingering objecty. O této situaci jste zřejmě už slyšeli. Jenže problém je prakticky vždycky kombinován s problémem rozhozených hesel počítačových účtů řadičů domén.

Každý řadič domény (DC - domain controller) si totiž mění heslo svého účtu (machine password) každých 30 dnů, stejně jako libovolný jiný členský stroj domény. Naproti tomu tombstone lifetime je obvykle 180 dnů. Pokud si řadič sám sobě změní heslo dvakrát a během té doby se to nedokáže zreplikovat, tak přestane fungovat Kerberos. Tzn. už po 30 dnech možná, po 60 dnech zaručeně. Takže tombstone lifetime a lingering objects je obvykle až druhý následek rozházeného času.

Důvody pro rozházený čas DC:

  • nějaká DC se prostě už dlouho neviděla - tento důvod není už dneska tak obvyklý, jako ten druhý
  • máte jedno, nebo více DC, na nějakém cloudu a oné virtualizaci se rozhodí čas a posune to čas na všech virtuálkách - to je dneska, jak pozoruji, velmi běžné (chyba obsluhy, chyba hardware, baterka, ...)

To co nastane mezi domain controllery je totální rozklad. Přestávají replikovat a ověřovat jak sebe, tak uživatele a počítače. V případě ověřování klientů to je chaticky podle toho, které DC si kdo vybere. Jsou to chyby jako třeba:

The directory service cannot replicate with this server because the time since the last replication with this server has exceeded the tombstone lifetime

Event Id: 2042
Message: It has been too long since this machine last replicated with the named source machine. The time between replications with this source has exceeded the tombstone lifetime. 

Kerberos error: The target principal name is incorrect
error: 2148074274 = 0x80090322 = SEC_E_WRONG_PRINCIPAL

The Kerberos client received a KRB_AP_ERR_MODIFIED error from the server.
The target name used was LDAP/._msdcs. This indicates that the target server
failed to decrypt the ticket provided by the client.

Na opravu těchto dvou problémů existují standardní postupy. Problém je v jejich praktickém využití. Pokud nevíte přesně jak, bude vám oprava trvat minimálně několik hodin, ne-li dnů, a navíc to ještě neuděláte správně.

Po zkušenostech jsem si vypracoval ideální postup, který je nejrychlejší možný, spolehlivý a obecně funkční. Dneska jsem takto opravil pět DC během cca 40 minut, a to jsme u toho ještě vysvětloval.

Celý postup je na screenshotech a s popisky v následující prezentaci:

Fastest ever steps to repair tombstone lifetime, lingering objects and Kerberos machine passwords

Základní vysokoúrovňové kroky

Detailní návod je v prezentaci. Pro shrnutí jen nejdůležitější body. Prostě nepřemýšlejte a udělejte všechno na všech řadičích:

  • nejprve opravte čas
  • vytvořte si nějaký samostatný DNS server - něco nainstalujte, nebo použijte existující, ale potřebujete DNS server, který není na žádném AD DC, aby na tom nefunkčním AD nebyl závislý. Do tohoto DNS serveru nasměrujte všechna DC. Budete mít jen jeden DNS server a nebudete záviset na replikaci, která nefunguje
  • vypněte všechny Kerberos Key Distribution Center (KDC) služby, a nechejte si jen jednu - každé KDC používá svůj místní AD. Je to stejné jako s tím DNS serverem. Pokud nefunguje AD a nereplikuje, každé KDC potom vydává jinak špatné Kerberos tikety a celé se to chaotizuje. Stejně jako jedinný DNS server budeme mít tedy jen jediný KDC.
  • vyresetujete hesla počítačových účtů pomocí netdom resetpwd - tohle rozjede ověřování
  • vyčistíte lingering objecty - musíte to ale udělat správně a úplně. V prezentaci je na to skript. Musíte čistit každé DC oproti každému a navíc po jednom všechny AD partition (naming context).
  • no a nakonec pustíte replikaci
  • a nezapomenete to zase uvést do původního stavu - vrátit DNS servery a vypnout registrovou hodnotu

Tak ať slouží!

listopad 22
Vylepšené zásady hesel, neboli 4of4

Rychlé odkazy:

O co jde

Kvalita hesel uživatelů Active Directory (AD) je dlouhodobě na relativně špatné úrovni. Jako každá hesla :-) Běžně se používají hesla typu SlovoČíslo, například Cervenec2016, což je krásný příklad hesla, které je imunní i proti časté změně :-) Obecně osmdesát procent hesel na světě je pouze alfanumerických.

Máme k dispozici zásady hesel, které by to mohly vylepšit. AD umožňuje vynutit minimální délku hesla. Délka hesla větší než 10 znaků pěkně odstaví krátká slova a krátká čísla. Co se týče možných znaků (komplexnost), AD umí vynutit pouze politiku tři ze čtyř (3of4). To znamená, že ze čtyř skupin znaků malá/velká/čísla/ostatní je potřeba mít v hesle alespoň tři skupiny.

Udělal jsem si tedy vlastní password filter, který vynutí v hesle zásadu 4of4. Heslo musí obsahovat jak alespoň jedno velké a jedno malé písmeno z US-ASCII, tak i jednu cifru a jeden speciální znak z US-ASCII. Ostatní znaky mohou být libovolné, klidně národní unicode.

Speciálních znaků je řekněme plus/mínus dvacet. Pokud musí být heslo dlouhé 8 znaků, zvýší to počet hesel 20^8 krát, což je 25 600 000 000 krát. I pokud bychom uvažovali pouze speciální znaky z numerické klávesnice, kterých je jen 5, bude to i tak lepší alespoň 390 000 krát. U hesla desetiznakového je vylepšení dokonce 9 765 625 krát.

Fungování password filter obecně

Password filter je DLL knihovna, která se zapíše do registrů a kterou si systémový proces LSASS načte při svém startu, tedy při startu počítače. LSA (local security authority) je známá součástka, ve které běží celé AD, nebo SAM (lokální security accounts manager). Password filter obsahuje dvě rutiny, které LSA zavolá v okamžiku, kdy přijímá změnu (change password) nebo i nastavení (reset password) hesla.

Úkolem této DLL knihovny je heslo zkontrolovat a říct, jestli je ok, nebo jeho podmínky nesplňuje. Password filter dostává pouze nové heslo a dostává ho v plné formě, tedy ne ve formě hash. Hash se spočítá a v okamžiku následného uložení do AD, nebo SAM databáze. Password filter se používá také pro identity integration, jako součástka, která kvalitu hesla v podstatě nemusí kontrolovat, ale odesílá heslo do nějakých integrovaných systémů, aby se zajistil alespoň reduced-sign-on (RSO), když už nelze použít rovnou single-sign-on (SSO).

Můj filter pouze kontroluje heslo na politiku 4of4 a nikam ho neodesílá :-)

Knihovnu filteru je nutno nakopírovat do adresáře System32 a zapsat do registrové hodnoty:

HKLM\System\CurrentControlSet\Control\LSA
Notification Packages = MULTI_SZ

Pokud to chcete pro Active Directory, tak tuto operaci musíte provést na každém DC (domain controller) řadiči domény. Každý klient využívá pro změnu hesla jen svoje nejbližší DC a politika by se tedy neuplatňovala rovnoměrně. Filtr je potřeba umístit ideálně hned jako první hodnotu. Kdyby byly v seznamu nějaké další filtry právě kvůli IdM, tak by mohly odeslat heslo k integraci ještě dříve, než by následně bylo odmítnuto kvůli nedostatečné složitosti.

Instalace mého SAPHA password filteru

Instalační ZIP soubor filtru pro 64bitové systémy je ke stažení zde. Obsahuje to jak jeho DLL, tak i install.bat a uninstall.bat. Někam si to vybalte, můžete i do síťového sdíleného adresáře a jenom spusťte INSTALL.BAT. Ono se to samo nainstaluje. UNINSTALL.BAT slouží celkem logicky k odinstalaci. Snažil jsem se to udělat extrémně odolné, takže pokud se objeví při instalaci jakákoliv nesrovnalost, instalace nedoběhne a zahlásí chybu.

Po instalaci musíte počítač restartovat, což vám prográmek sám nabídne.

Pro zavedení do AD musíte instalaci provést na všech řadičích domény a musíte je restartovat. Nemusíte to udělat všude naráz, ani nemusíte všechny naráz restartovat (to ani nedělejte). Jenom dokud nebude na všech DLL zavedena, tak některá DC budou vyžadovat 4of4, zatímco jiná ne a pojedou při starém 3of4.

Můžete to taky nasadit i na workgroupové počítače. Tam to funguje stejně, ale přirozeně jen pro lokální SAM účty. Takže to na ostatních doménových počítačích instalovat nemusíte, pokud vám ta politika stačí pro účty v Active Directory.

Dávka INSTALL.BAT má ještě parametr -silent, kdybyste si to náhodou chtěli instalovat nějak automaticky, například pomocí Group Policy Preferences, nebo System Center.

Upozorňuji, že to je jenom 64bitová verze, takže pokud máte ještě nějaká 32bitová DC, tak mi napiště, pošlu vám 32bitovou verzi.

Support je mailem, je zdarma. Pokud chcete nějaké úpravy nebo vylepšení, ozvěte se, domluvíme se na ceně. Nebojte se, je to docela robustní, pády LSA jsem nezaznamenal. Pokud se knihovna nezavede, ani to nepoznáte, LSASS jede prostě dál. Snažil jsem se použít co nejrychlejší algoritmus, takže by to nemělo nijak omezovat výkon.

 

Zvýšená ochrana LSA knihoven

Existuje ještě jeden problém při instalaci password filteru. Jmenuje se to Additional LSA Protection (https://technet.microsoft.com/en-us/library/dn408187(v=ws.11).aspx) - neboli LSASS running as a protected process. Pokud to máte v registrech zapnuté (což nejspíš nemáte), LSASS vyžaduje, aby byl password filter správně digitálně podepsaný.

Jestli máte ochranu zapnutou poznáte podle následující registrové hodnoty - pokud je tam hodnota 1 tak je LSASS chráněn:

HKLM\System\CurrentControlSet\Control\LSA
RunAsPPL = DWORD = 1

Můj filter prozatím s touto ochranou nefunguje, protože není digitálně podepsán. Levné code signing certifikáty od StartSSL prozatím zmizely a protože tuto ochranu nikdo moc nepoužívá, nechce se mi platit 180 EUR ročně a certifikát od jiné CA.

Ptal jsem se a StartSSL support tvrdí, že do 14 dnů by měli zase začít pracovat, tak uvidíme.

listopad 08
Zkoušení hesel na RDP

Moc pěkná otázka dorazila, rád odpovídám rovnou veřejně, protože to je velmi obecný problém:

Včera jsem si všiml, že jsme pod brutforcem nějakých hackerů z Ruska. Útočili nám na Remote Desktop Connection broker (3389). Dělali to pěkně pomalu a opatrně, už jsme to dost minimalizovali. Odkážete mě na nějaké dražší hardwarové/softwarové řešení nebo toto spíš navrhujete řešit jiným způsobem? Resp. nechci odkazovat na nějaký konkrétní produkt, spíš mě zajímá Váš postoj k tomuto. Třeba mi řeknete, že po dobrém nastavení hesel a oprávnění to řešit nemusíme vůbec.

Odpověď

Z toho, jak to popisujete, se dá vyhodnotit, že zřejmě máte otevřen přímý přístup přes TCP 3389 z internetu a někdo zkoušel online hesla na nějaké loginy.

Nejprve se zabývejme loginy. Byly to nějaké vaše skutečné existující loginy, nebo to vždycky selhalo na tom, že to nebyl správný login? To poznáte například na tom RDP serveru v logu z Failure Audit události typu Logon. Bude v tom chyba 0xC000006D (což je obecně STATUS_LOGON_FAILURE), ale také tam bude přesnější důvod - buď 0xC000006A (STATUS_WRONG_PASSWORD), nebo právě 0xC0000062 tedy STATUS_INVALID_ACCOUNT_NAME.

Pokud útočník nezná ani loginy, tak je jasné, že to je úplný cizinec. Pokud loginy zná, tak se ptejme, jestli to jsou nějaké známé loginy, jako třeba administrator a nestálo by za to tyto loginy buď přejmenovat, nebo určitě rovnou i zakázat.

Pokud by útočník znal všechny vaše loginy, mohl by vám je takto dokonce vzdáleně všechny pozamykat. Nemusí vůbec zkoušet hesla s cílem je uhádnout. Prostě jenom na každý účet bouchne několikrát, aby se zamknul. Takto by vám pozamykal i servisní účty a vyřadil tak celou vnitřní infrastrukturu, alespoň na nějakou dobu (viz. můj článeček zde).

Dále je vždycky žádoucí mít kvalitní hesla. Pokud by to jedno online ověření trvalo třeba 15 ms, což je dnes cca standard na rychlých systémech, tak vyzkoušet polovinu osmiznakových alfanumerických (alfanum8) hesel by trvalo 52 000 let. Píšete, že to navíc zkoušeli velmi pomalu, což indikuje, že se prostě snažili použít jen několik profláknutých hesel.

Proti tomu se dá obvykle chránit delšími hesly. Pokud si dáte politiku alespoň 10 znaků, tam už moc profláknutá hesla nejsou, protože to už není například jen jedno slovo a číslo.

Máte Windows AD prostředí, takže máte politiku 3of4. Až budu u vás, nasadíme vám moji politiku 4of4, takže si lidé budou muset dávat hesla obsahující alespoň jeden speciální znak, což kompletně odstraní problém profláknutých hesel a to i na intranetu.

To jsou ale spíše okrajové záležitosti.

Zabezpečení vzdáleného přístupu proti zkoušení hesel

Jak ale omezíme zkoušení hesel úplně? Musíte vyžadovat něco jiného než heslo už jen k tomu, aby se vůbec ustavilo vzdálené spojení. Na to se používají buď VPN připojení s ověřením pomocí buď klientského certifikátu (client certificate), nebo nějaká jiná multifaktorová autentizace (token, smart card, RSA SecureId kalkulátor, SMS, apoška).

Microsoft k tomuto má možnosti jako je SSTP (TLS HTTPS VPN), nebo IKEv2 a DirectAccess, všechno s čipovou kartou nebo jen certifikátem v počítači.

Pokud se jedná o prosté RDP, tak můžete využití také RD Gateway. RD Gateway může také vyžadovat klientský certifikát (nebo i čipovou kartu - smart card) k připojení. Takže neotevřete rovnou 3389, ale budete mít otevřen jenom TCP HTTPS 443 směrem na RD Gateway, která bude vyžadovat client certificate vůbec k vytvoření TLS spojení.

Webové aplikace, nebo i RD Gateway se dají dále publikovat přes WAP (Web Application Proxy), která může stejně tak vyžadovat klientský certifikát.

1 - 14Next
>
 

 Rychlovky lepší než tvítr

 
Velikonove 9.4.2017 4:57
V Nemecku zacaly velikonocni prazdniny a proto je ve smeru do Srbska patnackilometrova fronta aut s nemeckou znackou. Evidentne vsichni jedou slavit velikonoce do turecka?
 
ČD se rozhodly že naserou všechny stávající zákazníky 2.3.2017 6:14
ČD se rozhodly že pořádně naserou všechny stávající zákazníky a zrušily inkarty z eschop profilů. Zajděte si pro heslo na přepážku!
 
GoDaddy vydal 8951 certifikátů bez správného ověření - Root.cz 12.1.2017 14:40
https://www.root.cz/clanky/godaddy-vydal-8951-certifikatu-bez-spravneho-overeni
 
start ssl už zase vydává! 1.12.2016 12:50
jupíí, StartSSL už zase vydává!
 
nejede google 22.11.2016 21:16
jak najít teď rychle jinej DNS server když nejede google? brýle se bez brýlí špatně hledají :-)
 
(More Announcements...)