极思容器(Docker)安全研究
Posted 极思
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极思容器(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容器都捆绑了包含许多已知漏洞的映像。当企业内部使用镜像时,就已经引入了大量的安全漏洞。
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)部署。
2、Docker Engine 结构
Docker Engine 主要组件如下:看图容易明白。
服务端是一直持续运行,称为守护程序进程。
REST API,其它程序与守护程序通信的接口。
命令行界面(CLI)是操作服务端的命令行接口。
二、研究目标
公司当前正在推进容器云平台建设,为支持公司IT业务发展,特研究容器安全解决方案。参考国内外企业研究结果和实践,找出有效且适合我司的容器安全方案,针对方便进行实践推广。
第一,掌握 Docker 架构和基本操作。
第二,掌握 Docker 当前面临的风险。
第三,掌握国内外容器安全实践情况。
第四,掌握行业内容器安全现状和实践情况。
三、解决思路
首先从攻防两个视角中进行选择或两者皆有,个人倾向于攻击视角,后面说原因。第二,是从整体安全建设角度制定目标。第三,是基于一个流程选择控制节点,加入安全管控措施,个人角度比较喜欢DevOps流程。第四,是基于容器技术架构进行分析攻击面分析,最好使用官方或大厂画的架构。
一)容器安全视角的选择
一般而言容器安全有两大视角,攻击者和防御者。攻击者视角针对性强,风险覆盖面窄,防护成本低,容易失效,对情报和技术掌握要求很高。防御者视角针对性弱,风险覆盖面宽,防护成本高,不容易失效,对情报和技术的要求不高。一般新技术安全的发展过程,前期使用攻击者视角先解决问题,后期再转换成防御者视角进行全面的防护。
二)容器安全目标
收集了Google、redhat、美团等企业的容器目标参考了一下。总结出来大致是,一、跟进IT发展保护容器平台和应用(引入的新风险),二、保护容器部署环境和基础架构,三、是整合现有安全措施。
三)基于DevOps 确定节点和措施
一是容器的整个生命周期DevOps能够覆盖。二是前期跟进DevOps相关项目,熟悉所以选择。
1、plan 阶段
1)管理规范
建立容器安全管理要求,最好融入开发规范。不是期望他们会看或遵从,主要是管理者自己要想清楚,目标是什么,怎么设计,哪些节点管什么,如何从整体形成一套组合拳,前后关联达成最终目标,任何单一的手段都容易出问题。
2)镜像统一管理
建立内部镜像仓库,控制外部镜像仓库拉取。主要解决恶意镜像来源问题,可以通过 nexus repository 和 xray。
基于角色的权限管理,确保镜像仓库安全。主要解决 image 共享范围过大,内部敏感信息泄露问题,可通过 nexus repository 和 xray 实现。
容器镜像必须有签名并来源可信。解决不可信来源image 问题,修改Doker配置或运行参数即可。
镜像入库前进行自动化安全检测,通过方可入库。在入库时提前解决 image 内包含的安全漏洞问题,工具可以使用Xray。
仓库本身用户管理系统功能完善。管理要求。
用户权限支持基于角色的访问控制,不同用户构建的镜像可设置访问权限。管理要求。
支持容器自身开源安全漏洞检测。容器自身的开源漏洞需要依赖于外部检测工具,建议在OS层使用HIDS、OSSIM、nessus 、极光等工具周期性检测,最好是HIDS可以及时准确的扫描。
支持容器内应用开源安全漏洞检测。主要解决的是容器内部应用漏洞,这部分就是新技术引入的变化,检测的漏洞和之前一样,但检测方法要支持Docker,检测工具有 xray、blackduck、Snyk等,Xray用过感觉很好用。
支持容器内敏感信息漏洞检测。主要解决容器内硬编码密码,这个暂没有找到好用的工具,但是问题总要解决。
支持容器内合规问题检测。这部分我们需求不强烈,Xray、blackduck都支持。
支持同步漏洞管理系统。主要解决扫描出很多漏洞,跟进修复的问题。实践过的方法,入库时通过Xray自动检测,有高危以上的不让入库,能过滤不入漏洞。其次是上线时再检测一次,录入漏洞管理系统闭环跟进。最后是打算上一套容器安全管理系统,解决容器运行态的安全问题。
3)仓库自身管理
4)已知安全漏洞检测
5)已知漏洞闭环管理
2、code 和 build 阶段
1)构建配置要求
指定最小权限用户运行,在Dockerfile 中配置USER参数。主要解决特权容器问题,特权容器非常危险。管理要求,再配合容器安全管理系统实时检测。
验证镜像签名,配置export DOCKER_CONTENT_TRUST=1。管理要求,配置方法见链接 :Content trust in Docker | Docker Documentation
Docker file 不包含敏感信息。管理要求。
Docker image 不包含敏感信息。管理要求。
2)新风险引入
建立内部组件仓库(java pyton node.js等)。这部分主要解决docker 构建时引入的开源风险,为docker 构建提供支持。有内部仓库时可以执行入库即扫描,把高危以上风险先处理掉。没有时大家各位去互联网上找是完全没有保障的。工具可使用nexus repository 和 xray。
镜像构建时仅允许使用内部镜像库和内部组件库。主要解决有库时大家不用,依然去网上找,或者私自引入风险。两个方法解决,一是禁止互联网库的访问,二是配置要求使用内部库,禁止使用互联网库或私自引入。
建立库件入库流程。如有新需求,按入库要求引入。管理要求。
3、test 和 release 阶段
1)基础设施检测
kubernetes 漏洞检测、Docker 自身漏洞检测,主要解决kubernetes、Docker开源漏洞和配置安全问题。OS层使用HIDS实时检测。
基础OS漏洞检测,主要解决基础系统漏洞、软件漏洞,配置问题。OS层使用HIDS实时检测。
Docker 漏洞检测,检测容器内运行态软件和组件漏洞,使用容器安全管理系统检测。
Docker 配置检测,检测deamon API、运行权限、Capability权限过高、传输加密等风险项,运行态使用容器安全管理系统检测。
内部敏感信息泄露,目前可能只能手工或写脚本检查。
内部应用漏洞和组件漏洞检测,可参考 Xray 检测结果。
3)镜像检测
4、deploy 阶段
1)Docker OS内核安全
官方安全配置,主要从内核安全、守护进程安全、错误配置、内核强化四个方面。链接 :Docker security | Docker Documentation
容器用户权限控制,将容器中的root用户映射到容器外部的非uid-0用户,默认情况下docker用户是root用户的Capability权限缩小版本,使用非root用户运行,可进一步缩小特权范围。配置链接 :Isolate containers with a user namespace | Docker Documentation。
配置安全计算模式(Seccomp)策略以保护容器中的系统调用。配置链接: Docker的Seccomp安全配置文件
2) Docker deamon
将Docker引擎配置为仅运行签名的映像。主要防止恶意容器运行,有攻击者利用运行的容器作为后门。Docker中的内容信任 。
非root用户身份运行Docker守护程序。不太敢评论,没有实践。链接:Run the Docker daemon as a non-root user (Rootless mode) | Docker Documentation
3)Docker 配置安全
禁止调整增加Capability默认权限。调整到最大后docker内用户权限约等于root 用户,非常可怕 。
禁止特权容器或者以root权限运行容器。特权容器等同于用root运行apache,被RCE后可以直接挂特权后门。
5、operate 阶段
1)运行时安全漏洞检测
主要包含开源漏洞、合规漏洞、运行状态漏洞。详细内容见上文。
基础设施漏洞,Docker内漏洞,Docker配置,运行权限等。详细内容见上文。
2)容器网络层隔离
建立使用微隔离技术( Micro-Segmentation),可精细化、可视化、自动化管理业务组网络访问权限。不过,现在尝鲜的人不多。
3)注意事项
禁止在运行环境中修复问题,会导致漏洞回滚。
6、monitor 阶段
1)容器入侵检测
可监测容器内上传webshell。可用容器安全管理系统。
可监测容器逃逸攻击(提权)。可用容器安全管理系统。
可监测容器运行权限,容器特权等问题。可用容器安全管理系统。
CIS Docker 安全基线链接 CIS Docker Benchmarks。
安全策略和要求不是越多越好,找到关键点,多点配合输出1+1=11的能力,才是最好的安全策略。
四)、其它
1、dockerfile 编写安全技巧
使用多阶段构建,多阶段构建时中间层会被丢弃,可保护必用的敏感信息,可以减小文件大小。
防止递归(../)复制,有可能复制敏感文件进入Docker。
使用COPY代替ADD,ADD可下载网络资源。有攻击者利用这个特性引入后门,可以绕过静态检测。
使用 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】
# 往期文章
以上是关于极思容器(Docker)安全研究的主要内容,如果未能解决你的问题,请参考以下文章