FWKNOP 介绍#
SDP 架构下保护的业务服务只允许被认为合法的报文进行访问,丢弃 “非法” 报文,从而实现了业务服务隐身。SDP 架构分为三个部分:SDP Client、Controller、Gateway。所有的 Client 在访问资源之前,都要通过 Controller 服务对 SPA 单包验证和访问控制, 由 Gateway 对应用进行业务处理。如下图所示:
本文中提到的 fwknop 实现了一种称为单包授权(SPA)的授权方案,用于隐藏服务。SPA 将单个数据包经过加密,不可重放,并通过 HMAC 进行身份验证,以便在传达到隐藏在防火墙后面的 SPA 的主要应用场景是防火墙来过滤一切 SSH 等服务流量,从而使漏洞的利用 (包括 0day 的和未打补丁) 变得更加困难。由于没有开放端口,因此无法使用 Nmap 扫描 SPA 隐藏的任何服务。fwknop 在 Linux 上支持 iptables 和 firewalld,在 FreeBSD 和 Mac OS X 上支持 ipfw,在 OpenBSD 上支持 PF 和 libpcap。
SPA 通过减少暴露的服务端口,以及使用动态、单一数据包进行授权,增加了安全性,使得攻击者更难以发现和利用潜在的漏洞。这与零信任模型的理念相符,即不信任任何内外网络,通过有效的身份验证和授权来保护资源。
环境介绍 & 配置#
使用Ubuntu 20.04
环境进行搭建ubuntu 镜像下载地址 点击下载,依赖源为清华源镜像
网络地址规划 & 系统密码:
主机 | 地址 |
---|---|
Server | 192.168.31.211 |
Client | 192.168.31.37 |
Ubuntu 换源
sudo su
sudo vim /etc/apt/source.list
#将下文写入 并保存
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ focal-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
sudo apt update
fwknop 源码下载 & 编译 & 安装#
从 github 下载程序,首先安装前置工具
sudo apt install git make gcc libpcap gawk mawk libpcap-dev
使用 git 命令将代码下载到本地
git clone https://github.com/mrash/fwknop.git
cd fwknop
chmod +x configure
./configure --prefix=/usr --sysconfdir=/etc --disable-client # 这一步用来检查依赖安装是否完整
如图这一步即为成功
继续编译程序,注意需要使用root
权限来运行程序
sudo make
sudo make install
which fwknopd #如果能成功找到文件代表安装成功
配置 fwknop 服务端#
fwknopd.conf
需要配置的信息为网卡名称 在 40 行的位置
PCAP_INTF ens33
access.conf
需要配置的敲门规则,以及客户端的 token,生效时间等等
key 之类的东西先不管,会在客户端进行生成
SOURCE ANY
OPEN_PORTS tcp/22
KEY_BASE64 TxpMVCiWRxc6IUR0rmABy2jKTDnI3SFa1MRD8fuOtgc=
HMAC_KEY_BASE64 mm+lPMq6WY8QHOcZdJ80XmDlNbWw+7zOJB87uw5wf9ShkgPiykxXDgPUeA+X6UlUF6Oa3MTEcSR0GMUZjm6sJQ==
FW_ACCESS_TIMEOUT 20
# If you want to use GnuPG keys then define the following variables
#
#GPG_HOME_DIR /homedir/path/.gnupg
#GPG_DECRYPT_ID ABCD1234
#GPG_DECRYPT_PW __CHANGEME__
FW_ACCESS_TIMEOUT 设置 20 表示敲门,门开会保持 20s,20s 过了以后,门关闭
开启与关闭
sudo fwknopd start 启动服务
sudo fwknopd -S 查看服务运行PID
kill -9 [pid] 结束进程
安装客户端验证服务成功#
sudo apt install fwknop-client
成功安装之后 使用如下命令生成验证信息
fwknop -A tcp/22 -a 192.168.31.37 -D 192.168.31.211 -p 62201 -P udp --key-gen --use-hmac --save-rc-stanza
-a 后为客户端 ip,-D 后面为服务器 ip,-p 后为服务器监听 SPA 包的端口,-P 后为发送的 SPA 包的协议,一般采用 UDP 包。
执行后生成了文件.fwknoprc
文件中有 key,将 key 放入access.conf
配置信息
通过iptales
封禁 22 端口,这一步的意义是手动关闭 22 端口 ,在敲门之后程序会创建一个 iptables 规则,放行 22 端口
sudo iptables -I INPUT 1 -i ens33 -p tcp --dport 22 -j DROP
sudo iptables -I INPUT 1 -i ens33 -p tcp --dport 22 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
使用端口扫描工具进行测试,效果如下图
打开客户端工具进行敲门
wknop -n 192.168.31.211
验证成功
观察 iptables 的变化 敲门前
敲门后
可以看到客户机的用户名 以及创建一条 iptables 规则放行 ssh 端口
总结与展望#
本文档详细介绍了 fwknop 环境搭建的全过程,从解释 fwknop 单包授权(SPA)的概念开始,阐释了其在安全动态端口敲门(SDP)架构中的重要作用。文中详尽指导了如何在 Ubuntu 20.04 系统上进行环境配置,包括网络规划和软件包源的更新。同时,还介绍了如何从 GitHub 下载 fwknop 源代码并进行编译安装,以及如何配置 fwknop 服务端,包括设置网络接口、敲门规则和客户端令牌,最后还涉及了客户端的安装和服务运行的验证过程。
然而,fwknop 作为网络安全工具存在问题。截至最新版本 2.6.11-pre1(2019 年 12 月发布)后,代码长期未更新。由于使用 C 语言,Fwknop 其面临跨平台能力不足、兼容性问题和内存漏洞风险,如 CVE-2012-4434、CVE-2012-4435、CVE-2012-4436 所示。同时美国国家安全局已建议避免使用 C/C++ 软件,强调更安全编程语言的需求。
展望未来,网络安全领域的发展有望引入更先进的技术,如自主可控的零信任网络隐身技术 NHP(Network Hiding Protocol)。NHP 技术通过更加严密的安全机制和智能化的管理,能够有效地提高网络的隐蔽性和抵御攻击的能力。这种技术在未来可能会成为网络安全的重要发展方向,尤其是在应对日益复杂的网络威胁和提升系统的整体安全性方面,NHP 展现出巨大的潜力。通过引入这样的技术,我们可以期待一个更加安全、可靠的网络环境。
附录#
[1] Fwknop 的 Github 仓库地址:https://github.com/mrash/fwknop
[2] Fwknop 的官方支持文档:http://www.cipherdyne.org/fwknop/
[3]CVE-2012-4436:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-4436
[4]CVE-2012-4435https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-4435
[5]CVE-2012-4434:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-4434
[6] Fwknop 相关 CVE 漏洞分析文章:https://ioactive.com/wp-content/uploads/2018/05/Multiple_Security_Vulnerabilities_in_Fwknop.pdf