Fwknop:单包授权与端口试探工具(海南海关授权个人免税店端口)
mhr18 2024-10-18 07:01 41 浏览 0 评论
介绍
fwknop实现了一种称为单包授权(SPA)的授权方案,用于隐藏服务。SPA将单个数据包经过加密,不可重放,并通过HMAC进行身份验证,以便在传达到隐藏在防火墙后面的服务。
SPA的主要应用场景是防火墙来过滤一切SSH等服务流量,从而使漏洞的利用(包括0day的和未打补丁)变得更加困难。由于没有开放端口,因此无法使用Nmap扫描SPA隐藏的任何服务。
fwknop项目支持四种不同的防火墙:Linux,OpenBSD,FreeBSD和Mac OS X上的iptables,firewalld,PF和ipfw。
SPA基本上是下一代Port Knocking(PK),但在保留其核心优势的同时,解决了PK所表现出的许多限制。PK局限性包括难以防止重放攻击,不对称密码和HMAC计划,通常不可能可靠地支持,这是非常简单的挂载一个DoS攻击PK服务器通过欺骗一个额外的包成PK顺序遍历网络(因此令人信服的PK服务器客户端不知道正确的序列)。所有这些缺点都通过SPA得到了解决。
同时,SPA将服务隐藏在默认的drop防火墙策略后面,被动地获取SPA数据(通常通过libpcap或其他方法),并为SPA包身份验证和加密/解密实现标准的加密操作。
由fwknop生成的SPA数据包利用HMAC在加密然后验证模型中进行身份验证加密。虽然HMAC的使用目前是可选的(通过--use-hmac命令行开关启用),但有三个原因强烈建议使用:
1.如果没有HMAC,除非使用GnuPG,否则fwknop不可能进行加密的强身份验证,但即使这样,仍然应该应用HMAC。
2.加密后应用的HMAC可防止密码分析CBC模式填充oracle攻击,例如Vaudenay攻击和相关欺骗(如最近的针对SSL的“Lucky 13”攻击)。
3.wknopd守护进程验证HMAC所需的代码比解密SPA包所需的代码要简单得多,因此没有正确的HMAC的SPA包甚至不会通过解密例程发送。
上面的最后一个原因是,即使SPA数据包使用GnuPG加密,仍然应该使用HMAC,因为SPA数据不是通过libgpgme函数发送的,除非HMAC首先检出。GnuPG和libgpgme是相对复杂的代码体,因此限制潜在攻击者通过HMAC操作与此代码交互的能力有助于保持更强的安全性。生成用于SPA通信的HMAC除了普通加密密钥之外还需要专用密钥,并且可以使用该--key-gen选项生成两者。
fwknop使用Rijndael分组密码或通过GnuPG和相关的非对称密码对SPA数据包进行加密。如果选择了对称加密方法,则通常在客户端和服务器之间共享加密密钥(/etc/fwknop/access.conf有关详细信息,请参阅文件)。用于Rijndael加密的实际加密密钥是通过标准PBKDF1密钥导出算法生成的,并且设置了CBC模式。如果选择GnuPG方法,则加密密钥从GnuPG密钥环导出。
用例
使用单数据包授权(SPA)或安全性受到挑战的同类端口 Knocking(PK)的人通常访问在部署SPA / PK软件的同一系统上运行的SSHD。也就是说,在主机上运行的防火墙对所有传入的SSH连接都有一个默认删除策略,这样就不能扫描SSHD,但是SPA守护进程会重新配置防火墙,暂时授予对被动认证的SPA客户机的访问权:
fwknop支持上述内容,但也更加牛批,并且使用NAT(对于iptables / firewalld防火墙)。毕竟,重要的防火墙通常是网络之间的网关,而不是仅部署在独立主机上。NAT通常用于此类防火墙(至少用于IPv4通信),以便为RFC 1918地址空间上的内部网络提供Internet访问,并允许外部主机访问内部系统上托管的服务。
由于fwknop与NAT集成,因此可以利用SPA 通过外部Internet上的用户通过防火墙访问内部服务。虽然这在现代传统网络上有很多应用,但它也允许fwknop支持亚马逊的AWS等云计算环境:
用户界面
官方跨平台fwknop客户端用户界面fwknop-gui (下载,github)由Jonathan Bennett开发。支持大多数主要的客户端SPA模式,包括NAT请求,HMAC和Rijndael密钥(尚不支持GnuPG),fwknoprc节点保存等。目前fwknop-gui在Linux,Mac OS X和Windows上运行。
这是来自OS X的截图:
教程
有关fwknop的综合教程可以在这里找到:
http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html
特征
以下是fwknop项目支持的完整功能列表:
1.在Linux上的iptables和firewalld防火墙,* BSD和Mac OS X上的ipfw防火墙以及OpenBSD上的PF上实现单个数据包授权。
2.fwknop客户端在Cygwin下的Linux,Mac OS X,* BSD和Windows上运行。此外,还有一个Android应用程序可以生成SPA数据包。
3.支持Rijndael和GnuPG方法用于SPA数据包的加密/解密。
4.支持Rijndael和GnuPG的HMAC认证加密。操作顺序是加密 – 然后验证以避免各种密码分析问题。
5.通过有效传入SPA数据包的SHA-256摘要比较来检测和阻止重播攻击。还支持其他摘要算法,但SHA-256是默认算法。
6.通过libpcap从导线上被动地嗅探SPA包。fwknopd服务器还可以从由单独的以太网嗅探器(例如with tcpdump -w <file>),iptables ULOG pcap writer或直接通过UDP套接字--udp-server模式写入的文件中获取数据包数据。
7.对于iptables防火墙,fwknop添加的ACCEPT规则在自定义iptables链中添加和删除(在可配置的超时之后),以便fwknop不会干扰可能已经加载到系统上的任何现有iptables策略。
8.支持经过身份验证的SPA通信的入站NAT连接(仅适用于iptables防火墙)。这意味着可以将fwknop配置为创建DNAT规则,以便您可以从开放Internet访问RFC 1918 IP地址上的内部系统上运行的服务(如SSH)。还支持SNAT规则,它实质上将fwknopd转换为SPA验证网关,以从内部网络访问Internet。
9.fwknop服务器支持多个用户,并且可以通过/etc/fwknop/access.conf文件为每个用户分配自己的对称或非对称加密密钥。
10.通过https://www.cipherdyne.org/cgi-bin/myip自动解析外部IP地址 (当从NAT设备后面运行fwknop客户端时,这非常有用)。由于外部IP地址在此模式下在每个SPA数据包内进行加密,因此中间人(MITM)会攻击内联设备拦截SPA数据包并仅从其他IP转发以获取访问权限受到阻碍。
11.SPA数据包的目标端口以及通过iptables NAT功能建立后续连接的端口支持端口随机化。后者适用于转发到内部服务的连接以及授予运行fwknopd的系统上的本地套接字的访问权限。
12.与Tor集成(如本DefCon 14演示文稿中所述)。请注意,由于Tor使用TCP进行传输,因此通过Tor网络发送SPA数据包要求每个SPA数据包都通过已建立的TCP连接发送,因此从技术上讲,这打破了“单数据包授权”的“单一”方面。但是,Tor提供的匿名优势在某些部署中可能超过这一考虑因素。
13.实现SPA通信的版本化协议,因此很容易扩展协议以提供新的SPA消息类型,同时保持与旧的fwknop客户端的向后兼容性。
14.支持代表有效SPA数据包执行shell命令。
15.fwknop服务器可以配置为对入站SPA数据包施加多个限制,超出加密密钥强制执行的限制和重放攻击检测。即,包年龄,源IP地址,远程用户,对请求端口的访问等。
16.捆绑了fwknop是一个全面的测试套件,它发布了一系列测试,旨在验证fwknop的客户端和服务器部分是否正常工作。这些测试涉及通过本地环回接口嗅探SPA数据包,构建临时防火墙规则,根据测试配置检查相应的访问权限,并解析来自fwknop客户端和fwknopd服务器的输出,以获得每个测试的预期标记。测试套件输出可以很容易地匿名化,以便与第三方进行通信以进行分析。
17.fwknop是第一个将端口敲击与被动操作系统指纹识别相结合的程序。但是,单包授权提供了除端口 knocking之外的许多安全优势,因此通常不推荐端口 knocking操作模式。
License
fwknop项目根据GNU通用公共许可证(GPL v2)或(根据您的选择)任何更新版本的条款作为开源软件发布。最新版本可在http://www.cipherdyne.org/fwknop/找到。
升级
如果您从旧版本的fwknop升级(这也包括原始的perl实现),那么您将需要阅读以下链接以确保顺利过渡到fwknop-2.5或更高版本:
http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html#backwards-compatibility
Building fwknop
此发行版使用GNU autoconf来设置构建。INSTALL有关使用autoconf的一般基础知识,请参阅文件。
有一些特定于fwknop的“配置”选项。它们是(从./configure –help中提取):
--disable-client Do not build the fwknop client component. The default is to build the client. --disable-server Do not build the fwknop server component. The default is to build the server. --with-gpgme support for gpg encryption using libgpgme [default=check] --with-gpgme-prefix=PFX prefix where GPGME is installed (optional) --with-gpg=/path/to/gpg Specify path to the gpg executable that gpgme will use [default=check path] --with-firewalld=/path/to/firewalld Specify path to the firewalld executable [default=check path] --with-iptables=/path/to/iptables Specify path to the iptables executable [default=check path] --with-ipfw=/path/to/ipfw Specify path to the ipfw executable [default=check path] --with-pf=/path/to/pfctl Specify path to the pf executable [default=check path] --with-ipf=/path/to/ipf Specify path to the ipf executable [default=check path] Examples: ./configure --disable-client --with-firewalld=/bin/firewall-cmd ./configure --disable-client --with-iptables=/sbin/iptables --with-firewalld=no
笔记
从Perl版本的fwknop迁移
对于那些目前正在使用Perl版本并计划迁移到此版本的人,有一些事项需要注意:
1.并非所有基于Perl的fwknop的特性和功能都被移植到此实现中。我们认为保持C版本尽可能精简和轻量化非常重要。大多数省略的功能/功能(如电子邮件警报)可以通过其他方式完成(即使用外部脚本监视日志文件并根据相应的日志消息发出警报)。
2.fwknop配置和访问文件指令和值存在一些差异。其中一些是相当微妙的。您应该特别注意这些文件中的文档和注释。
*参考来源:github,FB小编周大涛编译,转载自FreeBuf.COM
相关推荐
- Java面试宝典之问答系列(java面试回答)
-
以下内容,由兆隆IT云学院就业部根据多年成功就业服务经验提供:1.写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出的和以总和显示的SQL。SELECT...
- ADG (Active Data Guard) 数据容灾架构下,如何配置 Druid 连接池?
-
如上图的数据容灾架构下,上层应用如果使用Druid连接池,应该如何配置,才能在数据库集群节点切换甚至主备数据中心站点切换的情况下,上层应用不需要变动(无需修改配置也无需重启);即数据库节点宕机/...
- SpringBoot多数据源dynamic-datasource快速入门
-
一、简介dynamic-datasourc是一个基于SpringBoot的快速集成多数据源的启动器,其主要特性如下:支持数据源分组,适用于多种场景纯粹多库读写分离一主多从混合模式。支持...
- SpringBoot项目快速开发框架JeecgBoot——项目简介及系统架构!
-
项目简介及系统架构JeecgBoot是一款基于SpringBoot的开发平台,它采用前后端分离架构,集成的框架有SpringBoot2.x、SpringCloud、AntDesignof...
- 常见文件系统格式有哪些(文件系统类型有哪几种)
-
PART.01常见文件系统格式有哪些常见的文件系统格式有很多,通常根据使用场景(Windows、Linux、macOS、移动设备、U盘、硬盘等)有所不同。以下是一些主流和常见的文件系统格式及其特点:一...
- Oracle MySQL Operator部署集群(oracle mysql group by)
-
以下是使用OracleMySQLOperator部署MySQL集群的完整流程及关键注意事项:一、部署前准备安装MySQLOperator通过Helm安装Operator到Ku...
- LibreOffice加入"转向Linux"运动
-
LibreOffice项目正准备削减部分Windows支持,并鼓励用户切换到Linux系统。自Oracle放弃OpenOffice后,支持和指导LibreOffice开发的文档基金会对未来有着明确的观...
- Oracle Linux 10发布:UEK 8.1、后量子加密、增强开发工具等
-
IT之家6月28日消息,科技媒体linuxiac昨日(6月27日)发布博文,报道称OracleLinux10正式发布,完全二进制兼容(binarycompatibility...
- 【mykit-data】 数据库同步工具(数据库同步工具 开源)
-
项目介绍支持插件化、可视化的数据异构中间件,支持的数据异构方式如下MySQL<——>MySQL(增量、全量)MySQL<——>Oracle(增量、全量)Oracle...
- oracle关于xml的解析(oracle读取xml节点的属性值)
-
有时需要在存储过程中处理xml,oracle提供了相应的函数来进行处理,xmltype以及相关的函数。废话少说,上代码:selectxmltype(SIConfirmOutput).extract...
- 如何利用DBSync实现数据库同步(通过dblink同步数据库)
-
DBSync是一款通用型的数据库同步软件,能侦测数据表之间的差异,能实时同步差异数据,从而使双方始终保持一致。支持各种数据库,支持异构同步、增量同步,且提供永久免费版。本文介绍其功能特点及大致用法,供...
- MYSQL存储引擎InnoDB(八十):InnoDB静态数据加密
-
InnoDB支持独立表空间、通用表空间、mysql系统表空间、重做日志和撤消日志的静态数据加密。从MySQL8.0.16开始,还支持为模式和通用表空间设置加密默认值,这允许DBA控制在这些模...
- JDK高版本特性总结与ZGC实践(jdk高版本兼容低版本吗)
-
美团信息安全技术团队核心服务升级JDK17后,性能与稳定性大幅提升,机器成本降低了10%。高版本JDK与ZGC技术令人惊艳,且JavaAISDK最低支持JDK17。本文总结了JDK17的主要...
- 4 种 MySQL 同步 ES 方案,yyds!(两个mysql数据库自动同步的方法)
-
本文会先讲述数据同步的4种方案,并给出常用数据迁移工具,干货满满!不BB,上文章目录:1.前言在实际项目开发中,我们经常将MySQL作为业务数据库,ES作为查询数据库,用来实现读写分离,...
- 计算机Java培训课程包含哪些内容?其实就这六大块
-
不知不觉秋天已至,如果你还处于就业迷茫期,不如来学习Java。对于非科班小白来说,Java培训会更适合你。提前了解下计算机Java培训课程内容,会有助于你后续学习。下面,我就从六个部分为大家详细介绍...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Java面试宝典之问答系列(java面试回答)
- ADG (Active Data Guard) 数据容灾架构下,如何配置 Druid 连接池?
- SpringBoot多数据源dynamic-datasource快速入门
- SpringBoot项目快速开发框架JeecgBoot——项目简介及系统架构!
- 常见文件系统格式有哪些(文件系统类型有哪几种)
- Oracle MySQL Operator部署集群(oracle mysql group by)
- LibreOffice加入"转向Linux"运动
- Oracle Linux 10发布:UEK 8.1、后量子加密、增强开发工具等
- 【mykit-data】 数据库同步工具(数据库同步工具 开源)
- oracle关于xml的解析(oracle读取xml节点的属性值)
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)