Skip Ribbon Commands
Skip to main content

Ondrej Sevecek's Blog

:

Engineering and troubleshooting by Directory Master!
Ondrej Sevecek's Blog > Posts > Poznámky k mému včerejšímu a dnešnímu WUGu na téma infrastrukturní bezpečnosti
duben 23
Poznámky k mému včerejšímu a dnešnímu WUGu na téma infrastrukturní bezpečnosti

Včera jsem měl a dneska budu mít WUG.

Slajdy a screenshoty

No používal jsem slajdy například ze svého GOC 175 kurzu, který školím v GOPASu. Slajdy, například tu tabulku s porovnáním jednotlivých servisních účtů, nebo screenshoty z procexp najdete zde. Nebo ještě lépe, přijděte na to pětidenní školení.

A nebo vůbec přijďte na konferenci GOPAS TechEd 2014 (www.teched.cz)

Budu tam také mít několik přednášek, ale hlavně tam bude milión dalších úžasných přednášek, které se nikde jinde nevidí. A samozřejmě plno luxusního jídla a zábavy.

Statistika přihlašování z logu

Něco podobného jsem tu psal už nedávno. Pro zopakování ze včerejška jednotlivé PowerShell skriptové kousky. Upozorňuju, že to chce ještě dodělat i pro NTLM ověřování, to znamená zapracovat ještě druhou událost číslo 4776, která má trošku jinak rozhozené InsertionStrings a navíc to obsahuje jméno počítače a nikoliv IP adresu.

Začali jsme takto se všemi successful Kerberos Authentication Service událostmi číslo 4768:

gwmi -Query 'SELECT * FROM Win32_NTLogEvent WHERE EventCode=4768'

A pokračovali s transformací InsertionStrings na tabulku o dvou sloupečcích:

gwmi -Query 'SELECT * FROM Win32_NTLogEvent WHERE EventCode=4768' | select @{ n ='Login'; e = { $_.InsertionStrings[0] } }, @{ n='IP'; e = { $_.InsertionStrings[9] } }

Pak nás napadlo tam přidat i datum a čas události:

gwmi -Query 'SELECT * FROM Win32_NTLogEvent WHERE EventCode=4768' | select @{ n ='Login'; e = { $_.InsertionStrings[0] } }, @{ n='IP'; e = { $_.InsertionStrings[9] } }, @{ n = 'Date' ; e = { $_.ConvertToDateTime($_.TimeGenerated) } } 

Načež bych z toho odstranil přihlašování počítačů, tedy loginů, které končí dolarem $ (ale bacha, nic neříká, že normální účet nemůže končit dolarem):

gwmi -Query 'SELECT * FROM Win32_NTLogEvent WHERE EventCode=4768' | select @{ n ='Login'; e = { $_.InsertionStrings[0] } }, @{ n='IP'; e = { $_.InsertionStrings[9] } }, @{ n = 'Date' ; e = { $_.ConvertToDateTime($_.TimeGenerated) } } | ? { $_.Login -notlike '*$' }

No a mě se vůbec nelíbily ty IP adresy, takže bychom to mohli zkusit přeložit na jména počítačů. To už ale chce trošku sofistikovanější skript:

function Resolve-LogIP ([string] $ip, [string] $eventFromServer)
{
  if ($ip -eq '::1') { return $eventFromServer }
  if ($ip -like '::ffff:*.*.*.*') { return [System.Net.DNS]::Resolve($ip.SubString(7)).HostName }
  return [System.Net.DNS]::Resolve($ip).HostName
}

gwmi -Query 'SELECT * FROM Win32_NTLogEvent WHERE EventCode=4768' | select @{ n ='Login'; e = { $_.InsertionStrings[0] } }, @{ n='IP'; e = { $_.InsertionStrings[9] } }, @{ n = 'Host' ; e = { Resolve-LogIP $_.InsertionStrings[9] $_.__SERVER } }, @{ n = 'Date' ; e = { $_.ConvertToDateTime($_.TimeGenerated) } } | ? { $_.Login -notlike '*$' }

No a poslední krok bylo to doplnit o dotaza na více řadičů domény. Pro jednoduchost jsem tam dal prostě jenom seznam. Pokud byste to chtěli lepší, tak stačí použít například Get-AdComputer, nebo DSQUERY SERVER -o RDN:

function Resolve-LogIP ([string] $ip, [string] $eventFromServer)
{
  if ($ip -eq '::1') { return $eventFromServer }
  if ($ip -like '::ffff:*.*.*.*') { return [System.Net.DNS]::Resolve($ip.SubString(7)).HostName }
  return [System.Net.DNS]::Resolve($ip).HostName
}

'dc1', 'dc2', 'dc3' | % { gwmi -Query 'SELECT * FROM Win32_NTLogEvent WHERE EventCode=4768' -Comp $_ } | select @{ n ='Login'; e = { 

$_.InsertionStrings[0] } }, @{ n='IP'; e = { $_.InsertionStrings[9] } }, @{ n = 'Host' ; e = { Resolve-LogIP $_.InsertionStrings[9] 

$_.__SERVER } }, @{ n = 'Date' ; e = { $_.ConvertToDateTime($_.TimeGenerated) } } | ? { $_.Login -notlike '*$' }

Comments

There are no comments for this post.

Add Comment

Title


Pole Title nemusíte vyplňovat, doplní se to samo na stejnou hodnotu jako je nadpis článku.

Author *


Pole Author nesmí být stejné jako pole Title! Mám to tu jako ochranu proti spamu. Roboti to nevyplní dobře :-)

Body *


Type number two as digit *


Semhle vyplňte číslici dvě. Předchozí antispemové pole nefunguje úplně dokonale, zdá se, že jsou i spamery, které pochopily, že je občas potřeba vyplnit autora :-)

Email


Emailová adresa, pokud na ni chcete ode mě dostat odpověď. Nikdo jiný než já vaši emailovou adresu neuvidí.

Attachments