SPA(Single Packet Authorization)单包授权是SDP中非常重要的一个概念和功能,它的目的简单地说就是让服务器在互联网中隐藏自己,不被攻击者发现。
举个简单的例子,这里把服务器比作在家的小孩子,正常用户比作小孩的妈妈,攻击者比作骗小孩的坏人。妈妈敲门,小孩总会回应,然后开门。而坏人敲门,情况则不一样了。
如果没有SPA的功能,情况如下:
坏人:你好呀,家里有人吗?
小孩:有人,你是谁呀?
坏人:我是送外卖的。
小孩:我只给我妈妈开门,你走吧。
坏人内心:这家有小孩,实施下一步骗术。
而开了SPA功能之后,情况如下:
坏人:你好呀,家里有人吗?
小孩内心:不是妈妈的声音,我不理它。
坏人:你好呀,家里有人吗?
坏人:……
坏人内心:这家没人。
目前很多的攻击行为都是从端口探测/扫描开始的,也就是尝试进行TCP握手。由于TLS等众多安全协议都运行在TCP连接建立之后,所以攻击者可以通过TCP握手发现服务器暴露的端口,从而进行下一步攻击行为。aTrust产品的SPA功能解决的就是这个问题,让攻击者扫描不到服务器端口,无法发现服务器的存在,从而将攻击行为拒之门外。
2、UDP SPA原理aTrust产品的SPA功能分为两个部分,一个是UDP SPA,另一个是TCP SPA。在aTrust SDPC的控制台,可以选择开启SPA(TCP SPA),以及是否进一步开启UDP SPA。UDP SPA的功能更直接地对应了上述SPA服务隐身的目的和原理。
aTrust服务器在开启UDP SPA功能之后,对攻击者进行服务隐身的基本流程如下:
上述流程示例中,aTrust服务器的业务端口为443。由于攻击者的IP并未在白名单中,因此aTrust服务器并没有回复攻击者的TCP握手,从而对攻击者隐藏了自己。
而安装并开启了aTrust SPA专属客户端的终端设备试图访问aTrust服务时,情况则如下:
可以看到,客户端首先给aTrust服务器的指定UDP敲门端口发送了特定的UDP敲门包。之后,服务端校验通过后,将客户端IP放入白名单中。待客户端对aTrust服务器的业务端口真正开始进行TCP握手时,服务端已经知道该IP不是攻击者IP,因此回复TCP握手包,建立TCP连接,进而与客户端开展下一步业务。这里的aTrust服务器可以是SDPC,也可以是proxy。 注意:UDP敲门端口和业务端口是两个独立的端口,一个用来专门接收UDP敲门数据包,一个用来提供业务服务。两者可以相同,也可以不同,没有直接的联系,需要特别注意。
注意:对于有效或非法的UDP敲门数据包,服务端都不会以包括UDP回包在内的任何方式进行回复响应。这是因为UDP敲门包是比较容易被截获的。如果攻击者对其他服务器进行重放攻击,服务器进行了回复,则服务器就失去了隐身的效果。
2.1 UDP敲门时机登录前
1. 托盘进程启动时,对所有SDPC进行敲门
2. 访问配置了SPA种子的SDPC地址时(建立TCP连接前),对SDPC地址进行触发性敲门
3. 访问配置了SPA种子的SDPC对应的免认证应用时(建立TCP连接前),对免认证应用对应的proxy进行触发性敲门
登录后
1. 保留登陆前【2】和【3】的触发式敲门
2. 在访问隧道资源之前,对proxy进行触发式敲门
3. 每一个敲门周期时间,对登录的SDPC和所有关联proxy进行触发式敲门
4. 选路前敲门
需要注意,上述所有的触发式的UDP敲门都有一个前提,那就是aTrust客户端必须已经启动(托盘进程存在)
2.2. 时间相关参数UDP敲门有两个时间相关的参数自动敲门周期和单次敲门持续时间。
单次敲门持续时间:1.此时间为单次敲门成功后,服务器对客户端放行的时间。超过持续时间后,如果客户端在线,会自动续期,如果客户端离线或者退出,则无法继续访问。
2.持续时间过短,会消耗服务器性能;持续时间过长,会有一定的安全风险。 建议持续时间设置在3分钟。默认情况下 单词敲门的持续时间为180s(可改,范围为20-3600s)
自动敲门周期:1.此周期为客户端登录成功后,继续定期敲门以续租服务器对客户端放通的时间
2.敲门周期过短,会消耗服务器性能,建议设置敲门周期时间小于敲门持续时间的一半自动敲门周期时间默认60s(可改,范围为-51800s)
注:修改后,需用户重新登录才可生效。即本身登录的用户不会生效,需在下次登录时才可生效。
举个例子,敲门持续时间设置为10分钟。PC1的IP是10.11.12.13。PC1安装了SPA aTrust客户端,并于12.00成功登录了SDPC,随后立刻注销登录,并且退出aTrust客户端,且杀死了aTrust进程,关闭了服务。到了12.10分的时候,PC1使用telnet连接SDPC地址,发现连接成功。使用浏览器访问SDPC地址,也是直接返回SSL连接错误(后面会提到,这是TCP SPA的错误):
也就是说,在持续时间内,攻击者可能利用短暂的窗口期进行攻击。因此,一般不要将UDP敲门持续时间设置得太长。但是设置太短也会有风险,一是对客户端和服务端的时间误差会更加敏感,可能导致敲门失败;二是敲门频率会相应增加,会增加服务端的压力。
UDP敲门周期和敲门持续时间的配置可以在aTrust客户端core进程日志中查看:
[2022-04-12 10:37:48.313][ 28100: 20500][ info][aTrustCore][sangfor::SdpcSession::updateUdpSpaConfig:2146]Got decrypted udp spa config form:https://www.wyxtest143.com/passport/v1/public/spaConfig?lang=zh-CN&needTicket=0&platform=Windows&clientType=SDPClient, content:{"guid":"9b35aff13745d489229dde11674826dc2f9c2b9d259b4180a6451c1cf3dfe714","challenge":"L9RzGpTCOhgViDYoJQ9q1iK875vZKzUM7uKzif0Ye+iioqNh0Fd37FhbgM+12dv3RKMK5e0rI7nTE8Z5EblXvBiSj79FQ7jHH/hyDxE1GAjPkCEW2Fc6mTV0Yt2UcmIHZkymA7CuNc+pvbeWWPaYxEwoUwf57WFfDKnvOt5WMZY=","udpSpa":{"durationTimeSecs":20,"periodTimeSecs":5},"proxyAddresses":["mp.weixin.qq.com:441","199.199.199.199:441","199.200.2.147:441","199.200.2.137:441","199.200.2.147:441","test.sangfor.com:441","199.199.233.233:441","172.22.24.13:441","dingfang.com:441"],"openDomain":[],"tpResource":[]}...... 搜索关键字periodTimeSecs即可,也就是敲门周期。durationTimeSecs是敲门持续时间。
3、TCP SPA原理 TCP SPA是在TCP三次握手成功并建立连接之后进行的。它在TLS协议的Client Hello握手包中的Extensions字段中增加了一个额外的字段,并附上了更具SPA种子(同UDP SPA的种子)算出的TOTP令牌值等信息。当服务端开启TCP SPA之后,服务端在TLS协商中会校验这个额外的字段。如果校验失败,服务端会终止TLS协商并返回错误。
注意事项和说明
1.启用UDP敲门,需同时将要隐藏的服务器端口在公网上做TCP和UDP协议的端口映射,否则将无法访问。
2.只勾选了<启用服务隐身>,而没有勾选<启用UDP敲门>的情况下,无法使用UDP敲门功能。即无法隐藏端口。
3.关闭SPA功能后,不支持单独开启UDP敲门。
4.UDP敲门暂不支持移动端,启用后,aTrust APP将无法使用。
5.集群从设备真实IP不支持SPA。
6.前置负载均衡场景不支持UDP SPA。
//区分两种:
一种是负载只是做了设备的映射关系(如单机设备映射的是设备实ip,集群设备映射的是集群IP)这种是可以的;
另外一种就是前置负载设备做了负载模式会将连接调度到不同aTrust设备,这种就不支持(主要的原因是:UDP敲门包需要连续敲门成功3次,如果前置负载分发到了不同的aTrust设备,就会影响UDP的敲门结果,导致无法成功)
7.服务端收到第一次成功敲门包和异常包暂不支持上传到审计中心(可以查看后台spad.log日志)。
8.不支持对控制台端口4433,SSH端口22和集群端口进行端口隐藏。
9.集群场景下端口隐藏,请将主从节点ip填入保护地址中。
10.启用UDP敲门后,已安装"安全专属客户端“的终端需升级至2.1.11以上的版本才能访问。
11.启用UDP敲门后,需确保终端时间和服务器时间相差小于5分钟才能访问。
12.服务端UDP敲门功能关闭,安全专属客户端仍然会发送UDP敲门包。
13.银河麒麟系统上通过安装器安装时获取不到SPA种子,需通过添加白名单的方式下发SPA种子。
14.关闭UDP敲门后sdp-spad服务会自动关闭,开启UDP敲门后sdp-spad会自动开启。
15.开启SPA后,安装SPA客户端连接sdpc失败时,请注意终端时间和服务器时间相差是否大于8个小时,清除浏览器缓存并重新打开portal或应用中心界面。
16.修改自动敲门周期后,需要用户重新登录才能生效。
17.开启UDP敲门,安装SPA客户端后,首次连接sdpc和登录可能会等待较长时间(10s左右)。
18.多地址多端口spa种子下发建议通过白名单方式,管理员分发spa专属客户端仅支持一个地址。