APP下载

基于RASP技术在容器环境的内存Webshell检测研究

2023-10-11姚纪卫

信息安全研究 2023年10期
关键词:漏洞内存容器

姚纪卫 王 伟 杨 芳

(安芯网盾(北京)科技有限公司 北京 100085)

近年来,随着新型基础设施建设的深入,企业数字化转型进一步加快,Docker作为一种内核轻量级的虚拟化技术,可以应用于软件开发、大规模集群管理和云计算等领域,而其简单、易用和轻量化的属性让越来越多的企业采用容器化部署模式,容器成为支撑应用运行的重要载体,容器安全也变得越来越重要.首先,容器直接运行在宿主机操作系统上容易出现逃逸风险;容器镜像也存在风险,镜像的构建和镜像中的软件存在被攻击风险.其次,容器和编排平台安全也存在挑战,包括组件漏洞威胁、集群化部署带来的横向移动攻击威胁等.此外,还有容器运行时安全也值得关注,一方面传统的攻击手段依然可以对容器造成威胁,另一方面集群API调用、特权容器等让容器面临更复杂的新型攻击.容器安全事件曾被多次曝出,如CVE-2019-14271,CVE-2019-5736,CVE-2020-15257,CVE-2022-0492等漏洞攻击.

本文所研究的方向是容器环境下的内存马攻击检测防护,内存马攻击本身的破坏力比较大,在容器环境下内存马攻击的危害会更严峻.传统安全更重视边界防护,传统主机安全防护能力难以在容器层发挥作用,而云原生容器安全更需重视运行时的整体安全防护,因此本文提出了一种基于RASP技术在容器环境下的内存马检测研究思路.

1 相关研究

1.1 容器安全

陈伟等人[1]认为容器安全风险包括容器镜像安全风险、容器虚拟化安全风险、容器网络安全风险和容器服务稳定性风险;刘晓毅等人[2]从容器云安全的国内外标准建设、容器云安全产品及容器云安全风险分析出发,提出了容器云安全防护体系的能力要求,认为创新有效的容器云安全防护思路、方法和手段比较少;郑尚卓等人[3]则提出了融合区块链技术在云端平台构建虚拟链,可以提取容器云运行过程中发生的网络安全事件链,优化安全管理框架;边曼琳等人[4]的研究证明Docker中部分伪文件系统没有实现隔离,因而容易造成宿主机信息泄露,引发恶意容器同驻、同驻容器DOS攻击等问题;崔轲等人[5]对容器安全风险进行分析后认为通过采用Logistic-ARMA预警模型和BERT序列标注,可以对OpenStack云平台下的DOS攻击、容器逃逸等恶意攻击进行有效监测.

1.2 内存Webshell

内存Webshell是一种无文件马,攻击方通过操纵漏洞利用程序、合法工具和脚本,可以破坏系统、提升特权或在网络上横向传播恶意代码,并在执行后采取尽量隐藏自身或清除自身的手段,使其难以被检测,以门户网站为例,其服务直接暴露在互联网环境,十分容易成为红队攻击目标,使用内存Webshell的攻击手段可以轻松绕过现有的安全防护体系,达成攻击目的.张金莉等人[6]提出一种基于RASP的动静态结合的高对抗内存型Webshell检测技术,其核心思路是基于RASP技术和文本特征的深度学习静态检测算法提高检测率.该方法存在的局限性在于强特征依赖,抗恶意代码变异的能力不佳,同时在容器环境下不适用.本文团队姚纪卫等人[7]在早前的研究中曾提出基于内存保护技术的方案可以较好地检测并防止内存Webshell攻击行为,其核心思路是通过监控内存访问和程序执行等行为并进行行为关联分析,以此判断内存访问行为及程序执行行为的合理性,识别出异常内存访问或恶意代码攻击行为.

1.3 RASP技术

近年来,Web应用层的对抗失衡问题愈演愈烈,Apache Log4j开源组件和Spring开源应用开发框架相继被曝出高危漏洞,其波及范围之广、危害之大引发各界对开源组件0Day漏洞的担忧.应用程序防火墙(Web application firewall, WAF)一直以来被认为是抵御Web攻击的有效防护手段,但是WAF在0Day防护上显得力不从心,应用运行时程序自保护(runtime application self-protection, RASP)的出现成为解决Web防护的新技术而迅速在业内推广.2012年,Gartner分析师Feiman[8]阐述了RASP是一种主要用于在应用程序内注入安全功能的技术,可以用于检测和防止应用程序级入侵.该技术结合多种安全技术的优势,在运行时对代码进行分析和采取行动实现对应用程序的自我保护.

在RASP技术应用方面,李佳文等人[9]、邱若男等人[10]的研究主要是基于RASP技术设计Java Web应用安全防护,李佳文等人[9]的检测研究思路结合了特征和行为检测,邱若男等人[10]将RASP探针植入到Java Web应用程序的服务器层、框架源码层、表达式语言层和JDK底层行为监控层,实现对Java Web框架漏洞的检测.沈伍强等人[11]则是通过RASP探针注入Web服务应用内部进行监测,基于KMP算法和过滤机制对SQL注入和XSS攻击等恶意攻击代码进行检测和防御.该方法的核心优势在于准确率高,但是可能存在性能损耗大和其他漏洞不适用情况.王奕钧[12]从“三化六防”的视角分析并总结了RASP技术在关键信息基础设施防护中的局限性,该技术对于漏洞检测、Webshell检测具有优势,但也不是万无一失的,如RASP技术在函数监控不全、函数参数混淆、loader型函数、LD_PRELOAD等方面的局限性明显,RASP技术的应用还有研究空间.

2 本文方法检测原理和模型方法设计

2.1 检测原理

从基于容器环境下的内存Webshell攻击原理和表现来看有2类攻击行为:一类攻击是先上传Webshell文件到目标容器或主机上,然后基于已经上传的Webshell文件建立与攻击者本地的加密连接,然后通过此连接注入内存马,注入完成后删除此Webshell文件;另一类攻击是先利用业务程序中加载组件的安全漏洞,如Log4j2组件的远程代码执行漏洞(CVE-2021-44832),然后利用此漏洞构造恶意请求直接注入内存马.在上述2类攻击行为中,攻击者可以使用Java Web容器自身的特性,如Java Web的Listener,Filter,Servlet组件提供的动态注入机制注入内存马,此时在Java线程的执行路径上可以看到关键函数被调用,如org/apache/catalina/core/ApplicationFilterChain类的internalDoFilter函数,也可以使用与编程语言和运行环境自身的特性,如Java Agent攻击,依赖jvm提供的Instrumentation机制,此时的关键被调用函数为java/lang/instrument/ClassDefinition类的init函数.此外,对于已经驻留的内存Webshell,其表现为有运行时的类元信息,但在磁盘上无对应的Webshell文件存在.从上述攻击行为特征来看,可以从如下维度进行内存Webshell的检测:1)从文件维度进行分析;2)从单次行为维度进行分析;3)从多次行为维度进行分析.

从攻击的过程来看,检测能力需要在如下关键时机点发挥作用:1)当检测程序运行时,需要检测目标Java进程是否已经被内存Webshell攻击过,主要判断JVM中是否有驻留的内存马;2)当检测程序运行时,同时需要分析当前Java进程是否有被内存Webshell攻击的风险,主要是对进程的软件成分和版本识别是否有漏洞存在;3)在检测程序运行过程中,需要实时检测是否有内存Webshell攻击发生,主要检测点有是否生成恶意Java Web组件,是否有敏感操作行为,是否有其他可疑行为;4)当疑似攻击已经发生时,需要详细记录攻击过程、请求信息、类文件等信息,及时进行告警,并协助进行溯源分析和风险消除.

基于上述分析维度和检测时机点,需要建设如下基础能力:1)Java Web进程工作目录Webshell文件检测能力;2)Java Web进程的软件成分分析能力;3)Java Web进程已加载类的Webshell检测能力;4)HTTP请求的调用链上下文提取技术;5)敏感操作的感知能力;6)攻击链检测和详细记录能力;7)容器运行时监控能力.

结合容器中Web应用自身的特点,设计方案时需要注意如下几点:1)能适配常见的容器类型和版本;2)能适配常见的Java Web中间件类型和版本;3)能在容器中直接部署,或者通过容器镜像部署;4)严格的性能损耗控制.

因此,设计方案的核心技术指标如下:1)已驻留内存Webshell检测能力;2)实时内存Webshell攻击检测能力;3)进程软件成分分析能力;4)Webshell文件检测能力;5)检测程序的性能以及对业务进程的性能损耗,包括CPU利用率和内存占用率.

2.2 模型方法设计

本文方案主要是为了解决容器环境下Web运行时安全问题,从静态资产和动态进程2方面进行防护:静态资产方面包括Web资产清点、Web后门检测;动态进程方面包括已驻留内存马的检测和实时攻击的检测.对于可疑内存Webshell注入攻击的判断会动静结合,参考Web后门检测结果,对Web后门的检测时,也会参考疑似后门文件的实时访问请求记录和上下文.

本文方案提供的安全能力主要包括2方面:1)基于RASP技术的Web进程实时防护,包括对普通Webshell攻击和内存Webshell等高级威胁的检测;2)基于动静结合的Web资产保护能力,包括Web资产清点、Web后门检测.针对容器环境内的Web应用提供安全防护,整体方案架构如图1所示.

图1 本文整体方案架构

整体上看,本文方案核心工作可以分为4个子流程,如图2所示.

图2 本文方案核心工作流程

1) 进行Web资产扫描,构建Web空间目录内文件保护的基线;2)进行Web进程已加载类的扫描,识别驻留的内存马;3)对请求处理流程和敏感操作的接口进行Hook;4)对请求的参数、响应和行为序列进行深度分析,识别Web攻击和内存马攻击.

2.3 核心技术模块

本文方案设计中,创新性地采用了RASP技术联动内存保护技术、攻击链检测与响应技术、静态内存扫描技术等,基于RASP技术将安全防护能力注入到业务应用中,通过实时监控应用程序的运行状态实时发现并阻断Web攻击行为.

2.3.1 内存保护技术模块

内存保护技术模块(memory protection)是通过实时响应阻断攻击者的入侵行为,解决当前令企业头疼的未知威胁问题,如内存攻击、无文件攻击、漏洞利用攻击、内存组建注册等攻击行为[7].

2.3.2 攻击链检测与响应技术模块

攻击链检测与响应技术模块(attack-chain detection and response, ACDR)即入侵行为检测与防御,可以持续检测并发现针对Web应用的内存马注册、后门创建、Web攻击等行为,实现容器安全运行时防护.在实际生产环境中需要特别关注模型的准确率和抗变异能力,既需要有经验的总结,也需要与业务场景相适应,可以局部自动调整.

2.3.3 静态内存扫描技术模块

静态内存扫描技术模块是实现初始化部署时主动扫描内存中已注册的内存马组件,发现驻留内存马.在实际生产环境中需要关注扫描的性能,特别是容器环境下对进程的运行资源有限制,要兼顾检测效率、误报率和准确率.

3 应用实践

3.1 实验环境及测试样本

本文主要研究在容器环境下Web应用的内存马的检测方法.在实验环境搭建思路上:选择常见的容器类型,包括社区版的Docker CE,Containerd,商业版本的Docker EE;选择这些容器的常见宿主操作系统,包括开源的Centos,RedHat以及国产信创操作系统Kylin;选择容器内常见的Web中间件,包括开源的Tomcat,SpringBoot等,商业化的WebLogic,WebSphere等,国产信创的TongWeb等.具体类型和版本如表1所示.

表1 实验环境

内存Webshell测试样本的选择考虑2个方面方面:1)当前大部分公开的内存马为Java语言编写,因此采用OpenJDK的开发环境;2)内存马的类型与Web中间件的类型和组件类型相关,所以需要对这些常见Web中间件分别选择其可利用组件类型的内存马.本文方案所需要适配的内存Webshell类型如表2所示.

表2 本文方案适配的内存Webshell类型

3.2 实验方法

3.2.1 实验指标设计

通过计算准确率、召回率和平均性能损耗验证方案的有效性,取值范围在0~100%之间,越接近100%表示结果最优.

准确率衡量的是分类模型预测结果中正确的样本比例.其计算公式如下:准确率=(预测正确的样本数)/(总样本数).

召回率衡量的是分类模型正确预测为正类样本占所有真正为正类样本的比例.其计算公式如下:召回率=(真正类的样本数)/(真正类的样本数+预测为负类但真正为正类的样本数).

本文研究中平均性能损耗采用性能监测工具实时监测软件的性能,性能监测包括CPU利用率、内存占用、网络延迟等,记录这些数据并计算平均值,得出软件的平均性能损耗.

3.2.2 固化实验条件

为了测试准确率和召回率,除了要适配上述测试环境,同时需要选择一定比例的恶意样本和非恶意样本.结合前文对内存型Webshell的特点分析,设计样本集包括2个子集:1)驻留内存马检测样本集,如表3所示;2)实时攻击检测样本集,如表4所示.

表3 驻留内存马检测样本集

表4 实时攻击检测样本集

3.2.3 对比方案选择及实验步骤

在验证方案效果时,除了考察本文方案自身的准确率和召回率,还与公开的方案进行比较,选择与开源的项目和可公开测试的商业化产品进行对比:方案A为Land Grey的Copagent工具,开源方案地址为https://github.com/LandGrey/copagent;方案B为su18的MemoryShell工具,开源方案地址为https://github.com/su18/MemoryShell;方案C选择了可公开测试的商业化产品为某公司的RASP产品,这款产品有内存马的检测能力,部署在SAAS环境可供测试.

本文方案实验步骤如下:1)在虚拟机中,交叉选择操作系统类型、容器类型和JDK版本、Web中间件类型和版本,搭建基础测试环境;2)准备测试样本,根据样本所适配的Web中间件类型和版本,分别部署在不同的测试环境中,并分别打上虚拟机快照,启动某个测试Web服务,进行正常业务访问;3)启动某个检测程序,开启注入内存马检测功能;4)交替进行正常请求、普通Web攻击请求、内存马注入请求,记录检测结果;5)开启驻留内存马检测功能;6)再次交替进行正常请求、普通Web攻击请求、内存马注入请求,记录检测结果;7)重置这个测试Web服务的环境,然后重新进行步骤3)~7),并在步骤4)中更换另一个检测程序;8)更换测试Web服务,依次进行步骤3)~8).对比实验结果如表5所示.

表5 检测结果对比 %

3.3 实验结论

本文通过计算准确率、召回率和平均性能损耗验证方案的有效性.通过验证,该方法对于驻留内存马可以实现99.0%的准确率、98.4%的召回率;对于注入内存马可以实现99.3%的准确率、95.8%的召回率;平均性能损耗为2%左右.通过大量真实环境的验证后,综合准确率在98%左右.

本文方案已经大规模运用在线上容器环境的内存马检测场景中,检测结果如图3所示:

图3 实验检测结果

4 结 语

随着大数据、云计算等技术的发展,业务上云的趋势越来越明显,对于云上业务和数据的安全防护则快速释放了大量安全产品市场需求.本文研究拟寻找一种聚焦于云原生安全防护的最佳实践,通过实验,能够实时检测已知Web漏洞攻击和内存Webshell,0Day攻击等未知Web攻击,实现了云场景下容器内应用行为的高精度监测.

猜你喜欢

漏洞内存容器
漏洞
Different Containers不同的容器
外部高速缓存与非易失内存结合的混合内存体系结构特性评测
难以置信的事情
“春夏秋冬”的内存
三明:“两票制”堵住加价漏洞
漏洞在哪儿
取米
高铁急救应补齐三漏洞
基于内存的地理信息访问技术