康云川,代 彥
(1.重慶三峽學院 計算機科學與工程學院,重慶 404000;2.重慶市文化信息中心,重慶 401121)
計算機現有的USB接口給廣大用戶提供了相應的便利,例如移動存儲設備數據的存取、移動設備的充電、輸入設備的連接等。由于人們對信息安全意識的不足,即使有相應的了解或認知,關注點也僅限于計算機操作系統或應用軟件安全,很少關注USB層面的安全問題。而USB接口提供了多條入侵路徑[1],當外置設備插入USB接口時,操作系統會自動識別、配置并為接口加載獨立的驅動程序,這也使得USB接口成為了不法分子入侵、竊取數據的途徑之一,給用戶帶來了嚴重的安全威脅[2]。
據統計,全球數十億臺USB設備遭受過USB Bomb、BadUSB等攻擊,例如Stuxnet蠕蟲利用USB操縱伊朗核電站的離心機,最終破壞了伊朗核計劃的關鍵部分[3]。國外有一款名為USB Kill Stick的設備,當用戶將該設備插入任何一部計算機或者含有USB接口的電子產品,該設備會馬上破壞整部計算機或電子設備,USB Kill Stick沒有病毒,破壞的原理是當用戶插入USB Kill Stick后USB會通過信號線發送一道220 V的高壓沖擊波并摧毀設備。還有2013年的“棱鏡門”事件,斯諾登通過U盤把機密帶從安全局帶了出來[4],可見USB安全問題防不勝防。
USB攻擊是一種新興的技術,相比傳統的攻擊更為隱蔽,產生的安全威脅更大。由于其技術實現相比傳統攻擊更具有復雜性和危害性,文中對目前USB設備常見入侵攻擊方式,Keylogger與BadUSB設備軟硬件原理進行深度剖析,并利用可編程USB設備進行惡意代碼的燒錄,實現對計算機鍵盤記錄的監聽,操作系統的遠程控制及用戶權限的獲取,對攻擊的防護提出相應的解決方案。這對于保障用戶信息安全具有一定的重要意義。
常見的惡意USB設備有Keylogger,BadUSB,其特點具有高度的隱蔽性、偽裝性、跨平臺特性并且能逃避安全軟件的探測。攻擊方法主要是通過可編程USB接口設備,對USB設備中的單片機逆向工程編程,燒錄惡意程序,編程后的USB設備不受操作系統限制,具備竊取鍵盤記錄、攻擊計算機操作系統的功能。Keylogger與計算機主機,鍵盤連接,監聽用戶鍵盤按鍵行為記錄,實現計算機終端數據自動竊取,而BadUSB設備直接連接計算機主機USB接口,向終端發起攻擊,實現創建操作系統超級管理員賬號,開啟遠程訪問端口,自動進行腳本程序遠程下載并執行,自動創建免殺木馬后門等,實現對計算機終端的遠程控制[5]。
Keylogger硬件采用可編程的USB接口硬件進行逆向編程,燒錄竊聽程序,Keylogger用于監聽用戶在使用計算機過程中的鍵盤按鍵記錄,安裝監聽設備或監聽軟件后的計算機。用戶在操作系統界面輸入管理員的權限信息,在線購物網站輸入銀行卡憑證,聊天工具產生的交流記錄,登錄社交系統的社交賬號密碼等,都將會被監聽工具所竊取記錄[6]。鍵盤按鍵監聽也是計算機取證、信息收集最為流行的手段之一。該技術雖然給計算機取證信息收集帶來了方便,但也常被不法分子所利用,常見的監聽工具有監聽軟件與監聽硬件,軟件有Keystroke、鍵盤記錄者等[7]。由于軟件監聽不是文章所研究的對象,故不再贅述。
(1)隱蔽性強。
監聽設備體積較小,可以藏匿于USB延長線、鍵盤中,整個監聽過程并未對計算機操作系統帶來任何影響,設備中并無惡意程序,只記錄用戶的按鍵信息,防病毒軟件也很難探測與阻止該惡意行為,從而逃避防病毒軟件的監控與評估。且監聽過程不影響用戶對計算機的任何操作,整個監聽過程非常隱蔽,用戶很難察覺,如圖1和圖2所示。

圖1 Keylogger連接示意

圖2 Keylogger
(2)跨平臺性。
這種設備具有良好的跨平臺性,不受計算機操作系統的影響,對于Linux、Unix、Windows、MacOS等操作系統,只要終端具有外置鍵盤都無法擺脫Keylogger的監聽。
(3)免驅動。
設備連接后運行于計算機底層,且計算機不需要安裝額外的驅動,即插即用,實時性運行,只要計算機通電后設備就開始監聽鍵盤的記錄信息。
1.1.1 硬件原理
硬件部分是Keylogger的基礎載體,是數據竊取的物理實現,其電路原理如圖3所示。硬件主要由微控芯片(MCU)與存儲芯片(EEPROM)等構成,MCU完成計算機鍵盤記錄的竊取,存儲芯片則保存MCU竊取的記錄數據,更高級的Keylogger還具有無線網絡傳輸單元,監聽者可以對目標主機的鍵盤記錄通過網絡進行實時監聽。
從圖3可知,整個竊取單元的設計并未改變USB原始的供電及數據傳輸模式,只是在接口的中間增加了單片機系統,與主機鍵盤形成旁路。VCC、GND分別為USB電源與地線,D+與D-為USB數據線。USB接口連接了單片機控制系統,并對MCU 8位RISC單片機與EEPROM存儲芯片的針腳VCC與GND供電,MCU的RA0針腳與RA2針腳開始竊取從USB接口的D+與D-數據線上傳輸的數據,數據通過MCU整理后保存至EEPROM實現數據的竊取,而PS/2轉USB的對應接線方式為VCC->VCC,GND->GND,D+->CLK,D-->DAT[8]。

圖3 Keylogger硬件電路
1.1.2 硬件程序
程序部分是Keylogger的系統核心,也是數據竊取與數據重放過程的邏輯實現。Keylogger可以采用C#語言或Arduino語言開發。以Arduino語言開發的代碼為例,單片機采用AVR ATMega32u4-AU芯片為主控芯片,采用PS2Keyboard、SD等內置函數庫[9],PS2Keyboard庫主要用于與鍵盤外圍設備的通信,SD庫為SD內存卡提供讀寫操作,用于鍵盤監聽記錄的存儲。整個鍵盤記錄監聽與存取程序代碼如圖4所示。

圖4 鍵盤記錄存取程序代碼
當用戶敲擊鍵盤后,Keylogger收到數據,keyboard.begin()函數初始化鍵盤,SD.begin函數初始化SD卡,keyboard.read()函數為讀取用戶的鍵盤行為操作,函數SD.open()以可寫的模式打開SD卡,函數file.print()將數據保存至SD卡,最終實現鍵盤記錄的監聽與保存。
BadUSB也采用可編程的USB接口硬件進行逆向編程,燒錄攻擊載荷程序,當攻擊者向計算機或帶有USB接口的終端插入BadUSB,BadUSB就會在用戶不知情的情況下,模擬鍵盤輸入行為,向終端數據接口發送惡意指令,幾秒就可完成木馬執行,完成操作系統漏洞提權、0Day漏洞攻擊等惡意行為操作;且整個攻擊設備本身不帶任何病毒或木馬,攻擊過程是通過模擬用戶對計算機的正常操作,防病毒軟件也很難探測與阻止該惡意行為,從而逃避防病毒軟件的監控與評估。這種攻擊行為給計算機信息安全帶來了巨大的安全隱患[10]。
(1)隱蔽性強。
BadUSB設備體積較小,可以藏匿于任何具有USB接口的設備中,整個攻擊過程非常隱蔽,因惡意軟件是固化在硬件芯片內,防病毒軟件無法清除惡意代碼,攻擊速度非常快,用戶很難察覺,外觀如圖5所示。

圖5 BadUSB
(2)跨平臺性。
BadUSB具有良好的跨平臺性,不受計算機操作系統的影響,對于Linux、Unix、Windows、MacOS等操作系統,只要終端具備USB接口都無法逃脫BadUSB的攻擊。
(3)免驅動。
設備連接后計算機操作系統會自動識別,不需要安裝額外的驅動,即插即用,實時性運行,只要計算機通電后設備就可以對計算機實施攻擊。
(4)傳播性。
把病毒植入在USB設備的固件里,當用戶插入BadUSB后,病毒可以在計算機磁盤里傳播或復制,而傳統的防病毒軟件發現后無法清理病毒,即使用戶對設備進行整體格式化清理,但仍不能清除它。
1.2.1 硬件原理
BadUSB可采用ATMega32u4-AU為單片機主控芯片,該芯片是一款基于AVR的低功耗8位CMOS微控制器,并且支持USB-HID,可用于模擬用戶鍵盤,鼠標操作行為。BadUSB硬件部分主要分為單片機控制單元(MCU)與存儲(SD卡)兩部分,MCU主要用于計算機USB接口的通信與終端指令的發送[11],SD卡用于保存對計算機惡意攻擊的腳本命令,其硬件電路如圖6所示。其中D1和D2二極管限制數據線上的電平,電阻R1與R2阻值均為68 Ω,防止電流過載保護計算機終端USB接口與單片機電路,上拉電阻R3阻值為2.2 kΩ,用于分辨總線狀態。

圖6 硬件電路
1.2.2 硬件程序
基于ATMega32u4-AU芯片構建的BadUSB設備,可使用Arduino IDE環境開發,Arduino IDE封裝了ATMega32u4-AU芯片常用的USB通信庫、模擬鍵盤行為的Keyboard庫、SD卡庫等[12]。模擬鍵盤輸入主要采用Keyboard.press()、Keyboard.releaseAll()、Keyboard.println()等函數,Keyboard.press()函數為模擬鍵盤按鍵操作,按下后并未釋放操作,Keyboard.releaseAll()函數為釋放按鍵,Keyboard.println()函數為模擬鍵盤敲出字符并換行,其中硬件惡意攻擊程序示例代碼如圖7所示。

圖7 BadUSB攻擊程序示例代碼
圖7中的第13行、14行、15行代碼,模擬了同時按下鍵盤上的win+r鍵組合,彈出Windows操作系統的程序運行窗口;第17行代碼自動在運行窗口輸入cmd命令,彈出Windows操作系統命令行窗口;第21行與第22行代碼,為Windows系統下創建用戶權限的命令;第23行代碼為添加防Windows防火墻規則,開啟遠程訪問端口3389;第24行代碼為添加注冊表允許計算機被遠程訪問規則。當把編寫有以上的程序BadUSB設備插入至Windows計算機的USB接口后,該設備就會在數秒內完成權限的創建,完成遠程訪問端口的開啟,實現對計算機的遠程控制,實驗結果,如圖8所示。

圖8 BadUSB攻擊實驗
在攻擊Windows 7及以上版本的操作系統時,BadUSB還可以執行超級終端powershell(new-objectSystem.Net.WebClient).DownloadFile()、Start-Process命令,攻擊設備自動進行惡意程序的遠程下載與執行,實現對計算機操作系統進行的非法操作。
由于Keylogger設備體積較小、隱蔽性強,可藏匿于鍵盤,鍵盤延長線中,插在計算機主機上也不需要安裝額外的驅動程序,插上后甚至計算機操作系統也無相應的提示信息,即插即用,這些特點使得用戶很難防護Keylogger的監聽。但只要用戶意識到Keylogger的危害性,提高相應的安全意識,經常檢查主機與鍵盤之間的連接是否安全可靠,中間是否存在可疑的設備,不使用不明來源的鍵盤,主機與鍵盤禁止任意插拔,在輸入用戶名、密碼等敏感信息時,可采用軟鍵盤輸入信息,也可使用藍牙鍵盤替代有線鍵盤,還可對鍵盤鍵值進行加密處理等,這些都可避免Keylogger設備對鍵盤記錄的監聽[13]。
用戶的按鍵信息經過加密處理,計算機操作系統根據解密算法對鍵值進行解密獲得真實的鍵值,鍵值加密原理如圖9所示。以鍵盤上的字母“E”為例,“E”的鍵盤編碼為00_00_08_00_00_00_00_00,【引文】,如果對字母“E”的鍵盤編碼加密,加密后的密文為##_127_##_##_##_##_##_##,用戶在敲打按鍵“E”時,鍵值始終以密文的方式傳送至計算機主機,在計算機主機接收端,通過系統底層過濾驅動對密文的鍵值信息進行解密操作,還原“E”的正常鍵盤編碼。這樣一來監聽工具所監聽的按鍵信息是加密后的密文,攻擊者無法獲得用戶真實的記錄,有效地避免了鍵盤按鍵被監聽的風險,也避免了數據被竊取。

圖9 鍵值加密與解密過程
鍵值加密算法可采用RSA公鑰加密方式。假設C為密文,M為明文,發送端和接收端都必須知道n和e的值,d為私鑰由接收端保存不對外公開,公鑰KU={e,n},私鑰KR={d,n},加密解密中的模數n=pq,p,q為任意選擇的兩個素數,分別為23和7[14],n=pq=161。使用歐拉函數計算出整數數量φ(n)=(p-1) (q-1)=132。選擇φ(n)互素的數,并且小于φ(n)的數7為e的值,e=7。根據demod132=1,d<φ(n),求出d=19。求出公鑰KU={7, 161},私鑰KR={19, 161}。
鍵盤鍵值采用RSA公鑰加密算法,公式如下:
C=Memodn
鍵值密文解密算法的公式如下:
M=Cdmodn=(Me)dmodn=Medmodn
發送端對鍵盤按鍵“E”明文編碼8進行加密處理,如下:
C=Memodn=87mod 161=127
其中127為按鍵“E”的密文。
接收端對發送端的密文進行解密處理,如下:
M=Cdmodn=(Me)dmodn=Medmodn·12719mod 161=8
BadUSB設備可隱藏于任何USB接口類型的設備中,其偽裝性極強,使得用戶很難防范來源BadUSB的攻擊,而主要防護措施有以下六點:
(1)通過限制計算機USB接口的使用,不使用陌生的USB設備。
(2)開發相應的USB防護軟件防止BadUSB設備對主機的直接操作,當USB設備插入計算機USB接口時,操作系統底層預先阻止USB設備對接口的任何行為,防護軟件提示用戶設備是否受信任,用戶需輸入相應的口令接受USB設備,避免BadUSB直接模擬鍵盤、鼠標行為,有效降低被攻擊的幾率。
(3)可采用USB硬件防火墻,計算機所有的USB接口不直接向用戶開放,與USB硬件防火墻連接,防火墻向用戶開放接口供用戶使用,防火墻的內部具備USB設備枚舉、內容檢測等,USB設備必須通過防火墻安全檢測后才能接入使用[15]。防火墻原理如圖10所示。

圖10 USB硬件防火墻原理
(4)計算機USB外圍設備采用固件簽名算法、區塊鏈等技術以確保固件不被篡改,防止對USB接口外圍設備逆向編程,植入BadUSB惡意程序。
(5)建立USB設備白名單機制,操作系統底層判斷USB設備固件ID是否已在白名單內,以防止非法USB設備的插入,從而保護計算機免受到底層的攻擊。
(6)調整操作系統設備安裝策略,例如在Windows操作系統中設置計算機本地策略組,建立基于GUID的可信HID設備的組策略,對USB設備加載進行嚴格限制,禁止操作系統CMD命令。
分析了常見的Keylogger,BadUSB設備軟硬件原理,提出了應對安全風險的措施,可有效解決鍵盤記錄監聽,BadUSB攻擊等USB層面的安全問題,但這些措施在實際運用中還需對相關算法不斷優化,安全策略進行調整。只有當外圍設備被視為主機不可信的數據源時,USB安全協議才會被創新,被訪問設備的主動認證才能得到補充,才能從根本上消除惡意USB攻擊。USB層面的安全問題也是用戶自身的問題,與用戶的安全意識緊密相連,對信息系統安全性要求較高的用戶應該提高使用USB設備的安全性意識,應該謹慎使用來自未知來源的USB設備,定期檢查設備管理器,檢查USB設備訪問記錄,以及制定合理的USB設備訪問策略,才能將安全風險降到最低。