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:
- von Nirsoft: WinPrefetch View (freeware)
-
von TZworks: Windows Prefetch Parser (Trial Lizenzfile muss separat angefordert werden)
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.