Evtx Parser Version 1.0.4

Version 1.0.4 des Eventlog-Parsers für Microsoft Vista und Windows 2008 steht jetzt zum Download bereit. Diese Version behebt wieder einige Fehler und überprüft nun auch die Integrität der Ereignis-Daten.

Diese Version des Parsers behebt ein Problem, das sich durch die Meldung eines Fehlers in Zeile 37 (oder 38, je nach Version) des Moduls Node0x0c.pm bemerkbar macht. Die Ursache ist sehr interessant: Blöcke können nämlich hinter ihrem letzten Ereigniseintrag noch weitere Daten enthalten. Entweder handelt es sich dabei dann um die Reste älterer und schon in Teilen überschriebener Ereignismeldungen, oder aber um den Beginn eines Eintrags, der dann aber schließlich doch zu groß für noch freien Speicherplatz im Block wurde. Gewöhnlich handelt es sich aber nur um "Datenmüll", den der Parser einfach übergeht.

In seltenen Fällen kann jedoch direkt hinter dem letzten Ereigniseintrag ein vollständiger alter Eintrag liegen. Der Parser versucht dann, die XML-Struktur zu rekonstruieren. Wenn jedoch im Zuge dessen das Modul Node0x0c.pm auf die XML Vorlage zuzugreifen versucht, so kann es diese an der erwarteten Position nicht finden. Die Vorlage befand sich nämlich an einem niedrigeren Offset und wurde längst mit neuen Meldungen überschrieben. Das führt dann schließlich zu der Fehlermeldung. Ab der vorliegenden Version erkennt der Parser diese besondere Konstellation und vermeidet den Fehler.

Für die erstmalige Meldung dieses Fehlers danke ich Kristinn Gudjonsson. Bei der genauen Diagnose hat mir eine Testdatei geholfen, die Michael Felber zur Verfügung stellte. Auch dafür ein herzliches Dankeschön!

Kürzlich habe ich im Block-Header noch eine weitere CRC32 Prüfsumme gefunden. Sie wird über den für Ereignismeldungen genutzten Datenbereich zwischen den Offsets 0x200 und OfsRecNext berechnet. Das Beispielprogramm evtxinfo.pl prüft nun für jeden Block mit Hilfe dieses Wertes die Integrität der gespeicherten Meldungen:

./evtxinfo.pl manipulated-SID.evtx 
Information from file header:
Format version  : 3.1
Flags           : 0x00000000
         File is: clean
     Log is full: no
Current chunk   : 2 of 2
Next Record#    : 161
Check sum       : pass

Information from chunks: Chunk file (first/last) log (first/last) Header Data ----- --------------------- --------------------- ------ ------ 1 1 113 1 113 pass pass 2 114 160 114 160 pass FAILED

Für dieses Beispiel hatte ich mit einem Hex Editor die Security ID in einem Protokolleintrag manipuliert. Entsprechend ist der Test des betroffenen zweiten Blocks gescheitert ("FAILED"). Dieser Schutzmechanismus ist jedoch nur gegen unabsichtliche Änderungen wirksam. Für einen Angreifer wäre es ein leichtes, nach der Manipulation eines Protokolleintrags auch die entsprechenden Prüfsummen neu zu berechnen und dadurch den Schutz zu unterlaufen.

Archiv

Impressum

Dieses Blog ist ein Projekt von:
Andreas Schuster
Im Äuelchen 45
D-53177 Bonn
impressum@forensikblog.de

Copyright © 2005-2012 by
Andreas Schuster
Alle Rechte vorbehalten.
Powered by Movable Type 5.12