linux 在沙盒中运行,Linux容器的细粒度沙盒策略执行方法与流程

42d751f3346f05f8891e178199b6224a.gif

本发明专利属于计算机技术领域,涉及云计算安全方向。更具体的讲,本发明专利涉及一种Linux容器的细粒度沙盒策略执行方法。

背景技术:

Linux容器技术采用命名空间将进、文件、设备等资源进行隔离,为用户提供几近原生的性能体验,极大降低了虚拟化的额外开销。Docker容器是最具代表性的Linux容器技术之一。

Linux容器的安全问题已成为限制其广泛使用的重要影响因素。安全问题主要来源于,系统调用接口未实现命名空间的隔离,同一宿主操作系统上的容器共享系统调用接口。攻击者可通过系统调用接口,利用内核漏洞进行权限提升、任意代码执行、绕过访问控制、实现隔离机制的逃逸。

如何提高容器的安全性?一种直观的方法是将容器放在沙盒中,限制容器访问系统调用接口的行为。当可信容器被攻击者攻占后,沙盒的存在一定程度上可以限制攻击者对底层操作系统的影响。系统调用拦截技术是一种限制程序系统调用行为的有效技术,基于系统调用拦截技术的沙盒技术得到研究界及工业界的广泛关注。其中,seccomp/BPF技术是自Linux 3.5开始引入的一种高效的系统调用拦截技术。

然而,基于系统拦截技术的沙盒技术,实现Linux容器的细粒度沙盒策略执行,即过滤字符串类型的系统调用参数,仍然极具挑战。

技术实现要素:

针对上述问题,本发明提出一种Linux容器的细粒度沙盒策略执行方法。在系统调用层面,实现细粒度沙盒策略执行,对Linux容器进行安全加固。细粒度沙盒策略限制Linux容器的系统调用类型及参数。

本发明采用如下技术方案:一种Linux容器的细粒度沙盒策略执行方法;细粒度沙盒策略包含了Linux容器的系统调用类型及参数的访问权限;该Linux容器的细粒度沙盒策略执行方法包括容器追踪模块和系统调用拦截模块;所述容器追踪模块包括追踪进程;该方法包括以下步骤:

步骤1:启动追踪进程。

步骤2:当目标容器的初始进程启动之后,通过进程间通信,追踪进程从容器运行环境获取目标容器的初始进程的进程号;追踪进程根据目标容器的初始进程的进程号,附着(attach)到目标容器的初始进程;追踪进程读取沙盒策略,获得目标容器系统调用的字符串类型的参数的过滤规则,等待触发事件;同时,系统调用拦截模块读取沙盒策略,并将沙盒策略载入到系统内核。

步骤3:系统调用拦截模块实时拦截目标容器的系统调用访问;并根据Linux容器的系统调用类型及参数的访问权限,限制目标容器的系统调用行为,具体为:

如果系统调用访问的类型和参数在沙盒策略定义的白名单中,则沙盒策略允许此次系统调用访问;如果系统调用访问的类型和参数在沙盒策略定义的追踪名单中,暂停目标容器运行,触发容器追踪模块;其他情况下,禁止此次系统调用访问;

当容器追踪模块被触发后,根据沙盒规则,对目标容器系统调用访问的参数进行过滤。重启该过滤后的目标容器,等待下次事件的触发。

进一步地,步骤2所述的附着(attach)到目标容器的初始进程,具体是指:调用Linux系统调用接口ptrace,传入PTRACE_ATTACH作为第一个参数。

进一步地,步骤2所述的系统调用拦截模块读取沙盒策略,并将沙盒策略载入到系统内核,具体是指:读取沙盒策略配置文件,翻译成seccomp/BPF程序并载入Linux内核中运行,用于后续限制目标容器的系统调用行为。

进一步地,步骤3所述的实时拦截目标容器的系统调用访问,具体是指:运行中的seccomp/BPF程序实时拦截目标容器的系统调用访问。

进一步地,步骤3所述的根据沙盒规则,对目标容器系统调用访问的参数进行过滤,具体是指:调用Linux系统调用接口ptrace,分别传入PTRACE_GETREGS和PTRACE_PEEKDATA作为第一个参数,从寄存器及内存中读取目标容器进程系统调用访问的字符串类型参数,并根据沙盒策略,对参数执行过滤操作。

进一步地,步骤3所述的重启该过滤后的目标容器,具体是指:调用Linux系统调用接口ptrace,传入PTRACE_CONT作为第一个参数。

本发明下有益效果在于:

(1)减少攻击面:通过执行本发明方法,可限制目标容器的系统调用访问的类型和参数,从而限制目标容器的行为;进一步地,如容器被入侵,可限制攻击者对底层操作系统及同一宿主操作系统上的其他容器可能造成的危害;

(2)额外性能开销小:Linux容器的细粒度沙盒策略执行引发的目标容器端到端额外性能开销几乎可以忽略。

附图说明

图1示出本发明的各种实施例的架构原理图;

图2示出本发明一种实施例的细粒度沙盒策略执行方法流程图;

图3示出本发明一种实施例的沙盒策略配置文件示例代码示意图;

图4示出容器的端到端性能TPS示意图。

具体实施方法

为便于本领域普通技术人员理解和实施本发明,下面结合附图及实施示例对本发明作进一步的详细描述。应当理解,所述的实施示例仅用于说明和解释本发明,并不应该限制本发明的范围。

本发明提出了一种Linux容器的细粒度沙盒策略执行方法。具体来讲,在系统调用层面,执行细粒度沙盒策略,细粒度是指限制容器的系统调用类型及参数,参数类型包括字符串和非字符串,从而实现对Linux容器的安全加固。

该方法包含容器追踪模块和系统调用拦截模块,如图1所示。容器追踪模块可以通过采用ptrace系统调用接口,追踪目标容器,根据沙盒策略定义的规则,对具有字符串类型的参数的系统调用访问进行过滤。系统调用拦截模块可以通过采用seccomp/BPF系统调用拦截技术,对系统调用类型及具有非字符串类型参数的系统调用访问进行过滤。

如图2所示,本发明方法包括如下步骤:

步骤1:采用手动或自动方式启动容器追踪模块的追踪进程,追踪进程等待目标容器的启动;该步骤可通过采用Linux命名管道(FIFO),实现追踪进程与系统调用拦截模块进程间的同步。

步骤2:在命令行输入“docker run--security-opt seccomp=”启动目标容器的初始进程后,追踪进程通过进程间通信,比如采用Linux命名管道(FIFO),从容器运行环境获取目标容器的初始进程的进程号;追踪进程利用目标容器的初始进程的进程号,附着到目标容器的初始进程;具体而言,追踪进程可调用ptrace系统调用接口,并传入PTRACE_ATTACH和目标容器的初始进程的进程号作为第一个和第二个参数;然后,追踪进程载入沙盒策略,沙盒策略包含目标容器系统调用的字符串类型的参数的过滤规则;最后,追踪进程调用waitpid等待目标容器进程触发事件。

在容器追踪模块启动的同时,通过docker run命令的security-opt seccomp选项,启动系统调用拦截模块;系统调用拦截模块可读入并解析JSON格式的沙盒策略配置文件,如图3所示;然后,将沙盒策略配置文件中的所有规则转化为seccomp/BPF程序,并载入Linux内核。

步骤3:系统调用拦截模块的执行,其具体实现包括以下子步骤:

步骤3.1:采用seccomp/BPF技术,在目标容器的系统调用入口,实时拦截目标容器的系统调用访问;

步骤3.2:系统调用拦截模块根据载入的沙盒策略,限制目标容器的系统调用类型和参数;沙盒策略可以用JSON格式的配置文件描述,如图3所示;沙盒策略具体包含:1)目标容器被允许的系统调用访问类型和参数,即白名单:白名单中的沙盒规则的“action”定义为“SCMP_ACT_ALLOW”操作,即沙盒策略允许定义的系统调用访问;2)目标容器被追踪的系统调用访问类型和参数,即追踪名单:追踪名单中的沙盒规则的“action”定义为“SCMP_ACT_TRACE”,即暂停目标容器运行,发送ptrace事件给追踪进程,从而触发容器追踪模块;3)其他情况下,遵循沙盒策略定义的默认“action”“SCMP_ACT_ERRNO”,即禁止目标容器的系统调用访问,并返回错误值。

当容器追踪模块被触发后,追踪进程根据沙盒规则,对目标容器系统调用访问的参数进行过滤,具体为:调用Linux系统调用接口ptrace,分别传入PTRACE_GETREGS和PTRACE_PEEKDATA作为第一个参数,从寄存器及内存中读取目标容器进程系统调用的字符串类型参数;根据沙盒策略,对参数执行过滤操作。

然后调用Linux系统调用接口ptrace,传入PTRACE_CONT作为第一个参数,重启暂停的目标容器,等待下次事件的触发。

为验证上述细粒度沙盒策略执行方法的性能,分析该方法对Linux容器性能的影响,将该方法用于限制Docker容器的系统调用访问。每一个容器分别以两种形式运行,即采用本方法限制容器的系统调用访问、以及不限制容器的系统调用访问。在容器的两种形式运行过程中,分别测量容器的端到端性能TPS(Transactions Per Second),结果如图4所示。采用本方法限制目标容器的系统调用访问时,产生的额外性能开销几乎可以忽略(1.22%-3.76%)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值