zoukankan      html  css  js  c++  java
  • Cloud Foundry warden container 安全性探讨

    本文将从Cloud Foundrywarden container的几个方面探讨warden container的安全性。

     

    1. warden container互訪


    1.1.  互訪原理·

    Cloud Foundry内部,用户应用的执行环境通过warden container来进行隔离。

    当中,网络方面。container之间的互訪例如以下图:



    如果container1主动訪问container3

    1.  container1从自身的虚拟网卡virtual eth0_0发起请求。因为自身内核路由表中的指向,请求发至virtual eth0_1(下面简称为网关);

    2.  virtual eth0_1接受到请求。讲请求转发至host主机的物理网卡eth0

    3.  host物理网卡eth0接收到请求。从而交给内核网络栈处理。

    4.  请求在内核网络栈中的处理流程中,首先进行源地址转换(SNAT),使用host主机的eth0ip地址替换请求数据包的源ip地址。即讲10.254.0.2替换为10.10.18.83。随后在进行route路由转发。

    5.  经过SNAT转换之后,请求发往内核路由部分,依据路由表中规则。请求将会转发至virtual eth2_1网关;

    6.  请求回到host宿主机,開始发往virtual eth2_1网关;

    7.  Virtual eth2_1网关接收到请求,依据规则转发至container3的虚拟网卡virtual eth2_0

     

           整体而言。全部从container内部发起的请求,仅仅要经过host宿主机。在其内核网络栈中均会进行SNAT。随后进行route路由处理。这种话。container之间的互訪也就有了可能性。

     

    1.2.  潜在安全问题

           Cloud Foundry是个多租户的PaaS云平台,不同租户的应用极有可能被部署在同一个DEA上的不同container内部。

    以上的分析表明。同个DEA上的不同container全然有可能进行互訪,因此如果租户A的应用在containerA中,通过某些途径(如ip推測。port轮询等方式),能够获取到租户B的应用在containerB中监听的port,那么租户A具备了攻击租户B应用的条件,从而存在安全隐患。

     

    1.3.  解决方式设计

     

    方案一:

            如果设计的目标是让全部的container之间都不具备互訪的能力。则配置host宿主机的网络内核栈规则是一个可行的方案。

            1.1中的分析中能够得出结论。关于container发起的请求。在到达其它container之前都会经过host宿主机的eth0物理网卡。当中,在host宿主机内核网络栈中。进行规则处理,最后进行转发。

            container中发起的请求。会经过host宿主机的eth0物理网卡,因此能够在eth0将请求交给内核网络栈后,内核网络栈能够在进行SNAT处理之前先校验数据报的源ip地址以及目的ip地址。

    若源ip地址和目的ip地址均为DEA内部containerip地址,则将数据报直接丢弃。

     

           方案一中的设计,尽管能够满足container之间不能互訪的要求,可是配置全部container之间不能互訪的做法显得灵活性不足。

            如果租户A有多个应用分别执行在同一个DEA上的不同container内部,该场景使用方案一的话。租户A自己的应用也将不能互訪。这大大减少了租户对执行环境要求的灵活性,也削弱了租户A应用的功能。


    下面介绍方案二的设计。

     

    方案二:

           引入应用安全组的概念,同意用户配置container的外出防火墙规则,主要为用户提供创建和隔离应用组的安全网络zone的概念。

           应用安全组的实现,使得租户A的应用container与其它租户的应用container保持网络不能互訪。而对于同一个租户自己的多个应用,租户有权限依据需求进行配置。使得有须要的container之间能够进行互訪,而没有须要的container之间不能互訪。



    2. ContainerCloud Foundry组件级别的互訪

           眼下Cloud FoundryDEA上执行的container能够訪问不论什么Cloud Foundry的组件。相反Cloud Foundry不论什么组件都能够訪问container,这显然是不利于整个平台的安全防护的。



    2.1.  互訪原理 

    2.1.1. Container訪问Cloud Foundry组件

            如果container发起请求,连接Cloud FoundryDEA外的其它组件,则该请求会在进行SNAT处理之后。有eth0进行转发。仅仅要host宿主机与其它组件的机器保持网络畅通,则container全然能够与Cloud Foundry的其它组件进行通信。当中,container默认合法的訪问组件仅仅有gorouter以及service组件。若完毕应用间通信的话,container与其它DEA之间的通信也将被觉得合法,而和其它组件的通信均能够觉得是非法的。详细流程图例如以下:


     

    2.1.2. Cloud Foundry组件訪问container

            该部分内容与2.1.1中大致同样。因为外界訪问container的请求都会被做DNAT处理,因此全部可以訪问container所在宿主机的Cloud Foundry组件都能够訪问host主机,则均能够訪问container。眼下同意訪问DEA内部containerCloud Foundry内部组件,仅仅有gorouterservice,以及其它DEA(如果同意应用之间同意互相通信),而Cloud Foundry其它的组件訪问container均被觉得是非法的。

     

    2.2. 潜在安全问题

    2.2.1. Container非法訪问Cloud Foundry组件的安全

           Cloud Foundry托管用户应用的执行,如果用户上传恶意应用,而恶意应用与Cloud Foundry其它的组件能够保持网络的畅通。则恶意应用全然有可能具有能力对Cloud Foundry的其它组件进行攻击,从而影响到整个平台的安全性。

     

    2.2.2. Cloud Foundry组件非法訪问container的安全

            原则上。因为Cloud Foundry组件是平台级别的,对container的訪问理论上不会造成非常大的影响。然而当Cloud Foundry平台级别的组件受到恶意攻击并被攻破,而DEAcontainer没有受到攻击的时候。如果Cloud Foundry组件还能够訪问container。则恶意攻击还将蔓延至用户部署的应用上。而限制Cloud Foundry组件非法訪问container的策略,能够在Cloud Foundry平台被攻击的情况下,大大提高用户应用的安全性。

     

    2.3. 解决方式设计

            对于Cloud Foundrycontainer内部訪问Cloud Foundry其它组件的情况。能够配置DEA所在的host宿主机防火墙规则来实现。

            container内部的请求发送至host宿主机的物理网卡eth0,在做SNAT地址转换之前。由宿主机内核网络栈对请求进行处理,假设目的ip地址不是gorouterservice或者dea的话,该数据报将会被丢弃。

            为实现以上的策略,DEA在启动之前须要获知全部Cloud Foundry内部组件的角色与IP地址映射关系,从而通过这些映射关系配置防火墙策略。


    3. ContainerService组件的互訪


    3.1.  互訪原理

           Cloud FoundryService的存在大大完好了应用的功能性。然而。眼下Cloud Foundry内部的应用对于Service的訪问,仅仅需应用持有数个元素,即能够訪问service instance。这些元素主要有5个,即service instanceipportusernamepasswordinstance name

            关于service instance訪问请求的流程,与container訪问Cloud Foundry其它组件的原理一致,例如以下图:


     

    3.2.   潜在安全问题

            如果一个租户的应用非法持有了某service intance的这5个元素,那么此应用将会全然有能力訪问该service instance

    原先的Cloud Foundry对于这样的情况,没有合适的应对措施,也就相当于默认service instance的这样的安全隐患。

            以上的叙述可见,关于container訪问service的安全隐患,主要体如今防范的局限性方面。由于全部的安全策略制定都依赖于service instancecredentials信息。也就是5元素上。在眼下工业界中,依靠这部分的安全保护。已经显得不足。并且Cloud Foundry是一个面向多租户的PaaS,数据的安全性格外敏感,必须从多个维度来保护用户数据的安全性。

     

    3.3.   解决方式设计

     

    方案一:

           通过配置container所在的host宿主机防火墙规则,来实现合法应用对service instance的合法訪问。而且阻止非法应用对service instance的非法訪问。

    详细实现例如以下:

    1.   在应用和service instance绑定完成之后,DEA会将service instancecredentials信息当作參数放入应用启动请求中;

    2.  DEA能够在启动应用之前,先提取containerip地址,以及service instanceip地址信息,从而在host宿主机上配置防火墙策略,实现,containerservice instance的合法訪问,而没有绑定过service instancecontainer则在非法持有正确的credentials之后。也无法訪问service instance

    3.   当停止应用的时候,DEA首先解析containerip地址以及service instance的信息,随后删除防火墙记录。

     

    方案二:

           通过配置service instance所在的Service Server所在节点。来实现合法应用对service instance的訪问,而且阻止非法应用对service instance的非法訪问。

    详细实现例如以下:

    1.   在应用和service instance进行绑定的时候,由Cloud Controller告知service server所在节点。绑定service instance的应用所属的IP:PORT映射对;

    2.   Service Server所在节点。接收到Cloud Controller发送来的请求后。制定自身的防火墙策略。从而保证仅仅同意绑定service instance的应用所相应的IP:PORT映射对才干訪问该节点。

    3.   当应用停止的时候。Cloud Controller发送请求给Service Server所在节点,由Service Server所在节点删除防火墙记录。 


            以上便是对Cloud Foundry中warden container的部分安全性探讨。

            未完待续。




    关于作者:

    孙宏亮,DAOCLOUD软件project师。两年来在云计算方面主要研究PaaS领域的相关知识与技术。

    坚信轻量级虚拟化容器的技术,会给PaaS领域带来深度影响,甚至决定未来PaaS技术的走向。


    转载请注明出处。

    本文很多其它出于我本人的理解,肯定在一些地方存在不足和错误。希望本文可以对接触warden安全性的人有些帮助。假设你对这方面感兴趣,并有更好的想法和建议。也请联系我。

    我的邮箱:allen.sun@daocloud.io
    新浪微博:@莲子弗如清
                          

  • 相关阅读:
    xml转换为json格式时,如何将指定节点转换成数组 Json.NET
    快速删除C#代码中的空白行
    C#编程中的Image/Bitmap与base64的转换及 Base-64 字符数组或字符串的长度无效问题 解决
    Flash设置(各种版本浏览器包括低版本IE)
    使用vcastr22.swf做flash版网页视频播放器
    使用VLC Activex插件做网页版视频播放器
    web项目 在visual studio 输出窗口显示调试信息
    geos 3.6.3库windows版本 已编译完成的32位版本和64位版本
    vs2017 打开附带的localdb v13
    visual studio code 里调试运行 Python代码
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5183477.html
Copyright © 2011-2022 走看看