1、漏洞描述
ZDI-CAN-25373 是一個 Windows 快捷方式文件(.LNK)漏洞,它允許攻擊者通過精心制作的惡意快捷方式文件來執行隱藏的惡意命令。攻擊者通過在 .LNK 文件的 COMMAND_LINE_ARGUMENTS 結構中填充大量空白字符(如空格、水平制表符、換行符等)來隱藏惡意命令。這些填充字符使得惡意負載在 Windows UI 中不可見,從而規避了檢測。
2. LNK 文件格式結構詳解
Windows 快捷方式文件,也稱為 Shell 鏈接文件(.lnk),是 Windows 操作系統使用的一種二進制文
件,用作文件、文件夾或應用程序的快捷方式。了解這些字段對于文件取證、惡意軟件分析以及對 Windows 快捷方式的深入理解都非常重要。
以下是 MS-SHLLINK 文件格式的主要組成部分和關鍵字段介紹:
一個典型的 MS-SHLLINK 文件由以下幾個主要結構組成,其中一些是必須的,一些是可選的:
- SHELL_LINK_HEADER (必須):快捷方式文件的核心頭部,包含許多重要的標志和基本信息。
- LINKTARGET_IDLIST (可選):如果快捷方式指向一個 Shell 項(如文件、文件夾、控制面板項等),這個結構會描述其在 Shell 命名空間中的位置。
- LINKINFO (可選):包含有關鏈接目標位置的詳細信息,例如卷序列號、網絡路徑等,用于在目標移動后幫助系統找到它。
- STRING_DATA (可選):包含各種字符串數據,如目標路徑、工作目錄、命令行參數、圖標位置等。
- EXTRA_DATA (可選):一個包含一個或多個額外數據塊的區域,用于存儲其他可選信息。
主要字段和結構詳解
2.1 SHELL_LINK_HEADER
這是每個 .LNK 文件的開頭部分,提供了關于快捷方式的基本屬性和其后續結構的信息。
- HeaderSize (4 字節):頭的大小,通常為 0x0000004C。
- LinkCLSID (16 字節):一個固定的 GUID,用于標識這是一個 Shell Link 文件,通常為 {00021401-0000-0000-C000-000000000046}。
- LinkFlags (4 字節):一個位字段,包含指示文件中是否存在哪些可選結構的標志,以及快捷方式行為的各種標志。重要的標志包括:
- HasLinkTargetIDList:指示是否存在 LINKTARGET_IDLIST 結構。
- HasLinkInfo:指示是否存在 LINKINFO 結構。
- HasName:指示是否存在 STRING_DATA 中的 NAME_STRING。
- HasRelativePath:指示是否存在 STRING_DATA 中的 RELATIVE_PATH。
- HasWorkingDir:指示是否存在 STRING_DATA 中的 WORKING_DIR。
- HasArguments:指示是否存在 STRING_DATA 中的 COMMAND_LINE_ARGUMENTS(這在 ZDI-CAN-25373 漏洞中尤其重要)。
- HasIconLocation:指示是否存在 STRING_DATA 中的 ICON_LOCATION。
- IsUnicode:指示字符串數據是否為 Unicode 格式。
- FileAttributes (4 字節):鏈接目標的原始文件屬性(例如,只讀、隱藏、系統等),與 GetFileAttributes 函數返回的值類似。
- CreationTime (8 字節)