
Untersucher für Windows-Verknüpfungsdateien (Shortcuts)
Ein forensisches Werkzeug für die Untersuchung von Windows-Verknüpfungsdateien (d.h. Windows-Verknüpfungen)
'lifer' ist ein Windows- oder *nix-Kommandozeilenwerkzeug, inspiriert vom Whitepaper 'The Meaning of Link Files in Forensic Examinations' von Harry Parsonage, erhältlich hier. Es begann als leichtgewichtiges Werkzeug, das ich schrieb, um bestimmte Informationen aus Verknüpfungsdateien zu extrahieren und damit bei Ermittlungen zu helfen, die ich während meiner Arbeit als Computerforensiker durchführte. Jetzt bin ich im Ruhestand, aber ich möchte seinen Nutzen erweitern und es veröffentlichen, damit andere davon profitieren können.
Die extrahierten Informationen entsprechen dem Microsoft Open Specification Document 'MS-SHLLNK', das online hier zu finden ist. Zum Zeitpunkt der Erstellung sind die meisten Teile der Spezifikation Version 4.0 implementiert. Ich hoffe, in Zukunft das Parsen von ungeöffneten Jump-List-Dateien zu implementieren.
Details zu den Dateien im Test-Verzeichnis und deren Verwendung finden Sie in der Datei '.\Test\Tests.txt'. Im Folgenden eine kurze Übersicht...
Nach der Installation des Werkzeugs öffnen Sie eine Kommandozeile (z.B. bash oder Powershell) und geben Sie aus dem Verzeichnis './lifer/src' Folgendes ein:
lifer -s ./Test/Test1.lnk
Dies sollte folgende Ausgabe liefern:
LINK FILE -------------- .\Test\Test1.lnk
{**OPERATING SYSTEM (stat) DATA**}
Last Accessed: 2017-04-18 20:28:19 (UTC)
Last Modified: 2017-04-18 20:28:19 (UTC)
Last Changed: 2017-04-18 20:28:19 (UTC)
{**LINK FILE EMBEDDED DATA**}
{S_2.1 - ShellLinkHeader}
Attributes: 0x00000020 FILE_ATTRIBUTE_ARCHIVE
Creation Time: 2008-09-12 20:27:17 (UTC)
Access Time: 2008-09-12 20:27:17 (UTC)
Write Time: 2008-09-12 20:27:17 (UTC)
Target Size: 0 bytes
{S_2.3 - LinkInfo}
{S_2.3.1 - LinkInfo - VolumeID}
Drive Type: DRIVE_FIXED
Drive Serial No: 307A8A81
Volume Label: [EMPTY]
Local Base Path: C:\test\a.txt
{S_2.4 - StringData}
{S_2.4 - StringData - RELATIVE_PATH}
Relative Path: .\a.txt
{S_2.4 - StringData - WORKING_DIR}
Working Dir: C:\test
{S_2.5 - ExtraData}
{S_2.5.10 - ExtraData - TrackerDataBlock}
MachineID: chris-xps
Droid1: {94C77840-FA47-46C7-B356-5C2DC6B6D115}
Droid2: {7BCD46EC-7F22-11DD-9499-00137216874A}
UUID Sequence: 153
UUID Time: 2008-09-10 10:23:17 (UTC)
UUID Node (MAC): 00:13:72:16:87:4A
HINWEIS: Der obige Abschnitt mit dem Titel '{OPERATING SYSTEM (stat) DATA}' wird unterschiedliche Daten haben, da diese von den Daten abhängen, an denen Sie diese Verknüpfungsdatei auf Ihrem System installiert und darauf zugegriffen haben. Die eingebetteten Daten bleiben jedoch gleich.
Eine ausführlichere Ausgabe (mit genaueren Zeitstempeln) erhalten Sie, indem Sie die Option '-s' weglassen.
Die meisten Details über eine Verknüpfungsdatei erhalten Sie mit der Option '-i', die auch bekannte Details zu IDList-Objekten ausgibt. Diese Option ist nicht mit der Option '-s' kompatibel.
Alle Verknüpfungsdateien in einem Verzeichnis (Ordner) können durch einfaches Übergeben des Verzeichnisnamens geparst werden:
lifer ./src/Test/WinXP
(Der Kürze halber wird die Ausgabe nicht gezeigt).
Die nützlichste Ausgabe für eine Reihe von Verknüpfungsdateien kann erstellt werden, indem die Ausgabe als tabulator- (oder komma-) getrennte Liste in eine Datei umgeleitet wird, die dann zur Analyse in eine Tabelle importiert werden kann. Dies kann wie folgt erreicht werden:
lifer -o tsv ./src/Test/WinXP > WinXP.tsv
oder
lifer -so tsv ./src/Test/WinXP > WinXP.tsv
für eine Datei, bei der einige der überflüssigen und uninteressanten Daten geschwärzt wurden.
Zeichenketten in Verknüpfungsdateien können manchmal Kommas enthalten. Da dies einen Konflikt mit dem Feldtrenner verursacht, wurden alle Kommas in Zeichenketten durch Semikolons ersetzt (d.h. ',' durch ';' ersetzt). Dies gilt nur für die Option '-o csv' und nicht für die Standardoptionen '-o txt', '-o tsv' und '-o xml'.
Besuchen Sie die Releases-Seite und wählen Sie die passende ausführbare Datei für Ihren Rechner aus der neuesten Version aus und laden Sie sie herunter. Benennen Sie die ausführbare Datei in 'lifer' (oder 'lifer.exe' für Windows) um. Stellen Sie sicher, dass sie die richtigen Attribute hat, um als ausführbare Datei zu laufen, und legen Sie sie entweder in einem Ordner mit den zu untersuchenden Verknüpfungsdateien ab oder fügen Sie den Pfad zu Ihrer PATH-Variable hinzu.
Als erstes stellen Sie sicher, dass Git auf Ihrem Rechner installiert ist. Wechseln Sie in einer Kommandozeile in Ihr gewünschtes Projektstammverzeichnis und geben Sie den Befehl ein:
git clone https://github.com/Paul-Tew/lifer.git
Ein neues Verzeichnis mit dem Namen 'lifer' wird erstellt.
(Das könnte auch für Mac-Installationen funktionieren, aber ich habe nicht das nötige Geld, um es sicher zu testen...) Da dieses Werkzeug recht einfach ist, sind die Abhängigkeiten minimal; stellen Sie sicher, dass der 'gcc'-Compiler und die entsprechenden 'libc'-Entwicklungsbibliotheken installiert sind, das ist alles. Starten Sie ein Kommandozeilen-Terminal und navigieren Sie zum Verzeichnis ./lifer/src. Geben Sie den Befehl ein:
gcc -Wall ./lifer.c ./liblife/liblife.c ./libbin2hex/libbin2hex.c -o lifer
Falls keine Warnungen oder Fehler aufgetreten sind, sollte sich nun eine ausführbare Datei 'lifer' im Verzeichnis befinden. Sie können dies überprüfen, indem Sie den Befehl eingeben:
ls -la
Wenn alles in Ordnung ist, können Sie testen, ob lifer funktioniert, indem Sie es mit der im Microsoft-Dokument angegebenen Datei testen, die ich als Teil des von Ihnen geklonten Git-Repositorys hinzugefügt habe und die sich im Verzeichnis ./Test/ befinden sollte. Dies können Sie mit dem Befehl tun:
./lifer ./Test/Test.lnk
Sie können auch testen, ob lifer mit einer Reihe von Verknüpfungsdateien in einem Verzeichnis funktioniert, indem Sie den Befehl eingeben:
./lifer ./Test/WinXP/
Installieren Sie das Werkzeug im Betriebssystem mit dem Befehl:
sudo install ./lifer /usr/bin/
Dies ermöglicht Ihnen, lifer überall auf Ihrem System zu verwenden, ohne das Verzeichnispräfix angeben zu müssen (z.B. lifer ./Test/Test.lnk anstelle von ./lifer ./Test/Test.lnk).