文章首发于:火仙地带社区(https://zone.huoxian.cn/)大家好,我是徐悦,今天分享的话题是cloudnativesecurity,cloudnativesecurity这个话题其实太大了。之前做的一些研究成果主要是在应用层,所以今天我们讨论的重点是围绕云原生应用安全展开。第一篇:云原生应用安全进展如何,未来将向何处延伸。第二篇:我们如何开始使用技术?2017年开始做一线云厂商,从事云安全产品和安全研究。之前在云原生领域的研究成果,从主机安全到web安全,再到容器安全,都可以在我的博客上找到。https://cdxy.me/about话题主要分为四个部分。第一部分:云安全现在发展到了什么阶段,我们作为安全从业者如何看待这件事,是否应该投入云安全研究?第二、三部分:分别从红队和蓝队的角度介绍云安全的技术发展。目前涉及到哪些技术栈?进行这些研究需要哪些能力?第四部分:云安全入坑建??议。第一部分,首先,什么是云安全?对于整个安全行业,或者对于我们每个技术人来说,我们是怎么看待云安全的?是不是应该把它作为我们工作的主要方向呢?这背后的基本逻辑是什么?首先,整个网络安全行业的驱动力是多方面的。其中,我认为最强和最长的驱动力是IT基础设施的发展。也就是说,安全必须随着基础设施的发展而发展。那么现在基础设施发展的趋势是什么?就是万物互联,我们之前说过,比如早期的边防到后来的纵深防御,现在我们发现所有的大型企业级应用基本上都可以看到很多云-边-端的互联互通,而云又分为私有云、公有云,包括云上的SaaS服务。我们现在看到一个企业级应用程序。其实它连接了很多基础设施和能力,比如公有云的IaaS层,私有云的IaaS层,VM或者容器等,这些基础设施包括云上的所有SaaS服务,包括企业应用可能跟终端有关,比如手机上的这些APP,智能汽车内置的APP,边缘计算,传统的企业IDS,企业内部办公,还有很多这样的对第三方合作伙伴或者开发者开放的PaaS平台。一些能力。在万物互联的背景下,边界的概念逐渐弱化,资产的攻击面越来越大。想要做好安全,其实还需要不断细化每一项安全能力。下沉到基础设施层。那么我们看到这里,在万物互联的IT基础设施发展下,云安全只是大势所趋的一部分。那么我们只讨论云安全这个话题。云安全目前存在哪些问题?这里我主要总结一下。这三点也是目前业界比较关注的几个方向,无论是创业市场还是安全研究领域。第一部分是IaaS层,是基础设施层的挑战。那么这部分一定意味着传统的VM正在向容器化和微服务方向发展。事实上,在业界,容器已经在各行各业得到了非常大规模的应用。在此基础上,我们发现安全性实际上是滞后的。这为攻击者创造了一段时间的研究空间,并为防御者提出了建议。一个新的挑战。第二部分是SaaS层。SaaS层以软件形式提供功能。SaaS应用程序分为两种类型。一种是面向人的,即后端使用API??,前端配备UI界面。终于到货了另一个用于机器。比如我今天开发一个app,可能需要集成很多地图功能或者其他功能。那么传统上,我可能需要购买并整合它们。今天,我只需要在云端调整这些功能。API,你可以通过支付来集成这个能力。SaaS面临的主要挑战是越来越多的企业能力以API的形式开放交付,这就涉及到API的安全保护。第三块是分布式安全协同的问题,即企业基础设施大规模分布之后,我们如何保证网络侧的统一性,接入的有效性和效率,所有的安全策略,以及协同不同基础设施下的安全运维。主要来说,目前我们看到的趋势,以及目前比较热门的研究领域,基本都在这里了。从红队的角度来看,红队目前的研究现状如何?我们发现红队对容器化的讨论会多一点。从2020年开始,微软首先发布了一个kubernetesATT&CK,其实就是解释了新的IT基础设施架构,特别是kubernetes和容器架构,以及传统的VM。有哪些不同的攻击方式?从那以后,我们看到一大批云厂商、安全厂商、企业方开始投入云原生安全研究,包括很多大公司都建立了专门的云原生红队。上图是2020年,我做云厂商的时候,对所有的攻击做了比较详细的描述,增加了一些针对云平台的攻击手段。而云顶在2021年提出的云安全攻防矩阵在此基础上再次丰富。在这里面,我们其实可以看出它已经区分了整个云基础设施,包括云服务器。攻击方式,即传统的Linux或Windows服务器;然后是容器,比如docker和kubernetes,还有一些容器镜像仓库,还有其他中间件和基础设施的攻击方式;和云服务在这方面,例如,我们现在看到更频繁地受到攻击的云存储。可能经常会出现这种权限问题,还有一些数据泄露的问题,包括一些云平台本身的账号泄露,或者是云平台的API被入侵等等。那么我觉得如果你上手云安全,从一个攻击者,看到了所有这些工具和技术,了解了其中的所有攻击模式,就可以在云安全中攻击应用层和基础设施层的安全攻击方法。有了宏观的认识,我们大概就能知道我们讨论的云安全有哪些技术。这是从红队的角度来看的。那我们就详细说说,云安全带来了哪些新的攻击面?主要就是我们右边提到的三块。第一块是新的基础设施,比如k8s或者serverlessfunction,还有我们现在说的mesh架构,它的一些基础设施存在漏洞,在它上面增长的一些应用程序存在漏洞。那么第二块就是云平台本身。至于云平台,其实历史上我们已经看到了很多问题。其实大部分都是因为这个证书泄露,然后通过一些渠道,比如云助手,一些API。,操纵由该云账号或云资产引起的一些安全问题。然后第三块是云服务的一些API,比如云存储、云计算、云认证,还有很多其他的第三方能力输出。这是我之前说过的。一方面是API加UI。另一方面是直接的API攻击,危害很大。这种云存储导致企业数据泄露的案例我们已经见多了。这些用于这些类型的攻击面更改的工具,我在上面列出,在这个小字中,这是github上的一些开源项目。如果是入门,可以参考一下他们??涵盖了哪些攻击点,以及如何实现攻击。逻辑。说到云安全最重要的场景,就不得不说到容器。我左边的照片显示了部分袭击现场。主要包括攻击者对容器基础设施、基于SaaS的云应用、云服务基础设施的攻击路径。这里我们可以稍微了解一下,入口点、提权逻辑、持久化逻辑、数据窃取逻辑可能与传统的Linux或Windows攻击路径不同,这意味着这两年我们看到了更多越来越多的红队开始将这一领域的研究武器化。接下来我们要做这个云原生,再深入一点,我们要实现IaaS层的安全。其实是一个比较难的题目。其实我在做安全这块的时候,我们也和其他一些容器安全相关的厂商进行过交流。这个研究之所以有一定的门槛,是因为它其实是各种技术能力。融合。比如你要先了解linux,然后你要了解虚拟化,比如docker或者k8s的架构和原理,当然要有攻守兼备的思维。这是三种能力的组合,允许您进行漏洞挖掘或构建一些安全解决方案。让我们以一个旧漏洞为例。这个漏洞其实是一个公开的东西,包括Exp。你为什么要提这个?其实就是让大家体验一下我们在攻击和复现这个漏洞的时候会涉及到多少方面的知识。首先,左边的部分是官方的漏洞描述。当我们看到这些名词的时候,首先,这些名词是否理解,这个containerd,然后这个shim,runc,unixsocket,包括这背后的一些通信协议,我们有这个吗?基础知识,你能不能做到这一点,包括下面的Exp怎么写。所有这些概念其实都是要研究和积累的,然后在此基础上,我们可以对这个IaaS层的漏洞做一些分析工作。原则上,首先,它会分成几层。比如首先从k8s层开始,使用containerd来管理容器,再抽象出另外一层。capability的接口作为shim,然后整个虚线框起来的东西其实就是各个容器,处理Linux系统中存在的一个进程之间的关系。其实容器逃逸本质上是Linux隔离的问题。这是一个低权限进程。怎样才能成为高权限进程。那么首先你得能够非常清楚的了解Linux这个维度,Linux的一些权限隔离机制,比如Linux的Namespaces和Capabilities是如何实现的,然后你才能明白一个利用这个漏洞的原理。在写Exp的过程中,还需要对containerd,或者整个k8s,docker,从细节到源码层面都有一个了解。比如这个漏洞挖掘者提出的一个Exp的思路是当通过shim的高权限进程共享网络空间时,可以直接通过一个低权限进程来操作高权限进程,进而控制它启动一个容器。在启动另一个容器的过程中,我们赋予它更高的权限,然后通过容器在内部操作宿主机的资源,最终得到宿主机的shell。这个过程其实就是一个很一般的容器逃逸过程。但是如果你做过OCI研发,或者看过这篇文档,其实可以提出更方便的方法,比如左下角的图片。其实OCI提供了很多hooks,只是在容器启动的时候。在这个过程中,这个钩子中有一个prestart,可以直接反弹shell。在启动容器的过程中,即使容器不需要实际运行,直接执行bash命令即可。这个Exp也包含在CDK右边的链接里。有兴趣或者有一定积累的同学可以研究一下,大概能明白IaaS层的漏洞研究和挖掘需要??什么样的积累。这是一个例子。.然后,对于入口路径,如果我们挖一个洞,我们可以从这个区域开始。我不建议大家在挖坑的时候去挑战特别难的目标。比如我要创建一个k8s的RCE,我们去CNCF的风景图中,可以看到整个云原生的生态,催生了很多的应用和中间件。其实我还是建议,如果是入门的话,我们应该先挑一些自己跳可以达到的目标,一步一步,从简单到难的去实现这个研究。其实挖坑有个思路我觉得比较好,就是多组件安全的设计不一致。这个想法其实在Orange之前的几次blackhat演讲中都有体现,也就是说,我提取单个组件没有问题,但是多个组件针对的是一个协议,一个规范,在实现上存在不一致的地方。然后再想想整个申请过程。事实上,当多个组件放在一起时,这些不一致可能会成为漏洞的原因。这是一个有趣的案例,我也在下面链接了它。我们做红队或者漏洞的研究,本质上是一个积累的过程。如果我们把整个云原生生态,包括组件,特别详细的研究一下,其实里面漏洞很多。如果直接挖出Linux和Windows的漏洞,这个领域还是一片蓝海。上面是红队的部分,然后是蓝队的部分。也就是企业站在防御者的角度考虑如何为云原生部分构建安全体系。首先,蓝队首先要注意的是安全责任区发生了变化。然后我们可以看到现在的基础设施,从左边传统的虚拟机直接运行APP,再到现在的虚拟机容器APP,未来容器已经是按需的,包括serverless,这些底层的东西都有了已经被云厂商或者云服务提供商默认安全了,也就是图中的灰色部分。图中浅蓝色部分其实是云厂商和云计算企业共同承担的责任区,深蓝色部分是企业主要负责建设的安全责任区。其实我们看到随着未来的不断发展,越是面向服务的IaaS基础设施,企业需要在里面解决的安全问题越来越少,那为什么说云其实更安全呢?一定程度上?是的,这是事实。并且就目前的情况来看,我们已经看到一些针对使用大量应用上云的企业的攻击有明显的趋势。目前,针对云平台和容器基础设施的攻击已经非常广泛。这不是一个新话题,但是现在公网上所有的蠕虫和僵尸网络都默认集成了一些关于容器和K8S的攻击手段。如果说一些比较低级的漏洞,说不定你开车上网,瞬间就被黑了。第二部分就是我刚才提到的趋势。默认情况下,基础架构层将由云供应商保护。在此基础上,业务层的事情就是企业需要解决的问题。比如,与人亲近的东西,其实是一个永远不会死的安全话题,包括人员行为控制、身份验证、凭证泄露等带来的一些问题。安全问题。另一方面,应用安全不会消失,包括所有运行在云基础架构上的企业应用代码,所有应用层和业务层的安全,它和以前一样,会一直存在,比如web领域,包括这个应用中间件,应用组件漏洞,还有一些供应链风险,这个一直存在。那么,在云平台厂商默认的安全策略下,刚才说的三个方向其实是企业需要关注的一个重点。比如现在我们看到容器安全、k8s安全、API安全、分布式安全协同。分布式安全协作这个词是我创造的,包括XDR、CSPM、SASE,或者我们现在看到的零信任,其实本质上是解决了大规模分布式架构下的安全协作问题。另一方面,我们一些在甲方或企业方做蓝队的同学可能会遇到一些技术以外的挑战。比如安全部门在做一些基础设施建设,一些安全策略。有时,可能会与业务方发生冲突,或者我们没有获得足够的预算和足够的资源来实现安全级别的整体提升。那么我们这里考虑一个更深层次的问题。甲方在做这个安全建设的时候,肯定会遇到资源问题。资源问题的背后其实是安全团队的定位问题。也就是说,我们在做安全建设的时候,总是引用一句老话,“出了事有什么用,不出事有什么用”。其实这个本质的背后是一个定位的问题。如果能够将安全与业务的对立关系转变为合作关系,也就是说,我们可以将安全部门的定位从保障业务转变为赋能业务。.其实可以给安全部门带来更多的资源,或者安全研究,可以保证更多的技术生。他有很好的环境去研究云安全??或者一些新兴的安全技术。其实对于甲方的一线从业者,我建议大家跳出安全攻防思维模式,多接触业务,实现安全部门定位的转变从保障到业务赋能。从防御的角度来说,其实业界已经有很多成熟的产品可以实现现在的基础设施部署,比如传统的南北防火墙,包括镜像扫描,各种Node级别,也就是VM级别的EDR也可以适配容器环境下的一些入侵场景,比如进程、网络、文件运行时的一些监控,包括整个k8s应用日志的审计,以及云SaaS服务的一些配置检查,多云安全协同管控,以及一些API审计。在这些方面,在蓝队看来,其实一些龙头厂商已经开始行动起来,开始完成新基建的安全建设。另外提一下,除了蓝队的攻防思维,建议大家学习一下数据分析。因为目前企业防御的一些困境,也就是一个大家都知道的现状,就是资产永远不明朗,漏洞永远无法修复,安全设备越来越多。可能在一台服务器中,已经部署了四五个代理,可能一台交换机上接了十个八个网络流量分析设备,运营成本越来越高。从企业的投入产出比来看,其实安全从业者或者说甲方蓝军现在更需要思考的是如何以流程化、数据化、智能化的方式构建安全,让系统以降低运营成本。数据驱动安全的逻辑在我之前的分享中已经提到过无数次,包括一些网上流行的安全新概念和新产品方向。其实从数据的角度来说,不同的日志怎么收集,怎么关联分析,最后会产生什么样的价值。按照这个逻辑,也可以梳理出所有安全产品和解决方案的发展路线。第四部分是云安全入门的建议。作为技术人员,更应该关注技术的成长。我一般把技术人员的成长分为两条路线。一种是纯研究型路线,一种是与企业安全建设相关的业务路线。我个人走的是商务路线,今天重点介绍这条路线。这张图是之前从投资人那里看到的,又改了一遍。基本上我身边看到很多有安全技术背景的人,他的发展路径是这样的。首先,在我们上学的时候,或者学安全的时候,攻击是一件很花哨的事情。一开始,我们弄了一个别人写的Exp,撞倒了一些站。后来,我们可以自己写Exp,直到可以自己挖坑了。做攻击,不断突破限制其实是一件很酷的事情,也是很多人喜欢做安全技术的一个原因。所以我们再往上一层,如果要做一个整体的安全解决方案,或者我们要做甲方的安全建设,不仅要有攻击的心态,还要对公司的IT有一个全面的了解架构和业务。因为不同的场景使用不同的基础设施,包括在几个云中,每个供应商的容器化和虚拟化的架构是不同的。那么如何结合自身的业务需求,如何结合公司现有的IT架构,进行整体规划,投资相对少但效果更好,进而持续推动安全水平的提升,这是防御角度需要具备的能力,技能。未来就是如何通过复用把我们的技术能力转化为更多的价值,让我们付出时间的一部分,让这个时间可以被复制。这部分涉及产品化。如果我们要从安全的角度去创业,或者说要完成企业内部构建的能力的商业化,其实我们需要有市场化、企业化的思维。今天主要针对攻防两点列出几个入门建议,也是我一路上学到的几个原则。第一个就是多看官方文档,少看中文资料,少看CSDN。这是肯定的,因为我发现看二手资料确实可以运行这个东西,但是你摸不着它背后优雅的设计逻辑。即使是在文档上,也是与代码无关的文档表达。其实国内和国外还是有很大区别的,所以建议有能力的同学尽量阅读官方原版文档。第二点,很多同学上手的时候可能先拿别人的Exp跑一跑,或者别人的扫描仪挖坑扫描SRC。但是如果以后想要长期发展,还是需要有很深的研究。这块的建议是看项目的源码。像之前在容器研究上,我大概也放了这些像containerd,k8s,包括一些docker的OCI之类的我在做这方面的研究和漏洞复现之前看过源码的东西,还有一些Exp的工作。如果我们积累了一定的源码阅读量,其实对它自己的一些设计模式也会有所了解,那么有一天,你突然灵机一动,然后脑子里其实就有了一个数据库,或者a从决策树上就会知道这个攻击场景属于哪些安全设计理念或设计模式,必然存在冲突,这就是产生漏洞的原因。第三点就是看别人挖空子。在复现漏洞的同时,你得想得更深一点。简单理解这个漏洞,然后感叹,哇,他的脑洞真大,但这其实没什么用。看过太多的漏洞后,你会发现每一个优秀的漏洞研究者都有一些固定的挖洞模式。看到漏洞原理后,可以再深入问问他为什么能发现这个漏洞。这个问题问多了,或许我们可以抽象出一些很基础的挖洞模式,然后把这个模式批量复用到自己脑海中积累的场景中,就可以批量生成类似的漏洞。最后一点,业余时间研究它永远不如直接从事这项工作,信息量更大,视野更大。所以对于新手来说,最好在工作中找一个实际的战场,就是把兴趣和工作结合起来,在高强度、高效率的环境中不断磨练自己。这四点是云安全领域的技术入门建议,或者是漏洞挖掘领域的技术介绍。由于时间有限,今天一般只做一个总结表达。未来关于整个云安全,包括应用安全,或者职业发展,也欢迎大家深入交流。
