导语:Terdot是一款基于Zeus银行木马的恶意软件,可以进行MIMT代理攻击、窃取浏览信息、进行HTML代码注入等。Terdot的目标除了银行,还有社交网络,包括Facebook, Twitter, Google Plus, YouTube, 邮件服务提供商包括Gmail, live.com, 和Yahoo

安全专家发现Terdot是一款基于Zeus银行木马的恶意软件,可以进行MIMT代理攻击、窃取浏览信息、进行HTML代码注入等。Terdot的目标除了银行,还有社交网络,包括Facebook, Twitter, Google Plus, YouTube, 邮件服务提供商包括Gmail, live.com, 和Yahoo Mail。

有趣的是,Terdot恶意软件会避免收集俄国社交媒体平台的数据,比如VKontakte (vk.com)和Bitdefender。这说明该恶意软件的幕后操作者应该来源于东欧。

简介

安全专家发现Terdot是一款基于Zeus银行木马的恶意软件。Terdot的技术高度定制和熟练,可以进行MIMT代理攻击、窃取浏览信息、进行HTML代码注入等。根据最新的分析,Terdot的目标除了银行(PCFinancial, Desjardins, BMO, Royal Bank, Toronto Dominion bank, Banque Nationale, Scotiabank, CIBC, Tangerine Bank),还有社交网络,包括Facebook, Twitter, Google Plus, YouTube, 邮件服务提供商包括Gmail, live.com, 和Yahoo Mail。

有趣的是,Terdot恶意软件会避免收集俄国社交媒体平台的数据,比如VKontakte (vk.com)和Bitdefender。这说明该恶意软件的幕后操作者应该来源于东欧。

发现和传播

Terdot木马是2016年10月被发现的,该恶意软件通过email邮件中的pdf图标进行感染。当点击了pdf图标之后,隐藏的js代码就执行了。代码和恶意软件文件就执行了。

1511098404514214.png

为了保护payload,Terdot的传播机制非常复杂,有一系列复杂的droppers,注入、下载器。感染链如下图所示:

1511098488616591.png

感染链

Terdot会把自己注入到浏览器进程中来阅读浏览器的流量,把低级的网络流量导入到本地代理服务器中。服务器会检查流量、转发请求到目标、接受响应消息,然后发送回受害者浏览器。

恶意软件有两种方式来窃取认证数据:1是检查客户的request请求,2是在响应消息中注入spyware js代码。Terdot会保存HTTP请求的相关数据并周期性地上传给C&C服务器。

因为大多数的银行现在都采用了HTTPS,因此恶意软件通过创建自己的证书授权中心(Certificate Authority)和在MIMT攻击中为每个访问的域名生成证书来绕过TLS的限制。在IE中,恶意软件会给win32 API证书检查函数安装hooks来诱骗浏览器相信伪造的证书。对Firefox,Terdot会用Mozilla提供的工具在浏览器的可信CA链中添加根证书。

图片.png

Terdot发起的MIMT攻击

Terdot的组件分散在多个进程中,每个进程有特殊的角色。Windows Explorer进程和其他常驻内存的Windows进程是负责在机器内传播感染的注入器或者监视器。Terdot的MIMT代理从msiexec.exe进程中运行的浏览器进程中接收流量。

图片.png

Terdot组件和注入链

我们发现的Terdot样本是用VB编写的exe文件。执行的时候,会创建一个同名的进程,但是所有的数据不同。新的数据只会获取写入虚拟内存的内容,而不是硬盘上的数据。

新的执行镜像保护两部分:代码和加密的DLL,其中DLL是下一步用来注入的。代码部分使用的混淆技术来避免被反编译。

混淆算法使用了与ESP register和栈、寄存器中的VCHG-ing valus相同的操作。通过分析dropper样本,加密的DDL位于RVA 0x348,解密方式如下:

data[index] ^= (char)key
key = (key << 8) + index

每个exe的key是不同的,不同静态提取。因为加密的数据应该解密exe,我们可以预测前两个字节是ASCII码的MZ。然后接下来的两字节就可以用暴力破解很容易地破解了,一共有65536种组合,用python代码在I7-4790 CPU上进行破解只需要4秒。

数据结构

恶意软件代码中使用的数据结构如下:

BaseConfig structure格式

该结构是用来保存bootsrapping过程使用的信息,这些数据在感染的过程中是不变的。

图片.png

persistence structure格式

该数据结构对不同的Terdot 安装是不同的,含有特定机器的信息和随机生成的数据。

图片.png

downloaded structure格式

该结构是bootstrapper进程下载的,主要含有Terdot DLLs。

图片.png

data container structure格式

与ZeuS类似,Terdot使用了特殊的容器结构来存储配置数据。配置数据到C&C服务器的上传和下载也使用这种格式。从C&C服务器下载的配置数据是不变的,含有spyware代理要注入的URL和HTML代码。容器结构如下:

图片.png

Header

图片.png

在数据保存或发送之前,数据容器会进行一些处理:

· 如果block含有与之前相同的identifier combination,在flag标签内有16bit的设定,那么就丢弃新的block;

· 一个block的程度在128~1024字节,当充满随机数据的新block添加到容器的尾部,就会计算出block的md5值,并且保存到容器头的响应域。

· 容器的前20字节是随机数据。

整个结构用下面的算法加密:

for (int i = 1; i < container_length; i++){
container_data[i] ^= container_data[i - 1];
}

剩余的数据用persistence structure中存储的RC4 state buffer或者BaseConfig structure中存储的RC4 state buffer来加密。

Data container对象示例:

图片.png

Bootstrapper DLL

DLL的作用是通过下载或者已有的安装中找到并运行Terdot DLL。该文件的输出名称是loader.dll,而且只有一个输出。我们发现,样本首先会检查是否有足够的权限来编辑注册表,即尝试创建自己的注册表HKCUSoftwareMicrosoftTest。如果注册表的权限被拒绝了,就需要用ShellExecuteEx API调用重新运行恶意软件。在重新运行exe的时候,用户需要接受UAC提示,如下图所示。因为提示只说是Windows应用,并没有其他的提示,用户大概率会接受。

图片.png

如果用户接受,那么恶意软件就会尝试下载含有Terdot DLL的payload。

首先,恶意软件检查特定名称的文件映射是否存在,如果映射存在,内容就复制到内存中,然后从映射从删除。在payload中,第一个DWORD表示恶意软件的版本。如果是新版本,那就接受,否则放弃执行。文件映射含有persistence structure,并且全局RC4 state buffer被用来解密数据,含有之前下载的含有Terdot DDL数据结构和其他的exe和DLL。如果是旧版本,恶意软件就会从C&C服务器获取新版本的payload。

如果映射不存在,恶意软件就会尝试在Windows注册表中特定位置去找另一个payload源。

图片.png

Bootstrapper程序的部分数据

下载机制

如果文件映射和注册表位置都不存在,恶意软件就会尝试从C&C服务器下载payload,主要是通过硬编码或者明文的URL来实现的。不同样本的URL也是不一样的。

用户代理通过之前的进程被被褥到程序执行镜像中,如果无法获取这样的代理,就按照默认的设置选择硬编码或者明文的URL。

如果按照系统配置的代理下载,如果失败了,就尝试不用代理的方式。如果使用HTTPs协议,无效的证书会被忽略。其他情况下,下载就是一个简单的GET请求。响应消息用RC4 state buffer的副本解密,然后检查CRC32除后四位之外的部分的校验和是否等于后四位。没有校验和的buffer是用nrv2b压缩算法解压缩的。解压缩的数据就是payload buffer,含有Terdot DLL和其他相关文件。

因为恶意软件是以32位的进程运行的,所以在64位的操作系统中,恶意软件就需要利用漏洞来访问64位版本的win32 API。利用的漏洞是Heaven’s Gate,具体流程如下:

· 暂时改变cs(code segment) register为0x33,这是x86-64指令对应的机器码;

· 运行x86-64代码;

· 把cs register改回0x23,机器码被翻译为x86指令。

通过上面的过程,恶意软件可以调用64位版本的NtAllocateVirtualMemory, NtWriteVirtualMemory, LdrLoadDll和CreateRemoteThread来装载下载的64位的恶意软件DDL,并运行系统explorer.exe进程中的新进程“DDL输出”。

如果对系统explorer.exe进程的注入失败了,恶意软件就在当前进程的地址空间中运行32位恶意软件的DDL。之后,恶意软件运行DDL记录点,在另一个线程中运行[email protected] export。

当恶意软件运行了DDL export,新的线程就会收到一个含有BaseConfig结构、原始恶意软件路径、DDL镜像的开始地址、文件映射中的downloaded structure和数据的buffer。如果DDL在另外一个进程中运行,buffer会写入该进程的内存,然后把指针传给程序。

如果注入成功了,那么bootstrapper会进入休眠来允许线程继续。如果注入不成功,恶意软件会在10秒会重试。

图片.png

注入到系统 32-bit explorer.exe 进程的伪代码

更多Terdot银行木马的技术分析参见Bitdefender的白皮书

源链接

Hacking more

...