@lsmn
2017-10-17T07:43:51.000000Z
字数 4303
阅读 2172
容器
安全
Docker
Struts
从构建阶段到传输至生产运行阶段,容器在每个阶段都面临着安全风险。容器防护需要在整个栈及部署过程中引入一种分层安全策略。
本文要点
- 容器风险有多种形式:勒索软件、应用层DDoS、容器感染或逃逸等。
- 每一次成功地攻击都包含一个事件“杀伤链”,要抑制这些活动,就需要在整个栈及部署过程的每一个阶段引入一种分层安全策略。
- 不只是在生产阶段,在前三个阶段(构建、传输、生产准备)也有具体的安全措施可以采取。
- 容器构建、传输和生产准备阶段的持续安全应该包括:代码分析、加固、镜像扫描、镜像签名&用户访问控制、主机&内核安全、系统&Docker守护进程安全、秘密管理、审计和编排安全&网络。
- 生产准备和生产运行阶段应该包括:网络检查&可视化、7层应用隔离、威胁检测、权限提升检测、容器隔离、运行时漏洞扫描、数据包捕获&事件日志。
从构建阶段到传输至生产运行阶段,容器在每个阶段都面临着安全风险。为应对这些威胁,保证容器的一致性和安全性,实现持续安全至关重要。然而,在繁忙的时候,为了使CI/CD管道可以更快地流动,这些安全措施都被跳过或忽略了。现如今,许多企业都在为多年前实现的糟糕的安全措施买单。但愿这些错误不会在迁移到容器化环境时再重复一次。
容器和主机风险有多种形式:勒索软件、应用层DDoS、跨站点脚本攻击,受感染的容器额外下载恶意代码或寻猎内部系统敏感数据或漏洞,容器逃逸允许不经授权访问系统,迫使容器消耗系统资源,导致其他容器崩溃,等等。
这些攻击有许多是始于潜伏多年但之前没有发现的漏洞。攻击者利用这些漏洞获得一个据点,然后扩展到其他主机或容器。
导致Equifax数据泄露的Apache Struts漏洞
Apache Struts是一个在使用Java创建Web应用程序时广泛应用的框架。人们最初认为,新发布的Struts漏洞CVE-2017-9805是Equifax数据泄露的原因。然而,Equifax最新发布的公告显示,是3月份发现的漏洞CVE-2017-5638导致了Equifax数据泄露。
CVE-2017-9805的漏洞代码位于Struts框架的REST插件中。该插件未能安全地验证并反序列化HTTP请求中用户上传的数据。这让攻击者可以将任意二进制代码写到Web服务器上并远程执行。3月份,Jakarta multi-part解析器的漏洞CVE-2017-5638被曝了出来。此外,通过在一个精心设计的Content-Type HTTP头中注入“#cmd=”字符串,攻击者可以在Web服务器上执行任意命令。
勒索软件
近日,勒索软件攻击利用了各种漏洞,包括开放端口、远程代码执行和其他应用程序缺陷。
WannaCry/WannaCrypt主要是在SMB、RDP和IIS服务端口如445上攻击微软Windows漏洞。和大多数攻击一样,是一个事件“杀伤链”导致了最终的勒索要求。
一旦攻击者进入一个网络,他们就横向扩散。由于容器中的横向流量不可见,所以在容器化环境中更容易扩散了。
SambaCry是7年前在Samba网络软件中发现的一个危险的远程代码执行漏洞(CVE-2017-7494)。该漏洞让远程攻击者可以控制受感染的Linux系统。现在,如果CVE数据库更新及时,那么漏洞扫描软件可以帮忙从容器镜像中找出这个CVE。也有其他工具可以帮忙检测权限提升或容器逃逸。
ElasticSearch和MongoDB是Docker Hub上其中两个下载最多的应用程序容器。出人意料,包括开放端口和密码在内的简单攻击都可以被用于勒索软件。基本的容器安全措施就可以预防这样的攻击。经常审计并测试主机和容器的安全设置,发现最近的应用程序升级或主机部署引入的风险。
Dirty Cow
Dirty Cow(CVE-2016-5195)内核漏洞被攻击者用于改写系统中的setuid程序。通过替换setuid程序,攻击者可以在程序执行时获得root访问权限,然后就可以做任何他们想做的事。由于攻击者可以采取破坏性行动,他们更可能在这个时候偷偷地扩散到其他系统或应用程序。甚至,受感染的容器被销毁了,漏洞利用者仍然可能留在容器环境中。
Linux Stack Clash
近日,Qualys的安全研究人员发现了Linux Stack Clash漏洞(CVE-2010-2240),之所以命名为“Stack Clash”,是因为它会使其他内存区域(如堆)和栈发生“冲突”。由于这是用户空间的本地漏洞利用,这也在操作系统或内核中为攻击者提供了一个据点。Stack Clash可以和其他漏洞一起利用,对系统造成更严重的破坏,并可能横向扩散。例如,最近发现的sudo漏洞(CVE-2017-100367)结合Stack Clash就可以使用root权限执行任何代码。
攻击检测
每一次成功地攻击都包含一个事件“杀伤链”,我们可以使用各种技术在多个点上进行检测。通常,为了降低容器环境中的风险,应该采取以下安全措施:
为了减少威胁,需要引入并实现一种分层安全策略,在整个栈和部署过程的每个阶段预防这些问题。为了检测和解决攻击及其他问题,正确的安全控制和自动化测试是确保应用程序安全有效必不可少的组件。
为了实现持续安全,下面是可以在容器部署过程中采取的措施:
第一步——构建阶段
持续安全始于构建安全的应用程序。开发人员必须懂得利用恰当的技术最小化应用程序代码本身的风险。这些技术包括:
在实际实行这些措施的时候,应该使用恰当的工具把它们自动化并加入交付过程/管道,这样才能确保不断地执行,而不会出现不执行的情况。
第二步——传输阶段
在准备部署镜像时,为了确保信任,安全需要恰当的控制和验证。这包括:
为了自动化这些安全特性,促成持续安全,用于生产环境的镜像应该自动签名和打标签。敏感工具的访问控制应该集成活动目录或LADP目录。Docker Bench for Security可以作为一个自动化过程来运行,测试内容信任和访问控制问题。
第三部——运行阶段:准备
在生产环境中运行应用程序容器之前,需要确保运行时环境的安全,包括主机、内核、Docker守护进程以及所有的网络和系统服务。
这些编排及集成的安全工具可以提供自动化安全测试,根据标准基准进行检查,并自动更新策略,适应配置变化,更清晰地可视化应用程序和容器内的行为。
第四步——运行阶段:生产
谈到容器安全,在生产环境中运行时是最关键的阶段。这是战场,黑客会设法利用他们发现的一切漏洞,而安全工作必须检测并阻止那些尝试。黑客的行为会包含一个“杀伤链”,黑客从一台主机或另一台容器转移到目标漏洞攻击点时会产生一系列的事件。通常,在这一系列事件发生的过程中,我们会有多次机会发现并阻止黑客的活动。下面是可以使用的技术:
实现这些安全措施的工具应该自动部署到每一台主机,新建容器的行为应该可以自动获知或者通过编程加入安全策略。运行时监控和预警管理既可以通过本地控制台,也可以通过导出到SIEM系统的日志。
小结
正确规划,统筹安排,整合安全工具和自动化策略,就可以实现持续的容器安全,保护整个容器部署过程。
关于作者
Fei Huang是NeuVector联合创始人兼首席执行官。NeuVector是一个Docker容器网络安全解决方案,使用行为学习来保证容器的运行时安全。Fei在企业安全、可视化、云、嵌入式软件方面有20多年的经验。他是Cloudvolumes(被VMware收购)创始团队的成员,同时也是DLP安全公司(被TrendMicro收购)Provilla的联合创始人。Fei持有安全、可视化及软件架构方面的多项专利。 |
查看英文原文:A 4-Step Guide to Building Continuous Security into Container Deployment