一例信息窃取木马分析报告
2019-09-07 11:00:58 Author: www.freebuf.com(查看原文) 阅读量:151 收藏

一、前言

近日,中兴通讯高级邮件防御系统捕获一例病毒样本。通过分析发现,该样本会通过进程替换等方式释放,并在傀儡进程中运行AgentTesla木马以达到信息窃取的目的。以下是对该样本的分析。

二、样本简介

该样本为Autoit3编写的exe文件:

反编译出部分脚本,脚本做了较强的混淆:

脚本使用了多种混淆手法,如常数被转换成数学运算、无用的随机变量赋值、调用Chr函数加密、无用的条件分支等。脚本中对字符串的解密函数为:

三、样本分析

通过对脚本进行解混淆并结合调试分析,样本的主要功能如下:

1.UAC Bypass

对反编译后的脚本分析后,发现该样本针对不同的windows系统分别采用了不同的UAC绕过方式。

(1)通过eventvwr绕过UAC

Windows下的事件查看器eventvwr.exe运行时会检查注册表项HKCU\Software\Classes\mscfile\shell\open\command,若存在就读取并运行其Default键值下保存的命令行。

对相关脚本解混淆后内容如下:

上述脚本首先判断当前账号在win7、win8下是否为管理员账号,若不是就通过设置HKCU\Software\Classes\mscfile\shell\open\command中default默认值为要运行的代码路径(@ScriptFullPath),之后运行eventvwr.exe可以绕过UAC悄悄运行自己的代码。

eventvwr.exe为系统软件,查看微软签名的manifest清单可见其autoElevate属性为true,说明eventvwr有自动提权功能:

所以恶意程序使用eventvwr绕过UAC后,其作为eventvwr.exe创建的子进程也具备高完整性,允许访问多个特权和受保护的系统资源。

(2)fodhelper绕过UAC

这个原理和eventvwr绕过UAC类似。Win10下fodhelper.exe在运行时会打开注册表项HKCU\Software\Classes\ms-settings\shell\open\command,检查该注册表路径下是否有DelegateExecute键,若有,就执行Default键值下保存的命令行。

对相关脚本解混淆后内容如下:

样本设置注册表项HKCU\Software\Classes\ms-settings\shell\open\command下的DelegateExecute,并在Default下设置要运行的代码路径@ScriptFullPath,之后通过运行fodhelper来启动@ScriptFullPath中的命令。

样本通过上述两种方式,可以绕过UAC并使得创建的进程具备高完整性(high-integrity)。

2.提权

若样本发现自己没有拿到高权限,也会通过AdjustTokenPrivileges操作进行提权:

以及使用DuplicateTokenEx复制高权限进程的Token后,根据需要修改安全属性并通过调用CreateProcessAsUserW使得创建的进程具备想要的权限:

3.检测Vbox和Vmware虚拟机环境

4.下载文件到temp目录下执行

5.清理痕迹

6.利用傀儡进程隐藏踪迹

调试过程中发现样本通过IsDebuggerPresent、QueryPerformanceCounter等多种方式进行反调试,同时使用进程替换技术在傀儡进程中运行了自己的恶意代码。这部分代码存于样本的资源节中,首先加载资源并解密,通过创建子进程的方式运行C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe,创建的子进程RegAsm即为傀儡进程,通过进程替换将RegAsm进程替换成自己的代码运行,以此达到隐藏恶意代码的目的。

为了使这部分行为更为隐蔽,样本在实施进程注入时既没有直接调用相关API,也没有通过调用GetProcAddress等函数来获取相关API地址,而是采用遍历kernel32.dll导出函数的方式来获取API函数入口地址:

查询到的API函数地址存于栈中,后续通过栈中地址调用相关API函数:

这种方式使得无法直接从汇编代码看出调用的API,避免引起逆向人员的注意。

创建傀儡进程并进行进程替换的过程如下:

首先创建挂起的进程(create_suspended),此时windows加载器会将PEB结构体地址写入寄存器:

通过Wow64GetThreadContext获取目标进程RegAsm.exe的主线程上下文:

通过ReadProcessMemory在目标进程的PEB结构地址偏移8h处读取4字节,此处保存的是目标进程的加载基址:

通过读取PEB结构获取目标进程加载基址的方式可避免ASLR(地址空间随机化)的影响。

随后判断目标进程基址是否为00400000,若基址相同,则执行ZwUnmapViewOfSection卸载模块,防止后续将恶意代码映射到00400000基址时引起冲突:

在本地进程空间中分配4C000大小的内存,用于分节区拷入PE文件,拷贝的内容具备明显的PE特征:

在目标进程(RegAsm.exe)中指定00400000处分配对应大小的内存:

通过WriteProcessMemory将恶意代码注入到目标进程00400000处:

并将目标进程中注入的PE头和资源部分置为ReadOnly,防止引起怀疑。

通过WriteProcessMemory将保存的目标进程PEB中的ImageBase修改为00400000(已注入PE的EP地址):

设置RegAsm进程的主线程Context的EP为已注入PE的EP,完成进程替换。之后ResumeThread恢复主线程,开始运行被注入的代码:

基本就是常规的进程替换操作。之所以选择注入RegAsm.exe,可能因为是白名单。

7.注入代码分析

在进程注入前,于内存中找到待注入的PE文件,修改其入口代码为EBFE(自循环),用修改后的PE做后续的进程替换,调试器中Attach目标进程断下后将入口代码改回为原代码。然而随后发现attach的进程无法继续调试,推测可能做了反调试。接下来直接dump内存分析。将注入的这部分内存数据dump下来,修复PE头后,查看PE结构显示为.NET文件,且文件名、函数名以及函数中的关键字符串做了混淆:

查看反编译后的代码,确认采用了.NET反调试,自定义的函数里设置了DebuggerHidden属性,相当于对调试器隐藏代码,调试器会越过这些函数,不会停在断点处:

经分析,该.NET文件或为AgentTesla木马变种。AgentTesla是一个商业化的间谍软件,可生成定制功能的木马程序。查看反编译后的代码,其功能主要是窃取电脑的键盘输入和剪贴板信息、屏幕截图以及浏览器信息,并通过FTP、HTTP或SMTP方式发送出去。

主要功能分析如下:

(1)KeyLogger

(2)窃取剪贴板信息

(3)窃取屏幕截图

(4)木马支持FTP、HTTP、SMTP三种方式往外发送窃取的数据

a)通过FTP上传:一般是预先设置ftp地址、用户名和密码,并选择加密或者非加密方式上传

非加密方式:

加密方式:

b)通过HTTP上传:通常会预先设置C&C服务器,木马运行后会尝试连接该服务器并接收指令

在分析过程中跟踪到该木马和外部网址周期性进行HTTP通讯过程:

c)通过SMTP上传:工具使用者可以指定邮箱服务器地址、用户名和密码

(5)收集浏览器信息

在木马的资源节嵌入了一个名为IELibrary的DLL,该dll功能主要是搜集浏览器的url、cookie以及账号密码等信息

a)查询、添加及删除历史记录:

b)窃取并破解IE保存的密码和cookie:

c) 查询、添加、删除URL历史:

d)恢复浏览器账号:

e)获取URL信息:

此外,该木马还会自我复制,在%AppData\Roaming\MyApp目录下生成Myapp.exe文件,且文件属性置为隐藏:

随后将该文件添加到注册表实现自启动:

以及通过注册表禁用任务管理器,以防止用户通过任务管理器kill进程:

四、总结

该样本用了多种混淆和反调试方法干扰逆向,同时使用多种手法进行UAC绕过、提权,并使用进程替换等方式释放运行AgentTesla木马,意图窃取电脑中的键盘输入、剪贴板、屏幕截图以及浏览器账号密码和url等信息。

附样本MD5:

2e045198949970207aa8170522633010

*本文作者:ZInsight团队,转载请注明来自FreeBuf.COM


文章来源: https://www.freebuf.com/articles/network/211875.html
如有侵权请联系:admin#unsafe.sh