首页> 中国专利> 一种动静态结合的容器内CPU漏洞攻击程序检测方法

一种动静态结合的容器内CPU漏洞攻击程序检测方法

摘要

本发明公开一种动静态结合的容器内CPU漏洞攻击程序检测方法,当待测对象为为容器镜像文件中的二进制程序时,训练并生成基于卷积神经网络的CPU漏洞攻击静态检测模型;从容器镜像文件中提取指定待测二进制程序,提取程序操作码序列并进行特征编码后输入静态检测模型中进行检测;当被测对象为容器内运行的进程,训练并生成基于SVM的CPU漏洞攻击动态检测模型,跟踪待测容器内运行进程,实时采集进程产生的CPU的LLC缓存访问行为数据,对缓存访问序列数据进行预处理后输入动态检测模型中进行检测。本发明能够检测容器内部存在的CPU漏洞攻击程序的恶意行为,防止内存数据信息的泄露。

著录项

  • 公开/公告号CN109858239A

    专利类型发明专利

  • 公开/公告日2019-06-07

    原文格式PDF

  • 申请/专利权人 四川大学;

    申请/专利号CN201910039101.2

  • 申请日2019-01-16

  • 分类号

  • 代理机构成都信博专利代理有限责任公司;

  • 代理人刘凯

  • 地址 610065 四川省成都市武侯区一环路南一段24号

  • 入库时间 2024-02-19 10:51:16

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-01-17

    授权

    授权

  • 2019-07-02

    实质审查的生效 IPC(主分类):G06F21/53 申请日:20190116

    实质审查的生效

  • 2019-06-07

    公开

    公开

说明书

技术领域

本发明涉及软件安全技术领域,具体为一种动静态结合的容器内CPU漏洞攻击程序检测方法。

背景技术

容器技术提供了一个轻量的操作系统级别的虚拟主机环境,它的出现深刻地改变了多层分布式应用程序的开发和部署。然而,由于Linux内核中系统资源隔离机制实现的不完全,导致在多租户容器云服务中共享操作系统内核的多个容器之间、容器与宿主机之间仍然存在着一些安全问题。除了传统的安全威胁,诸如计算机病毒、木马以及Rootkit等外,存在一些新型的高级安全威胁,例如CPU漏洞(Meltdown以及Spectre)恶意程序,能够在容器内发动攻击,突破容器隔离的限制直接窃取整个宿主机物理内存数据,进而影响整个平台的可用性和容器数据的安全性。

目前的研究当中,针对主机中通用恶意程序的检测研究,主要可以分为静态和动态两种方法。

(1)基于静态的检测方法

基于静态的检测方法主要是通过对二进制程序本身的内容或者是结构进行分析,而不用去执行程序来确定所要检测的程序是否是恶意代码。这类检测方法主要还是基于特征工程来实现的,首先逆向分析二进制程序,静态提取出API Calls、opcodes序列、ControlFlow Graps(CFGS)等信息作为特征,然后采用决策树、SVM(Support Vector Machine,支持向量机)、ANN(Artificial Neural Network,人工神经网络)、随机森林等传统机器学习算法进行训练学习,从而构建出恶意软件检测分类器。

(2)基于动态的检测方法

动态主要是根据程序运行时的行为来判断程序是否是恶意程序。这类检测方法主要通过程序执行过程中产生的系统调用序列作为行为描述数据。常用的方法有基于异常行为的检测,针对系统调用序列中包含大量具有周期性重复规律序列的特点,通过计算偏离正常系统调用序列的程度来预测程序在执行过程中是否存在异常的行为。还有一种有监督的学习策略,通过大量正常、恶意程序产生的系统调用子序列中来提取特征,训练并学习分类器实现恶意程序的检测。

现有的静态研究方法主要基于专家知识构造的行为数据特征作为输入,使得模型的泛化能力差,针对现在CPU漏洞攻击程序均不能成功检测。现有的动态研究方法主要基于系统调用行为来描述程序的行为,然而CPU漏洞攻击程序通过触发CPU硬件性能优化的漏洞,来实现CPU缓存数据窃取行为,基于系统调用的方法无法描述该攻击行为。随着容器技术的发展,针对容器环境下的恶意软件检测也变得尤为重要。

现存的技术难点主要有:(1)从容器镜像中提取二进制程序需结合容器底层存储驱动,避免提取过程造成镜像文件受损。(2)针对CPU漏洞攻击程序静态检测方法,基于特征工程的模型泛化能力差,针对新型的恶意软件需要提取新的特征。而利用深度学习等技术可实现特征自动提取的能力和优势,但是如何将二进制程序进行编码作为输入能够保留恶意行为特征,以及如何构建深度学习网络模型满足恶意软件检测的需求也至关重要。(3)针对CPU漏洞攻击程序动态检测方法,现有研究方法中无论是基于系统调用、敏感API执行序列以及关键资源访问等方法均无法适用于描述CPU漏洞攻击行为特征。因此,采集哪种类型的攻击程序动态执行数据能够充分表征其恶意攻击行为是最为关键的步骤。

发明内容

针对上述问题,本发明的目的在于提供一种能够能够检测容器内部存在的CPU漏洞攻击程序的恶意行为,防止内存数据信息的泄露的动静态结合的容器内CPU漏洞攻击程序检测方法,分别从静态与动态两个层面实现容器内CPU漏洞攻击程序的检测,保障容器云平台下各租户的数据安全。技术方案如下:

一种动静态结合的容器内CPU漏洞攻击程序检测方法,包括以下步骤:

步骤1:根据被测对象类型,选择对应检测方法;如果被测对象为容器镜像文件中的二进制程序,则采用静态检测方法,跳转到步骤2;如果被测对象为容器内运行的进程,则采用动态检测方法,跳转到步骤4;

步骤2:将容器镜像文件中的二进制程序作为训练样本,训练并生成基于卷积神经网络的CPU漏洞攻击静态检测模型;

步骤3:从容器镜像文件中提取指定待测二进制程序,提取程序操作码序列并进行特征编码后输入步骤2生成的静态检测模型中进行检测,将结果输出到检测日志中;

步骤4:将容器内运行的进程作为训练样本,训练并生成基于SVM的CPU漏洞攻击动态检测模型;

步骤5:跟踪待测容器内运行进程,实时采集进程产生的CPU的LLC缓存访问行为数据,对缓存访问序列数据进行预处理后输入步骤4生成的动态检测模型中进行检测,将结果输出到检测日志中。

进一步的,所述步骤2中训练并生成基于卷积神经网络的CPU漏洞攻击静态检测模型具体过程为:

步骤2.1:利用OBJDUMP命令分别对训练样本中所有正常情况下和CPU漏洞攻击时的二进制程序进行指令级反汇编,提取代码段中程序操作码序列opcodei={opi,1,opi,2,…opi,m};

步骤2.2:将每个程序操作码序列opcodei={opi,1,opi,2,…opi,m}中每个操作码opi,j编码成256阶灰度图中的一个像素点,将二进制程序代码用一张灰度图表示;

步骤2.3:构建一个五层卷积神经网络,将恶意程序检测问题转换成图片分类问题;其中每个卷积层由卷积、采样层和非线性单元构成,用于自动提取特征,最后使用三层全连接网络和softmax层对提取特征进行分类;

步骤2.4:将步骤2.2中二进制程序生成对应灰度图输入至步骤2.3构建的卷积神经网络中训练,采用误差反向传播算法多次迭代计算,收敛成最终的检测模型。

更进一步的,所述步骤2.1中,待测二进制程序提取操作码之前,如果该程序被加壳处理过,需要先进行去壳处理后再进一步分析。

更进一步的,所述步骤4中训练并生成基于SVM的CPU漏洞攻击动态检测模型的具体过程为:

步骤4.1:分别在容器内运行正常情况下和CPU漏洞攻击时的程序,同时在宿主机上利用Strace模块跟踪待测程序运行产生的进程,捕捉进程产生的各种行为,从而全周期捕捉进程产生的cpu缓存行为数据;

步骤4.2:利用Perf API接口实现对进程CPU LLC缓存访问行为数据采集,采集待测进程在n个时间间隔范围内产生的CPU缓存访问行为;

步骤4.3:将采集的正常及CPU漏洞攻击程序产生的缓存访问行为数据,输入至构建的SVM分类器(采用rbf非线性核函数)中进行训练,收敛成最终的动态检查模型。

更进一步的,所述步骤4.2中利用Perf API对进程的CPU缓存访问行为采集时,通过GROUP机制同步采集缓存失效与缓存访问数据。

更进一步的,所述步骤3中从容器镜像文件中提取指定待测二进制程序的过程包括:给定一个目录,获取某个容器镜像的该目录下所有可执行程序文件,首先通过dockerinspect镜像id、容器id或容器name,获得lowerdir和upperdir的路径,然后将upperdir和lowerdir按照格式拼接;再建一个空的upperdir,通过mount系统调用联合挂载到一个临时目录下,筛选出指定目录下的可执行文件,以此路径传给分析程序,在分析结束后umount取消挂载。

本发明的有益效果是:本发明结合容器应用场景,根据待测对象的不同(容器镜像/运行容器实例)提出了动静态结合的CPU漏洞攻击程序检测方案及二进制操作码指令级编码方法,结合卷积神经网络模型自动学习CPU漏洞攻击静态特征;还提出一种基于Perf的进程CPU缓存行为采集方法,同时提出CPU漏洞攻击程序在窃取内存数据时,产生了大量CPULLC缓存失效行为为特征,检测进程的Flush+Reload动态攻击行为。

附图说明

图1是容器内CPU漏洞攻击程序检测系统总体架构图。

图2是基于卷积神经网络的CPU漏洞攻击程序检测模型图。

图3是卷积神经网络模型结构图。

图4是基于SVM的CPU漏洞攻击动态检测流程图。

图5是正常与CPU漏洞攻击进程在CPU-LLC缓存行为对比图。

具体实施方式

下面结合附图和具体实施例对本发明做进一步详细说明。本发明分别从静态与动态两个层面实现容器内CPU漏洞攻击程序的检测,保障容器云平台下各租户的数据安全。具体步骤如下:

步骤1:根据被测对象类型,选择对应检测方法。如果被测对象为容器镜像文件中的二进制程序,则采用静态检测方法,跳转到步骤2;如果被测对象为容器内运行的进程,则采用动态检测方法,跳转到步骤4。

步骤2:将容器镜像文件中的二进制程序作为训练样本,训练并生成基于卷积神经网络的CPU漏洞攻击静态检测模型。

步骤2.1:利用OBJDUMP对训练样本中所有正常、CPU漏洞攻击二进制程序进行指令级反汇编,提取代码段中程序操作码序列opcodei={opi,1,opi,2,…opi,m}。

待测二进制程序提取操作码之前,如果该程序被加壳处理过,需要先进行去壳处理后再进一步分析。

步骤2.2:将每个程序操作码序列opcodei={opi,1,opi,2,…opi,m}中每个opi,j编码成256阶灰度图中的一个像素点。最终每个二进制程序代码使用一张灰度图表示。

步骤2.3:构建一个五层卷积神经网络,将恶意程序检测问题转换成图片分类问题。其中每个卷积层由一个conv(卷积)+pooling(采样)+非线性单元(RELU)构成,用于自动提取特征,最后使用三层全连接网络+softmax层对提取特征进行分类。

步骤2.4:将步骤2.2中生成的样本输入至步骤2.3构建的卷积神经网络中训练,采用误差反向传播算法多次迭代计算,收敛成最终的检测模型。

步骤3:从容器镜像文件中提取指定待测二进制程序,提取程序操作码序列并进行特征编码后输入步骤2生成的模型中进行检测,将结果输出到检测日志中。

从容器镜像中提取二进制程序,需结合容器底层存储格式以及挂载的安全性,避免对镜像文件造成破坏.

步骤4:将容器内运行的进程作为训练样本,训练并生成基于SVM的CPU漏洞攻击动态检测模型。

步骤4.1:分别在容器内运行正常和CPU漏洞攻击程序,同时在宿主机上利用Strace模块跟踪待测程序运行产生的进程,捕捉进程产生的各种行为,从而全周期捕捉进程产生的cpu缓存行为数据。

步骤4.2:利用Perf API实现进程CPU LLC缓存访问行为数据采集模块,采集待测进程在n个时间间隔范围内产生的CPU缓存访问行为。利用Perf API对进程的CPU缓存访问行为采集时,需通过GROUP机制同步采集缓存失效与缓存访问数据。

步骤4.3:利用步骤4.2采集所有正常/CPU漏洞攻击程序产生的缓存访问行为数据,输入至构建的SVM分类器中进行训练,收敛成最终的动态检查模型。

步骤5:跟踪待测容器内运行进程,实时采集进程产生的CPU的LLC缓存访问行为数据,对缓存访问序列数据进行预处理后输入步骤4生成的模型中进行检测,将结果输出到检测日志中。

附图1给出了本发明中动静态结合的容器内CPU漏洞攻击程序检测系统总体架构图。如图1所示,该系统可用于检测容器内部存在的CPU漏洞攻击程序的恶意行为,防止内存数据信息的泄露。该总体架构根据待测对象的不同,分别采用基于静态和基于动态的检测方案。

当待测对象为容器镜像文件时,采用基于卷积神经网络的CPU漏洞攻击静态检测方案,该方案包括二进制程序的提取、程序指令级编码生成、基于卷积神经网络的分类模型。

容器内二进制程序的提取过程主要:给定一个目录,获取某个容器/镜像的该目录下所有可执行程序文件,首先通过docker inspect镜像id/容器id/容器name,获得lowerdir和upperdir的路径,然后将upperdir和lowerdir按照格式拼接(作为挂载时的lowerdir),再建一个空的upperdir,通过mount系统调用联合挂载到一个临时目录下,如此即可在该临时目录下看到容器视角下所有文件信息,筛选出指定目录下的可执行文件,以此路径传给分析程序,在分析结束后umount取消挂载。

附图2给出了基于卷积神经网络的CPU漏洞攻击程序检测模型图,其中模型输入层的输入是通过指令级反汇编分析后,将二进制程序的操作码序列提取出来,每个操作码转换成一个256阶的灰度像素。接着由五个卷积层+采样层+非线性层进行模型特征自动提取,提取的高维特征作为输入传入一个全连接神经网络,结果通过softmax层进行分类。整个模型的网络详细结构如附图3所示,其中CONV表示卷积,Pool表示采样层,Relu表示非线性层。

当待测对象为容器内运行的进程时,采用基于SVM的CPU漏洞攻击动态检测方案,详细流程如附图4所示,该方案包括进程感知模块、CPU缓存行为采集、基于SVM的检测模型。

进程感知模块用于实时感知新进程的创建、子进程fork、进程消亡等行为,从而全周期捕捉进程产生的cpu缓存行为数据。模块基于Strace实现,通过attach绑定待测进程,捕捉进程实时产生的信号,进行相应的后续处理。例如进程fork了新的子进程,感知模块将fork出的新进程号通过管道的形式传递给采集程序进行新的采集处理。

如附图5所示,由于CPU漏洞攻击程序通过Flush+Reload攻击技术窃取内存数据,所以在Reload阶段会造成大量的CPU缓存访问失效。所以通过基于Perf实现的CPU缓存行为采集模块,利用PMU(性能管理单元)对进程的缓存访问行为进行采集,可通过一个特征向量CacheBehaviori={mr1,mr2…mrn}来描述待测进程i在n个时间间隔范围内产生的CPU缓存访问行为,其中mrk=missk/accessk,代表进程在特定时间间隔内CPU缓存访问失效率。

由于CPU漏洞攻击存在flush与reload两个阶段,从CPU LLC-cache miss rate上存在间断的正常与异常的缓存访问行为,所以在一定程度上是线性不可分的。于是采用SVM算法,通过高斯核函数对采集到的特征序列进行高维映射来计算出正常与异常程序的分割面,从而保证具有较高的准确率。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号