更多云原生相关资讯可关注。
导读:随着云计算边界不断向边缘侧延展,传统 RunC 容器已无法满足用户对不可信、异构工作负载的运行安全诉求,边缘 Serverless、边缘服务网格等更是对容器安全隔离提出了严苛的要求。本文将介绍边缘计算场景如何构建安全运行时技术基座,以及安全容器在架构、网络、监控、日志、存储、以及 K8s API 兼容等方面的遇到的困难挑战和最佳实践。
本文主要分为四个部分,首先前两个部分会分别介绍一下ACK安全沙箱容器和边缘容器(Edge Kubernetes),这两个方向内容目前大部分人接触并不是很多。第三部着重分享安全沙箱容器在边缘这边的解决方案与实践经验,最后会介绍一下我们在安全容器方向新的探索和实践-可信/机密计算。
据 Gartner 预测,2019 年一半以上的企业会在其开发和生产环境中使用容器部署应用,容器技术日趋成熟稳定,然而在未容器化的企业或用户中,42% 以上的受访者表示容器安全成为其容器化的最大障碍之一,主要包括容器运行时安全、镜像安全和数据安全加密等。
在讲安全沙箱容器之前简单介绍下端到端云原生安全架构,主要分为三部分:
基础架构安全依赖于云厂商或者是专有云一些基础设施安全能力,也包括 RAM认证,细粒度RAM授权,支持审计能力等等。
2.安全软件供应链**
这部分包括镜像签名,镜像扫描,安全合规等等,甚至包括有一些静态加密BYOK,DevSecOps,安全分发等。
这部分包括安全沙箱隔离,还包括了容器运行时其它方面一些安全机制,如KMS(秘钥管理服务)集成、多租户的管理和隔离等等。
接下来分享下业界在安全容器运行时的一些方案对比,业界安全容器运行时分为四大类:
总会有漏洞,我们需要去面对这些现实问题,既然无法杜绝那我们需要就给它(应用)加上隔离层(沙箱)。
用户选择安全容器运行时需要考虑三方面:安全隔离、通用性以及资源效率。
其实目前没有任何一种容器运行时技术可以同时满足以上三点,而我们需要做的就是根据具体的场景和业务需求合理选择适合自己的容器运行时。
在「资源效率」和「通用性」做的比较好的是传统的OS容器、runC等,但安全性最差;在「资源效率」和「安全隔离」做的比较好的是 UniKernel、gVisor 等,但应用兼容和通用性较差;在「安全隔离」和「通用性」方面做的比较的是 Kata-containers、Firecracker等,但 overhead 开销稍大启动速度稍慢,应用性能也相对传统OS容器较差。
月份推出了安全沙箱容器运行时的支持,它是在原有Docker容器之外提供的一种全新的容器运行时选项,它可以让应用运行在一个轻量虚拟机沙箱环境中,拥有独立的内核,具备更好的安全隔离能力,特别适合于多租户间负载隔离、对不可信应用隔离等场景。它在提升安全性的同时,对性能影响非常小,并且具备与Docker容器一样的用户体验,如日志、监控、弹性等。
对于我们场景来说,「安全性」和「通用性」是无疑最重要的,当然性能和效率我们也做了大量的优化:
随着万物互联时代的到来,智慧城市、智能制造、智能交通、智能家居,5G时代、宽带提速、IPv6的不断普及,导致数百亿的设备接入网络,在网络边缘产生ZB级数据,传统云计算难以满足物联网时代大带宽、低时延、大连接的诉求,边缘云计算便应运而生。
边缘计算设施服务越来越难以满足边端日益膨胀的诉求,因而云上服务下沉,边缘 Serverless、边缘侧隔离不可信负载等日趋强烈...
所以,为了满足我们边缘云计算场景需求,我们 ACK 推出了 Kubernetes 边缘版。
先来看下典型的边缘云模型,它由云(侧)、边(侧)、端(侧)三部分共同组成,三者相互协同,并提供统一的交付、运维和管控标准。云侧统一管控,是整个模型的中枢大脑;边侧由一定计算/存储能力的节点组成,是距离设备和用户最近的计算/存储资源;亿万端侧设备就近计入“边缘节点”。
“边”又分为两大类;一个是工业级的边,这类比较典型代表是云厂商提供的 CDN 节点计算资源、服务或者 Serverless 等,工业级的边也可提供 AI 预测、实时计算、转码等服务能力,把云上的服务下沉到边侧。第二类是用户或者工厂、园区、楼宇、机场等自己提供计算资源服务器或者网关服务器,如一个家庭网关可以作为边缘节点接入到集群中从而可以纳管控制家庭中的智能电器设备。
那边缘 Serverless 如何解决多租户负载隔离?工程如何在自己的内网环境安全运行三方提供的应用服务和负载?这也就是我们在边缘侧引入安全沙箱容器的根本原因。
先看下整体解决方案,上面架构完全契合了“云-边-端”模型,我们整个架构是基于 Kubernetes 来开发的。
metrics-server、log-controller 等非核心功能组件;当然,“云侧”也会适配云上的各类服务为自己附能,如监控服务、日志服务、存储服务等等。
“边侧”,既边缘Node节点,我们知道“云侧”到“边侧”的弱网会导致边缘Node失联,失联时间过长会导致 Master 对节点上的 Pod 发出驱逐指令,还有断网期间“边缘节点”主机重启后应用如何恢复和自治,这些都是 Edge Kubernetes 面临的最大挑战之一;当在 K8s 引入安全沙箱容器运行时,会发现 K8s Api 不兼容、部分监控异常、日志无法正常采集、存储性能极差等诸多问题,都给我们带来了极大的挑战。
在分享解决以上问题前,我们先看下云侧安全沙箱容器方案。
上图橙色虚框内是节点运行时的组件分层结构,上面是 kubelet,CRI-Runtime 有 Docker 和 Containerd 两类,其中安全沙箱容器运行时方案(深蓝色背景部分)中我们选择了 Containerd 作为 CRI-Runtime,主要考虑到 Containerd 的结构简洁,调用链更短,资源开销更小,而且它具有及其灵活的多 Runtimes 支持,扩展能力也更优。
我们在一个“安全沙箱节点”上同时提供了 RunC 和 RunV 两种运行时的支持,同时在 K8s 集群中对应的注入了两个 RuntimeClass( runc 和 runv )以便轻松轻易按需调度和选择,“同时提供 RunC 支持” 也是考虑到诸如 kube-proxy 等 Addon 组件没必要运行在安全沙箱中。
OS 我们选择了阿里云的发行版 OS:Aliyun Linux,4.19+ 的 Kernel 对容器的兼容性更优、稳定性更好,同时我们对其进行了极少的定制,以便支持硬件虚拟化。
最下面运行就是我们的裸金属服务器,在云上我们提供了神龙,在边缘侧任何支持硬件虚拟化的裸金属服务器均可。
K8s 管控端与边缘节点断网维护,如工厂封网内部设备维护等,超过 Pod 容忍时间(默认300s)后会导致管控端发出“驱逐失联节点上所有 Pods”指令,在维护结束网络恢复后,边缘节点收到驱逐指令删除所有应用 Pod,这对于一个工厂来说是灾难性的。
在封(断)网期间边缘节点硬件重启,就会导致节点上依赖管控端(如 kube-apiserver)的部分组件或数据无法正常启动或载入。
主要原理是基于 kubelet checkpoint 机制把一些资源对象缓冲到本地文件,但 kubelet checkpoint 能力较弱,仅可以魂村 pod 等个别类型对象到本地文件,像常用的 ConfigMap/Secret/PV/PVC 等暂不支持。当然也可以定制修改 kubelet,但后期会带来的大量的升级和维护成本。
利用集群联邦,把整个 K8s 集群下沉到边缘侧,如每个 EdgeUnit 存在一个或多个 K8s 集群,通过云侧的 K8s Federation 进行多集群/负载管理。但因为 EdgeUnit 分散性且规模较大庞大,会导致集群规模数倍增加,产生大量的 Overhead 成本,很多 EdgeUnit 内通常仅有几台机器。而且这种架构也比较复杂,难以运维,同时,边缘K8s集群也很难复用云上成熟服务,如监控、日志等。
如上图,在我们的边缘治理方案中,我们增加了两个非常重要的组件:
上图为整个监控的原理图,流程是:
那如何补齐监控 API?由于我们有着庞大的存量集群,我们的改动既不能影响已有的用户监控,也不能对整个监控设施方案做大的改动,所以改动尽量在靠近底层的地方做适配和修改,我们最终决定定制 kubelet,这样整个监控基础设施不需要做任何变更。
下面是 kubelet 具体修改的原理图:
kubelet 的监控接口分为三大类:
2.default 类,较老的接口,无 Pod 语义,社区会逐渐废弃此类接口。
为了更好的兼容,我们对三类接口均进行了适配。上图红色部分为新增,黄色虚框部分为修改。
上图是我们的日志方案,我们需要通过阿里云日志采集 Agent Logtail 采集容器日志,主要有三种使用方式:
我们在containerd/安全沙箱容器遇到的问题:
2.通过 Container Spec 获取容器标准输出日志路径,由于如论 runC 还是 runV 容器的标准输出文件均在 Host 上,所以只要找到这个路径可以直接采集。
3.在 runC 的日志文件路径查找上,我们做了个优化:优先尝试查找 Upper Dir,否则查找 devicemapper 最佳匹配路径,由于 runV 有独立 kernel 无法在 Host 侧直采容器内日志文件。由于 runV 容器和 Host 内核不再共享,导致无法在 Host 上直接采集 runV 容器内的日志文件。
安全沙箱容器存储方案涉及到两方面,分别是 RootFS 和 Volume。
FlexVolume 和 CSI Plugin 在实现上,默认均会将云盘、NAS 等先挂载到本地目录,然后 mount bind 到容器内,这在 runC 容器上并没有任何问题,但在安全沙箱容器中,由于过 9PFS 所以依然严重影响性能。
针对上面的性能问题,我们做了几方面的优化:
在网络方案中,我们同样既需要考虑“云上”和“边缘”,也需要考虑到“通用性”和“性能”,在 K8s 中还需要考虑到网络方案对 “容器网络” 和 “Service 网络” 的兼容性。
如上图,我们的网络方案中虽然有三种方案。
桥接模式属于比较老的也比较成熟的一种网络方案,它的优点就是通用性比较好,架构非常稳定和成熟,缺点是性能较差,特点是每个 Pod 都需要分配 Veth Pair,其中一端在 Host 测,一端在容器内,这样所有容器内的进出流量都会通过 Veth Pair 回到 Host,无需修改即可同时完美兼容 K8s 的容器网络和 Service 网络。目前这种方案主要应用于云上的节点。
顾名思义,就是直接把网卡设备直通到容器内。在云上和边缘由于基础网络设施方案不通,在直通方面略有不同,但原理是相同的。
IPVlan 是我们下一代网络方案,整体性能高于 Bridge 桥接模式,建议内核版本 4.9+,缺点是对 K8s Service 网络支持较差,所以我们在内核、runtime 以及网络插件上做了大量的优化和修复。目前 IPVlan 网络模式已在灰度中,即将全域开放公测。
下图是各个方案网络性能对比:
从 Ping 时延、不同带宽、TCP_RR 和 UDP_RR 多个方面同时对比了这几种网络方案,Host作为基准。可以看出,直通网卡的性能可以做到接近host的性能,ipvlan和bridge与直通网卡方式有一定差距,但前两者通用性更好;总体来说 ipvlan 比 bridge 性能普遍更好。
另外,表中 Ping 时延的相对百分比较大,但实际上从数值差距来说只有零点零几毫秒差距。
注:以上为内部数据测试结果,仅供参考。
同时,由于很多新的运行时(如 安全沙箱)自身有 overhead,会占用一定的内存和CPU,所以 RuntimeClass API 上新增了 overhead 用于支持此类场景,这部分资源在 Pod 的调度上也会被 kube-scheduler 计算。
很多用户考虑到成本、运维、稳定性等因素去上云,但往往因为对公有云平台安全技术担忧以及信任,很多隐私数据、敏感数据对云“望而却步”;往往现有的安全技术可以帮我们解决存储加密、传输过程中的加密,但无法做到应用运行过程的加密,这些数据在内存中是明文的,入侵者或者云厂商有能力从内存窥探数据。就是在这种背景下,可信/机密计算应运而生,它是基于软硬件技术,为敏感应用/数据在内存中创建一块 Encalve(飞地),它是一块硬件加密的内存,任何其他的应用程序、OS、BIOS、其他硬件甚至云厂商均无法解密这部分内存数据。
在此背景下,我们联合了多个团队,在 ACK 上研发了基于 Intel SGX 硬件加密的 TEE 运行时,可让用户的应用的跑在一个更加安全、可信的运行时环境中,帮助更多的用户破除上云的安全障碍,我们也将在 2020年Q1进行公测。
“关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”
全球可信SSL证书价格对照表
SSL证书品类众多,很多用户都不太知道各个品牌的SSL证书之间究竟有什么区别,环度网信根据平时用户的关注点整理了如下对比。
SSL证书2018年5月市场占有率大致情况,仅供参考,数据来源netcraft:
证书颁发速度跟用户的配合程度有关系,以上时间是比较普遍的耗时,如果您急需SSL证书,可以联系环度网信进行加急处理。
在SSL证书界,不乏突发一些意外状况,例如浏览器不信任,系统问题、滥发证书、黑客攻击等。但大多数品牌都能及时出台相关策略来减少和避免用户的麻烦。
如果您对SSL证书的稳定性要求极高,我们推荐DigiCert 和 Entrust,这是两个几乎从未出现过任何问题的SSL证书品牌,详询环度网信。
每一款SSL证书都提供了对应的安全图标,申请了该品牌SSL证书的用户可以直接安装在对应的网站上,以提高网站的信任度。
在渗透测试的过程中进行信息收集是必不可少的一个流程,而信息收集中的对域名信息采集的详细程度也决定着渗透成功的与否。
常见的域名信息采集手段就有Whois信息查询、子域名枚举爆破、以及域名备案信息查询等等。
whois(读作“Who is”,非缩写)是用来查询域名的IP以及所有者等信息的传输协议。简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。通过whois来实现对域名信息的查询。
而渗透测试人员可以通过Whois信息中获取站点所有人的邮箱、联系方式、域名注册商等个人信息,进行结合社会工程学、撞库等攻击手段进行攻击。
在网上有很多第三方站点都存在Whois查询功能,利用这些工具可以简便快捷的帮助我们收集域名Whois信息。
这里还列举一些其他Whois信息查询的站点,方法与站长工具的类似,这里不一一进行概述。
在Kali 系统中自带了Whois命令行查询功能,可以打开命令终端窗口,输入以下命令进行查询:
如:查询,一般如果一个大站点,为了从功能上划分和便于管理,通常会创建不同的站点。
而这些站点可能为、 、,而这些域名我们称之为子域。这些域名和主站有着千丝万缕的关系,有的可能后台登录密码、数据库连接密码相同、有的可能都在一个服务器上,或者在同一个网段内。所以在渗透中子域也是我们不可忽略的捷径。
当主站挖掘不到漏洞后,可以利用工具查询网站的子域名,逐个分析每个子站存在的漏洞,对存在的漏洞进行利用。
在操作系统下,可以使用layer这款图形化界面工具进行子域名枚举爆破。
当指定一个域名以及端口后点击开始就会进行子域名枚举爆破,在返回的结果中可以清晰看到该域名存在的子域名及对应开放的端口、Web服务器等信息。
为了简便快捷,也可以使用在相关的网页工具进行子域名查询,如:
除此之外还存在各式各样的子域名爆破工具、接口等查询方式,但是使用的方法都大同小异。对于初学者,掌握上述两种查询方式即可。
通过查询网站备案信息获取企业/个人信息,进行一步进行利用(社会工程学)等,同时可以查验网站的可信度和实名度。
常用的域名备案查询网页接口:
在网页工具中输入需要查询的域名,点击查看分析后即可获取域名对应的备案信息(备案号、网站负责人、备案单位等)。
通过上述方法对目标站点进行域名信息采集可以获取到大量资产信息,从而扩大攻击面,增加渗透测试的成功率。虽然域名信息采集是一个非常漫长而鼓噪的过程,但是前期的域名信息采集对后面的渗透有着非常多的帮助。
安界贯彻人才培养理念,结合专业研发团队,打造课程内容体系,推进实训平台发展,通过一站式成长计划、推荐就业以及陪护指导的师带徒服务,为学员的继续学习和职业发展保驾护航,真正实现和完善网络安全精英的教练场平台;即使低学历也可实现职业发展中的第一个“弯道超车”!安界就是你唯一选择,
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:),我们将及时更正、删除,谢谢。