|
https://www.splunk.com/en_us/blog/security/lnk-phishing-analysis-simulation.html
LNK 文件是许多网络钓鱼活动的常见起点,攻击者滥用 LNK 文件的独特属性来欺骗用户并规避检测和预防对策,使其成为危害系统和网络的有力工具。
在本博客中,我们将深入分析最近的 LNK 网络钓鱼活动,了解攻击者所采用的策略、技术和程序 (TTP),除此之外,还将介绍用于模拟这些网络钓鱼活动的工具和技术,帮助防御者测试对恶意 LNK 的防御能力。
在文末将提供与最近活动相关的 IOC,并给出 LNK 文件的相关 Splunk 检测。
读完本文后:
- 对基于 LNK 的网络钓鱼活动的情况获得宝贵经验;
- 配备必要的知识和工具来加强对这些攻击的防御;
首先让我们了解什么是 LNK 文件以及它们如何滥用用于网络钓鱼。
一、什么是 LNK 文件
LNK 文件是 Windows 中使用的一种快捷方式文件,用于创建文件、文件夹、应用程序和网站的便捷方式。
当用户在 Windows 资源管理器或桌面上创建文件、文件夹或应用程序的快捷方式时,通常会自动创建这些文件。
LNK 文件显示为带有箭头的小图标,当用户右键单击 LNK 文件并选择属性时,可以查看和修改属性,例如:
- 目标文件或文件夹;
- 工作目录;
- Icon 图标;
- 命令行参数;
除了这些属性外,LNK 文件还包含补充信息,可以利用此信息来获取威胁情报,这包括:
- 构建 LNK 的机器标识符;
- 文件夹 ID;
- 卷标识符;
- 驱动类型;
- 驱动器序列号;
- 卷标签;
- GUID;
有趣的是,在 Windows 中,即使已将 Windows 配置为在文件夹选项设置中显示文件扩展名,LNK 文件扩展名也不是直接可见的。用户可能无法轻易识别 LNK 文件,除非熟悉其外在表现形式或使用命令行查询。
二、利用 LNK 进行网络钓鱼
LNK 文件的特性使其成为网络钓鱼活动的有力工具,以下是一些在网络钓鱼活动中利用 LNK 文件:
- Qakbot;
- 各中 Trojan Stealer 变种,例如 Rhadamanthys 和 Redline Stealer;
- Remcos 和 ROKRAT 等 RAT;
- 像 Amadey、DarkGate、DbatLoader 和 GuLoader 这类加载器;
这些欺骗性快捷方式通常伪装成合法的可执行文件或 PDF 文件,诱使毫无戒心的用户点击,最终导致其系统或网络受到损害。
三、LNK 网络钓鱼活动和演变
了解了以上这些基本知识后,接下来深入研究我们观察到的几个活动,每个活动都利用 LNK 文件格式作为目标主机或系统上启动感染链的初始触发器。
- 本文将探讨攻击者在这些活动中采用的策略、技术和程序 (TTP);
- 然后将演示防御者如何使用 LECmd 等工具提取 LNK 的内容;
四、LNK 网络钓鱼活动中的 TTP
看看这些活动中攻击者使用的 TTP,这有助于:
4.1 命令和脚本解释器 (T1059.001)
在典型的网络钓鱼活动中,攻击者通过使用恶意 LNK 文件来分发恶意软件,这些 LNK 文件都是经过精心制作的,在与用户交互时提示特定操作。
例如,单击欺骗性 LNK 文件 (通常伪装成标题为 "INVOICE#BUSAPOMKDS03" 的合法文档) 会启动一系列事件。
执行后,LNK 文件会触发一个命令,将恶意 file.bat 从远程域复制到目标主机上的 %USERPROFILE%\Music\file.bat 目录。这种看似无害的行为最终导致恶意软件 (尤其是 AsyncRAT) 的部署,从而可能危及受害者的系统,下图展示了该网络钓鱼方案核心的欺骗性 LNK 文件。
4.2 数据编码 (T1132)
Rhadamanthys 是一种特洛伊木马窃取程序,是在网络钓鱼活动中利用 LNK 文件的恶意软件另一个示例,这些特制的 LNK 文件包含嵌入式 Base64 编码的 PowerShell 脚本,目的在从 C2 下载文件,作为攻击链第一步。
下图说明了这个欺骗性 LNK 文件如何利用记事本图标来诱使用户单击恶意文件,从而发起攻击
解码 Base64 字符串后,显示内容为一个简单的 PowerShell 脚本,该脚本负责下载另一个 PowerShell 脚本,随后使用 Invoke-Expression 执行脚本。
4.3 混淆的文件或信息 (T1027)
LNK 网络钓鱼活动中常用的另一种技术是对其尝试执行的脚本进行混淆,例如 PowerShell 或批处理。
下图中显示了 ducktail LNK 活动使用 ^ 符号作为混淆技术来分解命令或表达式,以降低可读性并逃避安全工具的检测。
使用 CyberChef 可以解码编码字符串以揭示其内容,其中包括从 C2 服务器下载另一个文件的命令,从而扩展其攻击链
4.4 侦察 (TA0043)
外,攻击者还设计了专门用于对目标主机或系统进行侦察的 LNK 文件,执行后会进行收集大量系统信息:
- 处理器规格;
- 计算机名称;
- 当前用户;
- 加载的模块;
- 进程列表;
- 内存使用的情况;
- MAC 地址;
- 注册表大小;
- IP 地址;
此类侦察活动使用攻击者能够为恶意活动收集有价值的情报
侦察操作保存所有收集到的系统信息,将其转换为 JSON 格式,然后将其传输到攻击者控制的 C2 服务器上
该 LNK 文件还包含 PDF 图标,并在其文件结构中嵌入了一个虚拟 PDF 文件,这种策略使用 LNK 文件看起来合法,有效地将其伪装成 PDF 文档,这种欺骗性的外在表现形式增加了目标用户通过单击 LNK 文件无意中损害主机系统的可能性。
4.5 间接命令执行 (T1202)
恶意 LNK 文件可以滥用 Windows 实用程序来规避有关命令行解释器使用的安全限制,这使得攻击者可以绕过普通监视命令执行的检测机制,谨慎地执行恶意命令,这可能会导致未经授权的系统访问或数据泄露。
下图描述了在野外观察到的恶意 LNK 文件,此 LNK 文件使用一种名为 forfiles 的 Living Off the Land 技术来执行 PowerShell 脚本,该脚本会启动 zip 文件格式的恶意有效负载的下载,成功执行后,该有效负载将部署到受感染的主机上,从而让攻击者可进行下一步的恶意活动。
4.6 用户执行:恶意文件 (T1204.002)
在本节中,与之前探讨的四个示例相比,我们分析并逆向了一种更复杂的恶意 LNK 文件,我们将剖析该恶意 LNK 文件在用户执行时所采用的所有策略和技术。
执行时,此 LNK 文件会触发 PowerShell 脚本,脚本使用 ^ 符号和字符串注释等混淆技术,这些策略用于掩盖脚本的功能并规避静态分析期间的检测。
在对脚本进行逆向和反混淆后,我们发现 PowerShell 从 LNK 代码中提取了一系列字节,然后使用 XOR 加密对其进行解密,然后使用解密的数据创建两个文件:
- 其中一个文件是虚拟 DOCX 文件,利用图标伪装成合法文档;
- 另一个是 .CAB 文件,为 "$env:public\UHCYbG.cab",并包含多个恶意文件以延续攻击链;
下图说明了有效负载内的加密数据及其 XOR 解密后的解密形式
接下来,PowerShell 通过执行 expand.exe 来提取 .CAB 文件的内容,expand.exe 是 Windows 操作系统中用于扩展和提取压缩文件的内置命令行工具。
下面是部分反混淆函数与负责提取解密的 .CAB 文件的 LNK PowerShell 脚本的重命名函数的比较
部分反混淆函数
- ##
- function koMIoWakvBvW
- {
- param($FMGlWEFVsTs, $esLEposvvv);
- expand $FMGlWEFVsTs -F:* $esLEposvvv;
- };
复制代码
去混淆和重命名
- function mw_expand_cab_file
- {
- param($param_src_cab_file_path, $param_dest_cab_file_path);
- expand $param_src_cab_file_path -F:* $param_dest_cab_file_path;
- };
复制代码
提取 .CAB 文件后,其中包含几个合并的文件。.LNK PowerShell 脚本将找到 start.vbs 文件并执行,以在受感染的主机上继续进行恶意活动,以下是每个文件及其用途的简要概述:
4.6.1 unzip.exe
这是一个用于以 .zip 文件格式压缩的归档折提取实用程序;
4.6.2 Start.vbs
该 VBScript 将使用 CLSID .COM "ShellWindows" 对象执行 49120862.bat;
4.6.3 49120862.bat
此批处理文件在 HKCU\Software\Microsoft\Windows\CurrentVersion\Run 中添加注册表运行键 svchostno2,并执行其他几个批处理文件:78345839.bat、47835693.bat 和 30440211.bat;
4.6.4 78345839.bat
此批处理文件使用 unzip.exe 从其 C2 服务器 hxxps[:]//goosess[.]com/read/get[.]php 之一下载并提取另一个名为 "di3726.zip" 的 zip 文件,zip 存档提取后,批处理文件将使用以下命令从主机中删除存档文件 del /f /q %~dp0%fn%.zip > null;
4.6.5 47835693.bat
此批处理文件收集、加密系统信息以及用户下载、文档和桌面文件夹中的文件列表,并将其发送到其中一台 C2 服务器,下图描述了相关代码片段
4.6.6 30440211.bat
此批处理文件从其 C2 服务器之一下载、解密并提取另一个 .CAB 文件 hxxp[:]//stuckss[.]com/list[.]php?f=%COMPUTERNAME%[.]txt 然后删除下载的 .CAB 文件。
4.6.7 60712945.bat
此批处理文件执行一个带有两个参数的 PowerShell 脚本,第一个参数是下载加密 RC4 文件的 URL 链接,第二个参数是保存解密内容的文件名。
4.6.8 99548182.bat
该批处理文件触发 PowerShell 脚本,并使用 RC4 加密,对作为参数传递的文件路径通过 HTTP POST 发送到指定的 C2 服务器参数。
4.6.9 30606240.bat
此批处理文件将当前工作目录更改为包含批处理文件的目录,检索在指定的第一个参数中找到的第一项,并将该输出保存到在其第二个参数中指定的文件中。
以下为该恶意 LNK 文件的攻击链
五、模拟钓鱼活动
作为防御者,我们需要能够测试防御,无论是分析、XDR 还是 AV 产品,以确保它们得到正确调整并检测或防止恶意 LNK 使用。
在本节中,我们将分享如何通过三种方式来检测:
- 使用 Atomic Red Team;
- 使用 LNK 生成器;
- 将 CAB 文件嵌入 LNK 中;
5.1 Atomic Red Team
让我们深入了解 Atomic Red Team 并查看 T1547.009 测试编号 2。此特定测试使用 PowerShell 创建 LNK 文件并将其放置在启动目录中,启动后,将生成 cmd.exe。
- $Shell = New-Object -ComObject ("WScript.Shell")
- $ShortCut = $Shell.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\T1547.009.lnk")
- $ShortCut.TargetPath="cmd.exe"
- $ShortCut.WorkingDirectory = "C:\Windows\System32";
- $ShortCut.WindowStyle = 1;
- $ShortCut.Description = "T1547.009.";
- $ShortCut.Save()
复制代码
使用 Invoke-AtomicTest 可以查看正在运行的测试
Invoke-AtomicTest T1547.009 -ShowDetails -TestNumbers 2
接下来,我们可以运行 Atomic
Invoke-AtomicTest T1547.009 - TestNumbers 2
就这么简单,我们已经将 LNK 写入到启动文件夹中,该文件夹将在用户下次登录时运行并启动 cmd.exe。
现在可以全天运行 Atomic Red Team 测试并编写 LNK 并运行它们,但是如果想使用 Atomic Execution Framework 进行更多操作,该怎么办?因此,我们向你提供两个实用程序来帮助测试更有趣的 LNK 行为的防御:
5.2 LNK 生成器
LNK 生成器是一个通过 HTA 文件来简单地创建桌面快捷方式的工具,该程序演示了 Windows 中快捷方式的多功能性,支持从启动命令行到执行脚本等操作。
重点介绍两个功能:
- 打开命令提示符的 CMD 快捷方式;
- 用于下载并执行 MSI 包的 PowerShell 脚本快捷方式;
5.2.1 LNK 生成器工作原理
只需要单击所需的按钮即可在桌面上放置相应的 LNK 文件,然后单击创建的 LNK 来观察其动作,此过程可帮助你了解如何在 Windows 环境中动态创建和使用快捷方式。
可以在 https://github.com/MHaggis/notes/blob/master/utilities/LNKGEN.hta 检索 LNK 生成器实用程序。
运行 HTA 文件后如下图所示
现在只演示其中两项
首先,单击 Create CMD Shortcut 将 LNK 写入桌面,然后单击 LNK
接下来,双击 CmdShortcut 文件,将出现一个新的命令提示符窗口。右键单击并打开 LNK 的属性,你将看到目标是 cmd.exe,如预期的那样。
现在,让我们看看 "Create PowerShell Script Shortcut"。此测试将创建 LNK,目标将是运行 PowerShell 编码命令,该命令从 Atomic Red Team 下载 MSI 包。
右键单击 LNK 并查看目标
可以在这里看到目标包含 PowerShell 编码命令,下面,在 Notepad++ 中,可以看到完整的命令和非 Base64 版本。然后,双击 LNK,MSI 将出现并运行。
5.3 LNK 文件中嵌入 CAB 文件
我们将分享另一个 Atomic 测试模拟了恶意 LNK 文件的行为,该文件将加密的 CAB 文件与虚拟文档结合在一起。
六、IOCs
Hash
- e86017b846165690bcaf38242e09df96651aec60e9c2dae4bf50de8ace77f029 - AsyncRat LNK
- 5fb0518c2ced3e2556da039dae3cfe846cbf667ef2556c6d75b1487da75ef15f - DuckTail LNK
- 375ac09d5f44849e9c888e86adc50069cdb019e3de3216264f61868bef12ca4d - Rhadamathys LNK
- decbd662ecab295cb2c060232a6de8218843d671b7cb628aaf769ba4bcdf126f - Rhadamathys LNK
- 2e7aa640b2da6d9350afba1b8ad0b65bc85ac335dde42f08cd540da8580e2a78 - Remcos LNK
- 4613810c0daf6abb2449de0816ef6c868620bc66318cc927d2ce06752a5fc19e - Remcos LNK
- 27cd090cf83877750416d37dc6ddd8ff319b4854414e4275d67f96652376bcf0 - FAT LNK
- 9566099319b9649f49501121f789e7e387e2dd49750d348d5f914d79252c4353 - Forfiles LNK
七、安全内容 (Splunk 检测)
以下是在测试这些恶意 LNK 文件期间触发的 Splunk 检测列表。
7.1 用于持久性的注册表项
此检测会查找对注册表项进行的修改或更改,这些修改或更改可能会在系统启动期间启动应用程序或服务。
通过监视和检测这些注册表项中的修改,可以识别可能表明恶意活动的可疑或未经授权的更改。这种主动方法通过及时识别和减轻旨在在启动过程中获得持久性或执行恶意操作的潜在威胁,有助于保护系统的完整性和安全性。
- tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime FROM datamodel=Endpoint.Registry where (Registry.registry_path=*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce
- OR Registry.registry_path=*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartupApproved\\Run
- OR Registry.registry_path= "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User
- Shell Folders\\*" OR Registry.registry_path= "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell
- Folders\\*" OR Registry.registry_path=*\\currentversion\\run* OR Registry.registry_path=*\\currentVersion\\Windows\\Appinit_Dlls*
- OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\Shell* OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\Notify*
- OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\Userinit* OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\VmApplet*
- OR Registry.registry_path=*\\currentversion\\policies\\explorer\\run* OR Registry.registry_path=*\\currentversion\\runservices*
- OR Registry.registry_path=HKLM\\SOFTWARE\\Microsoft\\Netsh\\* OR Registry.registry_path=
- "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Common
- Startup" OR Registry.registry_path= *\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SharedTaskScheduler
- OR Registry.registry_path= *\\Classes\\htmlfile\\shell\\open\\command OR (Registry.registry_path="*Microsoft\\Windows
- NT\\CurrentVersion\\Image File Execution Options*" AND Registry.registry_key_name=Debugger)
- OR (Registry.registry_path="*\\CurrentControlSet\\Control\\Lsa" AND Registry.registry_key_name="Security
- Packages") OR (Registry.registry_path="*\\CurrentControlSet\\Control\\Lsa\\OSConfig"
- AND Registry.registry_key_name="Security Packages") OR (Registry.registry_path="*\\Microsoft\\Windows
- NT\\CurrentVersion\\SilentProcessExit\\*") OR (Registry.registry_path="*currentVersion\\Windows"
- AND Registry.registry_key_name="Load") OR (Registry.registry_path="*\\CurrentVersion"
- AND Registry.registry_key_name="Svchost") OR (Registry.registry_path="*\\CurrentControlSet\Control\Session
- Manager"AND Registry.registry_key_name="BootExecute") OR (Registry.registry_path="*\\Software\\Run"
- AND Registry.registry_key_name="auto_update")) by Registry.dest Registry.user Registry.registry_path
- Registry.registry_value_name Registry.registry_value_data Registry.process_guid
- Registry.registry_key_name | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `registry_keys_used_for_persistence_filter`
复制代码
7.2 PowerShell 无文件脚本包含 Base64 编码内容
以下检测利用 PowerShell 脚本块日志记录 (EventCode=4104) 来识别可疑的 PowerShell 执行。脚本块日志记录捕获发送到 PowerShell 的命令,即要执行的完整命令。启用后,日志将输出到 Windows 事件日志。根据数量,您可以选择仅在关键端点或所有端点上启用此功能。
此检测识别脚本块内的 FromBase64String。典型的恶意实例将包含额外的代码,例如:
- [Byte[]]$var_code = [System.Convert]::FromBase64String(38uqIyMjQ6rG....
复制代码
在分类期间,使用 EDR 产品或 4688 事件审查并行流程,了解围绕此活动的事件时间表非常重要,查看整个记录的 PowerShell 脚本块。
- `powershell` EventCode=4104 ScriptBlockText = "*frombase64string*" OR ScriptBlockText
- = "*gnirtS46esaBmorF*" | stats count min(_time) as firstTime max(_time) as lastTime
- by EventCode ScriptBlockText Computer UserID | rename Computer as dest |rename UserID as user | `security_content_ctime(firstTime)`
- | `security_content_ctime(lastTime)` | `powershell_fileless_script_contains_base64_encoded_content_filter`
复制代码
7.3 使用 WMI 类进行侦察
以下检测通过事件代码 4104 识别可疑的 PowerShell,其中 WMI 正在执行事件查询以查找正在运行的进程或正在运行的服务。
这种技术常见于攻击者识别受感染机器上的服务和系统信息的情况,在分类期间,审查同一时间范围内的并行流程,查看完整的脚本块以识别其他相关工件。
- `powershell` EventCode=4104 (ScriptBlockText= "*SELECT*" OR ScriptBlockText="*Get-WmiObject*") AND ScriptBlockText IN ( "*Win32_Bios*", "*Win32_OperatingSystem*", "*Win32_Processor*",
- "*Win32_ComputerSystem*", "*Win32_PnPEntity*", "*Win32_ShadowCopy*", "*Win32_DiskDrive*", "*Win32_PhysicalMemory*", "*Win32_Registry*", "*Win32_LogicalDisk*", "*Win32_NetworkAdapterConfiguration*")
- | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText
- Computer UserID | rename Computer as dest | rename UserID as user| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
复制代码
7.4 在可疑位置创建 LNK 文件
此检测可识别进程从潜在恶意位置启动 LNK 文件的实例,例如:
- C:\Users\*;
- *\Local\Temp\*;
这些位置经常成为攻击者使用鱼叉式网络钓鱼工具执行恶意快捷方式的目标。
- | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
- as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_name="*.lnk"
- AND (Filesystem.file_path="C:\\Users\\*" OR Filesystem.file_path="*\\Temp\\*") by
- _time span=1h Filesystem.process_guid Filesystem.file_name Filesystem.file_path
- Filesystem.file_hash Filesystem.user | `drop_dm_object_name(Filesystem)` | rename
- process_guid as lnk_guid | join lnk_guid, _time [| tstats `security_content_summariesonly`
- count FROM datamodel=Endpoint.Processes where Processes.process_name=* by _time
- span=1h Processes.parent_process_guid Processes.process_id Processes.process_name
- Processes.dest Processes.process_path Processes.process | `drop_dm_object_name(Processes)`
- | rename parent_process_guid as lnk_guid | fields _time lnk_guid process_id dest
- process_name process_path process] | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`
- | table firstTime, lastTime, lnk_guid, process_id, user, dest, file_name, file_path,
- process_name, process, process_path, file_hash
复制代码
八、总结
这篇博文深入分析了 LNK 文件及其在网络钓鱼活动中滥用的可能性,它检查了几个使用恶意 LNK 文件的活跃活动,详细介绍了攻击者使用的策略、技术和程序。还介绍了两个实用程序,可帮助防御者测试对恶意 LNK 使用的防御,并提供在测试这些恶意文件期间触发的 Splunk 检测列表。
通过提供有关基于 LNK 的网络钓鱼活动的宝贵经验,该博客为读者提供了加强防御这些攻击所需的知识和工具。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|