Administrátor - hrozba všech organizací
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