一个网络有多少端口对外暴露,就有多少可以被攻击的点。在传统安全模式中,用户通常具有比较广泛的网络权限,只有在访问应用时才进行身份验证。例如,任何人都能连接财务系统的服务器,但只有财务部员工才拥有账号和密码,可以打开登录页面。服务器在网络层就像一个靶子,攻击者可以对服务器进行漏洞攻击,在登录页面进行暴力破解、SQL注入等操作。
零信任理念主张在网络层也基于身份进行访问控制,避免出现任何人都能发起攻击的情况。零信任系统只允许合法用户连接网络,未知用户根本看不到被保护的服务器,服务器就像隐身了一样。
网络隐身是零信任最引人关注的一项技术。最常见的实现方式是SDP框架中的SPA。下面对这种技术进行详细的介绍。
通常,一个网站需要把端口映射到互联网上,才能被外部用户访问。使用SPA技术的零信任架构可以做到让网站只对合法用户映射端口,不对非法用户映射端口。如图4-1所示,只有合法用户能连接到业务系统,非法用户完全“看不到”被保护的业务系统和网络。非法用户如果尝试连接隐藏端口,就会发现这个IP地址什么都没有,但合法用户可以正常连接并使用。被保护的网络就像隐身了一样,非法用户根本看不到、摸不着。图4-1中列举的各类网络攻击都无从发起。
图4-1
在介绍端口隐身的原理之前,先讲解什么是端口,黑客怎么攻击端口。
如果一个服务器是一栋大楼,那么端口就是大楼的各个出入口,通过不同的入口可以进入不同的店铺和区域。对服务器来说,不同的端口对应不同的服务器程序。通过443端口可以访问HTTPS网站,通过80端口可以访问HTTP网站,通过22端口可以建立SSH连接,通过25端口可以发送邮件……
每个服务器程序都是通过端口与外面的用户通信的。例如,当用户用浏览器打开百度页面时,就是通过百度的443端口与百度的服务器程序通信的。浏览器地址栏里真实的 URL 是https∶//www.baidu.com∶443,用户一般看不到443,这是因为浏览器把端口隐藏了。不信你在URL后面输入“443”,打开的是同一个页面。
图4-2
端口是攻防的关键,各类网络攻击基本都是以端口为目标的。黑客在进行攻击前,一般会先收集服务器开放了哪些端口,猜测服务器提供什么服务,然后制定相应的攻击计划。
1)利用漏洞攻击
黑客利用端口扫描工具(例如Nmap)可以从端口的返回信息中了解到很多服务器的信息。例如,服务器的操作系统、中间件、通信协议等,如图4-2所示。
黑客一旦知道了目标服务器的信息,就可以利用相应的漏洞进行攻击。互联网上有很多公开的漏洞库,只要在漏洞库里搜索,就能查到漏洞,如图4-3所示。
操作系统、中间件等软件厂商会从漏洞库里查找自己的漏洞,并进行修复升级。但软件更新后,用户不一定会马上升级,大部分用户用的是带着漏洞的版本。
对黑客来说,这些未修复漏洞的服务器,就是一个靶子,可以随意攻击。
图4-3
图4-4
2)DDoS攻击
除了利用漏洞,黑客还有更简单粗暴的攻击方法。如果发现目标服务器的某个端口是暴露的,就直接利用大批“肉鸡”进行流量攻击,把服务器的资源占满,直接让服务器“瘫痪”,如图4-4所示。
3)自动信息收集
看到这里,你可能想,端口直接暴露在互联网上确实危险,但是哪有那么多人这么无聊,每天在网上扫描漏洞、肆意进攻啊?有的话也轮不到攻击我吧。
错!网上每天都有很多爬虫在大规模地进行自动扫描。很多黑客组织会做一套集群,每天扫描全世界所有的服务器。图4-5就是国内某个公开的服务器搜索引擎,在里面搜索一个漏洞的名字,全世界所有有这个漏洞的服务器马上就会被列出来。所以,你可能已经在别人的目标列表里了,只不过还没攻击你,或者你还不知道而已。
图4-5
网络攻击很恐怖,常规防御有两种方法。
第一种方法是允许所有人访问目标网站并进行安全过滤,一旦发现恶意行为,就立即阻断访问。这种方法依赖识别恶意行为的规则库,难以防御没有破解方法的新型攻击,也就是我们常说的“零日攻击”。这种防御的思路也有缺陷:只要目标网站是暴露的,它就是一个靶子,坏人可以随时研究它、破解它。例如,WAF是专门防御Web攻击的设备,网上有很多绕过WAF的教程,因为 WAF 是所有人都可以看到的,所以所有人都可以不断地研究它,测试有没有绕过它的办法,如图4-6所示。
图4-6
正是因为以上问题,所以很多重要的系统都不暴露在公网上。在网络上设置白名单,只允许公司的IP地址访问业务系统,公司外的用户IP地址是动态的,无法直接进入白名单,如果需要远程访问,就通过VPN接入。VPN的特点是可以减小暴露面,外部用户看不到由VPN保护的业务系统的端口。
但是VPN也存在问题,就是VPN本身还是要暴露端口的。例如,SSL VPN就要暴露443端口,有端口就有漏洞。图4-7就是笔者在漏洞库里搜索到的VPN漏洞。
图4-7
为什么我们总能听到关于VPN漏洞的新闻呢?就是因为VPN端口始终暴露,坏人可以随时尝试攻击,研究端口有没有漏洞,所以VPN也不是一个完美的解决方案。那么有没有方法能做到一个端口都不暴露呢?有!方法就是——SDP。
要实现隐身的效果,SDP网关需要部署在网络的入口处,被保护的网络只留这一个出入口,访问业务系统必须经过SDP网关。
1)SDP的组件
SDP需要管控端、客户端和网关的配合,才能实现隐身效果。SDP管控端可以与网关和客户端连接,SDP客户端安装在用户的计算机上,SDP网关部署在网络入口,这三个组件与零信任的管控平台、客户端、安全网关一一对应。
2)默认关闭所有端口
SDP网关的默认规则是关闭所有端口,拒绝一切连接。SDP网关中有一个SPA模块,这个模块类似于一个动态的防火墙。在默认情况下,SDP 网关上的防火墙只有一条规则——拒绝一切连接(deny all)。这样,任何发过来想建立连接的数据包都会被SPA模块直接丢弃,谁都连不上它的端口。SDP网关就是这么“隐身”的。
3)端口敲门
按照以上做法,“坏人”是连不上了,但是“好人”怎么连呢?“好人”要通过一套特殊的流程才能与端口建立连接。这套流程叫作端口敲门。
前文已经介绍过,端口敲门的原理就像进入一个秘密基地,基地的大门平时是紧闭的,里面有人守着,只有敲对了暗号才会开门,例如,三长两短。
SDP技术要求“好人”在连接端口之前先敲门。
(1)SDP客户端在与SDP网关通信之前,会先发送一个敲门用的数据包。包中带有用户的身份信息和申请访问的端口。
(2)SDP网关监听到敲门包之后,解析包中的身份信息并进行验证,检查身份是否合法、用户申请访问的端口是否得到授权。
(3)如果通过检查,那么SDP网关会在防火墙中添加一条规则——允许来自这个用户的IP地址访问某端口,相当于用户把SDP网关这扇门给“敲”开了。
(4)敲门成功后,用户就可以访问端口了,网关会把用户的流量转发给相应的业务系统,如图4-8所示。
图4-8
注意,这时“坏人”还是不能访问该端口。因为网关只对“好人”的IP地址放行,对“坏人”的IP地址是没有放行的。而且目标端口对“好人”也只是暂时开放,一旦“好人”停止操作超过一分钟,端口就自动关闭。如果“好人”一直在操作,那么 SDP客户端会定期去敲门,保持端口是开放的。
你可能发现,这里有一个问题:如果SDP网关默认所有的端口都是关闭的,那么敲门包是怎么被接收的呢?
SDP客户端会将敲门包发送到SDP网关上某个事先约定好的UDP端口,例如60001,这个端口只监听,不做任何回应。所以,用户可以正常敲门,但黑客会因为端口不对扫描做出反应而认为端口是关闭的。
以上就是SDP端口敲门的原理。因为在敲门过程中,要先发送一个用于验证身份的敲门包,所以这个过程也被称为单包授权(Single Packet Authorization,SPA)。
SPA敲门包中包含用户的身份信息、申请访问的目标信息、身份凭证等,SDP网关会对用户进行身份校验,并根据申请信息对用户开放端口。具体来说,SPA敲门包应包括如下信息。
(1)用户身份信息,用于识别敲门包来自哪个用户,判断该用户是否有访问权限。
(2)设备信息,识别用户设备,判断该设备是否被允许接入零信任网络。
(3)随机数,用于防止重放攻击。
(4)时间戳,过期后SPA敲门包失效。
(5)客户端IP地址,SDP网关会把这个IP地址作为源IP地址,并暂时对其开放端口。
(6)申请访问的IP地址和端口,SDP网关会把这个IP地址作为目标IP地址,并向其转发用户的访问请求。
(7)加密密文,SPA客户端会用事先颁发的证书对前面的信息进行加密,SDP网关以此验证用户证书是否合法,进而判断用户身份是否合法。
如果使用端口扫描工具扫描SDP网关,那么会发现所有端口都处于关闭状态,如图4-9所示。但是使用SDP客户端可以正常打开网站。
图4-9
端口隐藏有如下两个作用。
第一,黑客没有攻击的意愿。黑客的攻击通常都是从收集情报开始的,后续怎么进攻完全依赖前期收集到的情报。如果黑客只是在漫无目的、广撒网式地扫描,那么当他探测不到服务器时,就意味着他会认为这里没有运行任何有价值的服务,因此不会有进一步攻击的意愿。互联网上的大部分攻击都采用侦察到哪里存在漏洞,就攻击哪里的模式,SDP的端口隐藏技术可以有效地对抗这类攻击。
第二,黑客的攻击手段受限。即使黑客掌握了零信任系统的网络信息,也无法绕过SPA攻击后面的业务系统。黑客看不到被保护的系统,SQL 注入、漏洞攻击、XSS、CSRF 等攻击根本无从发起。
安全人员在进行攻防实战时,一个重要工作就是封锁IP地址。而SPA相当于把所有IP地址都封锁了,只有身份合法的IP地址才可以临时进入。这是一个相当简捷有效的防护手段,在SPA面前,绝大多数网络攻击都是无效的。
零信任网络相当于加了一层隐身防护罩。通过隐身能力,零信任架构在不安全的互联网上构建了一个安全的暗网。
SPA敲门技术是不断发展的,下面介绍几种最新的用于增强端口敲门强度的技术。这些技术可以有效避免攻击者对SPA技术的破解和篡改。
上节介绍的敲门流程是在建立连接之前,单独发送一个UDP敲门包进行校验,这种方式也被称为UDP敲门。还有另一种TCP敲门技术,可以在与业务系统建立TLS连接时进行校验。TCP敲门的具体过程如下。
(1)SDP客户端在TLS握手过程中,向网关发送client hello消息,扩展字段中包含用户的身份信息。
(2)SDP网关验证TLS client hello扩展字段中的身份信息。
(3)若SDP网关验证成功,则将用户的数据包转发至目标服务器。
(4)若SDP网关验证失败,则中断连接。
TCP敲门相当于对UDP敲门的补充。假设用户已经通过UDP敲门成功了,那么当SDP对该用户的IP地址开放端口时,对与用户同一IP地址的“坏人”也开放了端口。在使用了TCP敲门技术之后,“坏人”只能看到开放的端口,无法建立连接。因为“坏人”发起的 TLS 连接请求中没有合法的身份信息,无法成功与SDP网关建立连接,所以无法进一步发起攻击。这就是TCP敲门的作用。
TCP敲门技术的拦截效果非常明显。对没有TCP敲门和有TCP敲门的两个网关持续发送建立连接的请求,观察网关的连接数,就会看到没有使用TCP敲门技术的网关的连接数直线上升,而有TCP敲门技术保护的网关拦住了非法的连接请求,连接数并不会大幅上升。
SPA技术有一个可被攻击的点,就是SPA包是可以伪造的。攻击者只要伪造了SPA敲门包,就可以敲开门。伪造的方式可能是直接构造包,也可能是捕捉合法用户的SPA包,修改其中的信息。
为了防止被破解和篡改,需要对SPA敲门包进行加密,而加密的密钥就是SPA技术的关键。前文介绍过SPA包是有加密机制的,所以攻防的焦点就变成了能否破解密钥。谈到加密,众所周知,算法不是关键,密钥才是关键。如果所有用户都使用相同的密钥,那么安全性就很差。为了安全,应该做到每个用户、甚至每个设备都使用不同的密钥,简单来说就是要实现“一机一钥”。
SPA的密钥分发是一个难题。因为在默认情况下,零信任的服务端是隐身的,在客户端未进行身份验证时,无法与服务端连接。所以,密钥只能事先分发,或者在 SPA 的过程中分发。密钥的分发方式主要有以下3种。
1)客户端嵌入密钥
事先在客户端中嵌入密钥,再交给用户进行安装、使用。这种方式比较方便,但无法做到一机一钥。
2)用激活码生成密钥
管理员为每个用户分发一个激活码。当用户安装客户端后,在登录过程中,让用户输入自己的激活码,客户端以激活码为种子生成密钥。这种方式较为麻烦,但可以实现一机一钥。
一种优化的方式是,让用户在下载客户端安装包前进行身份认证,系统根据用户身份分配激活码,并将其插入下载文件的文件名中。这样,用户下载的安装文件的文件名中带有自己的激活码,当用户登录时,客户端可以自动读取激活码进行激活,激活过程无须用户参与,用户体验比较好。
3)将临时密钥转换为正式密钥
通过在客户端安装包中嵌入临时密钥的方式让用户登录。在登录成功后,管控端为每个登录成功的客户端都自动下发一个在后续通信中使用的正式密钥。临时密钥要设置失效条件,例如,3天后失效或100人用过之后失效。正式密钥在一定时间内有效并与用户的设备关联,每个设备都对应唯一的密钥,如果设备丢失,那么可以在服务端删除密钥。这种方式兼具便捷性与安全性,可以与方法(2)结合使用。
图4-10
以上就是主要的分发SPA密钥的方式,每种方式都有优缺点,企业应该根据安全和体验方面的要求进行权衡,选取合适的方式。
除了SDP网关保护的业务系统,SDP管控平台也会成为黑客攻击的目标。保护SDP管控平台有两种方式。
(1)在SDP管控平台上嵌入SPA模块。当SDP客户端到管控平台进行身份认证时,也需要进行SPA敲门。在敲门成功后,SDP管控平台才开放认证端口,如图4-10所示。
(2)在标准的SDP架构中,管控端和网关都是暴露的,但其实可以根据需求灵活调整:将SDP管控端隐藏在SDP网关之后,利用网关保护管控端。这种架构需要解决SDP客户端如何进行登录认证的问题。简单来说,SDP网关需要支持登录认证请求的转发。首先,SDP客户端发起UDP敲门;然后,SDP网关对用户开放SDP管控端的认证端口;最后,SDP客户端发起登录认证请求,由SDP网关转发给SDP管控端进行认证,如图4-11所示。
图4-11
有一个很容易引起误解的地方:在使用了SPA技术后,安全网关还是要对外映射IP地址的,只不过网关的SPA模块会拦截未授权的请求,网络通路并不是完全封闭的。
有一种云网关+连接器的架构,可以实现近似“网络完全封闭”的效果。下面将对这种架构进行详细介绍。
云网关+连接器的架构如图4-12所示。其中,云网关相当于SDP或零信任的网关,客户端相当于SDP或零信任的客户端。连接器部署在企业网络中,起到连接企业网络和云网关的作用。为了简化问题,我们先忽略管控平台,具体的工作流程如下。
(1)连接器主动与云网关建立逆向隧道。
(2)客户端发起的流量先到云网关,再沿隧道的回路转发到连接器。
(3)连接器把流量转发给企业的业务系统。
用户访问业务系统的数据包先被发送到云网关,云网关再依据路由规则,将发给业务系统的包统统转给连接器。连接器在收到数据包后,通过本地网卡将数据包转给业务系统的服务器。连接器与云网关之间相当于建立了一条IPsec VPN隧道。
在这种架构下,企业不用为连接器对外映射IP地址和端口,连接器只要能上网就能建立隧道。此时,企业网络只有向外的连接,没有向内的连接。这样,攻击者就彻底被隔离在网络之外了。
图4-12
这里有一个细节:为什么连接器不需要对外映射IP地址和端口呢?简单来说,这是因为连接器是主动向外建立隧道的,连接器本身并不对外提供服务,云端与连接器的通信是沿着隧道的回路进行的。如果想不明白,那么可以想想我们平时在家上网的场景:家里的计算机是不对外映射IP地址和端口的,那么网站是怎么把信息发给计算机呢?计算机主动向网站发起连接,网站是顺着连接的回路把网页发下来的。
(1)企业不用对防火墙进行任何更改,连接器可以部署在任何地方。理论上,企业没有对外开放服务,不用备案。
(2)各种DDoS攻击和漏洞扫描都不可能发生。由于扫描工具里要填写目标IP地址,如果企业什么IP地址都不暴露,那么攻击者别说扫描端口了,连IP地址都不知道怎么填。这样,企业网络就相当于彻底隐身了。
这种模式既省心又安全,本质上是把风险转嫁到云端了。由于云端要对外映射IP地址,因此云端安全就显得至关重要。
当然,云端本身是个SDP网关,具备SPA机制。所以,云端虽然还要暴露IP地址,但是不会暴露端口,也是有安全保障的。
将连接器与SPA结合,企业网络相当于具备了两层防护,第一层是SPA隐藏端口,第二层是连接器不暴露IP地址。整体的安全性得到了保障,如图4-13所示。
图4-13
4-14
双层隐身架构可以不放在云端,完全部署在企业网络中。在这种部署方式下,零信任网关部署在企业的DMZ区,连接器部署在企业内网,如图4-14所示。
这种部署方式的好处是缩小了内网对 DMZ 区的暴露面。如果没有连接器,企业就要打通网关到每一个业务系统的连接通路,内网的业务系统都会暴露给零信任网关。应用了双层隐身架构后,流量全部由连接器转发,网关不用再与业务系统直连,只需让连接器访问网关即可,网关和业务系统不用打通,网络配置特别简单。
SPA 的安全性是极好的,但是在便捷性上有一个缺点——用户必须安装客户端。因为敲门是一个特殊的流程,计算机上的默认浏览器无法执行,所以必须有专门的客户端。一般终端的产品比较难运维,容易遭到用户排斥。
图4-15
下面介绍一种折中的方案,不用安装客户端也能实现一定的隐身效果。
在无端模式下,用户不用安装客户端,但需要打开一个Web形式的门户网页,门户网页来自管控平台。在默认情况下管控平台不隐身,只有安全网关是隐身的,如图4-15所示。
无端模式的具体工作流程如下。
(1)用户在Web门户网页上登录。
(2)登录后,零信任管控平台会通知安全网关,添加一条防火墙规则——对该用户的IP开放所需的端口。
(3)零信任管控平台有一个“IP地址开放规则”的定期回收程序。回收程序定期检查用户的会话是否存在,如果用户已经很长时间没有操作了,则清除该用户的端口开放规则。
简单总结一下,无端模式的原理就是,当用户登录时,零信任管控平台帮用户做了敲门的工作,用户可以实现正常访问,而攻击者无法连接安全网关。
无端模式也能实现隐身效果,但只有安全网关是隐身的。因为用户要在管控平台登录,所以管控平台始终是暴露的。整体来看,无端模式的用户体验好了,但是安全性差了。
无端模式更适用于无法强制要求其安装客户端的用户和场景。例如,第三方人员、外包团队、供应商访问内部业务系统。
隐身技术为企业带来的价值非常大,可以避免绝大多数的网络攻击、渗透测试。尤其是对于比较大的公司,内部有几百个系统,一个一个安装补丁、修复漏洞,效率很低,不如将统一入口隐身,先解决主要问题,再慢慢补漏洞。
正因为SPA的价值巨大,所以其安全性也备受关注。前文已经介绍了SPA的防破解、防篡改能力,下面将对SPA的安全能力进行总结。
(1)使用SPA后需要对外映射端口吗?一般的方案要映射,双层隐身架构不用映射,但连接器需要能上网。
(2)如果黑客捕捉到合法的SPA包进行重放攻击,那么能防住吗?SPA包中有随机数,可以防重放。
(3)SPA包可不可以伪造?SPA包做了加密,可以防伪造、防篡改。
(4)如果黑客获取了用户的账号和密码,并且下载了客户端,那么还能防吗?SPA过程需要验证加密证书,证书与设备绑定,所以只获取账号和密码及客户端是没用的。
(5)如果证书也泄露了,那么怎么防?这是一个重要的问题,如果证书泄露了,SPA就失效了,所以拼技术拼到最后,就是拼证书的保存机制,最佳的方式应该是与硬件结合。