拒絕成為免費勞動力:檢測含有挖礦腳本的WiFi熱點
作者:qingxp9@360PegasusTeam
前幾日看到一則新聞,一家星巴克店內無線網路被發現植入了惡意代碼,劫持網路流量利用用戶設備挖掘門羅幣(XMR)。
與加密貨幣相關的安全事件總是引人注目,我們除了認識到門羅幣具有一定的入手價值外,還再次見識到了公共WiFi的危險。
不久後Arnau Code寫了一篇文章,詳細介紹了如何通過MITM攻擊植入JavaScript代碼,從而讓WiFi網路內的所有設備幫助攻擊者挖礦,並以CoffeeMiner的名稱進行了開源:https://github.com/arnaucode/coffeeMiner
我相信有很多傢伙會從這個新聞以及CoffeeMiner工具中得到啟發,利用類似的攻擊方式開創挖礦事業。不過本篇我並不想過多討論攻擊方面的問題,最近行業內出現了對防禦型安全人才的呼聲,因此我打算應景的寫一篇防禦角度的文章,分析如何便捷的檢測周圍WiFi網路是否被植入了挖礦代碼。
後文我將圍繞「CoinHive的介紹」,「開放式WiFi網路的特性」,「檢測工具的實現」三點來進行敘述,文章的末尾將公布完整的代碼方便大家參考。
CoinHive
星巴克挖礦事件中所使用的便是CoinHive挖礦程序。Coinhive是一個提供門羅幣挖掘JS腳本的網站平台(https://coinhive.com),攻擊者會將其提供的腳本植入到自己或入侵的網站上。一旦有用戶訪問網頁載入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進行觀察。
ifconfig wlan0 downnniwconfig wlan0 mode monitornnifconfig wlan0 upnniwconfig wlan0 channel 11n
映入眼帘的應該是大量的各種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來編寫一個簡單的框架。
使用PIP安裝Scapy
注意由於scapy沒有對http協議進行解析,所以引入了scapy_http擴展包。
sudo apt install python-pipnnpip install scapynnpip install scapy_httpn
獲取熱點列表
上面tshark的程序有個缺點,就是不太方便同時顯示出熱點名稱。於是在此框架中,我們會先掃描一下周邊熱點信息以便後用。
from scapy.all import *nnfrom scapy.layers import httpnniface = "wlan0"nap_dict = {}ndef BeaconHandler(pkt) :n if pkt.haslayer(Dot11) :n if pkt.type == 0 and pkt.subtype == 8 :n if pkt.addr2 not in ap_dict.keys() :n ap_dict[pkt.addr2] = pkt.infonnsniff(iface=iface, prn=BeaconHandler, timeout=1)n
監聽含有關鍵字的HTTP數據包
當匹配到告警規則後,輸出熱點名稱、MAC地址及告警詳情。
filter_response = "tcp src port 80"nndef HTTPHandler(pkt):nn if pkt.haslayer(HTTP):nn if "CoinHive.Anonymous" in pkt.load:nn mac = pkt.addr2nn if mac in ap_dict.keys() :nn ssid = ap_dict[mac]nn reason = "Coinhive_miner"nn print "Find Rogue AP: %s(%s) -- %s" %(ssid, mac, reason)nn else:nn print macnnsniff(iface=iface, prn=HTTPHandler, filter=filter_response, timeout=5)n
監聽模式及信道切換
2.4GHz中,熱點一般會建立在1、6、11三個互不干擾的信道上。為了增加監聽覆蓋的信道,讓我們的程序增加信道切換功能。
import osnnprint "[+] Set iface %s to monitor mode" %(iface)nnos.system("ifconfig " + iface + " down")nnos.system("iwconfig " + iface + " mode monitor")nnos.system("ifconfig " + iface + " up")nnchannels = [1,6,11]nnprint "[+] Sniffing on channel " + str(channels)nnwhile True:nn for channel in channels:nn os.system("iwconfig " + iface + " channel " + str(channel))nn ...n
最終效果
把以上的模塊組裝在一起就可以使用啦,可以[在這查看完整代碼](https://github.com/360PegasusTeam/WiFi-Miner-Detector)。
測試效果如下:
如果你想添加更多的檢測規則,可以在HTTPHandler函數裡邊擴展。
登錄安全客 - 有思想的安全新媒體www.anquanke.com/,或下載安全客APP來獲取更多最新資訊吧~
推薦閱讀:
※為何美國比特幣挖礦量遠少於中國,卻擁有世界最大的比特幣持有量?
※老公突然要抵押房產挖比特幣,這事兒靠譜么?
※準備投入200萬買礦機挖礦,請教礦機挖礦幣種的配置策略?
※如何評價現階段顯卡價格爆增還有價無市?
TAG:Wi-Fi免费热点 | btc挖矿 | 比特币Bitcoin |