浅谈零信任SDP架构下的服务隐身设计
2021-01-22
来源:互联网安全内参
01概述
零信任最早源于 2004 年耶利哥论坛提出的去边界化安全理念,2010 年 Forrester 正式提出了“零信任”(Zero Trust,ZT)的术语。零信任安全的核心思想是“在默认情况下不应该信任网络内部和外部的任何人/设备/系统,需要基于认证和授权重构访问控制的信任基础”。2020年2月美国国家标准与技术研究院发布SP800-207:Zero Trust Architecture 草案第二版本,代表着零信任已经从理念走向工程实践甚至标准化。
软件定义边界SDP是由云安全联盟在2014年提出的新一代网络安全解决方案。SDP,也被Gartner称作零信任网络访问(ZTNA)。SDP是围绕某个应用或一组应用创建的基于身份和上下文的逻辑访问边界,SDP从架构设计上就只允许可信任的业务报文通过,同时丢弃不合法报文。一般来讲,在SDP架构下真实的后端服务是被隐藏的,客户端与众多的SDP边缘节点联动,使得合法报文知道如何进入SDP网络,恶意流量将被SDP边缘节点丢弃。
在整个SDP架构中受保护的资源是消失的,隐藏的,所以SDP也被称做“黑云”。SDP通过抗DOS Token 、流量加密、应用分段与隔离、客户端持续动态设备验证、访问行为可视、实时事件响应以及贯穿整个零信任模型的按需授权和最小权限原则可以有效地限制了攻击活动,极大地提高了攻击者的攻击成本。
本文主要描述基于SDP架构下的服务隐身。
02SDP架构下的服务隐身设计
SDP架构下保护的业务服务只允许被认为合法的报文进行访问,丢弃“非法”报文,从而实现了业务服务隐身。
图片来源于:
https://www.aqniu.com/wp-content/uploads/2020/03/%E5%9B%BE%E7%89%871w.png
SDP 架构分为三个部分:SDP Client、Controller、Gateway。所有的Client在访问资源之前,都要通过Controller服务对SPA单包验证和访问控制, 由Gateway对应用进行业务处理。本文描述的SPAD服务实际上包含了Controller和Gateway的功能,但本文仅描述Controller功能,所以可将SPAD认为是SDP的Controller服务。本质上来说SPA单包认证是预认证的一种, 其认证流程如下:
认证处理流程如下:
(1) 客户端发送一个签名的请求授权访问后端服务的数据包给SPA服务
(2) SPA服务对收到的请求授权包进行解包、验签等操作,对无效请求直接丢弃;对检查通过的设置防火墙访问规则并回复授权响应包给client。
SPAD可以看成是通信层的访问保护,主要在网络通信层保护防火墙之后的后端服务。SPA首包认证作为网络通信的授权认证手段,有效地防范未信任数据包的风险。
03服务隐身SPAD服务
SPAD对网络授权数据包的应用访问进行防火墙管控,从而达到控制网络访问的目的。
SPAD服务主要有如下技术特点:
无监听端口:使用XDP直接从网卡驱动层获取通信数据包,直接处理报文内容。扫描程序无法侦测到监听端口。
支持大网络流量处理:XDP技术性能非常高,可接近网卡带宽上限,特别是在抵御DDOS攻击方面有先天优势。
支持管理策略千万级别:使用源IP,目的IP,目的端口,协议 或 源 IP,服务标识(domain或者服务名)做hash管控网络,可支持千万策略级别。
更加安全的SPA首包认证协议:SPAD使用自定义SPA协议。通过使用个性化签名算法和报文加密算法,以及MAC算法,提高了安全性。
支持高可用集群部署:管理策略使用NoSQL、MySQL等存储,支持多节点集群部署。目前SPAD支持VIP模式高可用方案(Keepalived + VIP)。
SPAD网络控制组件架构如下图所示:
从上图可以看出,SPAD网络控制组件可以分为三层:
网络通信层:可使用UDP、TCP通信、也可以使用自定义协议。SPA一般选择使用UDP通信,因为UDP传输是无连接的,默认无须响应,这个特性使得SPA可以隐藏自己。
授权包的加解密以及签名验签:数据本身是有签名,加密算法密文以及防篡改MAC保护的。
防火墙网络策略规则管理: 对SPA授权认证通过的应用开放网络访问权限,添加防火墙的访问策略。一般网络策略默认设置时间生命周期(TTL),过期时访问策略会清除。
3.1
网络通信部分
负责网络通讯的服务应用容易被扫描器侦测,也容易被DDOS攻击,这在安全方面必须要考虑到。另外如果被识别出提供服务的端口,也会增加网络攻击的概率。因此SPA可考虑通过抓包方式直接拿到请求授权包。
目前主流网络抓包方式有以下:
XDP :全名是eXpress Data Path,是一种In-kernel fast (express) data path。其原理如下图:
详细信息见:https://docs.cilium.io/en/latest/bpf/
DPDK:DPDK is the Data Plane Development Kit that consists of libraries to accelerate packet processing workloads running on a wide variety of CPU architectures。
(详细信息见:https://www.dpdk.org/about/ 和
https://www.intel.cn/content/www/cn/zh/communications/data-plane-development-kit.html)
PF_RING:PF_RING is a Linux kernel module and user-space framework that allows you to process packets at high-rates while providing you a consistent API for packet processing applications
(详细信息见:https://www.ntop.org/products/packet-capture/pf_ring/)
PCAP:在计算机网络管理中,pcap(packet capture)由捕获网络流量的应用程序编程接口(API)组成。类Unix的系统主要是在libpcap库中实现pcap,而Windows系统则是使用名为WinPcap的libpcap端口。
(详细信息见:https://www.tcpdump.org/pcap.html 和 https://www.winpcap.org/)
以下是上述抓包方式在大流量高并发场景下的比较:
在做SPAD技术选型时,进行了大量的技术调研和技术评估,最终选择使用XDP技术实现网络抓包功能。
3.2
网络数据加解密以及验证身份部分
SPA请求授权包必须保证完整性和安全性,可参考以下主流算法实现自定义业务报文协议。
对称加密算法:加密和解密的两个过程使用相同的密钥,通过加密和解密函数对数据进行操作,从而达到加密数据和解密数据的目的。具体算法主要有DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法等。
公钥加密算法:通信双方共享各自的公钥,传输时使用对方的公钥对数据进行加密,接收方收到后,用自己的私钥对数据进行解密。公钥加密算法也被称为非对称加密算法,因为加密和解密使用不同的密钥。具体算法主要有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
Hash函数:散列函数,具有单向性。散列函数对消息进行摘要,并经过迭代,得到固定长度的输出。消息的一个字节的变化对Hash函数的输出都会有很大的影响。具体算法主要有SHA,MD5等
MAC:消息认证码,由Hash函数对消息进行摘要得到,由于Hash函数的特性,可以提供对消息完整性的验证,一般随消息一起发出。主要用于验证,防止信息被修改, 如:文件校验、数字签名、鉴权协议
SPAD在授权包协议设计时采用多种算法来保证了数据的完整性、保密性、安全性。在实践中也可以将业务认证和鉴权考虑进来,比如与IAM系统联动。
3.3
防火墙策略部分
防火墙按照实现方式可分为软件防火墙和硬件防火墙。
软件防火墙:主要有iptables firewalls on Linux (including firewalld as well on recent Fedora, RHEL, and CentOS systems);ipfw firewalls on FreeBSD and Mac OS X;pf on OpenBSD。
可实现软件防火墙技术的功能组件:XDP,Netfilter等
硬件防火墙
在方案比较时,对比发现软件防火墙有很大的优势,如成本低,操作简单,开发速度快等。在评估了各种软件防火墙后,SPAD决定选用XDP技术做防火墙功能控制。
04SPAD服务Q&A
为什么一般采用udp协议?
答:SPA一般选择使用UDP通信,因为UDP传输是无连接的,默认无须响应,这样就有很大优势,可通过drop授权不通过的数据包来隐藏自己;另外从安全角度讲,TCP更容易被攻击。
为什么采用无监听服务端口方式?
答:不监听任何端口的策略可以防范黑客攻击前的扫描侦测,从源头杜绝黑客对具体业务服务的攻击。无监听服务端口方式实现上需要SPAD直接在网络层抓包,直接解析UDP网络报文内容,不需要真正有应用服务监听网络端口。
为什么请求授权包要控制大小?
答:在网络传输中,TCP包传输都有MTU限制,一般网卡的MTU默认是1500。为了在单网络数据包中获取全部的SPA授权请求报文,所以必须要限制请求授权包的大小。当要支持多种网络协议时需要重点考虑。
为什么使用访问策略TTL?
答:为了减少安全风险,使用一次授权保持一定的TTL时间,过期后如需要访问,必须重新申请,这样更加安全。
为什么SPA服务和应用部署在一起?
答:和应用部署在一起的好处是对本机防火墙策略管理就可以控制网络数据包访问应用,这样会更加简单,更容易开发。
为什么采用自定义授权报文协议?
答:目前开源软件中采用的SPA授权请求与响应报文协议很难满足自身业务需求,特别是ToC业务,存在海量访问客户端,所以需要设计出更灵活,更安全的授权报文协议。
为什么授权报文协议中要有NAT网络标识字段?
答:对于NAT网络,多个子节点设备或服务器的外网IP地址相同,这样容易出现一个终端授权成功,其他同网络节点均可以访问的情况,所以必须要区分NAT内部设备或服务器。
为什么支持按照源IP分组的访问策略?
答:当通过CDN网络访问SPAD时,可能有多个源IP地址,需要将将该CDN网络作为一个Group进行访问策略管理,即管理访问策略时是对整个Group的所有源IP都做策略管控。同时在SPA首包认证协议中需要增加用户ID标识字段,由SPAD服务管理维护用户ID标识字段对应业务服务的访问状态。只有SPA授权请求包鉴权成功的用户Session状态,才允许访问对应的业务服务。另外SPAD需要根据CDN网络的IP动态变化维护Group内的源IP列表和访问策略变更。
总结:上述Q&A只是SPAD在技术方案上遇到的问题,由于每家企业需求不同,技术架构也不一定相同,以上内容仅供参考。