零信任SPA端口敲打

差不多2020年9月份研究ATT&CK的时候,做规则覆盖能力,遇到了端口敲击(Port Knocking,PK),当时我设计了检测方案,但是没有做实验来验证,也没有列入开发计划,直到今天2021年2月研究零信任的时候,再次碰到了PK,只不过这次换了个马甲,叫SPA(单包授权认证),终于下定决心来一探究竟~

SPA单包认证,通过wireshark抓包,发现是通过UDP报文敲打服务端的62201端口,然后那个ICMP报文是端口不可达,这是UDP的传输特性,因为它没有三次握手,所以需要借助ICMP来报信,咳咳,这是一个题外话,非常基础的网络知识,告诉客户端62201端口不可达,经过这么一个敲击动作,服务端就对客户端开放了22端口~

fwknop 敲打的UDP载荷(加密内容),就是一个授权认证的过程,这篇文章暂不细细品味,之后,服务端会开放22端口30秒,如果在这个窗口时间里面建立TCP连接,那么就会一直对客户端开放22端口,如果客户端没有建立连接,那么30秒后,服务端22端口就自动进入filtered状态 ~

实验环境:

  • 服务端:ubuntu18(192.168.160.137)
  • 客户端:ubuntu16(192.168.160.136)

安装fwknop:

  • 服务端
apt-get install fwknop-server
  • 客户端:
apt-get install fwknop-client

配置fwknop:

  • 客户端
fwknop -A tcp/22 -a 192.168.160.136 -D 192.168.160.137 --key-gen --use-hmac --save-rc-stanza

掉落物品

root@ubuntu:/home# grep KEY /root/.fwknoprc
KEY_BASE64                  n1Uv4xKOIJ+enb3EK/xFKU4zEkVh6Bq9BjTcEFn20jM=
HMAC_KEY_BASE64             dA1/7pnIS2tqIr2MVzCtUGj9Pk1Z/Spj/RwekYLcPZtlb4jNwFPhSAx93Yq+iwAdTSi7qA0v6Blhg9BumFlgtQ==
  • 服务端

将掉落的物品写入到 /etc/fwknop/access.conf

修改 /etc/fwknop/fwknopd.conf 网卡信息,改成自己的网卡

配置防火墙

  • 关闭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
  • 查看防火墙规则命中情况
fwknopd --fw-list-all

启动fwknopd 服务

  • 启动fwknopd
fwknopd service start
  • 查看fwknopd 运行状态
fwknopd -S

效果验证

在客户端直接nmap扫描端口,发现端口22受保护了

进行端口敲打SPA认证

fwknop -n 192.168.160.137

然而,敲烂了,22端口依然没有打开,像不像爱情???

仔细检查了一遍全流程,发现我把客户端掉落的物品,贴错了,尴尬~

复制粘贴也能错,唉,无语了,修改之后,再次敲打端口,成功了~

本篇完,谢谢大家~