于欣越,孙 刚,张亚伟
(1.中国电信股份有限公司安徽分公司,安徽 合肥 230000;2.德思信息科技(南京)有限公司,江苏 南京 210000)
过去企业IT 基础设施局限在企业自建或租赁的“机房”内,企业用户或合作伙伴都是通过传统的企业“内网”访问企业的业务系统,企业的IT架构是“有边界”的。在业务上云和用户开始使用自带设备(Bring Your Own Device,BYOD)[1]移动办公的大背景下,企业IT 基础设施与用户办公的内外边界变得模糊,传统安全边界开始慢慢消失,企业IT 架构正在从“有边界”向“无边界”进行过渡。传统的网络安全手段已经不能满足云时代和移动办公时代企业所需的安全防护以及高效的访问要求,零信任安全架构模型应运而生。零信任网络安全架构打破了传统的边界防护思维,从以往的以网络防护为中心转变为以身份(人、设备、应用)为中心;最小化权限访问控制,默认不信任网络内部和外部的任何人、设备或网络,持续监控所有连接的可疑行为。
零信任(Zero Trust,ZT)安全的核心思想是:打破旧式边界防护思维,从传统的以网络为中心转变为以身份为中心进行最小权限访问控制[2]。软件定义边 界(Software-Defined-Perimeter,SDP)安全模型作为零信任的最佳实践,由国际云安全联盟在2013 年提出,也被Gartner 定义为零信任网络访问零信任网络接入(Zero Trust Network Access,ZTNA)。
SDP 是围绕某个应用或一组应用创建的。基于身份和上下文的逻辑访问边界,SDP 从架构设计上就只允许可信任的业务报文通过,同时丢弃不合法报文。一般来讲,在SDP 架构下真实的后端服务是被隐藏的:客户端与众多的SDP 边缘节点联动,使得合法报文知道如何进入SDP 网络,恶意流量将被SDP 边缘节点丢弃,把应用资源从公共视野中消除,从而显著减少攻击面[3]。
SDP 作为零信任的最佳实践落地技术架构,在“移动+云”的时代背景下,旨在通过网络隐身技术,为企业构建起一个云安全边界,确保只有合法的身份、设备和网络环境才能接入,对其他工具完全不可见,由于看不到目标,因此有效地规避了各种安全风险。同时,SDP 还有一个很重要的零信任机制,就是在访问过程中对用户行为持续进行安全等级评估,并对风险行为进行动态控制,从而有效保护企业的数据资产的安全。
传统的网络接入控制是先接入再认证,由于端口暴露在互联网上,很容易遭受安全攻击,从而产生各种安全威胁。零信任SDP 安全模型跟传统的网络接入控制模型不同,通过网络隐身技术实现先认证后连接,端口不暴露在互联网。同时,采用三角架构,管理控制平面与传输数据平面分离,实现更安全的接入管控,并且在云环境下实现系统的灵活可扩展。
如图1 所示,零信任SDP 安全模型由3 部分组成[4]:SDP 管控平台、SDP 网关和SDP 客户端。该模型采用三角架构,SDP 客户端发起连接请求,SDP 管控平台认证客户端请求,并控制SDP 客户端与SDP 网关建立数据通道。
图1 SDP 架构
SDP 客户端通过敲门技术携带认证信息,包含用户名、密码、终端信息、网络环境等。SDP 控制器对这些认证信息组合的多因素身份进行验证,向客户端返回SDP 网关列表及权限列表。
SDP 管控平台用来对接入的SDP 客户端进行身份验证,管理SDP 网关。管控平台自身具备安全策略管理、日志审计等功能,能够动态管控用户的认证和访问行为,以及与企业已有的身份管理、态势感知等系统对接。
默认情况下,SDP 网关拒绝一切连接请求,只有管控平台下发认证策略后,才动态接受指定SDP客户端的连接,通过加密传输的方式代理SDP 客户端和应用的数据通信,同时根据管控平台下发的控制策略,管理通信过程。
网络隐身作为零信任SDP 最关键的技术之一,其目标之一是克服传输控制协议/互联网协议地 址(Transmission Control Protocol/Internet Protocol Address,TCP/IP)开放和不安全的基本特性。该特性允许“先连接后认证”,而使用SDP 架构的应用被隐藏在SDP 网关之后,实现“先认证后连接”,从而只有被授权的用户才能可靠地访问,而未授权用户则看不到这些服务。
单包授权(Single Packet Authorization,SPA)是实现SDP 网络隐身的核心网络安全协议。在允许访问控制器、网关等相关系统组件所在的网络之前先验证设备和用户身份,实现零信任“先认证,再连接”的安全模型理念。SPA 包含包括请求方的IP地址等在内的连接请求的信息,在单一的网络信息中被加密和认证,通过配置默认丢弃(Default-Drop)的防火墙策略使保护的服务对外不可见。SPA 的目的是允许服务器防火墙隐藏起来并被默认丢弃。该防火墙系统应该丢弃所有TCP 和用户数据报协议(User Datagram Protocol,UDP)数据包,不回复连接尝试,从而不为潜在的攻击者提供任何关于该端口是否正被监听的信息。
用户尝试访问时,先验证用户的身份、设备和网络信息,然后允许用户网络访问零信任系统组件管控平台和SDP 网关,最后用户才被允许访问该服务。所以,SPA 对于SDP 不可或缺,用于在客户端和控制端、网关和控制器、客户端和网关等之间的连接中通信。
SPA 实现原则:
(1)数据包必须被加密认证;
(2)数据包必须自行包含所有必要的信息,单独的数据包不被信任;
(3)生成和发送数据包必须不依赖于管理员或底层访问权限,不允许篡改原始数据包;
(4)服务器必须尽可能无声地接收和处理数据包,不发送回应或确认。
具体实现原理如图2 所示。
图2 SDP 网络隐身原理
SDP 架构下保护的业务服务只允许被认为合法的报文进行访问,丢弃“非法”报文,从而实现了业务服务隐身。SPA 认证流程如图3 所示。
图3 SPA 认证流程
认证处理流程如下:
(1)客户端发送一个签名的请求授权访问后端服务的数据包给SPA 服务;
(2)SPA 服务对收到的请求授权包进行解包、验签等操作,对无效请求直接丢弃;对检查通过的,设置防火墙访问规则并回复授权响应包给合法客户端。
SPA 可以看做通信层的访问保护,主要在网络通信层保护防火墙之后的后端服务。SPA 首包认证作为网络通信的授权认证手段,有效地防范未信任数据包的风险。
SPA 对网络授权数据包的应用访问进行防火墙管控,从而达到控制网络访问的目的。SPA 服务主要有如下技术特点。
(1)无监听端口:使用快速数据路径(eXpress Data Path,XDP)直接从网卡驱动层获取通信数据包,直接处理报文内容。扫描程序无法侦测到监听端口,这样可以防范黑客攻击前的扫描侦测,从源头杜绝黑客对具体业务服务的攻击。无监听服务端口方式只需要SPA 直接在网络层抓包,直接解析UDP 网络报文内容,不需要真正拥有应用服务监听网络端口。
(2)支持大网络流量处理:XDP 技术性能非常高,可接近网卡带宽上限,特别是在抵御DDoS攻击方面有先天优势。
(3)支持千万级别管理策略:使用源IP、目的IP 和目的端口,通过服务标识做Hash(哈希)算法来管控网络,可支持千万级别管理策略。
(4)更加安全的SPA 首包认证协议:SPAD使用自定义SPA 协议。通过使用个性化签名算法和报文加密算法,以及MAC 算法,提高了安全性。
(5)支持高可用集群部署:管理策略使用NoSQL、MySQL 等存储,支持多节点集群部署。目前SPAD 支持VIP 模式高可用方案(Keepalived +VIP)。
SPA 网络控制组件架构如图4 所示。
图4 SPA 网络控制组件架构
从图4 可以看出,SPA 网络控制组件可以分为以下3 层。
(1)网络通信层:可使用UDP、TCP 通信,也可以使用自定义协议。SPA 一般选择使用UDP通信,因为UDP 传输是无连接的,默认无须响应,可通过drop 授权不通过的数据包来隐藏自己,这个特性使得SPA 可以隐藏自己。另外从安全角度讲,TCP 更容易被攻击。
(2)授权包的加解密以及签名验证:数据本身包含签名、加密算法密文以及防篡改MAC 保护。
(3)防火墙网络策略规则管理:对SPA 授权认证通过的应用开放网络访问权限,添加防火墙的访问策略。一般网络策略默认设置时间生命周期(Time To Live,TTL),过期时访问策略会清除。
3.2.1 网络通信
负责网络通信的服务应用容易被扫描器侦测,也容易被DDoS 攻击,这在安全方面必须考虑到。另外如果被识别出提供服务的端口,也会增加网络攻击的概率。因此SPA 可需要通过抓包方式直接拿到请求授权包。
目前主流网络抓包方式有以下4 种。
(1)XDP:全名是eXpress Data Path,是一种内核快速表达数据路径方法。
(2)DPDK(Data Plane Development Kit):DPDK 是数据平面开发套件,由多个库组成,可提高在各种CPU 架构上运行的数据包处理工作量。
(3)PF_RING:PF_RING 是一个Linux 内核模块和用户空间框架,可以高速率处理数据包,同时为数据包处理应用程序提供一致的API。
(4)PCAP:PCAP 由应用程序编程接口组成,通过这种高层次的接口来捕获网络流量。PCAP 也支持把捕获的数据包保存为本地文件并从本地文件读取信息。
上述抓包方式在大流量高并发场景下的比较情况,如表1 所示。
表1 网络抓包性能
3.2.2 数据加解密及验证
SPA 请求授权包必须保证完整性和安全性,可参考以下主流算法实现自定义业务报文协议。
(1)对称加密算法:指加密和解密使用相同密钥的加密算法。对称加密算法用来对敏感数据等信息进行加密,常用的算法包括DES、3DES、AES、DESX、Blowfish、RC4、RC5、RC6。
(2)公钥加密算法:指加密和解密使用不同密钥的加密算法,也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。常见的非对称加密算法:RSA、DSA(数字签名用)、ECC(移动设备用)、Diffie-Hellman、El Gamal。
(3)Hash 函数:是一种单向算法,用户可以通过Hash 算法对目标信息生成一段特定长度的唯一的Hash 值,却不能通过这个Hash 值重新获得目标信息。因此Hash 算法常用在不可还原的密码存储、信息完整性校验等。常见的Hash 算法包括MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1。
3.2.3 防火墙策略
通过防火墙安全策略可以控制内网访问外网的权限、控制内网不同安全级别的子网间的访问权限等。同时也能够对设备本身的访问进行控制,例如限制哪些IP 地址可以通过Telnet 和Web 等方式登录设备,并且控制网管服务器、NTP 服务器等与设备的互访等。
SDP 通过网络隐身技术(如图5 所示)可有效减少受攻击面,缓解或者彻底消除多项安全威胁、风险和漏洞[5]。
(1)系统和应用程序漏洞
SDP 显著减少攻击面,通过将系统和应用程序的漏洞隐藏起来,对于未授权用户不可见。
(2)账号劫持
基于会话cookie 的账户劫持被SDP 完全消除。如果没有预先认证和预先授权,并且携带适当的SPA 数据包,应用服务器会默认拒绝来自恶意终端的网络连接请求。因此,即使网络请求中携带被劫持的会话cookie,也不会被SDP 网关准入。
(3)数据泄露
SDP 通过添加预验证和预授权层来减少公开暴露的主机的攻击面,实现服务器和网络的安全性的“最小访问权限”模型,从而有助于减少数据泄露的许多攻击方式。
(4)DDoS 拒绝服务
SDP 架构中的单包授权(SPA)技术使得SDP控制器和网关对阻止DDoS 攻击更有弹性。SPA 与典型的TCP 握手连接相比可花费更少的资源,使服务器能够大规模处理、丢弃恶意的网络请求数据包。与TCP 相比,基于UDP 的SPA 进一步提高了服务器的可用性。
图5 网络隐身安全能力
目前,开源社区中发布了一个实现SPA 实现单包授权技术的方案Fwknop。该技术实现了只通过一个加密的UDP 数据包来传达各种信息,且该技术兼容目前主流操作系统中的防火墙,如最常用的iptables。通过在客户端封装Fwknop,将单个携带认证信息的UDP 数据包进行非对称加密,并发送到Fwknop 服务端进行验证,同时,支持对UDP 数据包的认证信息进行多重因子的验证,包括用户信息、设备信息、网络环境等。
单个或多个应用服务隐藏于Fwknop服务之后,部署Fwknop 服务的主机防火墙默认拒绝一切数据包的连接,丢弃一切数据包。然后通过libpcap 从物理网卡上被动地嗅探Fwknop 客户端发出的单个UDP 数据包。
封装Fwknop 的客户端向Fwknop 服务端发送单个UDP 的认证数据包,Fwknop 服务端嗅探到合法的Fwknop 客户端发送过来的数据包后,暂时授予被动认证的Fwknop 客户端的访问权限。即向主机上相应的iptables 链中添加该主机对相应服务的accept 规则,实现授信终端的接入。
移动互联网时代,在云化的大背景下,随着企业的数字化转型升级,新技术态势下的网络安全威胁和风险不断涌现,基于传统边界安全解决方案难以应对。基于零信任安全模型的软件定义边界(SDP)架构应运而生。SDP 破除传统安全防护思维,通过在云上建立起虚拟的网络安全边界,帮助企业能够快速、安全上云,加速各行各业的数字化进程,具有非常重要的战略意义。零信任安全作为一种颠覆传统安全边界思维的策略,对传统安全防护机制的革新不是一蹴而就的,需要结合企业的数字化转型规划和业务发展规划。必须基于企业现有条件,通过确立愿景、制定规划、运用合理的技术手段,分步骤稳妥地进行零信任实践,最终实现零信任安全体系架构建设。