part1
点击上方蓝字关注我们
将二进制空间安全设为"星标⭐️"
第一时间收到文章更新
漏洞介绍
在Windows10和Windows11系统中存在.lnk文件漏洞(漏洞编号:ZDI-CAN-25373), 目前全球至少11个黑客组织已利用该漏洞发起攻击。漏洞源于系统对.lnk文件元数据的处理缺陷, 攻击者可通过修改快捷方式文件的元数据,伪装成无害文件, 实际包含恶意指令。当用户双击或预览文件时,恶意代码会自动执行, 无需额外操作。
黑客利用该漏洞最常见的方式是通过钓鱼邮件和恶意附件等传统手段, 攻击目标中, 70%为情报窃取, 20%瞄准金融数据与账户凭证,剩余10%为破坏性活动或动机不明。微软认为该问题"按设计运行"并拒绝发布修复补丁。
下面介绍一下该漏洞的大致原理。
Lnk文件格式
Windows快捷方式文件,也称为Shell链接文件(.lnk),是一种由Windows操作系统使用的二进制文件类型,用于作为文件、文件夹或应用程序的快捷方式。由于可以在.lnk文件的目标字段(Target field)中嵌入命令行参数,进而在受害者机器上执行代码,这种文件类型被威胁行为者广泛利用。
ShellLinkHeader
每个.lnk文件都以ShellLinkHeader结构开始。在ShellLinkHeader中,有两个在所有.lnk文件中值都相同的必填字段,分别是HeaderSize和LinkCLSID, 这两个字段内容分别如下:
HeaderSize (4 bytes, offset 0x0000) -> 值为:0x0000004C
LinkCLSID (16 bytes, offset 0x0004) -> 值为:00021401-0000-0000- C000-000000000046
这两个字段可以作为“魔术字节”用来判断某个文件是否为.lnk文件。如下图:
LinkFlags
在HeaderSize和LinkCLSID之后出现的是LinkFlags结构。该结构包含一些标志,用于指定.lnk文件中还包含哪些其他结构。其中特别重要的是HasArguments标志。当该标志被设置时,.lnk文件将包含一个COMMAND_LINE_ARGUMENTS结构,如下图:
作为.lnk文件二进制格式的一部分,可以向其目标传递额外的COMMAND_LINE_ARGUMENTS。在恶意.lnk文件中,这些可能是用于通过cmd.exe、powershell.exe或其他LOLbin下载并安装恶意载荷的命令行参数。这种方式常被威胁行为者滥用,将.lnk文件作为攻击链的一部分,并已在ZDI-CAN-25373的利用中被发现。(关于LOLbin,可参考:https://lolbas-project.github.io/)
LinkTargetIDList
该结构包含.lnk文件的目标,当该结构被使用时,LinkFlags部分中的HasLinkTargetIDList标志将被设置。如下图:
COMMAND_LINE_ARGUMENTS
当LinkFlags结构中的HasArguments标志被设置时,COMMAND_LINE_ARGUMENTS结构将存在。该结构存储将在快捷方式激活时传递给指定目标的命令行参数。这种方式常用于基于.lnk文件的攻击中实现代码执行。如下图:
ICON_LOCATION
威胁行为者还常常滥用ICON_LOCATION结构,以控制.lnk文件显示的图标,如下图:
在利用.lnk文件的攻击活动中,威胁行为者通常会更改图标,以混淆并诱使受害者执行该快捷方式。由于Windows始终隐藏.lnk扩展名的显示,威胁行为者经常添加伪装的扩展名(如.pdf.lnk),并配上匹配的图标,以进一步欺骗用户。.lnk文件的图标通常左下角会有一个箭头标志。
漏洞利用
为了利用漏洞ZDI-CAN-25373,威胁行为者精心构造了.lnk文件,并在COMMAND_LINE_ARGUMENTS结构中填充了空白字符,如下表:
x20 | |
在一些黑客组织中,通常倾向于使用体积较大的.lnk文件, 这些文件中填充了大量空白字符和无意义内容,以进一步绕过检测。
ZDI-CAN-25373是一个用户界面(UI)关键信息误导(CWE-451)的典型案例。这意味着Windows用户界面未能向用户展示关键性信息。通过利用ZDI-CAN-25373,攻击者可以阻止终端用户查看评估该文件风险所需的关键信息(即将被执行的命令)。
检测规则
以下是检测利用漏洞ZDI-CAN-25373文件的Yara规则:
rule ZTH_LNK_EXPLOIT_A{ meta: author = "Peter Girnus" description = "This YARA file detects padded LNK files designed to exploit ZDI-CAN-25373." reference = "https://www.trendmicro.com/en_us/research/25/c/windows-shortcut-zero-day-exploit.html" target_entity = "file" strings: $magic = {4C 00000001140200} $spoof_a = {2000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002000200020002000} $spoof_b = {0900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900090009000900} $spoof_c = {0A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 000A 00} $spoof_d = {0D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 000D 00} $spoof_e = {1100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100} $spoof_f = {1200120012001200120012001200120012001200120012001200120012001200120012001200120012001200120012001200120012001200120012001200120012001200120012001200120012001200} $spoof_g = {1300130013001300130013001300130013001300130013001300130013001300130013001300130013001300130013001300130013001300130013001300130013001300130013001300130013001300} $spoof_h = {0D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 000D 000A 00} condition: $magic at 0x00and ($spoof_a or $spoof_b or $spoof_c or $spoof_d or $spoof_e or $spoof_f or $spoof_g or $spoof_h)}
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...