Vinduer onsdag:

I dagens indlæg vil jeg bruge et øjeblik på at diskutere Windows Prefetch. Men først, en hurtig plug for nogle kommende uddannelse:

Jeg er i øjeblikket forbereder mig på en kommende FOR508 klasse med Chad Tillbury på SANS Security East 2017. Selv om det er ved at være meget tæt på, ser vi frem til en fantastisk klasse og til at finde det næste hold af dødelige kriminalteknikere! Hvis du deltager, så send mig en besked i god tid. Hvis du ønsker at deltage, tror jeg, at tilmeldingen stadig er åben! I løbet af arrangementet, onsdag den 11. januar, vil jeg også holde et SANS@Night-foredrag med titlen Zero In on the Artifacts That Matter. Forberedelsen til dette foredrag var inspirationen til dagens indlæg, da prefetch helt sikkert vil få en omtale.

Jeg har sagt det før, og jeg siger det igen – mange artefakter, som vi elsker i DFIR-verdenen, er faktisk biprodukter af operativsystemet, der forsøger at gøre livet lettere og/eller mere effektivt for brugeren eller udviklerne. Efter min mening falder prefetch også ind under denne kategori.

Prefetch har eksisteret siden Windows XP. Det blev oprindeligt designet til at hjælpe med at fremskynde opstart af systemet og start af programmer. Målet med prefetch er at analysere og registrere programmernes opstartsadfærd ved udførelsen for at gøre fremtidige opstarter mere effektive. Disse data registreres i op til 10 sekunder efter opstart af programmet. Den registrerede programadfærd gemmes i en sporingsfil – det, vi kalder prefetch-filen – i stien C:\Windows\Prefetch.

Prefetch-filer

Som nævnt ovenfor findes prefetch-filer i den statiske mappe C:\Windows\Prefetch. Prefetch-filer har en udvidelse .pf og følger en standardnavnekonvention:

<APPLICATION NAME IN ALL CAPS>-<EIGHT CHARACTER HASH OF APPLICATION LOCATION>.pf

Prefetch-filer indeholder følgende metadata:

<APPLICATION NAME IN ALL CAPS>-<EIGHT CHARACTER HASH OF APPLICATION LOCATION>.pf

  • Navnet på den tilsvarende eksekverbare fil
  • Antal gange, den eksekverbare fil er blevet kørt
  • Størrelsen af prefetch-filen
  • De filer og mapper, der blev refereret under opstart af programmet (det er dette, som Windows ønsker at spore)
  • Informationer vedrørende den diskette, som den eksekverbare fil ligger på, herunder diskettesti og serienummer.

Her er et eksempel på nogle prefetch-filer fra min testvært:

Skærmbillede af prefetch-mappe fra en Windows 10-testvært

Bemærk, at jeg har flere programmer med samme navn, men en anden placering. Det vidner de noget ens hashes om, og i mange applikationers tilfælde er det sandsynligvis tegn på en softwareopdatering eller en ændring af mappestrukturen.

EDIT: Tak til Eric Zimmerman for at minde mig om, at prefetch-filnavne også er afhængige af kommandolinjeargumenter og er case sensitive, på trods af den manglende case sensitivitet i sporingsfilen. Hexacorn dækker hashing-algoritmen i detaljer her, og jeg vil anbefale dig at tjekke den ud, hvis du har brug for at lave dette niveau af prefetch-analyse.

Parsing the Prefetch File

Strukturen for Prefetch-filer er faktisk ret velkendt, og der er flere parsing-muligheder til rådighed. Her er et par muligheder:

  • I værste fald kan vi bruge strings til at få nogle oplysninger om prefetch-sporingsoplysninger. Her er et eksempel på opregning af Unicode-strenge fra en mistænkelig eksekverbar fil:

Screenshot af strenge fra en prefetch-fil for A.EXE
  • Eric Zimmerman vedligeholder sit værktøj PECmd, der i øjeblikket er i version 0.7.2.0. Det kan downloades her.
  • log2timeline/Plaso indeholder en prefetch-parser og kan sætte nøgledata fra prefetch-filerne ind i et tidslinjeformat.

  • TZWorks udgiver også en virkelig nyttig og praktisk prefetch-parser pf. Du kan se flere oplysninger om den her. Her er et eksempel på TZWorks’ pf værktøjsoutput:

Screenshot af TZWorks’ pf-output for en prefetch-fil

Jeg vil behandle nogle af de kriminaltekniske artefakter i dette output i næste afsnit, men bemærk, hvordan vi nu får kontekstuel information, tidspunkter, der er udført, og vigtige tidsstempler.

En anden vigtig bemærkning om parsing af prefetch-filer er, at nyere prefetch-versioner, nemlig Windows 10, bruger et nyt komprimeringsformat, der ikke spiller godt sammen med parsere til tidligere versioner. Sørg for, at dit værktøj kan håndtere Windows 10-artefakter – eller gå ud og find et nyt script – før du antager, at filer kan være beskadiget.

Sådan bruger du i DFIR

DFIR-analytikere skal være opmærksomme på prefetch, fordi det indeholder en masse kriminalteknisk værdi. Her er et par måder, jeg tidligere har brugt prefetch på:

  • Kørertællingen kan være en vigtig indikator for, hvor længe malware kan have været på et system, eller hvor ofte det er/blev brugt. Hvis du kun har set beviser for to malware-eksekveringer, men prefetch viser snesevis, så er der noget mere gravearbejde at gøre.
  • Tidsstemplerne i prefetch-filen fortæller os også mængder. Tænk på følgende: Hvad skaber en prefetch-fil, og hvad ændrer en prefetch-fil? Omdan disse handlinger til timestamps, og vi kan fastslå følgende: Oprettelsestidspunktet for en prefetch-fil er den første gang, programmet blev udført, og sidste ændrede tidspunkt for en prefetch-fil er den sidste gang, den blev udført. Lad os igen se på skærmbilledet fra ovenfor:

Skærmbillede af TZWorks’ pf-output for en prefetch-fil

Bemærk vores sidste kørselstidspunkt (2012-04-04-04 00:43:06.137) og det modificerede tidspunkt: (2012-04-04 00:43:07). Nu kan vi håbe meget hurtigt gennem Prefetch-filer, uden at skulle parse, og finde vores sidste udførelsestidspunkter.

Du kan også udnytte tidsstemplerne på andre måder. Overvej f.eks. at se oprettelsestidsstemplerne for alle filer fra prefetch-mappen. Hvis vi har nogen tidsrammer af interesse eller prefetch-filer for kendt malware, skal vi kigge efter andre filer med tidsstempler i tæt tidsmæssig nærhed.

  • Når vi analyserer prefetch-filer, især dem, der er relateret til kendt malware, skal vi kigge på de filer, der er mappet eller indlæst. Du kan finde yderligere indikatorer.
  • Dertil kommer, at du skal undersøge de mappede mapper fra prefetch-filen. Du kan måske finde tegn på et eksternt drev eller en tidligere partition.
  • Se du flere prefetch-filer med forskellige hashes i slutningen af filen? Husk, at hash’en er afledt af placeringen – du kan have malware flere steder. Sidst skal du ikke glemme, at Windows overvåger programstart i op til 10 sekunder. Så selv om vi kan stole på vores prefetch-filtidsstempler som ret stærke indikatorer, skal vi tage højde for den maksimale forsinkelse på ti sekunder.

Gå ud over prefetch

I Windows Vista og senere har Microsoft fortsat med at udvide prefetch med yderligere funktioner som SuperFetch, ReadyBoost, ReadyBoot og ReadyDrive. Jeg vil grave ned i disse funktioner i et senere indlæg.

Til i morgen, Happy Forensicating!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.