漏洞分析|中新网安安全实验室“电子新冠病毒”【DesktopLayer样本】分析报告(上)

 Desktoplayer是一种有害的恶意软件感染,秘密进入计算机系统。Desktoplayer放入系统后,连接到远程服务器,并使攻击者可以访问受到感染的系统。Desktoplayer降低系统性能,并使系统容易受到其他攻击。

一、病毒危害

蠕虫病毒入侵并完全控制一台计算机之后,就会把这台机器作为宿主,进而扫描并感染其他计算机。当这些新的被蠕虫入侵的计算机被控制之后,蠕虫会以这些计算机为宿主继续扫描并感染其他计算机,这种行为会一直延续下去。蠕虫使用这种递归的方法进行传播,按照指数增长的规律分布自己,进而及时控制越来越多的计算机。严重的占用有限的网络资源,最终引起整个网络的瘫痪,使用户不能通过网络进行正常的工作。

二、病毒分析

在对样本进行分析之前,先用 PEiD对样本进行查壳:

Desktopla<x>yer是一种有害的恶意软件感染348.png 

通过PEiD可以发现,该样本加了UPX壳,手动脱掉之后的文件为upDesktoplayer.exe.v 后续的分析均是直接针对脱壳后的文件的。

Phase1:

1-1:获取 IE 路径并验证 IE 可执行文件是否存在 (3种方法): 如果三种方法均不能找到 IE 路径并验证对应路径下IE可执行文件的存在,则样本行为就此终止。

(1-1-1)通过注册表 "HKEY_CLASSES_ROOT\http\shell\open\command" 获取 IE 路径并验证 IE 可执行文件是否存在

Desktopla<x>yer是一种有害的恶意软件感染597.png

 (1-1-2)通过绝对路径 "C:\Program Files\Internet Explorer\IEXPLORE.EXE" 获取 IE 路径并验证 IE 可执行文件是否存在

Desktopla<x>yer是一种有害的恶意软件感染690.png

 (1-1-3)通过注册表 "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\

CurrentVersion\App Paths\IEXPLORE.EXE" 获取 IE 路径并验证 IE 可执行文件是否存在

Desktopla<x>yer是一种有害的恶意软件感染816.png

 1-2:依次尝试在 1:"C:\Program Files\";

               2:"C:\Program Files\Common Files\ ";

               3:"C:\Documents and Settings\Administrator\ ";

               4:"C:\Documents and Settings\Administrator\Application Data\ ";

               5:"C:\WINDOWS\system32\ ";

               6:"C:\WINDOWS\ ";

               7:"C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\";

下创建" Microsoft"目录并写入临时文件,用于测试能否在该目录下成功创建文件,为后续在该目录下创建文件 "Desktoplayer.exe" 做准备,如果当前路径尝试成功,则停止尝试。如果上述7个路径的尝试均失败,则样本行为就此结束。

 这里演示仅以第一个路径作为示例:

 (1-2-1)创建文件夹 "C:\Program Files\Microsoft"

Desktopla<x>yer是一种有害的恶意软件感染1254.png

    新创建的文件夹" Microsoft ":

Desktopla<x>yer是一种有害的恶意软件感染1279.png

 (1-2-2)通过在该文件夹下创建一个临时文件以检验能否在该文件下创建新文件

Desktopla<x>yer是一种有害的恶意软件感染1323.png

 (1-2-3)删除刚刚创建的临时文件

Desktopla<x>yer是一种有害的恶意软件感染1346.png

1-3:释放一个新样本到之前创建的目录下,名命为 “Desktoplayer.exe”,并调用 CreateProcess 来启动该应用程序。

(1-3-1)获取当前应用程序路径名称

Desktopla<x>yer是一种有害的恶意软件感染1444.png

(1-3-2)释放新样本到新创建的文件夹下,新文件名称为 “Desktoplayer.exe”

Desktopla<x>yer是一种有害的恶意软件感染1497.png 

释放的新样本文件:

Desktopla<x>yer是一种有害的恶意软件感染1511.png

(1-3-3)启动 "C:\Program Files\Microsoft\Desktoplayer.exe", Phase1关键行为已经结束

Phase2:

Desktopla<x>yer是一种有害的恶意软件感染1588.png

2-1 验证特定文件夹(Phase1创建的文件夹)下是否存在样本文件:

Desktopla<x>yer是一种有害的恶意软件感染1636.png 

2-2 获取 ntdll.dll 的一些导出函数地址保存到全局变量中,便于后续代码的调用:

Desktopla<x>yer是一种有害的恶意软件感染1686.png 

Desktopla<x>yer是一种有害的恶意软件感染1689.png 

2-3:Hook ZwWriteVirtualMemory

(2-3-1) 获取 ntdll.dll 的模块基地址

Desktopla<x>yer是一种有害的恶意软件感染1752.png 

(2-3-2) 获取 ZwWriteVirtualMemory 的函数地址

Desktopla<x>yer是一种有害的恶意软件感染1794.png 

(2-3-3) 更改 ZwWriteVirtualMemory 函数头前 0X10 字节的内存属性为    PAGE_EXECUTE_READWRITE

Desktopla<x>yer是一种有害的恶意软件感染1875.png 

(2-3-4) 计算 ZwWriteVirtualMemory 函数头能够被修改的字节数   

Desktopla<x>yer是一种有害的恶意软件感染1926.png 

(2-3-5) 申请 0XF 大小的内存空间,存放 Hook ZwWriteVirtualMemory 过程中的一些数据

Desktopla<x>yer是一种有害的恶意软件感染1991.png 

(2-3-6) 具体的 Hook 过程中

Desktopla<x>yer是一种有害的恶意软件感染2017.png  

(2-3-7) 修改之前申请的 0XF 大小的内存空间属性为只读

Desktopla<x>yer是一种有害的恶意软件感染2055.png    

(2-3-8) 还原 ntdll.ZwWriteVirtualMemory 的内存属性

Desktopla<x>yer是一种有害的恶意软件感染2105.png    

(2-3-9) Hook ntdll.ZwWriteVirtualMemory 前后机器码以及函数执行流程对比

(2-3-9-1) 机器码对比

被 Hook 之前的 ZwWriteVirtualMemory

Desktopla<x>yer是一种有害的恶意软件感染2219.png 

被 Hook 之后的 ZwWriteVirtualMemory

Desktopla<x>yer是一种有害的恶意软件感染2254.png 

(2-3-9-2) 函数执行流程对比

调用原来的流程

    Desktopla<x>yer是一种有害的恶意软件感染2293.png

新添加的流程

Desktopla<x>yer是一种有害的恶意软件感染2304.png 

 

2-4:调用 CreateProcessA 来启动 iexplorer.exe 进程, 内部完成对 iexplorer.exe 的注入

Desktopla<x>yer是一种有害的恶意软件感染2376.png    

通过对 VirtualAllocEx 和 WriteProcessMemory 的断点可以详细的看到为 iexplorer.exe 申请空间并写入数据的过程5次为 IE 进程申请空间

为 IE 进程第1次申请内存空间(Addr = 20010000, Size = 0000D000)

Desktopla<x>yer是一种有害的恶意软件感染2525.png 

为 IE 进程第2(Addr = 00020000, Size = 00000233)、

              3(Addr = 00030000, Size = 000000DF)、

              4(Addr = 00040000, Size = 000000A5 )、

              5(Addr = 00050000, Size = 00000138 )、

              次申请内存空间

blob.png  

6次 向IE 进程写入数据

IE 进程第1次写入数据(Addr = 20010000, Size = 0000D000)

blob.png 

IE 进程第2(Addr = 00020000, Size = 00000233)、

              3(Addr = 00030000, Size = 000000DF)、

              4(Addr = 00040000, Size = 000000A5)、

              5(Addr = 00050000, Size = 00000138)

              次写入数据

blob.png 

IE 进程第6次写入数据(Addr = 00401A25, Size = 0000000C)

    00401A25 为 IE 的 OEP,这里实际上是更改 IE 的OEP

    在该 API调用执行之前,修改 DesktopL.0040DFA7内存处的首字节为 0XCC(同时记下原来的字节数据:0XBF,用于恢复), 即可用 OD 段下新启动的IE进程

 

blob.png   

Phase3:

3-1 注入前后 iexplorer.exe 机器码和流程对比:

  正常的 IE 入口点代码

 blob.png

被修改过后的 IE 入口点代码(修改了前 0X0C 字节)

blob.png  

由此可见,原程序的的路程跳转到了 40000 处

3-2 注入后的 iexplorer.exe 创建工作线程之前的行为分析:

(3-2-1) 处理内存 PE 的导入表

blob.png    

(3-2-2) 处理内存 PE 的节信息

blob.png 

(3-2-3) 利用 "KyUffThOkYwRRtgPP" 创建互斥体,依据返回值判断当前是否该样本的其他实例在运行

blob.png  

(3-2-4) 初始化 SOCKET

blob.png

(3-2-5) 对 2001A010 处的数据进行解密

blob.png    

(3-2-6) 获取本机信息并生成字符串  

 blob.png

(3-2-7) 获取当前系统时间, 在 iexplorer.exe 目录下创建 dmlconf.dat 文件并将系统时间写入

blob.png 

3-3 创建6个工作线程:

创建第1个线程(ThreadFunction:20017ACA)

blob.png  

  创建第2个线程(ThreadFunction:20017626)

blob.png 

  创建第3个线程(ThreadFunction:2001781F)

blob.png 

  创建第4个线程(ThreadFunction:2001790C)

blob.png  

  创建第5个线程(ThreadFunction:20016EA8)

blob.png  

  创建第6个线程(ThreadFunction:20016EC2)

blob.png 

 

3-4 工作线程行为分析:

 (3-4-1):Thread1(ThreadFunction:20017ACA)

 功能描述:

每隔 1 秒就打开注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

并读取 Userinit 的键值,然后检查路径 c:\program files\microsoft\desktoplayer.exe 是否在键值中,如果不在的话就将路径 c:\program files\microsoft\desktoplayer.exe 追加到该键值中,以达到开机启动的目的。

blob.png 

 获取注册表项的 "Userinit" 键值

blob.png 

 检查样本文件路径是否在注册表键值中

blob.png  

样本文件路径不在注册表键值中时,将样本文件路径添加到注册表中

blob.png  

休息 1S 之后,再次检查注册表

blob.png 

(3-4-2):Thread2(ThreadFunction:20017626)

功能描述:

间歇性的测试同 google.com 的 80 端口、bing.com 的 80 端口、yahoo.com 的 80 端口的连通性,只要有一个连通,就不再测试后面的网址并在全局变量 2001A23B 处保存两次能够连通的时间差(秒单位)

获取网址和端口号

blob.png 

blob.png 

blob.png  

(3-4-3):Thread3(ThreadFunction:2001781F)