Ein .lnk ist ein Windows Shell Link, die kleine Binärdatei, die erstellt wird, wenn Sie "eine Verknüpfung erstellen" zu einem Programm, Dokument oder Ordner. Sie sieht im Explorer trivial aus. Die Binärdatei ist alles andere als das. Das Format ist vollständig in [MS-SHLLINK] spezifiziert, und sobald Sie ein paar gelesen haben, beginnen Sie, Verknüpfungen als eines der informativsten Artefakte zu behandeln, die Windows produziert.
Was drin steckt
Das Format ist ein fest 76-Byte-Header, gefolgt von einer Reihe optionaler Abschnitte, jeder gesteuert durch ein Bit in den LinkFlags des Headers. In der Reihenfolge, in der ein Parser sie liest:
- ShellLinkHeader, Flags, die NTFS-Attribute des Ziels, drei FILETIME-Zeitstempel (Erstellung, Zugriff, Schreiben des Ziels, wie sie bei der Erstellung des Links gesehen wurden), der Show-Window-Befehl, der Icon-Index und ein Hotkey.
- LinkTargetIDList, die Shell-Item-ID-Liste, die vom Explorer-Namespace von einem Stammordner zum Ziel läuft.
- LinkInfo, VolumeID (Laufwerkstyp, Serial, Label), LocalBasePath und CommonNetworkRelativeLink, wenn das Ziel auf einer Netzwerkfreigabe lebte.
- StringData, NAME_STRING, RELATIVE_PATH, WORKING_DIR, COMMAND_LINE_ARGUMENTS, ICON_LOCATION. Längen-präfixiert in Zeichen, ANSI oder UTF-16LE je nach dem
IsUnicode-Flag. - ExtraData, optionale Blöcke, jeder mit einer 4-Byte-Signatur: EnvironmentVariableDataBlock, ConsoleDataBlock, TrackerDataBlock, SpecialFolderDataBlock, ConsoleFEDataBlock, DarwinDataBlock, IconEnvironmentDataBlock, ShimDataBlock, PropertyStoreDataBlock, KnownFolderDataBlock, VistaAndAboveIDListDataBlock.
Der TrackerDataBlock ist der berühmte: Er trägt den NetBIOS-Namen der ursprünglichen Maschine und eine "Droid"-GUID, deren letzte sechs Bytes die MAC-Adresse der linkerstellenden Maschine sind. Dieser einzige Block ist verantwortlich für eine lange Liste öffentlicher Attributionserfolge, einschließlich mehrerer APT-Berichte, die die Build-VM hinter einer Kampagne namentlich nannten.
Warum es wichtig ist
Weil eine Verknüpfung wo sie erstellt wurde und worauf sie zeigte aufzeichnet, sind .lnk-Dateien ein Grundbaustein des DFIR. Sie offenbaren Wechsellaufwerke, gelöschte Dateien, Netzwerkfreigaben und die ursprüngliche Maschine, selbst nachdem das Ziel längst verschwunden ist. Die drei FILETIMEs des Headers sind eine Momentaufnahme der Metadaten des Ziels bei der Linkerstellung; kombiniert mit dem eigenen MFT-Eintrag des Links pinnen sie sowohl "wann der Benutzer das Ziel gesehen hat" als auch "wann der Benutzer den Link geschrieben hat". Eigenständige Verknüpfungen leben überall, Desktop, Startmenü, %APPDATA%\Microsoft\Windows\Recent\, Wechsellaufwerke, und dieselbe LNK-Struktur bildet auch die Nutzlast jedes Eintrags in Jumplist-Dateien unter Recent\AutomaticDestinations\ und Recent\CustomDestinations\.
Datenschutz
Der Parser auf dieser Seite ist eine Rust-Crate, kompiliert zu WebAssembly. Die Datei wird in Ihrem Browser dekodiert. Sie überquert nie das Netzwerk, nichts wird hochgeladen, keine Telemetrie. Das ist wichtig, weil eine .lnk aus einer realen Umgebung den Benutzernamen, NetBIOS-Hostnamen, MAC-Adresse und Dokumentpfade der Maschine durchsickern lässt, die sie geschrieben hat, Felder, die Sie im Allgemeinen nicht über eine Anbietergrenze hinweg übertragen wollen.
Weiterführende Literatur
- Microsofts [MS-SHLLINK]-Spezifikation, die maßgebliche Referenz.
- Innenansicht von MS-SHLLINK, der Feld-für-Feld-Durchlauf.
- Wie man eine .lnk-Datei öffnet, sichere Inspektionspfade.
- Forensische Analyse von .lnk-Dateien, was Ermittler herausziehen.
- LNK-Datei-Malware, dieselben Felder, aus Sicht des Angreifers.
- Schwester-Artefakte: der Jumplist-Parser für eingebettete LNK-Streams, der Prefetch-Parser und der Registry-Parser zur Bestätigung.