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

Jak povolit WinRM prostřednictvím zásad skupiny

Tato demonstrace používá systém Windows Server 2012R2 jako řadič domény a Windows 10 jako cílený klientský počítač. Ve scénáři je klientský počítač připojen k doméně s názvem asaputra.com a je umístěn pod cestu OU „WorkstationsW10“. Zásadou může být nový objekt zásad skupiny nebo použití stávajícího objektu zásad skupiny v konzole pro správu zásad skupiny v řadiči domény. V tomto příkladu je vytvořen nový objekt zásad skupiny s názvem „Globální správa“
Kliknutím pravým tlačítkem myši otevřete okno editoru objektu zásady a zvolte „Upravit“. První věc, kterou je třeba udělat, je říct cílovému počítači, aby povolil službu WinRM. Přejděte do Konfigurace počítače> Předvolby> Nastavení ovládacího panelu> Služby, potom klikněte pravým tlačítkem na prázdné místo a zvolte Nový> Servis
Klepnutím na tlačítko OK uložíte parametry, ale zatím nezavírejte editor zásad.
Další, stále na stejném objektu politiky, dalšívěc, kterou je třeba nakonfigurovat, je seznam IP adres, které mají povolen přístup ke vzdálené správě v cílovém počítači. Přejděte na Konfigurace počítače> Zásady> Šablony pro správu> Součásti systému Windows> Vzdálená správa systému Windows (WinRM)> Služby WinRM. Poté dvakrát klikněte na „Povolit vzdálenou správu serveru pomocí WinRM“ a změňte nastavení následovně:
Z hlediska bezpečnosti je nejlepší omezit rozsah adres IP co nejméně. Pro tento příklad je však v poli uvedena hvězdička (*), která umožňuje vzdálený přístup z libovolné adresy IP. Klepnutím na tlačítko OK uložte nastavení a znovu nezavírejte editor zásad.
Poslední věcí, kterou je třeba udělat, je vytvoření nového pravidlapro Firewall na cílovém klientském počítači. Přejděte do Konfigurace počítače> Zásady> Nastavení zabezpečení> Brána firewall systému Windows a pokročilé zabezpečení> Brána firewall systému Windows a pokročilé zabezpečení a potom klepněte pravým tlačítkem myši na Pravidla příchozí> Nové pravidlo

Vyberte Vzdálenou správu systému Windows z předdefinované sady pravidel, jak je uvedeno níže, klepněte na tlačítko Další
Zaškrtněte políčko pouze v profilu domény a soukromí, klikněte na tlačítko Další.Nastavte akci na Povolit připojení.

Klepnutím na tlačítko Dokončit uložte konfiguraci a nyní můžete okno editoru zásad zavřít.
Protože se jedná o počítačovou zásadu, je třeba ji použít na OU, kde je umístěn počítač. Stejně jako v tomto scénáři, jak to vypadá, když je zásada použita:

Po aktualizaci zásad skupiny se všechna tato 3 nakonfigurovaná nastavení projeví v klientském počítači. K ověření nám poslouží příkaz: Test-WsMan [Target Hostname / IP address]
například: Test-WsMan ucpc01
příklad 2: Test-WsMan 192.168.1.64

Pokud příkaz skončí chybou, je potřeba zkontrolovat, zda běží služba WinRM a zda je povolena na FireWall. Individuální řešením na daném PC pak může být příkaz: winrm qc -q

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"​
}
Posted in: Windows server

Centrální zastavení / spuštění služby Windows Update

Všichni jsme se jako admini setkali se situací, kdy potřebujeme rychle zastavit aktulizace Windows v celé síti, ať z důvodu chybné aktualizace, či z jiného důvodu.
Dnes Vám ukáži, jak aktualizace vypnout pomocí PowerShellu, ale nezapomeňme, že je nutné Windows update po nezbytné době opět zapnout, protože podporované jsou jen plně aktualizované systémy 😉

<#
    
	Skript zastaví službu Windows Update na všech PC v doméně.
    
	Autor nenese žádnou odpovědnost za případné škody, 
	uživatel je povinen před spuštěním se seznámit se skriptem!

    
	Požadavky:
    
	- PowerShell verze 5 a novější
    
	- Admin oprávnění pro všechna PC
    
	- ExcutionPolicy set to bypass

    
	Petrásek Jan
    
	©2020

#>

Invoke-Command -ComputerName (Get-ADComputer -Filter * | select DNSHostName).DNSHostName -ScriptBlock {

	net stop wuauserv;
    sc.exe config wuauserv start=disabled

}

Nyní si uvedeme druhý skript, který aktualizace opět zapne:

<#
    
	Skript zastaví službu Windows Update na všech PC v doméně.
    
	Autor nenese žádnou odpovědnost za případné škody, 
	uživatel je povinen před spuštěním se seznámit se skriptem!

    
	Požadavky:
    
	- PowerShell verze 5 a novější
    
	- Admin oprávnění pro všechna PC
    
	- ExcutionPolicy set to bypass

    
	Petrásek Jan
    
	©2020

#>

Invoke-Command -ComputerName (Get-ADComputer -Filter * -SearchBase "CN=Computers,DC=arpida,DC=local" | select DNSHostName).DNSHostName -ScriptBlock {
	net start wuauserv;
    sc.exe config wuauserv start=auto

}
Back to Top