
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).
Das lifer GitHub-Projekt wird komplett mit einer Visual Studio 2017-Projektmappe geliefert, daher ist der einfachste Weg, eine ausführbare Windows-Datei zu erstellen, zuerst Visual Studio 2017 zu installieren. Es gibt eine kostenlose Version (bekannt als 'Community'-Version) verfügbar hier. Sobald Visual Studio installiert ist:
cd "F:\\lifer\src\x64\Debug\"
.\lifer.exe ..\..\Test\Test1.lnk
Es ist möglich, lifer unter Windows ohne Installation von Visual Studio zu erstellen, aber Sie müssen dennoch die Visual C++ Build Tools herunterladen und installieren, verfügbar hier. Nach der Installation kann lifer im Verzeichnis ./src/ mit dem folgenden Befehl erstellt werden:
CL lifer.c .\liblife\liblife.c .\Win\dirent.c .\Win\getopt.c .\libbin2hex\libbin2hex.c
'lifer' war ursprünglich ein reines Linux/GNU-Werkzeug, das erst portabel für Windows wurde, nachdem ich Lösungen für die Hauptprobleme gefunden hatte: das Navigieren in einem Verzeichnis und das Parsen der Kommandozeilenoptionen in der gleichen Weise wie GNU. Zu diesem Zweck bin ich den folgenden beiden Projekten zutiefst dankbar:
Benutzer werden ermutigt, das Whitepaper zu lesen, bevor sie den Ergebnissen eine Bedeutung beimessen. Keinen Ergebnissen sollte eine Bedeutung zugeschrieben werden, ohne ein vollständiges Verständnis davon zu haben, was die Ausgabe darstellt; dies gilt insbesondere für Tatsachenfeststellungen vor Gericht. In solchen Fällen obliegt es dem Benutzer, beide genannten Dokumente vollständig zu verstehen und ein umfassendes Verständnis davon zu haben, wie Windows und andere Betriebssysteme die Erstellung, Verschiebung und Löschung solcher Dateien behandeln. Ebenso sind praktische Kenntnisse darüber erforderlich, wie 'lifer' die Daten interpretiert und präsentiert hat (dies erfordert das Lesen und Verstehen des Codes).
Ich bin nur ein Autodidakt, daher gibt es zweifellos jede Menge Fehler und Überraschungen im Code. In diesem Sinne gebe ich absolut KEINE Versprechungen, dass dieses Werkzeug Ihr System nicht schädigt. Ich habe mich sehr bemüht, Ihren Rechner nicht zu beschädigen, aber der Weg zur Hölle ist mit guten Vorsätzen gepflastert...
DIESES MATERIAL WIRD "WIE BESEHEN" OHNE JEGLICHE GEWÄHRLEISTUNG ZUR VERFÜGUNG GESTELLT, OB AUSDRÜCKLICH ODER KONKLUDENT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE KONKLUDENTEN GEWÄHRLEISTUNGEN DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK ODER DER NICHTVERLETZUNG VON RECHTEN DRITTER. EINIGE RECHTSORDNUNGEN ERLAUBEN DEN AUSSCHLUSS KONKLUDENTER GEWÄHRLEISTUNGEN NICHT, DAHER GILT DER OBIGE AUSSCHLUSS MÖGLICHERWEISE NICHT FÜR SIE. IN KEINEM FALL WERDE ICH GEGENÜBER EINER PARTEI FÜR DIREKTE, INDIREKTE, BESONDERE ODER ANDERE FOLGESCHÄDEN HAFTEN, DIE SICH AUS DER NUTZUNG DIESES MATERIALS ERGEBEN, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF ENTGANGENE GEWINNE, GESCHÄFTSUNTERBRECHUNGEN, VERLUST VON PROGRAMMEN ODER ANDEREN DATEN AUF IHREM INFORMATIONSVERARBEITUNGSSYSTEM ODER ANDERWEITIG, SELBST WENN WIR AUSDRÜCKLICH AUF DIE MÖGLICHKEIT SOLCHER SCHÄDEN HINGEWIESEN WURDEN.
Paul Tew - März 2020