拒絕成為免費勞動力:檢測含有挖礦腳本的WiFi熱點
前幾日看到一則新聞,一家星巴克店內無線網路被發現植入了惡意代碼,劫持網路流量利用用戶設備挖掘門羅幣(XMR)。
與加密貨幣相關的安全事件總是引人注目,我們除了認識到門羅幣具有一定的入手價值外,還再次見識到了公共WiFi的危險。不久後[
Arnau Code寫了
一篇文章,詳細介紹了如何通過MITM攻擊植入JavaScript代碼,從而讓WiFi網路內的所有設備幫助攻擊者挖礦,並以CoffeeMiner的名稱進行了開源: https://github.com/arnaucode/coffeeMiner。
我相信有很多傢伙會從這個新聞以及CoffeeMiner工具中得到啟發,利用類似的攻擊方式開創挖礦事業。
不過本篇我並不想過多討論攻擊方面的問題,最近行業內出現了對防禦型安全人才的呼聲,因此我打算應景的寫一篇防禦角度的文章,分析如何便捷的檢測周圍WiFi網路是否被植入了挖礦代碼。後文我將圍繞「CoinHive的介紹」,「開放式WiFi網路的特性」,「檢測工具的實現」三點來進行敘述,文章的末尾將公布完整的實現代碼方便大家參考。
CoinHive
星巴克挖礦事件中所使用的便是CoinHive挖礦程序。
Coinhive是一個提供門羅幣挖掘JS腳本的網站平台
,攻擊者會將其提供的腳本植入到自己或入侵的網站上。一旦有
用戶訪問網頁載入JS後,便會利用用戶設備的運算資源挖掘門羅幣。
在CoinHive官網註冊登陸後,在其文檔中發現了多種部署方式的介紹,
包括JS代碼形式、人機驗證形式、Wordpress插件形式等等,種類非常豐富。
比如註冊登陸時候的人機驗證,就會啟動挖礦程序,等待一段時間的挖礦後才能登錄。
根據JavaScript Miner的介紹文檔,將事例代碼放入網站的html中就可以了,部署極其簡單。
相應的,屏蔽的方法也很簡單,各種Adblock軟體早已將它們屏蔽啦。
根據提示,如果不想有提示用戶的彈窗可以將代碼中的 authedmine.min.js 替換為 coinhive.min.js。
開放式WiFi的特性
無密碼的開放式WiFi網路一直以來因其存在的安全威脅為廣大安全人員所詬病,主要在於兩點:攻擊者可輕易建立同名釣魚WiFi(客戶端會自動連接!),通信數據未加密容易被嗅探。
最近Wi-Fi聯盟表示將在即將發布的WPA3中,添加對開放式WiFi的通信數據加密。但在支持WPA3的設備被廣泛使用前,需要警惕相應的攻擊場景還會存在很長一段時間。回到本文,開放式的WiFi網路一直是類似惡意攻擊發生的重災區,結合剛剛所介紹的「通信數據未加密特性」,我們的檢測工具實現原理就呼之欲出了,即監聽明文的802.11數據幀,當發現目標信息便進行告警。
檢測工具的實現
搭建測試熱點
首先,建立一個
包含攻擊代碼的
開放式WiFi網路方便後續測試。筆者是通過無線網卡Hostapd建立軟AP,Dnsmasq提供DHCP及DNS服務,本地Nginx提供Web服務並植入CoinHive代碼,最後通過iptables配置Captive Portal(強制認證登陸頁面)。如此當移動設備連接到該熱點,會自動彈窗提示需要認證,點擊後就會訪問含有挖礦代碼的網頁了。
考慮到大部分讀者並不像我這樣富有,同時擁有兩塊無線網卡!(之後需要一塊來進行監聽),而且Hostapd、Dnsmasq、Nginx、iptables這套方案的部署配置較為複雜,沒有祖傳的手藝容易出問題。在此我推薦一個簡單的方案:利用隨身WiFi或者家庭路由器建立熱點,配置認證頁面到本地Web服務。好吧,如果沒有認證頁面的配置選項,手動訪問網頁也是一樣的。
監聽明文802.11數據幀
下一步,我們來嗅探傳遞在空氣中的HTTP數據。將無線網卡配置為Monitor模式,切換到熱點所在的Channel,並使用Wireshark進行觀察。
映入眼帘的應該是大量的各種802.11幀。我們的目標是未加密的數據幀,其中的HTTP數據將會被Wireshark所解析,我們鍵入「http.response」進行篩選HTTP Response包。與此同時,需要讓我們的移動設備訪問目標網頁,接著就能觀察到一些數據啦。
我們直接嘗試過濾包含CoinHive特徵代碼的數據包「data-text-lines contains CoinHive.Anonymous」,結果如下。
此時我們便能得出結論,該熱點存在著CoinHive挖礦代碼。從wlan.sa欄位取得該熱點MAC地址,再結合Beacon或Probe幀獲取其熱點名稱。當然我們也可以使用Wireshark的命令行工具Tshark在終端里進行操作,並指定輸出格式只輸出熱點MAC地址。
使用Scapy編寫惡意熱點識別框架
總結一下,我們的程序就像是一個對明文802.11數據幀的分析器。按照這個思路,只需要添加不同的識別規則就能擴展出對各種不同攻擊行為的檢測。為了添加擴展性,在此使用Scapy來編寫一個簡單的框架。
1.使用PIP安裝Scapy
注意由於scapy沒有對http協議進行解析,所以引入了scapy_http擴展包。
2.獲取熱點列表
上面tshark的程序有個缺點,就是不太方便同時顯示出熱點名稱。於是在此框架中,我們會先掃描一下周邊熱點信息以便後用。
3.監聽含有關鍵字的HTTP數據包
當匹配到告警規則後,輸出熱點名稱、MAC地址及告警詳情。
4.監聽模式及信道切換
2.4GHz中,熱點一般會建立在1、6、11三個互不干擾的信道上。為了增加監聽覆蓋的信道,讓我們的程序增加信道切換功能。
5. 最終效果
把以上的模塊組裝在一起就可以使用啦,可以[在這查看完整代碼]。
測試效果如下:
如果你想添加更多的檢測規則,可以在HTTPHandler函數裡邊擴展。
*本文作者:qingxp9@360PegasusTeam,轉載請註明來自 FreeBuf.COM
※快訊 | 國內白帽子發現兩個安卓漏洞,獲得谷歌11.25萬美元的獎勵
TAG:FreeBuf |