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.

d1

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

d2

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)

d3

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