
關於Wi-Fi Framework
Wi-Fi Framework是一款功能強大的WiFi安全測試工具,該工具本質上來說是一個安全框架,可以幫助廣大研究人員更輕鬆地執行Wi-Fi安全測試。除此之外,我們還可以利用Wi-Fi Framework來創建模糊測試工具,設計新的測試方案,創建PoC以驗證漏洞,自動化滲透測試或開發其他的漏洞測試工具。
該框架的主要優點是,它允許我們重用Linux的Wi-Fi功能,以便更輕鬆地實施安全測試。比如說,該框架可以幫我們連接(受保護的)Wi-Fi網絡,並在測試客戶端時為我們廣播信標。一般來說,Linux的任何Wi-Fi功能都可以重用,以更快地實施安全測試。
Wi-Fi Framework架構
下圖顯示的是Wi-Fi Framework中Wi-Fi守護進程和框架組件架構:

工具安裝
該框架可以在本地Linux系統或虛擬機環境中運行。
首先,我們需要使用下列命令將該項目源碼克隆至本地:
git clone https://github.com/domienschepers/wifi-framework.git接下來,使用下列命令安裝工具所需的依賴組件:
apt-get updateapt-get install git make gcc python3-venv net-toolsapt-get install libdbus-1-dev libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libssl-dev安裝完成之後,使用下列命令安裝框架:
cd ../dependencies./build.shcd ../setup./pysetup.shLibwifi
libwifi庫作為一個git只模塊使用,需要手動安裝:
git submodule initgit submodule update工具使用
初始化並激活Python環境:
source setup/venv/bin/activate模擬Wi-Fi網絡接口:
運行工具並創建測試用例:
usage: run.py [-h] [--config CONFIG] [--binary BINARY] [--debug DEBUG] iface name指定網絡配置信息:
cd setupln -s supplicant-wpa3-personal.conf supplicant.conf工具使用樣例
假設我們現在需要測試客戶端是否使用全零密鑰去加密幀數據,而這種情況可能發生在密鑰重新安裝攻擊期間。那麼在Wi-Fi Framework的幫助下,我們無需重新實現接入點的所有功能,只需編寫以下測試用例即可:
class ExampleKrackZerokey(Test):name = "example-krack-zero-key"kind = Test.Authenticatordef __init__(self):super().__init__([# Replay 4-Way Handshake Message 3/4.Action( trigger=Trigger.Connected, action=Action.Function ),# Receive all frames and search for one encrypted with an all-zero key.Action( trigger=Trigger.NoTrigger, action=Action.Receive ),# When we receive such a frame, we can terminate the test.Action( trigger=Trigger.Received, action=Action.Terminate )])def resend(self, station):# Resend 4-Way Handshake Message 3/4.station.wpaspy_command("RESEND_M3 " + station.clientmac )def receive(self, station, frame):if frame[Dot11].addr2 != station.clientmac or not frame.haslayer(Dot11CCMP):return False# Check if CCMP-encrypted frame can be decrypted using an all-zero keyplaintext = decrypt_ccmp(frame.getlayer(Dot11), tk=b"\x00"*16)if plaintext is None: return False# We received a valid plaintext frame!log(STATUS,'Client encrypted a frame with an all-zero key!', color="green")return True上面的測試用例將創建一個客戶端能夠連接的接入點。客戶端連接後,它將向客戶端發送4路握手消息。接下來,易受攻擊的客戶端將開始使用全零加密來密鑰,隨後測試用例將會自動檢測到這一情況。
我們也可以使用模擬Wi-Fi來運行上述測試用例:
./setup/setup-hwsim.sh 4source setup/venv/bin/activate./run.py wlan1 example-krack-zero-key項目地址
https://github.com/domienschepers/wifi-framework
參考資料
https://github.com/vanhoefm/libwifi
https://www.krackattacks.com/#demo
https://dl.acm.org/doi/10.1145/3448300.3468261
https://github.com/vanhoefm/fragattacks
https://github.com/domienschepers/wifi-framework/blob/master/docs/EXAMPLES.md