>云原生之容器安全实践-网络安全-黑吧安全网 | xxx>云原生之容器安全实践-网络安全-黑吧安全网 – xxx
菜单

>云原生之容器安全实践-网络安全-黑吧安全网

三月 3, 2020 - 黑吧安全网

云原生之容器安全实践

来源:本站整理 作者:佚名 时间:2020-03-04 TAG: 我要投稿

笔者主要负责美团内部操作系统安全、云原生安全、重大高危漏洞应急响应。10+年安全行业经验,熟悉多个安全领域,涉及渗透测试、Web安全、二进制安全、Iot安全、Linux/Android内核安全等,6+年的时间到至今,长期专注于Linux内核安全及开源软件安全。21岁时受邀在第一届中国互联网安全领袖峰会(CSS)演讲,知名Linux/Android内核远程漏洞CVE-2017-8890发现者。
概述:
云原生(Cloud Native)是一套技术体系和方法论。云原生(Cloud Native)由2个词组成,云(Cloud)和原生(Native)。云(Cloud)表示应用程序位于云中,而不是传统的数据中心;原生(Native)表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳状态运行,充分利用和发挥云平台的弹性和分布式优势。
云原生的代表技术包括容器、服务网格(Service Mesh)、微服务(Micro Service)、不可变基础设施和声明式API。
更多对于云原生的介绍请参考文末链接1。
>云原生之容器安全实践-网络安全-黑吧安全网
云原生安全技术沙盘(Security View)
笔者将“云原生安全”抽象成如上图所示的技术沙盘。自底向上看,底层从硬件安全(可信环境)到宿主机安全 。将容器编排技术(Kubernetes等)看作云上的“操作系统”,它负责自动化部署、扩缩容、管理应用等。在它之上由微服务、Service Mesh、容器技术(Docker等)、容器镜像(仓库)组成。它们之间相辅相成,以这些技术为基础构建云原生安全。
再对容器安全做一层抽象,又可以看作构建时安全(Build)、部署时安全(Deployment)、运行时安全(Runtime)。
在美团内部镜像安全由容器镜像分析平台保障。它以规则引擎的形式运营监管容器镜像,默认规则支持对镜像中dockerfile、可疑文件、敏感权限、敏感端口、基础软件漏洞、业务软件漏洞以及CIS和NIST的最佳实践做检查,并提供风险趋势,同时它确保部分构建时安全。
容器在云原生架构下是由容器编排技术(例如:Kubernetes)负责部署的,部署安全同时也与上文提及的容器编排安全有交集。
运行安全管控交由HIDS负责(可以参考,分布式HIDS集群架构设计,文末链接2)。本文所讨论的范畴也属于运行安全之一,主要解决以容器逃逸为模型构建的风险(在本文中,若无特殊说明,容器指代Docker)。
对于安全实施准则,我们将其分为三个阶段:
1.攻击前:裁剪攻击面,减少对外暴露的攻击面(本文涉及的场景关键词:隔离)。
2.攻击时:降低攻击成功率(本文涉及的场景关键词:加固)。
3.攻击后:减少攻击成功后攻击者所能获取的有价值的信息、数据以及增加留后门难度等。
近些年,数据中心的基础架构逐渐从传统的虚拟化(例如:KVM+Qemu架构)转向容器化(Kubernetes+Docker架构),但逃逸始终都是企业要在这2种架构下所需要面对的最严峻的安全问题,同时它也是容器风险中最具代表性的安全问题。笔者将以容器逃逸为切入点,从攻击者角度(容器逃逸)到防御者角度(缓解容器逃逸)去阐述容器安全实践,从而缓解容器风险。
容器风险
容器提供了将应用程序的代码、配置、依赖项打包到单个对象的标准方法。容器建立在2项关键技术之上,Linux Namespace和Linux Cgroups。
Namespace创建一个近乎隔离的用户空间并为应用程序提供系统资源(文件系统、网络栈、进程和用户ID)。Cgroup强制限制硬件资源,如CPU、内存、设备和网络。
容器和VM不同之处在于,VM模拟硬件系统,每个VM都可以在独立环境中运行OS。管理程序模拟CPU、内存、存储、网络资源等,这些硬件可由多个VM共享多次。
>云原生之容器安全实践-网络安全-黑吧安全网
容器攻击面(Container Attack Surface)
容器一共有7个攻击面:Linux Kernel、Namespace/Cgroups/Aufs、Seccomp-bpf、Libs、Language VM、User Code、Container(Docker) engine。
笔者以容器逃逸为风险模型,提炼出3个攻击面:
1. Linux内核漏洞
2. 容器自身
3. 不安全部署(配置)
一、Linux内核漏洞
容器的内核与宿主内核共享,使用Namespace与Cgroups这两项技术使容器内的资源与宿主机隔离,所以Linux内核产生的漏洞能导致容器逃逸。
内核提权VS容器逃逸——通用Linux内核提权方法论
信息收集
收集一切对写exploit有帮助的信息。如:内核版本,需要确定攻击的内核是什么版本?这个内核版本开启了哪些加固配置?还需知道在写 shellcode 的时候会调用哪些内核函数?这时候就需要查询内核符号表,得到函数地址。还可从内核中得到一些对编写利用有帮助的地址信息、结构信息等等。
触发阶段
触发相关漏洞,控制RIP,劫持内核代码路径,简而言之获取在内核中任意执行代码的能力。
布置shellcode
在编写内核exploit代码的时候需要找到一块内存来存放我们的shellcode 。这块内存至少得满足两个条件:
第一:在触发漏洞的时候我们要劫持的代码路径,必须保证代码路径可以到达存放shellcode的内存。
第二:这块内存是可以被执行的,换句话说,存放 shellcode 的这块内存具有可执行权限。
执行阶段
第一:获取高于当前用户的权限,一般我们都是直接获取root 权限,毕竟它是 Linux 中最高权限,也就是执行我们的shellcode。
第二:保证内核稳定,不能因为我们需要提权而破坏原来内核的代码路径、内核结构、内核数据等等,使内核崩溃了,这样的话,即使得到 root 权限也没什么太大的意义。
简而言之,收集对编写exploit有帮助的信息,然后触发漏洞去执行特权代码,达到提权的效果。

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。

上一篇:新型攻击方法SurferingAttack以超声波入侵手机返回黑吧安全网首页】【进入黑吧技术论坛
下一篇:Qakbot恶意行为检测


Notice: Undefined variable: canUpdate in /var/www/html/wordpress/wp-content/plugins/wp-autopost-pro/wp-autopost-function.php on line 51