vlambda博客
学习文章列表

【极思】容器(Docker)安全研究

 容器的大时代已经来了,互联网行业已经走在前沿,金融行业使用容器技术的也越来越多,提前研究储备安全技术,为未来的各种云平台的建设做足准备。尽力让安全与业务三同步,同步设计、同步建设、同步运营。


目录

一、背景
   一)Docker 漏洞案例
   二)Docker 基础
二、研究目标
三、解决思路
   一)容器安全视角的选择
   二)容器安全目标
   三)基于DevOps 确定节点和措施
   四)、其它
   五)基于容器攻击面参考
   六)最佳实践收集参考
   七) 工具收集参考
四、参考文档

一、背景

Docker于2013年问世,它是基于Namespace、Cgroups、chroot等技术实现的新一代容器。凭借易用使用的GUI、环境隔离、易于打包(开发/测试),以及配置和运行容器技术的能力(运维),在首次测试发布1个月内,吸引了10,000名开发/测试/运维人员。到2014年1.0版本发行时已被下载275万次,之后的一年之内超过了1亿次。发展至2020年,已经成为世界大小企业必备的基础设施。大到阿里云、google、IBM,小到名不见经传的互联网创业公司都在使用。人红是非多,位置重要了是非也多,针对 Docker的攻击和事件也越来越多,自此企业安全团队需跟进业务发展,做好Docker安全工作。

一)Docker 漏洞案例

1、Docker 镜像漏洞

在Snyk的2020年开源安全状态报告中,许多流行Docker容器都捆绑了包含许多已知漏洞的映像。当企业内部使用镜像时,就已经引入了大量的安全漏洞。

【极思】容器(Docker)安全研究 十大最受欢迎的Docker映像每个都包含至少30个漏洞

2、Docker 安全漏洞案例

1)API 配置不当

使用暴露的API针对Docker服务器的不可检测的Linux恶意软件

攻击者找到利用Docker API的新方法

2)恶意镜像来源

包含通过Docker Hub分发的加密劫持恶意软件的Docker映像

3)仓库安全问题(用户账号泄露)

Docker Hub遭受数据泄露,要求用户重置密码

4)容器自身安全漏洞

Docker漏洞可能允许root访问

微软发布Windows容器中严重缺陷的紧急补丁

5)管理工具基础设施漏洞

kubernetes 严重的用户提权漏洞(CVE-2018-1002105)

6)镜像内应用漏洞

Docker image Apache OpenWhisk 严重漏洞 (CVE-2018-11757)

7)image 镜像库访问和权限控制问题

docker image 敏感信息泄露(配置/密码)

8)容器提权逃逸

Dirty CoW  漏洞

CVE-2019-5736:runc - container breakout vulnerability

9)Docker 配置不当

不合理的Capability配置为true时,用户权限基本与root相同。
特权容器或者以root权限运行容器,可以轻松地在宿主机上留下后门。

二)Docker 基础

1、Docker 架构与运行流程

Docker 客户端与Docker 守护进程进行交互,由守护进程完成构建、运行、分发Docker容器。Docker客户端和守护程序支持本地(UNIX套接字)、分布式(REST API)部署。

【极思】容器(Docker)安全研究

2、Docker Engine 结构

Docker Engine 主要组件如下:看图容易明白。

    • 服务端是一直持续运行,称为守护程序进程。

    • REST API,其它程序与守护程序通信的接口。

    • 命令行界面(CLI)是操作服务端的命令行接口。

    【极思】容器(Docker)安全研究


二、研究目标

公司当前正在推进容器云平台建设,为支持公司IT业务发展,特研究容器安全解决方案。参考国内外企业研究结果和实践,找出有效且适合我司的容器安全方案,针对方便进行实践推广。

    • 第一,掌握 Docker 架构和基本操作。

    • 第二,掌握 Docker 当前面临的风险。

    • 第三,掌握国内外容器安全实践情况。

    • 第四,掌握行业内容器安全现状和实践情况。


三、解决思路

首先从攻防两个视角中进行选择或两者皆有,个人倾向于攻击视角,后面说原因。第二,是从整体安全建设角度制定目标。第三,是基于一个流程选择控制节点,加入安全管控措施,个人角度比较喜欢DevOps流程。第四,是基于容器技术架构进行分析攻击面分析,最好使用官方或大厂画的架构。

一)容器安全视角的选择

一般而言容器安全有两大视角,攻击者和防御者。攻击者视角针对性强,风险覆盖面窄,防护成本低,容易失效,对情报和技术掌握要求很高。防御者视角针对性弱,风险覆盖面宽,防护成本高,不容易失效,对情报和技术的要求不高。一般新技术安全的发展过程,前期使用攻击者视角先解决问题,后期再转换成防御者视角进行全面的防护。

二)容器安全目标

收集了Google、redhat、美团等企业的容器目标参考了一下。总结出来大致是,一、跟进IT发展保护容器平台和应用(引入的新风险),二、保护容器部署环境和基础架构,三、是整合现有安全措施。

三)基于DevOps 确定节点和措施

一是容器的整个生命周期DevOps能够覆盖。二是前期跟进DevOps相关项目,熟悉所以选择。


【极思】容器(Docker)安全研究

1、plan 阶段

1)管理规范

建立容器安全管理要求,最好融入开发规范。不是期望他们会看或遵从,主要是管理者自己要想清楚,目标是什么,怎么设计,哪些节点管什么,如何从整体形成一套组合拳,前后关联达成最终目标,任何单一的手段都容易出问题。

2)镜像统一管理

    1. 建立内部镜像仓库,控制外部镜像仓库拉取。主要解决恶意镜像来源问题,可以通过 nexus repository 和 xray。

    2. 基于角色的权限管理,确保镜像仓库安全。主要解决 image 共享范围过大,内部敏感信息泄露问题,可通过 nexus repository 和 xray 实现。

    3. 容器镜像必须有签名并来源可信。解决不可信来源image 问题,修改Doker配置或运行参数即可。

    4. 镜像入库前进行自动化安全检测,通过方可入库。在入库时提前解决 image 内包含的安全漏洞问题,工具可以使用Xray。

    3)仓库自身管理

    1. 仓库本身用户管理系统功能完善。管理要求。

    2. 用户权限支持基于角色的访问控制,不同用户构建的镜像可设置访问权限。管理要求。

    4)已知安全漏洞检测

    1. 支持容器自身开源安全漏洞检测。容器自身的开源漏洞需要依赖于外部检测工具,建议在OS层使用HIDS、OSSIM、nessus 、极光等工具周期性检测,最好是HIDS可以及时准确的扫描。

    2. 支持容器内应用开源安全漏洞检测。主要解决的是容器内部应用漏洞,这部分就是新技术引入的变化,检测的漏洞和之前一样,但检测方法要支持Docker,检测工具有 xray、blackduck、Snyk等,Xray用过感觉很好用。

    3. 支持容器内敏感信息漏洞检测。主要解决容器内硬编码密码,这个暂没有找到好用的工具,但是问题总要解决。

    4. 支持容器内合规问题检测。这部分我们需求不强烈,Xray、blackduck都支持。

    5)已知漏洞闭环管理

    1. 支持同步漏洞管理系统。主要解决扫描出很多漏洞,跟进修复的问题。实践过的方法,入库时通过Xray自动检测,有高危以上的不让入库,能过滤不入漏洞。其次是上线时再检测一次,录入漏洞管理系统闭环跟进。最后是打算上一套容器安全管理系统,解决容器运行态的安全问题。

2、code 和 build 阶段

1)构建配置要求

    1. 指定最小权限用户运行,在Dockerfile 中配置USER参数。主要解决特权容器问题,特权容器非常危险。管理要求,再配合容器安全管理系统实时检测。

    2. 验证镜像签名,配置export DOCKER_CONTENT_TRUST=1。管理要求,配置方法见链接 :Content trust in Docker | Docker Documentation

    3. Docker file 不包含敏感信息。管理要求。

    4. Docker image 不包含敏感信息。管理要求。

2)新风险引入

    1. 建立内部组件仓库(java pyton node.js等)。这部分主要解决docker 构建时引入的开源风险,为docker 构建提供支持。有内部仓库时可以执行入库即扫描,把高危以上风险先处理掉。没有时大家各位去互联网上找是完全没有保障的。工具可使用nexus repository 和 xray。

    2. 镜像构建时仅允许使用内部镜像库和内部组件库。主要解决有库时大家不用,依然去网上找,或者私自引入风险。两个方法解决,一是禁止互联网库的访问,二是配置要求使用内部库,禁止使用互联网库或私自引入。

    3. 建立库件入库流程。如有新需求,按入库要求引入。管理要求。

3、test 和 release 阶段

1)基础设施检测

    1. kubernetes 漏洞检测、Docker 自身漏洞检测,主要解决kubernetes、Docker开源漏洞和配置安全问题。OS层使用HIDS实时检测。

    2. 基础OS漏洞检测,主要解决基础系统漏洞、软件漏洞,配置问题。OS层使用HIDS实时检测。

    2) Docker
    1. Docker 漏洞检测,检测容器内运行态软件和组件漏洞,使用容器安全管理系统检测。

    2. Docker 配置检测,检测deamon API、运行权限、Capability权限过高、传输加密等风险项,运行态使用容器安全管理系统检测。

    3镜像检测

    1. 内部敏感信息泄露,目前可能只能手工或写脚本检查。

    2. 内部应用漏洞和组件漏洞检测,可参考 Xray 检测结果。

4、deploy 阶段

1)Docker OS内核安全

    1. 官方安全配置,主要从内核安全、守护进程安全、错误配置、内核强化四个方面。链接 :Docker security | Docker Documentation

    2. 容器用户权限控制,将容器中的root用户映射到容器外部的非uid-0用户,默认情况下docker用户是root用户的Capability权限缩小版本,使用非root用户运行,可进一步缩小特权范围。配置链接 :Isolate containers with a user namespace | Docker Documentation。

    3. 配置安全计算模式(Seccomp)策略以保护容器中的系统调用。配置链接: Docker的Seccomp安全配置文件

2) Docker deamon

    1. 将Docker引擎配置为仅运行签名的映像。主要防止恶意容器运行,有攻击者利用运行的容器作为后门。Docker中的内容信任 。

    2. 非root用户身份运行Docker守护程序。不太敢评论,没有实践。链接:Run the Docker daemon as a non-root user (Rootless mode) | Docker Documentation

3)Docker 配置安全

    1. 禁止调整增加Capability默认权限。调整到最大后docker内用户权限约等于root 用户,非常可怕 。

    2. 禁止特权容器或者以root权限运行容器。特权容器等同于用root运行apache,被RCE后可以直接挂特权后门。

5、operate 阶段

1)运行时安全漏洞检测

    1. 主要包含开源漏洞、合规漏洞、运行状态漏洞。详细内容见上文。

    2. 基础设施漏洞,Docker内漏洞,Docker配置,运行权限等。详细内容见上文。

    2)容器网络层隔离

    1. 建立使用微隔离技术( Micro-Segmentation),可精细化、可视化、自动化管理业务组网络访问权限。不过,现在尝鲜的人不多。

    3)注意事项

    1. 禁止在运行环境中修复问题,会导致漏洞回滚。

6、monitor 阶段

1)容器入侵检测

    1. 可监测容器内上传webshell。可用容器安全管理系统。

    2. 可监测容器逃逸攻击(提权)。可用容器安全管理系统。

    3. 可监测容器运行权限,容器特权等问题。可用容器安全管理系统。

CIS Docker 安全基线链接 CIS Docker Benchmarks。

安全策略和要求不是越多越好,找到关键点,多点配合输出1+1=11的能力,才是最好的安全策略。

四)、其它

1、dockerfile 编写安全技巧

    1. 使用多阶段构建,多阶段构建时中间层会被丢弃,可保护必用的敏感信息,可以减小文件大小。

    2. 防止递归(../)复制,有可能复制敏感文件进入Docker。

    3. 使用COPY代替ADD,ADD可下载网络资源。有攻击者利用这个特性引入后门,可以绕过静态检测。

    4. 使用 hadolint 检查Dockerfile错误。

五)基于容器攻击面参考(美团)

防御视角的方法,可参考一下。云原生之容器安全实践 - 美团技术团队

7个攻击面:Linux Kernel、Namespace/Cgroups/Aufs、Seccomp-bpf、Libs、Language VM、User Code、Container(Docker) engine。

六)最佳实践收集参考

1、Google Cloud 容器安全

Google Cloud 容器安全

2、10个Docker安全最佳实践

10 Docker Security Best Practices | Docker Best Practices

3、确保微服务和容器安全的10个最佳实践

10个确保微服务与容器安全的最佳实践 - DockOne.io

七) 工具收集参考

RedHat-Logo-A-Color
Kubernetes RBAC授权的代理。


四、参考文档

  • Docker overview | Docker Documentation

  • https://zh.wikipedia.org/zh-cn/Cgroups

  • https://searchsecurity.techtarget.com/tip/To-chroot-or-not-to-chroot

  • Docker容器安全实践 - 安全内参 | 决策者的网络安全知识库

  • 什么是容器安全?

  • 云原生之容器安全实践 - 美团技术团队

  • 如何打造安全的容器云平台 - 七牛云

  • 浅析Docker容器安全管控方法 - 安全牛

  • 10家专注容器安全的厂商 - 安全牛

  • Docker容器安全实践 - 安全内参 | 决策者的网络安全知识库



《安全攻防研究和实践》成员300+ 加群请后台留言


# 近期预告

  • 【安全】DevSecOps 设计和实践(近期推出)

  • 【极思】自生长思维架构:伟人与普通人、大牛与小白他们之间的差别是什么?

  • 【企业安全建设】数据安全方案思考与设计【2/2】

# 往期文章