掌桥专利:专业的专利平台
掌桥专利
首页

一种跨容器软件运行检测方法及系统

文献发布时间:2023-06-19 11:39:06


一种跨容器软件运行检测方法及系统

技术领域

本发明属于系统安全技术领域,涉及一种软件运行检测的方法,特别涉及基于缓存的跨容器软件运行检测方法及系统。

背景技术

在云计算环境中,部署在同一服务器上隶属于不同用户的实例(实例是指云服务供应商提供给用户的服务单位,如一个虚拟机,一个容器等)之间的可信任程度低,这带来了很多同驻安全问题。这样的问题,对于隔离性稍弱的容器来说,更加明显。所以对于同驻状态下可能存在的攻击研究是必要的。

同驻情况下,常见的跨容器或虚拟机的基于软件的漏洞利用攻击或提权都需要针对特定的软件,很多攻击者常用的工具也能作为入侵检测的参考,由此可以看出,目标虚拟机或容器中的软件运行情况可以为攻击或防御提供重要信息,所以软件运行检测方法的研究是有必要的。

在现代计算机架构中,通常都包含一个缓存系统,用于存储最近访问的数据,以提高后续访问的效率。一般来说,缓存访问的速度比内存访问的速度快两个数量级,甚至更多。而典型的缓存体系结构分为三个层次——L1、L2、L3,需要缓存的内容从L3开始,逐层向上层更小更快的缓存层中存储,而L3是被所有CPU核共享的一层。

缓存侧信道攻击是基于攻击者和受害者共享物理系统(如虚拟化环境或云环境)中缓存,从而使得攻击者具有通过监控共享缓存的使用情况,获取泄露信息的能力。Flush-Reload技术就是利用了这一原理,对缓存进行反复的刷新和载入目标内存行,从而获取目标程序对该内存行的执行情况。同驻容器和虚拟机的共享缓存是一个重要的信息泄露点,因此,可以利用这一点进行跨容器和虚拟机的软件运行检测。随着云计算的发展,同驻安全问题越来越受到人们的关注,同时,作为很多攻击手段和入侵检测方法的前期准备,跨容器或虚拟机获取软件运行情况的方法也越来越重要,该问题亟待解决。

发明内容

针对软件运行检测问题,本发明提出了一种基于共享缓存的跨容器的软件运行检测方法及系统。在对两个容器共享的缓存部分进行分析之后,提取出缓存中目标指令加载的情况,以此判断目标程序的运行情况。

本发明采用的技术方案如下:

一种跨容器软件运行检测方法,其步骤包括:

1)构建攻击环境:根据目标容器构建一个同镜像源的攻击容器;

2)构建配置文件:依据共享镜像源中安装的软件选取将要监控的目标软件,获取目标软件的监控地址和版本号,存入配置文件中,将该目标软件及其配置文件复制到攻击容器中;

3)选取阈值:测试目标容器和攻击容器所在服务器的性能,获取读取内存和读取缓存的时间,确定区分读取内存和读取缓存的阈值η;

4)实施监控:将目标软件的监控地址对应的内存行从所有级别的缓存中清除,等待一段时间后运行该目标软件,记录重新加载到内存行的时间T,若T>η,则判为从内存中读取,在上述等待时间内目标软件没有读取该内存行;若T<η,则判为从缓存中读取,在上述等待时间内目标软件读取了该内存行。

进一步地,根据目标软件的名称检索对应可执行文件在容器中的安装位置,读取目标软件的版本信息,从版本信息中解析出版本号。

进一步地,根据目标软件的名称和版本号在监控地址库中检索,若检索到相应地址,则直接选取为监控地址;若没有检索到相应地址,则对目标软件的可执行文件进行反汇编分析,找到软件的入口函数,并根据入口函数选取监控地址。

进一步地,根据入口函数选取监控地址要求选取的地址满足如下条件:

1)不论目标软件执行何种操作,监控地址在运行过程中一定会被访问;

2)监控地址在目标软件运行过程中会被反复执行;

3)当目标软件没有运行时,服务器不因预测执行策略将监控地址加载到缓存中。

进一步地,测试服务器性能的方法为:对同一个地址执行多次flush+reload组合指令,测量每次reload读取花费的时间,作为该服务器上从L1级缓存读取缓存行的时间参数;对多个不同的地址执行flush+reload组合指令,测量每次reload读取花费的时间,作为该服务器上从内存中读取内存行的时间参数;根据两个时间参数选取一个划分reload指令是从缓存行还是内存行读取的阈值η。

进一步地,执行flush指令将目标软件的监控地址对应的内存行从所有级别的缓存中清除,等待一段时间后运行该目标软件时,再执行reload指令读入该内存行。

进一步地,执行rdtsc指令读取时间戳计数器来测量重新加载到内存行的时间T。

一种跨容器软件运行检测系统,包括存储器和处理器,在该存储器上存储有计算机程序,该处理器执行该程序时实现上述方法的步骤。

一种计算机可读存储介质,存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。

本发明的有益效果为:本发明方法无需获取目标容器的root权限,只要在同驻条件下即可监控同源镜像下的软件运行情况,本方法操作简单,不需要复杂的环境配置,并且本发明中为多个常用开源软件提供了监控地址库,减少了使用者的工作量。

附图说明

图1为基于共享缓存的跨容器的软件运行检测方法的流程示意图。

图2为测试实施例中CPU从内存读取数据的时间统计图

图3为测试实施例中CPU从缓存读取数据的时间统计图

具体实施方式

下面将结合本发明实施例中的附图,对本发明在实施例中的技术方案进行清楚、完整地描述:

本发明提出的一种跨容器软件运行检测方法的流程如图1所示。首先,创建攻击容器,攻击容器必须与目标容器共享一个基础镜像;然后将要监控的目标软件程序和配置文件复制到攻击容器;再然后选取区分读取内存和读取缓存的时间阈值;最后运行目标软件,将读取内存行的时间与阈值做比较,从而确定该目标软件是否对缓存进行了读取。

其中,给出要监控的目标软件的名称,按名称检索对应可执行文件在容器中的安装位置,并根据该安装位置从软件的版本信息中解析出版本号,再将安装路径和版本号存入配置文件。注意,确定目标软件时,一定要保证该软件是安装在共享的镜像层中。

使用获取的软件名和版本号在提供的监控地址库(监控地址库是一个文本文件,文件中每一行记录一个监控项,监控项包括软件名、版本信息和监控地址,后续使用者可以根据需要自定义监控地址库,向库中添加新监控项)中检索,若检索到相应地址则可以直接取用,加入配置文件;若无法检索到相应的地址,则需要人工对目标软件的可执行文件进行反汇编分析,找到软件的入口函数,并选取监控地址。该监控地址的选取遵循以下原则:1)不论目标软件执行的是何种操作,在运行过程中一定会访问的地址;2)尽量选取运行过程中会被反复执行的部分;3)若目标软件没有运行,则服务器不会因为预测执行等策略将该地址加载到缓存中。

通过测试服务器的性能来选取时间阈值。具体地,对同一个地址执行多次flush+reload组合指令,测量每次reload读取花费的时间,作为该服务器上从L1级缓存读取缓存行的时间参照;对多个不同的地址执行flush+reload组合指令,测量每次reload读取花费的时间,作为该服务器上从内存中读取内存行的时间参照。综合时间分布,选取一个可以有效划分reload指令两种数据读取来源的阈值η。

配置准备完成之后,开始持续的监测。本发明使用flush指令将监控地址对应的内存行从所有级别的缓存中清除,等待一段时间之后,再执行reload指令读入该内存行。本发明采用了rdtsc指令读取64位时间戳计数器来测量读取时间T,并将时间T与阈值η比较。若T<η,则判断为此次读取的数据来源是缓存,即在等待时间内目标软件读取了此内存地址;反之,则认为此次读取的数据来源是内存,即在等待时间内目标软件没有读取此内存地址。进而,可以从有无读取监控地址推断出目标软件是否运行。

从图1的流程中可以看出,本发明可以同时监控多个软件的运行情况,若要监控多个软件只需要对监测程序进行微调。在准备阶段,对多个目标软件进行分析,将它们的监控地址整合在一个配置文件中。在图1的循环体部分,对文件中各个地址进行轮换的监控。

实现本发明的一种具体实施方式如下,可以理解的是,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本实施例中,容器使用的是Docker-ce-18.03.1,服务器操作系统为Ubuntu-18.04,目标和攻击容器的操作系统为Ubuntu-16.04。在共享的基础镜像中,安装有Apache-1.7.0、Netcat-0.7.1和Nmap-7.70三种常用软件。

本实施例中,基于基础镜像创建了目标容器victim和攻击容器attacker。对服务器的性能进行了10000次检测之后,统计结果如图2和图3所示。

综合分析可知,L1级缓存的读取时间集中在35-75之间,内存的读取时间集中在195以上,初步选取了145作为两种情况的时间阈值。L1级缓存读取时间小于145的占99.98%,内存读取时间大于145的占95.69%,显示出该阈值可以有效区分两种情况。但检测中实际使用的是L3级缓存,根据Intel手册,可以推测Intel CPU中,L1级缓存的访问时间比L3级缓存的访问时间短大约33-43个时钟周期。最后选定了110作为阈值η来区别两种访问。

确定各参数和配置之后,进入循环监测的部分。在每一次循环中,对某一个地址进行一次检测。首先使用flush指令清除了所有级别缓存中的目标内存行,然后利用reload指令对该内存行进行重新加载,另外,在reload操作的前后各使用了一次rdtsc指令来读取时间戳寄存器的值,两次的差值T作为衡量加载时间的依据。若T>η,判断此次reload操作是从内存中加载了目标内存行;若T<η,判断此次reload操作是从缓存中加载了目标内存行,随即报告该目标内存行所属的软件名称、版本和当前时间戳。本实施例中为了限制图1中循环体部分的指令按照指定顺序串行执行,并且不因其他程序中断执行,采用了mfence和lfence指令使得指令流序列化。

实验结果表明,对于本实施例中的三种软件,本发明方法可以准确地报告目标容器中运行的软件名称和版本号。

相关技术
  • 一种跨容器软件运行检测方法及系统
  • 一种基于SVC软件运行系统及其检测方法
技术分类

06120113007893