Na konci října jsem tady na jeden týden uveřejnil svůj AD scanner bezpečnosti. Byl jsem na něho pyšnej. Prošlo to testy na více než 250 000 účtech a více než stovce řadičů domény (DC). A za několik dnů mi zákazník píše, že mu to restartuje řadiče domény. Následovalo horentní testování. Trvalo mi překvapivě jen několik hodin, než jsem to nasymuloval.
Opravdu se to dělo po několika desítkách tisíc replikací objektů, chaoticky někdy ano, obvykle ne. Vždycky jenom pod zátěží a v okamžiku, kdy moje replikace kolidovala s nějakou jinou v tu správnou milisekundu. Kontroluju kvalitu hesel z jejich heší a k tomu využívám běžně zdokumentované DRSR API. No evidentně jsem nechtěně objevil tzv. race condition - tedy nekorektní stituaci, kdy LSASSu vadilo, že se dva replikační požadavky setkaly. A šel do restartu, event ID 1173 od ActiveDirectory_DomainServices s hláškou C0000005.
Skenování ve velkých doménách trvá někdy i několik hodin, takže skript se umí bez problémů přepínat mezi řadiči domény, pokud někde upadne konektivita. Tudíž jsem si toho nevšiml. Ale zpětná analýza logů ukázala, že se to fakt občas děje i na mém testovacím vzorku. Jenomže nikomu občasný restart DC nevadil :-) tak se to nepoznalo.
Následovalo deset! full time dnů práce na dvou věcech - zaprvé zjistit proč, a kdy se to přesně děje, abych to mohl nahlásit do Microsoftu. Za druhé samozřejmě workaround, pokud by byl možný. Nebyl. Nakonec jsem dokázal restartovat libovolný řadič domény během několika sekund od zahájení "útoku".
A dokázal jsem to i bez přihlašovacích údajů na úrovni Domain Admins, aby se to dalo kvalifikovat jako DoS pod omezeným účtem. Pěkně z RODC pod jeho obyčejným správcem. RODC můžete mít například i v DMZ apod. Takže jsem to 30. října nahlásil na MSRC jako DoS.
Po několika kolečkách vysvětlování, těsně před vánoci, dorazilo tohle:
Hello Ondrej,
Thank you for your submission. We determined your finding is valid but does not meet our bar for immediate servicing.
For more information, please see the Microsoft Security Servicing Criteria for Windows.
However, we’ve marked your finding for future review as an opportunity to improve our products.
I do not have a timeline for this review. As no further action is required at this time, I am closing this case.
No super :-) Naštěstí se mi podařilo z nich vydyndat workaround. Zjistilo se, že to není žádný workaround. Prostě jsem používal špatnou kombinaci parametrů. Blbci. Kdyby to správně pořádně zdokumentovali, tak jsme si mohli tohle všechno ušetřit.
Tak jsem to zapracoval, celý skenner současně ještě trošku vylepšil, znovu přetestoval (poslední tři týdny nedělám skoro nic jiného) a už je zase k dispozici.