更全的杂志信息网

SecDr:一种内容安全的Docker镜像仓库

更新时间:2009-03-28

0 引 言

云计算作为一种新的计算形式迅速发展起来,作为云计算关键支撑的虚拟化技术得到了深入的发展。Docker基于Linux内核的LXC虚拟化技术,利用Namespace实现应用程序、运行环境的隔离[1],由于其具备轻量化、快置备、低性能损耗等特点,被业界广泛使用。但由于Docker共享宿主机系统内核,与独立内核的虚拟机模式相比,安全面临更多风险[2]

Docker容器采用客户端服务器的架构模式,客户端与服务端交互,向服务端或守护进程发送请求,服务器或守护进程响应请求,完成所有工作并返回结果。Docker Registry作为容器的镜像仓库,当用户需要运行新的镜像时,服务端会与镜像仓库通信,搜索、拉取新镜像,然后创建并运行容器。当服务端生成新的镜像后,需要上传到镜像仓库保存,方便后续搜索和使用。Docker的公共镜像仓库如Docker Hub和Quay等均存在大量用户生成的镜像。用户可以方便地共享仓库中的镜像,这也带来了严重的安全隐患[3]

国内有很多关于Docker安全方面的研究工作,但主要分布在如何从底层提升Docker安全性而忽略了Docker镜像仓库这一重要环节,例如文献[2]认为Docker镜像及容器存在被篡改的风险,因此提出可信加固方法应对安全风险。文献[4]提出一种分层式数据安全性防护系统提高对Docker镜像的安全防护。文献[5]对Docker脆弱性进行分析,给出了诸多安全建议,但并没有针对Docker镜像仓库给出安全方案。国外有不少成果关注Docker镜像仓库的安全风险。例如文献[6]分析了全球133个公开Docker仓库中最大的91个仓库,扫描这些仓库中保存的镜像,其中的24%存在较为明显的漏洞,11%的风险等级为高,但并没有给出解决方案。文献[7]系统地分析了Docker Hub上的30万个镜像,发现平均每个镜像有180个漏洞,大多数镜像不会修复这些漏洞,同时漏洞会从父镜像向子镜像传播,但并没有给出如何解决Docker Hub的漏洞问题。本文设计的安全镜像仓库通过对提交到仓库中的镜像进行漏洞扫描和必要的渗透测试,较好地解决了该问题。

1 安全镜像仓库

本文设计并实现一种安全的Docker镜像仓库SecDr。该镜像仓库从公开漏洞库中和企业内部自有软件漏洞库中获取最新漏洞列表,在Docker用户提交Docker镜像后,立即对该镜像文件进行扫描,获取特征值,并与已知漏洞特征比对,确认镜像的软件包是否包含已知的漏洞;随后在测试环境中运行Docker容器对Docker镜像进行动态渗透测试,检查运行在容器内的应用程序可能存在的漏洞。数据库将保存静态漏洞扫描结果和渗透测试的结果并最终生成报告。该安全镜像仓库在电力行业的电力监控系统[8]开发过程中得到应用。SecDr架构如图1所示。

  

图1 系统架构图

2 镜像静态扫描模块

2.1 流程和原理

SecDr静态扫描的流程如图2所示,SecDr的采集器定期从CVE,RedHat,Ubuntu和Debian的公开漏洞数据库,以及企业私有应用程序漏洞数据库中同步最新漏洞信息,这些数据将作为静态扫描的依据对Docker镜像进行检查。用户提交新的镜像到仓库的操作会触发执行器对新提交的镜像静态扫描,静态扫描任务被推送到检查器,检查器从数据库中加载漏洞特征信息,从镜像仓库中逐层抽取镜像文件层的内容,检测静态内容中是否包含漏洞特征,当漏洞被发现时,将通知用户并将该发现保存到数据库中。漏洞、文件层和Docker镜像的对应关系将被保存在数据库中。

  

图2 静态扫描流程图

2.2 特征提取与比对

对镜像的静态扫描是基于公开漏洞库与镜像文件内容的特征比对实现的。SecDr从公开漏洞库和企业自建漏洞库中获取的漏洞特征值是以如下四元组给出的:

<漏洞名称,软件包名称,版本,风险等级>

由于漏洞库是公开的,所有人都可以通过网页抓取或通过API获取上述漏洞信息。其中“漏洞名称”标识该漏洞的名称,如CVE-2016-10009;“软件包名称”标识存在漏洞的软件包的名称,如OpenSSH;“版本”则标识该漏洞存在于哪些版本中,如5.0;“风险等级”标识该漏洞的影响分值。企业内部积累的漏洞数据需要调用接口获取,内部漏洞的特征值与公开库中漏洞的特征值表示方法相同。

对镜像的扫描就是查找镜像特征的过程。SecDr通过逐层扫描,获得镜像中安装软件包的列表,得到的信息可以用如下五元组标识:

<系统,文件层哈希值,软件包名称,版本,类型>

临时装片b(模拟降酸雨)的黑藻叶片的叶绿体颗粒明显比a(模拟降雨)减少,红墨水染色后装片a、b的细胞核都未着色,细胞是活的。

通过对比漏洞信息四元组与文件层信息五元组中“软件包名称”、“版本”这2项内容,就可以确定该文件层是否包含了指定的漏洞。SecDr支持的镜像系统包括Debian,Ubuntu,CentOS和Redhat。

其中,“系统”标识该镜像是基于哪种操作系统创建的,例如Debian7,CentOS6.5;“文件层哈希值”给出文件层在仓库中的哈希值,通过该值可以唯一确定文件层;“类型”则给出当前软件包是何种形式,如rpm或者dpkg。通过使用一种简单的方法即可获取镜像某个文件层安装的软件包的特征值,即检查该文件层上是否保存了系统软件包安装列表,例如/etc/os-release中记录了系统信息,Debian的系统文件/var/lib/dpkg/available中则记录了所有软件信息。通过读取系统文件中的内容即可收集该文件层的特征值。

6.8m~8.2m标高之间的多级直墙墙后平台护坡结构应以适应经常性高强度风浪淘刷为主,且为了避免工程化痕迹过于明显,故创新使用生态护坡结构。自嵌式瓶孔砖,其互嵌骑缝的结构可避免形成土体流失的通缝,起到增强铺装后护坡整体性、增强护坡抗冲刷能力的作用,可消浪防冲满足工程安全的需要;同时孔内可种植植物,使护坡面得到绿化,有助于改善护坡的生态性及景观性。

2.3 基于Docker文件层静态扫描优化

Docker早期基于AUFS[9]文件系统的模型使得Docker镜像是由多层文件组成的,默认情况下,只有第一层文件可写,其他层文件则是只读[10]。这种文件模型极大地方便了Docker镜像的共享,大量的文件层可以在不同镜像之间共享,而不需要在运行环境中下载和保存多个副本。SecDr在静态扫描时,充分利用Docker镜像文件系统的特点,在扫描某个Docker镜像之前,首先判断该文件层是否已经被扫描过,如果已经扫描过,则只需要获取扫描结果,从而提高静态扫描的效率。

SecDr渗透模块的攻击代码是安全团队成员向企业应用研发人员收集应用的基本信息后定制开发的。必要的信息包括应用程序类型、数据库类型、版本、服务端口、用户输入等。研发团队在向SecDr提交镜像的同时,需要提交在安全测试环境中Docker镜像的部署脚本。在实施渗透测试阶段,调用该脚本,从镜像仓库中拉取镜像,在测试环境中运行容器;从后端数据库中下载预编写的渗透代码部署到渗透服务器上,随后执行渗透代码。根据测试结果,生成测试报告。SecDr的渗透过程如图3所示。

由于采集器定时从漏洞源获取漏洞信息,因此需要定期针对增量漏洞,对仓库中的所有镜像重新扫描,在增量扫描过程中,可能发现某个文件层包含新的安全漏洞。此时,只需要在数据库中查询该文件层与仓库中镜像文件包含关系,即可确定哪些镜像包含新漏洞,减少扫描工作量。

针对用户交互的渗透:主要是对身份认证和会话管理的漏洞进行渗透。不严格的用户身份认证或不合理的权限限定可能造成漏洞[17]。SecDr通过暴力破解方法尝试获取管理员默认密码,如果应用程序没有限制用户登录次数,则基于密码字典的暴力攻击,可能获取管理员密码;SecDr同样会尝试非授权访问,绕过身份认证访问非授权信息。

3 容器渗透测试模块

针对业务逻辑类渗透:此部分渗透测试需要针对企业不同应用定制的测试逻辑[18]。例如SecDr对某些应用的输入部分尝试进行SQL注入或XML注入,以此测试应用程序是否对用户输入进行检验和过滤;SecDr针对性提供文件上传功能的应用会进行文件上传渗透测试,检验该应用是否对文件的类型、内容等进行合法性检查;SecDr的渗透测试同样会测试缓冲区溢出的攻击测试,以此验证应用程序是否验证用户输入的长度。

①基础设施层。在基础设施层,提供平台运行的必要软硬件资源,如数据库、文件服务器等。②平台覆盖层。平台覆盖层核心是解决了如何与底层各支持设备之间的交互,封装了一套各个基础子系统间调用的规范接口,解决了各个子系统间统一管理的问题,包括统一认证登录,权限拦截校验等。③基础应用层。基础应用层是一个个独立开发的基础子系统。④业务应用层。业务应用层系统是整个平台功能产品的核心,包括对现有业务系统的集成,新系统的开发。

“土地确权将进一步明晰农村土地产权,更好地保护农民利益,促进农村土地要素市场发育和优化配置。”中国社会科学院农村发展研究所研究员李国祥表示,随着土地确权工作的完成,下一步应当做好土地流转市场服务工作,让农村土地确权证在实际工作中发挥作用。同时,土地确权工作中的相关经验也可以在后续农村土地征收、集体经营性建设用地入市以及农村宅基地改革 “三块地”改革中推广。

  

图3 SecDr渗透测试实现过程

OWASP建议需要测试的漏洞包含几十种[13]。SecDr基于危害性大小有选择地支持渗透测试内容。按照产生的原因区分,主要包括信息泄露类漏洞、用户交互类漏洞、业务逻辑类漏洞、开源组件共4种类型[14]

针对信息泄露的渗透:由于没有处理特殊请求导致程序暴露了敏感信息[15],特别是某些Web程序在出错时会将详细错误栈返回到页面,收集这些信息通常是实施进一步攻击的基础[16]。在某些极端情况下,Web应用可能配置程序信息,如数据库连接、账号信息。SecDr基于路径遍历,尝试访问未授权的文件和目录,尝试读取程序日志、源代码和数据库连接配置等敏感文件,并尝试写数据库的上述文件,达到破坏的目的。

影响公立医院建立科学合理完善的内部监督评价机制的因素有很多,其影响最大的因素是:运营过程中各部门权责不明,工作标准不明确;医院内部缺乏专业性的评价团队,虽然有外部专业的评价团队可以聘用,但是长时间不利于医院的发展,增加医院的运营成本;内部控制评价机制缺乏激励措施,这大大降低了工作效率,不利于完善监督评价机制。

在企业级的镜像仓库中,新镜像通常基于已有的旧镜像生成,因此镜像之间共享的文件层较多,基于文件层进行扫描优化,能带来较好的效率提升。

对Docker镜像的静态扫描可从文件系统特征分析出系统软件版本存在的漏洞,但对于用户开发的企业应用的漏洞和配置弱点则往往缺乏足够的分析手段。SecDr基于Metasploit,SQLMAP等开源工具组成渗透测试模块,模拟黑客的恶意攻击行为,检验Docker容器的安全性。Metasploit是渗透测试和研究漏洞的平台,高度模块化的架构使得Metasploit具有很好的扩展性。渗透攻击模块对外提供了上千个攻击代码,利用发现的安全漏洞或配置弱点对远程目标系统进行渗透测试[11]。SQLMAP则可以自动化地侦测和实施SQL注入攻击以及渗透数据库服务器[12]

针对开源组件渗透:由于企业应用程序的研发过程中大量使用开源的第三方组件,第三方组件的安全漏洞通常会造成业务应用大面积的安全风险[19]。因此SecDr针对企业常用的各种开源组件的已知漏洞,编写渗透测试代码,对开源组件进行测试。

经过两天的温度计性能调控,我们已经将温度计设计得十分方便。使用方法为:放在身体或被测物体旁,打开开关,静心等待,直到听到蜂鸣器发出提示音后,扬声器及显示屏将给出测量结果。

4 结果与分析

SecDr在电力行业的电力监控系统等多个项目开发中得到应用。由于电力行业的高安全需求,要求任何系统在生产环境部署前需要经过权威机构的系统安全检测。本文选取电力监控系统的项目组在使用该系统前后,安全检测的结果对比,如图4所示。

  

图4 使用SecDr前后效果图

从图4可以看出,在使用SecDr前,镜像仓库中47%的镜像包含有系统漏洞,其中高危漏洞占比达到15%,在使用SecDr后,仓库中的镜像中只有14%包含有系统漏洞,且不包含有高危漏洞。该结果证明了SecDr的有效性。

从长远来看,推动华文教育的发展,需要大规模地开展海外华文教师的学历教育,为有需要的国家和地区造就各层次“科班”出身的汉语教师,这是海外华文教师专业化的必由之路;但是面对当前国际情势,特别是东南亚汉语师资的迫切需求,为有需要国家的各级各类学校和语言培训机构提供短期师资培训,也是一种见效快,受益面广的途径。通过“中国寻根之旅”活动开展华文教育,在活动期间安排短期师资培训,就是一种推广汉语、增加华裔青少年华语学习兴趣,进一步为汉语师资预备,缓解燃眉之急的好方法。

由于SecDr部署在单独的服务器上,静态扫描和渗透的对象只针对首次上传到数据库中的镜像,因此对用户下载已经通过安全检查的Docker镜像没有延迟。但用户首次上传Docker镜像后,该镜像为不可用状态,用户不能立即下载使用,镜像上传后首次下载的延迟与渗透测试的强度有关,通常需要数小时完成新镜像的渗透,如果仅进行静态扫描,则只需要数分钟。作为企业内部应用,通过用户方修改用户工作习惯,可以避免因为渗透测试造成的不可用延迟。

5 结束语

由于Docker镜像内容可能存在已知的系统漏洞,这些漏洞可能随着镜像的分发而扩散。部署到Docker容器里的企业应用程序也可能引入了程序缺陷和漏洞。针对上述2种情况导致的Docker内容安全问题,本文设计了一种内容安全的Docker仓库,在用户提交Docker镜像时就进行漏洞静态扫描,并使用预定义的渗透攻击代码对指定容器渗透测试,只有同时通过扫描和渗透测试的镜像才允许保存在该仓库中。在电力行业的项目开发中,SecDr的功能得到有效验证。

参考文献

[1] 浙江大学SEL实验室. Docker:容器与容器云[M]. 北京:人民邮电出版社, 2015.

[2] 王鹃,胡威,张雨菡,等. 基于Docker的可信容器[J]. 武汉大学学报(理学版), 2017,63(2):102-108.

[3] Combe T, Martin A, Pietro R D. To Docker or not to Docker: A security perspective[J].IEEE Cloud Computing, 2016,3(5):54-62.

[4] 许丽婷,傅翔君,杨晶晶. 基于Docker技术的分层式数据安全性防护系统[J]. 信息化研究, 2017,43(1):51-55.

[5] 杨文林,谭曦,郭俊廷,等. Docker脆弱性分析与安全增强[J]. 信息安全与技术, 2016(4):21-23.

[6] James Sulinski. Docker image vulnerability research[J]. Federacy Research, 2017,3(13):1-3.

[7] Shu Rui, Gu Xiaohui, Enck W. A study of security vulnerabilities on Docker Hub[C]// Proceedings of the 7th ACM Conference on Data and Application Security and Privacy. 2017:269-280.

[8] 胡朝辉,王方立. 电力监控系统通信安全技术研究[J]. 电子技术应用, 2017,43(3):21-24.

[9] Boettiger C. An introduction to Docker for reproducible research[J]. ACM SIGOPS Operating Systems Review, 2015,49(1):71-79.

[10] Giannakopoulos I, Papazafeiropoulos K, Doka K, et al. Isolation in Docker through layer encryption[C]// 2017 37th IEEE International Conference on Distributed Computing Systems. 2017:2529-2532.

[11] Nipun J. 精通Metasploit渗透测试[M]. 北京:人民邮电出版社, 2016.

[12] 李啸,胡勇. 基于sqlmap的被动SQL注入扫描技术研究与实现[J]. 现代计算机, 2016,28(1):38-42.

[13] Meucci M, Muller A. The OWASP testing guide 40[J]. Open Web Application Security Project, 2015,8(3):1-224.

[14] 赵丽娟. Web应用程序渗透测试方法研究[D]. 长沙:中南大学, 2014.

[15] 王丹,赵文兵,丁治明. 应用常见注入式安全漏洞检测关键技术综述[J]. 北京工业大学学报, 2016,42(12):1822-1832.

[16] 韩心慧,王东祺,陈兆丰,等. 云端服务器敏感数据保护方法研究[J]. 清华大学学报(自然科学版), 2016,56(1):51-57.

[17] 宋雅楠,刘萍. 渗透测试的信息抓取策略研究[J]. 计算机系统应用, 2017,26(8):232-237.

[18] 王扬品,程绍银,蒋凡. 应用漏洞扫描系统[J]. 计算机系统应用, 2015,24(12):58-63.

[19] Dashevskyi S, Brucker A D, Massacci F. On the security cost of using a free and open source component in a proprietary product[C]// International Symposium on Engineering Secure Software and Systems. 2016:190-206.

 
魏兴慎,苏大威,屠正伟,刘苇,祁龙云,吕小亮,杨斌
《计算机与现代化》 2018年第05期
《计算机与现代化》2018年第05期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号