关于SYNwall
SYNwall是一款功能强大的零配置物联网防火墙,该项目是一个以Linux内核模块构建的项目,可以帮助广大研究人员实现一个透明的零配置/零维护的物联网防火墙。
通常情况下,物联网设备是不具备中央控制特性的,而且硬件配置不搞,环境条件也恶劣。广大研究人员并没有多少时间去专门维护物联网设备的安全,因此,我们可能无法及时修复物联网基础设施中的安全问题,并且很难去维持“类似防火墙”的访问控制。
SYNwall是思想是创建一个非集中式的单向一次性密码,以使网络能够访问设备,所有不包含OTP的流量都将被丢弃。我们不需要事先知道谁需要访问,我们只需要一个预共享密钥来部署。安全保护机制将对应用层完全透明,因为它是在网络协议级别(TCP和UDP)实现的。
工具安装
这个项目库中包含了Linux内核模块,并且已经在X86_64、ARM、MIPS以及AARCH64架构上测试了3.x、4.x和5.x版本。
该工具要求使用当前内核Header进行编译,这里可以使用对应的包管理器来进行安装。比如说,在Debian发行版系统上可以运行下列命令:
代码语言:javascript复制sudo apt-get install linux-headers-$(uname -r)
接下来,我们就可以运行编译命令了:
代码语言:javascript复制make
SYNwall配置
功能模块可以使用insmod或modprobe进行加载。
工具还提供了一些参数来帮助我们实现自定义行为:
1、用于一次性密码的预共享密钥-PSK
这个PSK必须是一个长度为32到1024的字节序列。它将是OTP的一部分,因此它的长度将影响OTP注入包的大小。如果没有此参数,模块将无法加载。
2、启用UDP-enable_udp: 0
针对UDP协议启用或禁用OTP。默认配置下是禁用的,设置为1即可启用。UDP上的OTP要求模块在两个通信设备上都处于活动状态,因为在将数据包转发到应用层之前,必须(由模块)删除OTP。UDP连接跟踪依赖于conntrack模块,因此必须插入它才能使用此功能(这取决于安装)。
3、精度参数-precision: 10
OTP使用了当前设备时间进行计算,由于不同设备上的日期时间可能不同,因此我们可以设置一个允许的时间偏移量,默认值为10。这里的精度需要使用2的幂来表示:
代码语言:javascript复制...
9 -> 1 second
10 -> 8 seconds
...
工具使用样例
下列命令将删除所有流向目标设备的通信流量:
代码语言:javascript复制sudo insmod SYNwall.ko psk=123456789012345678901234567890123 precision=10 portk=12,13,14,15,16 load_delay=5000 enable_udp=1
在命令行终端中测试两个网络连接:
代码语言:javascript复制sudo insmod SYNgate.ko dstnet_list=10.1.1.0/24,198.168.10.0/24 psk_list=d41d8cd98f00b204e9800998ecf8427e,efebceec0de382839cd38bffcdc6bf0c enable_udp_list=0,0 precision_list=10,9 enable_antispoof_list=0,1
或者使用一个配置文件:
代码语言:javascript复制sudo cat /etc/modprobe.d/SYNgate.conf
# SYNgate config file
# Keep it safe!!
options SYNgate dstnet_list=10.1.1.0/24,198.168.10.0/24
options SYNgate psk_list=d41d8cd98f00b204e9800998ecf8427e,efebceec0de382839cd38bffcdc6bf0c
options SYNgate enable_udp_list=0,0
options SYNgate precision_list=10,9
options SYNgate enable_antispoof_list=0,1
性能分析
SYNwall支持在低端设备上使用,并且消耗的资源非常少,这也是我们为什么选择使用Quark哈希作为加密机制的原因。OTP计算增加的开销在常规使用中可以忽略不计:
当大量流量发送到设备时,您可以看到CPU的资源消耗情况:
项目地址
SYNwall:https://github.com/SYNwall/SYNwall
许可证协议
本项目的开发与发布遵循GPL-3.0开源许可证协议。