谈谈零信任的那些事
00
前言
不知从何时开始,安全圈开始出现了"造词"运动,几乎每年的RSAC大会和Gartner年度报告,都会出现一些大家看不懂的新概念和新名词,如OSS、CSPM、ZTNA、ZTE、SASE、XDR、SOAR、DevSecOps等等。同时当前也是一个抓住一个概念或一个技术结构,大家伙一拥而上,一起把它炒热炒烂的时代。仿佛在各种安全大会或者报告中,如果不带上这些名词,就会显得很low的样子。如前几年的APT、ATT&CK,到目前的零信任、SASE等等。概念或框架虽非常好,但是反复的热炒,使得大众对这些名词或者概念,多多少少开始产生了一些麻木感,甚至是厌倦或者反感。
一直想写一篇关于零信任的文章,当做自己的学习笔记,但是一直无从下手。一方面是自己能力实在不足,对零信任的理解也着实有限;另一方面,写些大热东西的文章,实在是需要很大的勇气。毕竟网络上关于零信任的文章也实在多如牛毛,虽然质量参差不齐,但也基本涵盖了零信任的种种,我也很难再写出一些不一样的东西或者理解。
恰逢近段时间来,勒索病毒横行,包括美国当地最大燃油管道运营商Colonial Pipeline、爱尔兰医疗系统、国内某房企、全球最大的肉类包装公司、美国的核武器供应商Sol Oriebs等企业都遭受到的攻击。于是乎,各大安全厂商和众多安全专家又开始疾呼:零信任是解决勒索病毒甚至是网络攻击的最好的解药。
而在几乎同一时间,美国总统拜登宣布美国强制推行零信任架构(https://www.whitehouse.gov/briefing-room/presidential-actions/2021/05/12/executive-order-on-improving-the-nations-cybersecurity/):
一时间,再次把零信任推到的风口浪尖。鉴于之前立了要写一篇零信任相关文章的flag,以及最近一段时间零信任的火热,因此还是决定写一篇相关的文章。权当笔记和科普。
本文会从以下几部分来谈谈本人对零信任的一些粗浅的认识。当然有错误欢迎指出,也欢迎一起探讨。
1、什么是零信任?
2、零信任怎么落地?
3、零信任和SASE
4、零信任真的是勒索病毒甚至是网络攻击的最终解药么?
01
零信任介绍
开始讲述零信任前,我打算用科学防疫的例子,来对照网络安全:
广州作为中国的南大门,守护着中国的出入口。正因为如此,广州也承担着极大的疫情蔓延的风险。前段时间,广州疫情严峻,但是在政府和百姓的努力下,大家科学防疫,使得疫情开始稳定,确诊人数逐日下降。
疫情爆发后,我国严守边境,在边境建立了策略非常严的"防火墙",无论是本国公民还是外国人士,入境时,都需要进行核酸检测,然后执行严格的隔离措施。而在隔离期间,也要多次进行核酸检测。只有隔离期满,且多次核酸都为阴性,才能解除隔离。
而在国家内部,使用健康码来识别和验证大家是否是安全的。如进入医院、机场、地铁站、商场等公共场所,除了进行体温检测、佩戴口罩外,都需要出示健康码绿码,方能进入。而健康码的状态也并非一直不变的,会根据健康状态、行程、当前所在区域的疫情情况等,动态的进行更新。
因此,一旦出现一例阳性案例,就会被迅速送医进行隔离。并且快速成立疫情防控指挥中心,进行疫调及应急响应。如排查所有可能的接触者,进行核酸检测,防止扩散。同时排查可能的传播源头,堵住破口。然后再进行全面的消杀。
此外,实施所有公民免费打疫苗,目前已经累计接种新冠疫苗达近9亿剂次。
正因为科学防疫,使得我国成为目前全世界控制疫情最好的国家之一。也是目前世界上最安全的国家之一。
对照网络安全,我国的科学防疫策略,和网络安全中的一些策略,有异曲同工之妙。
1)边界防御:在机场建立防火墙;
2)零信任:无论国民还是外国人,都一视同仁(零信任)。内部采用健康码,且动态更新(持续验证,永不信任),防止横向移动;
3)微隔离:佩戴口罩
4)安全运营:成立指挥中心进行应急响应、分析、溯源、加固等;
5)升级、打补丁:疫苗。
从上述的防疫例子中,引出了零信任的概念。事实上,零信任的理念自2010年由Forrester的首席分析师 John Kindervag提出至今,已经十年有余。期间,Google、Microsoft、腾讯、完美世界等,均开始使用并推广零信任架构,而以零信任为概念的创业公司也如雨后春笋般出现。但是,真正把零信任推到大众最眼前的,是2020年的疫情。一是由于因为疫情,有了极大的远程办公需求;二是Wellmess、Darkhotel等利用某VPN漏洞对国内的重点部门进行了APT攻击。于是,用零信任取代VPN的声音此起彼伏。
而关于零信任的概念,网上已经有非常多的文章来介绍了。最核心就是:"持续验证,永不信任"。值得注意的是,零信任并非一种具体的、单一技术,而是一种安全理念和安全架构。
传统的安全防御架构,边界清晰。一般都是在边界进行最强的安全防御。但是一旦突破边界进入内网,如针对内部员工的钓鱼攻击,就会因为内部员工的默认信任身份,在内网横行无阻,顺利访问内部资源,导致信息泄露。
而零信任架构,则没有了传统的边界,无论是远程访问,还是内网访问,都一视同仁,都为不信任的。在访问内部资源前,都必须经过严格的验证,且相关策略都是动态的。
因此关于零信任,有几个前提和假设:
1)网络攻击时刻都在发生,并且内部用户越来越容易被直接攻击;
2)安全与否跟位置无关,无论是内网还是外网,任何访问资源,如人、设备、应用、网络等,都是不可信的;
3)安全性不是一成不变的,时刻都会进行变化。
基于此,引申出关于零信任的基本原则:
1)身份为访问的基础,在进行任何访问前,都需要经过身份的验证、授权等;
2)访问策略实时动态计算;
3)最小权限原则;
4)减少网络暴露面,减少攻击面;
5)网络、设备等持续验证,确保环境安全。
02
零信任可落地技术
零信任架构主要的应用场景有:企业办公、内网服务器、云原生。
基于企业员工办公场景的下零信任,基本架构如下:
从这架构可以看出,企业的网络环境,已经没有了明显的边界。所有员工的业务访问,无论是远程办公,还是在公司内网,都经过同样的链路。
这里主要包含以下一些落地的东西:
一、零信任网关
根据架构可以看到,整个零信任架构中,最核心的部分就是零信任网关。
原因是:
-
零信任网关,真正起到了隔离"内网"和"外网"的功能;
-
零信任网关,承担着所有的验证和安全策略。
网关分为web代理网关、网络隧道网关、API网关。
1、web代理网关
该网关只应对web网站的访问,不支持应用的访问。主要架构可以采用Apache或者Nginx就可以。该场景可以适应无端的零信任网络架构。当然也有一些厂商通过自研浏览器的方式来进行。
web代理网关的主要流程为:验证身份-->策略匹配-->转发需求。
2、网络隧道网关
由于web代理网关无法解决C/S架构的应用访问问题,因一些正常的运维和开发工作就无法展开。因此必须通过网络隧道网关来解决这个问题。
说到隧道,就必须要提到VPN。传统的网络架构,面对远程办公等问题,都需要通过VPN来解决。事实上,零信任架构里,依然有很多产品是通过VPN来实现网络隧道的问题。如SmartVPN。
主要流程为:端上创建虚拟网卡-->连接网络隧道-->验证身份-->匹配策略-->通信。
3、API网关
API网关主要为了适配第三方服务使用内部API服务的场景。API网关的流程:
验证身份-->策略匹配-->正常通信
由于大部分的API都是http协议,因此该部分的流程跟web代理网关的类似。
如使用API时,数据头里包含身份token,网关验证token,然后判断是否继续转发数据。
二、SDP技术
根据上面的的介绍,了解了零信任网关的重要性。为了使得零信任网关更加的安全,引入了SDP技术。SDP为实现零信任网关非常重要架构。所以,SDP也被称为实现零信任的三大关键技术之一(即SIM:SDP、IAM、MSG)。
所谓SDP,即Software Defined Perimeter,软件定义边界。为CSA(国际云安全联盟)于2013年提出的新一代网络安全架构。作为用来实现零信任理念的最好的技术框架之一,SDP技术可以把攻击面降到最低,实现"隐身"的功能。
在渗透测试或者实际的网络攻击中,针对服务器的攻击,一般最常用的方法就是:获取服务器的ip,然后使用nmap等工具,扫描该服务器上的开放端口。然后根据扫描到的端口判断服务器上的服务和组件,然后再看是否有相应服务的Nday或0day,最后发起攻击。
由此可见端口的重要性。
为了实现端口隐身,SDP网关默认"关闭"所有端口,拒绝一切的连接。当然并非端口服务不可用,而是使用防火墙规则deny all来阻止外来的连接。这样就达到了隐身的目的。
那么隐身之后,该怎么正常访问服务器上的这些服务呢?SDP网关处使用"端口敲门"(Port knocking)技术。
所谓的端口敲门,就是访问的时候,使用一套预先设置好的端口顺序,服务器收到客户端发出的端口顺序请求是否为设定好的,如果匹配,则在防火墙添加相应的放行请求,即打开了该端口。后面就可以正常进行访问了。
所以,端口敲门,可以简单理解为对暗号。比如,我们小时候都玩过的魂斗罗游戏,默认只有3条命。如果在游戏开始前的界面,使用操作:上上下下左右左右BABA,这样就能调出隐藏的30条命。
在这里,操作的顺序:
上上下下
左右左右
BABA
就为顺序的操作。
同样,可以配置如下的端口顺序:
[options]
UseSyslog
Interface = eth1[openSSH]
sequence = 1111,2222,3333
seq_timeout = 30
tcpflags = syn
command = /sbin/iptables -I INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT
这样,如果依次访问1111,2222,3333端口,则就可以打开SSH,访问服务器。
于是,使用SDP网关后,相关的流程就变为:
1)发送敲门包,包中带身份token和请求的服务信息
2)网关验证身份信息是否合法,该身份是否有权限访问该服务
3)如果所有验证就通过,则添加防火墙规则,允许该用户访问服务。若验证失败,则拒绝。
4)验证成功后,则可以进行正常的通信。
三、动态策略中心
如果说零信任网关是零信任架构最重要的核心,那么动态策略中心就是零信任的大脑。因为零信任网关中,关于身份的验证、授权、策略等,都是通过策略中心来进行的。并且策略是动态的。
那么策略的核心,就是IAM:身份与访问管理。
关于身份验证,最常见的就是账号和密码。事实上这样并不安全,因此一般都采用多因子的登录验证。如,使用token、短信验证、微信(企业微信)二维码、人脸识别等。
而访问权限管理,主流的有RBAC和ABAC。
RBAC:Role-Based Access Control,基于角色的访问控制。
该方式是目前使用最为广泛的一种权限管理模式。
该模式为,为不同的用户分配一个角色,每个角色都分配一定的权限。
比如说,公司中有这么几个人:
小明:程序员
小红:HR
小芳:财务
宁哥:总经理
小泉:程序员
小帅:美工
莫哥:董事长
公司内网有下面几个系统:源代码管理(SVN/GIT)、财务系统、公司发文系统、公司内部论坛。
于是为了方便管理,可以这样创建下面的分组:
程序员组:小明、小泉
美工:小帅
HR:小红
财务:小芳
高层领导:宁哥、莫哥
然后给不同的组别分配不同的内网访问权限:
分组\权限 | 源代码管理 | 财务系统 | 发文系统 | 内部论坛 |
程序员 | ✔ | ✘ | ✘ | ✔ |
美工 | ✘ | ✘ | ✘ | ✔ |
HR | ✘ | ✘ | ✔ | ✔ |
财务 | ✘ | ✔ | ✘ | ✔ |
高层领导 | ✔ | ✔ | ✔ | ✔ |
这样,以后有新员工入职,就不需要单独的分配权限,只要把新员工加入到对应的用户组即可。
事实上,该模式应用非常广泛,当前的网站或者应用,大部分都采用了RBAC的访问管理模式。
但是RBAC模式虽然管理上方便,但是在权限的管理上,策略还是过于松散,或者说细粒度不够。依然存在很多漏洞或者不足之处。比如,我只要被加入程序员组,我就可以无限制的访问源代码。这显然是不安全的。因此,引入另外一种权限管理方式:ABAC。
ABAC:Attribute-Based Access Control,基于属性的权限验证。
该方式,会使用各种属性,来判断是否需要给予授权。
一般的属性包含:用户属性、环境属性、操作属性、对象属性。
举例来讲,还是根据上面的公司案例:
在RBAC中,只要是程序员组,就可以无限制的来访问公司的源代码。
而在ABAC中,即便是程序员(用户属性),只能在工作时间如8点~19点(环境属性)来下载或者提交(操作属性)源代码(对象属性)。19点~08点,只能访问源代码,不能提交。
事实上,实际的动态策略中,可能会比上述规则更加的复杂。
如增加进程(应用程序)维度,则上面的规则就变成:
程序员,只能在工作时间如8点~19点,使用公司软件库中的git客户端,来下载或者提交源代码。
访问业务或者进程或者应用程序,是零信任中非常重要的一个用户属性。因此必须限定一些进程的访问需求。
如正常登录服务端,在公司内部限定使用SecureCRT,而如果某天使用Xshell来访问,则认为是是不合法的,网关处可以拒绝XShell的访问请求。
四、业务隔离
在传统网络攻击中,黑客在攻陷一台服务器后,往往会使用SMB、RDP等手段进行横向移动,以拿下更多的业务服务器。因此在零信任架构中,必须解决横向移动的问题。于是出现了零信任中另一个重要的技术:微隔离(MSG)。
所谓微隔离,即Micro-Segmentation,也叫微分段。微隔离还有个名字叫SDS:Software Defined Segementation,软件定义隔离。主要应用在数据中心,核心是解决东西向流量的安全问题。
微隔离就好比疫情中,要求大家佩戴口罩。通过口罩来隔离彼此,防止病毒的内部扩散。
传统的网络隔离或者防御,都是采用防火墙来完成。但是,配置和使用防火墙的成本非常高。一些甲方,由于没有专业的安全人员,甚至都没人会配置防火墙,依靠安全厂商提供的原始配置来进行防御。这显然不能满足零信任中关于访问安全的需求。于是,就出现一种技术,使得业务机上的网络安全策略,统一到策略服务中心,通过服务器中心来统一进行访问管控。
目前所采用的一些微隔离架构主要有:基于主机Agent、云原生、第三方防火墙、混合模式。
基于agent客户端实现微隔离,是NIST架构中的微隔离的一种实现方式:
这种方式核心,就是需要在主机上安装一个agent。通过agent来控制本机的网络访问,而防火策略在控制服务器上。
如服务1要访问服务3,会把访问请求统一到策略中心,策略中心来验证身份,若服务1不该访问服务3,则拒绝。否则就进行授权。而拒绝的操作,使用装在机器上的Agent来完成。如Agent控制系统防火墙,或者自研基于网络内核的访问控制。
该方式的不足就是,需要在机器上需要安装一个Agent,这样一些客户会觉得方案比较重,带来一定的性能影响,影响业务。
而使用第三方防火墙,主要是把防火墙部署在虚拟环境的宿主机上,这样经过虚拟机的流量都会经过宿主机上的防火墙,从而进行统一的管控。该方式可以方便的使用防火墙自带的一些安全功能,并且和之前的运维人员使用的防火墙无缝对接,无需额外的学习成本。但缺点是需要跟虚拟化的底层对接,并且无法覆盖容器等环境。
五、链路安全
为了保证零信任体系中的网络安全,所有的链路中的网络会话必须经过安全加密。否则就可能被篡改身份验证请求、访问策略控制等,无法起到真正的零信任。如使用mTLS来进行双向的身份验证。
当然,除了保证链路的安全,在链路中,某些厂商还会加入加速功能。
六、持续信任
采用了零信任架构后,会出现一个灵魂拷问:使用零信任架构后,是不是就不需要安全软件了?
这答案显然是否定的。我们依然需要在用户的机器上部署EDR等安全终端。
如上面所讲,身份、设备环境,是零信任中非常重要的一个环节。一旦设备出现不可信,则之后所有的访问都应该中断。
因此,为了校验设备的安全性,主机上必须有一个安全设备,来持续验证该设备的安全性,一旦发现入侵痕迹,如恶意文件、恶意进程、命令行等,就提示风险,把该设备调整为不可信状态。从而无法进行正常的业务访问、操作等。
这就好比,健康码绿码是我们通行的一个标准,但是疾控中心会监控个人的安全状态,动态的更新健康码的状态。一旦出现黄码或者红码,则无法进出某些公共场所。
七、安全运营中心
由于使用了EDR、NDR等DR类产品,这就需要把所有的日志,包括DR的安全日志、网关处的访问日志等,汇总到安全运营中心,然后进行相应的异常发现、策略更新等。
同时,为了限定公司员工进行业务访问的应用,因此必须管理一个可信应用程序平台。一方面防止员工随意在外面下载引来病毒,另一方面也可以对访问业务的进程做非白即黑等策略。
八、沙盒
这不是零信任架构中的必要组件,不过某些厂商,会配备沙盒功能。该功能使得一些数据的操作,经过身份验证后,在沙盒中进行,并非在实际的系统中。这样即便本机中勒索病毒,也无法加密沙盒中的数据文件。
03
零信任和SASE
除了零信任,目前同样还有一个很火的概念:SASE。
所谓SASE,为Secure Access Service Edge,安全访问服务边缘。
SASE是Gartner在2019年末提出的一个全新的安全模型。
理解SASE,必须理解好边缘(Edge)这个概念。
在互联网的架构中,有边缘部分和核心部分之分。其中,数据中心,被称为核心部分,而连接数据中心的一些设备,包括手机、PC、IOT等,就为边缘部分,也叫做端。
在当下的云计算服务中,又分为边缘设备、边缘服务器、边缘网络到云计算数据中心四个层级:
而在SASE中,这个边缘就是,在数据中心和各个边缘设备之间,能够接触到各物联网设备的边缘。
该领域传统上是CDN厂商的优势领域,事实上也确实如此,诸如Akamai、网宿科技等传统CDN商场,也开始进入SASE这个跑道。
从SASE概念一提出,就被认为是"超越"零信任架构的一个概念。而在SASE的包含部分里,也看到包含了零信任的内容。
SASE主要包含几个重要组件:
-
FWaas:防火墙即服务
是指从云端作为服务交付的防火墙。FWaaS 保护云端平台、基础设施和应用程序免受网络攻击。包括 URL 过滤、入侵防御以及对所有网络流量的统一策略管理。
-
SWG:安全Web网关
从 Web 流量中过滤不需要的内容,阻止未经授权的用户行为,并执行公司安全策略,从而防止网络威胁和数据泄露。
-
CASB:云访问安全代理
CASB 为云托管服务执行多项安全功能:揭示影子IT(未经授权的公司系统)、通过访问控制和数据丢失防护(DLP)保护机密数据、确保符合数据隐私法规等等。
-
ZTNA:零信任网络访问
对每个受保护应用程序的每个用户进行实时验证,以助防止潜在的数据泄露。
当然针对不同的需求,还会有一些其他的服务和组建。如RBI(远程浏览器隔离)、WAAPaaS(Web API防护即服务)、APT防护等。
为了应对SASE,Forrester在2021年也提出了ZTE(Zero Trust Edge,零信任边缘)的概念,完全对标SASE,等价于一个东西。
事实上,SASE和零信任的关系,我个人认为是:
1、零信任是一个大的框架,是比较宽泛的一个理念,而SASE有具体的落地场景,如云原生安全,因此更认为SASE是零信任的一个具体的实现实例;
2、SASE强调网络和安全同步进行,而零信任则是安全优先。
04
零信任真的是解药吗?
当大家都纷纷喊出零信任是网络安全的最终解药的时候,那么我们不禁要问,真的是解药么?
这里,我们从一个具体的攻击案例来拆解下,零信任在真实的攻击场景,是否具有相应的应对方案。
-
目的:攻击某游戏公司,窃取游戏服务的代码(为了搭私服),并且中勒索病毒,进行毁尸灭迹。
-
攻击步骤:
1、信息收集:通过linkin等平台,收集公司员工的邮箱信息;
2、武器制作:使用CobaltStrike生成木马,并且进行免杀;
3、初始攻击:给该员工发钓鱼邮件,诱导员工点开,一旦点开,植入制作好的木马;
4、横向移动:用该员工账号,给其他员工发送钓鱼邮件;
5、信息窃取:窃取内部员工的一些账号,如邮件、vpn、内网平台等;
6、再次窃取:使用窃取的某一开发人员的VPN账号,登录内网,然后扫描内部业务平台,成功获取到代码服务器信息。然后用该员工信息登录,拉源代码回来;
7、信息回传:把收集到的源码,进行打包,回传给攻击者;
8、毁尸灭迹:植入
-
零信任的作用:
1、初始攻击植入木马后,零信任客户端需要持续验证设备的安全性,若机器存在安全风险,则要及时停止该用户访问内网的授权;
2、如果是大规模的发邮件,这是一种异常行为,则UEBA等系统需要及时检测和报警;
3、攻击者使用窃取到账号信息登录VPN或其他内部业务平台,零信任架构的身份验证,要求采用多因子的用户验证,即只有账号密码还不够,需要配合短信验证码、token、人脸识别等;
4、扫描内网,采用SDP后,则无法获取到具体的端口信息等;
5、有些攻击者会使用木马收集文件插件直接收集,零信任架构中,配置限制的进程,即只有特定的应用程序才可以访问或者拉取源码,则攻击者会收集不到源码;
6、即便攻陷一台服务器,由于存在微隔离,也无法扩散到其他的服务器,从而使得损失在可控范围。
从攻击案例中可以看到,零信任架构还是发挥了很大的作用,确实是网络攻击非常好的解药。当然,零信任也不是万能的,同样存在单点被突破的问题。同时,零信任产品自身的安全也值得关注。一旦自身产品存在漏洞被突破,如授权或策略系统,则整个体系就会崩溃。
最后,必须指出,网络攻防,最关键的还是人与人之间的攻防。人永远是木桶原理中,最短的那一个环节。
因此,提升人的安全意识、防范意识是非常重要的。而零信任架构,能最大化的通过体系来弥补人存在的一些不足,从而提升整个网络环境的安全。
同时,零信任依然还需要搭配各种安全软件,各种DR、soc等等。因此零信任+的体系才是最终的发展方向,如零信任+XDR等。同样,还需要一个功能和人员健全的一个安全运营中心,来进行发现、分析异常,调整策略,攻击溯源,安全加固等等工作。