
Ta članek je prvi del serije o analizi Sysmon groženj. Vse ostale dele serije:
Del 1. Uvod v analizo Sysmon logov (smo tukaj)
Del 2. Uporaba podatkov iz Sysmon dogodkov za odkrivanje groženj
Del 3. Poglobljena analiza Sysmon groženj s pomočjo grafov
Če se ukvarjate z informacijsko varnostjo, se gotovo pogosto srečujete z razumevanjem potekajočih napadov. Če imate že izkušen občutek, lahko iščete nenavadno aktivnost v 'surovih' neobdelanih logih — recimo, PowerShell skript z zagnano ali VBS skript, ki se pretvarja za Word datoteko, — preprosto prelistavajoč zadnjo aktivnost v dnevniku dogodkov Windows. A to je resna težava. Na srečo je Microsoft ustvaril Sysmon, ki analizo napadov bistveno olajša.
Želite razumeti osnovne ideje, ki stojijo za grožnjami prikazanimi v Sysmon logih? Prenesite naš vodnik in spoznali boste, kako lahko notranji uporabniki neopazno opazujejo druge zaposlene. Glavna težava pri delu z dnevnikom dogodkov Windows je pomanjkanje informacij o starševskih procesih, torej iz njega ne moremo razumeti hierarhije procesov. V zapisih loga Sysmon pa obratno, vsebujejo identifikator starševskega procesa, njegovo ime in zagnano ukazno vrstico. Hvala ti, Microsoft.
V prvem delu naše serije bomo raziskali, kaj lahko storimo z osnovnimi informacijami iz Sysmon. V drugem delu bomo v celoti izkoristili informacije o starševskih procesih za ustvarjanje bolj kompleksnih struktur ustreznosti, znanih kot grožnje. V tretjem delu bomo predstavili preprost algoritem, ki skenira grožnje za iskanje nenavadne aktivnosti preko analize 'teže' grafa. Na koncu pa vas čaka lepo (in jasno) probabilistična metoda odkrivanja groženj.
Del 1: Uvod v analizo Sysmon logov
Kaj pomaga razumeti zapletenost dnevnika dogodkov? Na koncu - SIEM. Normalizira dogodke in poenostavi njihovo analizo. A ne rabimo iti tako daleč, vsaj na začetku. Na začetku bo dovolj, da preizkusite čudovito brezplačno orodje Sysmon, da razumete načela SIEM. Z njim je presenetljivo enostavno delati. Tako naprej, Microsoft!
Katere možnosti ponuja Sysmon?
Na kratko – koristne in berljive informacije o procesih (glej slike spodaj). Odkrijete številne koristne podrobnosti, ki jih ni v dnevniku dogodkov Windows, vendar je najpomembnejše naslednje polje:
- ID procesa (v deseti obliki, ne hex!)
- ID starševskega procesa
- Ukazna vrstica procesa
- Ukazna vrstica starševskega procesa
- Hash slike datoteke
- Imena slik datotek
Sysmon se hkrati namesti kot napravljalec gonilnika in kot storitev – več o tem Njegova ključna prednost je možnost analize logov iz več vir, korelacija informacij in izvoz rezultatov v en mapo dnevnika dogodkov, ki se nahaja na poti Microsoft -> Windows -> Sysmon -> Operativni. Pri svojih lastnih preiskavah dnevnikov Windows, pri katerih mi je stalo srce, sem nenehno moral preklapljati med, recimo, mapo z dnevniki PowerShell in mapo 'Varnost', listajoč v dnevnikih dogodkov v gotovo poskus, da nekoliko uskladim vrednosti med njimi. To ni lahka naloga, in kot sem kasneje spoznal, bi bilo bolje takoj imeti aspirin pri roki.
Sysmon pa naredi kakovosten napredek, saj ponuja koristne (ali kot radi pravijo dobavitelji - učinkovite) informacije, ki pomagajo pri razumevanju osnovnih procesov. Na primer, zagnal sem skrito sejo , ki simulira gibanje pametnega notranjega sodelavca v omrežju. To boste videli v dnevniku dogodkov Windows:

V dnevniku Windows je vidna neka informacija o procesu, vendar je tako rekoč malo koristna. Poleg tega so identifikatorji procesov v šestnajsti obliki???
Pri profesionalnem IT strokovnjaku, ki razume osnove hekanja, bi ukazna vrstica zbudila sum. Uporaba cmd.exe za kasnejše zagon drugega ukaza s preusmeritvijo izhoda v datoteko s čudnim imenom - to vsekakor izgleda kot dejanja programske opreme za nadzor in upravljanje. : na ta način se stvara pseudo-šal s pomoću WMI usluga.
Sada pogledajmo ekvivalentni zapis iz Sysmona, obraćajući pažnju na to koliko dodatnih informacija nam pruža:

Mogućnosti Sysmona na jednom ekranu: detaljne informacije o procesu u čitljivom obliku
Ne vidite samo komandnu liniju, već i ime datoteke, put do izvršne aplikacije, što Windows zna o tome (“Windows Command Processor”), identifikator roditeljskog procesa, komandnu liniju roditelja, koji je pokrenuo cmd-šal, kao i stvarno ime datoteke roditeljskog procesa. Sve na jednom mestu, konačno!
Iz Sysmon loga možemo zaključiti da je sa visokim stepenom verovatnoće ova sumnjiva komandna linija koju smo videli u "sirovim" logovima nije rezultat normalnog rada zaposlenika. Naprotiv, ona je generisana C2-sličnim procesom — wmiexec, kao što sam ranije pomenuo — i bila je direktno proizašla iz WMI procesa (WmiPrvSe). Sada imamo indikator da udaljeni napadač ili insajder testira korporativnu infrastrukturu.
Predstavljamo Get-Sysmonlogs
Naravno, sjajno je kada Sysmon može da smešta logove na jednom mestu. Ali, verovatno bi bilo još bolje kada bismo mogli da pristupimo pojedinačnim poljima loga putem programskih sredstava – na primer, putem PowerShell komandi. U tom slučaju bismo mogli da napišemo mali PowerShell skript koji bi automatizovao pretragu potencijalnih pretnji!
Nisam prvi sa tom idejom. I dobro je što je u nekim postovima na forumima i GitHub-u već objašnjeno kako koristiti PowerShell za parsiranje Sysmon loga. U mom slučaju želeo sam da izbegnem potrebu za pisanjem odvojenih linija parserskog skripta za svako polje Sysmona. Tako sam primenio princip lenjog čoveka i, čini mi se, na kraju smislio nešto zanimljivo.
Prvi važan trenutak je mogućnost komande da čita Sysmon logove, filtrira potrebne događaje i izvodi rezultat u PS promenljivu, kao ovde:
$events = Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" | where { $_.id -eq 1 -or $_.id -eq 11}
Če želite sami preveriti delovanje ekipe, lahko preko prikaza vsebine v prvem elementu tabele $events, $events[0].Message, dobite niz besedilnih vrstic s preprostim formatom: ime polja Sysmon, dvojniki ter nato samo vrednost.

Hip, hip, hurra! Izhod Sysmon dnevnika je pripravljen v format JSON.
Ali razmišljate o tem istem kot jaz? Če si prizadevamo še malo več, lahko izhod pretvorimo v formatirano JSON vrstico in jo neposredno naložimo v PS-objekt z močnim ukazom. .
V naslednjem delu bom pokazal PowerShell kodo za pretvorbo — zelo preprosta je. A za zdaj poglejmo, kaj lahko počne moja nova ekipa, imenovana get-sysmonlogs, ki sem jo namestil kot PS-modul.
Namesto da bi se poglabljali v analizo Sysmon dnevnikov skozi neprijazen vmesnik dnevnika dogodkov, lahko brez težav iščemo inkrementalne aktivnosti neposredno iz PowerShell seje in uporabljamo PS ukaz. (alias - "?") za zmanjšanje rezultatov izdaje:

Seznam cmd lupin, zagnanih preko WMI. Analiza groženj poceni z našim lastnim ukazom Get-Sysmonlogs.
Presenetljivo! Ustvaril sem orodje za poizvedovanje v Sysmon dnevniku, kot da bi bilo to podatkovna baza. V našem članku o je bilo omenjeno, da bo ta funkcijo izvedla v njem opisana kul pripomoček, čeprav formalno preko pravega SQL podobnega vmesnika. Ja, EQL je eleganten, vendar se bomo tega dotaknili v tretjem delu.
Sysmon in analiza grafov
Poglejmo abstraktno in razmislimo, kar smo pravkar ustvarili. V bistvu imamo zdaj zbirko dogodkov Windows, dostopno preko PowerShell. Kot sem že omenil, obstajajo povezave ali odnosi med zapisi — preko ParentProcessId — zato lahko dobimo celotno hierarhijo procesov.
Če ste prebrali serijo potem veste, da hekerji radi ustvarjajo zapletene večstopenjske napade, kjer vsak proces opravlja svojo majhno vlogo in pripravlja teren za naslednji korak. Takšne stvari je zelo težko ujeti samo iz "surovega" dnevnika.
Ampak z mojim ukazom Get-Sysmonlogs in dodatno strukturo podatkov, ki jo bomo obravnavali kasneje (seveda graf), bomo imeli praktičen način za odkrivanje groženj – kar zahteva le pravilno iskanje po vrhovih.
Kot vedno pri naših DYI blog projektih, bolj ko delate na analizi podrobnosti groženj v manjšem obsegu, bolje spoznate, kako zahtevno je zaznavanje groženj na ravni organizacije. To zavedanje je izjemno pomemben vidik.
Prve zanimive zaplete bomo srečali v drugem delu članka, kjer bomo začeli povezovati Sysmon dogodke v precej bolj kompleksne strukture.
Izvor: habr.com
