网络安全 频道

恶意软件通过鼠标功能逃避检测

  【IT168技术】恶意软件开发者继续部署“聪明的”防护程序,这些程序通过隐藏在操作系统例程后面来躲避自动检测,但与此同时,恶意软件用于保持隐蔽的相同方法也可能用于标记出恶意代码。

  赛门铁克研究人员最近发现了一种远程访问木马(RAT),这种木马能够通过隐藏在与外部设备(例如鼠标)通信的例程背后来逃避检测,它能够逃避检测是因为:当鼠标不使用时,恶意代码保持非活动状态,这样就能够逃避虚拟环境中动态分析系统的检查。

  赛门铁克的Hiroshi Shinotsuka写道:“如果恶意软件能够躲过自动威胁分析系统的检查,它就可以混在数百万的示例文件中,这样防病毒应用将无法发现它是恶意软件。因此,恶意软件和包装程序作者都试图利用这种技术,来使恶意文件逃避自动威胁分析系统的检测。”

  Shinotsuka解释说,此类型恶意软件逃避检测能力的关键在于利用系统范围内的“挂钩”,即消息处理机制,该机制允许鼠标驱动程序等应用安装一个子例程来监测等待被激活的系统消息流量。赛门铁克发现的这个恶意软件利用了一个“等待挂钩”,在使用鼠标导致的激活之前,它都保持休眠状态。

  KNOS项目联合创始人兼架构师Kevin McAleavey表示:“问题是,恶意软件开发者利用各种系统“挂钩”已经多年,动态分析系统应该早就设计好弥补这个威胁检测中的盲点。赛门铁克所指的系统范围内的挂钩早已过时,自动分析系统早就应该进行检测,同时检测合法程序试图对任何挂钩的使用。”自1996年以来,McAleavey就一直活跃在反恶意软件研究和安全产品开发。

  这个问题归结到底是人力资源的问题。由于每天平均出现一百万个新恶意软件变种,我们不可能手动检查每个样本的功能以评估哪个样本应该被放入防病毒软件进行分析,所以,我们需要自动化威胁分析系统来以更有效地方式来分析代码行为。

  由于自动检测可能无法识别像赛门铁克发现的RAT这样的恶意软件,McAleavey认为,任何使用“挂钩”的应用都应该被标记,并进行手动分析,但目前杀毒行业已经不堪重负,具有恶意软件分析专业技能的人员十分短缺,他们根本没有时间来手动分析这些代码,因此这不可能实现。

  微软公开发布的MSDN文档中详细地列明了各种“可挂钩”Windows事件。例如,McAleavey指出了有“等待挂钩”的各种事件,恶意软件设计者可以用它们中任何一个激活以下代码:

  • WH_CALLWNDPROC -等待特定消息从一个窗口传递到另一个窗口

  • WH_CBT –这很过时了,它支持“计算机辅助培训”,并被用于击键记录/回放宏

  • WH_GETMESSAGE –检索鼠标、键盘或者任何其他系统输入

  • WH_KEYBOARD –键盘挂钩,键盘记录器的首选攻击因子

  • WH_MOUSE –鼠标挂钩,赛门铁克指的就是这个

  • WH_MSGFILTER –检测对按钮、菜单或者其他Windows功能的触动

  • WH_DEBUG –可能触发调试器的任何溢出

  McAleavey解释说,上面列出“挂钩”函数只是少数可供利用的“调试”函数,例如能够检测机器是否在虚拟模式下运行,检查防病毒软件是否为了检测插入其自己的挂钩,以及是否彻底检测到转移程序到独立的恶意DLL以控制病毒感染。WH_DEBUG挂钩控制对所有对其他WH挂钩的访问,并能中断任何其他挂钩,(例如)检查这些挂钩是否应该继续或者采取其他行动来取代原有函数。这也是恶意软件如何检测防病毒软件是否正在监控其他挂钩,如果是这样的话,就能够逃避检测。

  McAleavey认为微软调试函数的问题出现在零售版本的操作系统中。微软已经提供了其所有操作系统的开发者版本,其中包含大量调试功能和调试符号以用于为Windows平台编写软件,所以这些函数不必出现在零售版本中。结果是,微软的调试函数总是被恶意软件用来隐藏自己。分析师做的第一件事情是检查任何样本的函数调用,以检测是否有任何调试调用,然后仔细地跟踪它们。让我非常惊讶的是,自动系统没有对另一个调试调用做出任何标记。”

  由于每个调试功能都是被枚举,并列在所有可执行文件中,任何自动系统应该可以很容易地在提交的样本中发现它们的存在并采取行动。对程序中调试挂钩的任何调用都会让调用在程序本身中变得可见,所以任何自动分析系统都可能发现对SetWindowsHookEx的调用,并标记它以进一步分析。这些调用没有隐藏,它们在被分析的样本中,因此,所有自动系统需要做的是,在扫描文件时匹配字符。

  McAleavey说:“我们长久以来忽略它们的存在,这似乎有些违反常识。在没有特定理由的情况下,合法软件不应该会进行这种调试呼叫,当检测到这种函数时,应该立即对未知可执行文件进行标记,直到证明其‘清白’之前,都应该保持标记。”

1
相关文章