Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server

Pokročilá nastavení BitLockeru

Tento krátký text bude o možnostech nástroje BitLocker, které nejsou konfigurovatelné pomocí GUI, ale mohou se hodit pro datové disky, USB klíčenky, zálohy nebo další paměťová média. Pro práci s níže popsaným je potřeba PowerShell, nebo příkazová řádka.

Pro odemčení jednotky je možné využít certifikátu, který vystaví interní certifikační autorita. Přidání možnosti odemknout jednotku certifikátem ukáži na příkladu níže. Pokud využíváme PowerShell je možné místo souboru certifikátu odkázat na certifikát instalovaný v systému (účet uživatele, nebo počítače).

manage-bde -protectors -add E: -certificate -cf c:\File Folder\Filename.cer

Velmi zajímavou možností pro sdílená externí paměťová média je pak možnost odemknout jednotku pomocí členství účtu uživatele, nebo počítače ve skupině zabezpečení. Pro uživatele jde o velmi pohodlnou možnost, kdy pro odemčení jednotky nemusí nic zadávat a zároveň nehrozí vyzrazení pinu nepovolané osobě. Tuto možnost ovšem nedoporučuji využívat pro zálohovací média, protože při ztrátě AD již nebude možné takové médium odemknout, pokud nebude vytvořená vytištěná záloha 48 mastného obnovovacího klíče. Níže uvedený příklad nastavuje právo odemknout jednotku E: členům skupiny ekonomického oddělení.

manage-bde -protectors -add E: -sid DOMAIN\skupina-ekonomicke

V konfiguraci nástroje BitLocker je potřeba mít pořádek, proto se hodí vypsat konfiguraci pro danou jednotku (např. C:), což provede příkaz:

manage-bde -protectors -get C:

Výše uvedený příkaz rovněž zobrazí obnovovací 48 ciferný klíč. Posledním typem, který zde v krátkosti popíši je vynucení zálohy obnovovacího klíče do účtu počítače v AD. Pomocí GPO je možné nastavit, že bez této úspěšné zálohy nepůjde zahájit šifrování, ale někdy se může hodit možnost přidat klíč ručně (např. počítač je již šifrovaný v době zařazení do domény). Pro úspěšné provedený zálohy je nutné znát ID obcovacího klíče, které je mimo jiné výstupem příkazu výše uvedeného. Vlastní zálohu pak realizuje příkaz:

manage-bde -protectors -adbackup C: -id '{00000000-0000-0000-0000-000000000000}'
Posted in: Windows 10, Windows 11, Windows server

Instalace certifikátu do user private store

Dnes se dostaneme k problematice certifikátů. Někdy se hodí pro nějakou službu mít přístup jen pro uživatele, kteří drží nějaký certifikát. Můžeme mít scénář, kdy cloudová služba vyžaduje certifikát, který je vystaven pro organizaci, aby umožnila zadat přihlašovací údaje uživateli. Pro instalaci pfx certifikátu pro nějakou skupinu uživatelů, můžeme mít jiný důvod (nejčastěji půjde o SSL certifikát), proto se pojďme podívat, jak na to.

V první řadě musíme mít instalovanou správnou certifikační autoritu, pokud jde o externí službu, využijeme pfx soubor k instalaci důvěryhodné certifikační autority pomocí GPO v rámci dané politiky následovně:

  1. Konfigurace počítače
  2. Nastavení systému Windows
  3. Nastavení zabezpečení
  4. Zásady veřejných klíčů
  5. Pomocí kontextového menu vyvoláme průvodce importem certifikátu a použijeme požadovaný pfx soubor

Nyní již můžeme přistoupit k řešení importu vlastního certifikátu uživateli. Bohužel v GPO nemáme k dispozici certmgr.msc konzolu, nebo obdobu správy certifikátů pomocí IE. K privátnímu uložišti certifikátů uživatele se nelze pomocí GPO nijak dostat, což je správně, musíme si trochu pomoci nástrojem certutil, který použijeme následujícím skriptem:

certutil -f -user -p "CertificatePassword" -importpfx %LOGONSERVER%\netlogon\certificates\vendorcertificate.pfx"

Výše uvedený skript platí, když je daný certifikát uložený na DC, pokud jej ukládáme na libovolný jiný server, využíváme konkrétní UNC cestu k certifikátu. Skript uložíme jako soubor formátu cmd, nebo bat. Nyní se vrátíme do GPO editoru politiky a zajistíme instalaci certifikátu uživateli. Nejlepší cestou, je využít plánovanou úlohu, protože se jedná o GPO preferenci, což nám umožní lépe cíli na konkrétní uživatele, kteří mají certifikát mít instalovaný. Plánovanou úlohu vytvoříme v editoru politiky následovně:

  1. Konfigurace uživatele
  2. Předvolby
  3. Ovládací panely
  4. Naplánované úlohy
  5. kontextovým menu vytvoříme novou plánovanou úlohu pro Windows 7 a novější

Naplánovaná úloha se bude spouštět při přihlášení uživatele a bude spouštět náš skript, který jsme si popsali výše. Posledním úkolem je v upřesnění využít cílení úlohy, pokud je to potřeba.

Je důležité si uvědomit, že uživateli se certifikát touto cestou zapíše až při druhém přihlášení na daném PC, první přihlášení aktualizuje politiky a vytvoří plánovanou úlohu spolu se zapsáním certifikační autority. Až druhé přihlášení aktivuje plánovanou úlohu a zapíše certifikát.

Posted in: Vývoj počítačů, Windows 10, Windows 11, Windows 8 a 8.1, Windows server

Databáze uniklých hesel ke stažení

Pokud si jako správce Active Directory nebo jiné autentizačního systému potřebujete provést audit, zda uživatelé využívají veřejně známá hesla, nebo si vyrobit filtr proti těmto heslům, potřebujete nejdříve mít nějakou databázi těchto hesel.

Jednou z variant je stažení databáze z Have i been pwned (NTLM a SHA-1), nebo existuje volně přístupné místo pro stahování těchto textových databází: https://weakpass.com/wordlist

Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server

Zařazení všech počítačů do skupiny v Active Directory

Dnešní příspěvek je opět trocha PowerShellu a jednoduché řešní na zdánlivě triviální problém. Jde o to, jak dostat všechny počítače do určité skupiny (vlastně by se mohlo jedna po drobné úpravě i o uživatele) bez ohledu na to, ve které OU jsou. To může být potřeba například ve chvíli, kdy synchronizujeme jen určitou skupinu mezi AD a AAD pomocí Azure AD Conect.

$skupina = Read-Host -promt "Zadej distinguished name skupiny"
ADD-ADGroupMember -identity "$skupina" -members (Get-ADComputer -Filter * | select SAMAccountName)
Posted in: Windows server

Vylepšená kontrola hesel uživatelů v Active Directory

Již před delším časem jsem publikoval sktript, který pracuje s modulem DSinternals Michaela Grafnettera a kontroloval hesla uživatelů proti databázi uniklých hesel. Dnes publikuji jeho vyleošenou verzi, která je pohodlnější na zadávání informací potřebných ke kontrole.
Prerekvizitou je nainstalovaný modul DSinternals, což lze provést příkazem:

Install-Module DSInternals -Force$rezim = Read-Host -Prompt "Plně textový režim?(A/N) (pokud ne, cestyk souborům jsou zadány výběrovým dialogem)"
if(($rezim -eq "A") -or ($rezim -eq "a") -or ($rezim -eq "y") -or ($rezim -eq "Y"))
{
$ntdsPath = Read-Host -Prompt "Zadej cestu k ntds.dit"
$systempath = Read-Host -Prompt "Zadej cestu k souboru registru SYSTEM z DC"
$slovnik = Read-Host -Prompt "Zadej cestu k souboru slovníku"
$vystup = Read-Host -Prompt "Zadej cestu k výstupnímu souboru"
}
else
{
Add-Type -AssemblyName System.Windows.Forms
$shell = New-Object -ComObject Shell.Application
[void] [System.Windows.MessageBox]::Show( "Vyber soubor ntds.dit ", "Script completed", "OK", "Information" )
$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$OpenFileDialog.Multiselect = $false
$response = $OpenFileDialog.ShowDialog( )
if ( $response -eq 'OK' ) { $ntdsPath = $OpenFileDialog.FileName }
[void] [System.Windows.MessageBox]::Show( "Vyber soubor SYSTEM z DC", "Script completed", "OK", "Information" )
$response = $OpenFileDialog.ShowDialog( )
if ( $response -eq 'OK' ) { $systempath = $OpenFileDialog.FileName }
[void] [System.Windows.MessageBox]::Show( "Vyber soubor slovníku hesel", "Script completed", "OK", "Information" )
$response = $OpenFileDialog.ShowDialog( )
if ( $response -eq 'OK' ) { $slovnik = $OpenFileDialog.FileName }
[void] [System.Windows.MessageBox]::Show( "Vyber umístění výstupního souboru", "Script completed", "OK", "Information" )
$selectedfolder = $shell.BrowseForFolder( 0, 'Select a folder to proceed', 16, $shell.NameSpace( 17 ).Self.Path ).Self.Path
$vystup = $selectedfolder + "\" +(Read-Host -Prompt "Zadeh název výstupního souboru") + ".txt"
}
Import-Module -Name DSInternals
$key = Get-BootKey -SystemHivePath $systempath
$hash = Read-Host -Prompt "Je slovník NTLM hash? (Y/N)"
if(($hash -eq "Y") -or ($hash -eq "y"))
{
Get-ADDBAccount -All -DBPath $ntdsPath -BootKey $key | Test-PasswordQuality -WeakPasswordHashesFile $slovnik | Out-File $vystup -Encoding utf8
}
else
{
Get-ADDBAccount -All -DBPath $ntdsPath -BootKey $key | Test-PasswordQuality -WeakPasswordsFile $slovnik | Out-File $vystup -Encoding utf8
}
Posted in: Windows server

Script pro zálohu AD

Jednou z možností, jak zálohovat AD nezávisle na zálohování serveru, nebo jak připravit kopii AD k analýze či tvorbě RODC, je nástroj ndsutil. Kroky k vytvoření média pro tvorbu nového řadiče (tedy i možnost obnovit AD do čisté instalace Windows serveru) lze automatizovat, aby se mohly vykonávat pravidelně.

Dávkový soubor pro příkazovou řádku (tedy .cmd) může vypadat např.:

md F:\Zaloha\IFM
ntdsutil "activate instance ntds" IFM "create full F:\Zaloha\IFM" q q
ntdsutil "activate instance ntds" IFM "create sysvol full F:\Zaloha\IFM\Sysvol" q q
Xcopy F:\Zaloha\IFM "E:\Shares\Scripts\IFM" /E /H /C /I /Y
rmdir /s /q "F:\Zaloha\IFM"

Pokus bychom chtěli, aby se nám zálohvalo AD pravidelně na nějaké místo v síti, či do adresáře, který bude synchronizován do cloudu, můžeme použít PowerShell a tvořit následovně:

$adresar = "F:\Zaloha\IFM"
New-Item -Path $adresar -Name (Get-Date).ToString("ddMMyyyy") -ItemType "directory"
$cesta = "$adresar\"+(Get-Date).ToString("ddMMyyyy")
ntdsutil "activate instance ntds" IFM "create full $cesta" q q
ntdsutil "activate instance ntds" IFM "create sysvol full $cesta\Sysvol" q q
Posted in: Windows server

Prověření hesel v AD

Tento článek bych rád věnoval problematice kontrole hesel, které využívají vaši uživatelé v rámci doménové sítě. Jednou věcí je vydefinovat politiku na složitost délku, dobu platnosti hesla a uzamykání stanic, což je naprostý základ každé domény a doporučuji toto nastavení definovat v Default Domain Policy.
Pokud je toto nastavení provedeno správně, značně ztěžuje slovníkový či brute-force útok na heslo uživatele, ale problém je v tom, že lokální AD na rozdíl od Azure AD neumí porovnávat hesla se známími uniklými hesly. Pomocí Azure AD Premuim lze při hybridním scénáři tuto funkcionalitu do lokálního AD nasadit, ale pojďmě se podívat na to, jak si podobný test provés bez cloudu.Tento manuální audit hesel by měli provádět pouze doménový správci, ostatně jsou jediní, kdo to může udělat legitimně. Test nemusíme, ani to nedoporučuji, provádět přímo na serveru Active Directory, co budeme potřebovat je počítač s Windows 10, naprosto ideálně počítač s klientskou verzí systému Windows odpovídající serverové verzi. Například pro Windows server 2012R2 to jsou 8.1, pro Windows server 2012 jsou to 8, pro Windows server 2016 a 2019 jsou to Window 10.Dále budeme potřebovat PowerShell modul od Michaela Grafnettera DSInternals, který leze instalovat normálně z PowerShell galery. Dokumentace je krom PowerShellu dostupná na GitHubu či webu.

Poslední potřebnou věcí jsou databáze uniklých hesel např. have i been pwned (NTLM Hash) nebo čistě textové. Ze stažených archivů exportujeme txt soubor s hesly.

Postup

  1. Ze záloíhy AD si obnovíme co nejnovější verzi ntds.dit a souboru SYSTEM (což je soubor registru ze složky: C:\Windows\System32\config)
  2. Spustíme PowerShell jako správce

V PowerShellu spustíme následující kód pro databázi NTLM Hashů hesel:

$ntdsPath = Read-Host -Prompt "Zadej cestu k ntds.dit"
$systempath = Read-Host -Prompt "Zadej cestu k souboru registru SYSTEM z DC"
$slovnik = Read-Host -Prompt "Zadej cestu k souboru slovníku NTLM hash"
$vystup = Read-Host -Prompt "Zadej umístění výstupního souboru txt"
Import-Module -Name DSInternals
$key = Get-BootKey -SystemHivePath $systempath
Get-ADDBAccount -All -DBPath $ntdsPath -BootKey $key | Test-PasswordQuality -WeakPasswordHashesFile $slovnik | Out-File $vystup -Encoding utf8

Pokud máme zdrojovou databázi (či vlastní list) v plaintextu, použijeme následující příkazy:

$ntdsPath = Read-Host -Prompt "Zadej cestu k ntds.dit"
$systempath = Read-Host -Prompt "Zadej cestu k souboru registru SYSTEM z DC"
$slovnik = Read-Host -Prompt "Zadej cestu k souboru slovníku NTLM hash"
$vystup = Read-Host -Prompt "Zadej umístění výstupního souboru txt"
Import-Module -Name DSInternals
$key = Get-BootKey -SystemHivePath $systempath
Get-ADDBAccount -All -DBPath $ntdsPath -BootKey $key | Test-PasswordQuality -WeakPasswordsFile $slovnik | Out-File $vystup -Encoding utf8

Nyní necháme proces proběhnout (trvá od jednotek minut do řádu hodin dle počtu účtů, velikosti databáze uniklých hesel, toho zda databáze obsahuje plaintextová hesla nebo rovnou hash a rychlosti disku). Po dokončení procesu máme ve výstupním souboru hotovou analýzu.

Posted in: Windows server

Změna pozadí plochy Windows pomocí zásad skupiny

V konzole Správa zásad skupiny rozbalte doménovou strukturu a doménu, klikneme pravým tlačítkem na objekty zásad skupiny a vyberte „Nový“
Zadáme název nového objektu politiky. V tomto příkladu je název zásady „Zásady tapety“
Nově vytvořená zásada bude uvedena v seznamu objektů Zásady skupiny. Klikneme na něj pravým tlačítkem a vybereme „Upravit“
Zobrazí se okno editoru. V levém podokně přejděte na Konfigurace uživatele> Šablony pro správu> Plocha> Plocha. V pravém podokně poklepeme na nastavení Tapety na plochu.
Změníme možnost na Povoleno a poté zadejte umístění tapety a styl tapety. V tomto příkladu určujeme místní cestu, protože obrazový soubor na pozadí tapety plochy je uložen na místní jednotce serveru Domain Controller a styl tapety, který jsme použili, je „Výplň“.
Po konfiguraci klikneme na OK a zavřete okno editoru.
V okně konzoly Správa zásad skupiny klikneme pravým tlačítkem na OU „Uzivatele“ a vybereme „Propojit existující GPO“
Vybereme zásady tapety a klikněte na OK.
Vše potvrdíme OK a nyní se s následující aktualizací zásad (restart déle jak 4 hodiny po spuštění, první přihlášení uživatele na daný PC v daném dni, čí příkaze gpupdate/force) nastaví uživatelům zařazným do OU „Uživatelé“ nová tapeta.

Posted in: Windows server

Ruční řízení synchronizace Azure AD Connect

Dnes Vám ukáži primitivní skript, kterým je možné zjisti stav synchronizace a případně ručně spustit synchronizaci AD s Azure AD.

<#
    Skript vypíše stav synchronizace Azure ADconnect,
    provede pravidelnou nebo celou synchronizaci.
    Skript musí běžet na PC, kde je instalován Azure ADconnect.
#>
$volba = 0
Write-Host "volba 1: Zjištěnís tavu synchronizace"
Write-Host "volba 2: Spustí synchrnizaci"
Write-Host "volba 3: Spustí úplnou (iniciální) synchronizaci"
switch($volba)
{
    1{Get-ADSyncScheduler}
    2{Start-ADSyncSyncCycle -PolicyType Delta}
    3{Start-ADSyncSyncCycle -PolicyType Initial}
}
Posted in: Windows server

Výpis PC, která si rok neměnila heslo

Jak všichni správci AD ví, i počítače dodržují ze zdvořilosti politiku na změnu hesla. Reálně by to ovšem dělat nemusely, protože heslo počítače má 128 míst, takže jeho prolomení se tím značně komplikuje. Vyjímaje doménových řadičů si ovšem počítače mění heslo v souladu s default domain policy.  Pokud si PC např. rok nezměnil heslo, patrně je vyřazený, nebo opravdu nebyl v dosahu AD. Následující skript vyhledá taková PC a dokáže je smazat, ale musíte si dát pozor na doménové řadiče.

$Date = ((Get-Date).AddDays(-365))
$DC2 = Read-host -promt "Zadejte druhý řád názvu domény: "
$DC1 = Read-host -promt "Zadejte první řád názvu domény: "
#Počítače s více jak ro neměněným heslem​
Get-ADComputer -Filter 'PasswordLastSet -le $Date' -SearchBase "CN=Computers,DC= $DC2,DC=$DC1" -Properties PasswordLastSet | where Enabled -eq $true | FT Name,PasswordLastSet ​
#zakáže PC s rok neměněnýn heslem​
$zakazat = 0​
$zakazat = Read-Host -Prompt "Pro zakázání všech vypsaných účtů zvolte zadejte 1 jinak 0: "​
if($zakazat -eq 1)​
{​
    Disable-ADAccount -Identity (Get-ADComputer -Filter 'PasswordLastSet -le $Date' -Properties PasswordLastSet | where Enabled -eq $true)​
    Write-Host "Počítače byly zakázány"​
}​
else​
{​
    Write-Host "Žádný úet nebyl zakázán"​
}
Back to Top