《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于Docker的漏洞验证框架的设计与实现
基于Docker的漏洞验证框架的设计与实现
2018年电子技术应用第11期
陈一鸣,寇小强,王永利
华北计算机系统工程研究所,北京100083
摘要: 漏洞是信息安全研究的重要对象,但目前漏洞种类繁多,验证方法复杂。针对搭建安全漏洞环境困难、复现漏洞困难的问题,基于Docker虚拟化技术,设计了一种将漏洞环境部署在容器中,并使用相应漏洞利用脚本实现验证的框架系统。此框架系统验证过程需要提供Dockerfile文件或Docker镜像以及相匹配的漏洞验证脚本。首先,系统运行一个拥有漏洞程序的Docker容器。然后,框架再调用与此漏洞相匹配的验证或攻击脚本来验证漏洞可用性。经过测试,此系统可以大幅提高漏洞复现速度,同时降低了漏洞复现难度与技术门槛。
中图分类号: TP311
文献标识码: A
DOI:10.16157/j.issn.0258-7998.180753
中文引用格式: 陈一鸣,寇小强,王永利. 基于Docker的漏洞验证框架的设计与实现[J].电子技术应用,2018,44(11):99-101,106.
英文引用格式: Chen Yiming,Kou Xiaoqiang,Wang Yongli. Design and implementation of vulnerability verification framework based on Docker[J]. Application of Electronic Technique,2018,44(11):99-101,106.
Design and implementation of vulnerability verification framework based on Docker
Chen Yiming,Kou Xiaoqiang,Wang Yongli
National Computer System Engineering Reasearch Institute of China,Beijing 100083,China
Abstract: Vulnerability is an important object in the research of information security, but there are many kinds of vulnerabilities at present, and the verification is complex. In view of the difficulties of building security vulnerabilities and the difficulties of vulnerabilities reappearing, a framework system is designed to deploy vulnerabilities in containers based on Docker virtualization technology, and the corresponding verification script is used to implement the framework system. The framework system verification process needs to provide Dockerfile file or Docker mirrors, as well as matching vulnerability verification scripts. Firstly, the system runs a Docker container with a vulnerability program. The framework then calls the verification or attack scripts that match the vulnerability to verify the availability. After testing, the system can greatly improve the speed of the vulnerabilities recovery, and reduce the difficulty and the technical threshold for the reappearing of the vulnerabilities.
Key words : information security;vulnerability verification;Docker;virtualization

0 引言

    随着信息技术的发展,信息安全问题也愈演愈烈,漏洞的存在可以使攻击者在未授权的情况下访问或破坏系统[1]。每天都会有新的漏洞被挖掘出来,研究这些漏洞的成因或利用方法是安全人员必须完成的工作之一[2]。现阶段的漏洞种类繁多,按照产生漏洞的程序分类,包括Web漏洞、系统漏洞、应用程序漏洞、Web中间件漏洞等[3]。按照漏洞利用方式分类,包括远程利用漏洞、本地利用漏洞,再往下细分又可以分为命令执行、溢出、提权等漏洞[4]。不同的漏洞所依靠的运行环境也不相同,有些漏洞甚至需要多个软件或系统的组合才能顺利复现成功[5]。为简化漏洞复现过程,本文研究了使用Docker容器技术来进行漏洞场景的打包和发布技术,并且通过漏洞验证模块来验证此漏洞场景。

    关于漏洞验证程序的编写格式,现阶段已经有数个漏洞验证框架:Beebeeto、Pocsuite、Bugscan、Tangscan等。Beebeeto是由众多安全研究人员所共同维护的一个规范化观点证明(Proof of Concept,POC)/漏洞利用(Exploit,EXP)平台,安全研究人员可以在互联网上获取漏洞信息,然后按照BB2开发标准编写出相应的POC或EXP提交到平台。Pocsuite是由知道创宇安全研究团队打造的一款开源的远程漏洞测试框架。BugScan是西安四叶草信息技术有限公司旗下BugScan社区出品的国内首款基于社区的分布式漏洞扫描框架。TangScan是一款在线安全漏洞检测服务,一个由众多安全研究人员维护的企业在线安全体检平台。上述框架都拥有一套自己的验证程序脚本的编写规范。对此,文中也研究了将这些不同的编写规范相兼容的方法,以达到快速编写验证程序的目的。

1 系统结构

    系统整体结构分为Docker管理模块、POC验证模块和数据库。

    如图1所示,Docker管理模块分为容器、镜像、仓库三个部分[6]。容器模块负责本地容器的创建、运行、终止和删除。镜像模块负责从仓库中获取镜像、添加标签、上传镜像和删除镜像。仓库模块负责存储制作好的镜像和提供镜像的下载服务。验证模块分为执行、框架和库三个部分,执行模块是验证过程的入口,所有的验证程序都由执行模块执行,为了兼容不同类型的POC,执行模块会根据不同类型的POC来调取相应的框架来解析执行,具体的验证代码则是存放在POC库中。最后如果验证通过,证明漏洞存在并且POC有效,就会将相应的镜像、容器启动的参数、仓库的地址和验证代码等具体信息存放到数据库中[7]

jsj1-t1.gif

    系统的使用者需要提供给系统所需的资源来启动处理过程,包括搭建环境所需要的Docker镜像、漏洞的详细信息、漏洞利用程序等资源。

    如图2所示,系统首先会加载漏洞所需要的资源,一个完整的漏洞资源包括Docker镜像或Dockerfile、漏洞的详细信息、漏洞的种类、漏洞的危害程度、漏洞的评分、漏洞的利用程序等资源。

jsj1-t2.gif

    判断资源完整性后,如果资源完整,说明可以产生一个Docker容器,并且提供了相应的验证程序。接下来,框架会根据提供的验证程序信息调用不同的验证框架来尝试验证Docker容器中运行的有漏洞的程序。在验证程序验证完成后,系统会根据验证的结果来判断漏洞提交者所提交的资源是否有效,若有效,则将相关的信息存入数据库中;否则终止验证过程,重新调整资源。

2 Docker容器虚拟化技术

    Docker是PaaS提供商dotCloud开源的一个基于LXC(Linux Container)的应用容器引擎,让开发者可以将应用程序、依赖的运行库文件打包并移植到一个新的容器中,然后发布到任何系统为Linux的机器上,也可以实现虚拟化解决方案[8]

    Docker的三大核心概念是镜像、容器和仓库。Docker镜像类似于虚拟机镜像,可以理解为创建Docker容器的模板,它是创建容器的基础。Docker镜像是必须向此漏洞验证系统所提交的资源之一。

    容器是完全沙箱机制的实现方式,任意容器之间不会有任何接口,具有安全访问资源的特性,而且容器的运行资源开销小,可以很容易地在机器和数据中心中运行。容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除[9]

    Docker仓库是Docker集中存放镜像文件的场所,仓库可以分为共有仓库和私有仓库两种形式。漏洞验证框架验证后的Docker镜像就会存放在私有仓库中。

    如图3所示,镜像是容器的前提,镜像可以通过Pull操作从Docker仓库中下载,完整制作的镜像也可以通过Push操作向Docker仓库中推送。下载镜像到本地后,就可以使用镜像来创建容器了,容器不同于镜像,容器拥有运行时需要的可读写层,而镜像只是静态的只读文件。通过run命令启动的容器处于运行状态,对于运行状态的容器可以使用stop来终止,终止状态的容器并没有消失,可以使用start操作来重新启动。如果希望容器暂停工作一段时间,可以使用pause操作将容器切换到暂停状态,处于暂停状态的容器不会占用CPU资源,直到通过unpause操作恢复运行。

jsj1-t3.gif

2.1 Docker容器与传统虚拟化的不同

    传统的服务器虚拟化解决的核心问题是计算资源的调配,而Docker容器解决的核心问题是应用开发、测试和部署。如图4所示,虚拟机技术通过Hypervisor层抽象底层基础设施资源提供相互隔离的虚拟机,通过统一配置、统一管理,计算资源的可运维性,资源利用率能够得到有效的提升。同时,虚拟机提供客户机操作系统,客户机变化不会影响宿主机,能够提供可控的测试环境,更能够屏蔽底层硬件甚至基础软件的差异性,让应用做到广泛兼容。然而虚拟化技术因为要多模拟出一层操作系统,都不可避免地出现计算、IO、网络性能的损失[10]。而容器技术严格来说并不是虚拟化,没有客户机操作系统,是共享内核的。容器可以视为软件供应链的集装箱,能够把应用需要的运行环境、缓存环境、数据库环境等封装起来,以最简洁的方式支持应用运行,轻装上阵,性能更佳[11]

jsj1-t4.gif

    Docker镜像特性则让这种方式简单易行。当然,因为Docker共享内核的特性,所以容器隔离性没有虚拟机那么好[12]

2.2 获取Docker镜像

    Docker镜像可以通过pull操作直接从仓库中下载,也可以通过Dockerfile来创建。

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大地简化了部署工作。

    如图5所示,Dockerfile从FROM命令开始,紧接着跟随者各种方法、命令和参数,其产出为一个新的可以用于创建容器的镜像。

jsj1-t5.gif

3 POC验证模块

    为了提高验证模块的兼容度、降低验证程序编写的学习成本,此系统采用插件式的验证框架设计,验证过程由验证引擎启动,根据验证程序的类型说明,由分类器来决定输入的参数和使用哪种框架来执行程序[13],Docker容器的启动所产生的属于漏洞环境的IP地址将作为参数输入到验证系统中[14],在经过相应的框架执行完成后,不同的框架会产生不同的返回值,甚至返回一个布尔值,这些返回值都将交给结果处理器来汇总处理。在验证程序验证成功后,在数据库中就会将相应的漏洞信息标记为有效。

4 框架测试

    测试漏洞为已经公布的couchdb数据库漏洞,漏洞编号为CVE-2017-12635,漏洞于2017年11月15日被披露,任意用户通过此漏洞可以创建管理员账户,造成垂直权限提升。向此系统提交漏洞的相关信息,提交的Dockerfile主要内容为:(1)从镜像库中以Debian系统来作为基础镜像;(2)获得CouchDB相关的运行脚本;(3)更新软件源中的所有软件列表;(4)从软件源中安装cURL软件;(5)运行从第二步获得的脚本,设置参数来添加CouchDB普通权限用户;(6)运行CouchDB服务。

    在以Dockerfile生成的镜像的基础上启动容器,启动容器时设置相关的端口映射使Docker容器中的CouchDB服务端口映射到本地主机上。

    在容器启动后,就可以调用相关的验证程序进行验证。编写验证程序时,可以使用任何一种验证框架来实现。此漏洞的验证程序的内容为发送一个经过特殊构造的HTTP请求包,目的是创建一个管理员账户。请求包中包含JSON数据,而此漏洞的形成原因就是由于Erlang和JavaScript对JSON解析方式的不同,使得语句执行产生差异性导致的。在数据包发送之后,验证程序会自动以刚刚创建的管理员账户进行登录,如果登录成功,就会返回漏洞存在的结果。确认返回结果后,系统将相关的漏洞信息存放到了数据库中,并关闭了容器,漏洞验证完毕。

5 结论

    本文通过对Docker系统和漏洞验证系统的研究和设计,利用Docker容器和多框架的漏洞验证系统,设计了一种提供Dockerfile文件或者镜像后,可以快速地对漏洞环境进行验证的漏洞验证框架。通过向系统提供具体的漏洞和验证程序的测试,结果表明,本框架大大简化了漏洞环境的搭建过程,同时也提升了漏洞验证的速度。综上所述,本框架为需要频繁验证不同的漏洞提供了较有参考价值的解决方案。

参考文献

[1] 陈春玲,张凡,余瀚.Web应用程序漏洞检测系统设计[J].计算机技术与发展,2017,27(8):101-105.

[2] 陈峰,罗养霞,陈晓江,等.网络攻击技术研究进展[J].西北大学学报(自然科学版),2007,37(2):208-212.

[3] 罗玉斌.网络安全漏洞扫描系统的设计与实现[D].长沙:国防科学技术大学,2007.

[4] 赵智勇.网络攻击过程剖析[J].计算机与现代化,2012,8(8):55-56.

[5] 窦文超.网络攻击模拟器及其关键技术研究[D].天津:天津理工大学,2011.

[6] 董博,王雪,索菲,等.基于Docker的虚拟化技术研究[J].辽宁大学学报(自然科学版),2016,43(4):327-330.

[7] 肖小芳,宋建新.Docker网络通信研究与实现[J].通讯世界,2017(22):1-2.

[8] 钟良侃.Docker技术在Web服务系统中的应用研究[J].电脑知识与技术,2016,12(26):123-126.

[9] 邹保平,黄文思,张文晋,等.基于Docker的应用部署管理平台研究[J].电子设计工程,2017,25(12):41-44,48.

[10] 陈清金,陈存香,张岩.Docker技术实现分析[J].信息通信技术,2015(2):37-40.

[11] 张遥,王森林.Docker安全性研究[J].网络安全技术与应用,2017(8):32-33.

[12] 伍阳.基于Docker的虚拟化技术研究[J].信息技术,2016(1):121-123.

[13] 吴倩倩.综合型漏洞扫描系统的研究与设计[D].北京:华北电力大学(北京),2015.

[14] 王良.基于插件技术的漏洞扫描系统设计与应用[D].上海:上海交通大学,2012.



作者信息:

陈一鸣,寇小强,王永利

(华北计算机系统工程研究所,北京100083)

此内容为AET网站原创,未经授权禁止转载。