摘要: 内存马其实由来已久,早在十几年前,内存马的技术雏形就已经在Windows平台出现,以线程注入为代表的这一类技术,通过将木马注入到系统进程和删除自身进程的方式,来躲避杀毒软件的查杀和实现自身的隐藏。 随着技术的发展,攻击目标的变迁,内存马也渐渐在不同的层面获得...
内存马其实由来已久,早在十几年前,内存马的技术雏形就已经在Windows平台出现,以线程注入为代表的这一类技术,通过将木马注入到系统进程和删除自身进程的方式,来躲避杀毒软件的查杀和实现自身的隐藏。
随着技术的发展,攻击目标的变迁,内存马也渐渐在不同的层面获得了发展,攻击范围涵盖操作系统脚本、进程,Java容器和Web服务程序等,攻击方式多变且复杂。
由于内存马删除自身并且在内存中驻留隐藏的特点,具有很高的隐蔽性,检测难度极高。因此,如何快速和准确的检测出服务器中是否被植入内存马,对信息系统的安全来说至关重要。
定义
内存马是指一种只在内存中运行,没有文件落地或者运行后能够删除自身的木马。
特点
无逻辑结构边界,难以被发现。
内存马仅存在于进程的内存空间中,通常与正常的的代码、数据混淆。
缺乏稳定的静态特征,难以被识别。
内存马缺乏结构化的静态形式,它依附于进程运行期间的输入数据,数据可能被加密混淆,因此,无法通过内存马本身的特征识别。
种类多,检测机制复杂而多样。
内存马有二进制代码片段(Shellcode)、PowerShell脚本、Web中间件等类型,每种类型又可细分,不同类型内存马的执行方式、恶意代码触发机制各不相同,导致检测方式多样。
分类
当前主流的内存马攻击通常发生在操作系统脚本和进程、Web服务程序及Java容器中:
针对操作系统
针对操作系统的内存马主要有如下两类 : [1]
PowerShell、WMI、VBA、JS、VBS等类型的脚本攻击,它们会依托系统的一些白程序或工具,通过这些白程序或工具在内存中执行脚本程序。
二进制Shellcode攻击,这类攻击会通过控制程序执行流让Shellcode获得执行机会,Shellcode在磁盘中没有文件跟它对应,只在内存中存在。
针对Web服务程序
针对Web程序的内存马根据开发语言不同有多种如PHP内存马、ASP内存马、Python内存马等
针对Java容器
Java内存马根据实现技术可以分为以下三种类型:Servlet-api类、Spring类、和Instrumentation类
检测方法
可利用内存安全保护技术,结合Hook技术,在VM层部署监控模块,通过VMM层和部署在VM层的监控模块截获系统底层信息和应用层信息,建立一个有限状态自动机,对虚拟化层和应用层的行为生成状态机。最后对程序进行监视,通过状态机的状态比对方式发现异常,识别内存马攻击。