概况
随着零信任概念的越来越火热,产业界也都在考虑如何将零信任的理念落地到实践中。这其中SDP推动零信任的实践路上走出了一大步,所谓SDP又称软件定义边界,理论上来说可以替代传统的物理边界。SDP边界之间自有一套自己的认证和授权体系,与传统的通过账号密码认证不同。在这众多认证和授权体系当中,我们有必要了解一下SPA即单包认证的思路和实践
SPA/PK是什么
Port Knocking[PK]:字面意思指“敲端口”,它可以通过设置一系列规则动态的调整防火墙的策略或执行特定命令。它与SPA最大的区别在于PK的认证消息在packet header中传输,而SPA则在packet data。
Single Packet Authorization[SPA]:即单包认证,和PK的功能大致是相似的,但由于其认证消息存放在Packet data中,意味着可以传输更多的消息、并加强其安全性。
SPA实践之fwknop演示
接下来演示如何通过fwknop隐藏ssh服务,以及如何通过fwknop进行认证从而登录ssh服务
1. 环境要求
fwknop-client:ubuntu16,192.168.97.162
fwknop-server:ubuntu18,192.168.98.217
依赖:iptables;libfko;libgpgme;libpcap
依赖安装,不同系统的依赖名有所不同,可通过apt search xxx 确定依赖名。iptables ubuntu自带,无需安装
apt-get install libfko2
apt-get install libgpgme11
apt-get install libpcap0.8
在192.168.97.162上安装fwknop-client
apt-get install fwknop-client
fwknop -V 查看客户端版本,若有显示,说明安装成功
在192.168.98.217上安装fwknop-server
apt-get install fwknop-server
fwknopd -V 查看服务端版本
2. fwknop配置
- fwknop 客户端配置【192.168.97.162】
fwknop-client客户端执行
fwknop -A tcp/22 -a 192.168.97.162 -D 192.168.98.217 --key-gen --use-hmac --save-rc-stanza
相关信息会写入在/home/username/.fwknoprc,执行
grep KEY /root/.fwknoprc
获得相关的KEY_BASE64以及HMAC_KEY_BASE64
KEY_BASE64 vyJbj2TmFLZvCBOBq07Uo1qgxMIDb4LvWyU7JhN4eJw=
HMAC_KEY_BASE64 YQTWkgkFKH2e/5x/mO4KcOgga9fU68u/z+gC9Qt1i+rW/xYC5U8FG6vA6Ys7kiV6vr6Aj5DcA6He7qZJ/gU3gQ==
- fwknop 服务端配置【192.168.98.217】
首先启动ssh 服务
service ssh start
编辑/etc/fwktop/access.conf
将客户端生成的key添加该文件中,内容如下
REQUIRE_SOURCE_ADDRESS Y
KEY_BASE64 vyJbj2TmFLZvCBOBq07Uo1qgxMIDb4LvWyU7JhN4eJw=
HMAC_KEY_BASE64 YQTWkgkFKH2e/5x/mO4KcOgga9fU68u/z+gC9Qt1i+rW/xYC5U8FG6vA6Ys7kiV6vr6Aj5DcA6He7qZJ/gU3gQ==
配置iptables关闭22端口
iptables -I INPUT 1 -i ens33 -p tcp --dport 22 -j DROP
iptables -I INPUT 1 -i ens33 -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
网卡名根据fwknop服务端自己修改
fwknopd --fw-list-all 查看防火墙规则
启动fwknopd服务
fwknopd -R 重启服务
fwknopd reload 若重启失败则重载
fwknopd -S 查看fwktopd服务状态
- 效果演示
nmap 扫描22端口,可以看到端口被过滤,这是由于防火墙规则原因
nmap -p -Pn 192.168.97.162
fwknop -n 192.168.98.217 进行fwknop认证
nmap -p -Pn 192.168.97.162
可以看到端口重新开放,可以正常进行ssh连接,大约端口开放30s左右,就会重新关闭,在30s之间已经建立的连接则不会阻断
fwknop流量简析
- 首先查看fwknopd的服务端防火墙规则
可以看到,只有2条规则,一条指定阻断所有到达22端口的流量,一条指定对已经连接的22端口流量作放行,不阻断
- spaclient客户端进行认证,同时注意抓包
fwknop -n 192.168.98.217
可以看到客户端向服务端62201端口发送udp认证流量,服务端认证之后通过ping探测客户端是否存活
认证的Packet data经过加密
端口扫描确认此时端口已开放
- fwknop服务端查看防火墙策略
可以看到,此时fwknopd创建了一条防火墙规则,允许来自fwknop客户端的ip连接22端口,该规则大约在30s之后失效
总结
- 无论是PK还是SPA,其主要是通过认证或特定的访问规则进而动态的控制系统防火墙进行端口资产的管理。
- PK/SPA均可以实现端口资产的隐藏,即灯下黑
- 在身份认证的配置上,fwknop的受信身份凭证不是服务端下发的。从凭证生成的命令看,只涉及到客户端ip,并没有涉及身份的其他要素,是否可能存在盗用的危险?需要进一步了解
- 目前的理解看,spaclient为受信客户端,spaserver为控制服务端。spaclient的端口资产是否可以被保护以及spaserver是否可以进一步保护其它客户端而不是其本身,需要进一步确认
- 在认证成功的30s内,是否存在伪造客户端ip,进行登录的可能性?
参考链接
fwknop手册:http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html
Port Knocking实现参考:
https://www.cnblogs.com/xiaoxiaoleo/p/8523322.html