0

Administrátor je hrozba všech organizací

Tak dneska mě napadlo, že když kolegové zabývající se bezpečností vám ukazují jak fungují některé aplikace pro vytažení hesel a zneužití ticketů v Active Directory, bylo by dobré vám říci alespoň základní možnost 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ž už nemůžete z nějakého důvodu vynutit u každého uživatele vlastní účet, odebrat domain administrátora a zajistit nějakou tu vyšší tierovanou security, tak se snažte eliminovat možnosti útočníka ale i administrátora, aby si ty hesla sám vytáhl.

Většina firem ukládá hesla uživatelů i administrátorů do nějakého password managera, nicméně top management svá hesla nikdy nesděluje, pravidelně mění, ale 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, jelikož administrátor tak na starém 2008 terminálu je schopen odhalit heslo ve formátu prostého textu, což je ještě horší než mít NTLM hash (NTLM zjistíte 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 třeba:

  • Facebook
  • Soukromý email
  • Aj…

Pokud se rozhodnete ochránit tato hesla, alespoň částečně, vynuťte pomocí Group Policy odhlášení automatické po nějaké době (15 minut nečinnosti nebo tak něco) a nastavte si nějakou vyšší security na úrovni domény…

AD_tier

Používejte pro řízení security v ADčku Nesting strategii pro security skupiny

AGDLP

Nicméně 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)

Cred SSO

Zdroj: http://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 vaše administrátory omezit v tom, 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řenu.

Pamatujte dokumentace a reportování je vždy základ ke zvýšení bezpečnosti a zajištění continuity service.

Někdy příště vám ukážu jak se dá bránit ještě lépe a co můžete udělat, proto aby jste ochránili své identity proti útočníkům (administrátorům)

93-2

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

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *