XLL 钓鱼攻击编写过程介绍

admin 2022年5月23日08:44:02评论28 views字数 4905阅读16分21秒阅读模式

写在前面:这是在知识星球先进攻防理念讨论组看到的文章,介绍了一种网络钓鱼的方法,上周发布,比较新。记述了黑客攻击的尝试过程,很费脑,很有趣,很迷人,也很危险。


介绍

       随着微软最近宣布阻止来自互联网(电子邮件和网页下载)文档中的宏,攻击者开始积极探索其他方法,实现用户驱动访问(user driven access,UDA)。在寻找可行的网络钓鱼方法时,有几个因素需要考虑和平衡:

  1. 复杂性—用户端需要的步骤越多,我们成功的可能性就越小。

  2. 实操性—大多数受害机器都容易受到你的攻击吗?攻击目标的架构是特定的吗?是否需要安装某些软件?

  3. 交付—在目标网络上是否存在网络/策略缓解措施,从而限制您投送恶意文档?

  4. 防御强制运行应用程序白名单吗?

  5. 检测—客户端运行的是什么类型的AV/EDR ?

       这些是主要问题,当然还有更多。当你意识到这些因素相互交错时,事情变得更加复杂;例如,如果客户端有一个禁止下载可执行文件或DLL文件的web代理,你可能需要将你的有效载荷进行“打包”(ZIP, ISO等)。当存在检测手段时,这样做可能会带来进一步的问题。更强大的防御需要更复杂的技术组合来击破。

       本文将假设一个对象;该组织采用了几种防御措施,包括电子邮件过滤、禁止下载某些文件类型、应用程序白名单以及安装Microsoft Defender 。

       真实的组织可能什么都不用,或者更多的防御措施,都会简化或复杂化本研究中总结的技术。了解自己的目标。


什么是XLL?

       XLL就是DLL,专门为Microsoft Excel开发。对于未经训练的人来说,它们看起来很像普通的Excel文档。

XLL 钓鱼攻击编写过程介绍

       XLL为用户驱动访问(UDA)提供了一个非常有吸引力的选择,因为它们是由Microsoft Excel执行的,这是一个在客户网络中非常常见的软件,我们的有效载荷几乎肯定会绕过应用程序白名单规则,因为一个受信任的应用程序(Excel)正在执行它。XLL可以用C、C++或C#编写,这些语言提供了比VBA宏更多的灵活性和功能(及合理性),这进一步使它们成为理想的选择。

       当然,XLL的缺点是很少有合法的用途,所以组织应该非常容易检查,禁止通过电子邮件和网络下载该扩展名文件。遗憾的是,许多组织已经落后了时代很多年,因此XLL在相当时间内仍然是一种可行的网络钓鱼方法。

       有一系列不同的事件可用于执行XLL中的代码,其中最值得注意的是xlAutoOpen。完整的事件名单包括:

XLL 钓鱼攻击编写过程介绍

       一旦双击XLL,用户可以看到如下欢迎界面:

XLL 钓鱼攻击编写过程介绍

       这个对话框是用户和代码执行之间的唯一障碍;使用一定技巧的社会工程,代码执行几乎是可以保证的。

       必须记住的是,作为可执行程序,XLL和架构相关。这意味着你必须知道你的目标;目标组织使用的Microsoft Office/Excel版本(通常)将决定您需要如何打造载荷。


       在用户驱动访问(UDA)的背景下,需要仔细考虑有效载荷的投送。我们主要关注两种方法:

  1. 电子邮件附件

  2. Web投送


电子邮件附件

       通过附件或包括一个可以下载文件的网站链接,电子邮件是用户驱动访问流程的关键部分。多年来,许多组织(和电子邮件厂商)已经很有经验并实施了保护用户和组织免受恶意附件伤害的策略。虽然特点各有不同,但组织现在有能力:

  1. 阻止执行附件(EXE, DLL, XLL, MZ header)

  2. 阻止打包封装方法,如ISO/IMG,可能包含可执行内容

  3. 检查zip文件并阻止那些包含可执行内容的文件

  4. 阻止密码保护的zip文件

  5. 其他方法

       出于本文的目的,假设目标组织具有健壮的电子邮件附件检查规则,阻止发送XLL附件。我们将重点着眼于web方法。


Web投送

       电子邮件仍将用于这种攻击方式,但它将用来发送一个网站链接,而不是发送附件。Web代理规则和允许文件下载类型的网络缓解措施可能与针对电子邮件附件实施的规则不同。假设组织阻止从web下载可执行文件(MZ header)。在这种情况下,需要探索打包的方法。

       前提是,我们能够将可执行文件插入到另一种文件类型中,并使其绕过组织的策略。这里主要考虑的是对文件类型的原生支持;例如,如果没有安装第三方软件,Windows就无法打开7Z文件,所以它们不是一个好的选择。像ZIP、ISO和IMG这样的格式很有吸引力,因为它们得到了Windows的原生支持,它们为受害者增加了很少的额外步骤。

       不幸的是,该组织禁止从网上下载ISO和IMG文件;此外,由于他们采用了数据防泄漏(DLP),用户无法挂载外部存储设备,ISO和IMG需要排除。

       幸运的是,尽管该组织禁止下载带MZ header的文件,但它允许下载包含可执行文件的zip文件。这些zip文件被主动扫描以防止恶意软件,包括提示用户输入受密码保护的zip文件的密码;然而,因为可执行文件是压缩的,所以它不会被拒绝MZ文件的规则阻止。


Zip文件和执行

       选择Zip文件来打包XLL载荷,因为:

  1. 它们与Windows天生兼容

  2. 这些文件可以由该组织从互联网上下载

  3. 它们几乎不会给攻击增加额外的复杂性

       非常方便,在Windows上双击ZIP文件将在文件资源管理器中打开该ZIP文件:

XLL 钓鱼攻击编写过程介绍

       不太方便的是,从压缩位置双击XLL文件触发Windows Defender;即使使用不包含任何恶意代码的edparcell的股票项目。

XLL 钓鱼攻击编写过程介绍

       查看Windows Defender警报,我们看到它只是一个通用的“Wacatac”警报:

XLL 钓鱼攻击编写过程介绍

       然而,有一些奇怪的事情;它识别为恶意的文件在c:usersuserAppdataLocal TempTemp1_ZippedXLL.zip中,而不是c:usersuserusersDownloadsZippedXLL。在ProcessExplorer中查看Excel实例,可以发现Excel实际上是在appdatalocaltemp中运行XLL,而不是在ZIP文件中运行:

XLL 钓鱼攻击编写过程介绍

       这个问题似乎是与ZIP文件有关,而不是XLL文件。使用记事本从zip文件中打开TXT文件也会导致TXT文件被复制到appdatalocaltemp并从那里打开。虽然从这个位置打开一个文本文件没有问题,但Microsoft Defender似乎认为任何在这个位置执行的实际代码都是恶意的。

       如果用户直接从ZIP文件中提取XLL,然后运行它,它将不会出现任何问题;然而,我们无法保证用户会这样做,如果他们不提取,我们真的不能在弹出AV/EDR上冒险。此外,双击ZIP然后双击XLL要简单得多,而且受害者更容易完成这些简单的操作,而不是麻烦地提取ZIP。

       这个问题让我开始考虑使用XLL之外的有效载荷类型;我开始探索VSTO,这是Visual Studio的Office模板。

       VSTO最终调用一个DLL,它既可以利用本地的. Xlsx,启动任何程序,也可以http/https由. Xlsx远程下载和运行。本地选项没有真正的优势(实际上有一些缺点,因为有更多的文件与VSTO攻击相关联),而远程选项不幸地需要一个代码签名证书,或者远程位置是一个可信的网络。由于没有有效的代码签名证书,VSTO不能帮助我们实现XLL有效载荷所遇到的任何问题。

       我们似乎真的被逼到墙角了。运行XLL本身是可以的,但是由于组织安全策略,XLL不能通过电子邮件附件或网络下载的方式自行发送给受害者。XLL需要封装在别的文件包中,但是由于DLP格式,ISO、IMG和VHD等是不可用的。受害者需要能够在没有任何第三方软件的情况下本机打开软件包容器,这实际上只能选择ZIP;然而,正如所讨论的,从一个压缩文件夹运行XLL会导致它被复制并从appdatalocaltemp运行,这会触发AV。

       我花了很多时间进行头脑风暴和测试,进入VSTO死胡同,探索所有可能的选择,直到我最终决定尝试一些可能有效的笨方法。

       这次,我生成了一个文件夹,把XLL文件放进去,然后压缩:

XLL 钓鱼攻击编写过程介绍

       点击这个文件夹就可以看到XLL文件

XLL 钓鱼攻击编写过程介绍

       双击XLL会显示来自Excel的加载项提示。注意,XLL仍然被复制到appdatalocaltemp,然而,由于我们创建了额外的文件夹,有一个额外的层:

XLL 钓鱼攻击编写过程介绍

       点击Enable可以执行我们的代码,而没有触发Microsoft Defender:

XLL 钓鱼攻击编写过程介绍

       很棒!代码执行了,然后呢?

 

间谍情报技术

       让受害者下载并执行XLL的假冒邮件标题,根据组织和投掷方法的不同会有很大的不同;主题可能包括员工工资数据、基于技能水平的薪酬计算器、项目信息、活动参与者名册等。不管用什么诱饵,如果我们真的给受害者提供了他们被承诺的东西我们的攻击会更有效。如果没有通过,受害者可能会产生怀疑,并将文档报告给他们的安全团队,这可能会迅速暴露攻击者并限制对目标系统的访问。

       XLL本身会在我们的代码执行完毕后留下一个空白的Excel窗口;如果我们能提供受害人要找的Excel电子表格就更好了。

       我们可以将XLSX作为字节数组嵌入到XLL中;当XLL执行时,它将把XLSX放到XLL旁边,然后再打开XLL。我们将把XLSX命名为与XLL相同的名称,唯一的区别是扩展名。

       由于我们的XLL是用C编写的,我们可以引入我之前在C中编写的载荷功能中的一些功能,即自我删除(Self-Deletion)。结合使用这两种技术将导致从磁盘中删除XLL,并将同名的XLSX放置到它所在的位置。对于不仔细的人来说,XLSX似乎一直都在那里。

       不幸的是,XLL被删除和XLSX被放置的位置是appdata templocal folder文件夹,而不是原来的ZIP;为了解决这个问题,我们可以创建一个单独包含XLSX的第二个ZIP,并将其读入XLL中的一个字节数组。在执行除了上述的动作,XLL在c:usersvictimDownloads尝试和定位原来的ZIP文件,把第二个包含XLSX的ZIP放到这里之前删除原始的ZIP文件。当然,如果用户将原始ZIP文件保存在不同的位置或不同的名称下,这可能会失败,但是在许多/大多数情况下,它应该自动放到用户的下载文件夹中。


XLL 钓鱼攻击编写过程介绍


       这个截图显示了在下面的文件夹,appdata localtemp中创建的临时文件夹,

其中包含XLL和被放置的XLSX,而上面文件夹显示了打开XLL的原始文件资源管理器窗口。注意,在下面的窗格中,XLL的大小为0。这是因为它在执行过程中删除了自己,然而,直到顶部窗格关闭,XLL文件不会完全从appdatalocaltemp位置消失。即使受害者再次单击XLL,它现在不会有任何反应,并不真正存在。

       类似地,一旦受害者在文件资源管理器中退出打开的ZIP文件(通过关闭它或导航到另一个文件夹),如果他们再次点击spreadsheet.zip,他们会发现测试文件夹包含importantdoc.xlsx;所以XLL在磁盘上的两个位置都被无害的XLSX取代了。


结论

       随着Office 宏的演示接近尾声,XLL为网络钓鱼活动提供了一个诱人的选择。通过一些创造性,它们可以与其他技术一起使用,以绕过组织和安全团队实现的许多防御层。感谢您的阅读,我希望您学到一些有用的东西!

摘自:

https://github.com/Octoberfest7/XLL_Phishing

参考:

https://docs.microsoft.com/en-us/office/client-developer/excel/add-in-manager-and-xll-interface-functions

https://docs.microsoft.com/en-us/office/client-developer/excel/welcome-to-the-excel-software-development-kit

(完)


原文始发于微信公众号(安全行者老霍):XLL 钓鱼攻击编写过程介绍

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月23日08:44:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   XLL 钓鱼攻击编写过程介绍http://cn-sec.com/archives/1041044.html

发表评论

匿名网友 填写信息