本文作者:公众号-掌控安全EDU
LNK文件说明
Windows使用LNK文件(也称为外壳链接或快捷方式)来创建指向不同位置的文件、文件夹或应用程序的快速访问链接。 图1显示了LNK文件图标的示例,人们通常将其放置在桌面上。 由于左下角的小箭头,这些图标很容易识别。

图 1. Windows LNK 文件图标示例。
LNK 文件允许用户启动程序而无需查找可执行文件,该可执行文件通常深藏在如 C:\Program Files*[程序名称]**[xxx]*.exe 之类的目录结构中。LNK 文件也可以指向非可执行文件,如 PDF 文档或 JPEG 图像,双击 LNK 文件等同于双击实际文件。
尽管 LNK 文件具有在命令行工具中可见的 .lnk 文件扩展名,但 Windows 在桌面或文件资源管理器中不会显示该扩展名。例如,一个名为 Invoice.lnk 的 LNK 文件在界面上只显示为 Invoice。
用户可以通过 Windows 中的不同方法创建 LNK 文件。最简单的方法如下:
- • 在文件资源管理器中,右键点击项目以打开菜单
- • 如果使用的是 Windows 11,请选择“显示更多选项”
- • 选择“创建快捷方式”
这将弹出一个“创建快捷方式”窗口,用于选择目标项目的位置。
这样会创建一个包含原始文件位置的 LNK 文件。或者,用户也可以复制一个文件,然后使用“粘贴快捷方式”选项粘贴一个指向该项目的 LNK 文件。
用户也可以右键点击项目,使用“发送到”选项,并选择“桌面(创建快捷方式)”来创建一个 LNK 文件。
最后,用户还可以在文件资源管理器的空白区域右键点击,选择“新建”,然后选择“快捷方式”。这将弹出一个“创建快捷方式”窗口,用于选择目标项目的位置。
图 2 展示了默认 Windows 安装中 Microsoft Edge 的 LNK 文件示例。

图 2. Microsoft Edge 的 LNK 文件。
图 2 展示了 LNK 文件的常见属性和字段。如图所示,最重要的字段是“目标”字段,其值设置为:
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
因此,该 LNK 文件允许用户启动 Microsoft Edge。
虽然 LNK 文件乍一看似乎很简单,但其灵活性也使其容易被滥用于多种方式。我们接下来来看图 3 中的一个恶意样本。

图 3. 恶意 LNK 样本的属性。
LNK 格式也可以使用命令行参数来执行目标(因此被称为 shell 链接)。如图 3 中“目标”字段所示,攻击者也可以利用这些命令行参数来下载并执行恶意代码。
此外,LNK 文件的图标是可自定义的,这使得攻击者可以通过伪装图标诱使用户点击恶意 LNK 文件。在图 3 中,尽管该 LNK 实际上指向一个批处理文件,但其图标却显示为一个文本文件。
名为 PASSWORD_HERE.txt.lnk 的文件在桌面或文件资源管理器中显示为 PASSWORD_HERE.txt。结合文本文件的图标,这可能会让用户误以为这是一个包含密码的真实文本文件,从而双击打开。
LNK 恶意软件的重要结构
LNK 文件采用二进制文件格式,图 4 展示了其结构。

图 4. LNK 恶意软件的结构。
在图 4 中,可选字段用方括号括起来。除 EXTRA_DATA 外,每个结构都以其大小字段开始,后跟具体内容。STRING_DATA 字段由五个子字段组成,其中两个是 LNK 恶意软件的关键字段。
值得注意的是,一个有效的 LNK 文件唯一必须包含的字段是其头部。直观来看,仅包含头部的 LNK 文件通常是无害的,因为它既不能执行任何项目,也不能解析任何路径。根据我们对 30,000 个恶意 LNK 样本的实证分析,仅含头部的 LNK 文件很可能是良性的。
在 LNK 文件中,图 4 中有三个字段与目标解析和执行直接相关,它们在图中以绿色背景标出:
- • LINKTARGET_IDLIST:一个 shell 项的列表(参见附加资源),用于指定目标。
- • RELATIVE_PATH:目标相对于 LNK 文件位置的相对路径。
- • COMMAND_LINE_ARGUMENTS:传递给目标的命令行参数。
我们对 30,000 个恶意 LNK 文件的分析表明,大多数恶意 LNK 文件都可以通过检查这三个字段来识别。图 5 展示了恶意 LNK 文件中各种结构的出现比例。

图 5. 来自 30,000 个恶意 LNK 文件的三个关键结构指示字段的分布情况。
如图 5 所示,LINKTARGET_IDLIST 以 LTList 表示,几乎在所有恶意 LNK 文件中都存在,出现率为 99.53%。这是定位目标的主要字段。
RELATIVE_PATH 在图 5 中以 RP 表示,也很常见,在 75.49% 的恶意 LNK 文件中出现。RELATIVE_PATH 在 LINKTARGET_IDLIST 缺失或无效时用于定位目标。
COMMAND_LINE_ARGUMENTS 在图中以 CLA 表示,相对较少见,仅在 35.52% 的恶意 LNK 文件中出现。该字段可用于传递参数并携带恶意脚本。图 5 显示,至少包含这三个字段之一的恶意 LNK 文件比例非常高。
为了更好地理解恶意 LNK 文件中的这三个字段,以下章节将对它们进行详细分析。
LINKTARGET_IDLIST
LINKTARGET_IDLIST 字段具有如下结构:
| Field Size | Shell Item [0] | Shell Item [1] | Shell Item [2] | . . . |
LINKTARGET_IDLIST 用于指定目标的位置(即 LNK 文件所指向的项目)。顾名思义,该字段的结构是一个 Windows shell 项的列表。图 6 展示了一个指向 Microsoft Edge 的 LNK 文件的 LINKTARGET_IDLIST 结构。
<

6万+

被折叠的 条评论
为什么被折叠?



