一前言
漏洞实质是系统安全策略上的缺陷,攻击者能够利用漏洞在未授权的情况下访问或破坏系统。云原生环境中的配置缺陷属于漏洞的一种形式,同时由于开发人员在写代码时会产生一定的逻辑缺陷,这些逻辑缺陷也会构成漏洞。因此,漏洞是必然会产生并存在的。如何有效地对云原生容器环境进行全生命周期漏洞检测与防治,备受云原生用户的关注。经验证,安全狗研发的漏洞检测与防治方法实行之有效。
安全狗经过多年对漏洞的研究积累与技术沉淀,结合漏洞情报运营与研究以促进漏洞防御,形成一套精准的漏洞专家知识库和全生命周期的漏洞检测与防治方案,输出高质量的高风险漏洞情报的研究成果赋能到产品,缓解“海量漏洞无从下手,无法聚焦重点的高危漏洞”的痛点。如图1所示,该方案分别从事前、事中和事后进行漏洞防御和响应。
- 在事前,进行漏洞发现与收敛:如全生命周期、全环境的漏洞检查、全生命周期的SCA分析、“准入”+“准出”安全管控;
- 在事中,做好漏洞攻击的捕获与防御:如运行时异常进程行为分析、运用RASP代码疫苗技术和日志审计;
- 在事后,对漏洞进行清点与防治:如对全环境的漏洞进行检查与复盘。
图1 以漏洞情报运营与研究促进漏洞防御
本文将结合实际案例介绍此漏洞检测与防治方法,希望能为读者在进行云原生容器漏洞检测与防治时提供行之有效的思路。
二CCICAE云原生漏洞模型
首先,做好漏洞的检测与防治,需要对自身业务环境的云原生资产进行清点。安全狗基于云原生容器资产安全的六大关键组成部分,总结出“CCICAE”云原生漏洞攻击面模型,如图2所示。
图2 “CCICAE”云原生漏洞攻击面模型
云原生容器资产可分为六大层级,分别是:Cloud、Cluster、Image、Container、APP和Environment层级:
01Cloud层级
Cloud层级对应于数据中心的基础设施,属于主机安全范畴,会受主机漏洞风险的影响;
02Cluster层级
Cluster层级对应于云原生编排平台,比如:K8s的控制层平面,会有多种API未授权访问漏洞。另外,容器自身的引擎也存在漏洞;
03Image层级
Image层级对应于云原生环境中的各种镜像,包括来自镜像仓库以及宿主机的各种容器镜像,镜像会继承应用中的漏洞;
04Container层级
Container层级对应于云原生环境中运行的各种容器,容器会继承镜像的漏洞;
05App层级
App层级对应于容器镜像中用户业务相关的运行实体,比如WEB应用漏洞;
06Environment层级
Environment层级对应于制品环境,包括镜像仓库、代码库以及持续集成持续交付环境等资产,涉及了编码和配置中的安全漏洞。
“CCICAE”云原生漏洞攻击面模型可与Gartner的容器环境威胁向量产生对应,如图3所示。
图3 CCICAE模型可与Gartner的容器环境威胁向量产生对应
三基于CCICAE模型的漏洞对策
在构建好CCICAE云原生漏洞攻击面模型后,对该模型基于资产维度实施漏洞静态检测,针对模型中不同种类的资产采用不同的漏洞检测策略,如图4所示。
图4 “CCICAE”资产漏洞对策模型
四云原生容器全生命周期的漏洞检测与防治实践
下面我们将从攻击方和防守方的视角逐一分析,分别从事前、事中和事后等阶段进行云原生容器全生命周期的漏洞检测与防治的案例介绍。
01事前
全生命周期、全环境漏洞检查
在事前可基于对漏洞情报进行研判,并对全环境和资产的漏洞做扫描,以发现全环境中的漏洞问题,确保业务在上线前安全可信,如图5所示。
图5 全生命周期、全环境漏洞检查
漏洞扫描可通过系统漏洞检测、版本对比和POC检测等开展。镜像扫描分为:静态检测、供应链检测和动态检测,静态检测基于已知的CVE漏洞情报进行安全扫描;供应链检测以威胁情报作为数据支持,通过自动化检测来发现漏洞;动态检测结合了已知的CVE和威胁情报,构建容器沙箱,进行实时动态检测。扫描时可针对“DevOps环境”和“生产与测试”环境,进行持续的监控与扫描。
攻防案例1脏牛漏洞
下面将结合Cloud层级的代表性漏洞——“脏牛漏洞”展开分析,如图6所示。
图6 “Cloud”层级操作系统漏洞示例
以Cloud层级为例,当攻击者要从云原生容器环境入侵到宿主机环境时,需要寻找一个突破的“漏洞”。在云原生环境,脏牛漏洞本身就作为Linux系统低权限提升到高权限的内核漏洞,同样也能在容器环境中提权到宿主机。
攻击方视角
从攻击方视角来看,攻击者利用“脏牛”内核漏洞实现了容器逃逸,以此获取到宿主机的远程命令执行权限。图7代表攻击者在Getshell后进而执行“whoami”等命令。
图7利用脏牛漏洞逃逸反弹shell并执行命令
防守方视角
从防守方视角来看,可以基于对已知漏洞的扫描,在事前发现存在脏牛漏洞的资产,提前做好漏洞补丁的修复等防治工作。
02事前
全生命周期的SCA
SCA(Software Composition Analysis,软件成分分析)是对软件的成分进行分析的工具,能够识别代码库中的开源软件,及其对应的历史漏洞信息。对云原生容器环境进行全生命周期的SCA,有助于全面地识别云原生容器环境的潜在漏洞风险。SCA主要有以下作用:
- 特征提取与识别,帮助安全人员对开源软件进行全面的风险评估分析。
- 基于SBOM(Software Bill of Materials,软件物料清单)结合漏洞情报进行漏洞扫描、许可证检查、出处检查和过期组件检测,如图8所示。
- 软件供应链成分的透明程度:软件成分作为“最小要素”单位的颗粒度,如软件基本信息、软件间的关系、软件扩展信息。
- 对软件供应链组成进行安全管控:开源组件引入安全管控、源代码漏洞管控。
- 提供漏洞修复建议和知识库。
图8 镜像软件包供应链安全图谱示例
攻防案例2RunC逃逸
下面将结合Cluster层级的代表性漏洞——“runC容器逃逸漏洞”进行分析,如图9所示。
图9 “Cluster”层级容器运行时漏洞示例
以Cluster层级为例,存在容器运行时的逃逸漏洞。攻击者在云原生环境中获取到容器shell后,容器运行时的组件RunC将可能成为攻击者的重点关注对象。如果该组件存在有逃逸漏洞,那么攻击者就可能通过它,从容器中逃逸到宿主机。
攻击方视角
从攻击方视角来看,攻击者通过容器shell程序操纵exe符号链接,通过fd文件向宿主机的RunC中写入payload,由于容器中的shell程序被修改为exe符号链接,因此实际上执行的是宿主机上被修改后的RunC二进制文件,实现容器逃逸,如图10所示。
图10利用RunC逃逸漏洞获取宿主机shell
防守方视角
从防守方视角来看,可以基于SCA软件成分分析工具,在漏洞攻击事件发生前,对云原生容器环境的软件成分进行漏洞特征识别,识别方法有两种:1、基于开源组件属性特征,如源代码、包等文件的hash 值;2、利用不同开源组件的依赖关系,结合组件版本信息识别受影响的其他组件。
03事前
“准入”+“准出”安全管控
为了确保镜像在各阶段的安全性,我们可以利用镜像检查能力,在镜像“构建-分发-运行”全生命周期,对镜像及其构建文件(如:Dockerfile)以及容器编排文件(如:K8s yaml文件)进行深度的安全和合规性检查,进而阻断不符合安全合规的镜像被实例化成容器,如图11所示。
图11“准入”+“准出”安全管控
04事中
运行时异常进程行为分析+RASP代码疫苗技术
在事中,可通过两种方式来检测和抵御“0Day漏洞攻击”。
运行时异常进程行为分析。通过行为捕获未知漏洞检测,大多数未知行为,是无法通过规则匹配检测出来的,因而可通过行为分析来发现未知威胁。基于行为模型的未知威胁检测,可有效捕获0Day攻击事件。
安全狗根据IoC和IoA评估容器化工作负载是否存在已知的恶意活动,同时也采用机器学习实现,基于行为的方法来检测“0Day漏洞攻击”,如图12所示。
图12 运行时异常进程行为分析
RASP代码疫苗技术。RASP以探针的形式将保护引擎注入到被应用服务中。当RASP检测到应用服务的代码执行有异常时,可以做阻断或者告警。安全狗的云原生容器Java RASP使用了Instrumentation/JVMTI的API来实现动态修改Java类字节码并插入监控或检测代码,实现热部署和冷部署两种方案,热部署是在Java应用运行时进行加载,如图13所示;而冷部署是在Java应用启动时采用命令参数的形式进行加载,如图14所示。
图13 应用热补丁-热部署
图14 应用热补丁-冷部署
攻防案例3Log4j RCE
让我们来分析Image、Container、APP层级的代表性漏洞——“Log4j远程代码执行”,如图15所示。
图15 “Image、Containe、APP”层级容器应用服务漏洞示例
以Image、Container和APP层级为例,存在容器应用服务漏洞,传统的WEB应用漏洞对云原生容器环境同样有效,攻击者通过挖掘WEB应用服务中的远程代码执行高危漏洞,实现对该容器的控制。
攻击方视角
从攻击方视角来看,攻击者通过搭设的恶意LDAP服务器,在存在JNDI注入漏洞的Log4j组件中,攻击者通过修改日志配置文件,构建恶意配置使用JDBC Appender和引用JNDI URI的数据源,实现执行远程代码。如图16所示。
图16 利用Log4j远程代码执行漏洞
防守方视角
从防守方视角来看,可通过“容器WEB进程监控”进行威胁检测。从容器进程信息中获取数据源,并根据预设规则模板对实时数据进行分析与检测,分析出Java进程派生有反序列化利用的参数特征,如图17所示。
图17 容器WEB进程监控检测到反序列化利用特征
但通过“容器WEB进程监控”只能判断出0day漏洞攻击事件的类型和中间件,并无法定位到漏洞产生的代码,同时针对漏洞攻击进行阻断。因此,若要做有效的漏洞防治,还可结合RASP代码疫苗技术。
通过分析某“Log4J RCE的热补丁”,可发现Java Agent模块的核心代码中定义了两种加载模式:在启动时加载的“premain方法”和通过attach机制加载的“agentmain方法”,也即同时支持热部署和冷部署,如图18所示;
图18 定义加载模式
在核心代码中还包含了修改lookup方法的关键操作,使用javassist框架对类org.apache.logging.log4j.core.net.JndiManager中的lookup方法进行修改,在方法开头直接添加return null,让该方法直接跳出,而不进行接下来的恶意操作,阻止对该漏洞的利用,如图19所示。
图19 修改lookup方法
05事中
K8S日志审计
利用K8S的审计功能采集所需的日志内容,并从中提取表明受到安全威胁或者存在安全风险的关键信息,从而开展动态的安全监控,如图20所示。
图20 K8s日志安全审计功能原理
攻防案例4Kubernetes未授权访问
让我们来分析Cluster层级的代表性漏洞——“Kubernetes未授权访问”,如图21所示。
图21 “Cluster”层级容器编排平台漏洞
以Cluster层级为例,当存在容器编排平台漏洞时,如果K8S管理人员没有合理的配置验证和权限的话,会造成未授权访问漏洞,攻击者可通过该漏洞获得K8S的控制权限。
攻击方视角
在kubectl客户端中通过未授权访问,远程创建一个K8S yaml文件,将基础镜像挂载到宿主机/mnt文件夹,实现“由不安全挂载导致的容器逃逸”;通过kubectl客户端发送创建容器的请求,在进入创建成功的pod后,向容器的/mnt/etc/crontab写入反弹shell,以实现获取目标K8S的控制权,如图22所示。
图22 利用K8S未授权访问漏洞获取宿主机shell
防守方视角
从防守方视角来看,可通过K8S的日志审计功能,发现K8S未授权访问漏洞的利用,如图23所示。该审计策略配置意为:审计等级为“Request”,请求用户为“Anonymous”并且用户组为“Unauthenticated”。
图23审计策略配置
在采集到的日志,通过筛选以下特征可以发现“未授权访问漏洞事件”的安全风险,如图24所示。
图24 检测到未授权访问漏洞事件的安全风险
06事后
漏洞清点与修复
根据事前“漏洞情报”与事中“漏洞行为检测”,追踪出漏洞事件的态势信息,如:漏洞影响的范围、应用、版本、主机等等,主动在CCICAE模型的不同层级的资产上,进行相关云原生资产采集及漏洞扫描。采用此种方式采集扫描数据精确高效,所检测出的漏洞信息可帮助用户根据不同的业务场景和漏洞风险等级,采取不同的处置措施,如图25所示。
图25漏洞清点与修复
五总结
云原生容器环境对漏洞的检查与防治提出了更严峻的考验,同时也要求云原生用户可基于自身业务实际,从多方面梳理出适合自己的“CCICAE漏洞攻击面”进行防治。
漏洞的检测与防治是一个持续性的过程,需要结合漏洞梳理和实际业务场景分析出攻击面,根据不同的风险程度、采用多种安全能力实施纵深防御。在这一过程中,可引入基于SCA技术的工具,在环境上线前发现应用程序中的开源组件,高效查出“漏洞点”。分别在漏洞事件发生前、中、后进行阶段性的检测与防治,以此合理地规避云原生容器环境中的漏洞问题。
发表评论
您还未登录,请先登录。
登录