镜像作为容器技术的最基本的概念,我们如何从其入手保护容器的安全。镜像和虚拟机的扫描和控制又有所大不同。虚拟机我们常用静态扫描,但是安全人员常常跟在开发人员后面要求其修复生产漏洞,但是who care呢,最后安全敌不过业务,地位也非常弱势。在纳入容器技术后,安全人员有能力通过docker.sock收集所有容器的基线镜像,通过基线镜像便能想制作一个golden VM一样定制一个个golden image.

    1. 漏洞管理

    背景:即使在Docker Hub下载的官方镜像中也常常包含了大量的漏洞,而开发人员在使用大量开源框架时更会加剧镜像漏洞的问题。大部分在docker hub上的镜像,即使是官方的也具有大量的漏洞。而现有的安全人员对于devops流程中的镜像完全丧失管理能力,并且也无法像传统的虚拟机扫描去对生产的容器作一定的安全评估。

    解决方案:Aqua Security可以扫描镜像仓库内的镜像,发现相关镜像的威胁漏洞、安装的Package、敏感信息、Malware等,帮助用户得到一个安全纯净的镜像文件。

    1. 阻断高危镜像运行

    Aqua可以根据扫描结果的威胁级别、分数、威胁黑名单等自动禁用镜像

    1. 禁止以root用户运行

    背景:以root权限运行的容器存在着打破容器沙盒,提权获得Docker主机root权限的风险。而Docker在不指定运行用户的情况下默认是使用root运行容器的,这就加大了容器的安全风险,而这一点也非常容易被利用。例如黑客只需运行rootplease容器即可获得主机root权限。

    解决方案:Aqua可以禁止以root权限运行容器

    1. Package控制

    背景:出于合规性和监控等要求,企业对IT环境会有如下需求:

    不允许运行某些高风险的程序和Package

    有些Package的低版本中存在严重的漏洞。如需使用,必须高于某个版本

    必须运行规定的安全和监控程序

    解决方案:Aqua可以扫描得到镜像中的Package名单和版本,如果镜像中包含黑名单Package,或者某些Package小于规定的版本,或者镜像中缺少某些必要的Package则禁止其运行

    1. 禁止未扫描的镜像
      Aqua可以阻断未扫描的镜像运行,企业也可以通过镜像前缀或label标签设置白名单

    2. 基准镜像
      背景:生产环境中,企业会根据自身合规和监控等需求定制一套基准镜像。企业会要求所有生产系统都是基于基准镜像搭建部署的,但由于容器的封闭性导致该要求难以实现

    解决方案:Aqua可以获取镜像的底层layer,阻断没有基于基准镜像搭建的镜像运行

    1. 安全内容自动化协议(SCAP)与自定义检查
      背景:企业对运行的环境存在如下自定义检查的需求:

    安全性检查,如suid权限、worldwritable file等

    合规性报告检查,如PCI-DSS等

    敏感信息检查,如秘钥、用户信息等

    然而由于容器环境的封闭性,企业难以对容器进行这些检查

    解决方案:Aqua可以通过OpenVulnerability and Assessment Language(OVAL)、自定义脚本(Unix Shell,PowerShell)对镜像进行检查,全面发现镜像中的安全问题,并阻断检查未通过的镜像运行

    1. CI/CD
      背景:大部分使用容器技术的公司已采用DevOps敏捷开发模式,这就要求容器的安全合规检查也能够集成到CI/CD流程中,进行自动化的安全检查,确保不会对DevOps造成阻碍,最终形成DevSecOps

    解决方案:Aqua的镜像安全扫描和控制可以和CI/CD工具集成,包括如Jenkins,Microsoft VSTS, GoCD, GitLab, JIRA, Jfrog Xray, Bamboo等主流工具,使得开发人员在开发阶段就可以获知镜像是否符合企业安全标准,大大缩短了安全扫描和控制流程的周期

    1. 开源协议检查

    背景:开发人员往往会错误地使用不符合开源协议规范的开源软件

    解决方案:Aqua可以扫描开源组件的开源协议,确保企业使用符合规范的开源软件

    问题:Aqua和Clair有什么差别呢?

    Clair开源产品(https://github.com/coreos/clair)可以对镜像实现扫描,但是并不能阻断黑客或者管理人员通过docker load方式手动加载镜像。小编曾经看到过把容器当虚拟机来用的客户。形形色色的镜像里面充斥着安装了SSH,netcat,这些都是在容器平台中应尽量减少使用软件包。有些容器公司常常用clair作基础,通过一些扫描,包装成为所谓的容器安全产品。但是其控制基本通过编排工具来实现,并不能从根本上保证镜像相关的安全。

    Aqua却不同,在扫描镜像的同时,会记录这些镜像的特征码,并严格禁止“非授权”,“高危”、“有毒”的镜像加载到K8S中,即使是K8S管理员的手工加载也会被阻断。只有真正实现了docker.sock的拦截才能做到镜像的安全。否则都只是耍耍流氓而已啦。

    如何通过Docker组用户,直接攻击Docker宿主机(内有干货)?

    更多安全请参考:https://www.aquasec.com/wiki/display/containers/Container+Vulnerabilities+and+Threats

    参考文档:https://mp.weixin.qq.com/s?src=11&timestamp=1532755785&ver=1025&signature=5vhhRh5TnLadoqgfwx9TZQVRLS3P*SCRQG6RH5gw8cldj7gOQRw7o99NxO5sYDqhZwjWaKLWkuP4ilN4MdbPUpdq8JmBXXTFxbYDBQyWF641viIHIyxZKqSvoXQT4gRn&new=1