拒絕成為免費(fèi)勞動(dòng)力:檢測含有挖礦腳本的WiFi熱點(diǎn)

Author:qingxp9@360PegasusTeam
首發(fā)于:http://www.freebuf.com/articles/web/161010.html


前幾日看到一則新聞,一家星巴克店內(nèi)無線網(wǎng)絡(luò)被發(fā)現(xiàn)植入了惡意代碼,劫持網(wǎng)絡(luò)流量利用用戶設(shè)備挖掘門羅幣(XMR)。

image.png

與加密貨幣相關(guān)的安全事件總是引人注目,我們除了認(rèn)識(shí)到門羅幣具有一定的入手價(jià)值外,還再次見識(shí)到了公共WiFi的危險(xiǎn)。不久后Arnau Code寫了一篇文章,詳細(xì)介紹了如何通過MITM攻擊植入JavaScript代碼,從而讓W(xué)iFi網(wǎng)絡(luò)內(nèi)的所有設(shè)備幫助攻擊者挖礦,并以CoffeeMiner的名稱進(jìn)行了開源:https://github.com/arnaucode/coffeeMiner

image.png

我相信有很多家伙會(huì)從這個(gè)新聞以及CoffeeMiner工具中得到啟發(fā),利用類似的攻擊方式開創(chuàng)挖礦事業(yè)。不過本篇我并不想過多討論攻擊方面的問題,最近行業(yè)內(nèi)出現(xiàn)了對(duì)防御型安全人才的呼聲,因此我打算應(yīng)景的寫一篇防御角度的文章,分析如何便捷的檢測周圍WiFi網(wǎng)絡(luò)是否被植入了挖礦代碼。

后文我將圍繞“CoinHive的介紹”,“開放式WiFi網(wǎng)絡(luò)的特性”,“檢測工具的實(shí)現(xiàn)”三點(diǎn)來進(jìn)行敘述,文章的末尾將公布完整的代碼方便大家參考。

CoinHive

星巴克挖礦事件中所使用的便是CoinHive挖礦程序。Coinhive是一個(gè)提供門羅幣挖掘JS腳本的網(wǎng)站平臺(tái)(https://coinhive.com),攻擊者會(huì)將其提供的腳本植入到自己或入侵的網(wǎng)站上。一旦有用戶訪問網(wǎng)頁加載JS后,便會(huì)利用用戶設(shè)備的運(yùn)算資源挖掘門羅幣。

在CoinHive官網(wǎng)注冊(cè)登陸后,在其文檔中發(fā)現(xiàn)了多種部署方式的介紹,包括JS代碼形式、人機(jī)驗(yàn)證形式、Wordpress插件形式等等,種類非常豐富。

image.png

比如注冊(cè)登陸時(shí)候的人機(jī)驗(yàn)證,就會(huì)啟動(dòng)挖礦程序,等待一段時(shí)間的挖礦后才能登錄。

image.png

根據(jù)JavaScript Miner的介紹文檔,將事例代碼放入網(wǎng)站的html中就可以了,部署極其簡單。

相應(yīng)的,屏蔽的方法也很簡單,各種Adblock軟件早已將它們屏蔽啦。

image.png

根據(jù)提示,如果不想有提示用戶的彈窗可以將代碼中的 authedmine.min.js 替換為 coinhive.min.js。

開放式WiFi的特性

無密碼的開放式WiFi網(wǎng)絡(luò)一直以來因其存在的安全威脅為廣大安全人員所詬病,主要在于兩點(diǎn):攻擊者可輕易建立同名釣魚WiFi(客戶端會(huì)自動(dòng)連接?。ㄐ艛?shù)據(jù)未加密容易被嗅探。

最近Wi-Fi聯(lián)盟表示將在即將發(fā)布的WPA3中,添加對(duì)開放式WiFi的通信數(shù)據(jù)加密。但在支持WPA3的設(shè)備被廣泛使用前,需要警惕相應(yīng)的攻擊場景還會(huì)存在很長一段時(shí)間?;氐奖疚?,開放式的WiFi網(wǎng)絡(luò)一直是類似惡意攻擊發(fā)生的重災(zāi)區(qū),結(jié)合剛剛所介紹的“通信數(shù)據(jù)未加密特性”,我們的檢測工具實(shí)現(xiàn)原理就呼之欲出了,即監(jiān)聽明文的802.11數(shù)據(jù)幀,當(dāng)發(fā)現(xiàn)目標(biāo)信息便進(jìn)行告警。

檢測工具的實(shí)現(xiàn)

搭建測試熱點(diǎn)

首先,建立一個(gè)包含攻擊代碼的開放式WiFi網(wǎng)絡(luò)方便后續(xù)測試。

筆者是通過無線網(wǎng)卡Hostapd建立軟AP,Dnsmasq提供DHCP及DNS服務(wù),本地Nginx提供Web服務(wù)并植入CoinHive代碼,最后通過iptables配置Captive Portal(強(qiáng)制認(rèn)證登陸頁面)。如此當(dāng)移動(dòng)設(shè)備連接到該熱點(diǎn),會(huì)自動(dòng)彈窗提示需要認(rèn)證,點(diǎn)擊后就會(huì)訪問含有挖礦代碼的網(wǎng)頁了。

考慮到大部分讀者并不像我這樣富有,同時(shí)擁有兩塊無線網(wǎng)卡?。ㄖ笮枰粔K來進(jìn)行監(jiān)聽),而且Hostapd、Dnsmasq、Nginx、iptables這套方案的部署配置較為復(fù)雜,沒有祖?zhèn)鞯氖炙嚾菀壮鰡栴}。在此我推薦一個(gè)簡單的方案:利用隨身WiFi或者家庭路由器建立熱點(diǎn),配置認(rèn)證頁面到本地Web服務(wù)。好吧,如果沒有認(rèn)證頁面的配置選項(xiàng),手動(dòng)訪問網(wǎng)頁也是一樣的。

監(jiān)聽明文802.11數(shù)據(jù)幀

下一步,我們來嗅探傳遞在空氣中的HTTP數(shù)據(jù)。將無線網(wǎng)卡配置為Monitor模式,切換到熱點(diǎn)所在的Channel,并使用Wireshark進(jìn)行觀察。


ifconfig wlan0 down

iwconfig wlan0 mode monitor

ifconfig wlan0 up

iwconfig wlan0 channel 11

映入眼簾的應(yīng)該是大量的各種802.11幀。我們的目標(biāo)是未加密的數(shù)據(jù)幀,其中的HTTP數(shù)據(jù)將會(huì)被Wireshark所解析,我們鍵入“http.response”進(jìn)行篩選HTTP Response包。與此同時(shí),需要讓我們的移動(dòng)設(shè)備訪問目標(biāo)網(wǎng)頁,接著就能觀察到一些數(shù)據(jù)啦。

image.png

我們直接嘗試過濾包含CoinHive特征代碼的數(shù)據(jù)包“data-text-lines contains CoinHive.Anonymous”,結(jié)果如下。

image.png

此時(shí)我們便能得出結(jié)論,該熱點(diǎn)存在著CoinHive挖礦代碼。從wlan.sa字段取得該熱點(diǎn)MAC地址,再結(jié)合Beacon或Probe幀獲取其熱點(diǎn)名稱。當(dāng)然我們也可以使用Wireshark的命令行工具Tshark在終端里進(jìn)行操作,并指定輸出格式只輸出熱點(diǎn)MAC地址。

image.png

使用Scapy編寫惡意熱點(diǎn)識(shí)別框架

總結(jié)一下,我們的程序就像是一個(gè)對(duì)明文802.11數(shù)據(jù)幀的分析器。按照這個(gè)思路,只需要添加不同的識(shí)別規(guī)則就能擴(kuò)展出對(duì)各種不同攻擊行為的檢測。為了添加擴(kuò)展性,在此使用Scapy來編寫一個(gè)簡單的框架。

1.使用PIP安裝Scapy

注意由于scapy沒有對(duì)http協(xié)議進(jìn)行解析,所以引入了scapy_http擴(kuò)展包。


sudo apt install python-pip

pip install scapy

pip install scapy_http

2.獲取熱點(diǎn)列表

上面tshark的程序有個(gè)缺點(diǎn),就是不太方便同時(shí)顯示出熱點(diǎn)名稱。于是在此框架中,我們會(huì)先掃描一下周邊熱點(diǎn)信息以便后用。


from scapy.all import *

from scapy.layers import http

iface = "wlan0"
ap_dict = {}
def BeaconHandler(pkt) :
  if pkt.haslayer(Dot11) :
    if pkt.type == 0 and pkt.subtype == 8 :
        if pkt.addr2 not in ap_dict.keys() :
            ap_dict[pkt.addr2] = pkt.info

sniff(iface=iface, prn=BeaconHandler, timeout=1)

3.監(jiān)聽含有關(guān)鍵字的HTTP數(shù)據(jù)包

當(dāng)匹配到告警規(guī)則后,輸出熱點(diǎn)名稱、MAC地址及告警詳情。


filter_response = "tcp src port 80"

def HTTPHandler(pkt):

  if pkt.haslayer('HTTP'):

    if "CoinHive.Anonymous" in pkt.load:

      mac = pkt.addr2

      if mac in ap_dict.keys() :

          ssid = ap_dict[mac]

          reason = "Coinhive_miner"

          print "Find Rogue AP: %s(%s) -- %s" %(ssid, mac, reason)

      else:

          print mac

sniff(iface=iface, prn=HTTPHandler, filter=filter_response, timeout=5)

4.監(jiān)聽模式及信道切換

2.4GHz中,熱點(diǎn)一般會(huì)建立在1、6、11三個(gè)互不干擾的信道上。為了增加監(jiān)聽覆蓋的信道,讓我們的程序增加信道切換功能。

image.png

import os

print "[+] Set iface %s to monitor mode" %(iface)

os.system("ifconfig " + iface + " down")

os.system("iwconfig " + iface + " mode monitor")

os.system("ifconfig " + iface + " up")

channels = [1,6,11]

print "[+] Sniffing on channel " + str(channels)

while True:

    for channel in channels:

        os.system("iwconfig " + iface + " channel " + str(channel))

... 

5.最終效果

把以上的模塊組裝在一起就可以使用啦,可以在這查看完整代碼。

測試效果如下:


demo.gif

如果你想添加更多的檢測規(guī)則,可以在HTTPHandler函數(shù)里邊擴(kuò)展。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ns3-model-library.pdf wifi-model 翻譯 wifi-model 33.1 Desig...
    shawn168閱讀 13,015評(píng)論 0 9
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,733評(píng)論 25 709
  • 數(shù)據(jù)鏈路層使用的信道有以下兩種類型: ①點(diǎn)對(duì)點(diǎn)信道,一對(duì)一的點(diǎn)對(duì)點(diǎn)通信方式 ②廣播信道,一對(duì)多的廣播通信方式,復(fù)雜...
    dmmy大印閱讀 3,482評(píng)論 0 3
  • 尋香去,落花成冢,惹鼻香進(jìn),失魂落魄。驀然回首終是夢(mèng),淚下顏憔魂斷腸。 憑望處,崖間一壑,晴陽入眼,墜人稍眉。奈何...
    千Li閱讀 247評(píng)論 3 1
  • 以前一直對(duì)iOS App簽名原理了解的不是很透徹,最近看到一篇文章,講解的很透徹,特地轉(zhuǎn)發(fā)一下 文章地址:[htt...
    哈羅弟弟閱讀 754評(píng)論 0 1

友情鏈接更多精彩內(nèi)容