​《云原生安全: 攻防实践与体系构建》解读:攻防对抗篇​
2021-10-29 09:46:42 Author: mp.weixin.qq.com(查看原文) 阅读量:154 收藏

1. 容器与编排系统的威胁和风险

作为云原生生态的两大技术基石,容器和编排系统(以Kubernetes为代表)的安全性对集群来说非常重要。然而,容器与编排系统面临的威胁和风险客观存在,我们必须了解并认真对待这些威胁风险。

针对容器镜像的软件供应链攻击:随着容器技术的普及,容器镜像成为软件供应链中重要的一部分。然而,业务依赖的基础镜像无论是存在安全漏洞还是包含恶意代码,潜在危害都可能比外部发起的攻击严重。这种攻击方式主要包含两种类型:镜像漏洞利用和镜像投毒。前者指的是镜像本身存在漏洞时,依据镜像创建并运行的容器也通常会存在相同漏洞,攻击者利用镜像中存在的漏洞去攻击容器,往往具有事半功倍的效果。后者指的是攻击者通过某些方式——如上传镜像到公开仓库、入侵系统后上传镜像到受害者本地仓库以及修改镜像名称假冒正常镜像等,欺骗、诱导受害者使用攻击者指定的恶意镜像创建并运行容器,从而实现入侵或利用受害者的主机进行恶意活动的行为。

容器逃逸:与其他虚拟化技术类似,逃逸是最为严重的安全风险,直接危害了底层宿主机和整个云计算系统的安全。根据层次的不同,容器逃逸的类型可以分为三类:危险配置、挂载导致的容器逃逸;相关程序漏洞导致的容器逃逸;内核漏洞导致的容器逃逸。另外,在2020年Black Hat北美会议上,安全容器也首次被成功逃逸。

资源耗尽型攻击:容器运行时默认情况下并未对容器内进程在资源使用上做任何限制,以Pod为基本单位的容器编排管理系统也是类似的,Kubernetes在默认情况下同样未对用户创建的Pod做任何CPU、内存使用限制。限制的缺失使得云原生环境面临资源耗尽型攻击风险。

Kubernetes控制权限陷落风险:Kubernetes集群的管理控制权限实质上等价于集群内每台节点的root权限之和,其重要性可想而知。然而,不安全的组件配置、权限提升漏洞和容器逃逸漏洞等安全问题和风险都可能导致攻击者获取Kubernetes控制权限,从而实现对整个集群的控制,后果非常严重。

针对Kubernetes的拒绝服务攻击:Kubernetes通过一系列机制来保证云原生应用的持续稳定运行,然而,如果集群控制平面自身遭受拒绝服务攻击,后果不堪设想。拒绝服务攻击有多种类型,常见的是基于流量的拒绝服务攻击和基于漏洞的拒绝服务攻击。传统环境和云原生环境的流量攻击的差异性较小,基于漏洞的拒绝服务攻击则不然,存在于云原生组件的拒绝服务漏洞很可能并不存在于传统主机环境。诸如CVE-2019-11253、CVE-2019-9512等拒绝服务漏洞可能导致Kubernetes API Server陷入瘫痪。

云原生网络安全风险:默认情况下,Kubernetes集群中所有pod组成了一个小型的局域网络,那么就可能发生像中间人攻击这样的针对局域网的攻击行为。通过ARP欺骗、DNS劫持等技术,攻击者能够潜伏在集群中,不断对其他Pod的网络流量进行窃听,甚至可以悄无声息地劫持、篡改集群其他Pod的网络通信,危害极大。

以上是我们可以从容器和编排系统的角度梳理出的部分威胁风险,除此以外,在具体应用场景中,微服务、服务网格和Serverless的安全风险也不容忽视。安全具有木桶效应,只有全面防御,方能万无一失。本书第三章、第四章对这些威胁进行了深入而详尽的分析。

2. 复杂的安全问题

各行各业都在积极上云,然而,如何安全上云?进一步地,如何安全应用云原生技术促进产业发展?云原生环境仍然存在许多安全问题亟待解决。在云原生技术的落地过程中,安全是必须要考虑的重要因素。

通过对过去云原生安全事件的梳理,我们发现“服务暴露”、“数据泄露”和“恶意挖矿”是三类高发安全问题。这些安全问题可能不仅可能导致集群被控制、敏感信息被窃取、大量资源被滥用,还可能引起一系列严重的社会安全问题(如关键基础设施出现问题、医疗信息被不法分子利用等),亟需人们的重视。

本书第六章对典型的云原生安全事件的前因后果进行了剖析,供大家在云原生技术落地的过程中进行参考。

3. 云原生异常检测

基于规则的已知威胁检测

几乎任何一个有意义的进程在运行期间都会执行系统调用(System call),恶意进程也不例外,甚至调用得更多更为频繁。另外,恶意进程的调用方式往往具有区别于正常进程的特征。

例如,2019年著名的runC容器逃逸漏洞CVE-2019-5736,它的特征是,在利用过程中需要以/proc/self/exe为路径参数执行open系统调用,在后续过程中,还会以/proc/self/fd/为路径参数前缀采用写方式执行open系统调用,以覆盖宿主机上的runC二进制文件。这样的参数内容在容器内业务进程中非常罕见的。因此,特定系统调用+特定参数就是该漏洞的明显特征。

同CVE-2019-5736漏洞利用一样,多数攻击行为都可以通过直接检测某次系统调用或连续几次系统调用的异常来判断是否发生了某一类攻击行为。

基于行为模型的未知威胁检测

检测系统定期收集集群各宿主机节点上所有运行容器内部的所有进程数据,第一次收到数据后,利用本次数据为该次数据涉及到的每一个镜像初始化进程行为模型。行为模型是对该镜像生成的容器在运行时的正常行为范围的界定。

在学习期间,此后每一次收到与该镜像关联的容器进程信息时,利用这些新增信息不断更新该镜像的模型,即更新模型中的进程列表,直到学习期结束,将模型状态改为“已就绪”。

在学习期结束后,每一次收到数据后,检测系统将该次数据中属于同一镜像的数据与数据库中该镜像的进程行为模型做匹配,如果待测数据中的进程属性不在模型的镜像进程列表描述的对应进程的属性中,或待测数据的CPU、内存等资源使用情况超出了镜像进程列表中记录的对应进程的历史最大CPU、内存资源使用率,则判定异常,并输出告警。

本书第十六章给出了云原生异常检测的方案和思路,供大家在部署云原生防御体系时参考。

4. 总结

未知攻焉知防。知道了攻击手段后,能不能把“防”做起来,做到行之有效?这是一个问题。另外,攻与防是一个动态对抗的状态,技术每发展一段时间,总会有一些未知的攻击手段和攻击面出现,我们能不能把这些未知的威胁检测出来?或者至少能检测出异常,再交给专家去判断?这是另一个问题。

《云原生安全:攻防实践与体系构建》试图回答这些问题。我们系统梳理云原生安全可能面临的威胁与风险,并给出了切实可行的防护方案。欲了解更多详情,大家可参考《云原生安全:攻防实践与体系构建》。

本文选自《云原生安全:攻防实践与体系构建》,经出版方授权发布。



文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650525812&idx=2&sn=095501966c3bfb2602906e063ce16143&chksm=83bab590b4cd3c86b68b2713efc04425e342cb0d47bcb91ebde4d9702bea16f9f9d401da69b0#rd
如有侵权请联系:admin#unsafe.sh