精华内容
下载资源
问答
  • 容器安全指南.pdf

    2020-09-02 22:39:28
    NIST-800-190 应用容器安全指南(中文版)。独自翻译了英文版,欢迎大家提出建议。应用容器技术,也称为容器,是操作系统虚拟化与应用程序软件打包结合的一种形式。容器提供了一种打包,运行应用程序的便携式,可...
  • 2021腾讯云容器安全白皮书,高清正式版
  • 通过统计资料和实时信息分析,小编为大家推荐了这一款压力容器安全技术监察规程,只为给你最全面、最详细...该文档为压力容器安全技术监察规程,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看看
  • DoSec安全团队参考CIS标准,并根据实践经验,整理了国内第一份的docker容器安全最佳实践白皮书,涉及了需要关注docker安全的105个控制点。
  • 管吧小编带来一篇压力容器安全管理人员岗位职责,在日常生活工作中需要用的朋友可以来使用,通过压力容器...该文档为压力容器安全管理人员岗位职责,是一份很不错的参考资料,具有较高参考价值,感兴趣的可以下载看...
  • 该文档的目的是解释与容器技术有关的安全问题, 并为规划、 实施和维护容器时解决这些问题提出切实可行的建议。组织机构应遵循这些建议, 以确保其容器技术的实施和使用安全
  • 《TSG 21-2016 固定式压力容器安全技术监察规程》.pdf 2016年2月22日发布 交流机械化工管道等资源 新人 请多关照
  • 容器技术通过共享主机操作系统内核,实现轻量的资源虚拟化和隔离,近年来在DevOps、微服务等...北京神州绿盟信息安全科技股份有限公司携手硅谷知名容器安全公司NeuVector,联合发布《2018绿盟科技容器安全技术报告》。
  • 玩转容器安全二 - 容器安全概述

    千次阅读 2020-11-29 16:43:10
    容器安全概述 根据我自己的理解,将容器安全划分成了6个方向,各个方面还存在二级分支方向,本文就这6个方向及其二级分支展开我对容器安全的理解。话不多说,开篇一幅图,后面全靠编。 承载容器或容器集群的宿主机...

    容器安全概述

    根据我自己的理解,将容器安全划分成了6个方向,各个方面还存在二级分支方向,本文就这6个方向及其二级分支展开我对容器安全的理解。话不多说,开篇一幅图,后面全靠编。

    容器安全概述

    承载容器或容器集群的宿主机的安全性

    首先就是容器宿主机的安全,在一个企业内部,如果划分了基础运维团队与容器团队(CaaS, Container as a Service 容器即服务),那么容器宿主机的安全性由基础运维团队负责,通常与传统基础设施安全保持一致。这块就是一些老生常谈的话题,如:

    • 主机身份鉴别与访问控制:主要是操作系统的特权账号与普通账号管理、账号权限管理、密码策略、登录策略等;
    • 补丁更新:补丁定期更新策略、高危漏洞补丁及时更新策略等。这一块,基础运维团队除了应该关注会对宿主机自身造成中高风险的漏洞,还应关注与Docker相关的漏洞,如:利用DirtyCow漏洞实现Docker逃逸
    • 安全防护能力:主要是部署入侵检测与防护产品、防病毒产品,定期更新安全产品的软件版本与防护策略等;
    • 运行容器的用户权限:这里需要理解一下Docker容器中的uidgid相关概念,就能发现如果使用特权用户启动容器会出现哪些风险,但是根据目前我片面的了解来看,大部分都没有配置特定用户权限来启动容器;
    • 审计和配置容器守护程序目录或文件:/var/lib/docker, /etc/docker, docker.service, docker.socket, /etc/default/docker/, /etc/docker/daemon.json, /usr/bin/docker-containerd, /usr/bin/docker-runc需要对这些文件执行审计,并配置合理的权限,关于审计内容与权限设置的要求,请参见附录Docker容器最佳安全实践白皮书V1.0

    容器软件自身的安全性

    其次就是容器软件Docker自身的安全性,这里我引用了以下链接的部分内容:

    技术干货 | Docker 容器逃逸案例汇集 https://www.cnblogs.com/xiaozi/p/13423853.html

    • docker remote api未授权访问漏洞;

    • docker.sock挂载到容器内部:此场景容易出现在Jenkins CI/CD流程中;

    • docker高危启动参数:

      • --privileged:特权模式,此场景也容易出现在Jenkins CI/CD流程中;
      • -v:挂载敏感目录;
      • --cap-add=SYS_ADMIN:允许执行mount操作;
      • --net=host:绕过Network Namespace;
      • --pid=host:绕过PID Namespace;
      • --ipc=host:绕过IPC Namespace。
    • Shocker攻击

    • CVE-2014-5277:Docker和docker-py代码注入漏洞

    • CVE-2014-6408:Docker权限许可和访问控制漏洞

    • CVE-2014-9357:Docker权限许可和访问控制漏洞

    • CVE-2014-9358:Docker目录遍历漏洞

    • CVE-2015-3627:Docker Libcontainer和Engine权限许可和访问控制漏洞

    • CVE-2015-3630:Docker Libcontainer与Engine安全绕过漏洞

    • CVE-2019-14271:docker cp命令导致容器逃逸

    • CVE-2019-5736:docker runc容器逃逸

    • 更多docker漏洞信息:https://www.cvedetails.com/vulnerability-list/vendor_id-13534/product_id-28125/Docker-Docker.html

    对于容器软件自身的安全性来说,定期更新docker版本或在docker出现高危漏洞时及时更新版本就能解决此类型问题。但由于docker本身是作为底层资源,版本升级可能会要求重启服务这就会影响业务的正常运行。所以我们在解决版本升级这类型的问题时,按以下步骤来解决:

    • 补偿性的控制措施:通过第一节内容保护宿主机安全,加强容器的访问控制,加固运行在容器中的应用程序等实现降级处理;
    • 临时解决方案:通过一些安全产品或官方提供的临时解决方案来保护容器安全,很多时候临时解决方案可以一定层度上规避风险,但不应该将临时解决方案作为最终解决方案;
    • 分阶段进行版本更新:容器在企业内部的使用大都应用了负载均衡技术,我们可以划分阶段来进行版本更新动作,但是如果容器环境管理比较混乱,此方案可行性较低;
    • 新环境中解决此类型的问题:对于后期构建的容器环境必须使用包含补丁的版本。

    整体来说,docker版本升级是高危操作,但依旧需要根据漏洞风险和企业实际情况来制定更新计划,如2018年的docker runc容器逃逸漏洞修复方案:https://developer.aliyun.com/article/690053。

    容器的安全基线与合规性要求

    主流的容器安全基线有两个大的板块:Docker与Kubernetes,CIS分别对其作出了要求,这里我们简单对比一下CIS_Docker_1.13.0_Benchmark_v1.0.0CIS_Kubernetes_Benchmark_v1.5.1

    CIS_Docker_1.13.0_Benchmark_v1.0.0CIS_Kubernetes_Benchmark_v1.5.1
    Host ConfigurationControl Plane Components
    Docker daemon configurationetcd
    Docker daemon configuration filesControl Plane Configuration
    Container Images and Build FileWorker Nodes
    Container RuntimePolicies
    Docker Security Operations

    对比两者我们可以发现,Docker基线章节也就是本文的第一章的内容,而Kubernetes基线更多关心的是集群管理的问题,同时Kubernetes安全是基于在Docker安全的拔高要求,在本章的第6节我会简单列举Docker集群的安全性,后期我会通过一篇专门的文章来梳理一下Kubernetes集群的安全性。

    PS:在上述提到的附录Docker容器最佳安全实践白皮书V1.0其实就是翻译了Docker Benchmark内容,推荐大家去看CIS的官方文档,中文翻译有一些描述上的偏差。我将两个文档共享在:https://share.weiyun.com/A3G1wWMo

    容器镜像的安全性

    接下来就是容器安全中尤为重要的一个版块,我将其分为:

    基础镜像的安全性

    镜像是一层一层构建而来,很多操作系统、应用程序的基础镜像构建都是对应的官方与Docker Hub构建的。我们在使用这部分镜像需要注意的是基础镜像包含安全漏洞,如CentOS 5.11与CentOS 6.6的基础镜像中就包含CVE-2014-6277漏洞;其次就是我们使用存在供应链攻击的基础镜像或非官方基础镜像(Bad Image, 恶意镜像),这些镜像中可能包含恶意程序、后门等。

    对于基础镜像的安全性,首先是尽可能不要使用非官方的基础镜像,其次就是需要对使用的基础镜像执行漏洞扫描并修复扫描发现的漏洞。

    镜像构建的安全性

    镜像构建的方式有两种,第一种是拉取基础镜像,然后通过基础镜像创建容器,在容器中执行相应的操作,最后将容器打包成镜像并上传到镜像仓库以备后期;第二种是通过Dockerfile来构建镜像。那么这两种构建过程中可能的安全风险如下:

    • 最小权限原则:软件安装、端口暴露;
    • Dockerfile文件包含敏感信息。

    镜像仓库的安全性

    在企业内部,随着容器化的不断发展,团队会构建私有镜像仓库来存储基础镜像、业务镜像等。其安全性尤为重要,在私有镜像仓库这块,通过我的实践主要是以下几个方面的问题:

    • 镜像仓库是否使用HTTPS:这一点上如果私有仓库不会通过互联网,只通过局域网对镜像仓库即可进行操作则可不予理会;
    • 镜像仓库对镜像的校验能力:目前开源的私有镜像仓库都具备这个能力,但是部分需要手工配置;
    • 镜像仓库的身份鉴别与访问控制:这一点是私有镜像仓库最重要的一点,首先是访问私有镜像仓库需要身份鉴别与认证;其次就是镜像仓库内不同业务的镜像需要具有访问控制的能力;
    • 镜像仓库的审计能力:镜像仓库应该具备对镜像操作的审计能力;

    容器运行时的监控、入侵检测与安全防护

    对于容器资源监控与使用方面,目前已有一些开源或成熟的商业系统可以支持,如Grafana、Prometheus。但是对于容器的安全监控商业产品我了解相对较少,所以我在本文中我只会列出一些容器运行状态下的安全问题:

    • Docker Security Capability:
      • AppArmor: AppArmor(应用程序防护)是一种Linux安全模块,可保护操作系统及其应用程序免受安全威胁;
      • SELinux: SELinux是一个应用程序安全系统,它提供了一个访问控制系统,大大增强了自由访问控制模型;
      • Seccomp: Seccomp是一种Linux内核功能,可用于限制容器中可用的操作;
    • 不使用--privileged参数启动容器;
    • 端口开放必须遵循最小权限原则,不暴露未使用的端口;
      不在容器中启用SSH服务;
    • 不共享主机的网络命名空间(Namespace),也就是不要使用--net=host参数启动容器;
    • 设置故障容器自动重启策略,也就是使用--restart参数;
    • 容器根文件系统设置为只读;
    • 对容器的出口流量进行安全分析,接入NIDS进行分析;

    等等

    容器集群的安全性

    对于容器集群Kubernete安全较重要的如下:

    • 控制对Kubernetes API的访问:TLS APII、API认证与授权;
    • 控制对Kubernetes Kubelet的访问;
    • 在运行时控制工作负载或用户的功能:
      • 限制集群中的资源使用;
      • 控制容器的运行权限;
      • 防止容器加载不必要的内核模块;
      • 限制网络访问;
      • 限制云元数据API访问;
      • 控制Pod可以访问哪些节点。
    • 保护集群组件:
      • 限制访问etcd;
      • 启用审计日志
      • 限制访问alpha或beta功能;
      • 定期轮换基础架构的凭据;
      • 集成第三方组件之前必须执行审计;
      • 加密静止的密钥;
      • 接收安全更新警报并报告漏洞。

    如同上面所说,集群安全已经算是容器安全的另一个主题,所以本文对集群的安全不过多描述(主要是我还没有吃透)。

    容器的安全工具

    容器在前几年发展迅速,安全问题也得到了相应的重视,业内出现了很多针对容器安全的工具。当然工具不是本篇文章的重点,后续我会更新关于容器安全工具的安装、使用与对比。这部分主要来源于:https://sysdig.com/blog/33-kubernetes-security-tools/

    容器安全工具

    未完待更新。

    Appendix

    Docker容器最佳安全实践白皮书V1.0

    https://share.weiyun.com/e01eklAr

    Aliyun Docker and K8s ATT&CK Matrix

    Aliyun Docker and K8s ATTCK Matrix

    Azure K8s ATT&CK Matrix

    微软云 K8s Attck Matrix

    Reference

    • 10个确保微服务与容器安全的最佳实践:http://dockone.io/article/8207
    • 20种终极工具,为你的Docker搭建安全防火墙:https://mp.weixin.qq.com/s/3IFodzE6K7vr1mHEZdZskA
    • 29 Docker security tools compared:https://sysdig.com/blog/20-docker-security-tools/
    • 33个Kubernetes安全工具:https://blog.fleeto.us/post/33-kubernetes-security-tools/
    • 76%都存在漏洞?!Docker镜像安全扫描应该这样做:https://dbaplus.cn/news-160-2275-1.html
    • 2018 绿盟科技容器安全技术报告:http://www.nsfocus.com.cn/upload/contents/2018/11/20181109100414_79051.pdf
    • 2019年度容器安全现状分析:https://mp.weixin.qq.com/s/jtDlMe5SprpZfIfXryAjzg
    • DOCKER SECURITY BEST PRACTICES PART 4 – RUNTIME SECURITY:https://anchore.com/blog/docker-security-best-practices-part-4-runtime-security/
    • Docker Security Guideline:https://docs.docker.com/engine/security/
    • Docker安全入门与实战(一):https://zhuanlan.zhihu.com/p/43586159
    • Docker安全入门与实战(二):https://zhuanlan.zhihu.com/p/43671129
    • Docker安全入门与实战(三):https://zhuanlan.zhihu.com/p/43671511
    • Docker安全入门与实战(四):https://zhuanlan.zhihu.com/p/43673419
    • Docker安全自动化扫描工具对比测试:https://blog.csdn.net/wutianxu123/article/details/83216219
    • Docker容器安全实践:https://www.secrss.com/articles/7016
    • Docker 容器逃逸案例汇集:https://www.cnblogs.com/xiaozi/p/13423853.html
    • Securing a Cluster:https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/
    • 国内首个云上容器ATT&CK攻防矩阵发布,阿里云助力企业容器化安全落地:https://developer.aliyun.com/article/765449?spm=a2c6h.13148508.0.0.29cb4f0ejECYcC
    • 全面易用的镜像漏洞检测工具Trivy:https://blog.fleeto.us/post/introducing-trivy/
    • 容器安全风险解决方案(下篇):https://mp.weixin.qq.com/s/NgIT1tX2uTBt3xJ3Jq9ZdA
    • 容器安全学习课程:https://www.katacoda.com/
    • 容器安全在证券行业的最佳实践:https://mp.weixin.qq.com/s/TFlWF7WcC1lT1X244o4VBw
    • 容器静态安全漏洞扫描工具Clair介绍:https://zhuanlan.zhihu.com/p/43547242
    • 探索容器安全性(概述):http://dockone.io/article/5515
    • 如何打造安全的容器云平台:https://blog.qiniu.com/archives/7743
    • 五个Docker监控工具的对比:http://dockone.io/article/397
    • 云原生之容器安全实践:https://tech.meituan.com/2020/03/12/cloud-native-security.html
    • 针对容器的渗透测试方法:https://mp.weixin.qq.com/s/o5fGivwgBMR-w60SXQbSYA
    展开全文
  • redhat提供的基于容器安全,在namespace、Cgroup等技术层面,简述容器安全性的策略。
  • 压力容器安全技术监察规程2015执行版本.pdf
  • DL-T-874-2004_电力工业锅炉压力容器安全监督管理(检验)工程师资格考核规则pdf,DL-T-874-2004_电力工业锅炉压力容器安全监督管理(检验)工程师资格考核规则
  • Docker容器安全性分析

    千次阅读 2020-08-16 10:28:50
    本文对Docker容器在应用中可能面临的安全问题和风险进行了研究,并将Docker容器应用环境中的安全机制与相关解决方案分为容器虚拟化安全、容器安全管理、容器网络安全三部分进行分析。 一、从虚拟化安全到容器安全 1...

    Docker是目前最具代表性的容器技术之一,对云计算及虚拟化技术产生了颠覆性的影响。本文对Docker容器在应用中可能面临的安全问题和风险进行了研究,并将Docker容器应用环境中的安全机制与相关解决方案分为容器虚拟化安全、容器安全管理、容器网络安全三部分进行分析。

    一、从虚拟化安全到容器安全

    1、传统虚拟化技术

    虚拟化技术是实现硬件基础设施资源的充分利用、合理分配和有效调度的重要技术手段。例如,在基于OpenStack的典型IaaS服务中,云服务提供商可通过搭建设备集群建立资源池,并将服务器、存储和网络等底层资源进行弹性虚拟化提供给租户。

    传统虚拟化技术以虚拟机为管理单元,各虚拟机拥有独立的操作系统内核,不共用宿主机的软件系统资源,因此具有良好的隔离性,适用于云计算环境中的多租户场景。

    2、容器技术

    容器技术可以看作一种轻量级的虚拟化方式,将应用与必要的执行环境打包成容器镜像,使得应用程序可以直接在宿主机(物理机或虚拟机)中相对独立地运行。容器技术在操作系统层进行虚拟化,可在宿主机内核上运行多个虚拟化环境。相比于传统的应用测试与部署,容器的部署无需预先考虑应用的运行环境兼容性问题;相比于传统虚拟机,容器无需独立的操作系统内核就可在宿主机中运行,实现了更高的运行效率与资源利用率。

    Docker是目前最具代表性的容器平台之一,它模糊了传统的IaaS和PaaS的边界,具有持续部署与测试、跨云平台支持等优点。在基于Kubernetes等容器编排工具实现的容器云环境中,通过对跨主机集群资源的调度,容器云可提供资源共享与隔离、容器编排与部署、应用支撑等功能。

    Docker容器技术以宿主机中的容器为管理单元,但各容器共用宿主机内核资源,分别通过Linux系统的Namespaces和CGroups机制实现资源的隔离与限制。

    1. Namespaces

    为了保证容器进程之间的资源隔离,避免相互影响和干扰,Linux内核的Namespaces(命名空间)机制提供了UTS、User、Mount、Network、PID、IPC等命名空间实现了主机名、用户权限、文件系统、网络、进程号、进程间通信等六项资源隔离功能。通过调用clone函数并传入相应的系统调用参数创建容器进程,可实现对应资源内容的隔离,具体情况如表1所示。

    表1:Namespaces隔离机制

    命名空间系统调用参数隔离内容Linux内核版本
    UTSCLONE_NEWUTS主机名和域名2.6.19
    IPCCLONE_NEWIPC信号量、信息队列和共享内存2.6.19
    PIDCLONE_NEWPID进程编号2.6.24
    NetworkCLONE_NEWNET网络设备、网络栈、端口等2.6.29
    MountCLONE_NEWNS挂载点(文件系统)2.4.19
    UserCLONE_NEWUSER用户和用户组3.8

    对于某个进程而言,可通过查看/proc/[PID]/ns文件,获取该进程下的命名空间隔离情况,如图1所示。其中,每一项命名空间都拥有一个编号对其进行唯一标识,如果宿主机中两个进程指向的命名空间编号相同,则表示他们同在一个命名空间之下。

    在这里插入图片描述

    图1:进程命名空间

    1. CGroups

    CGroups(Control Groups,控制组)机制最早于2006年由Google提出,目前是Linux内核的一种机制,可以实现对任务组(进程组或线程组)使用的物理资源(CPU、内存、I/O等)进行限制和记录,通过多种度量标准为各个容器相对公平地分配资源,以防止资源滥用的情况。

    在实际应用中,CGroups会为每个执行任务创建一个钩子,在任务执行的过程中涉及到资源分配使用时,就会触发钩子上的函数并对相应的资源进行检测,从而对资源进行限制和优先级分配。

    CGroups提供了资源限制(Resource Limitation)、优先级分配(Prioritization)、资源统计(Accounting)、任务控制(Control)四个功能,包含blkio、cpu、cpuacct、cpuset、devices、freezer、memory、perf_event、net_cls、net_prio、ns、hugetlb等子系统,每种子系统独立地控制一种资源,可分别实现块设备输入/输出限制、CPU使用控制、生成CPU资源使用情况报告、内存使用量限制等功能。几个主要子系统的具体功能如表2所示。

    表2:CGroups子系统

    子系统功能
    blkio为块设备(如磁盘、固态硬盘等物理驱动设备)设定输入/输出限制
    cpu通过调度程序控制任务对CPU的使用
    cpuacct生成任务对CPU资源使用情况的报告
    cpuset为任务分配独立的CPU和内存
    devices开启或关闭任务对设备的访问
    freezer挂起或恢复任务
    memory设定任务对内存的使用量限制,生成任务对内存资源使用情况的报告
    1. 安全性

    传统虚拟化技术与Docker容器技术在运行时的安全性差异主要体现在隔离性方面,包括进程隔离、文件系统隔离、设备隔离、进程间通信隔离、网络隔离、资源限制等。

    在Docker容器环境中,由于各容器共享操作系统内核,而容器仅为运行在宿主机上的若干进程,其安全性特别是隔离性与传统虚拟机相比在理论上与实际上都存在一定的差距。

    二、Docker容器安全风险分析

    根据Docker容器的主要特点及其在安全应用中的实际问题,本文将Docker容器技术应用中可能存在的技术性安全风险分为镜像安全风险、容器虚拟化安全风险、网络安全风险等类型进行具体分析,如图2所示。

    在这里插入图片描述

    图2:容器安全风险分类

    1、镜像安全风险

    Docker镜像是Docker容器的静态表示形式,镜像的安全决定了容器的运行时安全。

    Docker容器官方镜像仓库Docker Hub中的镜像可能由个人开发者上传,其数量丰富、版本多样,但质量参差不齐,甚至存在包含恶意漏洞的恶意镜像,因而可能存在较大的安全风险。具体而言,Docker镜像的安全风险分布在创建过程、获取来源、获取途径等方方面面。

    1. Dockerfile安全问题

    Docker镜像的生成主要包括两种方式,一种是对运行中的动态容器通过docker commit命令进行打包,另一种是通过docker build命令执行Dockerfile文件进行创建。为了确保最小安装原则,同时考虑容器的易维护性,一般推荐采用Dockerfile文件构建容器镜像,即在基础镜像上进行逐层应用添加操作。

    Dockerfile是包含用于组合镜像命令的文本文件,一般由基础镜像信息(FROM)、维护者信息(MAINTAINER)、镜像操作指令(RUN、ADD、COPY等)、容器启动时执行指令(CMD等)四个部分组成,Docker可通过读取Dockerfile中的命令创建容器镜像。

    Dockerfile文件内容在一定程度上决定了Docker镜像的安全性,其安全风险具体包括但不限于以下情况:

    如果Dockerfile存在漏洞或被插入恶意脚本,那么生成的容器也可能产生漏洞或被恶意利用。例如,攻击者可构造特殊的Dockerfile压缩文件,在编译时触发漏洞获取执行任意代码的权限。

    如果在Dockerfile中没有指定USER,Docker将默认以root用户的身份运行该Dockerfile创建的容器,如果该容器遭到攻击,那么宿主机的root访问权限也可能会被获取。

    如果在Dockerfile文件中存储了固定密码等敏感信息并对外进行发布,则可能导致数据泄露的风险。

    如果在Dockerfile的编写中添加了不必要的应用,如SSH、Telnet等,则会产生攻击面扩大的风险。

    1. 镜像漏洞

    对于大多数一般的开发者而言,通常需要获取一系列基础镜像进行容器云的部署和进一步开发,因此,基础镜像的安全性在一定程度上决定了容器云环境的安全性。

    镜像漏洞安全风险具体包括镜像中的软件含有CVE漏洞、攻击者上传含有恶意漏洞的镜像等情况。

    • CVE漏洞

    由于镜像通常由基础操作系统与各类应用软件构成,因此,含有CVE漏洞的应用软件同样也会向Docker镜像中引入CVE漏洞。

    镜像的获取通常是通过官方镜像仓库Docker Hub或网易、阿里云等提供的第三方镜像仓库。然而,根据对Docker Hub中镜像安全漏洞的相关研究,无论是社区镜像还是官方镜像,其平均漏洞数均接近200个,包括nginx、mysql、redis在内的常用镜像都含有高危漏洞。

    • 恶意漏洞

    恶意用户可能将含有后门、病毒等恶意漏洞的镜像上传至官方镜像库。2018年6月,安全厂商Fortinet和Kromtech在Docker Hub上发现17个包含用于数字货币挖矿恶意程序的Docker镜像,而这些恶意镜像当时已有500万次的下载量。目前,由于Docker应用在世界范围内具有广泛性,全网针对Docker容器的攻击很多都被用于进行数字货币挖矿,为攻击者带来实际经济利益,损害Docker用户的正常使用。

    1. 镜像仓库安全

    作为搭建私有镜像存储仓库的工具,Docker Registry的应用安全性也必须得到保证。镜像仓库的安全风险主要包括仓库本身的安全风险和镜像拉取过程中的传输安全风险。

    仓库自身安全:如果镜像仓库特别是私有镜像仓库被恶意攻击者所控制,那么其中所有镜像的安全性将无法得到保证。例如,如果私有镜像仓库由于配置不当而开启了2357端口,将会导致私有仓库暴露在公网中,攻击者可直接访问私有仓库并篡改镜像内容,造成仓库内镜像的安全隐患。

    镜像拉取安全:如何保证容器镜像从镜像仓库到用户端的完整性也是镜像仓库面临的一个重要安全问题。由于用户以明文形式拉取镜像,如果用户在与镜像仓库交互的过程中遭遇了中间人攻击,导致拉取的镜像在传输过程中被篡改或被冒名发布恶意镜像,会造成镜像仓库和用户双方的安全风险。Docker已在其1.8版本后采用内容校验机制解决中间人攻击的问题。

    2、容器虚拟化安全风险

    与传统虚拟机相比,Docker容器不拥有独立的资源配置,且没有做到操作系统内核层面的隔离,因此可能存在资源隔离不彻底与资源限制不到位所导致的安全风险。

    1. 容器隔离问题

    对于Docker容器而言,由于容器与宿主机共享操作系统内核,因此存在容器与宿主机之间、容器与容器之间隔离方面的安全风险,具体包括进程隔离、文件系统隔离、进程间通信隔离等。

    虽然Docker通过Namespaces进行了文件系统资源的基本隔离,但仍有/sys、/proc/sys、/proc/bus、/dev、time、syslog等重要系统文件目录和命名空间信息未实现隔离,而是与宿主机共享相关资源。

    针对容器隔离安全风险问题,主要存在以下两种隔离失效的情况:

    攻击者可能通过对宿主机内核进行攻击达到攻击其中某个容器的目的。

    由于容器所在主机文件系统存在联合挂载的情况,恶意用户控制的容器也可能通过共同挂载的文件系统访问其他容器或宿主机,造成数据安全问题。

    1. 容器逃逸攻击

    容器逃逸攻击指的是容器利用系统漏洞,“逃逸”出了其自身所拥有的权限,实现了对宿主机和宿主机上其他容器的访问。由于容器与宿主机共享操作系统内核,为了避免容器获取宿主机的root权限,通常不允许采用特权模式运行Docker容器。

    在容器逃逸案例中,最为著名的是shocker.c程序,其通过调用open_by_handle_at函数对宿主机文件系统进行暴力扫描,以获取宿主机的目标文件内容。由于Docker1.0之前版本对容器能力(Capability)使用黑名单策略进行管理,并没有限制CAP_DAC_READ_SEARCH能力,赋予了shocker.c程序调用open_by_handle_at函数的能力,导致容器逃逸的发生。因此,对容器能力的限制不当是可能造成容器逃逸等安全问题的风险成因之一。所幸的是,Docker在后续版本中对容器能力采用白名单管理,避免了默认创建的容器通过shocker.c案例实现容器逃逸的情况。

    1. 拒绝服务攻击

    由于容器与宿主机共享CPU、内存、磁盘空间等硬件资源,且Docker本身对容器使用的资源并没有默认限制,如果单个容器耗尽宿主机的计算资源或存储资源(例如进程数量、存储空间等)可能导致宿主机或其他容器的拒绝服务。

    • 计算型DoS攻击

    Fork Bomb是一类典型的针对计算资源的拒绝服务攻击手段,其可通过递归方式无限循环调用fork系统函数快速创建大量进程。由于宿主机操作系统内核支持的进程总数有限,如果某个容器遭到了Fork Bomb攻击,那么就有可能存在由于短时间内在该容器内创建过多进程而耗尽宿主机进程资源的情况,宿主机及其他容器就无法再创建新的进程。

    • 存储型DoS攻击

    针对存储资源,虽然Docker通过Mount命名空间实现了文件系统的隔离,但CGroups并没有针对AUFS文件系统进行单个容器的存储资源限制,因此采用AUFS作为存储驱动具有一定的安全风险。如果宿主机上的某个容器向AUFS文件系统中不断地进行写文件操作,则可能会导致宿主机存储设备空间不足,无法再满足其自身及其他容器的数据存储需求。

    3、网络安全风险

    网络安全风险是互联网中所有信息系统所面临的重要风险,不论是物理设备还是虚拟机,都存在难以完全规避的网络安全风险问题。而在轻量级虚拟化的容器网络环境中,其网络安全风险较传统网络而言更为复杂严峻。

    1. 容器网络攻击

    Docker提供桥接网络、MacVLAN、覆盖网络(Overlay)等多种组网模式,可分别实现同一宿主机内容器互联、跨宿主机容器互联、容器集群网络等功能。

    • 网桥模式

    Docker默认采用网桥模式,利用iptables进行NAT转换和端口映射。Docker将所有容器都通过虚拟网络接口对连接在一个名为docker0的虚拟网桥上,作为容器的默认网关,而该网桥与宿主机直接相连。

    容器内部的数据包经过虚拟网络接口对到达docker0,实现同一子网内不同容器间的通信。在网桥模式下,同一宿主机内各容器间可以互相通信,而宿主机外部无法通过分配给容器的IP地址对容器进行外部访问。

    由于缺乏容器间的网络安全管理机制,无法对同一宿主机内各容器之间的网络访问权限进行限制。具体而言,由于各容器之间通过宿主机内部网络的docker0网桥连接以实现路由和NAT转换,如果容器间没有防火墙等保护机制,则攻击者可通过某个容器对宿主机内的其他容器进行ARP欺骗、嗅探、广播风暴等攻击,导致信息泄露、影响网络正常运行等安全后果。

    因此,如果在同一台宿主机上部署的多个容器没有进行合理的网络配置进行访问控制边界隔离,将可能产生容器间的网络安全风险。

    • MacVLAN

    MacVLAN是一种轻量级网络虚拟化技术,通过与主机的网络接口连接实现了与实体网络的隔离性。

    MacVLAN允许为同一个物理网卡配置多个拥有独立MAC地址的网络接口并可分别配置IP地址,实现了网卡的虚拟化。MacVLAN模式无需创建网桥,即无需NAT转换和端口映射就可以直接通过网络接口连接到物理网络,不同MacVLAN网络间不能在二层网络上进行通信。

    然而,处于同一虚拟网络下各容器间同样没有进行访问权限控制,因此MacVLAN模式依然存在与网桥模式类似的内部网络攻击的安全风险。

    • Overlay网络

    Overlay网络架构主要用于构建分布式容器集群,通过VxLAN技术在不同主机之间的Underlay网络上建立虚拟网络,以搭建跨主机容器集群,实现不同物理主机中同一Overlay网络下的容器间通信。

    与其他组网模式一样,Overlay网络也没有对同一网络内各容器间的连接进行访问控制。此外,由于VxLAN网络流量没有加密,需要在设定IPSec隧道参数时选择加密以保证容器网络传输内容安全。

    因此,无论采用何种网络连接模式,都难以避免容器间互相攻击的安全风险。

    2、网络DoS攻击

    由于网络虚拟化的存在,容器网络面临着与传统网络不同的DoS攻击安全风险。Docker容器网络的DoS攻击分为内部威胁和外部威胁两种主要形式。

    内部威胁:针对Docker容器网络环境,DoS攻击可不通过物理网卡而在宿主机内部的容器之间进行,攻击者通过某个容器向其他容器发起DoS攻击可能降低其他容器的网络数据处理能力。因此,存在容器虚拟网络间的DoS攻击风险。

    外部威胁:由于同一台宿主机上的所有容器共享宿主机的物理网卡资源,若外部攻击者使用包含大量受控主机的僵尸网络向某一个目标容器发送大量数据包进行DDoS攻击,将可能占满宿主机的网络带宽资源,造成宿主机和其他容器的拒绝服务。

    三、Docker容器安全机制与解决方案

    1、容器虚拟化安全

    在传统虚拟化技术架构中,Hypervisor虚拟机监视器是虚拟机资源的管理与调度模块。而在容器架构中,由于不含有Hypervisor层,因此需要依靠操作系统内核层面的相关机制对容器进行安全的资源管理。

    1. 容器资源隔离与限制

    在资源隔离方面,与采用虚拟化技术实现操作系统内核级隔离不同,Docker通过Linux内核的Namespace机制实现容器与宿主机之间、容器与容器之间资源的相对独立。通过为各运行容器创建自己的命名空间,保证了容器中进程的运行不会影响到其他容器或宿主机中的进程。

    在资源限制方面,Docker通过CGroups实现宿主机中不同容器的资源限制与审计,包括对CPU、内存、I/O等物理资源进行均衡化配置,防止单个容器耗尽所有资源造成其他容器或宿主机的拒绝服务,保证所有容器的正常运行。

    但是,CGroups未实现对磁盘存储资源的限制。若宿主机中的某个容器耗尽了宿主机的所有存储空间,那么宿主机中的其他容器无法再进行数据写入。Docker提供的—storage-opt=[]磁盘限额仅支持Device Mapper文件系统,而Linux系统本身采用的磁盘限额机制是基于用户和文件系统的quota技术,难以针对Docker容器实现基于进程或目录的磁盘限额。因此,可考虑采用以下方法实现容器的磁盘存储限制:

    为每个容器创建单独用户,限制每个用户的磁盘使用量;

    选择XFS等支持针对目录进行磁盘使用量限制的文件系统;

    为每个容器创建单独的虚拟文件系统,具体步骤为创建固定大小的磁盘文件,并从该磁盘文件创建虚拟文件系统,然后将该虚拟文件系统挂载到指定的容器目录。

    此外,在默认情况下,容器可以使用主机上的所有内存。可以使用内存限制机制来防止一个容器消耗所有主机资源的拒绝服务攻击,具体可使用使用-m或-memory参数运行容器。

    命令示例: dockerrun[运行参数]-memory[内存大小][容器镜像名或ID][命令])

    1. 容器能力限制

    Linux内核能力表示进程所拥有的系统调用权限,决定了程序的系统调用能力。

    容器的默认能力包括CHOWN、DAC_OVERRIDE、FSETID、SETGID、SETUID、SETFCAP、NET_RAW、MKNOD、SYS_REBOOT、SYS_CHROOT、KILL、NET_BIND_SERVICE、AUDIT_WRITE等等,具体功能如表3所示。

    表3:容器默认能力

    容器默认能力作用
    CHOWN允许任意更改文件UID以及GID
    DAC_OVERRIDE允许忽略文件的读、写、执行访问权限检查
    FSETID允许文件修改后保留setuid/setgid标志位
    SETGID允许改变进程组ID
    SETUID允许改变进程用户ID
    SETFCAP允许向其他进程转移或删除能力
    NET_RAW允许创建RAW和PACKET套接字
    MKNOD允许使用mknod创建指定文件
    SYS_REBOOT允许使用reboot或者kexec_load
    SYS_CHROOT允许使用chroot
    KILL允许发送信号
    NET_BIND_SERVICE允许绑定常用端口号(端口号小于1024)
    AUDIT_WRITE允许审计日志写入

    如果对容器能力不加以适当限制,可能会存在以下安全隐患:

    内部因素:在运行Docker容器时,如果采用默认的内核功能配置可能会产生容器的隔离问题。

    外部因素:不必要的内核功能可能导致攻击者通过容器实现对宿主机内核的攻击。

    因此,不当的容器能力配置可能会扩大攻击面,增加容器与宿主机面临的安全风险,在执行docker run命令运行Docker容器时可根据实际需求通过—cap-add或—cap-drop配置接口对容器的能力进行增删。

    命令示例:(docker run -- cap-drop ALL -- cap-add SYS_TIME ntpd /bin/sh)

    1. 强制访问控制

    强制访问控制(Mandatory Access Control, MAC)是指每一个主体(包括用户和程序)和客体都拥有固定的安全标记,主体能否对客体进行相关操作,取决于主体和客体所拥有安全标记的关系。在Docker容器应用环境下,可通过强制访问控制机制限制容器的访问资源。Linux内核的强制访问控制机制包括SELinux、AppArmor等。

    • SELinux机制

    SELinux(Security-Enhanced Linux)是Linux内核的强制访问控制实现,由美国国家安全局(NSA)发起,用以限制进程的资源访问,即进程仅能访问其任务所需的文件资源。因此,可通过SELinux对Docker容器的资源访问进行控制。

    在启动Docker daemon守护进程时,可通过将—selinux-enabled参数设为true,从而在Docker容器中使用SELinux。SELinux可以使经典的shocker.c程序失效,使其无法逃逸出Docker容器实现对宿主机资源的访问。

    (命令示例:docker daemon --selinux-enabled = true

    • AppArmor机制

    与SELinux类似,AppArmor(Application Armor,应用程序防护)也是Linux的一种强制访问控制机制,其作用是对可执行程序进行目录和文件读写、网络端口访问和读写等权限的控制。

    在Docker daemon启动后会在/etc/apparmor.d/docker自动创建AppArmor的默认配置文件docker-default,可通过在该默认配置文件中新增访问控制规则的方式对容器进行权限控制,同时可在启动容器时通过—security-opt指定其他配置文件。例如,在配置文件中加入一行deny /etc/hosts rwklx限制对/etc/hosts的获取,同样可使shocker.c容器逃逸攻击失效。

    (命令示例:docker run --rm -ti --cap- add=all --security-opt apparmor:docker- defaultshocker bash

    1. Seccomp机制

    Seccomp(Secure Computing Mode)是Linux内核提供的安全特性,可实现应用程序的沙盒机制构建,以白名单或黑名单的方式限制进程能够进行的系统调用范围。

    在Docker中,可通过为每个容器编写json格式的seccomp profile实现对容器中进程系统调用的限制。在seccomp profile中,可定义以下行为对进程的系统调用做出响应:

    SCMP_ACT_KILL:当进程进行对应的系统调用时,内核发出SIGSYS信号终止该进程,该进程不会接受到这个信号;

    SCMP_ACT_TRAP:当进程进行对应的系统调用时,该进程会接收到SIGSYS信号,并改变自身行为;

    SCMP_ACT_ERRNO:当进程进行对应的系统调用时,系统调用失败,进程会接收到errno返回值;

    SCMP_ACT_TRACE:当进程进行对应的系统调用时,进程会被跟踪;

    SCMP_ACT_ALLOW:允许进程进行对应的系统调用行为。

    默认情况下,在Docker容器的启动过程中会使用默认的seccomp profile,可使用security-opt seccomp选项使用特定的seccomp profile。

    (命令示例:docker run --rm -it --security-opt seccomp: /path/to/seccomp/profile.json hello-world

    2、容器安全管理
    1. 镜像仓库安全
    • 内容信任机制

    Docker的内容信任(Content Trust)机制可保护镜像在镜像仓库与用户之间传输过程中的完整性。目前,Docker的内容信任机制默认关闭,需要手动开启。内容信任机制启用后,镜像发布者可对镜像进行签名,而镜像使用者可以对镜像签名进行验证。

    具体而言,镜像构建者在通过docker build命令运行Dockerfile文件前,需要通过手动或脚本方式将DOCKER_CONTENT_TRUST环境变量置为1进行启用。在内容信任机制开启后,push、build、create、pull、run等命令均与内容信任机制绑定,只有通过内容信任验证的镜像才可成功运行这些操作。例如,Dockerfile中如果包含未签名的基础镜像,将无法成功通过docker build进行镜像构建。

    (命令示例: exportDOCKER_CONTENT_TRUST = 1

    • Notary项目

    Notary是一个从Docker中剥离的独立开源项目,提供数据收集的安全性。Notary用于发布内容的安全管理,可对发布的内容进行数字签名,并允许用户验证内容的完整性和来源。Notary的目标是保证服务器与客户端之间使用可信连接进行交互,用于解决互联网内容发布的安全性,并未局限于容器应用。

    在Docker容器场景中,Notary可支持Docker内容信任机制。因此,可使用Notary构建镜像仓库服务器,实现对容器镜像的签名,对镜像源认证、镜像完整性等安全需求提供更好的支持。

    1. 镜像安全扫描

    为了保证容器运行的安全性,在从公共镜像仓库获取镜像时需要对镜像进行安全检查,防止存在安全隐患甚至恶意漏洞的镜像运行,从源头端预防安全事故的发生。镜像漏洞扫描工具是一类常用的镜像安全检查辅助工具,可检测出容器镜像中含有的CVE漏洞。

    针对Docker镜像的漏洞扫描,目前已经有许多相关工具与解决方案,包括Docker Security Scanning、Clair、Anchore、Trivy、Aqua等等。

    • Docker Security Scanning服务

    Docker Security Scanning是Docker官方推出的不开源镜像漏洞扫描服务,用于检测Docker Cloud服务中私有仓库和Docker Hub官方仓库中的镜像是否安全。

    Docker Security Scanning包括扫描触发、扫描器、数据库、附加元件框架以及CVE漏洞数据库比对等服务。当仓库中有镜像发生更新时,会自动启动漏洞扫描;当CVE漏洞数据库发生更新时,也会实时更新镜像漏洞扫描结果。

    • Clair工具

    Clair是一款开源的Docker镜像漏洞扫描工具。与Docker Security Scanning类似,Clair通过对Docker镜像进行静态分析并与公共漏洞数据库关联,得到相应的漏洞分析结果。Clair主要包括以下模块:

    Fetcher(获取器):从公共的CVE漏洞源收集漏洞数据;

    Detector(检测器):对镜像的每一个Layer进行扫描,提取镜像特征;

    Notifier(通知器):用于接收WebHook从公开CVE漏洞库中的最新漏洞信息并进行漏洞库更新;

    Databases(数据库):PostSQL数据库存储容器中的各个层和CVE漏洞;

    • Trivy工具

    Trivy是一个简单而全面的开源容器漏洞扫描程序。Trivy可检测操作系统软件包(Alpine、RHEL、CentOS等)和应用程序依赖项(Bundler、Composer、npm、yarn等)的漏洞。此外,Trivy具有较高的易用性,只需安装二进制文件并指定扫描容器的镜像名称即可执行扫描。Trivy提供了丰富的功能接口,相比于其他容器镜像漏洞扫描工具更适合自动化操作,可更好地满足持续集成的需求。

    (命令示例: trivy[镜像名]

    1. 容器运行时监控

    为了在系统运维层面保证容器运行的安全性,实现安全风险的即时告警与应急响应,需要对Docker容器运行时的各项性能指标进行实时监控。

    针对Docker容器监控的工具与解决方案包括docker stats、cAdvisor、Scout、DataDog、Sensu等等,其中最常见的是Docker原生的docker stats命令和Google的cAdvisor开源工具。

    • docker stats命令

    docker stats是Docker自带的容器资源使用统计命令,可用于对宿主机上的Docker容器的资源使用情况进行手动监控,具体内容包括容器的基本信息、容器的CPU使用率、内存使用率、内存使用量与限制、块设备I/O使用量、网络I/O使用量、进程数等信息。用户可根据自身需求设置—format参数控制docker stats 命令输出的内容格式。

    命令示例: dockerstats[容器名]

    • cAdvisor工具

    由于docker stats只是简单的容器资源查看命令,其可视化程度不高,同时不支持监控数据的存储。cAdvisor是由Google开源的容器监控工具,优化了docker stats在可视化展示与数据存储方面的缺陷。

    cAdvisor在宿主机上以容器方式运行,通过挂载在本地卷,可对同一台宿主机上运行的所有容器进行实时监控和性能数据采集,具体包括CPU使用情况、内存使用情况、网络吞吐量、文件系统使用情况等信息,并提供本地基础查询界面和API接口,方便与其他第三方工具进行搭配使用。cAdvisor默认将数据缓存在内存中,同时也提供不同的持久化存储后端支持,可将监控数据保存Google BigQuery、InfluxDB或Redis等数据库中。

    cAdvisor基于Go语言开发,利用CGroups获取容器的资源使用信息,目前已被集成在Kubernetes中的Kubelet组件里作为默认启动项。

    (命令示例:docker run -v / var/run: /var/run:rw -v/sys: /sys:ro -v/var/lib/docker: /var/lib/docker:ro -p8080: 8080-d --name cadvisor google/cadvisor

    1. 容器安全审计
    • Docker守护进程审计

    在安全审计方面,对于运行Docker容器的宿主机而言,除需对主机Linux文件系统等进行审计外,还需对Docker守护进程的活动进行审计。由于系统默认不会对Docker守护进程进行审计,需要通过主动添加审计规则或修改规则文件进行。

    (命令示例:auditctl -w /usr/bin/docker -k docker或修改/etc/audit/audit.rules文件

    • Docker相关文件目录审计

    除Docker守护进程之外,还需对与Docker的运行相关的文件和目录进行审计,同样需要通过命令行添加审计规则或修改规则配置文件,具体文件和目录如表4所示。

    表4:Docker相关文件和目录审计

    需要审计的文件或目录备注
    /var/lib/docker包含有关容器的所有信息
    /etc/docker包含Docker守护进程和客户端TLS通信的密钥和证书
    docker.serviceDocker守护进程运行参数配置文件
    docker.socket
    /etc/default/docker
    /etc/default/daemon.json支持Docker守护进程各种参数
    /usr/bin/docker-containerdDocker可用containerd生成容器
    /usr/bin/docker-runcDocker可用runC生成容器

    Docker公司与美国互联网安全中心(CIS)联合制定了Docker最佳安全实践CIS Docker Benchmark,目前最新版本为1.2.0。为了帮助Docker用户对其部署的容器环境进行安全检查,Docker官方提供了Docker Bench for Security安全配置检查脚本工具docker-bench-security,其检查依据便是CIS制定的Docker最佳安全实践。

    3、容器网络安全
    1. 容器间流量限制

    由于Docker容器默认的网桥模式不会对网络流量进行控制和限制,为了防止潜在的网络DoS攻击风险,需要根据实际需求对网络流量进行相应的配置。

    • 完全禁止容器间通信

    在特定的应用场景中,如果宿主机中的所有容器无需在三层或四层进行网络通信交互,可通过将Docker daemon的—icc参数设为false以禁止容器与容器间的通信。

    (命令示例:dockerd --icc = false

    • 容器间流量控制

    在存在多租户的容器云环境中,可能存在单个容器占用大量宿主机物理网卡抢占其他容器带宽的情况。为了保证容器之间的正常通信,同时避免异常流量造成网络DoS攻击等后果,需要对容器之间的通信流量进行一定的限制。

    由于Docker通过创建虚拟网卡对(eth0和veth)将容器与虚拟网桥docker0连接,而容器之间的通信需要经由虚拟网卡对eth0和veth通过网桥连接,因此,可采用Linux的流量控制模块traffic controller对容器网络进行流量限制。

    traffic controller的原理是建立数据包队列并制定发送规则,实现流量限制与调度的功能。为了在一定程度上减轻容器间的DoS攻击的危害,可将traffic controller的dev设置为宿主机中与各容器连接的veth*虚拟网卡,以此进行宿主机上容器间流量限制。

    1. 网桥模式下的网络访问控制

    在默认的网桥连接模式中,连接在同一个网桥的两个容器可以进行直接相互访问。因此,为了实现网络访问控制,可按需配置网络访问控制机制和策略。

    • 为容器创建不同的桥接网络

    为了实现容器间的网络隔离,可将容器放在不同的桥接网络中。当在Docker中使用docker network create命令创建新的桥接网络时,会在iptables中的DOCKER-ISOLATION新增DROP丢弃规则,阻断与其他网络之间的通信流量,实现容器网络之间隔离的目的。

    (命令示例:docker network create--subnet 102.102.0.0/24 test

    • 基于白名单策略的网络访问控制

    为了保证容器间的网络安全,可默认禁止容器间的通信,然后按需设置网络访问控制规则。

    具体而言,在同一虚拟网络内,不同Docker容器之间的网络访问可通过iptables进行控制。在将Docker daemon的—icc参数设为false后,iptables的FORWARD链策略为默认全部丢弃。此时,可采用白名单策略实现网络访问控制,即根据实际需要在iptables中添加访问控制策略,以最小化策略减小攻击面。

    1. 集群模式下的网络访问控制

    与通过OpenStack建立的虚拟化集群通过VLAN对不同租户进行子网隔离不同,基于Overlay网络的容器集群在同一主机内相同子网中的不同容器之间默认可以直接访问。

    如需控制宿主机外部到内部容器应用的访问,可通过在宿主机iptables中的DOCKER-INGRESS链手动添加ACL访问控制规则以控制宿主机的eth0到容器的访问,或者在宿主机外部部署防火墙等方法实现。

    然而,在大型的容器云环境中,由于存在频繁的微服务动态变化更新,通过手动的方式配置iptables或更新防火墙是不现实的。因此,可通过微分段(Micro-Segmentation)实现面向容器云环境中的容器防火墙。微分段是一种细粒度的网络分段隔离机制,与传统的以网络地址为基本单位的网络分段机制不同,微分段可以以单个容器、同网段容器、容器应用为粒度实现分段隔离,并通过容器防火墙对实现微分段间的网络访问控制。

    四、总结

    与虚拟化技术相比,Docker容器技术具有敏捷化、轻量化等特点,在推进云原生应用方面具有不可替代性。与此同时,容器技术对于高效性的追求也牺牲了隔离性等安全要求,在安全性方面与虚拟化技术相比还存在较大差距,且所涉及的面较广,涉及到容器的镜像安全、内核安全、网络安全、虚拟化安全、运行时安全等各个层面。

    在应用容器技术进行系统部署时,应充分评估安全风险,根据应用场景制定相应安全需求,并整合相关安全解决方案,形成容器安全应用最佳实践。

    展开全文
  • TSGR0003-2007简单压力容器安全技术监察规程.doc
  • Docker容器安全管理的研究与实现,艾明振,余文,随着互联网的迅猛发展,近两年来,以Docker为代表的高级操作系统容器技术得到迅猛发展,越来越多的企业参与容器技术的开发与应用,
  • 容器安全 •计算安全 •存储安全 •网络安全 动态防御 •日志审计 •行为分析 随着云计算的发展,容器技术成为云上的软件部署中坚力量。在大量使用的云环境当中,企业上云除了享受到云平台带来的这种便捷之外,同时...
  • 0x00背景 计算机系统技术报告美国国家标准技术研究院(NIST) 的信息技术实验室(ITL) 通过为美国的测量和标准基础设施提供技术指导, 促进了美国经济和公共福利的发展。...安全相关信息以外的...

    0x00背景

    计算机系统技术报告美国国家标准技术研究院(NIST) 的信息技术实验室(ITL) 通过为美国的测量和标准基础设施提供技术指导, 促进了美国经济和公共福利的发展。 ITL 开发测试、 测试方法、参考数据、 概念验证、 以及技术分析, 促进信息技术的开发和生产使用。 ITL 的职责包括制定管理、 行政、 技术和物理标准以及指南, 以经济有效地保护联邦信息系统中除国家
    安全相关信息以外的安全性和隐私。 特别出版物 800 系列报告了 ITL 在信息系统安全性方面的研究、 指南和探究工作, 以及与行业、 政府和学术组织的合作活动。

    摘要

    容器技术, 也称为容器, 是操作系统虚拟化与应用软件打包相结合的一种形式。 容器提供了一种可移植、 可重用的自动化方式来打包和运行应用。 该出版物解释了与容器使用相关的潜在安全隐患, 并对解决这些隐患提出了建议。

    关键词

    应用; 应用软件打包; 容器; 容器安全; 隔离; 操作系统虚拟化; 虚拟化

    0x01 执行摘要

    操作系统(OS) 虚拟化为每个应用单独提供了一个操作系统虚拟化视图, 从而使每个应用与服务器上的所有其它应用隔离开来。 每个应用只能看到并影响自身。 近年来,由于 OS 虚拟化易用性程度提高、 并提高了开发人员敏捷性等关键效益, OS 虚拟化已变得越来越流行。 当今的 OS 虚拟化技术主要致力于提供一种可移植、 可重用的自动化方式来打包和运行应用(app) 。 术语“应用容器”或简称为“容器”经常用于指代这些技术。该文档的目的是解释与容器技术有关的安全问题, 并为规划、 实施和维护容器时解决这些问题提出切实可行的建议。 许多建议是针对容器技术架构(如图 1 所示) 中的具体组件或层而提出的。

    0x02 确保其容器技术的实施和使用安全

    组织机构应遵循这些建议, 以确保其容器技术的实施和使用安全:

    (1) 通过使用容器, 可以调整组织机构的运营方式和技术流程, 支持以全新方式来开发、运行和支持应用。采用容器技术可能会破坏组织机构内的现有方式和软件开发方法。 传统的开发实践、 补丁技术和系统升级过程可能无法直接应用到容器化环中,因此员工愿意适应这种新模型,这一点非常重要。 应鼓励员工采纳本指南中涵盖的在容器内安全构建和运行应用的推荐做法,并且组织机构应愿意反思现有程序, 充分利用容器。 应向软件开发生命周期内所涉及的所有人提供有关技术和运行方式的教育与培训。

    (2) 使用容器专用主机操作系统而不是通用操作系统以减少攻击面。NIST 特别出版物 800-190 容器安全指南容器专用主机操作系统是一种极简操作系统, 仅设计用于运行容器, 而禁用所有其它服务和功能, 并且部署了只读文件系统和其它加固措施。 当使用容器专用主机操作系统时, 攻击面通常比使用通用主机操作系统小很多, 所以攻击和入侵容器专用主机操作系统的几率更小。 因此, 组织机构应尽量使用容器专用主机操作系统来降低风险。 但重要的是要注意, 专用主机操作系统随着时间的推移也会有漏洞需要修复

    (3) 只将具有同样目的、 敏感性和威胁态势的容器组合放在同一主机操作系统内核中, 以提高纵深防御能力。虽然大多数容器平台在将容器与容器隔离、 将容器与主机操作系统隔离方面做的卓有成效, 但在同一主机操作系统上运行不同敏感级别的应用时会存在不必要的风险。 依据目的、敏感性和威胁态势来将容器分隔开来, 可以提高纵深防御能力。 组织机构按照这种方式对容器分组, 入侵某一组容器的攻击者就很难横向移动到其它组容器。 这提高了发现和控制入侵的可能性, 并且确保任何残留数据, 如缓存或加载临时文件的本地数据卷, 保留在安全区域内。在数以百计的主机和数以千计的容器这样大规模的环境中, 自动化分组才具有现实可操作性。 幸运的是, 容器技术通常包含某种机制, 能够将应用组合在一起, 而且容器安全工具可以使用像容器名称和标签等属性来对容器执行安全策略。

    (4) 采用容器专用的漏洞管理工具和过程, 防止镜像遭到入侵。传统的漏洞管理工具对主机持久性和应用更新机制及频率做了很多假设, 但这与容器化模型完全不相符。 例如, 传统的漏洞管理工具常常假定, 某一服务器长时间运行一组相同的应用, 但不同的容器实际上可能是根据资源可用性情况, 在任何给定时间在不同的服务器上运行。 此外, 传统工具往往无法检测容器内的漏洞, 从而产生一种虚假的安全感。 组织机构使用的工具应采用声明式、 分步构建的方法, 并将容器和镜像的不变性融入其设计中, 从而提供更可行、 更可靠的结果。这些工具和过程应考虑到镜像软件漏洞和配置设置。 组织机构应采用工具和过程来验证并强制确保镜像符合安全配置最佳惯例。 这应包括对每个镜像的合规性状态进行集中报告和监控, 防止运行不合规镜

    (5) 考虑采用基于硬件的防范措施, 为可信计算提供基础。安全应扩展到整个容器技术的所有层。 目前, 实现这一目标的方法是将安全建立在硬件可信根之上, 例如行业标准的可信平台模块(TPM) 。 在硬件可信根中存储了主机的固件、软件和配置数据的测量结果。 在启动主机前用存储的测量结果验证当前的测量结果, 这就保证了可以信任主机。 硬件的可信链可以扩展到操作系统内核和操作系统组件, 从而可以实现针对启动机制、 系统镜像、 容器运行时和容器镜像的密码验证。 可信计算为构建、 运行、 编排和管理容器提供了一种安全方式。

    (6) 使用容器感知的运行时防御工具。NIST 特别出版物 800-190 容器安全指南部署和使用能够在容器运行时预防、 检测和响应威胁的专用容器安全解决方案。 传统的安全解决方案, 如入侵防御系统(IPS) 和 Web 应用防火墙(WAF) , 通常无法对容器提供恰当防护。 这些传统的安全解决方案可能无法运行在大规模的容器上, 无法管理容器环境中的频繁变更, 也无法检测容器内部的活动。 利用容器原生安全解决方案能够监视容器环境,并能够精确检测其中的异常情况和恶意活动

    0x03 标准目录

    欢迎大家分享更好的思路,热切期待^^_^^ !

    展开全文
  • 本手册是集压力容器证办理和生产所有必须的条件,包括人员和设备等。
  • 文章目录容器安全 - 不要以root用户在容器内运行不要以root用户在容器内运行查看容器内运行的用户指定容器内运行的用户为什么不要以root用户在容器内运行安全原则安全假设安全风险参考文档 容器安全 - 不要以root...

    容器安全 - 不要以root用户在容器内运行

    不要以root用户在容器内运行

    As a best practice, run your containers as a non-root user (UID not 0).

    By default, containers run with root privileges as the root user inside the container.

    容器安全最佳实践中的一条是,不要以root用户在容器内运行。

    而Docker容器内默认以root用户运行。

    当然这一点也不能怪Docker,我们在云供应商租赁一台虚拟机(ECS)时,默认也是以root用户运行。

    查看容器内运行的用户

    以Spring Boot应用的一个简单的Dockerfile为例:

    FROM openjdk:8-jdk-alpine
    ARG JAR_FILE=target/*.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    

    构建jar包:

    mvn clean install
    

    构建镜像:

    docker build -t william/springboot-docker .
    

    运行容器:

    docker run --name springboot-docker --rm -p 8080:8080 william/springboot-docker
    

    查看容器内运行的用户:

    docker exec -it springboot-docker whoami
    

    结果为root,也就是说Docker容器内默认以root用户运行。

    指定容器内运行的用户

    在Dockerfile中创建用户和用户组,并指定以该用户和用户组运行。

    FROM openjdk:8-jdk-alpine
    RUN addgroup -S spring && adduser -S spring -G spring
    USER spring:spring
    ARG JAR_FILE=target/*.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    

    重新构建镜像和运行容器。

    查看容器内运行的用户:

    docker exec -it springboot-docker whoami
    

    结果为spring, 说明容器内当前运行的用户为spring

    为什么不要以root用户在容器内运行

    安全原则

    最小权限原则:如果不是必须以root用户运行,就不要以root用户运行。

    安全假设

    我们很容易地错误地假设容器是“完全”隔离的,在一个容器中做的事情,不会影响到其他容器,也不会影响到宿主机。就像我们在云供应商上租用一个虚拟机(ECS)不会担心会被其他人的虚拟机影响到。

    但是相比虚拟机的隔离,容器的隔离是比较弱的。这就意味着,在一个容器内做的危险操作,可能会影响到其他容器,甚至影响到宿主机。这种突破容器的隔离性的行为也叫容器逃逸(container escape)。

    如果容器内以root用户运行,就会使得恶意攻击变得更加容易。

    安全风险

    如果以root用户在容器内运行会有什么问题?

    • 可能被利用来在容器内安装恶意软件或攻击工具。
    • 增加容器逃逸(container escape)的风险。
    • 增加利用容器基础镜像的操作系统内核漏洞攻击的风险。

    参考文档

    展开全文
  • 容器安全01:docker漏洞扫描

    千次阅读 2020-06-19 19:21:47
    镜像是容器的最基础的载体,docker作为最流行的容器runtime,其最大的贡献就是把镜像作为容器应用的标准交付方式,镜像包含了容器运行的所有基础文件,可以说镜像的安全就决定了容器安全。 但现实不乐观,在...
  • 容器安全与实践

    2017-08-22 22:48:22
    容器环境综合安全平台 由于容器环境的规模,敏捷性和开放性,软件容器代表了独特的安全挑战。Aqua的平台本身 是为容器设计的,为IT安全提供了在整个生命周期中容器活动的全面了解和控制,同时保留了对DevOps的透明和...
  • 容器安全探索 安全体系 安全体系 AI 漏洞分析 移动安全
  • 该文档介绍了K8S及镜像容器安全架构设计
  • 探索容器安全性:概述

    千次阅读 2018-05-24 11:42:09
    【编者的话】本文是Google云平台(GCP)上的容器安全性系列博客文章中的第一篇,介绍了容器安全的以下几个方面:基础设施安全、软件供应链和运行时安全,并澄清了容器不是强大的安全边界,可能要依靠Google云平台...
  • 压力容器施工组织设计-安全工程师安全管理制度压力容器安全管理制度
  • docker与容器安全

    千次阅读 2019-03-12 18:12:02
    Docker的安全机制 ​ Docker目前已经在安全方面做了一定的工作,包括Docker daemon在以TCP形式提供服务的同时使用传输层安全协议;在构建和使用镜像时会验证镜像的签名证书;通过cgroups及namespaces来对容器进行资源...
  • 压力容器安全试题.docx
  • 容器安全对您业务的重要意义.pdf 容器安全对您业务的重要意义.pdf 容器安全对您业务的重要意义.pdf
  • 2019年1月份,Tripwire发布了2019年关于容器安全的最新现状调查研究。相较于DORA的每年度的DevOps报告,这份报告虽然在调研的数量上远远少于,但是考虑到报告定位的问题较为专一和深入,同时Tripwire本身在安全相关...
  • 考虑钢制内压容器初始静强度和载荷的不确定性,应用信息熵理论,对容器安全系数、试验压力系数与可靠指标的关系进行探索。研究表明:1)钢制薄壁内压圆筒屈服安全系数应不小于1.50,抗拉安全系数应不小于1.90;钢制薄壁内...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 397,557
精华内容 159,022
关键字:

容器安全