查看原文
其他

九维团队-青队(处置)| 恶意样本分析之恶意软件的功能和持久化(七)

pwnda 安恒信息安全服务 2022-09-06


特别说明及声明

  1. 本文原文为K A, Monnappa. 2018年发表的《Learning Malware Analysis》,本文的相关内容均为笔者对相关内容的翻译及实践记录,仅供各位学术交流使用。另出于易读性考虑,对部分字句有所删改。


  2. 如各位需要引用,请做原文引用,格式如下所示:
    [序号]K A, Monnappa. LearningMalware Analysis[M]. 2018.06. Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK.

  3. 因文章整体内容较长,完整内容将会在本公众号拆分为多篇内容分别发出。本文为该系列的第七篇,往期内容请参见:

    恶意样本分析之恶意软件的功能和持久化(一)

    恶意样本分析之恶意软件的功能和持久化(二)

    恶意样本分析之恶意软件的功能和持久化(三)

    恶意样本分析之恶意软件的功能和持久化(四)

    恶意样本分析之恶意软件的功能和持久化(五)

    恶意样本分析之恶意软件的功能和持久化(六)




2.8 DLL搜索顺序劫持




当一个进程被执行时,其相关的DLL被加载到进程内存中(通过导入表或作为进程调用LoadLibrary() API的结果)。Windows操作系统在预定义的位置上以特定的顺序搜索要加载的DLL。搜索顺序在MSDN这里有记录:

https://docs.microsoft.com/zh-cn/windows/win32/dlls/dynamic-link-library-search-order?redirectedfrom=MSDN
补充参考链接:https://docs.microsoft.com/en-us/archive/msdn-magazine/2003/october/basic-instincts-deploying-assemblies#S5

*左右滑动查看更多



简而言之,如果任何DLL必须被加载,操作系统首先检查DLL是否已经在内存中加载。如果是,它就会使用加载的DLL,反之,就会检查该DLL是否被定义在KnownDLLs注册表键

(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs)。


这里列出的DLLs是系统DLLs(位于system32目录下),它们使用Windows文件保护,以确保这些DLLs不会被删除或更新,除非被操作系统更新。


如果要加载的DLL在KnownDLLs列表中,那么该DLL总是从System32目录中加载。如果不满足这些条件,那么操作系统会按顺序在以下位置寻找DLL。


1.启动该应用程序的目录。

2.系统目录(C:\Windows\System32)。

3.16位系统目录(C:\Windows\System)。

4.Windows目录(C:\Windows)。

5.当前目录。

6.在PATH变量中定义的目录。


攻击者可以利用操作系统搜索DLL的方式来提升权限并实现持久性。参考Operation Groundbait中使用的恶意软件(Prikormka dropper)。网址如下:

http://www.welivesecurity.com/wp-content/uploads/2016/05/Operation-Groundbait.pdf

*左右滑动查看更多


该恶意软件在执行时,会在Windows目录(C:\Windows)中投放一个名为samlib.dll的恶意DLL,如下所示:

[CreateFile] toor.exe:4068 > %WinDir%\samlib.dll

*左右滑动查看更多


在一个干净的操作系统中,一个具有相同名称的DLL(samlib.dll)驻留在C:\Windows\System32目录中,这个干净的DLL被驻留在C:\Windows目录中的explorer.exe加载。这个干净的DLL也被驻扎在system32目录下的其他几个进程加载,如图所示:


由于恶意DLL与explorer.exe被丢在同一目录下(即C:\Windows),因此,当系统重新启动时,恶意的samlib.dll被explorer.exe从C:\Windows目录中加载,而不是从system32目录中加载合法的DLL。


下面的截图是在重新启动受感染的系统后截取的,显示了由于DLL搜索顺序被劫持而被explorer.exe加载的恶意DLL:


DLL搜索顺序劫持技术使取证分析变得更加困难,并逃避了传统的防御措施。为了检测这种攻击,我们应该考虑监控DLLs的创建、重命名、替换或删除,并寻找任何由进程从异常路径加载的模块(DLLs)。




2.9 COM劫持




组件对象模型(COM)是一个系统,它允许软件组件之间进行交互和通信,即使它们对对方的代码一无所知。参考链接:

https://msdn.microsoft.com/en-us/library/ms694363(v=vs.85).aspx中文网址:https://docs.microsoft.com/zh-cn/windows/win32/com/the-component-object-model?redirectedfrom=MSDN

*左右滑动查看更多


软件组件通过使用COM对象进行交互,这些对象可以在单个进程、其他进程或远程计算机上。COM是作为一个客户/服务器框架来实现的。一个COM客户端是一个使用来自COM服务器(COM对象)的服务的程序,而COM服务器是一个向COM客户端提供服务的对象。


COM服务器在DLL(称为进程内服务器)或EXE(称为进程外服务器)中实现一个由各种方法(功能)组成的接口。一个COM客户可以利用COM服务器提供的服务,方法是创建一个COM对象的实例,获取接口的指针,并调用其接口中实现的方法。


Windows操作系统提供了各种COM对象,可供程序(COM客户端)使用。这些COM对象由一个独特的数字标识,称为类标识符(CLSIDs),它们通常在注册表键HKEY_CLASSES_ROOT\CLSID\<唯一的clsid>中找到。


例如,"我的电脑 "的COM对象是{20d04fe0-3aea-1069-a2d8-08002b30309d},在下面的截图中可以看到:


对于每个CLSID键,还会有一个叫做InProcServer32的子键,指定实现COM服务器功能的DLL的文件名。下面的截图会告知我们shell32.dll(COM服务器)与“我的电脑”有关。


与 "我的电脑"COM对象类似,微软提供了各种其他的COM对象(在DLL中实现),供合法程序使用。当合法程序(COM客户端)使用特定COM对象(使用其CLSID)的服务时,其相关的DLL被加载到客户端程序的进程地址空间。


在COM劫持的情况下,攻击者修改了合法COM对象的注册表项,并将其与攻击者的恶意DLL联系起来。其思路是,当合法程序使用被劫持的对象时,恶意DLL会被加载到合法程序的地址空间。这使得攻击者能够在系统上持续存在并执行恶意代码。


在下面的例子中,在执行该恶意软件(Trojan.Compfun)时,它掉落了一个扩展名为._dl的dll,如下所示。

 [CreateFile] ions.exe:2232 > %WinDir%\system\api-ms-win-downlevel-qgwo-l1-1-0._dl

*左右滑动查看更多


然后,该恶意软件在HKCU\Software\Classes\CLSID中设置了以下注册表值。这个条目将MMDeviceEnumerator类的COM

对象{BCDE0395-E52F-467C-8E3D-

C4579291692E}与当前用户的恶意DLL C:\Windows\system\api-ms-win-downlevel-qgwo-l1-0._dl相关联。

[RegSetValue] ions.exe:2232 > HKCU\Software\Classes\CLSID\{BCDE0395- E52F-467C-8E3D-C4579291692E}\InprocServer32\(Default) = C:\Windows\system\api-ms-win-downlevel-qgwo-l1-1-0._dl

*左右滑动查看更多


在一个干净的系统中,MMDeviceEnumerator类的COM对象{BCDE0395-E52F-467C-8E3D-C4579291692E}与DLL MMDevApi.dll相关,其注册

表项通常在HKEY_LOCAL_MACHINE\SOFTWARE\

Classes\CLSID\中找到,而在HKCU\Software\Classes\CLSID\中没有找到相应条目。


由于恶意软件在HKCU\Software\Classes\CLSID\{BCDE0395-E52F-467C-8E3D-C4579291692E}中添加了一个条目,受感染的系统现在包含两个相同CLSID的注册表项。


由于HKCU\Software\Classes\CLSID\{BCDE0395-E52F-467C-8E3D-C4579291692E}的用户对象在位于HKLM\SOFTWARE\Classes\CLSID\{BCDE0395-E52F-467C-8E3D-C4579291692E}的机器对象之前被加载,恶意DLL被加载,从而劫持了MMDeviceEnumerator的COM对象。


现在,任何使用MMDeviceEnumerator对象的进程都会加载恶意的DLL。下面的图是在重新启动受感染的系统后截的。重启后恶意的DLL被explorer.exe加载,如图所示:


COM劫持技术逃避了大多数传统工具的检测。为了检测这种攻击,我们可以在HKCU\Software\Classes\

CLSID\中寻找对象的存在。恶意软件可能不会在HKCU\Software\Classes\CLSID\中添加条目,而是修改HKLM\Software\Classes\CLSID\中的现有条目以指向一个恶意二进制文件,因此也应该考虑检查这个注册表键中指向未知二进制文件的任何值。


(未完待续)



—  往期回顾  —




关于安恒信息安全服务团队安恒信息安全服务团队由九维安全能力专家构成,其职责分别为:红队持续突破、橙队擅于赋能、黄队致力建设、绿队跟踪改进、青队快速处置、蓝队实时防御,紫队不断优化、暗队专注情报和研究、白队运营管理,以体系化的安全人才及技术为客户赋能。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存