1 der Prefetch Ordner

Wenn Prefetch entsprechend aktiviert ist, sammelt Windows bei jedem System- und Programmstart Informationen über die gestarteten Programme und legt diese in Dateien im Prefetch Ordner ab. Dieser Ordner liegt im Windir-Verzeichnis (Default also c:\windows\windir) und kann als Administrator auch eingesehen werden.

Kurz gesagt, dient der Inhalt dieses Ordners als Informationsquelle dazu, wichtige Teile eines Programms schon vorab zu laden und dadurch den Startvorgang deutlich zu beschleunigen

Beispiel 1: Prüfen des Prefetch Status

Set-StrictMode -Version "2.0"
Clear-Host  
 
$Path = "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters\" 
(Get-ItemProperty -path $Path -Name EnablePrefetcher).EnablePrefetcher

#mögliche Ausgabe
 

3

die möglichen Werte findet ihr in der MSDN: EnablePrefetcher (Standard 7 Package Reference)

Am meisten Informationen werden also gespeichert, wenn der Wert für EnablePrefetch auf "3" steht, was er im Normalfall auch sollte.

Beispiel 2: Anzeige des Prefetch Ordners

Set-StrictMode -Version "2.0"
Clear-Host  
 
$Windir = [Environment]::GetEnvironmentVariable("Windir") 
$PrefetchPath = "$Windir\Prefetch"
Get-ChildItem $PrefetchPath

#mögliche Ausgabe

 

    Directory: C:\WINDOWS\Prefetch
 
Mode      LastWriteTime               Length      Name 
----           -------------                      ------          ---- 
d----        23.04.2014     06:11                       ReadyBoot
-a---        28.05.2014     19:05      53886      1UND1_SMARTDRIVE_UPLOADMANAGE-70DD3BB1.pf  
-a---        11.06.2014     22:43      14790      7Z.EXE-6E2B4E53.pf   
-a---        11.06.2014     22:44      111774    7ZG.EXE-5BB9903E.pf 
-a---        19.09.2014     22:12      218098    ACRORD32.EXE-4E288B88.pf 
-a---        01.10.2014     22:10      49096      ADOBEARM.EXE-813E932C.pf    
............

Wir sehen in diesem Ordner alle auf diesem Rechner jemals gestarteten Programme, sofern dieser Ordner nicht mal geleert wurde und die Prefetch-Option aktiviert ist.

 

Mit der obigen Ausgabe sehen wir außerdem anhand der LastWriteTime auch noch, wann das Programm zuletzt gestartet wurde

Es kommt aber noch besser mit Hilfe weiterer Tools: 

Mit WinPretchView sieht man unter anderem, wann ein Programm das erste und das letzte Mal und sogar wie oft ("Run Counter") es benutzt wurde

 

Ähnliche Listen findet man auch in der Registry

HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache

allerdings ohne Datum

 

2 Der Profilordner

Meldet sich ein User an einem WindowsSystem interaktiv an und ordnungsgemäß auch wieder ab, so schreibt Windows das sogenannte UserProfil. Dieses Profil befindet sich im Ordner "c:\users" mit jeweils einem Unterordner für jeden User, der sich auf dem System mindestens einmal angemeldet hat.

Die Ordner-Attribute "LastAccessTime" und "LastWriteTime" jedes Profilordners zeigen daher an, wann zuletzt auf diese Ordner zugegriffen oder dieser beschrieben wurde und damit der User interaktiv tätig war.

Beispiel 1: LastAccessTime und LastWritetime der Profilordner

Clear-Host
Set-StrictMode -Version "2.0"
 
$ProfileFolders = (Get-ChildItem $env:userprofile\.. | Select Fullname)
$AllOutput = @()
 
Foreach ($ProfileFolder in $ProfileFolders) {
  [PsObject]$OutPut = "" | Select-Object ProfilePath,LastAccessTime,LastWriteTime
  If(Test-Path "$($ProfileFolder.Fullname)" ){
     $OutPut.ProfilePath = $($Profilefolder.Fullname)
     $ProfileFolder = Get-Item "$($ProfileFolder.Fullname)" -force
     $OutPut.LastWriteTime = $($ProfileFolder.LastWriteTime)
     $OutPut.LastAccessTime = $($ProfileFolder.LastAccessTime)
  }else{     
    "$($Profiles.fullname) has no ntuser.dat in its profile"
     $OutPut.ProfilePath = $($Profiles)
     $OutPut.LastWriteTime = "-"
     $OutPut.LastAccessTime = "-"
  }#if
     $AllOutPut += $OutPut
}#Foreach
 
$AllOutPut | Format-Table * -auto

#mögliche Ausgabe

 

ProfilePath                 LastAccessTime        LastWriteTime
-----------                 --------------        -------------  
C:\Users\Administrator      08.10.2014 21:39:31   08.10.2014 21:39:31
C:\Users\LetMeIn            06.10.2014 04:13:01   06.10.2014 04:13:01
C:\Users\Public             22.08.2013 17:36:32   22.08.2013 17:36:32

 Möglicherweise erkennt man an dieser Ausgabe Unstimmigkeiten, beispielsweise wenn ein merkwürdiger Useraccount um 4 Uhr morgens Profildaten geschrieben hat.

 

Beispiel 2: Nachvollziehen von Suchaktivitäten

Habt ihr anhand Beispiel 1 einen Account identifiziert, mit dem sich ein Angreifer am System angemeldet hat, könnt ihr nachforschen, ob dieser Angreifer möglicherweise die Suche im Explorer genutzt hat, um interessante Inhalte auf eurem Rechner zu finden. Die Registry speichert die Suchmuster, sowie das Datum der zuletzt ausgeführten Suche, so dass Ihr damit mit etwas Glück auf die Absicht des Angreifers schließen könnt.

Der Registrykey "WordWheelQuery"  unter "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\WordWheelQuery" hält dafür die entsprechenden Informationen bereit

Unter dem Key "WordWheelQuery" sind also alle verwendeten Suchmuster im Explorer des Account (HLCU!) als lesbare Binärwerte gespeichert. Im Wert MRUListEx findet ihr die Reihenfolge der Suchoperationen. Auf meinem Rechner wurde also die Suche "6" zuletzt ausgeführt, das Suchmuster lautete "geheime Dokumente". Auch die vorherigen Suchmuster sind in den vorigen Werten gespeichert.

Interessant wären natürlich noch die Zeiten, wann die Suchen ausgeführt wurden. Zumindest das Datum der letzten Suche können wir aus der LastWriteTime des Registryschlüssels "WordWheelQuery" auslesen. Leider besitzen Registrywerte keine Timestamps, aber immerhin die Schlüssel.

 

Ladet euch die recht komplexe Function Add-RegKeyMember bitte aus der Technet-Scripting Gallery herunter und fügt die violett eingefärbte Zeile dem Code hinzu.

#requires -version 2.0
 
function Add-RegKeyMember {
<#
.....
        default {
                Write-Error ("Error closing handle to key '{0}': {1}" -f $RegistryKey.Name, $_)
            }
        }
    }
}

 

Get-Item "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\WordWheelQuery\" `

     | Add-RegKeyMember | Select LastWriteTime

#mögliche Ausgabe

 

LastWriteTime                                                                          
-------------                                                                         03.11.2014 23:46:49 

 

Wir wissen damit, dass auf dem Rechner am 03.11.2014 23:46:49   eine Suche nach "geheime Dokumente" (siehe oben) ausgeführt wurde. Falls diese Suche dem rechtmäßigen Accountbesitzer nicht bekannt ist, hättet ihr wahrscheinlich ein weiteres Mosaiksteinschen gefunden, um Ziele und Identität des Angreifers einzugrenzen.

 

Beispiel 3:TypedPath

Ab Windows7 speichert die Registry Pfade, die in den WindowsExplorer (nicht IE)  eingetragen wurden

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths

Der zuletzt eingegebene Pfad wird unter url1 abgelegt. Ältere Pfade werden nach oben verschoben.