歡迎光臨
每天分享高質量文章

Evil-Twin 框架:一個用於提升 WiFi 安全性的工具 | Linux 中國

瞭解一款用於對 WiFi 接入點安全進行滲透測試的工具。

— André Esser

 

越來越多的設備通過無線傳輸的方式連接到互聯網,以及,大範圍可用的 WiFi 接入點為攻擊者攻擊用戶提供了很多機會。通過欺騙用戶連接到虛假的 WiFi 接入點[1],攻擊者可以完全控制用戶的網絡連接,這將使得攻擊者可以嗅探和篡改用戶的資料包,將用戶的連接重定向到一個惡意的網站,並通過網絡發起其他的攻擊。

為了保護用戶並告訴他們如何避免線上的危險操作,安全審計人員和安全研究員必須評估用戶的安全實踐能力,用戶常常在沒有確認該 WiFi 接入點為安全的情況下就連接上了該網絡,安全審計人員和研究員需要去瞭解這背後的原因。有很多工具都可以對 WiFi 的安全性進行審計,但是沒有一款工具可以測試大量不同的攻擊場景,也沒有能和其他工具集成得很好的工具。

Evil-Twin Framework(ETF)用於解決 WiFi 審計過程中的這些問題。審計者能夠使用 ETF 來集成多種工具並測試該 WiFi 在不同場景下的安全性。本文會介紹 ETF 的框架和功能,然後會提供一些案例來說明該如何使用這款工具。

ETF 的架構

ETF 的框架是用 Python[2] 寫的,因為這門開發語言的代碼非常易讀,也方便其他開發者向這個專案貢獻代碼。除此之外,很多 ETF 的庫,比如 Scapy[3],都是為 Python 開發的,很容易就能將它們用於 ETF。

ETF 的架構(圖 1)分為不同的彼此交互的模塊。該框架的設置都寫在一個單獨的配置檔案里。用戶可以通過 ConfigurationManager 類里的用戶界面來驗證並修改這些配置。其他模塊只能讀取這些設置並根據這些設置進行運行。

圖 1:Evil-Twin 的框架架構

ETF 支持多種與框架交互的用戶界面,當前的預設界面是一個交互式控制台界面,類似於 Metasploit[4] 那種。正在開發用於桌面/瀏覽器使用的圖形用戶界面(GUI)和命令列界面(CLI),移動端界面也是未來的一個備選項。用戶可以使用交互式控制台界面來修改配置檔案里的設置(最終會使用 GUI)。用戶界面可以與存在於這個框架里的每個模塊進行交互。

WiFi 模塊(AirCommunicator)用於支持多種 WiFi 功能和攻擊型別。該框架確定了 Wi-Fi 通信的三個基本支柱:資料包嗅探、自定義資料包註入和創建接入點。三個主要的 WiFi 通信模塊 AirScanner、AirInjector,和 AirHost,分別用於資料包嗅探、資料包註入,和接入點創建。這三個類被封裝在主 WiFi 模塊 AirCommunicator 中,AirCommunicator 在啟動這些服務之前會先讀取這些服務的配置檔案。使用這些核心功能的一個或多個就可以構造任意型別的 WiFi 攻擊。

要使用中間人(MITM)攻擊(這是一種攻擊 WiFi 客戶端的常見手法),ETF 有一個叫做 ETFITM(Evil-Twin Framework-in-the-Middle)的集成模塊,這個模塊用於創建一個 web 代理,來攔截和修改經過的 HTTP/HTTPS 資料包。

許多其他的工具也可以利用 ETF 創建的 MITM。通過它的可擴展性,ETF 能夠支持它們,而不必單獨地呼叫它們,你可以通過擴展 Spawner 類來將這些工具添加到框架里。這使得開發者和安全審計人員可以使用框架里預先配置好的引數字符來呼叫程式。

擴展 ETF 的另一種方法就是通過插件。有兩類插件:WiFi 插件和 MITM 插件。MITM 插件是在 MITM 代理運行時可以執行的腳本。代理會將 HTTP(s) 請求和響應傳遞給可以記錄和處理它們的插件。WiFi 插件遵循一個更加複雜的執行流程,但仍然會給想參與開發並且使用自己插件的貢獻者提供一個相對簡單的 API。WiFi 插件還可以進一步地劃分為三類,其中每個對應一個核心 WiFi 通信模塊。

每個核心模塊都有一些特定事件能觸發響應的插件的執行。舉個例子,AirScanner 有三個已定義的事件,可以對其響應進行編程處理。事件通常對應於服務開始運行之前的設置階段、服務正在運行時的中間執行階段、服務完成後的卸載或清理階段。因為 Python 允許多重繼承,所以一個插件可以繼承多個插件類。

上面的圖 1 是框架架構的摘要。從 ConfigurationManager 指出的箭頭意味著模塊會從中讀取信息,指向它的箭頭意味著模塊會寫入/修改配置。

使用 ETF 的例子

ETF 可以通過多種方式對 WiFi 的網絡安全或者終端用戶的 WiFi 安全意識進行滲透測試。下麵的例子描述了這個框架的一些滲透測試功能,例如接入點和客戶端檢測、對使用 WPA 和 WEP 型別協議的接入點進行攻擊,和創建 evil twin 接入點。

這些例子是使用 ETF 和允許進行 WiFi 資料捕獲的 WiFi 卡設計的。它們也在 ETF 設置命令中使用了下麵這些縮寫:

◈ APS Access Point SSID
◈ APB Access Point BSSID
◈ APC Access Point Channel
◈ CM Client MAC address

在實際的測試場景中,確保你使用了正確的信息來替換這些縮寫。

在解除認證攻擊後捕獲 WPA 四次握手的資料包。

這個場景(圖 2)做了兩個方面的考慮:解除認證攻擊de-authentication attack和捕獲 WPA 四次握手資料包的可能性。這個場景從一個啟用了 WPA/WPA2 的接入點開始,這個接入點有一個已經連上的客戶端設備(在本例中是一臺智慧手機)。目的是通過常規的解除認證攻擊(LCTT 譯註:類似於 DoS 攻擊)來讓客戶端斷開和 WiFi 的網絡,然後在客戶端嘗試重連的時候捕獲 WPA 的握手包。重連會在斷開連接後馬上手動完成。

圖 2:在解除認證攻擊後捕獲 WPA 握手包的場景

在這個例子中需要考慮的是 ETF 的可靠性。目的是確認工具是否一直都能捕獲 WPA 的握手資料包。每個工具都會用來多次復現這個場景,以此來檢查它們在捕獲 WPA 握手資料包時的可靠性。

使用 ETF 來捕獲 WPA 握手資料包的方法不止一種。一種方法是使用 AirScanner 和 AirInjector 兩個模塊的組合;另一種方法是只使用 AirInjector。下麵這個場景是使用了兩個模塊的組合。

ETF 啟用了 AirScanner 模塊並分析 IEEE 802.11 資料幀來發現 WPA 握手包。然後 AirInjecto 就可以使用解除認證攻擊來強制客戶端斷開連接,以進行重連。必須在 ETF 上執行下麵這些步驟才能完成上面的標的:

1. 進入 AirScanner 配置樣式:config airscanner
2. 設置 AirScanner 不跳信道:config airscanner
3. 設置信道以嗅探經過 WiFi 接入點信道的資料(APC):set fixed_sniffing_channel =
4. 使用 CredentialSniffer 插件來啟動 AirScanner 模塊:start airscanner with credentialsniffer
5. 從已嗅探的接入點串列中添加標的接入點的 BSSID(APS):add aps where ssid =
6. 啟用 AirInjector 模塊,在預設情況下,它會啟用解除認證攻擊:start airinjector

這些簡單的命令設置能讓 ETF 在每次測試時執行成功且有效的解除認證攻擊。ETF 也能在每次測試的時候捕獲 WPA 的握手資料包。下麵的代碼能讓我們看到 ETF 成功的執行情況。

  1. ███████╗████████╗███████╗
  2. ██╔════╝╚══██╔══╝██╔════╝
  3. █████╗     ██║   █████╗  
  4. ██╔══╝     ██║   ██╔══╝  
  5. ███████╗   ██║   ██║    
  6. ╚══════╝   ╚═╝   ╚═╝    
  7.                                        
  8. [+] Do you want to load an older session? [Y/n]: n
  9. [+] Creating new temporary session on 02/08/2018
  10. [+] Enter the desired session name:
  11. ETF[etf/aircommunicator/]::> config airscanner
  12. ETF[etf/aircommunicator/airscanner]::> listargs
  13.   sniffing_interface =               wlan1; (var)
  14.               probes =                True; (var)
  15.              beacons =                True; (var)
  16.         hop_channels =               false; (var)
  17. fixed_sniffing_channel =                  11; (var)
  18. ETF[etf/aircommunicator/airscanner]::> start airscanner with
  19. arpreplayer        caffelatte         credentialsniffer  packetlogger       selfishwifi        
  20. ETF[etf/aircommunicator/airscanner]::> start airscanner with credentialsniffer
  21. [+] Successfully added credentialsniffer plugin.
  22. [+] Starting packet sniffer on interface 'wlan1'
  23. [+] Set fixed channel to 11
  24. ETF[etf/aircommunicator/airscanner]::> add aps where ssid = CrackWPA
  25. ETF[etf/aircommunicator/airscanner]::> start airinjector
  26. ETF[etf/aircommunicator/airscanner]::> [+] Starting deauthentication attack
  27.                     - 1000 bursts of 1 packets
  28.                     - 1 different packets
  29. [+] Injection attacks finished executing.
  30. [+] Starting post injection methods
  31. [+] Post injection methods finished
  32. [+] WPA Handshake found for client '70:3e:ac:bb:78:64' and network 'CrackWPA'

使用 ARP 重放攻擊並破解 WEP 無線網絡

下麵這個場景(圖 3)將關註地址解析協議[5](ARP)重放攻擊的效率和捕獲包含初始化向量(IVs)的 WEP 資料包的速度。相同的網絡可能需要破解不同數量的捕獲的 IVs,所以這個場景的 IVs 上限是 50000。如果這個網絡在首次測試期間,還未捕獲到 50000 IVs 就崩潰了,那麼實際捕獲到的 IVs 數量會成為這個網絡在接下來的測試里的新的上限。我們使用 aircrack-ng 對資料包進行破解。

測試場景從一個使用 WEP 協議進行加密的 WiFi 接入點和一臺知道其密鑰的離線客戶端設備開始 —— 為了測試方便,密鑰使用了 12345,但它可以是更長且更複雜的密鑰。一旦客戶端連接到了 WEP 接入點,它會發送一個不必要的 ARP 資料包;這是要捕獲和重放的資料包。一旦被捕獲的包含 IVs 的資料包數量達到了設置的上限,測試就結束了。

圖 3:在進行解除認證攻擊後捕獲 WPA 握手包的場景

ETF 使用 Python 的 Scapy 庫來進行包嗅探和包註入。為了最大限度地解決 Scapy 里的已知的性能問題,ETF 微調了一些低級庫,來大大加快包註入的速度。對於這個特定的場景,ETF 為了更有效率地嗅探,使用了 tcpdump 作為後臺行程而不是 Scapy,Scapy 用於識別加密的 ARP 資料包。

這個場景需要在 ETF 上執行下麵這些命令和操作:

1. 進入 AirScanner 設置樣式:config airscanner
2. 設置 AirScanner 不跳信道:set hop_channels = false
3. 設置信道以嗅探經過接入點信道的資料(APC):set fixed_sniffing_channel =
4. 進入 ARPReplayer 插件設置樣式:config arpreplayer
5. 設置 WEP 網絡標的接入點的 BSSID(APB):set target_ap_bssid
6. 使用 ARPReplayer 插件啟動 AirScanner 模塊:start airscanner with arpreplayer

在執行完這些命令後,ETF 會正確地識別加密的 ARP 資料包,然後成功執行 ARP 重放攻擊,以此破壞這個網絡。

使用一款全能型蜜罐

圖 4 中的場景使用相同的 SSID 創建了多個接入點,對於那些可以探測到但是無法接入的 WiFi 網絡,這個技術可以發現網絡的加密型別。通過啟動具有所有安全設置的多個接入點,客戶端會自動連接和本地快取的接入點信息相匹配的接入點。

圖 4:在解除認證攻擊後捕獲 WPA 握手包資料。

使用 ETF,可以去設置 hostapd 配置檔案,然後在後臺啟動該程式。hostapd 支持在一張無線網卡上通過設置虛擬接口開啟多個接入點,並且因為它支持所有型別的安全設置,因此可以設置完整的全能蜜罐。對於使用 WEP 和 WPA(2)-PSK 的網絡,使用預設密碼,和對於使用 WPA(2)-EAP 的網絡,配置“全部接受”策略。

對於這個場景,必須在 ETF 上執行下麵的命令和操作:

1. 進入 APLauncher 設置樣式:config aplauncher
2. 設置標的接入點的 SSID(APS):set ssid =
3. 設置 APLauncher 為全部接收的蜜罐:set catch_all_honeypot = true
4. 啟動 AirHost 模塊:start airhost

使用這些命令,ETF 可以啟動一個包含所有型別安全配置的完整全能蜜罐。ETF 同樣能自動啟動 DHCP 和 DNS 服務器,從而讓客戶端能與互聯網保持連接。ETF 提供了一個更好、更快、更完整的解決方案來創建全能蜜罐。下麵的代碼能夠看到 ETF 的成功執行。

  1. ███████╗████████╗███████╗
  2. ██╔════╝╚══██╔══╝██╔════╝
  3. █████╗     ██║   █████╗  
  4. ██╔══╝     ██║   ██╔══╝  
  5. ███████╗   ██║   ██║    
  6. ╚══════╝   ╚═╝   ╚═╝    
  7.                                        
  8. [+] Do you want to load an older session? [Y/n]: n
  9. [+] Creating ne´,cxzw temporary session on 03/08/2018
  10. [+] Enter the desired session name:
  11. ETF[etf/aircommunicator/]::> config aplauncher
  12. ETF[etf/aircommunicator/airhost/aplauncher]::> setconf ssid CatchMe
  13. ssid = CatchMe
  14. ETF[etf/aircommunicator/airhost/aplauncher]::> setconf catch_all_honeypot true
  15. catch_all_honeypot = true
  16. ETF[etf/aircommunicator/airhost/aplauncher]::> start airhost
  17. [+] Killing already started processes and restarting network services
  18. [+] Stopping dnsmasq and hostapd services
  19. [+] Access Point stopped...
  20. [+] Running airhost plugins pre_start
  21. [+] Starting hostapd background process
  22. [+] Starting dnsmasq service
  23. [+] Running airhost plugins post_start
  24. [+] Access Point launched successfully
  25. [+] Starting dnsmasq service

結論和以後的工作

這些場景使用常見和眾所周知的攻擊方式來幫助驗證 ETF 測試 WIFI 網絡和客戶端的能力。這個結果同樣證明瞭該框架的架構能在平臺現有功能的優勢上開發新的攻擊向量和功能。這會加快新的 WiFi 滲透測試工具的開發,因為很多的代碼已經寫好了。除此之外,將 WiFi 技術相關的東西都集成到一個單獨的工具里,會使 WiFi 滲透測試更加簡單高效。

ETF 的標的不是取代現有的工具,而是為它們提供補充,併為安全審計人員在進行 WiFi 滲透測試和提升用戶安全意識時,提供一個更好的選擇。

ETF 是 GitHub[6] 上的一個開源專案,歡迎社區為它的開發做出貢獻。下麵是一些您可以提供幫助的方法。

當前 WiFi 滲透測試的一個限制是無法在測試期間記錄重要的事件。這使得報告已經識別到的漏洞更加困難且準確性更低。這個框架可以實現一個記錄器,每個類都可以來訪問它並創建一個滲透測試會話報告。

ETF 工具的功能涵蓋了 WiFi 滲透測試的方方面面。一方面,它讓 WiFi 標的偵察、漏洞挖掘和攻擊這些階段變得更加容易。另一方面,它沒有提供一個便於提交報告的功能。增加了會話的概念和會話報告的功能,比如在一個會話期間記錄重要的事件,會極大地增加這個工具對於真實滲透測試場景的價值。

另一個有價值的貢獻是擴展該框架來促進 WiFi 模糊測試。IEEE 802.11 協議非常的複雜,考慮到它在客戶端和接入點兩方面都會有多種實現方式。可以假設這些實現都包含 bug 甚至是安全漏洞。這些 bug 可以通過對 IEEE 802.11 協議的資料幀進行模糊測試來進行發現。因為 Scapy 允許自定義的資料包創建和資料包註入,可以通過它實現一個模糊測試器。


via: https://opensource.com/article/19/1/evil-twin-framework

作者:André Esser[8] 選題:lujun9972 譯者:hopefully2333 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

赞(0)

分享創造快樂