fwknop入门文档

fwknop


目录

前言

随着网络信息安全越来越被人们所重视,无论是企业还是个人隐私数据关系到切身利益,fwknop提供了端口权限控制的安全技术,本文主要介绍了fwknop的基础特性。


一、fwknop是什么?

fwknop实现了基于单包认证(SPA)的强服务隐藏授权协议,SPA只需要一个加密的单包,无需重发,通过哈希码(HMAC)授权,就能和目标服务进行信息传输,目标服务常常位于防火墙后。SPA主程序被用来抵御黑客破解那些有零天问题或者未打补丁的代码。因为没有开放端口,任何服务都被SPA密封,自然就不会被网络映射器扫描到。fwknop支持四种防火墙:iptables, firewalld, PF, 以及在Linux、OpenBSD、FreeBSD、Mac OS X系统上部署的ipfw。而且fwknop还支持自定义脚本, 所以fwknop可以支持其他的系统框架如ipset、nftables。

SPA本质是下一代通用端口碰撞技术(PK),虽然当前的PK技术相比较其他安全机制拥有明显优势, 但它仍存在一定的局限性,局限性表现在:难以抵御重发攻击,无法稳定支持非对称加密和哈希加密协议,通过在发送到PK服务器的消息队列中插入伪造的消息包就可以轻易的用DOS攻击PK服务器(因此让PK服务器误以为客户端无法识别消息队列)。这些缺陷可以通过SPA来解决。SPA会把服务隐藏到default-drop规则的防火墙后面,而且被动的获取SPA数据(通常是用libpcap或者其他方法),再者SPA的消息包授权及加密解密都遵循标准的密码算法。

fwknop生成SPA数据包的过程利用了哈希算法进行认证加密, 虽然目前哈希算法只是一种可选项, 但是我强烈建议用它, 理由有三:

1.如果不用哈希算法,要想达到稳定有效的认证几乎不可能, 除非用GnuPG,但即使你用GnuPG,还是要用到哈希算法。

2.加密后的哈希码可以抵御基于密码分析的CBC模式填充oracle攻击, 如Vaudenay攻击及类似的欺骗技术(最近针对SSL的“Lucky 13”攻击)。

3.fwknopd后台进程用来校验一个哈希码是否合法的代码远比解密一个SPA数据包的代码简单, 所以如果要解密不带哈希码的SPA数据包甚至都不能用常规的算法。

最后一个理由就是为什么SPA数据包用了GnuPG做加密但还是要用到哈希算法, 原因就是SPA数据不是用libgpgme函数发送的,除非首先得到哈希码。GnuPG和libgpgme是相当复杂的代码体,因此在一定程度上限制了潜在的攻击者通过哈希码来操作这些代码,也就保证了这种加密方式具有很强的安全性。想要得到SPA传输数据用到的哈希码除了需要加密的key还需要专用的key,这两种key可以通过选项`--key-gen`来获得。

fwknop加密SPA数据包采用Rijindel分组密码或者通过GnuPG及其他相关的非对称密码,如果选择对称加密算法,通常情况就采用客户端和服务端共享的公钥(具体可以参考 ` access.conf `)。真正用来Rijndael加密的密钥是由标准的PBKDF1密钥推导算法和生成的,而且还设置了CBC模式。如果选择用GnuPG方法, 密钥就是通过GnuPG密钥链生成。

 

二、用例

1.用例简介

人们在使用单包认证(SPA)或者它的受安全挑战的兄弟--端口碰撞技术(PK)的同时通常拥有SSHD运行在同一台机器上,也就是说这台机器上安装了遵循默认丢弃策略的防火墙用来阻止所有的SSH连接请求,这样保证了SSHD服务不可能被扫描到,但SPA守护进程可以重置防火墙,临时授权给那些通过SPA认证的客户端访问权限:

SPA-basic-access-SSHD

fwknop不仅支持上述应用场景,还能支持更多场景而且能充分利用NAT网络的特性(如iptables/firewalld防火墙)。毕竟,防火墙只有部署在网络之间才显得尤为重要,如果部署在独立主机上就没有那么重要了,NAT模式普遍应用在防火墙中(至少在IPV4通信中)用来防止外网访问私有网络及防止外部主机访问部署在内网的服务。

因为fwknop集成了NAT所以外网用户可以利用SPA穿透防火墙访问内网服务,虽然NAT已经广泛使用在各种现代的和传统的网络应用中,但它还使得fwknop支持类似亚马逊云服务器AWS这种云计算系统:

SPA-Amazon-AWS-cloud

“SPA 在亚马逊AWS云服务系统中的使用场景示例图”

2.用户界面

官方的跨平台fwknop客户端用户界面fwknop-gui是由Jonathan Bennett开发的。支持大部分主要的客户端SPA模式,包括NAT请求、哈希和Rijndael密钥(GnuPG还不支持)、fwknoprc局部保存等等。目前fwknop-gui可以运行在Linux、Mac OS X及Windows

- 这是OS X的截图:

fwknop-gui-OS-X-screenshot

“fwknop-gui在OS X系统上的截图”,同样,还提供了更新后的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架构的系统以及安装了Cygwin的Windows系统上。而且,还有Android app可以用来生成SPA数据包。
  • 同时支持Rijndael和GnuPG两种方式加密/解密SPA数据包。
  • 对Rijndael和GnuPG都支持HMAC认证加密,操作顺序是先加密后认证,目的是为了避免各种密码解析问题。
  • 通过比较有效的传入的SPA数据包的SHA-256摘要,可以检测到并阻止重播攻击。同样还支持其他摘要算法,默认是SHA-256。
  • SPA利用libpcap从网络中被动的嗅探数据包。fwknopd服务器还可以从独立网络嗅探器(比如使用 `tcpdump -w <file>` )写入的文件中获取数据包,或者从iptables ULOG pcap writer中获取,再或者通过 `--udp-server` 模式下的UPD套接字获取数据包。 
  • 对于iptables防火墙,fwknop客户端添加的ACCEPT策略是从自定义的iptables链中新增或者删除,所以fwknop客户端不会直接操作系统上已有的iptables策略。
  • 支持入站NAT连接使用SPA认证通信(目前只支持iptables防火墙)。这就意味着fwknop可配置成创建DNAT策略,从而能让你在外网访问部署在内部专用网络上的服务(比如SSH)。同时SNAT策略也是支持的,它本质上是把fwknop变成SPA认证网关让内网用户可以访问公网。
  • fwknop服务端支持多用户,通过编辑 /etc/fwknop/access.conf 文件可以给每个用户分配对称或者非对称的密钥。
  • 通过https://www.cipherdyne.org/cgi-bin/myip网站可以自动解析出外部IP(当fwknop客户端运行在NAT设备之后的时候很有用)。因为在这种模式下,外部IP地址被加密到每个SPA数据包内,阻止了嵌入式设备通过拦截SPA数据包然后转发到不同的IP地址来获取访问权限--中间人攻击(MITM)。
  • 支持端口随机化--SPA数据包的目标端口和后续通过iptables 的NAT功能连接的端口,后者是用来转发连接到内部服务以及获取权限来访问那些运行着fwknopd服务的系统上的本地套接字。
  • 集成了Tor(如DefCon14里的描述的那样),请注意,因为Tor使用TCP做传输,所以通过Tor网络发送SPA数据包需要首先建立TCP连接,这在技术层面来说已经打破了打包认证中的单包原则。但是,在一些部署场景中Tor提供的匿名性带来的好处会远远超出这个担忧点。
  • 实现了SPA通信的版本协议,所以很容易在遵循这种协议的前提下提供新的SPA消息类型,同时还能和老版本的fwknop客户端保证向后兼容。
  • 支持通过执行shell命令来校验SPA数据包的有效性
  • fwknop服务端可以配置成对那些超出密钥解析范围及检测到重播攻击的入站数据包设置多重限制。也就是,数据包时效、资源IP地址、远程用户、请求端口访问权限等等。
  • fwknop工程内部捆绑了一套完整的测试组件可以用来做一系列的测试,目的是为了验证客户端和服务端均正常工作。这些测试用例包括:1)通过本地回路接口嗅探SPA数据包;2)基于测试用例的配置构建临时的防火墙策略检查是否有适当的访问权限;3)解析fwknop客户端和fwknop服务端的输出用来检查是否满足预期的标识。测试组件的输出能轻松的拿来和第三方做匿名通信分析。
  • fwknop是首个把端口敲门技术集成到指纹识别的软件,然而, 单包认证提供了除端口敲门技术之外的许多安全特性,所以端口敲门操作模式通常不推荐使用。

五、使用许可

fwknop项目被发布为基于**GNU 通用公开许可证(GPL v2)** 或者(根据你所选择的版本号)其他新的许可证的一个开源软件。最新的release版本地址:

http://www.cipherdyne.org/fwknop/

六、当前状态

这个README文件描述了2013年5月发行的2.5 版本fwknop项目的当前状态。目前,我们实现了防火墙敲门操作依赖库:`libfko`,还实现了fwknop客户端和服务端。这个依赖库提供了API接口和后端功能用来管理单包认证(SPA)的数据,这些数据会被fwknop其他的组件使用到。这个依赖库还能被那些需要SPA功能的其他程序所使用到(可以查看位于`perl`目录下的FKO perl模块的例子,在`python`目录下还有python粘合剂)

七、更新

如果你想要从老版本(包括原始的perl版本)的fwknop平稳地过渡到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的基础知识。

有一些“configure”选项是fwknop所特有的,如下(从*./configure --help*中提取的):

--disable-client                                     不构建fwknop客户端组件。默认是构建客户端。

--disable-server                                   不构建fwknop服务端组件。默认是构建服务端。

--with-gpgme                                       开启使用libgpgme来进行gpg加密。[default=check]

--with-gpgme-prefix=PFX                    安装GPGME使用前缀(可选)。

--with-gpg=/path/to/gpg                       给gpg可执行文件指定路径,gpgme会使用到这个文件[default=check path]。

--with-firewalld=/path/to/firewalld         指定firewalld可执行文件的路径[default=check path]

--with-iptables=/path/to/iptables          指定iptables可执行文件的路径[default=check path]

--with-ipfw=/path/to/ipfw                      指定ipfw可执行文件的路径[default=check path]

--with-pf=/path/to/pfctl                         指定pf可执行文件的路径[default=check path]

--with-ipf=/path/to/ipf                           指定ipf可执行文件的路径[default=check path]

例子:

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

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

总结

fwknop的perl版本迁移

对于那些目前还在使用perl版本并且打算迁移到当前版本的用户,需要注意一下几点:

  • 不是perl版本fwknop的所有特性和功能都被移植到当前版本。我们认为保持C版本尽量轻量简洁很重要。大部分被忽略的特性/功能可以通过其它途径获取(比如利用外置脚本来监测日志文件并且基于合理的日志消息给出警告提示)。
  • fwknop的perl版本和C版本在配置及访问文件的指令和值方面存在差异,其中的一些只是很细微的差异。你应该重点关注官方提供的文档以及代码文件中的注释。

写给fwknop开发者

如果你是从git上下载项目,首先你应该运行 `autogen.sh` 脚本获取autoconf文件。如果提示缺失目录或者文件,尝试再次运行 `autogen.sh`脚本。然后如果你想要重新生成配置文件,你可以运行 `autoreconf -i` 命令。如果因为其它原因autoconf不起作用,`autogen.sh`这个脚本就足够了。

fwknop和fwknopd手册页面的nroff资源分别包含在各自(客户端和服务端)的目录下,这些nroff文件是由存放在 ‘docs’ 目录下asciidoc资源生成的。查看docs下的README获取详细信息。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值