王東海,張 昊
(蘇州工業(yè)職業(yè)技術(shù)學(xué)院,江蘇 蘇州 215104)
隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展和網(wǎng)絡(luò)的普及,給人們的生活帶來(lái)極大便捷的同時(shí),網(wǎng)絡(luò)攻擊也日益增多,大量的企業(yè)和個(gè)人都面臨被攻擊和入侵的風(fēng)險(xiǎn)。在2014年DerbyCon的黑客大會(huì)上[1],柏林的安全研究人員公布了Badusb的危害,這種漏洞會(huì)危及大部分帶有USB接口的主機(jī),而現(xiàn)在使用USB接口的設(shè)備越來(lái)越多[2],含有惡意代碼的USB設(shè)備一旦插入電腦,可控制電腦并傳播事先準(zhǔn)備好的USB病毒[3]。因此,Badusb的攻擊手段引起了各個(gè)企業(yè)和研究人員的重視,研究其防范措施也變得十分重要。
Arduino是一款操作方便、易于學(xué)習(xí)的開(kāi)源電子平臺(tái)。電子板上的微處理器可以通過(guò)Arduino的編程語(yǔ)言進(jìn)行程序編寫(xiě),生成編譯出的hex文件燒錄進(jìn)電子板,就可以通過(guò)微處理器來(lái)控制電路板上的各種硬件。
Cobalt Strike是一款用來(lái)進(jìn)行滲透測(cè)試的工具,可以控制木馬,主要功能有端口轉(zhuǎn)發(fā)、端口掃描、生成木馬、克隆站點(diǎn)等。
Arduino Leonardo芯片是Atmel ATmega32u4型微控制器,可以提供20個(gè)數(shù)字IO(其中7個(gè)可以用來(lái)PWM輸出,12個(gè)用作模擬輸入)、一個(gè)16 MHz晶體振蕩器、一個(gè)微型USB連接、一個(gè)電源插孔、一個(gè)ICSP接頭盒和一個(gè)復(fù)位開(kāi)關(guān)。ATmega32U4 MCU內(nèi)置了USB的通信模塊,不需要輔助處理器,允許Leonardo作為HID設(shè)備連接計(jì)算機(jī)[4]。
一般情況下,普通的木馬都是通過(guò)互聯(lián)網(wǎng)進(jìn)入目標(biāo)主機(jī),但要入侵主機(jī),需要滿(mǎn)足的條件比較苛刻,主要有以下幾個(gè)因素:
(1)需要在互聯(lián)網(wǎng)上偽裝成正常軟件,誘導(dǎo)用戶(hù)下載。
(2)需要通過(guò)瀏覽器的安全檢測(cè)。
(3)需要通過(guò)殺毒軟件的安全檢測(cè)。
(4)在運(yùn)行時(shí),需要通過(guò)殺毒軟件的行為偵查檢測(cè)。
可以看出,普通木馬想要大展身手,最關(guān)鍵的就是如何進(jìn)入被控制的主機(jī),這種攻擊手法無(wú)法針對(duì)某臺(tái)特定主機(jī)進(jìn)行攻擊。因此,通過(guò)具有社會(huì)工程學(xué)性的攻擊(即直接對(duì)物理設(shè)備)是一種比較好的選擇,將Shellcode放在服務(wù)器上,利用Badusb觸發(fā)下載Shellcode,并運(yùn)行Shellcode,由于這個(gè)過(guò)程沒(méi)有文件落地,目標(biāo)主機(jī)即使發(fā)現(xiàn)了入侵行為,也無(wú)法將木馬清除。
本設(shè)計(jì)選擇采用病毒免殺技術(shù),即通過(guò)修改源碼,避免殺毒軟件通過(guò)檢測(cè)MD5值進(jìn)行查殺。具體步驟如下:
(1)將主要函數(shù)內(nèi)容復(fù)制出來(lái)。
(2)將內(nèi)容加密成Base64編碼。
(3)將編碼分別賦值給函數(shù)$a1-$a5。
(4)設(shè)置函數(shù)$a6,即將$a1-$a5賦值給它,base64解碼并運(yùn)行。
2.2.1 中文輸入法繞過(guò)
Badusb搭載Arduino驅(qū)動(dòng),通過(guò)Arduino IDE接收到Arduino代碼后,調(diào)用Arduino官方的鍵盤(pán)庫(kù),進(jìn)行模擬鍵盤(pán)操作控制主機(jī),調(diào)用Keyboard.h庫(kù)后,啟動(dòng)鍵盤(pán)模擬,用Keyboard.println函數(shù)對(duì)主機(jī)發(fā)送鍵盤(pán)的指令。
Keyboard.println函數(shù)向連接的主機(jī)發(fā)送一個(gè)鍵盤(pán)按鍵動(dòng)作,以換行符和回車(chē)符結(jié)束。但在仿真環(huán)境測(cè)試中,由于中文輸入法的原因,影響到該函數(shù)的回車(chē)符,回車(chē)會(huì)變成中文輸入法,從而導(dǎo)致運(yùn)行失敗。為了防止這種情況發(fā)生,用Keyboard.press(KEY_CAPS_LOCK)函數(shù)調(diào)用KEY_CAPS_LOCK后,可以打開(kāi)大寫(xiě)狀態(tài),繞過(guò)中文輸入法,在輸入完成后再將大寫(xiě)狀態(tài)關(guān)閉。實(shí)現(xiàn)的關(guān)鍵代碼如下:
Keyboard.press(KEY_CAPS_LOCK);//利用打開(kāi)大寫(xiě)繞過(guò)輸入法
Keyboard.release(KEY_CAPS_LOCK);
2.2.2 敏感程序繞過(guò)
由于殺毒軟件會(huì)對(duì)某些函數(shù)進(jìn)行行為探測(cè),例如火絨、360安全衛(wèi)士、騰訊管家等,他們會(huì)對(duì)-w hidden隱藏窗口進(jìn)行檢測(cè)。因此,設(shè)計(jì)過(guò)程中使用CMD窗口打開(kāi)PowerShell,并將CMD的窗口大小cols設(shè)置為15,lines設(shè)置為1,命令為:CMD/t:01/k @ECHO OFF &&MODE CON:cols=15 lines=1。使用這種方法可以有效避免彈出警告窗口。
2.2.3 云木馬攻擊設(shè)計(jì)
主機(jī)一般都安裝了殺毒軟件,木馬存放在磁盤(pán)里非常容易被查殺,因此將木馬放置在云服務(wù)器上,在本地下載執(zhí)行,可以避免被殺毒軟件查殺。云木馬攻擊實(shí)現(xiàn)的關(guān)鍵代碼如下:
Delay(1000)
Keyboard.begin();
delay(1500);
Keyboard.press(KEY_LEFT_GUI);
delay(500);
Keyboard.press(‘r’)
delay(500);
Keyboard.release(KEY_LEFT_GUI);
Keyboard.release(‘r’);
delay(500);
Keyboard.press(KEY_CAPS_LOCK);
Keyboard.release(KEY_CAPS_LOCK);
Keyboard.println(“CMD/t:01/k @ECHO OFF &&MODE CON:cols=15 lines=1”);
delay(500);
Keyboard.press(KEY_RETURN);
Keyboard.release(KEY_RETURN);
由于云木馬需要存放在公網(wǎng)服務(wù)器上,所以必須先搭建一臺(tái)公網(wǎng)服務(wù)器。在公網(wǎng)服務(wù)器上安裝Java環(huán)境,使用CS框架實(shí)現(xiàn)云木馬攻擊。
搭建公網(wǎng)服務(wù)器的具體步驟如下:
(1)在阿里云上購(gòu)買(mǎi)一臺(tái)主機(jī)。
(2)選擇輕量級(jí)服務(wù)器。
(3)將系統(tǒng)配置為Centos7。
(4)遠(yuǎn)程連接設(shè)置服務(wù)器密碼。
(5)使用SSH連接工具登錄服務(wù)器。
(1)在安裝Java環(huán)境之前需要先更新Yum源,Yum源是Centos的軟件包管理器,主要功能是自動(dòng)升級(jí)。只有更新完Yum源之后,安裝的Java環(huán)境才會(huì)是最新的。執(zhí)行命令如下:
[root@iZ2ze1e64qek16ztlp1f3tZ~]# yum install update。
(2)安裝Java庫(kù)。
執(zhí)行命令如下:
[root@iZ2ze1e64qek16ztlp1f3tZ~]# yum-y list java*。
(3)安裝Java11。
執(zhí)行命令如下:
[root@iZ2ze1e64qek16ztlp1f3tZ~]#yum-y install java-11-openjdk.x86_64。
(4)查看Java版本。
安裝好Java后,測(cè)試Java命令是否可以使用,執(zhí)行命令如下:
[root@iZ2ze1e64qek16ztlp1f3tZ~]# java-version。
(1)使用FTP工具將Cobalt strike上傳到阿里云服務(wù)器。
(2)給Teamserver增加執(zhí)行權(quán)限。
具體操作步驟如下:
[root@iZ2ze1e64qek16ztlp1f3tZ~]# cd/cobaltstrike4.0-cracked/
[root@iZ2ze1e64qek16ztlp1f3tZ cobaltstrike4.0-cracked]# chmod +x teamserver
(3)執(zhí)行Teamserver服務(wù)。
設(shè)置阿里云的服務(wù)器IP地址和密碼。
(4)使用Cobalt Strike 客戶(hù)端連接服務(wù)端。
在阿里云的安全組中打開(kāi)50050端口,在Windows上打開(kāi)Start-cn.bat,然后在主機(jī)上輸入服務(wù)器IP地址,使用默認(rèn)端口號(hào),輸入用戶(hù)名和服務(wù)器的密碼,單擊連接按鈕即可登錄。配置界面如圖1所示。
圖1 CS登錄界面
對(duì)設(shè)計(jì)的木馬通過(guò)常用的殺毒軟件進(jìn)行測(cè)試,主要包括360安全衛(wèi)士、騰訊管家和火絨。
目前測(cè)試方式主要有兩種,一種是靜態(tài)掃描,將木馬存放在磁盤(pán)中,用殺毒軟件進(jìn)行掃描,看能否識(shí)別;另一種是動(dòng)態(tài)掃描,即木馬運(yùn)行時(shí),用殺毒軟件進(jìn)行掃描,看是否檢測(cè)到。在此采用靜態(tài)掃描的方式,測(cè)試結(jié)果如表1所示。
表1 殺毒軟件測(cè)試結(jié)果
通過(guò)對(duì)測(cè)試結(jié)果進(jìn)行比較,木馬的設(shè)計(jì)選擇采用PowerShell繞過(guò)的方式。
燒錄是對(duì)一次性可編程只讀存儲(chǔ)器進(jìn)行一次寫(xiě)入操作。燒錄時(shí)需要注意以下幾個(gè)方面:
(1)芯片類(lèi)型的選擇。若芯片類(lèi)型選錯(cuò),燒錄時(shí)會(huì)對(duì)存儲(chǔ)器造成不可逆的傷害。
(2)燒錄指令。若不小心給Badusb燒錄了一個(gè)關(guān)機(jī)的指令,插入Badusb就會(huì)關(guān)機(jī),無(wú)法對(duì)Badusb再進(jìn)行編程,從而進(jìn)入一種死循環(huán)。因此,在燒錄的時(shí)候必須仔細(xì)檢查代碼,確認(rèn)代碼無(wú)誤后,再進(jìn)行燒錄。
燒錄的具體步驟如下:
(1)在Arduino IDE的工具欄中,選擇項(xiàng)目,編譯二進(jìn)制文件后,編譯器會(huì)要求再次編譯,編譯后會(huì)產(chǎn)生2個(gè)hex文件。編譯后界面如圖2所示,其中powershell_360.ino.with_bootloader.leonardo.hex文件帶有bootloader固件,包含有引導(dǎo)裝載程序,會(huì)在操作系統(tǒng)運(yùn)行內(nèi)核之前運(yùn)行,初始化系統(tǒng)的軟硬件,Badusb不需要這個(gè)功能,所以選擇不攜帶bootloade固件的powershell_360.ino.leonardo.hex文件。
圖2 hex文件生成界面
(2)在Progisp中,主控選擇Atmega32U4,在Parogisp的右側(cè)選中“調(diào)入flash”,在彈出的窗口中,選擇hex文件。設(shè)置好之后單擊“自動(dòng)”按鈕,進(jìn)入自動(dòng)燒錄狀態(tài)。
Badusb是一種滲透能力非常強(qiáng)的攻擊方式,對(duì)安全防范不到位的主機(jī)威脅非常大。本文設(shè)計(jì)了一種改良型的木馬,在設(shè)計(jì)Arduino程序和Cobaltstrike木馬過(guò)程中,將木馬的特征碼進(jìn)行分割加密,再組合起來(lái)解密,用Shellcode編譯器對(duì)文件進(jìn)行編譯,將改良的木馬通過(guò)殺毒軟件進(jìn)行測(cè)試,結(jié)果表明,Arduino增加了Badusb的執(zhí)行能力,可以繞過(guò)更多殺毒軟件的安全防護(hù),達(dá)到了設(shè)計(jì)的預(yù)期效果。但本測(cè)試也有一些不足,主要是選擇的殺毒軟件種類(lèi)偏少。