导语:TeamViewer,远程支持、远程访问、在线协作和会议,用于实现远程支持、远程访问、远程管理、家庭办公及在线协作和会议功能的软件。

1492663292658073.png

TeamViewer,远程支持、远程访问、在线协作和会议,用于实现远程支持、远程访问、远程管理、家庭办公及在线协作和会议功能的软件。支持Windows、Mac、Linux、Chrome OS、iOS、Android、Windows Mobile和BlackBerry平台。

不幸的是,恶意软件 TeamSpy也发现这个工具非常有利于用来进行恶意活动。恶意软件 TeamSpy 是由远程访问工具 TeamViewer 和键盘记录器等组件组成。攻击者利用社会工程学诱骗受害者安装TeamSpy,并通过 DLL 劫持技术进行隐藏,然后利用合法的远程访问工具 TeamViewer 执行未经授权的操作,从而从受害者的设备中窃取机密文档和加密密钥。

TeamSpy 早在 2013 年就被发现了,当时匈牙利 CrySyS 实验室的研究人员和卡巴斯基实验室发布了有关其操作的白皮书。 来自Heimdal Security的安全专家最近发现了TeamSpy出现了新的攻击方式,该攻击方式采用了一个有针对性的垃圾邮件活动,通过恶意程序来获得目标计算机的完整控制权。

隐藏命令

在感染设备后,大多数恶意软件会与命令和控制(C&C)服务器进行通信,因为,C&C服务器是发送恶意软件执行命令的控制中心。 C&C服务器也是恶意软件收集数据的地方,在和C&C服务器进行通信时,恶意软件的开发者通常会实现一个自定义协议,但这样,杀毒软件就可以很容易地发现它与其他流量的不同,从而进行阻止。

于是,为了使杀毒软件更加难以检测到恶意行为,一些恶意软件的开发者便想到利用流行的远程控制程序(如TeamViewer),而不是利用其VPN网络,这样就能起到更好地掩盖其恶意软件和C&C服务器之间通信的作用。

TeamSpy如何进行感染

TeamSpy通过垃圾邮件传播,旨在诱骗受害者打开附件。附件是一个带有宏的Excel文件,打开附件后,将出现以下内容:

1492663470780121.png

当攻击目标启用宏时,感染过程就会开始,这一切都会在后台完全运行,因此受害者不会发现任何攻击征兆。但如果让安全人员来查看这些恶意宏,他们就可以看到经过混淆的字符串,这些经过修改的字符串通常会分割成一个或多个子串,这些子串最后又能被连接起来。最重要的信息,我在下图已用红色圈出来了,并且是一个链接,攻击者可以通过这个链接下载攻击程序以及稍后使用的密码:

1492663483623496.png

该链接disk.karelia.pro是用于上传和共享文件的合法的俄罗斯服务,虽然下载的附件是PNG,但它实际上是一个EXE文件,更具体地说,它是一个受密码保护的Inno安装程序:

3.png

在innounp实用程序的帮助下,我可以轻松地从恶意软件使用的Inno Setup安装程序列出或提取文件。如下图列所示,大多数文件都是常规的经过数字签名的TeamViewer二进制文件,但两个文件除外——msimg32.dll和tvr.cfg。 Tvr.cfg是TeamSpy的配置文件,稍后我会介绍,而msimg32.dll则是恶意软件的一个组成部分。 Msimg32.dll是一个DLL库,它是Windows操作系统的一部分。然而TeamSpy会滥用DLL搜索顺序,以便将当前目录中的假msimg32.dll加载到进程中,而不是从Windows / System32目录中删除原始msimg32.dll。恶意软件本身就位于假的msimg32.dll库中:

4.png

TeamSpy的隐藏过程

通常当你安装TeamViewer时,会看到一个带有ID和密码的GUI窗口,但对于攻击者来说,他们需要知道是否要远程连接到攻击目标的计算机:

5.png

如果TeamSpy成功感染了用户,则不会显示任何内容,因为所有操作都是在后台运行的,因此攻击目标不会注意到安装了TeamViewer。这是通过挂接许多API函数并改变其行为来实现的。 TeamSpy挂接了以下近50种不同的API:

kernel32.dll

CreateMutexW, CreateDirectoryW, CreateFileW, CreateProcessW, GetVolumeInformationW, GetDriveTypeW, GetCommandLineW, GetCommandLineA, GetStartupInfoA, MoveFileExW, CreateMutexA

user32.dll

SetWindowTextW, TrackPopupMenuEx, DrawTextExW, InvalidateRect, InvalidateRgn, RedrawWindow, SetWindowRgn, UpdateWindow, SetFocus, SetActiveWindow, SetForegroundWindow, MoveWindow, DialogBoxParamW, LoadIconW, SetWindowLongW, FindWindowW, SystemParametersInfoW, RegisterClassExW, CreateWindowExW, CreateDialogParamW, SetWindowPos, ShowWindow, GetLayeredWindowAttributes, SetLayeredWindowAttributes, IsWindowVisible, GetWindowRect, MessageBoxA, MessageBoxW

advapi32.dll

RegCreateKeyW, RegCreateKeyExW, RegOpenKeyExW, CreateProcessAsUserW, CreateProcessWithLogonW, CreateProcessWithTokenW, Shell_NotifyIconW, ShellExecuteW

iphlpapi.dll

GetAdaptersInfo

其中有一些挂接会阻止应用程序访问某些特定资源,例如如果RegCreateKey或RegOpenKey尝试访问Software  TeamViewer注册表项,则会返回错误代码ERROR_BADKEY:

6.png

挂接GetCommandLine使得TeamViewer认为它是以预定义的密码开始的,而不是随机生成的密码,TeamViewer用户通常可以通过添加命令行参数将此密码设置为任意值:

7.png

挂接 SetWindowLayeredAttributes将TeamViewer窗口的不透明度设置为0(指令PUSH 0),根据MSDN文档,该视图的含义如下:“当bAlpha为0时,窗口是完全透明的。当bAlpha为255时,窗口是不透明的:

8.png

挂钩CreateDialogParam会阻止一些恶意软件创建不需要的对话框,用户可以在文件TeamViewer_Resource_en.dll中查找这些对话框,它们以10075的数字引用,如下图所示:

9.png

在ShowWindow的情况下,它定义了它自己的nCmdShow参数范围4d2h-10e1h。如果其他值超过这个范围,则不会发生任何进程:

10.png

其中最有趣的挂钩便是CreateWindowEx API。通过一系列类名检查,我发现它属于TeamViewer聊天窗口的窗口和其他窗口控件。在WinSpy ++等工具的帮助下,即使特定进程的所有窗口被隐藏,我们还是可以看到这些窗口的。从下图可以看出,有一个ControlWin窗口,它有几个TVWidgets。TvWidget是一个TV常用效果控件,包括焦点、边框处理等, 它有两个ATL:????????文本编辑,一个用于聊天消息历史,一个用于新的聊天消息,还有一个组合框,具有聊天参与者的下拉列表和按钮发送。 “消息01”代表聊天中收到的消息,“消息02”代表在点击“发送”按钮后发送的消息。聊天窗口无法正常显示,因为恶意软件在后台运行,但是可以修复恶意软件,从而不会发生隐藏窗口:

1492663598555264.png

下面的代码片段显示了恶意软件是如何获取这些窗口控件的句柄的, GetWindowLong,CallWindowProc,SetWindowLong与nIndex = GWL_PROC用自定义窗口过程替换了聊天历史文本编辑窗口过程的旧地址:

12.png

自定义窗口过程会监听传入消息,并且基于窗口消息id,它会发送新消息或等待来自C&C服务器的回复,直到EM_SETCHARFORMAT消息的出现。

下图显示了恶意软件是如何发送新消息,恶意软件首先将重点放在使用WM_SETFOCUS的新消息文本编辑中,然后通过WM_SETTEXT设置新消息编辑文本,最后通过发送BM_CLICK点击“发送”按钮:

13.png

上述50个API中的大多数都使用了类似的修改,其中有一些补丁很简单,只有几个指令,单还有一些补丁是非常复杂的,如CreateWindowEx。我不会在这里一一列举,但是最终的结果表明,TeamViewer的窗口是绝不会让受害者看见的,它只存在与系统的后台。

TeamSpy的配置文件

TeamSpy的配置存储在tvr.cfg文件中,它使用简单的自定义加密算法,可以在下图中看到。它读取输入文件并使用密码“TeamViewer”,该算法运行两个计数器,cnt1(0.v.tvr.cfg中的字节数)和cnt2(0..length的密码)。它需要一个来自密码的字节,加上乘法cnt1 * cnt2的结果。这些密码会通过异或,产生一个字符,并且在循环结束时,它与来自配置文件的相应字节进行异或,配置文件中的所有字节都重复这些步骤:

14.png

解密的配置文件可以在下图中看到,参数的名称大多是自我说明的。对我来说最重要的是密码(受感染的机器具有密码“superpass”)和server1,其中感染的设备ID已过滤了:

15.png

受感染的设备和C&C服务器之间的通信是在感染过程开始后才建立的,之后便会定期发送以下请求,大多数参数的名称可以清楚地推导出来:

16.png

id = TeamViewer ID,网络犯罪分子需要这个id,它与密码一起就足以远程连接到受感染的计算机
tout = timeout
idl =空闲时间
osbt = 32bit / 64bit
osv = OS版本
osbd = OS构建版本
ossp = service pack
tvrv = TeamViewer版本
uname =用户名
cname =计算机名称
vpn =有TeamViewer vpn
avr =防病毒解决方案

当我在网络浏览器中打开C&C服务器时,就可以看到登录页面。

通信插件

受感染的计算机是通过TeamViewer控制的,攻击者可以连接到远程计算机,因为他们已经知道了TeamViewer的ID和密码,或者他们可以通过TeamViewer聊天发送命令,这样就可以在受感染的机器上做任何事情。通过TeamViewer聊天的通信可以实现基本的后门功能:applist,wcmd,ver,os,vpn,locale,time,webcam,genid。在TeamSpy代码中,这些命令与它们的crc32校验和进行比较,所以很容易发生冲突。因为crc32(wcmd)= 07B182EB = crc32(aacvqdz),这两个命令都是可互换的:

17.png

17.1.png

攻击者使用TeamViewer的合法VPN加密流量,使其与合法的TeamViewer流量无法区分。一旦设备受到感染,他们就可以完全访问计算机。他们可以窃取和渗透敏感数据,下载和执行任意程序等等。

不得不说,滥用合法应用程序是一个聪明的技术,因为并不是每个用户都会检查所有DLL库在同一目录的合法性。检查主可执行文件的签名没有显示任何可疑的内容,可能让受害者认为一切都是正常的。详细情况,请参考下面的main_w32.exe文件的数字签名,这个文件就不是恶意的。

18.png

安全专家发现,目前除了TeamSpy外,已有越来越多的恶意软件类开始滥用TeamViewer。

源链接

Hacking more

...