Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
fwknop — 单包授权 > 端口敲门 | Kitploit
工具/GitHubGitHub/mrash/fwknop
身份验证与授权防御工具加密/解密工具网络安全密码学身份验证
GitHubmrash/fwknop

fwknop

单包授权 > 端口敲门

查看仓库
1.4k2532个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

fwknop - 单包授权 (Single Packet Authorization)

简介

fwknop 实现了一种称为单包授权 (SPA) 的授权方案,用于强大的服务隐藏。SPA 只要求一个数据包,该数据包经过加密、不可重放,并通过 HMAC 进行身份验证,以便向隐藏在默认丢弃过滤规则的防火墙后面的服务传达所需的访问权限。SPA 的主要应用是使用防火墙丢弃所有尝试连接到 SSH 等服务的行为,从而使利用漏洞(包括 0-day 和未打补丁的代码)更加困难。由于没有开放端口,任何通过 SPA 隐藏的服务自然无法被 Nmap 扫描到。fwknop 项目支持四种不同的防火墙:Linux 上的 iptables、firewalld、以及跨 Linux、OpenBSD、FreeBSD 和 Mac OS X 的 PF 和 ipfw。此外还支持自定义脚本,使 fwknop 能够支持其他基础设施,如 ipset 或 nftables。

SPA 本质上是下一代端口敲击 (PK),但在保留其核心优势的同时解决了 PK 的许多限制。PK 的限制包括:通常难以防御重放攻击,通常无法可靠支持非对称密码和 HMAC 方案,并且只需在 PK 序列穿越网络时伪造一个额外的数据包即可轻松对 PK 服务器发起 DoS 攻击(从而让 PK 服务器认为客户端不知道正确的序列)。SPA 解决了所有这些缺点。同时,SPA 将服务隐藏在默认丢弃的防火墙策略之后,被动获取 SPA 数据(通常通过 libpcap 或其他方式),并实现标准的加密操作用于 SPA 数据包的身份验证和加密/解密。

由 fwknop 生成的 SPA 包采用先加密后验证的模式,利用 HMAC 进行认证加密。虽然 HMAC 的使用目前是可选的(通过 --use-hmac 命令行开关启用),但强烈建议使用,原因有三:

  1. 没有 HMAC,则除非使用 GnuPG,否则无法在 fwknop 中实现强加密认证,但即便如此仍应应用 HMAC。
  2. 加密后应用 HMAC 可防范针对 CBC 模式的密码分析填充预言攻击,例如 Vaudenay 攻击及相关伎俩(例如 SSL 中更近期的“Lucky 13”攻击)。
  3. fwknopd 守护进程验证 HMAC 所需的代码比解密 SPA 包简单得多,因此没有正确 HMAC 的 SPA 包甚至不会进入解密例程。

最后一点也是为什么即使使用 GnuPG 加密 SPA 包时仍应使用 HMAC 的原因:因为除非先通过 HMAC 检查,否则 SPA 数据不会传递给 libgpgme 函数。GnuPG 和 libgpgme 是相对复杂的代码库,因此通过 HMAC 操作限制潜在攻击者与此代码交互的能力有助于维持更强的安全态势。为 SPA 通信生成 HMAC 需要一个除正常加密密钥之外的专用密钥,两者都可以通过 --key-gen 选项生成。

fwknop 要么使用 Rijndael 分组密码对 SPA 包进行加密,要么使用 GnuPG 及其关联的非对称密码。如果选择对称加密方法,则加密密钥在客户端和服务器之间共享(详见 /etc/fwknop/access.conf 文件)。用于 Rijndael 加密的实际加密密钥是通过标准 PBKDF1 密钥派生算法生成的,并设置 CBC 模式。如果选择 GnuPG 方法,则加密密钥来自 GnuPG 密钥环。

使用场景

使用单包授权 (SPA) 或其安全性较差的表亲端口敲击 (PK) 的人通常会访问运行在部署了 SPA/PK 软件的同一系统上的 SSHD。也就是说,主机上的防火墙对所有传入的 SSH 连接采用默认丢弃策略,因此 SSHD 无法被扫描,但 SPA 守护进程会重新配置防火墙,暂时授予已验证的 SPA 客户端访问权限:

SPA-basic-access-SSHD "使用 SPA 访问 SSHD 的基本用法"

fwknop 支持上述功能,但更进一步,充分利用了 NAT(针对 iptables/firewalld 防火墙)。毕竟,重要的防火墙通常是网络之间的网关,而不仅仅是部署在独立主机上。此类防火墙上通常使用 NAT(至少对于 IPv4 通信)来为处于 RFC 1918 地址空间内的内部网络提供 Internet 访问,同时也允许外部主机访问内部系统上托管的服务。

由于 fwknop 与 NAT 集成,外部 Internet 上的用户可以通过 SPA 经由防火墙访问内部服务。这在现代传统网络中有大量应用,同时 fwknop 也支持云计算环境,例如亚马逊的 AWS:

SPA-Amazon-AWS-cloud "在亚马逊 AWS 云环境中的 SPA 使用方式"

用户界面

官方跨平台 fwknop 客户端用户界面 fwknop-gui(下载,GitHub)由 Jonathan Bennett 开发。支持大多数主要客户端端 SPA 模式,包括 NAT 请求、HMAC 和 Rijndael 密钥(尚不支持 GnuPG)、fwknoprc 配置段保存等。目前 fwknop-gui 可在 Linux、Mac OS X 和 Windows 上运行——以下是 OS X 上的截图: fwknop-gui-OS-X-screenshot "Mac OS X 上的 fwknop-gui" 同样,更新的 Android 客户端 也已提供。

教程

关于 fwknop 的全面教程可在此处找到:

http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html

功能特性

以下是 fwknop 项目支持的全部功能列表:

  • 在 Linux 上围绕 iptables 和 firewalld 防火墙、在 *BSD 和 Mac OS X 上围绕 ipfw 防火墙、在 OpenBSD 上围绕 PF 实现单包授权。
  • fwknop 客户端可在 Linux、Mac OS X、*BSD 和 Windows(Cygwin 下)上运行。此外,还有一个 Android 应用 用于生成 SPA 包。
  • 支持 Rijndael 和 GnuPG 两种方法用于 SPA 包的加密/解密。
  • 支持 HMAC 认证加密,适用于 Rijndael 和 GnuPG。操作顺序为先加密后认证,以避免各种密码分析问题。
  • 通过 SHA-256 摘要比较来检测和阻止重放攻击。也支持其他摘要算法,但默认使用 SHA-256。
  • SPA 包通过 libpcap 从网络上被动嗅探。fwknopd 服务器也可以从由独立网络嗅探器写入的文件(例如使用 tcpdump -w <file>)、iptables ULOG pcap 写入器、或在 --udp-server 模式下直接通过 UDP 套接字获取包数据。
  • 对于 iptables 防火墙,fwknop 添加的 ACCEPT 规则会在自定义 iptables 链中添加,并在可配置超时后删除,这样 fwknop 不会干扰系统上可能已加载的任何现有 iptables 策略。
  • 支持已验证 SPA 通信的入站 NAT 连接(目前仅支持 iptables 防火墙)。这意味着 fwknop 可以配置创建 DNAT 规则,以便您可以从开放的 Internet 访问运行在内部系统上(处于 RFC 1918 IP 地址)的服务(如 SSH)。此外还支持 SNAT 规则,这实际上将 fwknopd 变成了一个 SPA 认证网关,允许内部网络访问 Internet。
  • fwknop 服务器支持多用户,每个用户可以通过 /etc/fwknop/access.conf 文件分配自己的对称或非对称加密密钥。
  • 通过 https://www.cipherdyne.org/cgi-bin/myip 自动解析外部 IP 地址(当 fwknop 客户端在 NAT 设备后运行时很有用)。因为在此模式下,外部 IP 地址被加密在每个 SPA 包中,从而防止中间人 (MITM) 攻击——即内联设备拦截 SPA 包并仅从不同 IP 转发以试图获得访问。
  • 支持 SPA 包目标端口以及后续连接端口(通过 iptables NAT 能力)的端口随机化。后者适用于转发到内部服务的连接以及授予运行 fwknopd 的系统本地套接字的访问。
  • 与 Tor 集成(如 DefCon 14 演示所述)。注意,由于 Tor 使用 TCP 传输,通过 Tor 网络发送 SPA 包要求每个 SPA 包通过已建立的 TCP 连接发送,因此技术上这违反了“单包授权”的“单包”原则。但 Tor 提供的匿名性在某些部署中可能超过这种考虑。
  • 实现了一个带版本号的 SPA 通信协议,因此易于扩展协议以提供新的 SPA 消息类型,同时保持与旧版本 fwknop 客户端的向后兼容性。
  • 支持代表有效 SPA 包执行 shell 命令。
  • fwknop 服务器可以配置为对入站 SPA 包施加多种限制,这些限制超出加密密钥和重放攻击检测所强制执行的。具体包括:包年龄、源 IP 地址、远程用户、对请求端口的访问等。
  • fwknop 附带一个全面的测试套件,执行一系列测试以验证 fwknop 客户端和服务器组件是否正常工作。这些测试包括通过本地环回接口嗅探 SPA 包、构建临时防火墙规则并根据测试配置检查适当的访问、以及解析 fwknop 客户端和 fwknopd 服务器的输出以查找每个测试的预期标记。测试套件输出可以轻松匿名化以便通信给第三方进行分析。
  • fwknop 是第一个将端口敲击与被动操作系统指纹识别集成的程序。然而,单包授权提供了超越端口敲击的许多安全优势,因此端口敲击模式通常已被弃用。

许可证

fwknop 项目作为开源软件发布,遵循 GNU 通用公共许可证 (GPL v2) 或(由你选择)任何更高版本。最新版本可在以下位置找到: http://www.cipherdyne.org/fwknop/

当前状态

本 README 文件描述了 fwknop 项目截至 2013 年 7 月 2.5 版本发布时的当前状态。目前,我们实现了防火墙敲击操作库 libfko,以及 fwknop 客户端和服务器应用程序。该库提供了管理 fwknop 其他组件使用的单包授权 (SPA) 数据的 API 和后端功能。其他需要 SPA 功能的程序也可以使用它(参见 perl 目录中的 FKO perl 模块示例,python 目录中也有 python 绑定)。

升级

如果你正在从旧版本的 fwknop(包括最初的 perl 实现)升级,建议阅读以下链接,以确保顺利过渡到 fwknop-2.5 或更高版本:

http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html#backwards-compatibility

杂项

  • 关于 fwknop 的问题或评论将在 fwknop 邮件列表 上处理。
  • 对于静态分析,fwknop 使用 CLANG 静态分析器以及强大的 Coverity Scan 工具:

构建 fwknop

本发行版使用 GNU autoconf 来设置构建。请参阅 INSTALL 文件了解使用 autoconf 的一般基础知识。

有一些特定于 fwknop 的“configure”选项。它们(摘自 ./configure --help)如下:

root@kitploit:~
  --disable-client        不构建 fwknop 客户端组件。默认构建客户端。
  --disable-server        不构建 fwknop 服务器组件。默认构建服务器。
  --with-gpgme            支持使用 libgpgme 进行 gpg 加密
                          [默认=检查]
  --with-gpgme-prefix=PFX 已安装 GPGME 的前缀(可选)
  --with-gpg=/path/to/gpg 指定 gpgme 将使用的 gpg 可执行文件路径
                          [默认=检查路径]
  --with-firewalld=/path/to/firewalld
                          指定 firewalld 可执行文件路径
                          [默认=检查路径]
  --with-iptables=/path/to/iptables
                          指定 iptables 可执行文件路径
                          [默认=检查路径]
  --with-ipfw=/path/to/ipfw
                          指定 ipfw 可执行文件路径 [默认=检查
                          路径]
  --with-pf=/path/to/pfctl
                          指定 pf 可执行文件路径 [默认=检查
                          路径]
  --with-ipf=/path/to/ipf
                          指定 ipf 可执行文件路径 [默认=检查
                          路径]

示例:

./configure --disable-client --with-firewalld=/bin/firewall-cmd
./configure --disable-client --with-iptables=/sbin/iptables --with-firewalld=no

说明

从 Perl 版本的 fwknop 迁移

如果你当前正在使用 Perl 版本并计划迁移到此版本,需要注意以下几点:

  • 并非所有基于 Perl 的 fwknop 的功能特性都被移植到此实现中。我们认为保持 C 版本尽可能精简轻量很重要。大部分被省略的功能(如电子邮件警报)可以通过其他方式实现(例如,使用外部脚本监控日志文件并根据适当的日志消息发出警报)。

  • fwknop 配置和访问文件的指令和值存在一些差异。其中一些差异相当细微。你应该仔细阅读那些文件中的文档和注释。

给 fwknop 开发者的说明

如果你从 git 拉取此发行版,应运行 autogen.sh 脚本来生成 autoconf 文件。如果出现关于缺少目录或文件的错误,请尝试再次运行 autogen.sh。之后,当你想要重新生成配置时,可以运行 autoreconf -i。如果由于某些原因 autoreconf 无法正常工作,autogen.sh 脚本应该足够了。

fwknop 和 fwknopd 手册页的 nroff 源文件分别位于其各自的目录(client 和 server)中。这些 nroff 文件源自 'docs' 目录中的 asciidoc 源文件。详情请参阅 docs 中的 README。

下载工具