Windows Woensdag: Prefetch Files

Voor de post van vandaag, neem ik even de tijd om Windows Prefetch te bespreken. Maar eerst een snelle plug voor een aankomende training:

Ik ben momenteel bezig met de voorbereidingen voor een aankomende FOR508-klas met Chad Tillbury op SANS Security East 2017. Hoewel het erg dichtbij komt, kijken we uit naar een geweldige klas en het vinden van het volgende team van dodelijke forensicators! Als je er bij bent, stuur me dan van tevoren een berichtje. Als je er bij wilt zijn, ik geloof dat de registratie nog open is! Tijdens het evenement, op woensdag 11 januari, zal ik ook een SANS@Night lezing geven genaamd Zero In on the Artifacts That Matter. De voorbereiding voor die lezing was de inspiratie voor de post van vandaag, omdat prefetch zeker een vermelding zal krijgen.

Ik heb het al eerder gezegd en ik zeg het nogmaals – veel artefacten waar we van houden in de DFIR wereld zijn eigenlijk bijproducten van het besturingssysteem dat probeert om het leven makkelijker en/of efficiënter te maken voor de gebruiker of ontwikkelaars. Naar mijn mening valt prefetch ook in deze categorie.

Prefetch bestaat al sinds Windows XP. Het was oorspronkelijk ontworpen om het opstarten van het systeem en het starten van applicaties te versnellen. Het doel van prefetch is om het opstartgedrag van applicaties bij uitvoering te analyseren en vast te leggen om toekomstige opstarts efficiënter te maken. Deze gegevens worden tot 10 seconden na het opstarten van de applicatie vastgelegd. Het geregistreerde applicatiegedrag wordt opgeslagen in een traceerbestand – wat wij het prefetch-bestand noemen – in het pad C:\Windows\Prefetch.

Prefetch-bestanden

Zoals hierboven vermeld, zijn prefetch-bestanden te vinden in de statische directory C:\Windows\Prefetch. Prefetch bestanden hebben een .pf extensie en volgen een standaard naamgevingsconventie:

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

Prefetch bestanden bevatten de volgende metadata:

  • De naam van het bijbehorende uitvoerbare bestand
  • Het aantal keren dat het uitvoerbare bestand is uitgevoerd
  • De grootte van het prefetch-bestand
  • De bestanden en directory’s waarnaar werd verwezen tijdens het opstarten van de toepassing (dit is wat Windows wil traceren)
  • Informatie met betrekking tot het volume waarop het uitvoerbare bestand zich bevindt, inclusief het volumepad en het serienummer.

Hier is een voorbeeld van een aantal prefetch-bestanden van mijn test host:

Screenshot Prefetch folder from a Windows 10 Test Host

Merk op dat ik verschillende applicaties heb met dezelfde naam, maar een verschillende locatie. Dat blijkt uit de enigszins vergelijkbare hashes en duidt in veel gevallen op een software-update of een wijziging in de mappenstructuur.

EDIT: Met dank aan Eric Zimmerman die me eraan heeft herinnerd dat prefetch-bestandsnamen ook afhankelijk zijn van commandoregelargumenten en hoofdlettergevoelig zijn, ondanks het ontbreken van hoofdlettergevoeligheid in het traceerbestand. Hexacorn behandelt het hashing-algoritme hier in detail, en ik raad je aan het te bekijken als je dit niveau van prefetch-analyse moet doen.

Parsing the Prefetch File

De structuur voor Prefetch-bestanden is eigenlijk vrij bekend en er zijn meerdere parsing-opties beschikbaar. Hier zijn een paar opties:

  • In het ergste geval kunnen we strings gebruiken om wat informatie te krijgen over prefetch trace informatie. Hier volgt een voorbeeld van het opsommen van Unicode-tekenreeksen van een verdacht uitvoerbaar bestand:

Schermopname van tekenreeksen uit een prefetch-bestand voor A.EXE
  • Eric Zimmerman onderhoudt zijn hulpprogramma PECmd, momenteel versie 0.7.2.0. Het kan hier worden gedownload.
  • log2timeline/Plaso bevat een prefetch parser, en kan belangrijke gegevens uit de prefetch-bestanden in een tijdlijnformaat zetten.
  • TZWorks publiceert ook een erg nuttige en handige prefetch parser pf. U kunt er hier meer informatie over vinden. Hier is een voorbeeld van de uitvoer van TZWorks’ pf tool:

Schermopname van TZWorks’ pf uitvoer voor een prefetch bestand

Ik zal enkele van de forensische artefacten in deze uitvoer in de volgende sectie behandelen, maar merk op hoe we nu contextuele informatie krijgen, tijden uitgevoerd, en belangrijke timestamps.

Een andere belangrijke opmerking over het parsen van prefetch-bestanden is dat nieuwere prefetch-versies, namelijk Windows 10, een nieuw compressieformaat gebruiken dat niet goed werkt met parsers voor eerdere versies. Zorg ervoor dat uw tool kan omgaan met Windows 10 artefacten – of ga op zoek naar een nieuw script – voordat u aanneemt dat bestanden mogelijk beschadigd zijn.

Hoe te gebruiken in DFIR

DFIR-analisten moeten zich bewust zijn van prefetch omdat het veel forensische waarde bevat. Hier zijn een paar manieren waarop ik prefetch in het verleden heb gebruikt:

  • De run count kan een belangrijke aanwijzing zijn over hoe lang malware op een systeem kan hebben gestaan of hoe vaak het is/was gebruikt. Als je slechts bewijs hebt gezien van twee malware executies, maar prefetch laat er tientallen zien, dan is er wat meer graafwerk te doen.
  • De timestamps van het prefetch bestand vertellen ons ook volumes. Denk aan het volgende: Wat maakt een prefetch bestand aan, en wat wijzigt een prefetch bestand? Zet die acties om in timestamps, en we kunnen het volgende bepalen: De creatie tijdstempel van een prefetch bestand is de eerste keer dat de applicatie werd uitgevoerd, en de laatst gewijzigde tijd van een prefetch bestand is de laatste keer dat het werd uitgevoerd. Laten we nog eens kijken naar het screenshot van hierboven:

Schermopname van de pf-uitvoer van TZWorks voor een prefetch-bestand

Let op onze laatste uitvoertijd (2012-04-04 00:43:06.137) en de gewijzigde tijd: (2012-04-04 00:43:07). Nu kunnen we heel snel door Prefetch-bestanden hopen, zonder te hoeven parsen, en onze laatste uitvoertijden vinden.

Je kunt de tijdstempels ook op andere manieren gebruiken. Bekijk bijvoorbeeld de aanmaaktijdstippen van alle bestanden uit de prefetch-map. Als er interessante tijdsbestekken zijn, of prefetch-bestanden voor bekende malware, zoek dan naar andere bestanden met tijdsaanduidingen die in de buurt komen.

  • Bij het analyseren van prefetch-bestanden, vooral die met bekende malware, kijk dan naar de bestanden die in kaart zijn gebracht of zijn geladen. U kunt aanvullende indicatoren vinden.
  • Bijkomend, onderzoek de mappen die in kaart zijn gebracht vanuit het prefetch-bestand. Misschien vindt u bewijs van een externe schijf of een vorige partitie.
  • Ziet u meerdere prefetch-bestanden met verschillende hashes aan het eind van het bestand? Vergeet niet dat die hash is afgeleid van de locatie – je kunt malware op meerdere plaatsen hebben.
  • Ten slotte, vergeet niet dat Windows het opstarten van toepassingen tot 10 seconden controleert. Dus, terwijl we kunnen vertrouwen op onze prefetch file timestamps als vrij sterke indicatoren, moeten we rekening houden met de maximale tien seconden vertraging.

Going Beyond the Prefetch

In Windows Vista en daarna, is Microsoft blijven uitbreiden op de prefetch met extra functies zoals SuperFetch, ReadyBoost, ReadyBoot, en ReadyDrive. Ik zal in een later bericht dieper op deze functies ingaan.

Tot morgen, gelukkig Forensicating!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.