Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Moji kolegové zabývající se bezpečností ukazují jak fungují některé aplikace pro vytažení hesel a zneužití ticketů v Active Directory. Domnívám se, že by bylo dobré Vás informovat alespoň o základních možnostech zjištění některých užitečných informací, které nebudou znamenat změnu veškerých procesů pro správu serverů. Když nemůžete z nějakého důvodu vynutit u každého uživatele vlastní účet, odebrat domain administrátora a zajistit vyšší tierovanou security, snažte se eliminovat možnosti útočníka ale i administrátora, aby si hesla sám nezjistil..
Většina firem ukládá hesla uživatelů i administrátorů do password managera. Top management svá hesla nikdy nesděluje, pravidelně je mění, a mnohokrát je využívá i k jiným účelům než je přihlášení do domény korporace. Toto bych viděl jako velké riziko zejména u serverů terminálových, kde se přihlašuje i Top Management. Administrátor tak na starém 2008 terminále je schopen odhalit heslo ve formátu prostého textu, což je ještě horší než mít NTLM hash (to je v případě použití na Windows Server 2012 R2), protože jej administrátor může použít k ověření i do jiných služeb např: facebook, soukromý email, aj.
Pro lepší řešení bezpečnosti, vynuťte pomocí Group Policy odhlášení automatické po nějaké době (např. 15 minut nečinnosti) a nastavte si vyšší security na úrovni domény.
Používejte pro řízení security v ADčku Nesting strategii pro security skupiny
Pro příklad uvádím i obrázek ADSecurity blogu, kde je vidět, kde všude najdete hesla v prostém textu
· MSV1.0: hashes & keys (dpapi)
· Kerberos password, ekeys, tickets, & PIN
· TsPkg (password)
· WDigest (clear-text password)
· LiveSSP (clear-text password)
· SSP (clear-text password)
Zdroj: https://adsecurity.org/wp-content/uploads/2014/11/Delpy-CredentialDataChart.png
Je důležité si uvědomit, že výše uvedené změny jsou sice velmi dobré a většina security managerů je bude určitě vynucovat, ale co malé organizace, pro které je tato změna utopií?
Můžeme udělat alespoň něco a tím naše administrátory omezit, aby dané hesla nemohli získat:
· Na terminálové servery udělit přístup jen osobám důvěryhodným (1 – 2 administrátoři) a ostatním administrátorský přístup odepřít
· Nastavit na terminálových serverech logování příkazů spuštěných na serveru
· Nastavit applocker pro spuštění některých nejznámějších aplikací na administrátory
· Pravidelně kontrolovat kde všude jsou administrátoři přihlášeni
· Mít pro privilegované administrátory samostatné heslo k terminálovému serveru, aby nemohl jiný administrátor chytit heslo svého kolegy
Pro vytahování přihlášených uživatelů používám níže uvedený skriptík, který vám dá alespoň malou šanci chránit se proti cracknutí hesla z nějakého serveru jiným administrátorem, popřípadě když už se někam přihlásíte tak se také vždy odhlaste a nenechávejte svou session na serveru otevřenou.
Pamatujte, dokumentace a reportování je vždy základ ke zvýšení bezpečnosti a zajištění continuity service.
SCRIPT:
import-module ActiveDirectory
$module = Get-Module -Name "ActiveDirectory" | select name
$domain = (Get-ADDomain).DNSRoot.ToString()
$error.clear()
$computers = Get-ADComputer -Filter {OperatingSystem -Like "Windows Server*"} -Property * | Select Name
Write-Host "V domene" + $domain
$report = @()
ForEach($c in $computers){
$name = $c.Name
Write-Host $name
$sessions = query session /server:$name
If ($Sessions.Count -eq "0")
{
$temp = "" | Select Computer,SessionName
$temp.Computer = $name
$temp.SessionName = "Nastala chyba, pravdepodobne RPC"
$report += $temp
}
else
{
1..($sessions.count -1) | % {
$temp = "" | Select Computer,SessionName, Username, Id, State, Type, Device
$temp.Computer = $name
$temp.SessionName
$temp.SessionName = $sessions[$_].Substring(1,18).Trim()
$temp.Username = $sessions[$_].Substring(19,20).Trim()
$temp.Id = $sessions[$_].Substring(39,9).Trim()
$temp.State = $sessions[$_].Substring(48,8).Trim()
$temp.Type = $sessions[$_].Substring(56,12).Trim()
$temp.Device = $sessions[$_].Substring(68).Trim()
$report += $temp
}
}
}
$report | Export-csv ".\Session.csv" -Encoding "Unicode"
$report | out-gridview
- Daniel Hejda, Servodata, IT Operation Manager