本文作者:x-encounter(来自信安之路作者团队)
样本名称: 7.exe
MD5: 4865fa85d9ee28bfab97d073a3dde8a3
SHA1: 3f738735bb0c5c95792c21d618eca8c0d5624717
分析环境及工具: winxp sp3
、IDA
、OD
、火绒剑
7.exe
: 样本主体
dump.exe
: 样本主体经过部分解密后的病毒文件
shellcode.txt
: 主体经过解密后的 shellcode,病毒的主要行为都在 shellcode 中
回调函数.txt
: shellcode 会创建两个线程,该回调函数是第二个线程的回调函数(第一个线程的回调函数比较简单就没有 dump 下来)
ptf6.tmp
:主线程创建的临时文件,用于 telnet 功能的实现
sfc.dll
: 在第一个线程中被调用,用于禁用文件保护功能
网盘下载:
https://pan.baidu.com/s/1EsisuCsbO8lEiFLd3reB2Q (有相关 idb 文件)
该病毒为感染型病毒,边运行边解密,有一定的混淆和反调试技术,会将自身注入到每个正在运行的进程中实现感染和传播,同时该病毒还伪装成正常的 telnet 终端,使用者会误认为这是正常的 telnet 工具从而放松警惕
7.exe
(样本主体行为):
1、解密自身和 shellcode
2、创建窗口,初始化 telnet 终端,在窗口的回调函数中调用 shellcode
shellcode.txt( shellcode 行为):
1、动态获取所需要的 API 函数地址
2、操作注册表想要常驻内存(通过屏保程序)
3、提权、创建安全描述符和互斥量
4、创建线程
(1)第一次创建线程的行为:
a、调用sfc.dll中的导出函数禁用系统的文件保护功能
b、消息死循环
(2)第二次创建线程的行为:
a、检查是否被调试,遍历所有运行的进程
b、遍历进程中的所有线程
c、通过远程线程将自身注入到所有进程中
5、主线程进行复杂的 PE 操作创建 ptf6.tmp,并对这个临时文件创建一个挂起的进程用于实现 telnet 功能的伪装
7.exe (病毒主体行为分析)
使用 PEid 查壳
无壳,接下来通过火绒剑动态监视进程,结果如下
发现有远程注入的行为,初步判断为感染型病毒,将病毒主体载入 IDA 和 OD 进行分析
快速定位主函数,来到 0100C9EB call InitApplication
函数,用于初始化 telnet 相关功能,在 OD 中 F7 步入
首先载入 telnetcr.dll,判断操作系统的语言,之后载入资源
在函数最后调用 RegisterClassW
和 CreateWindowExW
创建窗口,这里我们应该注意这个窗口的回调函数
在 OD 中下断点,断到该窗口回调函数中,单步到 0100B9FC call sub_1038F75
时,如果直接步过,程序会直接跑飞并重新断在了窗口回调函数的起始位置
我们只能步入该函数,之后我们会出现上述同样的问题,步过某个函数程序会跑飞,我们记录这些函数并进入该函数重复上述操作,最终找到了核心代码(该过程需要极大的耐心),断点函数如下
最终找到了 01035D6C
处的 call eax
,步入该函数,会出现一个 loop 循环,该循环用于动态解密 loop 下面的指令,解密前后的对比图如下
解密前
下条件断点解密后的指令
解密后的数据中又发现了 loop 指令,同上下条件断点解密 shellcode,我们可以 dump 当前的内存保存为 dump.exe
使用 IDA 载入。
之后会在 0103370B
处 call eax
调用 virtualAlloc
为 shellcode 分配堆空间,接着在 01033775
处 call ebx
进入堆空间执行 shellcode
在内存中 dump 该 shellcode 保存为 shellcode.txt,IDA 载入,继续分析
shellcode.txt(shellcode 行为分析)
首先会分四次动态获取所需的 API 函数
获取的过程比较有趣,该病毒作者自己实现了一个 hash 算法,用于对相应的 DLL 进行 PE 操作后获取的 API 函数名称进行加密再与已经写好的 hash 进行比较,从而找到需要的 API 函数地址
之后调用 GlobalMemoryStatus
函数获取内存信息,接着调用 cpuid
指令获取 cpu 信息
接着打开注册表 HKEY_CURRENT_USER\Control Panel\Desktop
查询有没有 SCRNSAVE.exe (屏保程序),如果有进行替换,作为自启动的一种方式
然后进行提权,调用提权函数
有趣的是提权之后会跳到一个高址,执行 InitializeSecurityDescriptor
和 SetSecurityDescriptorDacl
这两个函数,创建一个安全描述符,并且分配给该安全描述符一个空的 DACL,查了一下 MSDN,空的 DACL 表示系统允许对该对象的所有访问
之后分配内存空间,创建三个互斥量,互斥量的生成方式也很有意思,首先以 “Global\” 为起始字符串,接下来会进行两次循环,每次循环调用 GetTickCount
获取操作系统启动所经过的毫秒数,对其进行操作然后拼接到 “Global\” 后面,由于有两个循环所以拼接了两次
生成的三个互斥量
在 00910591
处会创建该病毒的第一个线程,回调函数的地址为 00B93F61
,由于该线程比较简单,我就长话短说,该线程会首先调用 CreateMutexA
创建互斥量
然后进入该线程的核心部分,核心功能是关闭系统的文件保护,通过找到 sfc.dll 中编号为 2 的未公开函数,导入符号链接我们可知该函数名称为 SfcTerminateWatcherThread
来关闭文件保护机制,同时还获取了 SfcIsFileProtected
函数用于检测文件是否处于保护状态
之后线程会进入消息死循环……第一个线程分析完毕。
创建完第一个线程之后,单步跟会跳出 shellcode,之后你按 F9 程序会一直断在窗口回调函数处,仿佛一直在处理消息,给人造成一种病毒已经执行完毕的错觉,但是目前分析的结果与火绒剑产生的结果不符(并没有发现任何远程注入的行为),这里我们应该这么想:病毒会不会在窗口回调函数中第二次调用 shellcode 呢?
解决方案:
我们之前已经找到了 01035D6C
处的 call eax
用于解密 shellcode 并执行 shellcode,我们在此下断点,OD 重启病毒程序,按下 F9,断在了第一次调用 shellcode 处,接着再按下 F9,程序并没有跑飞,反而是断了下来,说明病毒确实会第二次调用 shellcode,从结果上来看,虽然这两次会调用同一段 shellcode,但是会执行不同的功能。
这两次调用 shellcode 的不同点发生在创建的线程的回调函数中,首先将线程的回调函数从内存中 dump 出来,保存为 “回调函数.txt”,IDA 载入分析
回调函数.txt(第二次创建线程的回调函数分析
长话短说,经过一系列的操作,会在 009AB766
处 call dword ptr ss:[ebp-0x11]
,也就是又一次创建了一个线程!!!回调函数地址 009AB3F8
为了后面叙述方便为该线程的回调函数起名为 M,对 M 进行下断,执行到 M 函数内,进行一系列的操作之后,终于到了 M 函数的核心,也是该病毒的核心部分
首先会调用 GetCurrentThread
获取当前线程的一个句柄,调用 SetThreadPriority
调整当前线程优先级
接着会遍历所有进程,调用 IsDebuggerPrsent
函数检测是否被调试,使用 StrongOD
插件轻松绕过(有兴趣的可以查一下 IsDebuggerPrsent
的检测原理,很简单,我就不补充了)
之后会打开对应的进程
然后遍历该进程中所有的线程
对每一个进程调用 CreateRemoteThread
进行远程线程的注入
注入的内容是自身,这里就不做过多的描述了
然而,到这里病毒并没有分析完!!!
剩余主线程功能分析
回到 shellcode 剩下的部分,我们只分析到了 CreateThread
用于创建了一个功能线程,接下来分析后面的操作
首先会调用 GetTempPath
获取临时目录,接着调用 CopyFile
将病毒文件复制到临时目录中,之后对病毒副本进行非常复杂的 PE 操作,创建文件映射,移动节区数据,对该副本进行 PE 魔改,相当于将样本中的恶意代码全部去除掉只剩下 telnet 功能然后将该副本命名为 ptf6.tmp,存放在临时目录中(有兴趣的可以分析一下该病毒是怎么魔改原样本的,这里不做过多叙述,PE 操作可以看我之前分析勒索病毒的文章里面有详细分析)
之后会对该临时文件创建一个挂起的进程
最后调用 ResumeThread
使挂起的进程执行,呈现一个正常的 telnet 工具的界面,之后会等待那两个线程执行完毕,线程执行完毕之后删除文件并退出进程。
当窗口回调函数执行完之后,在病毒主体中,还会有一次注册表的操作
设置注册表 Software\Microsoft\TelnetClient
的键值
分析完毕
1、该病毒还使用了代码混淆,我没有进行呈现,大家可以自己调试分析
2、感染性病毒切记要一遍下来,如果不小心病毒跑飞了,那就虚拟机回滚重新来,不要接着分析,例如这个病毒的远程线程注入功能只执行一次,执行完之后你重新载入再想分析就已经单步不到了。
3、病毒行为并不复杂,但是比较恶心
4、样本在网盘中供大家下载、学习、分析