Simovits

RSAC2016 – Lösenfrasknäckning, samt Hackerspårning med hjälp av Sysinternals SysMon

I början av månaden gick RSA Conference USA 2016 av stapeln i San Francisco. Jag (Peder) och Mikael var där och höll vår presentation angående mitt/vårt arbete med lösenfrasknäckning med hjälp av Markovkedjor. Vi fick bra respons och många frågor efteråt, och det kändes som att åhörarna tyckte det var intressant, nydanande och att de kommer att få inspiration av vår metod för knäckning av långa lösenordsfraser. Åtminstone kommer de nog tänka till lite extra innan de väljer sin nästa lösenordsfras.

Vår session fick dessutom privilegiet att vara en av de tre som presenterades under rubriken “Agenda & Tracks” på förstasidan på konferensens site, dessutom strax jämte keynotetalaren Sean Penn, bara en sån sak… Nu har de precis ersatt både Sean och oss med andra rubriker, men vi fick pryda huvudsidan i ungefär tre veckor, däribland hela den vecka som konferensen pågick.

Mer information om vårt arbete med knäckning av lösenordsfraser kan hittas via referenserna [2] samt [3]. Rapport finns nu även publicerad på International Association For Cryptologic Research [4].

Givetvis fanns även en hel del andra sessioner som var mycket intressanta, och en av dem som jag kände kunde ha stor praktisk nytta i mitt arbete såväl som privat, var en genomgång av Sysinternals-svitens relativt nya tillskott ”SysMon” (1,5 år gammalt, men ny version ute nyligen). Denna sessions titel var “Tracking Hackers on Your Network with Sysinternals Sysmon”, och jag tänkte här försöka återberätta de intressantare delarna med hjälp av egna ord, kommentarer och tester.

Sysinternals

För den som inte känner till Sysinternals [7], så var det ett företag som skapade en mängd praktiska och kraftfulla freeware-systemverktyg för Windows med hjälp av operativsystemets mestadels odokumenterade nativa API, vilket gör att de ofta kan trolla mer med avancerade funktioner i Windows än verktyg som använder de mer officiella API:erna. Företaget är sedan en bra tid tillbaks uppköpt och en del av Microsoft TechNet, men de lyckades vid övertagandet förhandla fram att hela deras svit skulle vara fortsatt gratis och fritt att använda.

Sysmon

Ett av de senare verktygen de tagit fram är alltså SysMon [8], och dessutom släpptes en ny version strax innan RSA-konferensen, så huvudutvecklaren Mark Russinovich var där och presenterade verktyget och dess nya features samt gav en del tips om det.

SysMon är i princip det enda verktyget i sviten som behöver installeras, och det körs sedan som en service som startar automatiskt vid varje systemstart, och loggar vissa systemaktiviteter som kan vara typiska vid exempelvis intrång och/eller malware. Dessa loggar skrivs till en egen sökväg i Windows eventlog, och kan vara till god hjälp både för att upptäcka och spåra konstiga processer/malware samt vid forensikarbete efter ett eventuellt intrång eller virusangrepp.

Aktivitetstyper som kan loggas:

(alla är inte påslagna i defaultinstallationen)

1 Process Create
Detaljerad information om startade processer, såsom full kommandorad, processens ID och GUID, filens hashvärde (SHA1 som default, men det går att aktivera andra), användare etc.

2 File Creation Time Changed
När en process i efterhand ändrar tiden för skapande av en fil. Utan filtrering kan detta ge många false positives då exempelvis komprimeringsprogram och webbläsare kan ändra denna tidsstämpel för att den ska matcha originalfilens, men det är även ett vanligt sätt för hackare och malware att dölja sina spår.

3 Network Connection
Loggar nya nätverksanslutningar över såväl UDP som TCP. Här sparas bland annat vilken process som initierade anslutningen, vilket protokoll, IP, port som användes hos såväl mottagare som avsändare, samt i förekommande fall dnsnamn och portnamn.

4 Sysmon Service State Change
Loggning vid ändring av körstatus på själva SysMons service. Här kan man alltså se om och när SysMon stängts av eller satts igång.

5 Process Terminated
Processens ID och GUID, samt aktuell tid anges här för en process som avslutats.

6 Driver Loaded
Loggar laddade drivrutiner med information om vilken avbild som använts, dess hashvärde(n), samt om den är signerad och i sådant fall av vem.

7 Image Loaded
Logg över vilka moduler (dll-filer) som laddas av olika processer. Logghändelsen innehåller information om processens ID, GUID samt sökväg till avbild, den laddade modulen och dess hashvärde(n) samt om den är signerad och i sådant fall av vem.
Denna loggning är avstängd i grundinställningarna och bör användas med försiktighet då det även vid vanlig användning skapas väldigt många sådana här event. På 2,5 minuter loggades 480 händelser när jag testade denna funktion. Denna loggning kan vara bäst att använda för att med hjälp av config-filen filtrera på och bevaka någon speciell process eller modul.

8 CreateRemoteThread
Loggar när en process skapar en tråd i en annan process. Detta är vanligt att angripare/malware gör för att exempelvis använda sig av andra processer för att hålla sig dolda eller eskalera sin behörighet. Dock finns det också legitim användning även av denna metod.
Loggar innehåller diverse information om källprocess, målprocess, samt vilken adress i minnet tråden startades på.

9 RawAccessRead
Skapar loggar över direktläsning av diskar/volymer. Detta är vanligt bland malware i försök att kringgå filsystemets normala säkerhetsskydd för filer etc.

255 Error
Om något fel inträffar i själva SysMon loggas det som en händelse av denna typ.

Sökning av hashvärden i Virustotal

En fils beräknade hashvärde kan ses som ett (i princip) unikt globalt ID för filen. Ett mycket användbart sätt att använda de hashvärden som sparas i SysMons loggar, är att göra en sökning på dem på exempelvis siten virustotal [10], för att få en indikation på om det aktuella programmet är pålitligt eller ej.

Nedan visas ett exempel på en sökning av en process startad av taskeng.exe (som normalt startar schemalagda uppgifter):

I eventet på bilden ser vi en hel del information om den startade processen, såsom användare som startade den, vilken sökväg den startades på, vilken kommandorad den startades med, information om den överordnade processen etc. Enligt denna information i eventet kan man skapa en hypotes om att det antagligen är en schemalagd uppdatering för Flash som startats, men eftersom vi är misstänksamma av oss vill vi bekräfta detta. I eventet hittar vi även hashvärden för processens fil, något av dessa använder vi i nästa steg för att på virustotal.com verifiera filens ursprung, samt om den kan vara skadlig.

SHA1-värdet som är markerat i bilden ovan klistrar man enkelt in på virustotal (fliken “Sök”/”Search”) enligt bild nedan:

Just denna fil verkar enligt virustotal rätt ofarlig enligt sökresultatet:

Man kan även exempelvis se på fliken “File Detail” att filen tillhör Flash Player Update Service, och är signerad av Adobe/Verisign, vilket ytterligare bekräftar vår initiala hypotes.

Installation/konfiguration

Installationen av SysMon sker genom att, efter nedladdning/uppackning, som administratör köra exempelvis kommandot:

sysmon –accepteula –i

Detta installerar SysMon med defaultkonfiguration, vilket innebär att endast SHA1-hashvärden beräknas för de filer som förekommer i loggarna, samt att loggning av nätverksanslutningar (eventID 3) och modulladdning (eventID 7) är avstängda. Med -accepteula slipper man dessutom popuprutan med licensavtalet, vilket vi antagligen sett förut då det är samma för samtliga sysinternalsverktyg.

Det finns ett fåtal ytterligare alternativ man kan sätta antingen direkt vid installationen, eller efteråt med nedanstående kommando.

sysmon –c [alternativ]

med de alternativ man vill ha (om man inte ger ytterligare alternativ visas nuvarande konfig).

Exempel kan vara att man vill att alla stödda typer av hashvärden (sha1, sha256, md5, imphash) skall visas för de filer som förekommer i eventen, vilket fås av kommandot

sysmon –c –h *

för att aktivera loggning av nätverksanslutningar lägger man till –n

för att aktivera loggning av modulladdningar lägger man till –l (med eventuell påföljande lista på målprocesser att övervaka, för att slippa överflödsinformation)

Konfigurationsfil och filtrering

För att ha större kontroll och lättare kunna göra mer avancerade inställningar, speciellt filtrering, är det dock smidigare att först skapa en konfigurationsfil som man sedan laddar genom kommandot

sysmon –c [sökvägtillkonfigfil].xml

Filen skall vara i xml-format, och här ges ett exempel med en del mer eller mindre användbara filter (gjorda mest för illustration), några kopierade från [6].

<Sysmon schemaversion=”2.01″>
<!–Inkludera alla typer av hashvärden–>
<HashAlgorithms>*</HashAlgorithms>
<EventFiltering>
<!–Logga bara inkommande anslutningar eller till port 443–>
<NetworkConnect onmatch=”include”>
<Initiated condition=”is”>false</Initiated>
<DestinationPort condition=”is”>443</DestinationPort>
</NetworkConnect >
<!–Logga bara trådinjektioner i lsass eller winlogon–>
<CreateRemoteThread onmatch=”include”>
<TargetImage condition=”image”>lsass.exe</TargetImage>
<TargetImage condition=”image”>winlogon.exe</TargetImage>
</CreateRemoteThread >
<!–Strunta i att logga start av moduler signerade av Microsoft–>
<ImageLoad onmatch=”exclude”>
<Signature condition=”contains”>microsoft</Signature>
<Signature condition=”contains”>windows</Signature>
</ImageLoad>
<!–Ignorera filtidsändringar gjorda av chrome och 7zip–>
<FileCreateTime onmatch=”exclude”>
<Image condition=”end with”>chrome.exe</Image>
<Image condition=”contains”>7zip</Image>
</FileCreateTime>
<!–Stäng av loggning av avslutade processer (för att vi inkluderar ingenting)–>
<ProcessTerminate onmatch=”include” />
</EventFiltering>
</Sysmon>

Man kan filtrera på vilka fält man vill i eventen, och villkoren kan vara exempelvis vad fältet ska innehålla, sluta med, vara lika med, vara lägre/högre än m.m.

För att helt sätta på eller stänga av loggning av en händelsetyp, använder man ”exclude” respektive ”include” utan att specificera några filter. Det känns kanske fel att stänga av all loggning genom att skriva ”include”, men det är ju för att listan på händelser man ska inkludera är tom (se sista regeln i exempelfilen ovan).

Konfigurationsfilen är riktigt användbar om man vill sålla bort ointressanta händelser (false positives), eller enbart vill leta efter/övervaka en mycket specifik händelse.

För mer info och detaljer om konfigurationsfiler rekommenderas framför allt Marks slides [6] från RSA-konferensen.

Central loggning/övervakning

Windows eventloggar är inte är särskilt skyddade mot manipulering/radering om nu en angripare väl tagit kontroll över den lokala datorn, så för att skydda loggarna och dessutom för att få en central övervakning/loggning så är det relativt enkelt att integrera med exempelvis Splunk eller Microsoft OMS för att skicka iväg och spara loggarna centralt. Vid en sådan setup kan man bland annat skapa dashboards och larm baserat på informationen från SysMons loggar från samtliga datorer i nätverket, och exempelvis korrelera händelser från olika datorer för att skapa larm etc. Hur man skapar en sådan setup är något beroende av det övervakningsprogram man valt, men det finns länkar och mer info om integrering med Splunk eller OMS i bland annat [6] och [9].

Slutsats

Som de flesta andra i Sysinternals svit, är Sysmon ett verktyg med stor användbarhet för Windowsanvändare/administratörer/säkerhetsspecialister etc.

SysMon är ett intressant verktyg bara att köra lokalt, men det har ännu större potential om man i en företagsmiljö installerar det på samtliga datorer och sätter upp en nätverksspännande övervakning. Då kan dess loggar användas för exempelvis central larmning och dashboards, och vara till oerhörd stor hjälp vid såväl upptäckt som spårning/forensisk utredning vid incidenter som malware eller hackerintrång som spridit sig via nätverket, vilket inte är helt ovanligt för APT exempelvis.

Även om vi säkerhetsfolk brukar gilla ordentlig loggning så kan det ibland gå till överdrift, så lite tid och tanke bör nog läggas på att konstruera en konfigurationsfil som filtrerar bort vissa händelser för att inte överflöda loggutrymmet med ointressanta loggar.

Slutord och rekommendation blir: Installera och testa SysMon, för en vacker dag kommer även du den bäste att råka ut för någon slags incident som detta verktyg kan vara till god hjälp vid.

Referenser/länkar:

[1] – RSA Conference USA 2016, http://www.rsaconference.com/events/us16

[2] – Session: Linguistic Passphrase Cracking, https://www.rsaconference.com/events/us16/agenda/sessions/2396/linguistic-passphrase-cracking

[3] – Post Passwords 2015 – Phraser release on Github (earlier blogpost related to our talk), https://simovits.com/post-passwords-2015-conference-phraser-release-on-github/

[4] – International Association For Cryptologic Research, Report 2016/246 – Linguistic Cracking of Passphrases using Markov Chains, https://eprint.iacr.org/2016/246

[5] – Session: Tracking Hackers on Your Network with Sysinternals Sysmon, https://www.rsaconference.com/events/us16/agenda/sessions/2461/tracking-hackers-on-your-network-with-sysinternals

[6] – Slides: Tracking Hackers on Your Network with Sysinternals Sysmon, https://www.rsaconference.com/writable/presentations/file_upload/hta-w05-tracking_hackers_on_your_network_with_sysinternals_sysmon.pdf

[7] – Sysinternals website, http://www.sysinternals.com or https://technet.microsoft.com/sysinternals/

[8] – SysMon info & download, https://technet.microsoft.com/sysinternals/sysmon

[9] – SysMon/Splunk integration, http://blogs.splunk.com/2014/11/24/monitoring-network-traffic-with-sysmon-and-splunk/

[10] – Virustotal search, https://www.virustotal.com