饱受无文件攻击之苦?一文详解内存马攻击防范关键点
如果说Webshell是shell中的幽灵,那么内存Webshell就是幽灵中的王者。
传统的Webshell不管如何衍变,有着怎样的隐藏方式,但都脱离不开文件的范畴。既然是文件,就存在被检测到的可能,所以目前主流产品针对Webshell的静态检出率都在90%以上,而OneEDR搭载的基于机器学习训练成果的Webshell引擎则能实现高达99%以上的检出率。
目前主流的安全解决方案大多都针对文件检测,如果木马不落盘(只在内存运行),(硬盘)没有文件,虽然有一些开源的检测方法和工具,但对安全人员的技艺要求较高,很难被更多的用户使用,导致内存马的检出、清除难度都大幅上升,同时内存马在使用上逐渐趋于“平民化”,多方面的因素让无文件攻击逐渐成为网络攻击的一大主要方式。为了贴近实战,各种网络攻击演练也与时俱进,内存马的使用与防御成为攻守双方争夺的焦点,往往成为“获胜”的关键点之一。
据Ponemon Institute发布的网络安全报告中显示,2018年仅有35%属于无文件攻击手段。而到2020年,据Dynatrace不完全统计,被发现的勒索病毒攻击成功的事件中,有超过80%是通过无文件方式完成的。同年新增的大部分新型勒索病毒样本也大多采用了无文件技术。2021年,在微步在线参与的一系列攻防演练中,无文件攻击几乎场场不落,成为攻方首选的攻击方式。
无文件攻击的手法复杂多样,有利用Windows PowerShell,有针对BIOS和硬盘启动扇区的,也有通过网络IO向内存注入Shellcode的……具体可参见下图对无文件攻击的分类(来自微软):
无文件恶意软件分类示意图(来自微软),微软将无文件恶意软件分为无执行文件活动(No file activity performed)、间接文件活动(Indirect fileactivity)与需要操作文件(files required to operate)等三类
无文件攻击之追根溯源
尽管无文件恶意软件多种多样,但绝大多数以内存Webshell为主,这之中又有80%是Java web内存马。究其原因,Java是市场上最主流的(中间件)应用之一,而Java web内存马又具有Webshell易于使用的特点(尤其是与哥斯拉、冰蝎等恶意软件组合使用)。
内存Webshell的分类,其中Java类无文件攻击是最主流使用的方式
Webshell在入侵方面有着非常“悠久的历史”和 “成熟的经验”(详见《Shell中的幽灵?OneEDR用机器学习让Webshell无处遁形》),而Java平台作为最流行的(中间件)应用,在维护和管理方面有着很好的体验,但也在无形中增加了被攻击的风险。
如上图所示,针对Java平台应用的攻击主要有Servlet-API、基于Spring等特定框架,以及Java Agent等三类,以Java Agent类型为例,主要利用JVMTI(JVM Tool Interface)接口,这是JVM对外提供的Native编程接口,可以通过JVMTI使得一些外部进程获取JVM运行时的各种信息。
而Java Agent本质上可以理解为一个Jar包,利用JVMTI编写并加载目标进程中进行数据获取传输等功能:
- 在JDK 1.5之前,Java Agent的编写只能通过Native代码实现,较为繁琐;
- JDK 1.5版本提供了Instrument接口,可以编写Agent;
- 在JDK 1.6之前,Instrument只能在Java程序刚启动加载类时生效;
- 从JDK 1.6开始,Instrument开始支持在程序运行时动态修改类,让程序拥有很强的动态性。同时Instrument还提供了类修改接口ClassFileTransformer,通过实现该接口即可动态修改类。
Java版本的不断升级,Instrument接口给易用性和可维护性带来了极佳的体验,但如同Webshell那样,无形中也给网络攻击提供了便利,尤其是与哥斯拉、冰蝎等恶意软件组合使用,给企业安全带来了极大的挑战。
Java平台无文件攻击的传统疗法
所谓“魔高一尺道高一丈”,既然针对Java平台的无文件攻击有泛滥趋势,那么检测等反制手段也必然出现。目前,常见的开源内存马检测手段大致可分为两种:
一种是比较温和地利用中间件热部署特性将检测代码加载到服务的JVM中,用以检测Tomcat、JBoss、WebLogic等主流的具有热部署特性的Java Web中间件,比如著名的C0ny1大神开源的java-memshell-scanner工具,就是通过一个jsp脚本来扫描Java Web中间件中Filter,Servlet和Listener组件。
另一种是利用比较通用的Java Instrument接口,动态地利用Agent技术,将检测的jar包attach到目标JVM中,检测加载到JVM的类是否异常。其中LandGrey大神主导的copagent项目就用到这种方式,这也是目前较为主流的检测方式。
但是,这种检测方式非常依赖安全人员的判断,在选择对哪些类进行检测,将直接影响检测结果;但如果检测全部的类,则耗时长且对JVM性能有影响。
这对使用者来说,有较高的技术门槛,很难大规模普及,这也是导致无文件攻击日益泛滥的原因之一。但有攻必有防,沿着前人探索的无文件攻击检测之路,新的方式方法也开始出现,比如微步在线的OneEDR产品,目前已经集成了针对Java平台的内存马检测,通过与微步在线领先的威胁情报能力结合,极大地提高了内存马的检出率。
OneEDR增加无文件攻击检测能力
OneEDR是微步在线推出的一款专注于主机入侵检测与响应的新型终端安全防护平台,通过轻量级的终端Agent收集终端的进程、网络、文件等系统行为日志,在服务端利用威胁情报,文件检测引擎与全攻击链路行为分析等技术手段,实现对主机入侵的精准发现、自动化告警关联、攻击链路可视化展示与高效溯源、入侵事件响应及阻断等功能,同时支持对终端海量行为日志进行灵活检索。
OneEDR内集成了12款自研引擎(🤔🤔🤔),针对进程、网络和文件等各种网络攻击手段均有很好的检出率,在最新的OneEDR 2.5版本中还升级了基于机器学习成果的Webshell引擎和Linux ELF文件引擎,将这两类恶意文件的检出率提升到99%以上。
针对日渐频繁的无文件攻击方式,作为一款主机检测产品,这是OneEDR必须要面对的难题。OneEDR团队针对过去几年中大量的无文件攻击案例进行分析表明,在所有的无文件攻击中,Java web内存马是使用最频繁的,同时,也是利用最成熟的攻击方式,企业一旦“中招”,几乎不可避免地会造成经济损失。
Java web内存马通常使用Java Agent技术——也就是利用Java Instrument接口进行编程——这项技术的初衷是为了让Java用户拥有更佳的使用和管理体验,但被网络攻击者利用,成为攻击突破口。OneEDR团队认为,同样也可“以彼之道还施彼身”,利用Java Agent技术来实现对正在运行的JVM进行全方位“体检”,并可实时针对可疑的高危Class进行更细致的检查。
OneEDR图形控制台,针对内存马检测工具使用难的问题,OneEDR开发了更加便于使用的图形控制台
OneEDR针对Java平台内存马的检测结果
OneEDR针对检出的内存马会提供详细信息,以方便安全人员进行处置
通过总结前人经验,并与微步在线强大的威胁情报能力相结合,OneEDR在内存马检出方面有着极高的检出率。