Simovits

Minimalt triage-verktyg

Om man arbetar med säkerhetsincidenter är det viktigt att kunna få insyn i vad som hänt på en enhet som beter sig underligt. Om exempelvis antivirusprogrammet larmar för att det tagit bort skadlig kod behöver man möjligen kontrollera så att den skadliga koden verkligen försvunnit och kanske även i vissa fall reverse-engineera koden. Det finns många EDR-verktyg från olika leverantörer såsom McAfee, Crowdstrike och FireEye som har avancerade funktioner för det scenariot.

Med lägre krav på avancerade funktionalitet kanske man kan tycka att antivirussystemet skulle kunna utföra en batch av kommandon på en drabbad dator och skicka resultatet utan att man behöver betala för en ny produkt. I organisationer där upphandlingar kan ta lång tid att implementera ett EDR-system eller där man har en begränsad budget så kan detta vara ett problem.

En lösning på problemet är att man själv skapar en batch av kommandon som man genom ett centralt verktyg kan aktivera på enheten man behöver undersöka. Om man inte vill eller har möjlighet att logga in på datorn som säkerhetsanalytiker så behöver verktyget även på något sätt skicka resultatet till säkerhetsanalytikern.

För att lösa denna problematik har jag skapat ett litet körbart program för Windows som utför följande:

  1. Exekverar ett antal kommandon fördefinierade i en konfigurationsfil.
  2. Packar ihop ett antal mappar som specificeras i samma konfigurationsfil.
    1. Om man vill kan endast specifika filer inkluderas i paketet såsom exekverbara filer och temp-filer. Detta för att undvika situationer då exempelvis antivirusprogrammet felaktigt tagit bort ett dokument med känslig information (false positives är vanligt i en föränderlig IT-miljö).
    2. Verktyget går igenom mapparna rekursivt. Även zip-filer traverseras på detta sätt av verktyget.
  3. Processer som exekverar listas av verktyget. Ifall man vill ha både 32-bits och 64-bits processer så kan man starta 64-bits-versionen av programmet separat som ett kommando precis som övriga kommandon specificerade i konfigurationsfilen.
  4. Alla filer läggs i ett zip-arkiv och krypteras med en publik nyckel (som behöver skapas på förhand med hjälp av programmet).
  5. Det krypterade zip-arkivet laddas upp till en specificerad FTP-server.
  6. Alla filer som skapats under körningen tas bort.

Säkerhetsanalytikern kan därefter ladda ned det krypterade zip-arkivet från FTP-servern, dekryptera det (med en kommandoradsflagga till verktyget) och därefter analysera filerna som inhämtats.

Exekveringsprocess

För att exekvera verktyget på en specifik dator på bästa sätt så beror det på vad man har för möjligheter i sin egen miljö. Ifall man har McAfee ePO som antivirussystem så kan man utnyttja deras EEDK-verktyg för att skapa ett paket som kan exekveras mot en specifik enhet med en knapptryckning från ePO.

EEDK för att exekvera minitriage

Ett exempel för en exekvering kan på så sätt se ut enligt följande:

Exekvering av minitriage

Kompilera

Verktyget är skrivet i C# och kan kompileras genom Powershell med compile-kommandot som finns i samma mapp.

.\compile.ps1

Generera nyckelpar

För att skapa ett nyckelpar så används kommandot

minitriage.exe –genkeys public.key private.key

Detta returnerar en base64-kodad sträng som ska kopieras in i settings.txt

strPublicKey=<klistra in publik nyckel här>

Dekryptera

Då paketet levererats som en krypterad zip-fil til FTP-servern så behöver det dekrypteras.

minitriage.exe –decrypt private.key inputfile output.zip

Processer och föräldraprocesser

För att skapa ett träd över processer och vad de startat för andra processer kan följande kommando användas.

minitriage.exe –graph <filnamn>

Där filnamn är någon av de process-listningsfilerna som genereras med kommandot:

minitriage.exe –listprocesses

Exempel på konfigurationsfil

För att exekvera en körbar fil som inte finns installerad på datorn där verktyget ska exekvera så kan man använda @base@ för att beteckna att den exekverbara filen finns i samma mapp som minitriage.exe. I det lilla exemplet nedan finns exempelvis 64-bits-versionen inkluderad för att lista information om 64-bits processer. Filen ska döpas till settings.txt och placeras i samma mapp som minitriage.exe för att ladda in.

strPublicKey=base64-kodad-sträng från --generate kommandot
strFTPServer=ftp://192.168.1.2:21
strFTPUser=userpub
strFTPPassword=whatever
strDirectory=C:\ProgramData\Microsoft\Windows Defender\Quarantine
strDirectory=C:\quarantine
strCommand=c:\windows\system32\NETSTAT.EXE -an
strCommand=c:\windows\system32\NETSTAT.EXE -anb
strCommand=c:\windows\system32\tasklist.exe
strCommand=c:\windows\system32\query.exe user
strCommand=c:\windows\system32\netsh.exe int ip show config
strCommand=c:\windows\system32\arp.exe -a
strCommand=c:\windows\system32\ipconfig.exe /ALL
strCommand=c:\windows\system32\net.exe session
strCommand=c:\windows\system32\route.exe PRINT
strCommand=c:\windows\system32\ipconfig.exe /displaydns
strCommand=c:\windows\system32\net.exe share
strCommand=c:\windows\system32\net.exe file
strCommand=c:\windows\system32\schtasks.exe
strCommand=c:\windows\system32\sc.exe query
strCommand=c:\windows\system32\systeminfo.exe
strCommand=c:\windows\system32\wbem\wmic.exe qfe
strCommand=c:\windows\system32\tasklist.exe /svc
strCommand=c:\windows\system32\tasklist.exe /V /FO CSV
strCommand=c:\windows\system32\cmd.exe /c  "tree /f c:\users"
strCommand=c:\windows\system32\reg.exe query hklm\Software\Microsoft\Windows\CurrentVersion\Run
strCommand=c:\windows\system32\reg.exe query hklm\Software\Microsoft\Windows\CurrentVersion\RunServices
strCommand=c:\windows\system32\reg.exe query hklm\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
strCommand=c:\windows\system32\reg.exe query hklm\Software\Microsoft\Windows\CurrentVersion\RunOnce
strCommand=@base@\minitriage64.exe --listprocesses

Att tänka på

Programmen som ska exekveras behöver specificeras med absolut sökväg. Det är viktigt att programmen som exekveras endast är skriv/modifierbara av administratörer på datorn ifall minitriage.exe exekveras som administratörsanvändare (vilket är vad som händer ifall man exekverar med McAfee Run Client Task.

Det kan också vara bra att veta om att dokumenten som ska laddas upp kommer att mellanlagras i en temporär mapp och därefter tas bort. Datorer som är delade mellan användare skulle kunna orsaka säkerhetsproblematik ifall den temporära mappen är läsbar för alla användare och filerna innehåller känslig information. Därför rekommenderas att ingen känslig information behandlas av minitriage-verktyget.

Verktyget har inte någon riktig felhantering för kommandoradsargument och liknande. Koden är dock minimal så det är lätt att se hur allt fungerar ifall man tar en titt på Program.cs. Eftersom programmet kan vara ganska kraftfullt och tänkt att exekvera med höga behörigheter så rekommenderas det att man läser igenom koden och förstår hur det fungerar innan man använder det.

Ladda ner…

Här kan källkoden laddas ner… https://github.com/jamesrep/minitriage

Tips och länkar

Det finns gratis och open source-applikationer som kan samla in information på en dator och returnera resultatet i en textfil. Ett sådant verktyg är McAfees GetSusp som använder McAfees threat intelligence för att detektera skadlig kod. Nedan är länkar till ett par nyttiga verktyg från McAfee och FireEye som kan vara till hjälp i en triage fas.

https://www.mcafee.com/enterprise/en-us/downloads/free-tools/getsusp.html

https://www.fireeye.com/services/freeware/memoryze.html