共计 3059 个字符,预计需要花费 8 分钟才能阅读完成。
2023 年 4 月 19 日,Wiz Research 在文章 Accidental‘write’permissions to private registry allowed potential RCE to Alibaba Cloud Database Services 中披露了被命名为 BrokenSesame 的一系列阿里云数据库服务破绽,向咱们展现了如何从一个容器逃逸破绽,与公有仓库写权限的组合,最终实现 RCE 的攻打链路。该破绽最终可导致未受权拜访阿里云客户的 PostgreSQL 数据库,并且能够通过在阿里巴巴的数据库服务执行供应链攻打。
时隔一个月,在通过钻研与复现的过程中,不由得感叹攻击者的构思奇妙;而反过来作为防守人员,咱们是否在这次战斗中,取得一些教训和启发?让咱们站在蓝军的视角再看一遍残缺的攻打途程。
0x01 容器提权
在原文中,作者分享了两个案例:ApsaraDB RDS for PostgreSQL 和 AnalyticDB for PostgreSQL。两个案例的第一步均为容器提权:从一般账户提权至更高的权限。在这一步中,两个案例别离用到了不同的攻打链路:
- cron 定时工作 ’/usr/bin/tsar’ -> 高权限执行的二进制文件 -> 可批改的动态链接库 -> 笼罩链接库 -> 定时工作登程执行获取 root 权限。
- 容器共享目录 -> 业务个性导致任意文件读取(符号链接)-> 获取到另一个容器的读取下权限。
在这两个链路中,链路 1 实际上是在浸透过程中最常应用的一种攻击方式,通过注入歹意动态链接库实现账户提权。这条链路波及到了两个要害的问题点:cron 定时工作的启动权限和动态链接库权限。cron 的高权限导致所有定时工作都通过高权限账户 root 来执行,而可批改的动态链接库权限导致笼罩动态链接库;
针对这两个危险点,传统的 HIDS 文件监控即可笼罩到该层面。除此之外,对于增加进入定时工作的二进制程序,应该严格限度其权限,包含动态链接库文件。
在第二条链路中,咱们发现实际上业务在设计架构模式上时,应用了共享容器的目录来实现通信;但业务代码并没有思考符号链接的场景,导致了第二个文件下的任意文件读取。
整体来看,链路 1 和链路 2 别离属于的 HIDS 主机监控 / 黑白盒业务平安扫描的领域,阐明即便在云场景下,传统的业务平安仍旧处于重要位置。
0x02 容器逃逸
获取到容器 root 权限后,下一步便是朝着宿主机进行攻打,同样是两条链路:
- 共享 pid namespcae -> 监听发现共享的挂载目录 ’/home/adbpgadmin’ -> 植入 ssh/config 获取容器 B 权限 -> 通过容器 B 的 docker.sock 逃逸至宿主机。
- 由提权过程中的任意文件读取获取到业务代码 -> 代码审计发现命令注入 -> 通过命令注入获取到特权容器的 shell -> 通过 core_pattern 实现容器逃逸。
在这两条链路中,攻击者应用了两种不同的逃逸形式:共享 namespace 导致攻击者获取到更多信息、挂载 docker.sock 导致逃逸、特权容器复写 core_pattern 导致逃逸;这几种形式是云环境中比拟经典的逃逸场景,使得容器绕过各种隔离限度,对容器外的宿主机或其余容器的资源进行操作。
如何对容器逃逸进行进攻?传统的业务平安和主机平安并没有针对主机 cgroups 和 namespace 的进攻设计;联合云原生的架构模式,能够在两个环节建设容器逃逸检测。
- DevSecOps 平安左移,对代码仓库构建产物的 IaC(基础设施即代码) 进行审查,在开发阶段对可能存在逃逸危险的配置项问题进行阻断,防止出现各类逃逸问题。
- 运行时监测, 对于曾经上线并理论运行的业务容器,实时监控逃逸特色。通过订阅内核事件,抓取可能为逃逸的行为特色,联合以后运行中的容器配置信息进行剖析,综合给出是否存在逃逸危险以及是否产生逃逸事件的告警。
联合这两点,能够做到对逃逸危险的无效管制,避免攻击者进一步的攻击行为。
0x03 横向扩散
在实现逃逸后,获取到的数据就越来越宽泛。
- 通过 k8s 节点存储凭证可获取各种敏感资源如 secrets、configmaps。
- 通过 imagePullSecrets 获取到了公有镜像仓库权限。
- 环境变量中存储了 access_keys 等敏感信息。
- 其余用户的 pod 信息等。
能够看到,在实现了容器逃逸后,攻击者轻松从各种凭证信息实现横向扩撒,包含各类敏感资源数据、镜像仓库权限等等;这好比在传统的浸透中,从 DMZ 区进入到了内网环境后,发现大多主机 MS-17010 通杀的场景;阐明对于云环境下的节点治理,仍须要增强警觉,尤其是在容器逃逸防护较弱的场景下。
针对这部分横向挪动与扩散的攻击行为,能够和容器逃逸一样分为两个方面进行防护:
- 事先防护:对镜像资产 / 容器资产进行扫描,保障镜像 / 容器内没有敏感信息以及过高的凭证信息。
- 事中防护:通过对集群日志审计来发现横向挪动行为,疾速响应并隔离问题容器。
0x04 综合反思
回顾整条攻打链,咱们能够总结以下几点:
传统的业务平安在云原生环境下仍旧处于重要位置
回看整个攻打过程,所有的切入点依然是一个容器服务。尽管容器提供了绝对隔离的运行环境,但传统的业务平安如:web 平安所导致的问题仍旧作为了云安全事件中的切入点,其位置不亚于弱口令。
云环境的场景下,传统平安的危害效应将指数级放大
云环境中的配置简单,一旦存在了配置不当的状况,攻击者便能够轻易的将攻打从一个容器扩散到一台主机、一个集群、甚至于多个集群、整个 k8s 环境。此时,作为入侵的入口导致的影响指数级回升。
云环境的场景下,容器逃逸是整个攻打链路的外围
在整个攻打的步骤中,咱们能够总结出:攻击者获取到一个容器的最高权限后,必须千方百计的实现逃逸来绕过各种资源限度,才可能产生更为严重的影响;因而,云环境场景下,逃逸问题是连贯传统平安与云平安的要害外围。
云环境对基础设施的监控、审计需要更加简单和迫切
云计算的个性使得基础设施的边界变得含糊,资源的动态变化减少了治理和爱护的难度,同时多租户环境下的安全性和合规性危险也须要失去充沛的关注和解决,带有缺点的隔离限度将轻易的导致用户数据泄露。
同时,咱们也能看到,云环境的场景下,对于蓝军防守方,提供了一个新的思路:
在面对传统平安覆盖率永远无奈达到 100% 以及层出不穷的 0day 破绽,增强对云平安防护以及逃逸检测可能无效的中断攻打链路,升高攻打危害,实现低成本 / 高回报率的防护。
针对对以上的问题,牧云·云原生平安平台提供了残缺的监控与检测计划,深刻监控了每一个容器的生命周期,在传统的 webshell、反弹 shell 等平安入侵能力检测上,联合云环境特点,实现了容器逃逸危险监测、集群日志审计等性能,帮忙清晰明了的掌控集群的实时平安;当产生安全事件时,黑客的歹意行为和特色将会被检测与捕获,实时反馈到平台中。
除此之外,为保障供应链平安,平台提供了定时工作机制和多种多样的资源集成,定时检测镜像仓库等远端资源,第一工夫发现危险镜像,包含敏感信息透露、歹意文件、软件破绽等问题。并通过配置能够阻断来自于该镜像的容器创立申请以及镜像构建申请,避免攻打扩散。
与此同时,平台还思考了云场景下资源迭代的疾速以及破绽响应的及时性,设计了插件零碎,联合开源社区平安检测能力的积淀,可能疾速赋能最新破绽检测需要,并热更新于平台中,提供与时俱进的插拔式平安检测能力;如前一阵子呈现的 Minio 破绽(CVE-2023-28432),能够通过疾速插入专项检测插件来实现 0 day 速查。
官网理解:https://veinmind.chaitin.com/