• 等保2.0测评 — 容器安全扩展要求(安全计算环境)


    以四级条款要求为例,实验环境如下:

    ​容器集群:kubernetes v1.28.8

    管理平台:Rancher v2.8.2

    镜像仓库:harbor v2.5.0

    dockerfile扫描工具:checkov 3.2.60

    镜像扫描工具:trivy v0.24.2Vulnerability DB:  Version: 2,UpdatedAt: 2024-04-03 00:20:56.550975906 +0000 UTC

    由于实验环境使用的产品有限,部分条款要求本次环境的开源产品无法满足,将引用联盟培训时的图片作为参考。后续实际测评中,如若遇到能较好满足条款要求的第三方平台,再做补充说明。

    另外本文如有理解错误或遗漏之处,欢迎各位读者批评指正,本文仅代表个人观点,不具备官方认可或代表性,仅供参考。

    注意:使用该扩展要求后,还需对整个集群内涉及的各类系统进行安全通用要求测评。例如管理平台Rancher v2.8.2,还需要作为系统管理软件进行测评,容器宿主机(节点) 当作主机测评对象、 容器管理平台作为系统管理、软件测评对象、 集群网络作为网络测评对象、 业务应用软件(可能是独立容器镜像, 也可能是多个容器镜像共同组成) 作为应用测评对象。

    一、 身份鉴别

    a) 应对管理平台的访问请求进行身份标识和鉴别,并确保使用安全协议连接。

    该条测评对象为:管理平台

    1.  检查管理平台是否配置了身份鉴别机制,如用户名密码、数字证书、双因素认证等;

    通过用户名+口令的方式进行身份鉴别


    1713320746_661f332ad6b746dd00293.png!small?1713320747643

    具有身份鉴别措施即符合


    2.  检查管理平台是否使用安全协议连接,如HTTPS、SSH等;

    Rancher 采用 https 协议

    1713320935_661f33e748691a10e7892.png!small?1713320936953


    确定安全协议连接应使用符合国家标准或行业规范的加密算法和密钥长度以Firefox浏览器为例,点击左上角的锁,点击不安全连接

    1713320962_661f340293ce76890666c.png!small?1713320963456

    选择更多信息

    1713320973_661f340d0e4fe241a4240.png!small?1713320973864

    在安全栏可以看到对应的算法以及协议

    1713320981_661f3415a42a62c8a00dc.png!small?1713320985242


    3.  模拟非法用户或使用非安全协议访问管理平台,观察是否能够成功访问或获取敏感信息。

    尝试输入http://172.17.200.47,会自动跳转成https

    1713320985_661f34197ad6cb571d787.png!small?1713320987108


    b) 应对容器镜像仓库的访问请求进行身份标识和鉴别,并确保使用安全协议连接。

    该条测评对象为:容器镜像仓库


    1.  检查管理平台是否配置了身份鉴别机制,如用户名密码、数字证书、双因素认证等;

    通过用户名+口令的方式进行身份鉴别


    1713321133_661f34ad09f8667403d06.png!small?1713321133779

    2.  检查管理平台是否使用安全协议连接,如HTTPS、SSH等;

    本次实验由于是内网环境,为了方便搭建,harbor仓库采用的是http协议,不符合安全协议要求

    1713321151_661f34bf7ed3c860433fc.png!small?1713321152492

    具体还可以去安装harbor的主机上看配置文件,确定其是否开放了http或https,配置文件名称一般为:harbor.yml

    1713321166_661f34ce3f64999a241f5.png!small?1713321167031


    3.  模拟非法用户或使用非安全协议访问管理平台,观察是否能够成功访问或获取敏感信息。

    如果采用https协议,同理尝试使用http是否能访问应用


    c) 应对容器实例的访问请求进行身份标识和鉴别,并确保使用安全协议连接。

    该条测评对象为:容器实例

    由于容器实例一般不会去开启SSH等常见的远程运维方式,在日常运维中一般通过管理平台进行远程管理操作。

    1. 检查容器实例是否配置了身份鉴别机制,如用 RBAC 认证等;

    容器实例管理需要配置身份鉴别机制,仅能授权用户进行管理。

    当我使用授权账户访问时,具有相应的容器实例管理权限

    1713321212_661f34fce7f61331ee98a.png!small?1713321215524

    我们切换为一个新增的普通账户,该账户无权限管理对应实例

    1713321225_661f35096a9c9b06b7efb.png!small?1713321226317


    2.  检查容器实例是否使用安全协议连接,如HTTPS、SSH等;

    在授权账户下点击对应的容器实例

    1713321251_661f3523f244c2158529e.png!small?1713321253176

    点击 Execute Shell

    1713321265_661f3531ec7f373636cbe.png!small?1713321266916

    此时就远程连接上了容器实例,Rancher该平台使用https协议

    1713321279_661f353fd0de817a271b8.png!small?1713321281119


    3. 模拟非法用户或使用非安全协议访问容器实例,观察是否能够成功访问或控制容器实例。

    通过容器管理平台来管理实例的话,查看平台是否能使用非安全协议


    二、 访问控制

    a) 应对管理平台实现基于角色或更细粒度的访问控制,支持设定不同用户对管理平台内各类资源和容器镜像资源的细粒度权限控制。

    该条测评对象为:管理平台

    1.  检查管理平台是否支持基于角色或更细粒度的访问控制,如是否有角色管理、权限管理、用户管理等能力;

    以Rancher为例,相关功能均在左边状态栏 用户&认证 这块

    1713321352_661f358896937658629ef.png!small?1713321353462

    在角色模版处有预设好的一些角色,点击可查看详情配置情况

    1713321367_661f3597576e7bc4b4606.png!small?1713321368410

    1713321371_661f359babccc3d175775.png!small?1713321375235


    2. 检查管理平台是否支持设定不同用户对各类资源的细粒度权限控制,如是否可以对不同资源设置不同的访问或操作权限;

    也可自身新建对应角色,授予相应的资源权限

    1713321397_661f35b5f1f883c80eaf7.png!small?1713321399702

    1713321407_661f35bf666fbd9c03d8c.png!small?1713321408339

    在用户创建页面可以选择相应的角色创建相应用户

    1713321411_661f35c378bb874cf895b.png!small?1713321412302


    3.  模拟不同角色或属性的用户访问管理平台,观察是否能够按照预设的权限进行访问或操作。

    这条一般默认符合,也可自行尝试登录确认访问控制是否真实

    例如仅给test账户设置普通权限用户

    1713321477_661f36053201ddc420407.png!small?1713321477930

    切换到普通用户后,该账户无法管理我们之前已创建的集群

    1713321497_661f3619bf42834098459.png!small?1713321498497


    b) 应实现对容器镜像仓库设定细粒度的访问控制,支持项目级别权限控制。

    该条测评对象为:容器镜像仓库

    1.  检查容器镜像仓库是否支持设定细粒度的访问控制,如是否可以对不同项目或分类设置不同的访问或操作权限;

    Harbor支持相应功能,默认情况下访问主页面,将展示所有项目类

    1713321518_661f362e84fd4c6f86fe9.png!small?1713321519768

    点击任意个一个项目,可设置相应的访问与操作权限,可查看该仓库是否公开

    1713321526_661f363632c52cd6de957.png!small?1713321528438

    1713321533_661f363d7e65083e57702.png!small?1713321534521


    2.  检查容器镜像仓库是否支持项目级别权限控制,如是否可以按照项目或分类进行容器镜像管理;

    Harbor 默认使用项目级别的访问控制

    1713321549_661f364dcb993e88088eb.png!small?1713321550931

    新增项目的同时即可选择相应项目的访问级别

    1713321556_661f36541aa789f2804fe.png!small?1713321559111

    在成员处可添加对应的用户

    1713321562_661f365a98823f974f062.png!small?1713321564057


    3.  模拟不同角色或属性的用户访问容器镜像仓库,观察是否能够按照预设的权限进行访问或操作

    例如使用test账户登录,发现之前访问级别为私有的项目无法访问,在主页面栏直接不显示

    1713321575_661f36678df4a8db3714f.png!small?1713321577629

    1713321581_661f366dab3a89ec2e25c.png!small?1713321582510


    c) 应实现多用户场景下容器实例之间、容器与宿主机之间、容器与其他主机之间的网络访问控制。

    该条测评对象为:容器实例

    1.  检查容器集群是否支持设定多用户场景下的网络访问控制,如是否可以对不同用户或项目组的容器实例设置不同的网络访问策略;

    可以通过相应的命名空间,来设置不同项目容器实例的网络访问控制策略

    1713321603_661f3683c56a9587e11cd.png!small?1713321605729

    在网络策略处进行相应的设置

    1713321610_661f368a926a5998b0ca4.png!small?1713321611406


    2.  检查容器集群是否支持对容器实例之间、容器与宿主机之间、容器与其他主机之间的网络访问控制,如是否可以按照IP地址、端口号、协议类型等条件添加网络策略

    可通过IP或者端口方式进行限制

    1713321625_661f3699920c867632717.png!small?1713321626478

    例如我这里设置了容器之间,禁止10.244.2.1/24 网段的去访问我命名空间下的机子

    1713321631_661f369f3b8915000926f.png!small?1713321634586


    3.  模拟不同用户或项目组的容器实例之间、容器与宿主机之间、容器与其他主机之间进行网络通信,观察是否能够按照预设的权限进行访问或操作。

    未做上述配置时,2.14的机子可访问1.14主机

    1713321648_661f36b05e5eddc901e22.png!small?1713321649201

    做了上述配置后无法访问成功

    1713321653_661f36b5ba8ed3e3f8505.png!small?1713321654934


    d) 应确保集群用户和应用程序对资源的访问控制权限随容器实例迁移。

    该条测评对象为:容器实例

    –检查是否使用专业工具确保集群用户和应用程序对资源的访问控制权限随容器实例迁移,如是否有权限管理功能模块;

    –检查是否能够在容器实例迁移前后查看和比较其访问控制权限,如是否有权限展示和比较功能;

    –模拟不同用户或项目组的容器实例进行迁移,观察是否能够保持其原有的访问控制权限。


    例如原先tomcat容器运行在node1节点上,此时ip为10.244.1.13

    1713321793_661f3741ba2f7d7a4d201.png!small?1713321794476

    经过克隆迁移至node2节点上,此时IP为10.244.2.8,相同账户仍具有对应容器实例的管理权限

    1713321802_661f374a8885f72650594.png!small?1713321803535

    1713321816_661f3758ab19defd49f3f.png!small?1713321817558


    e) 应使用安全容器运行时技术实现内核级别的强隔离。

    该条测评对象为:计算节点、容器实例

    –检查是否使用安全容器运行时技术实现内核级别的强隔离,如是否有安全容器运行时软件和配置;

    –检查是否为每个容器实例提供了一个独立的内核空间或沙箱,如是否可以查看容器实例的独立内核或沙箱信息;

    –模拟攻击者从一个容器实例向其他容器实例或宿主机发起攻击,观察是否能够成功攻击或控制。


    Kubernetes(K8S)本身并不提供内核级别的强隔离功能,而是依赖于底层的容器运行时技术来实现容器的隔离。

    我们可以在rancher平台中,找到对应节点去查看容器运行时的技术。该图说明当前主机正在使用Docker作为容器运行时,不满足条款要求。

    1713321845_661f3775ea070c82eed2c.png!small?1713321846816

    安全容器运行时技术是指提供独立的操作系统内核或沙箱的容器运行时技术,例如

    Kata Containers:Kata Containers是一个开源项目,旨在提供虚拟机级别的安全隔离,同时保留容器轻量级和易用性的特点。Kata Containers通常会作为一个独立的容器运行时与Kubernetes集成。


    三、 安全审计

    a) 应审计容器镜像使用情况,包括镜像上传、镜像下载事件,记录访问源 IP;

    该条测评对象为:容器镜像仓库


    1.  检查容器镜像仓库是否支持审计容器镜像使用情况,如是否有审计日志功能模块;

    harbor支持镜像使用情况,具有相应的审计日志功能模块

    1713321967_661f37ef098796efd1df4.png!small?1713321968038


    2.  检查容器镜像仓库是否记录了容器镜像的上传和下

  • 相关阅读:
    2023高教社杯全国大学生数学建模竞赛C题代码解析
    汽车驾驶任务的隐马尔可夫模型识别方法研究
    什么是透传模块 本人用过数据透传模块也开发过透传模块
    Filter和ServletContext和Listener
    Process assessment techniques-3
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)问题解决
    react native环境搭建
    为什么在Java中使用Integer,1000==1000是false,而100==100是true?
    第一个 Angular 项目 - 添加服务
    BATJ高频面试249道题:微服务+多线程+分布式+MyBatis +Spring
  • 原文地址:https://www.freebuf.com/articles/container/398239.html