“道高一尺,魔高一丈”,检测恶意软件的新战术和技术正在兴起,但高级黑客也正在使用高级的掩盖方法避免他们的恶意软件被发现。
1. 反-反汇编和调试器(保护器)
恶意软件作者知道恶意软件研究人员的工作路数,以及他们用以狩猎威胁的工具。比如说,研究人员和程序员通常会用反汇编程序和调试器,来找出某段代码的作用。
有很多工具和技术都可以检测反汇编程序和调试器,包括内置的Windows功能。此类技术的设计目的,大多是辅助对抗盗版——盗版商会用这些工具破解版权保护的软件。
不幸的是,恶意软件作者也会用同样的技术,来探测自身程序是否运行在恶意软件分析师的电脑上。如果恶意软件检测到这些工具,他们就可以停止运行或者改变自身行为,让分析师的工作难以开展。
2. rootkits
在最高层级,rootkit是一系列工具或技术的集合,可让恶意软件潜入系统深层,对操作系统不可见。计算机处理器有不同层次的执行权限(ring 0-3),攻击者可利用这些权限层次来玩弄运行在高层的程序。
例如,Windows和Linux之类的操作系统,有用户空间和内核空间之分。在最高层,你只需要知道内核空间(ring0)比用户空间(ring3)权限高就行了。如果你有个程序需要列出目录中的文件列表,你可以调用用户空间函数来做这事,但调用内核函数同样可以。
如果恶意程序获得内核权限,就可以“欺骗”运行在用户空间的程序。因此,如果某程序以用户空间函数调用来扫描文件系统,内核rootkit就可以在它解析文件的时候欺骗之。在该用户空间函数扫描到恶意文件的时候,rootkit可以骗它说,“这些不是你要找的文件”,或者更具体讲,就是简单地绕过这些文件,不将它们作为该用户空间程序的执行结果加以返回。更糟的是,虚拟化为rootkit欺骗添加了另一层保护,因为其运行在内核之下的管理程序比内核权限还高。
简言之,恶意软件有时候可以用rootkit功能对本地反病毒(AV)软件隐身——通过对操作系统本身隐藏文件、网络连接或其他东西。不过,大多数AV如今有自己的内核级驱动和防护措施,来避免常见的rootkit欺骗了。
3. 代码、进程和DLL注入
进程或动态链接库(DLL)注入,代表了可用于在另一个进程上下文中执行代码的一系列技术。恶意软件作者常利用这些技术,让自己的恶意代码在必需的Windows进程中执行。
比如说,他们可以注入到ex、、no或其他合法Windows可执行程序中。通过选择必备的Windows进程注入,恶意软件可让自身难以被AV软件检测查杀。通过勾住常规网络进程,恶意软件还可以隐藏掉其恶意流量。随时间逝去,微软已经修复了网络罪犯利用的诸多进程或代码注入技术,但研究人员和攻击者不断寻找出新技术,比如最近发现的AtomBombing内存注入技术。
恶意软件利用来逃避AV检测的方法还有一些,比如捆绑或附着到合法程序中,以及通过休眠以规避自动化分析的计时攻击。当然其他例子还有很多。
那么,反恶意软件程序是怎么检测或挫败这些规避的呢?不幸的是,没有简单的办法可以解决这个问题,技术军备竞赛仍在进行。不过,我们的AV武器库中确实有了一个很强大的武器——行为分析恶意软件检测。
很多规避技术,要么修改恶意软件代码以避免基于特征码的检测和静态分析,要么执行一些事后回想起来明显恶意的动作。但即便可以改头换面,所作所为还是改变不了的,至少只要恶意软件还想达成其感染计算机、创建后门或加密文件的目的,这些行为就不可少。因此,很多高级检测解决方案,便创建了基于行为来识别恶意软件的系统。
一般来说,这些解决方案创建一个表现得像是受害者计算机的“沙箱”,自带所有正常配套软件。当该系统收到新/可疑文件,便在沙箱环境中执行之,检查它们的行为。通过监视成百上千的已知恶意软件行为,包括已知规避技术,这些解决方案可以精准主动地报告可执行文件是否恶意。受到机器学习的进一步驱动,行为分析很可能就是恶意软件防御的未来,也是总体防御的未来。
尽管如此,网络罪犯也知道沙箱,其中包括(包括采用从CPU时序检查到查验已知注册表项等一系列技术)、或、甚至(即检查最近是否有人移动过鼠标,以确认主机是由人操作还是自动化的)。恶意软件一旦用这些技术检测到沙箱,就不执行恶意操作以规避分析。
而且,地下恶意软件卖家,已创建出可以检测某些沙箱的保护器。不过,一些高级检测解决方案也考虑到了这一点。它们不仅仅采用现成的虚拟化环境,而是使用全系统代码仿真,创建出可以看到恶意程序发往物理CPU或内存的每一条指令的沙箱环境。这一真正的可见性,让更高级的恶意软件解决方案,得以检测并消除掉恶意软件更为狡猾的某些沙箱规避技术。
恶意软件和安全厂商间的军备竞赛不会终结,通往更强大防御的第一步,就是学习黑客使用的最新骗术。网络罪犯绕过遗留AV解决方案偷渡恶意软件的手法不断创新,而行为分析正是现代安全防御中不可或缺的关键组件。