【51CTO.com快译】多数恶意软件的开发者,为编写复杂的代码花费了很多的时间与精力。他们的成功,作为威胁长期未被检测出,能够规避于沙盒的解析、反病毒对策、以及恶意软件的解析人员。该文章主要介绍了回避检测的恶意软件的机制。
恶意软件若容易被检测到的话,便没有了使数据盗取影响最大化的时间。IT安全市场逐渐成熟,现在的安全对策工具和应用程序的性能都非常高。但是,攻击者了解安全工具的运作并持续监视。另外,企业和组织也不一定做到最佳的安全级别。恶意软件对策工具没有及时更新的情况有很多,也存在因沙盒设置错误造成易被检测的情况。
恶意软件自身的防御功能
恶意软件为了回避检测和解析利用了多种机制。机制的技术大致分为以下三大类别。
- 防病毒工具:为了回避病毒对策、防火墙、保护环境的其他工具的检测而被使用。
- 防病毒沙盒:进行自动解析功能的检测,为回避恶意软件的动向报告引擎而被使用。
- 反病毒分析:检测恶意软件的解析者,为诈骗而被使用。例如,为了回避反向工程,在检测Process Explore、Wireshark等监视工具的同时,利用一些过程监视的手法、Packer等。
这三类都共同的恶意软件技术也有几个。使用RunPE等的技术的话,恶意软件可以回避病毒对策软件、沙盒、以及解析者。
沙盒的回避
沙盒是迅速检测恶意软件的有效工具,但是不适当地构成的话,反而会被恶意软件简单地检测出来。恶意软件通常需要实施以下几点基本的检查。
MAC地址的检测:VMware、VirtualBox等虚拟环境中已知的MAC地址被使用。该地址是经常保存至注册表的以下地方
(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0000\NetworkAddress)。恶意软件可要求registry key 或使用GetAdapterInfo API两者任选其一的方法检测MAC地址。
过程检测:恶意软件可检测与沙盒相关联的动作过程的存在。例如,VmwareService.exe等过程的情况下,使用Create ToolHelp32Snapshot API 抓拍动作过程,使API函数的Process32 First和Process32 Net抓拍的各过程做成一览表,便于检测。
注册表的检测:恶意软件可检测的系统注册表项是在虚拟环境下制作的。以下的注册表虽然内容并不完整,但是是恶意软件可能检测的注册表项一览。
另外,恶意软件存在使用以下几个高技术检测沙盒的情况。
钩子(Hook)函数的检测:钩子函数是改变OS和应用程序内部函数行为的基本技术。沙盒是使用钩子技术进行样品举动的变更。例如、在DeleteFile函数中设置钩子,恶意软件会试图删除被沙盒捕捉的文件。这类函数被放置于内存上(内核空间)的特定地方。
恶意软件也存在通过检查调用函数的地址来检测钩子的情况。例如,被返还的地址不存在内核中,表明现在该函数被挂钩。
恶意软件使用硬件的尺寸检查和特殊命令等其他手法,可检测特定的登记。事实上,这些技巧在机器上的注册是一致化的,在虚拟环境中需要重新配置。
病毒对策的回避
病毒对策工具的基本功能是署名、扫描、探索。
·署名可回避样品哈希值的变更。这是非常简单的,只需要变更执行文件的1个字节便可实现。
·扫描是制作一个大的文件,通过仿真器造成混乱来回避。
·探索分析是较复杂的,但可通过使背后的函数挂钩来回避。
恶意软件为了回避病毒对策工具的其他方法是工具的无效化或者追加例外情况。多态病毒代码的检测是特别困难的。
Anti-debug
解析代码时,恶意软件解析人员往往需要深入调查。Anti-debug是回避调试程序逆向工程的其他技法。使用Windows API的话,比较容易检测调试程序的存在。
IsDebuggerPresent函数:这个函数是检测PEG(Process Environment Block)结构中的特定状态IsDebugged,调试过程没有被执行的情况下,回复0;调试程序未被连接时,回复0之外的。
FindWindow函数:该函数能够从名字和Class来检索窗口(例如:OllyDbg),也能够检测Wireshark和Process Explorer等工具。
CsrGetProcessId函数:这个函数能够检索系统进程中csrss.exe过程的ID。默认过程的访问令牌SeDebugPrivilege权限是无效的。但是,OllyDbg和WinDbg等调式程序被加载的话,SeDebugPrivilege权限会被有效化。csrss.exe被打开即意味着过程的访问令牌权限为SeDebugPrivilege,对象过程被推测为调试程序。
Anti-disassembly
Anti-disassembly是回避逆向工程解析的不同手法。有多种Anti-disassembly的妨碍方法,具体如下:
- API难读化时,能隐藏特定函数的调用。例如,不使用API函数名称调用函数,解析人员为了把握被利用的函数有必要进行逆向工程。这个操作很费时间。
- 插入JAN代码:恶意软件中插入JAN代码来欺骗解析人员,不使用的代码可以使逆向工程更加耗时。由于JAN代码完全不会被执行,Sample完全不会有变化。
关于Unprotect Project
回避恶意软件解析的方法有很多,这些技巧中被公开的有几项。Unprotect project是结合恶意软件的保护与自己防御一览化公开的Wiki。这个项目为促进对恶意软件保护功能的理解,在技术一览表中加载了思维导航。
这个项目的目标是为了在社区中使病毒检测功能停滞、迂回安全保护政策,回避解析的恶意软件所使用的技术被深入理解,这个网站有如下的内容。
- 沙盒的回避技巧:回避沙盒解析
- 病毒对策的回避技巧:回避病毒对策的检测
- 反调试的技巧:欺诈调试程序、回避解析
- 反反汇编:回避使用反汇编工具的逆向工程,以及理解恶意软件的举动
- 过程的圈套:系统上隐藏恶意软件,回避检测。难读化与数据编码:隐藏一部分恶意软件中的数据或代码。
·压缩软件:保护恶意软件的代码以及追加其他回避功能。
Wiki将持续更新。
总结
恶意软件的回避检测技术持续进化着,理解这些技术,并在信息安全社区共享经验是战胜恶意软件最有效的方法。
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】