本文整理自2020北京网络安全大会(BCS)企业安全运营实践论坛上公众号「 安全小飞侠 」作者王任飞(avfisher)的发言。
大家好,我是安全小飞侠王任飞,很高兴参加此次企业安全运营实践论坛,感谢君哥邀请,分享题目是《以攻促防之攻击者视角下的防御思考》。
首先做一个简短的自我介绍,我叫王任飞,ID叫avfisher,运营一个公众号叫【安全小飞侠】,专门分享我个人对安全建设的相关思考与经验。这些年一直专注于红蓝对抗、漏洞研究、安全架构与云安全等相关领域,之前是在一家国际TOP3的互联网公司里负责中国区的Blue&Red Team,现在在一家公有云厂商负责蓝军团队的建设。
我的个人公众号平时可能会分享一些我自己关于安全建设的看法,如果大家有兴趣,可以加一加。我们可以借助公众号的渠道,做一些交流。不管是关于今天这个议题,或者之后有什么疑问,都欢迎大家通过这个公众号跟我联系,我们可以做一些碰撞和交流。接下来进入今天的主题:
今天这个议题的名字叫以攻促防,站在攻击者的视角去看防御的思考。那么我认为现在的企业安全建设经常会遇到一个问题,时常被老板问,你这个安全到底做得怎么样啊?你说你安全做得很好,为什么我们还会被攻破了呢?等等这一类的问题,都困扰企业安全的从业人员。我今天这个议题试图从点、线、面、体的四个角度,然后从攻击者的视角,从这四个维度,逐层递进式地去剖析一下,怎么通过攻击者视角,去促使我们做一个正向的安全建设。
点
那么针对于攻防当中的这些点,着重在于攻击技术知识点的知识库建设。
大家都知道MITRE ATT&CK就是一个非常典型的框架。通过梳理攻击链条里的各个攻击阶段中的各个技术点,然后来给防守团队提供检测思维。对于攻击团队来讲也是一样,在整个攻击的研究过程当中,就是在不断地发掘各个阶段攻击链条里面的各个技术点,然后再把这样的技术点串起来,最终进行攻击实战。
如果想要去梳理攻击中的点,一定要借助一个比较完善的,相对来说比较全面的一个攻击框架,ATT&CK就是一个非常典型的框架,可以给我们提供相应的思考,然后能够带动我们从攻击者的视角去思考,攻击者在一个攻击当中,他会怎么去思考这个问题,他会怎么去把一个完整的攻击链条做点化的突破,最后形成攻击场景的达成。所以这个图里列举了一些当前ATT&CK收集的比较流行的,以及在各大APT组织里面使用过的这些攻击技术点。我觉得这是一个非常宝贵的财富,不论是防守团队还是攻击方,都是一个必须要学习,必须要深入的这么一个攻击技术点的知识库。
我个人在蓝军建设中非常注重对于体系化攻击知识库的建设,所以从防御者的视角看,这种攻击技术到底是怎么去防御和检测。同样从攻击者视角看,你要去剖析每一种攻击技术的实现方式。在下面的截图里会显示几个针对不同的攻击技术点有哪些实现方式:
这里面只是站在一个攻击者的视角去剖析它,不同的攻击点里可能涵盖的信息会非常多,这里面怎么去做就交给我们攻击团队在平时的工作当中不断积累、研究、归纳、总结,然后再用知识点技术库来指导我们平时在哪个地方发力,在哪个地方做深入的研究。
那除了ATT&CK,还有另外一个非常著名的框架就叫NTCTF,是NASA和CSS他们推出的一个技术的网络威胁框架。
这个框架跟ATT&CK比较类似,但是它可能更加的详细。它以生杀链的方式去排列组合。这种框架它的核心思想是什么?可以从图中看到,不管是ATT&CK也好,NTCTF也好,其实都是站在攻击者的视角,把一个整条链的攻击化整为零,分解成一个个可观测、可检测、可复用的一个个攻击点,然后在这个攻击点上做详细的介绍。
我抽取了在engagement这个阶段的时候利用的方式:
可以看到里面有列举一系列攻击的利用点,比如:滥用协议,访问虚拟内存、进行社工、利用操作系统的漏洞、实行0day攻击,利用一些已利用的包,利用信任关系。可以看到,这里面所列举的一些东西,在ATT&CK里面也有涵盖。
我们在设计自己公司的攻击知识库的时候,不要太局限于业界已有的东西。可以借助它的思想,根据自己公司的业务形态和自己面对这个攻击的威胁点,去做属于你自己公司的ATT&CK框架,然后以这样的一个框架去指导你来对攻击过程当中这些具体的技术点做积累。
大家看到这个表里会写得很详细,有不同的阶段,在不同阶段有不同的目标,为了满足不同的目标有不同的行动,按照这个行动会有一些关键的举措、关键的措施,以及到底怎么去实现它。如果大家有兴趣,回头可以在公众号上给我留言,我把这个资料发给大家。
这里并不是说只有这两种框架或者只有这两个知识库的模型,实际上是说不管怎么做,实现一个核心的底层思想就是你要尝试着从攻击者的视角,防守里面的各个层面,攻击中的各个环节,化整为零,这是它的一个最核心的思想。
从攻击点的梳理可以引申到防御的思考,攻击者的思考可以让我明确方向,让我们知道在什么阶段什么攻击行为会采用什么样的攻击技术。站在防御者的角度来看,就是把这种攻击者思维和攻击行为化整为零。通常一个攻击是一段时间内一个持续的过程,但是我们怎么去检测这个持续过程,可以通过对技术点的分析,将整个的攻击链条化整为零,然后在每一个攻击点的地方做纵深检测、做卡点。因为我们没有办法在一个攻击当中检测到所有的攻击行为,但由于可以把整个攻击链条化整为零,那其实通过检测单点就能够提高纵深,把纵深拉大之后就可以通过这种方式去提高检测的可能性和覆盖率。
攻击者可能在某些环节上可以绕过检测,但他无法保证能在所有环节都绕过检测。所以我们一旦能够按照他的思路把他的行为进行分解之后,就算在第一阶段没有检测到,但可以通过在其他阶段的检测来相互印证,最终确定这个攻击行为。所以实际上这种去梳理攻击点的方式,我个人认为会大幅提升检测的覆盖度和可能性。
但同时它也引申出了一个劣势:由于整个攻击行为被拆分成若干个攻击点,点和点之间的关联关系就没有被体现出来。如果单纯只是检测单个的攻击点,那么一定会造成误报率的上升。举个例子:有效账号,这是一个非常常见的攻击点,我们去检测账号有没有被滥用,但是很多时候如果只是单纯依据账号的登录行为,你是没有办法直接判断这是不是一个攻击者的行为,需要有上下游的关联才能做出最终的决策。所以说攻击线的梳理能够帮助我们去提高覆盖率,但是他也引来了另外一个问题:如果单纯地去防守这个攻击点或者去针对攻击点做检测,会造成误报率的明显提升,很多真实的攻击可能就隐藏在里面,但是因为误报太高而没有办法处理。
所以这就引申到下一个问题,点虽然很好,但点也有缺点,怎么去把这个缺点识别出来,我认为这就涉及到攻防对抗中的线的问题,也就是实战中攻击路径的发现。
线
前面讲到,在做防守检测的时候不能单纯只检测点,而是要检测每个点之间的上下逻辑关系,通过这种逻辑关系去梳理出到底是正常行为还是攻击行为。
所以在这一章节里我主要说一些我个人在团队实战的过程中发现的方式和经验。总结出共有三种:情报驱动型,漏洞研究型,攻击模拟型。
前两种方式都是为了去发现未知的攻击路径,最后一种是去验证已经存在的攻击路径,所以这三种其实是在不同的角度去尝试寻找针对于不同企业的攻击路径。我会在后面逐个给大家解释不同的路径发现方式,以及它们的区别。
一、情报驱动型。
情报驱动型是指基于对一个企业的漏洞、资产、TTPs等情报的收集,来判断初始入口。做攻防的时候,首先就要找到达到攻击目标的入口。所以以情报来驱动去寻找入口,一旦拿到入口之后,就可以结合在第一部分所说的攻击知识库去寻找不同层的攻击路径,然后逐层深入,通过实战发现,最后达到一个攻击目标。在这个过程当中,其实是在不断地梳理从初始入口到攻击目标的路径,通常我们是没有办法知道它预示有哪些已知的攻击,只有在实践中去不断地检测,这是一个非常典型的挖掘攻击路径的方式。
二、漏洞研究型
漏洞研究型是指通过对目标的深入研究,包括但不限于系统漏洞、业务逻辑层漏洞来分析寻找突破口。然后再沿着突破口去深入地发现潜在的攻击路径。所以大家可以看到,第一种情报驱动型方式,入口是不知道的,是要在情报收集和关联之后,才能发现入口,再以入口往下游去寻找路径。而在漏洞研究型里入口是确定的,但要对入口进行深入研究,通过漏洞的形式,通过业务逻辑的形式挖掘出它的潜在利用方式。然后以此为突破口,再往下游寻找,能到达攻击目标的种种中间攻击路径,所以这个是一个主动研究的方式。漏洞研究型跟情报驱动型最大的区别就是,一个是入口位置需要情报驱动去寻找,一个是入口已知需要主动去研究和发掘。
三、攻击模拟型。
通常是指根据已切入的APT组织的TTPs规划可行的攻击路径并实战验证。什么意思呢?就是说其实我们的APT报告,包括安全厂商,公有云厂商,他们会根据在现实生活中,他们的客户和他们自身所面对的各种APT组织的攻击,把这些TTPs通过情报联盟的方式往外分享。处于情报接收者的这一方,并不清楚当前这种在别人的地方验证已经实施攻击的行为,在自己这个企业或这个业务里面有没有受到攻击,要对他已经收到的TTPs,已经被识别出来的攻击路径做一个还原。然后通过这种还原来发掘,某个企业或者某个业务对于特定的这个攻击路径的检测能力是什么样子。可以看到,攻击模拟型它的初始入口和攻击路径都是确定的,它是对一个已知攻击路径来做验证性的操作,这也是一种发掘攻击路径的方法。
我们记住这三种攻击路径的方法,再结合之前说的攻击技术点——怎么通过攻击技术点的防御来降低它的误报率——那攻击技术线、攻击路径的探索就解决了这个问题。攻防中这种在对攻击路径进行识别的过程当中,对于防御方至少有以下三点好处:
一、收敛攻击风险。
我们已经收集到了一个很完整的这个攻击技术库,现在把这些分散的攻击技术点用不同的方式连点成线,以这样组合的方式不断地验证,不断地去在实践中校验,尝试去发现更多已知的、未知的攻击路径。只有不断地去发掘潜在的攻击路径,才能够更大程度帮助企业收敛攻击风险,因为外部的攻击者他也是这种思路。我收集到哪些信息,我有哪些攻击技术,我可以怎么到达我的攻击目标,这是一种穷举的方式。我们试验的或验证过的攻击路径越多,收敛的速度就越快,那你就能够抢先一步发觉风险,然后找出应对方法。
二、提高检测效率。
关注单个攻击技术点会导致高误报率,那怎样去帮助单个技术点之间建立上下文关系?怎么知道某一个技术点的发生就是一个威胁,或者说它就是一个真正的入侵信号?所以我们通过实战化的攻击路径场景去验证它,然后通过这种场景来帮助防守方知道不同的攻击点之间的关联关系。在防御一个点的时候,不是单纯防御那一个点,而是防御它的上下关联关系。这种对点的协同检测,可以有效的降低只去做单点检测的误报率。
三、确定防御重点。
通常在企业里有很多防御问题、很多安全问题,我们的资源又有限,那怎么在资源有限的情况下来实现投入产出比最大,然后确定防御的重点和优先级?就可以通过攻击路径识别的方式去识别出当前最TOP的攻击路径是什么,然后集中优势资源去解决它,这在很大程度上就解决了企业当前面临的最大的威胁。
面与体
谈完点和线,接下来谈谈怎么通过攻击点和线的结合,推导出攻防中的“面”和“体”。
这里的“面”主要是指以点和线推出来的共性问题,可以理解为是一个威胁面的识别。识别出威胁面,我们才能以这个面的方式去促进我整个防御体系的改进,这个就是攻防的“体”。
所以在这部分主要是解释共性问题的识别。
这其实在外面现在很少提及,但从个人经验上讲,有这样一个方法论:我们每次做红蓝对抗也好,或者是去分析真实的攻击者的攻击路径也好,都可以还原攻击路径,还原之后,可以对这个攻击路径进行TTPs的映射。根据这个映射,在识别单个点的时候,再根据这个单点去发掘它,为什么产生这个单点中间的连带的安全问题。通过对这个问题点的梳理、归纳、统计,最后我们能够很轻松地识别出一些面上的共性问题。有了这个共性问题,就可以为后面防御体系的建设打下基础,就知道威胁面到底在什么地方,到底你的优势资源应该拿去解决什么问题,所以我认为这是一个比较重要的识别共性问题的方法论。
我想以一个例子给大家解释一下,怎么通过面的方式来促进体的改进。
大家在这张图上可以看到,以一个企业里常见的黑客攻击的攻击路径来解释。攻击者突破了防火墙,他的攻击路径是攻破Web应用,通过Web应用进入内网服务器,在服务器上通过信息搜集找到一个本地文件,从本地文件里破解出内部员工的vpn账号,然后利用vpn账号进入生产网,在生产网利用获取到的凭证登陆到堡垒机,再利用堡垒机进入生产网的生产服务器,最后盗出生产服务器上的生产数据。这是一个非常典型的攻击路径,那么从这个攻击路径怎么去分析呢?
参照刚说的——拿到攻击路径之后分析对应的攻击技术点的映射,一个很好的例子就是可以对它进行ATT&CK映射。可以从不同的阶段,从初始访问,从持久化、从特权提升、访问绕过,凭据访问、信息发现和汇总等等,把他在这个攻击路径里面使用的技术点,按照技术攻击库映射出来。映射出来有什么好处?可以对照这个点去分析安全的问题点。我们从攻击者的角度去思考,为什么这个技术点能够成功,他成功肯定是因为你存在网络安全问题他才能成功,所以有了攻击技术点的还原,才能根据每个攻击技术点去找到我们自己的安全问题点。
看右上角部分,因为我们对攻击技术点的还原和映射所以找到了若干的安全问题点,再根据这个安全问题点去梳理、整理它的共性问题。怎么整理,比如说当我们把所有的安全问题点梳理出来之后,就可以对它的特征进行统计和分析。就图中来说,可能识别出的共性问题有三类,运维管理类、安全审计类、还有应用漏洞类。这里只是举个例子,实际上在实战场景下如果采用这种方法去分析,会识别出更多的潜在的共性问题。
识别出共性问题之后,这个共性问题就是接下来要进行防御体系改进的一种输入。
我们可以看到,比如说运维管理类的问题,结合上面的安全问题点可以发现,服务器存在弱口令,服务器使用相同账号,有未授权访问的配置等等。这些都是什么原因造成的?我们去从共性面里面去考虑这个点的时候就能知道,原来是口令管理的问题,是密钥管理的问题。那我们是不是要从体系建设的时候要投入资源,建设统一的密钥管理系统?我们发现它总是存在这种不同的中间件的未授权访问配置的问题,那是不是需要统一我们的基础设施?我们在给研发团队运维团队去使用的时候,能不能给他提供一个不需要他想太多,拿来就可以直接用的这么一个技术架构服务?所以实际上从共性问题我们就识别出了安全体系上哪些方面要做加强,这就是一个很明确的思路。
同理,安全设计类,我们发现这个堡垒机没有二次登陆。为什么设计堡垒机的时候没有设置二次登陆?是不是这个堡垒机设计的时候就没有考虑到这个风险点?未来在优化堡垒机系统的时候,是不是要把这整套设计上的这个考核融入到整个DevSecOps的流程?如果从设计之初就把安全考虑进去,这个应用服务上线后就不会存在这样的问题,所以这也是促使我们去做整个DevSecOps流程的体系改进。
应用漏洞类的是不是表示我们在漏洞管理方面存在问题?为什么这些已知存在的漏洞没有被尽早地识别出来?当前的整个安全体系建设,是不是在漏洞管理流程当中存在缺陷?是不是要去做一些加强、在哪些地方需要做加强?我们就可以依赖上面问题点里去挑一些重点问题直接进行落地。所以按照这样的一个由路径到关键技术点,再到关键问题点到共性问题,最后促进体系建设,形成了一个一体的从攻击者视角剖析,最后再反哺给我们的这样一个正向的安全建设体系的改进。这是我个人在实践过程当中觉得比较好的一个方法论。
未来攻击趋势展望
现在不管是国际还是国内企业,都不断地要往IT化上走,往云化上走,很自然的云上的威胁就会越来越多,所以未来我们所面对的攻击者、攻击形态,不仅仅是传统内网形式的防御,可能更多的是面对跟云相关的威胁。我在这里做一些我个人的看法和预测,我认为云上的威胁无非有以下两种:
第一种:云租户会面临的威胁就是使用云所产生的威胁点,举个例子:
使用公有云服务,最多产生的问题可能就是没有把公有云服务用对,配置有问题,让黑客有可乘之机。我们常常可以在外面的数据泄露里可以看到服务的认证KEY的泄露,租户的云服务的不安全配置,比如说s3的桶没有做权限控制,那么这一块都会造成云上租户的安全受到影响。另外我们在云上部署的这些应用,本身会有各种各样的漏洞,这些漏洞也可能作为突破口,黑客可以利用这些云上漏洞再结合云的一些特性,比如说云的metadata特性,获取到更多的敏感信息,扩大攻击面。
第二种:针对云平台的攻击突破口。
我们知道大部分云厂商都提供责任共担模型。像第一种攻击方式造成的威胁肯定是云上租户自己去承担的,但是云自身的安全,理论上来讲是由这个云厂商去提供,但是作为企业上云,就不得不去审视这部分的威胁。这边列举几种:
1、云服务自身的代码系统存在漏洞,这是不可避免的,因为云也是人开发的,只要是开发就会存在这种问题。
2、云服务公开API会更多,所以很多在国外流行的攻击方式,不仅仅是利用漏洞去做攻防,而是利用云服务API的特性去攻防,举个例子:如果AKSK泄露了,那么这个云服务API的使用就有可能被影响。比如云服务也使用云服务区构建上层云服务,如果云服务自身的服务层认证凭据遭到泄露,那这个服务本身它利用的API就会对服务造成入侵,最后影响到整个云服务租户的安全,以及云服务平台自身的安全。
3、云服务使用很多第三方软件,第三方软件可能存在各种各样的漏洞,这些漏洞也会为云服务自身的威胁打开了缺口,让攻击者可以很容易地进来。
4、现在的很多云厂商都有公有云、私有云、混和云的业务,尤其像私有云和混合云,很有可能会使用和公有云一套的架构,那么这些架构在卖给客户的时候,可能是实现线上线下一体化的方式,但是如果是像卖盒子的方式存在的这些厂商,实现一体化,那么逆向盒子里面的代码,去挖掘这些私有API,也可能找到这个漏洞,借助这个漏洞再返回去影响公有云。这种在实际攻防对抗当中也是存在的,我们也是看到过的。
5、随着容器技术的推广和演进,使用微服务开发,使用无服务,服务网格……这些跟容器相关的技术会越来越多。那么对于容器本身的逃逸,比如说基于K8S的利用,基于docker本身的利用,基于VNC的利用,也会越来越多,实际上也会产生很重大的威胁。
6、云上要有虚机、虚拟化、逃逸漏洞的威胁是一定存在的。
7、云服务厂商也是一个企业,如果企业内部被入侵,也会威胁到整个云服务管理面的网络,最后也会造成很大威胁。
所以我认为在未来企业所面对的威胁形态和攻击形态,可能更多是在云上。随着云越来越流行,发展趋势越来越好,攻击者、黑客的眼睛也会逐渐往这上面移动,希望大家在优化的过程当中逐步去考虑这一类云上的威胁,对于企业自身业务和架构的影响。
这次分享就到这里,感谢大家。
声明:本文来自君哥的体历,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。