零信任安全网关是最核心的策略执行点,在用户访问资源的过程中,强制实施细粒度的访问控制。本章将对零信任安全网关的技术原理进行详细介绍。
无论是 NIST、BeyondCorp,还是 SDP,在所有零信任架构中,最核心的部分都是“安全网关”,安全网关的基本作用有两个。
1)分隔用户和资源
用户与资源处于不同的网络中,用户想获取资源,只能通过安全网关进入业务系统,安全网关就像门卫,放行合法的,拦住不合法的。用户不能直接接触业务系统,必须先经过安全网关的认证才能与业务系统连接。
2)执行安全策略
当用户的访问请求转发到安全网关后,安全网关解析出请求中的用户信息,向管控平台询问用户的身份、设备、行为等信息是否合法,并根据结果进行放行或拦截。
由于所有的访问请求都先经过安全网关,再到达业务系统,所以安全网关可以挡住大部分针对业务系统的攻击。由于所有的连接都集中在一个地方,所以在发现异常行为后,对异常行为进行封堵或打击也更加容易。
下面将介绍安全网关的具体架构。
BeyondCorp 是最早落地的零信任项目。BeyondCorp 网关的名字叫“访问代理”(Access Proxy)。实际上,最初的BeyondCorp访问代理只是一个“Web代理”,只支持Web网站的接入,不支持C/S架构的应用。这个网关可以用类似Nginx的代理服务器实现。
1)转发请求
这是代理服务器最基础的功能。Web 代理网关根据用户访问的域名不同,将请求转发到Web代理网关后面的不同服务器。具体来说,首先要将用户的访问流量导流到Web代理网关上,例如,把业务系统的域名DNS对应到Web代理网关的IP地址,当用户访问业务系统域名时,流量自然会被发送到Web代理网关的IP地址上。Web代理网关在收到用户的访问请求后,通过数据包中的域名信息识别出用户的访问目标,然后判断请求的合法性,将合法请求转发给业务系统的真实服务器,并将返回的数据按原路发给用户(另外,为了兼容性,应支持转发时记录用户源IP地址。)
2)获取身份
客户端通常会在cookie或数据包头部加入代表用户身份的token。如果只修改数据包头部,那么Web代理网关可以提取信息进行校验,不会影响正常的业务逻辑。Web代理网关可以通过解析数据包头部信息获取用户身份,设备信息也可以用类似的方式进入网关。
3)验证身份
Web代理网关可以将访问者的身份信息发给管控平台,由管控平台进行对比和判断,并返回验证结果。这一步会严重影响 Web代理网关的性能,为了提升验证速度,可以在Web代理网关上也存储一份身份信息。
4)放行或拦截
Web代理网关根据验证结果决定将访问请求转发到真实的服务器或报错页面上,BeyondCorp的报错页面会引导用户自助申请权限。
1)互联网收口
只有Web代理网关是开放的,企业的业务系统不直接暴露在互联网上。Web代理网关前面是互联网用户,后面是企业网络中的各类应用资源,用户访问应用必须经过Web代理网关的校验和转发。
2)预验证、预授权
只有通过身份验证的用户才能接入企业资源,其他人会被拦在外面,完全接触不到企业资源,相当于在企业资源外加了一层防护罩。
3)不会暴露业务系统的真实IP地址
用户只能通过域名访问业务系统,只有Web代理网关知道业务系统的真实IP地址。用户只与Web代理网关直接交互,与业务系统不处于同一网络。
4)持续监控
所有流量都是通过网关转发的,所以网关可以持续对用户的设备健康状态和行为状态进行检测。如果发现异常,那么可以立即拦截。
SPA模块相当于一个具有隐身功能的网关。隐身网关的作用类似于防火墙,对用户的身份进行检测,对合法用户打开防火墙的端口。对非法用户来说,所有端口都是关闭的。
图4-16
如果把隐身网关放在Web代理网关之前,则可以增强安全网关的“隐身”防护能力,抵抗针对Web代理网关的扫描和攻击,如图4-16所示。
隐身网关的工作流程如下。
(1)默认关闭所有端口。如果非法用户对隐身网关IP地址进行扫描,那么会发现端口都是关闭的。
(2)申请放行。用户在正常通信前,先向隐身网关发出申请放行的数据包,这个数据包中包含用户身份信息。
(3)验证身份。隐身网关接收用户的数据包,解析用户的身份,并对身份进行检测。
(4)放行或拦截。如果身份合法,隐身网关就会对用户的IP地址定向开放端口。对其他用户来说,端口还是关闭的。
(5)正常通信。放行之后,用户就可以正常与Web代理网关通信了。
一个完整的零信任方案应该支持B/S场景和C/S场景。如果只有Web代理网关,那么无法支持C/S架构业务系统的访问,远程运维连接SSH、连接数据库等工作都难以进行。当然,RDP和SSH也有Web形式的方案,可以让这两种协议也经由Web代理网关,但从用户体验和使用习惯上来讲,这些并不是最佳方案。
图4-17
另外,企业里可能有些老旧的客户端或者浏览器插件使用的是自己的通信协议,这些场景中的问题无法用Web代理网关解决,只能在客户端的网络层抓包,再通过网络隧道转发。
因此,零信任网关一般有支持网络隧道的组件,如图4-17所示。在用户访问Web网站时经由Web代理网关,在其他C/S架构的场景下经由网络隧道网关。
很多零信任产品是用成熟的VPN技术来实现网络隧道网关的,BeyondCorp也把C/S架构的场景交给了VPN。VPN的原理简单来说就是通过设置虚拟网卡和路由表,拦截所有流量,由虚拟网卡将流量转发给网关,由网关进行身份和权限校验,然后将合法的流量转发到业务系统的服务器上,进行正常通信。为了提升用户体验,还可以增加隧道保活、断线重连等机制。
与Web代理网关的作用不同,网络隧道网关的作用是覆盖更多使用场景,让零信任架构更完整,但它的性能不如Web代理网关,而且暴露了网络层的资源,安全性较低。
Web代理网关可以在应用层进行安全策略控制,对不同应用、不同URL设置不同的安全策略。Web代理网关的管控粒度比隧道网关更细。
所以,隧道网关与 Web 代理网关是相互补充的关系。如果因为隧道网关能支持所有场景,就放弃Web代理网关,那就是“丢了西瓜捡芝麻”。
隧道网关可以覆盖所有访问场景,但无法管理服务器之间的访问。服务器之间的访问需要API网关来管理,如图4-18所示。
图4-18
当第三方服务器调取被保护资源的API时,需要进行身份验证和安全过滤。具体流程如下。
(1)申请隐身网关放行。
(2)通过API网关的身份验证。多数API是HTTP或HTTPS的,所以这个过程与通过Web代理网关的身份验证过程类似。第三方服务器在通信时,将自己的身份信息插入数据包的头部,API 网关从数据包头部获取身份信息,并转发给管控平台进行验证,根据验证结果决定是否放行。
(3)通过API网关的安全过滤,检查是否存在敏感数据泄露、SQL注入、PHP注入、恶意代码、XSS攻击等情况。API网关要对异常行为和网络攻击进行实时拦截。
(4)正常通信。合法的请求会由API网关转发给API服务资源。
零信任安全网关可以通过不同的组件来覆盖更多场景。例如,运维场景、物联网场景等。运维代理网关和物联网网关的架构如图4-19所示。
图4-19
在运维场景下,运维代理网关需要支持SSH、RDP等协议,支持对服务器、数据库进行运维,可以对用户的行为进行监控。除了满足常见的安全运维需求,运维代理网关还要支持细粒度的访问控制策略。例如,当通过运维代理网关操作带有机密标签的数据时,触发二次认证或者上级审批等操作。
在物联网场景下,物联网网关需要支持常见的物联网通信协议,支持对接各种协议的物联网设备,把各类协议(如 ZigBee、Lora、蓝牙)统一转换为标准协议(如 MQTT、HTTP)与后端系统进行通信,满足常见的物联网通信、边缘计算需求。物联网网关还要支持细粒度的访问控制策略,贯彻零信任的理念。例如,对物联网设备的身份进行校验,对设备的安全状态进行检测,基于多种因素进行授权。
到这里已经形成了一个完整的零信任安全网关。不过这只是单机版,只适用于中小型企业。大型企业还有高性能和高伸缩性的需求,支持水平扩展是零信任安全网关必须具备的核心能力之一。
图4-20
(1)高可用:所有流量都要经过网关转发,一旦网关出现问题,所有用户都会受影响,所以必须有高可用方案,一个网关坏了,自动切换到另一个。
(2)支持集群:大型企业用户量大,一个网关性能肯定不够,所以必须支持集群,通过负载均衡增加并发数,支持动态扩容,线性增强整体性能,提升高可用性。
(3)支持多数据中心部署:业务系统的服务器分别部署在多个数据中心或者多个公有云上,如图4-20所示。用户可以通过零信任客户端直接访问各个数据中心的业务系统。
(4)支持分布式:如果企业在全国各地有分公司,或者跨国企业在国外有分公司,那么网关必须是分布式的,让用户能够就近接入,保证用户的访问速度。
网关的集群方案与零信任架构中的管控平台密不可分。管控平台管理所有网关,决定用户在什么情况下该连接哪个网关。网关间的负载均衡策略、数据同步等机制比较常规,在此不再赘言。
图4-21
零信任客户端和零信任安全网关之间通过加密协议进行流量传输,避免流量被窃听、被篡改。安全网关最常用的协议是HTTPS,在此基础上,SDP标准中提到应该实现mTLS加密,避免中间人攻击,国内不少厂商还会在此基础上再封装一层UDP进行传输。下面将对这几种加密传输方法的原理进行简单介绍。
零信任客户端与零信任安全网关之间通常使用HTTPS进行通信,也有些企业的业务系统希望使用HTTP进行通信。因此,零信任安全网关应该支持SSL卸载,安全网关对前半段和后半段分别使用不同的协议进行传输,用户与网关之间使用网关颁发的证书进行通信,如图4-21所示。
反过来,将零信任安全网关的SSL卸载应用于未使用安全传输协议的企业,可以起到保护作用,企业应用无须改造即可实现数据在互联网上的安全传输。
mTLS是一种需要客户端和服务端双向认证的加密协议。普通的TLS只要求客户端验证服务端的证书,服务端不用验证客户端。其实,TLS标准中是包含mTLS的,只不过大部分网站是面向公众的,允许匿名访问,验证客户端的证书意义不大,所以为了使用便捷,大部分网站只支持单向TLS。
在零信任架构中,用户群体相对固定,如果特别担心传输的安全性,那么可以使用 mTLS抵抗中间人攻击等安全风险。当用户连接业务系统时,要先上传身份证书,通过验证后,才能建立连接,访问相应的系统。由于黑客没有客户端证书,所以即使黑客监听、拦截了通信流量,也无法伪装成用户与服务器通信。
图4-22
mTLS的流程如下。
(1)网关和客户端安装各自的加密证书。
(2)当建立连接时,双方交换、检查对方的证书是否合法,检查内容包括公钥、签名、CA、域名、有效期等。
(3)双方协商接下来的通信要采用什么加密方案。
(4)在使用密钥加密后,进行通信。
在国内,安全网关除了支持AES、RSA等国际加密算法,还需要支持国产加密算法,保障数据传输安全,如图4-22所示。在国产加密算法中,SM1、SM4、SM7、祖冲之密码(ZUC)使用对称算法;SM2、SM9使用非对称算法;SM3使用散列算法。SM1是通过硬件实现的,最常用的是SM2、SM3、SM4。很多企业使用开源的GmSSL支持SM2、SM3、SM4国产加密算法。
有些零信任方案选择了最新的 WireGuard 协议进行通信加密。WireGuard 协议简单理解就是在正常的HTTPS通信上进行封装,将正常通信的TCP包作为body部分,构造一个新的UDP包,通过UDP在互联网上进行加密传输。
WireGuard的通信流程如图4-23所示。
(1)零信任客户端创建虚拟网卡,抓取用户流量。
图4-23
(2)通过SPA UDP敲门,向隐身网关申请放行。
(3)与网络隧道网关建立连接。WireGuard将抓到的TCP数据包进行UDP封装,在封装过程中进行加密。WireGuard采用Cryptokey Routing加密方法,客户端和网关各有一对公钥、私钥,并将公钥发给对方。通信时先用私钥进行加密,对方再用公钥解密。公钥、私钥与用户和设备绑定,每个设备都用一套独立的公钥、私钥。这种强度的加密基本是不可破解的。
(4)零信任网关检测用户身份。身份信息是在UDP封装过程中插入UDP数据包头部的。
(5)验证成功后,使用用户的公钥解开UDP包,还原成TCP数据包,通过HTTP转发给企业应用。由此可见,用户到企业应用之间使用TCP通信,只不过在传输过程中从用户到网关这一段进行了UDP封装。
WireGuard协议的好处如下。
1)隐身
通信过程使用UDP,与SPA技术的UDP敲门搭配,在整个通信过程中都不用开放TCP端口(一般WireGuard只需要开放UDP 51820端口)。
2)效率高
WireGuard 协议的特点就是代码非常简洁。WireGuard 只有四千行左右的代码,传统 VPN至少有几万行代码。代码少,就意味着运行更快、更稳定,效率更高,漏洞更少。
3)双向加密
WireGuard协议采用双向加密,与mTLS一样,能够更好地抵抗中间人攻击。
4)“实名制”网络
上文从加密角度介绍了WireGuard协议的Cryptokey Routing技术。其实这种技术与零信任的持续身份认证原则也特别契合。WireGuard 公私钥加解密的过程能证明数据包的身份。这相当于让网络中流动的所有数据包都具有身份,没有身份的包会被零信任抓出来丢弃掉。也就相当于给网络做了“实名制”认证,真正做到了针对每个包的持续身份认证。
图4-24
零信任安全网关通常会部署在企业网络的入口,对企业影响非常大。因此,是否支持各种协议、是否支持高可用,以及加密通信的性能和稳定性,是零信任安全网关最重要的评价指标。上文已经介绍了零信任安全网关的组件和原理,下面将对零信任安全网关需要具备的能力进行总结,如图4-24所示。
(1)网络隐身:默认关闭所有端口,只允许合法用户建立连接。
(2)加密传输:通过各类加密算法保护通信传输的安全。
(3)代理转发:接收用户的访问请求,支持各类业务访问场景的统一代理转发。
(4)持续校验:在流量转发过程中,识别每个访问请求的用户身份和申请访问的目标,根据管控平台下发的安全策略,进行身份和权限的校验。
(5)基础能力,包括以下5项。
a)自身防护:作为网络的入口,安全网关可能成为各种攻击的目标。因此安全网关应该具备一定的自身防护能力,8.8节将对此进行详细介绍。
b)集群部署:支持企业的高可用、集群、分布式部署需求,保障安全网关的快速、稳定运行。
c)日志记录:实时上报用户的访问日志,包括用户身份、设备信息、访问时间、目标资源、占用流量等,以便管控平台进行安全审计、风险分析和信任评估。API 代理会记录API调用者的身份、IP、访问时间、API服务响应、流量大小等信息。
d)会话控制:管理用户的会话连接。根据管控平台的指令,执行中断会话等操作。
e)流量控制:为保障安全网关的稳定运行,对访问请求的长度、频度、时长、并发数、大小、速度等指标进行管控。