康云川,代 彥
(1.重慶三峽學(xué)院 計(jì)算機(jī)科學(xué)與工程學(xué)院,重慶 404000;2.重慶市文化信息中心,重慶 401121)
計(jì)算機(jī)現(xiàn)有的USB接口給廣大用戶提供了相應(yīng)的便利,例如移動(dòng)存儲(chǔ)設(shè)備數(shù)據(jù)的存取、移動(dòng)設(shè)備的充電、輸入設(shè)備的連接等。由于人們對(duì)信息安全意識(shí)的不足,即使有相應(yīng)的了解或認(rèn)知,關(guān)注點(diǎn)也僅限于計(jì)算機(jī)操作系統(tǒng)或應(yīng)用軟件安全,很少關(guān)注USB層面的安全問題。而USB接口提供了多條入侵路徑[1],當(dāng)外置設(shè)備插入U(xiǎn)SB接口時(shí),操作系統(tǒng)會(huì)自動(dòng)識(shí)別、配置并為接口加載獨(dú)立的驅(qū)動(dòng)程序,這也使得USB接口成為了不法分子入侵、竊取數(shù)據(jù)的途徑之一,給用戶帶來了嚴(yán)重的安全威脅[2]。
據(jù)統(tǒng)計(jì),全球數(shù)十億臺(tái)USB設(shè)備遭受過USB Bomb、BadUSB等攻擊,例如Stuxnet蠕蟲利用USB操縱伊朗核電站的離心機(jī),最終破壞了伊朗核計(jì)劃的關(guān)鍵部分[3]。國外有一款名為USB Kill Stick的設(shè)備,當(dāng)用戶將該設(shè)備插入任何一部計(jì)算機(jī)或者含有USB接口的電子產(chǎn)品,該設(shè)備會(huì)馬上破壞整部計(jì)算機(jī)或電子設(shè)備,USB Kill Stick沒有病毒,破壞的原理是當(dāng)用戶插入U(xiǎn)SB Kill Stick后USB會(huì)通過信號(hào)線發(fā)送一道220 V的高壓沖擊波并摧毀設(shè)備。還有2013年的“棱鏡門”事件,斯諾登通過U盤把機(jī)密帶從安全局帶了出來[4],可見USB安全問題防不勝防。
USB攻擊是一種新興的技術(shù),相比傳統(tǒng)的攻擊更為隱蔽,產(chǎn)生的安全威脅更大。由于其技術(shù)實(shí)現(xiàn)相比傳統(tǒng)攻擊更具有復(fù)雜性和危害性,文中對(duì)目前USB設(shè)備常見入侵攻擊方式,Keylogger與BadUSB設(shè)備軟硬件原理進(jìn)行深度剖析,并利用可編程USB設(shè)備進(jìn)行惡意代碼的燒錄,實(shí)現(xiàn)對(duì)計(jì)算機(jī)鍵盤記錄的監(jiān)聽,操作系統(tǒng)的遠(yuǎn)程控制及用戶權(quán)限的獲取,對(duì)攻擊的防護(hù)提出相應(yīng)的解決方案。這對(duì)于保障用戶信息安全具有一定的重要意義。
常見的惡意USB設(shè)備有Keylogger,BadUSB,其特點(diǎn)具有高度的隱蔽性、偽裝性、跨平臺(tái)特性并且能逃避安全軟件的探測。攻擊方法主要是通過可編程USB接口設(shè)備,對(duì)USB設(shè)備中的單片機(jī)逆向工程編程,燒錄惡意程序,編程后的USB設(shè)備不受操作系統(tǒng)限制,具備竊取鍵盤記錄、攻擊計(jì)算機(jī)操作系統(tǒng)的功能。Keylogger與計(jì)算機(jī)主機(jī),鍵盤連接,監(jiān)聽用戶鍵盤按鍵行為記錄,實(shí)現(xiàn)計(jì)算機(jī)終端數(shù)據(jù)自動(dòng)竊取,而BadUSB設(shè)備直接連接計(jì)算機(jī)主機(jī)USB接口,向終端發(fā)起攻擊,實(shí)現(xiàn)創(chuàng)建操作系統(tǒng)超級(jí)管理員賬號(hào),開啟遠(yuǎn)程訪問端口,自動(dòng)進(jìn)行腳本程序遠(yuǎn)程下載并執(zhí)行,自動(dòng)創(chuàng)建免殺木馬后門等,實(shí)現(xiàn)對(duì)計(jì)算機(jī)終端的遠(yuǎn)程控制[5]。
Keylogger硬件采用可編程的USB接口硬件進(jìn)行逆向編程,燒錄竊聽程序,Keylogger用于監(jiān)聽用戶在使用計(jì)算機(jī)過程中的鍵盤按鍵記錄,安裝監(jiān)聽設(shè)備或監(jiān)聽軟件后的計(jì)算機(jī)。用戶在操作系統(tǒng)界面輸入管理員的權(quán)限信息,在線購物網(wǎng)站輸入銀行卡憑證,聊天工具產(chǎn)生的交流記錄,登錄社交系統(tǒng)的社交賬號(hào)密碼等,都將會(huì)被監(jiān)聽工具所竊取記錄[6]。鍵盤按鍵監(jiān)聽也是計(jì)算機(jī)取證、信息收集最為流行的手段之一。該技術(shù)雖然給計(jì)算機(jī)取證信息收集帶來了方便,但也常被不法分子所利用,常見的監(jiān)聽工具有監(jiān)聽軟件與監(jiān)聽硬件,軟件有Keystroke、鍵盤記錄者等[7]。由于軟件監(jiān)聽不是文章所研究的對(duì)象,故不再贅述。
(1)隱蔽性強(qiáng)。
監(jiān)聽設(shè)備體積較小,可以藏匿于USB延長線、鍵盤中,整個(gè)監(jiān)聽過程并未對(duì)計(jì)算機(jī)操作系統(tǒng)帶來任何影響,設(shè)備中并無惡意程序,只記錄用戶的按鍵信息,防病毒軟件也很難探測與阻止該惡意行為,從而逃避防病毒軟件的監(jiān)控與評(píng)估。且監(jiān)聽過程不影響用戶對(duì)計(jì)算機(jī)的任何操作,整個(gè)監(jiān)聽過程非常隱蔽,用戶很難察覺,如圖1和圖2所示。
圖1 Keylogger連接示意
圖2 Keylogger
(2)跨平臺(tái)性。
這種設(shè)備具有良好的跨平臺(tái)性,不受計(jì)算機(jī)操作系統(tǒng)的影響,對(duì)于Linux、Unix、Windows、MacOS等操作系統(tǒng),只要終端具有外置鍵盤都無法擺脫Keylogger的監(jiān)聽。
(3)免驅(qū)動(dòng)。
設(shè)備連接后運(yùn)行于計(jì)算機(jī)底層,且計(jì)算機(jī)不需要安裝額外的驅(qū)動(dòng),即插即用,實(shí)時(shí)性運(yùn)行,只要計(jì)算機(jī)通電后設(shè)備就開始監(jiān)聽鍵盤的記錄信息。
1.1.1 硬件原理
硬件部分是Keylogger的基礎(chǔ)載體,是數(shù)據(jù)竊取的物理實(shí)現(xiàn),其電路原理如圖3所示。硬件主要由微控芯片(MCU)與存儲(chǔ)芯片(EEPROM)等構(gòu)成,MCU完成計(jì)算機(jī)鍵盤記錄的竊取,存儲(chǔ)芯片則保存MCU竊取的記錄數(shù)據(jù),更高級(jí)的Keylogger還具有無線網(wǎng)絡(luò)傳輸單元,監(jiān)聽者可以對(duì)目標(biāo)主機(jī)的鍵盤記錄通過網(wǎng)絡(luò)進(jìn)行實(shí)時(shí)監(jiān)聽。
從圖3可知,整個(gè)竊取單元的設(shè)計(jì)并未改變USB原始的供電及數(shù)據(jù)傳輸模式,只是在接口的中間增加了單片機(jī)系統(tǒng),與主機(jī)鍵盤形成旁路。VCC、GND分別為USB電源與地線,D+與D-為USB數(shù)據(jù)線。USB接口連接了單片機(jī)控制系統(tǒng),并對(duì)MCU 8位RISC單片機(jī)與EEPROM存儲(chǔ)芯片的針腳VCC與GND供電,MCU的RA0針腳與RA2針腳開始竊取從USB接口的D+與D-數(shù)據(jù)線上傳輸?shù)臄?shù)據(jù),數(shù)據(jù)通過MCU整理后保存至EEPROM實(shí)現(xiàn)數(shù)據(jù)的竊取,而PS/2轉(zhuǎn)USB的對(duì)應(yīng)接線方式為VCC->VCC,GND->GND,D+->CLK,D-->DAT[8]。
圖3 Keylogger硬件電路
1.1.2 硬件程序
程序部分是Keylogger的系統(tǒng)核心,也是數(shù)據(jù)竊取與數(shù)據(jù)重放過程的邏輯實(shí)現(xiàn)。Keylogger可以采用C#語言或Arduino語言開發(fā)。以Arduino語言開發(fā)的代碼為例,單片機(jī)采用AVR ATMega32u4-AU芯片為主控芯片,采用PS2Keyboard、SD等內(nèi)置函數(shù)庫[9],PS2Keyboard庫主要用于與鍵盤外圍設(shè)備的通信,SD庫為SD內(nèi)存卡提供讀寫操作,用于鍵盤監(jiān)聽記錄的存儲(chǔ)。整個(gè)鍵盤記錄監(jiān)聽與存取程序代碼如圖4所示。
圖4 鍵盤記錄存取程序代碼
當(dāng)用戶敲擊鍵盤后,Keylogger收到數(shù)據(jù),keyboard.begin()函數(shù)初始化鍵盤,SD.begin函數(shù)初始化SD卡,keyboard.read()函數(shù)為讀取用戶的鍵盤行為操作,函數(shù)SD.open()以可寫的模式打開SD卡,函數(shù)file.print()將數(shù)據(jù)保存至SD卡,最終實(shí)現(xiàn)鍵盤記錄的監(jiān)聽與保存。
BadUSB也采用可編程的USB接口硬件進(jìn)行逆向編程,燒錄攻擊載荷程序,當(dāng)攻擊者向計(jì)算機(jī)或帶有USB接口的終端插入BadUSB,BadUSB就會(huì)在用戶不知情的情況下,模擬鍵盤輸入行為,向終端數(shù)據(jù)接口發(fā)送惡意指令,幾秒就可完成木馬執(zhí)行,完成操作系統(tǒng)漏洞提權(quán)、0Day漏洞攻擊等惡意行為操作;且整個(gè)攻擊設(shè)備本身不帶任何病毒或木馬,攻擊過程是通過模擬用戶對(duì)計(jì)算機(jī)的正常操作,防病毒軟件也很難探測與阻止該惡意行為,從而逃避防病毒軟件的監(jiān)控與評(píng)估。這種攻擊行為給計(jì)算機(jī)信息安全帶來了巨大的安全隱患[10]。
(1)隱蔽性強(qiáng)。
BadUSB設(shè)備體積較小,可以藏匿于任何具有USB接口的設(shè)備中,整個(gè)攻擊過程非常隱蔽,因惡意軟件是固化在硬件芯片內(nèi),防病毒軟件無法清除惡意代碼,攻擊速度非常快,用戶很難察覺,外觀如圖5所示。
圖5 BadUSB
(2)跨平臺(tái)性。
BadUSB具有良好的跨平臺(tái)性,不受計(jì)算機(jī)操作系統(tǒng)的影響,對(duì)于Linux、Unix、Windows、MacOS等操作系統(tǒng),只要終端具備USB接口都無法逃脫BadUSB的攻擊。
(3)免驅(qū)動(dòng)。
設(shè)備連接后計(jì)算機(jī)操作系統(tǒng)會(huì)自動(dòng)識(shí)別,不需要安裝額外的驅(qū)動(dòng),即插即用,實(shí)時(shí)性運(yùn)行,只要計(jì)算機(jī)通電后設(shè)備就可以對(duì)計(jì)算機(jī)實(shí)施攻擊。
(4)傳播性。
把病毒植入在USB設(shè)備的固件里,當(dāng)用戶插入BadUSB后,病毒可以在計(jì)算機(jī)磁盤里傳播或復(fù)制,而傳統(tǒng)的防病毒軟件發(fā)現(xiàn)后無法清理病毒,即使用戶對(duì)設(shè)備進(jìn)行整體格式化清理,但仍不能清除它。
1.2.1 硬件原理
BadUSB可采用ATMega32u4-AU為單片機(jī)主控芯片,該芯片是一款基于AVR的低功耗8位CMOS微控制器,并且支持USB-HID,可用于模擬用戶鍵盤,鼠標(biāo)操作行為。BadUSB硬件部分主要分為單片機(jī)控制單元(MCU)與存儲(chǔ)(SD卡)兩部分,MCU主要用于計(jì)算機(jī)USB接口的通信與終端指令的發(fā)送[11],SD卡用于保存對(duì)計(jì)算機(jī)惡意攻擊的腳本命令,其硬件電路如圖6所示。其中D1和D2二極管限制數(shù)據(jù)線上的電平,電阻R1與R2阻值均為68 Ω,防止電流過載保護(hù)計(jì)算機(jī)終端USB接口與單片機(jī)電路,上拉電阻R3阻值為2.2 kΩ,用于分辨總線狀態(tài)。
圖6 硬件電路
1.2.2 硬件程序
基于ATMega32u4-AU芯片構(gòu)建的BadUSB設(shè)備,可使用Arduino IDE環(huán)境開發(fā),Arduino IDE封裝了ATMega32u4-AU芯片常用的USB通信庫、模擬鍵盤行為的Keyboard庫、SD卡庫等[12]。模擬鍵盤輸入主要采用Keyboard.press()、Keyboard.releaseAll()、Keyboard.println()等函數(shù),Keyboard.press()函數(shù)為模擬鍵盤按鍵操作,按下后并未釋放操作,Keyboard.releaseAll()函數(shù)為釋放按鍵,Keyboard.println()函數(shù)為模擬鍵盤敲出字符并換行,其中硬件惡意攻擊程序示例代碼如圖7所示。
圖7 BadUSB攻擊程序示例代碼
圖7中的第13行、14行、15行代碼,模擬了同時(shí)按下鍵盤上的win+r鍵組合,彈出Windows操作系統(tǒng)的程序運(yùn)行窗口;第17行代碼自動(dòng)在運(yùn)行窗口輸入cmd命令,彈出Windows操作系統(tǒng)命令行窗口;第21行與第22行代碼,為Windows系統(tǒng)下創(chuàng)建用戶權(quán)限的命令;第23行代碼為添加防Windows防火墻規(guī)則,開啟遠(yuǎn)程訪問端口3389;第24行代碼為添加注冊(cè)表允許計(jì)算機(jī)被遠(yuǎn)程訪問規(guī)則。當(dāng)把編寫有以上的程序BadUSB設(shè)備插入至Windows計(jì)算機(jī)的USB接口后,該設(shè)備就會(huì)在數(shù)秒內(nèi)完成權(quán)限的創(chuàng)建,完成遠(yuǎn)程訪問端口的開啟,實(shí)現(xiàn)對(duì)計(jì)算機(jī)的遠(yuǎn)程控制,實(shí)驗(yàn)結(jié)果,如圖8所示。
圖8 BadUSB攻擊實(shí)驗(yàn)
在攻擊Windows 7及以上版本的操作系統(tǒng)時(shí),BadUSB還可以執(zhí)行超級(jí)終端powershell(new-objectSystem.Net.WebClient).DownloadFile()、Start-Process命令,攻擊設(shè)備自動(dòng)進(jìn)行惡意程序的遠(yuǎn)程下載與執(zhí)行,實(shí)現(xiàn)對(duì)計(jì)算機(jī)操作系統(tǒng)進(jìn)行的非法操作。
由于Keylogger設(shè)備體積較小、隱蔽性強(qiáng),可藏匿于鍵盤,鍵盤延長線中,插在計(jì)算機(jī)主機(jī)上也不需要安裝額外的驅(qū)動(dòng)程序,插上后甚至計(jì)算機(jī)操作系統(tǒng)也無相應(yīng)的提示信息,即插即用,這些特點(diǎn)使得用戶很難防護(hù)Keylogger的監(jiān)聽。但只要用戶意識(shí)到Keylogger的危害性,提高相應(yīng)的安全意識(shí),經(jīng)常檢查主機(jī)與鍵盤之間的連接是否安全可靠,中間是否存在可疑的設(shè)備,不使用不明來源的鍵盤,主機(jī)與鍵盤禁止任意插拔,在輸入用戶名、密碼等敏感信息時(shí),可采用軟鍵盤輸入信息,也可使用藍(lán)牙鍵盤替代有線鍵盤,還可對(duì)鍵盤鍵值進(jìn)行加密處理等,這些都可避免Keylogger設(shè)備對(duì)鍵盤記錄的監(jiān)聽[13]。
用戶的按鍵信息經(jīng)過加密處理,計(jì)算機(jī)操作系統(tǒng)根據(jù)解密算法對(duì)鍵值進(jìn)行解密獲得真實(shí)的鍵值,鍵值加密原理如圖9所示。以鍵盤上的字母“E”為例,“E”的鍵盤編碼為00_00_08_00_00_00_00_00,【引文】,如果對(duì)字母“E”的鍵盤編碼加密,加密后的密文為##_127_##_##_##_##_##_##,用戶在敲打按鍵“E”時(shí),鍵值始終以密文的方式傳送至計(jì)算機(jī)主機(jī),在計(jì)算機(jī)主機(jī)接收端,通過系統(tǒng)底層過濾驅(qū)動(dòng)對(duì)密文的鍵值信息進(jìn)行解密操作,還原“E”的正常鍵盤編碼。這樣一來監(jiān)聽工具所監(jiān)聽的按鍵信息是加密后的密文,攻擊者無法獲得用戶真實(shí)的記錄,有效地避免了鍵盤按鍵被監(jiān)聽的風(fēng)險(xiǎn),也避免了數(shù)據(jù)被竊取。
圖9 鍵值加密與解密過程
鍵值加密算法可采用RSA公鑰加密方式。假設(shè)C為密文,M為明文,發(fā)送端和接收端都必須知道n和e的值,d為私鑰由接收端保存不對(duì)外公開,公鑰KU={e,n},私鑰KR={d,n},加密解密中的模數(shù)n=pq,p,q為任意選擇的兩個(gè)素?cái)?shù),分別為23和7[14],n=pq=161。使用歐拉函數(shù)計(jì)算出整數(shù)數(shù)量φ(n)=(p-1) (q-1)=132。選擇φ(n)互素的數(shù),并且小于φ(n)的數(shù)7為e的值,e=7。根據(jù)demod132=1,d<φ(n),求出d=19。求出公鑰KU={7, 161},私鑰KR={19, 161}。
鍵盤鍵值采用RSA公鑰加密算法,公式如下:
C=Memodn
鍵值密文解密算法的公式如下:
M=Cdmodn=(Me)dmodn=Medmodn
發(fā)送端對(duì)鍵盤按鍵“E”明文編碼8進(jìn)行加密處理,如下:
C=Memodn=87mod 161=127
其中127為按鍵“E”的密文。
接收端對(duì)發(fā)送端的密文進(jìn)行解密處理,如下:
M=Cdmodn=(Me)dmodn=Medmodn·12719mod 161=8
BadUSB設(shè)備可隱藏于任何USB接口類型的設(shè)備中,其偽裝性極強(qiáng),使得用戶很難防范來源BadUSB的攻擊,而主要防護(hù)措施有以下六點(diǎn):
(1)通過限制計(jì)算機(jī)USB接口的使用,不使用陌生的USB設(shè)備。
(2)開發(fā)相應(yīng)的USB防護(hù)軟件防止BadUSB設(shè)備對(duì)主機(jī)的直接操作,當(dāng)USB設(shè)備插入計(jì)算機(jī)USB接口時(shí),操作系統(tǒng)底層預(yù)先阻止USB設(shè)備對(duì)接口的任何行為,防護(hù)軟件提示用戶設(shè)備是否受信任,用戶需輸入相應(yīng)的口令接受USB設(shè)備,避免BadUSB直接模擬鍵盤、鼠標(biāo)行為,有效降低被攻擊的幾率。
(3)可采用USB硬件防火墻,計(jì)算機(jī)所有的USB接口不直接向用戶開放,與USB硬件防火墻連接,防火墻向用戶開放接口供用戶使用,防火墻的內(nèi)部具備USB設(shè)備枚舉、內(nèi)容檢測等,USB設(shè)備必須通過防火墻安全檢測后才能接入使用[15]。防火墻原理如圖10所示。
圖10 USB硬件防火墻原理
(4)計(jì)算機(jī)USB外圍設(shè)備采用固件簽名算法、區(qū)塊鏈等技術(shù)以確保固件不被篡改,防止對(duì)USB接口外圍設(shè)備逆向編程,植入BadUSB惡意程序。
(5)建立USB設(shè)備白名單機(jī)制,操作系統(tǒng)底層判斷USB設(shè)備固件ID是否已在白名單內(nèi),以防止非法USB設(shè)備的插入,從而保護(hù)計(jì)算機(jī)免受到底層的攻擊。
(6)調(diào)整操作系統(tǒng)設(shè)備安裝策略,例如在Windows操作系統(tǒng)中設(shè)置計(jì)算機(jī)本地策略組,建立基于GUID的可信HID設(shè)備的組策略,對(duì)USB設(shè)備加載進(jìn)行嚴(yán)格限制,禁止操作系統(tǒng)CMD命令。
分析了常見的Keylogger,BadUSB設(shè)備軟硬件原理,提出了應(yīng)對(duì)安全風(fēng)險(xiǎn)的措施,可有效解決鍵盤記錄監(jiān)聽,BadUSB攻擊等USB層面的安全問題,但這些措施在實(shí)際運(yùn)用中還需對(duì)相關(guān)算法不斷優(yōu)化,安全策略進(jìn)行調(diào)整。只有當(dāng)外圍設(shè)備被視為主機(jī)不可信的數(shù)據(jù)源時(shí),USB安全協(xié)議才會(huì)被創(chuàng)新,被訪問設(shè)備的主動(dòng)認(rèn)證才能得到補(bǔ)充,才能從根本上消除惡意USB攻擊。USB層面的安全問題也是用戶自身的問題,與用戶的安全意識(shí)緊密相連,對(duì)信息系統(tǒng)安全性要求較高的用戶應(yīng)該提高使用USB設(shè)備的安全性意識(shí),應(yīng)該謹(jǐn)慎使用來自未知來源的USB設(shè)備,定期檢查設(shè)備管理器,檢查USB設(shè)備訪問記錄,以及制定合理的USB設(shè)備訪問策略,才能將安全風(fēng)險(xiǎn)降到最低。