公有云容器安全

2019-05-14 14:40:357107人阅读

0x00、前言

IT技术在不断的进步,从虚拟主机技术出现后,我们可以方便快捷的在公有云上建立自己的生产环境,大大提升生产环境部署效率,记得以前一个做游戏的兄弟说,以前做一款游戏,生产环境部署,从服务器采购到真正上线最短也要1~2个月。而使用公有云虚拟机搭建也许1~2周就搞定。那么容器技术的出现,又进一步提升了开发上线的速度,也许你在公有云上搞定以上事情也就1~2天。在方便快捷的同时容器的使用量也在逐年攀升,经调查,公有云大约有40%用户正在使用容器技术,那么,容器安全你准备好了么?

0x01、深入研究

在开始讨论容器安全问题之前,我们先要搞清楚:为啥现有的安全解决方案解决不了docker安全问题?

先从应急响应的角度上分析,整理了近半年的应急响应事件:我们发现典型的容器攻击路线,攻击者一般通过各种web漏洞上传Webshell到容器中,然后发起反向链接,利用DirtyCow(脏牛)等漏洞进行提权操作,获得容器的控制权限,然后利用runC等对宿主机提权。

(1)Webshell检测:典型的场景,当docker启动Weblogic对外提供服务,有可能在负载均衡组件上嵌入WAF组件进行拦截,但是针对变形webshell检测也只有在运行才能真正检测到。很不幸的事,在docker中,我们没有运行任何安全防御手段。

(2)反弹shell检测:要想识别反弹shell,就必须对docker运行的进程对外连接做充分的检测,很不幸,目前的解决方案都是针对宿主机的,当然也可以通过部署到网络层的态势感知产品进行威胁情报外联关联,但是针对黑客新搭建基础设施,威胁情报也无能为力。

(3)本地提权检测:当weblogic用户运行的权限,无法满足黑客入侵的需求的时候,针对用户提权操作,我们监控docker用户的权限变化即可,很不幸,目前的解决方案都是针对宿主机的。

从以上案例分析,我们发现了一个很重要的问题,网络层、宿主机层我们的安全解决方案已经很成熟了,docker层内部的安全,基本上处于裸奔状态。

0x02、容器安全解决方案

从容器的整个生命周期来看,镜像构建阶段要对不安全的镜像源、不安全的环境配置以及存在的漏洞进行扫描,容器运行阶段,要检查容器运行时安全配置、Docker 、k8s 应用本身的安全配置以及宿主机安全。最重要的是在rasp状态下对docker层的进程、网络连接、账户的监控。

1、docker镜像漏洞扫描

我们先看一下docker目前部署架构是如何演变的。

传统的部署架构:公有云容器安全

公有云容器安全

典型的容器部署架构:公有云容器安全

公有云容器安全

但是在真实部署环境中,我们发现:

公有云容器安全

公有云容器安全据不完全统计:每天大约有15个新增漏洞/每一万容器,当新的漏洞发布时我们如何快速的检测出来我们使用的docker组件中对应的CVE编号呢?在编辑构建时候的,我们就需要通过静态扫描,静态分析容器镜像中的组件的漏洞。需要产品定期收集漏洞数据并将其存储在数据库中,清理容器映像并为安装的软件包编制索引。如果任何漏洞与映像中已识别的软件包匹配,则程序可以向生产环境发送警报,报告或阻止部署。

2、合规检查

随着Docker的使用量大大增加,更好地了解如何安全地配置和部署Dockerized应用程序变得越来越重要。互联网安全中心发布了1.13 Docker Benchmark,它为主题专家提供了基于共识的指导,供用户和组织实现安全的Docker使用和配置。

该规定侧重于Docker特有的五个领域:

· 主机配置

· Docker守护程序配置

· Docker守护程序配置文件

· 容器图像和构建文件

· 容器运行时

这里列举一下,最佳实践的检测项。

容器运行时合规检查:

1、确保docker内部存在docker安全程序,例如:AppArmor,加固:docker run –interactive –tty –security-opt="apparmor:PROFILENAME" centos /bin/bash

2、docker默认权限检测,需要以下权限:AUDIT_WRITE CHOWN DAC_OVERRIDE FOWNER FSETID KILL MKNOD NET_BIND_SERVICE NET_RAW SETFCAP SETGID

3、确保Docker socket没有挂载到内部容器,检测:docker ps –quiet –all | xargs docker inspect –format '{{ .Id }}:Volumes={{ .Mounts }}' | grep docker.sock

4、确保不共享主机的用户命名空间,检测:docker ps –quiet –all | xargs docker inspect –format '{{ .Id }}:UsernsMode={{ .HostConfig.UsernsMode }}'

5、限制容器获得新权限请求,检测:docker ps –quiet –all | xargs docker inspect –format '{{ .Id }}:SecurityOpt={{ .HostConfig.SecurityOpt }}'

6、确保docker exec命令不使用user、privileged选项,检测:ausearch -k docker | grep exec | grep user

ausearch -k docker | grep exec | grep privileged

7、确保sshd不在容器中运行,检测:docker ps —quit,docker exec '$instance_id ps -el'

宿主机合规检查:

1、开启对宿主机docker文件和目录的操作审计功能:

/usr/bin/docker-runc、/usr/bin/docker-containerd 、/etc/docker/daemon.json、/etc/default/docker、docker.socket、docker.service、/etc/docker、/var/lib/docker

2、确保对docker daemon开启审计功能。

3、入侵检测

传统的入侵检测手段可以通过分析攻击链解决:

(1)Webshell检测:通过监控容器内部的web目录,结合正则库,相似度匹配,沙箱等多种检测方法,定时检测文件变化,从而及时发现Web后门。

(2)反弹shell检测:通过对容器用户进程行为的实时监控,发现进程的非法Shell连接行为、并且结合威胁情报,对外联shell监控,对于新建黑客基础设施,通过历史图分析技术做进一步甄别。

(3)本地提权检测:通过对用户进程行为进行实时监控,发现进程的提权行为并通知用户,并提供提权操作的详细信息。

在今年,业界安全创业公司主流容器解决方案增加了:对容器内部Web服务的安全检测,可以更好的增加安全事件采集点。例如:集成基于docker的WAF组件,或者直接在web服务里嵌入RASP的解决方案。

0x03、总结

容器镜像漏洞扫描、容器相关合规配置检查以及基于容器的入侵检测构成了容器安全的核心内容。更重要的是,需要把web安全组件下沉到容器中,以获取更有价值的安全数据。



 本文作者bt0sea ,转载自嘶吼,原文地址:  https://www.4hou.com/business/17981.html

0
现金券
0
兑换券
立即领取
领取成功