作者:yueji0j1anke
首发于公号:剑客古月的安全屋
字数:2119
阅读时间: 15min
声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外
目录
-
前言
-
前置知识
-
Docker安全基础
0x01 前言
经过云存储安全的学习,我们终于来到云安全的大头->云原生,预计三到五个专题完成复习总结学习
0x02 前置知识
1.容器
Docker是一种开源的容器化平台,用于开发、交付运行应用程序。与虚拟机相比,docker是虚拟化软件,而虚拟机是虚拟化硬件,docker的核心功能包括
容器:Docker将应用程序和其所有依赖(如代码库、运行时环境、库和系统工具)封装到一个容器中。这使得容器在任何支持Docker的平台上运行时都具有一致性和可移植性。
镜像:Docker镜像是构建容器的模板,包含应用程序及其运行环境。镜像是只读的,通过Dockerfile可以创建定制化镜像。
Docker引擎:这是Docker的核心组件,用于创建、管理和运行容器。(比如说docker守护进程)
虚拟化:Docker是操作系统级别的虚拟化技术,与传统的虚拟机相比,更加轻量级,启动速度快,占用系统资源少。
2.容器编排
容器编排是一种自动管理容器的技术,包括容器的部署、管理、拓展、联网,常见的有Kubernetes(也就是常说的K8S)、Docker Swarm和Apache Mesos
3.Serveless
无服务技术,上期讲ECS安全的时候略微提到过,指一种云原生开发模型,分为FaaS和BaaS,让开发人员可抛开服务器直接开发web应用。
4.微服务
在我的理解中,其是一种软件架构风格,通过服务治理的方式将大型应用程序拆分成若干个单一功能的小型功能区块,后者组成应用的各个模块,相当于传统的制造业划分成不同车间流水线生产
5.服务网格
Service Mash是专门为微服务架构设计的基础设施层,用来管理微服务间的通信、流量安全、监控,方便开发者专注业务逻辑开发,不用考虑网络通信。类似于tomcat的pipeline机制
6.CNCF
CNCF (Cloud Native Computing Foundation) 云原生计算基金会,于 2015 年7月21日成立,隶属于 Linux 基金会,CNCF 的口号是坚持和整合开源技术来编排容器作为微服务架构的一部分。
CNCF 是一个孵化、运营云原生生态的中立组织,CNCF 对于云原生应用的推广和普及发挥着重要的作用。
详情见该链接 https://landscape.cncf.io/
7.云原生安全
根据参考文档,云原生可以被拆分成云与原生两个单词。
何为云,跑在云服务器上的应用就是云。
何为原生,不能直接理解成把本来放在本地服务器跑的业务放在云上就是云原生了,而是说按照云架构特点设计的业务逻辑结构应用,类似于“原住民”而不是拆迁户。
云原生的代表技术包括-> 容器 无服务 容器编排 服务网格 微服务 不可变基础设施与申明式API,所以对于云原生系统有如下特征
弹性容器编排
轻、快的基础设施
无服务模型
微服务架构
那自然,云原生安全的内容也就水落石出了
分为以下三类
1.容器安全
2.编排系统安全
3.应用安全-> 微服务 无服务 服务网格 API 零信任
我们今天限讲讲容器安全
0x03 Docker安全基础介绍
docker安全是云原生应用的一个大类,其重要性毋庸置疑,具体来说分为几个大类
1.容器镜像本身存在的问题(比如不安全第三方组件,web应用漏洞,敏感信息未修改)
2.容器逃逸
3.容器自身漏洞
今天就首先为大家讲讲docker容器逃逸漏洞(云原生大头内容)
1.容器隔离机制
容器与宿主机是相互隔离的,docker使用linux内核的命名空间和控制组等技术来保证容器的隔离
1.命名空间(NameSpace): 为容器提供独立的空间、内存、进程、任务、网络、文件系统
2.控制组(Cgroup):限制容器使用宿主机的cpu、内存与磁盘I/O
2.容器逃逸
众所周知,容器与宿主机是相互隔离的(bushi,如果攻击者利用容器的不安全配置、漏洞突破容器的隔离性,进而获取对宿主机的访问权限进行一些危险的操作,这就是容器逃逸漏洞。
容器逃逸的方式里有很多,下面先简单的讲讲我所熟知,后面我们再进行详细的讲解与复现(或者补充)
1.内核漏洞: 容器依赖宿主操作系统的内核,如果内核存在漏洞,攻击者就可以利用内核漏洞获取到宿主机的访问权限
2.不当配置: 比如容器运行时使用了 --privileged选项,这使得容器几乎拥有宿主机所有的权限,易发生容器逃逸
3.挂载宿主机文件系统: 容器挂载了宿主机的敏感文件系统,攻击者可以利用挂载点读取或者写入敏感文件以完成容器逃逸
4.docker守护进程漏洞: docker守护进程并未进行安全的控制或者本身存在漏洞,从而造成容器逃逸
3.docker信息收集
无论是内网还是外网,最重要的都是信息收集,在我们的docker容器安全中也不例外,下面简单介绍几种在docker容器中进行信息收集的方法
1.判断是否为容器环境
cat /proc/1/cgroup | grep -qi docker && echo "Docker gogogo fuck" || echo "Docker Null"
2.判断是否为特权模式
cat /proc/self/status | grep -qi "0000003fffffffff" && echo "privileged gogogo fuck" || echo "privileged Null"
3.判断是否挂载 Docker Socket
ls /var/run/ | grep -qi docker.sock && echo "Docker Socket gogogo fuck" || echo "privileged Null"
4.是否挂载宿主机根目录
find / -name passwd 2>/dev/null | grep /etc/passwd | wc -l | grep -q 7 && echo "Root directory is mounted." || echo "Root directory is not mounted."
5.是否存在api未授权访问
IP=`hostname -i | awk -F. '{print $1 "." $2 "." $3 ".1"}' ` && timeout 3 bash -c "echo >/dev/tcp/$IP/2375" > /dev/null 2>&1 && echo "Docker Remote API Is Enabled." || echo "Docker Remote API is Closed."
当然还存在一个自检测脚本,强烈推荐一波
wget https://raw.githubusercontent.com/teamssix/container-escape-check/main/container-escape-check.sh -O - | bash
参考链接 https://wiki.teamssix.com/
原文始发于微信公众号(剑客古月的安全屋):云安全-云原生之概念辨析与docker安全基础
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论