安全中心 > 安全热点分析 > 远控木马利用Windows系统文件漏洞展开攻击

远控木马利用Windows系统文件漏洞展开攻击

时间:2016年 06月 03日   作者:腾讯反病毒实验室

背景

低版本的系统文件,存在不容忽视的安全隐患。尤其是XP系统下,微软停服和普通用户都能使用的管理员权限,直接威胁着XP用户的安全。近期,腾讯反病毒实验室根据用户反馈的电脑卡顿问题,捕获了一枚利用Windows系统文件的栈溢出漏洞入侵Windows XPWin7系统的远控木马。以下,我们以XP系统环境为例,分析其Windows系统文件漏洞和木马入侵方式。

木马简介

通过追踪分析一个异常的开机启动项,我们找到原始的木马文件包,内有01.jpgx.exethumbs.db和“资料”文件夹的快捷方式。01.jpg用于迷惑用户,本身无特别功,x.exe是由XP系统自带的一个多播查询的命令行工具mrinfo.exe重命名而来的,其版本号是5.1.2600.0。快捷方式“资料”的属性,对应的目标是“system32\cmd.exe /c cmd.exe < thumbs.db”。

 

 

用十六进制工具winhex查看thumbs.db的内容,thumbs.db包含了一条执行当前目录下的x.exe的命令和一段包含加密数据的代码,同时该命令向x.exe传递了两个参数,格式如下:x -t argv1 argv2,在第二个参数的的后面附加了一段代码。

argv1(部分):

 

argv2(部分):

 

附加的代码(部分):

 

经过分析发现,该木马利用windows系统文件mrinfo中存在的栈溢出漏洞,借助windows正常系统文件安装远控木马。thumbs.dbargv1argv2包含shellcode的参数,当用户不小心双击快捷方式“资料”时,电脑就会被偷偷安装上远控木马。

这里木马并没有用系统自带的mrinfo.exe,而是重命名为x.exe。在XP SP2版本之后,windows对基本的windows程序和服务都会默认开启DEP,如果直接命名为mrinfo.exe将无法在这些程序和服务中通过堆栈溢出实现代码执行,重命名为x.exe就可以绕过系统默认的DEP防护。同时,木马直接携带一个存在漏洞的低版本的mrinfo.exe,能够实现在xp之后的系统中完成“借腹生子”安装远控木马的目的。

 

木马详细分析

1. 存在栈溢出的mrinfousage

 

2. 存在漏洞的代码

栈溢出漏洞存在mrinfo的get_address函数中,该函数的功能是将目的地址或名称字符串转换成用于IN_ADDR结构的整形地址。触发栈溢出的关键代码如下:

 

str_dest的长度大于52字节时,拷贝操作就可以覆盖栈上的其他内容。在cmd下输入一个超过52字节的字符串:

 

下图是栈溢出前后栈上的数据变化:

 

由图可知,溢出后,返回地址被修改为“hijk”即0x6b6a6968,通过精心构造此值为某一个合法的地址,可以实现控制程序的执行流程的目的。

Mrinfo!main执行时:

 

Mrinfo!get_address栈溢出前后栈上数据的变化:

 

 

3. 利用漏洞的方式

木马并没有采取上面介绍的这种直接覆盖ret address为某一个地址的方式来实现控制程序执行流,而是精心构造输入参数覆盖当前SEH中的exception Handler,同时将返回地址覆盖为一个无效值0x33323130触发一个越界访问异常,这样就将控制权交给了构造好的exception Handlerexception Handler修改eip指向木马的干活代码,并设置返回值为ExceptionContinueExecution,系统则会从eip值出开始执行。至此,木马就悄悄的实现了控制mrinfo的执行流程的目的。

(1mrinfo初始化SEH

Mrinfo在_mainCRTStartup中初始化SEH,代码如下:

 

初始化SEH后,此时的SEH如下:

 

 

(2mrinfo!get_address栈溢出修改SEH

 

(3跳转到shellcode

 触发异常

栈溢出将返回地址修改为无效地址0x33323130,触发一个Access violation异常。栈溢出前调用栈如下:

 

栈溢出后的调用栈:

 

当系统检测到访问异常后,完成收集当前环境信息等工作后,将控制权交给类型为EXCEPTION_DISPOSITIONHandler处理。EXCEPTION_DISPOSITION的定义如下。

 

其中第二个参数指向的是当前的_EXCEPTION_REGISTRATION_RECORD,此时堆栈上的参数如下:

 

② SEH捕获异常,修改eip为木马中的干活代码

木马构造的Handler如下,这段gadget执行后,eip就变成了Handler的第二个参数EstablisherFrame,而EstablisherFrame中的第一个值Next 指针已经被栈溢出覆盖为了一个无条件跳转指令。

 

6ff6c处的代码功能,一是修改第三个参数ContextRecordeip的值为0x0006ff8f,另外一个就是修整当前的堆栈,设置返回值为0(ExceptionContinueExecution,异常已经得到处理,返回到ContextRecord.eip处继续执行),跳回到ntdll!ExecuteHandler2中,最终,ntdllKiUserExceptionDispatcher调用ntdll!ZwContinue返回到eip处继续执行,即0x0006ff8f处的代码获得执行。

 

0x0006ff8f处的代码首先对部分shellcode进行自解密,最终完成的功能是将thumbs.db后面的数据部分解密到内存并执行,解密后数据是一个名为svchost.dll的gh0st远控木马变种。

shellcode中的自解密代码:

 

4. ghost木马变种功能

远控木马第一次运行时,前台会打开当前目录下的的01.doc01.txt01.jpg迷惑用户,创建一个iexplore.exe的傀儡进程,释放木马到本地C:\Documents and Settings\All Users\Application Data\fsguiserv win7对应的目录是C:\ProgramData\fsguiserv)目录下和添加开机启动项。

 

该木马的功能与ghost远控基本一致,主要包括键盘记录、文件上传下载、截取屏幕、远程执行等,这里不具体分析其行为。其C&C服务器地址为aa6684255.gicp.net,目前该地址已经无法访问。

结语

XP系统虽然停服,但在国内依然有为数不少的用户在使用XP系统。管家建议XPWin7用户,应该更谨慎对待来历不明的各种文件(exe、快捷方式等等)和低版本的系统文件等,同时应尽可能升级系统;暂时不能升级的,可以开启DEP防护或使用电脑管家有效截杀该木马

相关热点分析