一、前言
近日,中兴通讯高级邮件防御系统捕获一例病毒样本。通过分析发现,该样本会通过进程替换等方式释放,并在傀儡进程中运行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等信息。