深入了解恶意软件如何滥用TeamViewer?
本帖最后由 刘看山 于 2017-5-16 15:49 编辑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文件,打开附件后,将出现以下内容:
当攻击目标启用宏时,感染过程就会开始,这一切都会在后台完全运行,因此受害者不会发现任何攻击征兆。但如果让安全人员来查看这些恶意宏,他们就可以看到经过混淆的字符串,这些经过修改的字符串通常会分割成一个或多个子串,这些子串最后又能被连接起来。最重要的信息,我在下图已用红色圈出来了,并且是一个链接,攻击者可以通过这个链接下载攻击程序以及稍后使用的密码:
该链接disk.karelia.pro是用于上传和共享文件的合法的俄罗斯服务,虽然下载的附件是PNG,但它实际上是一个EXE文件,更具体地说,它是一个受密码保护的Inno安装程序:
在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库中:
TeamSpy的隐藏过程
通常当你安装TeamViewer时,会看到一个带有ID和密码的GUI窗口,但对于攻击者来说,他们需要知道是否要远程连接到攻击目标的计算机:
如果TeamSpy成功感染了用户,则不会显示任何内容,因为所有操作都是在后台运行的,因此攻击目标不会注意到安装了TeamViewer。这是通过挂接许多API函数并改变其行为来实现的。 TeamSpy挂接了以下近50种不同的API:
kernel32.dllCreateMutexW, CreateDirectoryW, CreateFileW, CreateProcessW, GetVolumeInformationW, GetDriveTypeW, GetCommandLineW, GetCommandLineA, GetStartupInfoA, MoveFileExW, CreateMutexAuser32.dllSetWindowTextW, 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, MessageBoxWadvapi32.dllRegCreateKeyW, RegCreateKeyExW, RegOpenKeyExW, CreateProcessAsUserW, CreateProcessWithLogonW, CreateProcessWithTokenW, Shell_NotifyIconW, ShellExecuteWiphlpapi.dll
GetAdaptersInfo其中有一些挂接会阻止应用程序访问某些特定资源,例如如果RegCreateKey或RegOpenKey尝试访问Software TeamViewer注册表项,则会返回错误代码ERROR_BADKEY:
挂接GetCommandLine使得TeamViewer认为它是以预定义的密码开始的,而不是随机生成的密码,TeamViewer用户通常可以通过添加命令行参数将此密码设置为任意值:
挂接 SetWindowLayeredAttributes将TeamViewer窗口的不透明度设置为0(指令PUSH 0),根据MSDN文档,该视图的含义如下:“当bAlpha为0时,窗口是完全透明的。当bAlpha为255时,窗口是不透明的:
挂钩CreateDialogParam会阻止一些恶意软件创建不需要的对话框,用户可以在文件TeamViewer_Resource_en.dll中查找这些对话框,它们以10075的数字引用,如下图所示:
在ShowWindow的情况下,它定义了它自己的nCmdShow参数范围4d2h-10e1h。如果其他值超过这个范围,则不会发生任何进程:
其中最有趣的挂钩便是CreateWindowEx API。通过一系列类名检查,我发现它属于TeamViewer聊天窗口的窗口和其他窗口控件。在WinSpy ++等工具的帮助下,即使特定进程的所有窗口被隐藏,我们还是可以看到这些窗口的。从下图可以看出,有一个ControlWin窗口,它有几个TVWidgets。TvWidget是一个TV常用效果控件,包括焦点、边框处理等, 它有两个ATL:????????文本编辑,一个用于聊天消息历史,一个用于新的聊天消息,还有一个组合框,具有聊天参与者的下拉列表和按钮发送。 “消息01”代表聊天中收到的消息,“消息02”代表在点击“发送”按钮后发送的消息。聊天窗口无法正常显示,因为恶意软件在后台运行,但是可以修复恶意软件,从而不会发生隐藏窗口:
下面的代码片段显示了恶意软件是如何获取这些窗口控件的句柄的, GetWindowLong,CallWindowProc,SetWindowLong与nIndex = GWL_PROC用自定义窗口过程替换了聊天历史文本编辑窗口过程的旧地址:
自定义窗口过程会监听传入消息,并且基于窗口消息id,它会发送新消息或等待来自C&C服务器的回复,直到EM_SETCHARFORMAT消息的出现。下图显示了恶意软件是如何发送新消息,恶意软件首先将重点放在使用WM_SETFOCUS的新消息文本编辑中,然后通过WM_SETTEXT设置新消息编辑文本,最后通过发送BM_CLICK点击“发送”按钮:
上述50个API中的大多数都使用了类似的修改,其中有一些补丁很简单,只有几个指令,单还有一些补丁是非常复杂的,如CreateWindowEx。我不会在这里一一列举,但是最终的结果表明,TeamViewer的窗口是绝不会让受害者看见的,它只存在与系统的后台。
TeamSpy的配置文件
TeamSpy的配置存储在tvr.cfg文件中,它使用简单的自定义加密算法,可以在下图中看到。它读取输入文件并使用密码“TeamViewer”,该算法运行两个计数器,cnt1(0.v.tvr.cfg中的字节数)和cnt2(0..length的密码)。它需要一个来自密码的字节,加上乘法cnt1 * cnt2的结果。这些密码会通过异或,产生一个字符,并且在循环结束时,它与来自配置文件的相应字节进行异或,配置文件中的所有字节都重复这些步骤:
解密的配置文件可以在下图中看到,参数的名称大多是自我说明的。对我来说最重要的是密码(受感染的机器具有密码“superpass”)和server1,其中感染的设备ID已过滤了:
受感染的设备和C&C服务器之间的通信是在感染过程开始后才建立的,之后便会定期发送以下请求,大多数参数的名称可以清楚地推导出来:
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),这两个命令都是可互换的:
攻击者使用TeamViewer的合法VPN加密流量,使其与合法的TeamViewer流量无法区分。一旦设备受到感染,他们就可以完全访问计算机。他们可以窃取和渗透敏感数据,下载和执行任意程序等等。不得不说,滥用合法应用程序是一个聪明的技术,因为并不是每个用户都会检查所有DLL库在同一目录的合法性。检查主可执行文件的签名没有显示任何可疑的内容,可能让受害者认为一切都是正常的。详细情况,请参考下面的main_w32.exe文件的数字签名,这个文件就不是恶意的。
安全专家发现,目前除了TeamSpy外,已有越来越多的恶意软件类开始滥用TeamViewer。本文翻译自:A deeper look into malware abusing TeamViewer ,如若转载,请注明来源于嘶吼: 深入了解恶意软件如何滥用TeamViewer? 我一直在用teamviewer远程控制,流畅速度又快,我电脑上没啥好东西,如果有,就是100多G的国产资源{:1_903:} 后门这么就轻易找到了,很是吓人 可以说teamviewer被玩坏了。 xt800呢。? 好可怕,我就经常用TeamViewer。。。 这个有点意思,谢谢分享 TeamViewer真是不错的软件啊,但是被利用了 每个软件其实都有漏洞 有才有才,学习学习