王 磊,宋 軍,彭 銘,張曉航
(1.河南理工大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,河南 焦作 454000;2.啟明星辰公司,鄭州 450000;3.河南工業(yè)和信息化職業(yè)學(xué)院,河南 焦作 454000)
隨著計(jì)算機(jī)通信技術(shù)的快速發(fā)展,USB設(shè)備的使用日益廣泛。在終端系統(tǒng)中,通常設(shè)有可外接設(shè)備的USB端口,這些端口根據(jù)不同的應(yīng)用需求可插入不同的USB設(shè)備,例如稅務(wù)部門[1-2]的自助稅務(wù)終端可接入U(xiǎn)SB-key,自助打印終端可接入U(xiǎn)盤,以及銀行系統(tǒng)自助終端可接入U(xiǎn)盾。但是,傳統(tǒng)的USB設(shè)備接入方式由于沒(méi)有相應(yīng)的安全保護(hù)技術(shù),經(jīng)常導(dǎo)致稅務(wù)系統(tǒng)信息被盜取,外接設(shè)備攜帶病毒攻擊系統(tǒng)[3],導(dǎo)致系統(tǒng)做出錯(cuò)誤響應(yīng),如非法打印發(fā)票等問(wèn)題。因此,對(duì)于USB設(shè)備的安全防護(hù)與檢測(cè)成為了個(gè)人用戶以及企業(yè)重點(diǎn)關(guān)注的問(wèn)題。
關(guān)于企業(yè)內(nèi)網(wǎng)被“USB設(shè)備”侵入給出的解決方案有軟件防護(hù)和硬件防護(hù)。軟件防護(hù)是在PC上安裝USB驅(qū)動(dòng)過(guò)濾程序,能夠過(guò)濾掉一些非法設(shè)備;硬件防護(hù)采取封存USB接口,即禁止PC機(jī)接入所有USB設(shè)備。稅務(wù)系統(tǒng)為保障個(gè)人和企業(yè)的信息安全,采用USB-key[4-7]作為個(gè)人或企業(yè)身份認(rèn)證設(shè)備,通過(guò)稅務(wù)自助服務(wù)終端可驗(yàn)證USB-key用戶身份,認(rèn)證通過(guò)才可辦理相關(guān)的業(yè)務(wù)。
上述的USB設(shè)備安全防護(hù)檢測(cè)方案存在以下幾個(gè)方面的不足之處:
1)封存USB端口固然能減少USB設(shè)備的威脅,但使用的范圍具有局限性,同時(shí)也會(huì)在個(gè)人使用PC時(shí)帶來(lái)不便。
2)USB驅(qū)動(dòng)過(guò)濾程序[8]只能對(duì)系統(tǒng)帶有的USB驅(qū)動(dòng)程序進(jìn)行操作,對(duì)未知的USB設(shè)備無(wú)法起到安全防護(hù)作用。
3)USB-key適于在稅務(wù)、銀行等部門使用,在其他方面使用成本代價(jià)過(guò)高;其次,USB-key只能保證USB設(shè)備中信息的安全性,對(duì)自動(dòng)服務(wù)終端未起到安全防護(hù)作用。
綜合以上幾種USB設(shè)備安全防護(hù)檢測(cè)方案,本文提出一種基于STM32-USB設(shè)備過(guò)濾裝置的解決方案[9-11]。通過(guò)對(duì)接入的USB設(shè)備進(jìn)行識(shí)別,將識(shí)別的類型與數(shù)據(jù)庫(kù)中的黑名單和白名單進(jìn)行對(duì)比,在白名單內(nèi)便可與主機(jī)或服務(wù)終端進(jìn)行交互,在黑名單內(nèi)便拒絕其接入終端。數(shù)據(jù)庫(kù)中記錄終端或主機(jī)接入U(xiǎn)SB設(shè)備的歷史信息,根據(jù)應(yīng)用需求可動(dòng)態(tài)地更改黑名單、白名單中的內(nèi)容。
基于嵌入式系統(tǒng)STM32的USB設(shè)備過(guò)濾系統(tǒng)的設(shè)計(jì)由微控制器(STM32F105RCT6)[14]、USB設(shè)備插拔檢測(cè)模塊、日志信息存儲(chǔ)模塊(SPI _Flash)、RTC時(shí)間模塊、USB信號(hào)切換模塊和數(shù)據(jù)實(shí)時(shí)顯示模塊等部分組成。USB設(shè)備插拔檢測(cè)模塊是通過(guò)檢測(cè)USB端口D+、D-之間的電壓變化,實(shí)現(xiàn)對(duì)USB設(shè)備插拔的檢測(cè)。
USB設(shè)備插拔檢測(cè)模塊檢測(cè)到設(shè)備插入,由軟件部分實(shí)現(xiàn)對(duì)USB設(shè)備進(jìn)行枚舉,與日志信息存儲(chǔ)模塊中的黑白名單(用戶自定義)進(jìn)行比對(duì)。USB信號(hào)切換模塊得到比對(duì)信息結(jié)果為白名單設(shè)備,將USB設(shè)備接入用戶主機(jī);若對(duì)比結(jié)果為黑名單設(shè)備,將其接入微控制器。最終將USB的設(shè)備信息記錄在日志存儲(chǔ)模塊當(dāng)中,并通過(guò)上位機(jī)軟件進(jìn)行USB設(shè)備信息和接入情況的顯示。該檢測(cè)系統(tǒng)如圖1所示。
圖1 系統(tǒng)架構(gòu)圖
采用ST公司生產(chǎn)的STM32F105系列芯片。USB設(shè)備過(guò)濾系統(tǒng)的STM32最小系統(tǒng)電路主要包括晶振電路、JTAG下載電路、按鍵(K1)復(fù)位電路、USB-HOST主機(jī)電路[12]、指示燈電路以及I/O口接排線座等5大模塊電路組成。
基于嵌入式系統(tǒng)STM32的USB設(shè)備過(guò)濾系統(tǒng)的信號(hào)指示模塊電路的主要作用是實(shí)現(xiàn)顯示設(shè)備的運(yùn)行狀況。該模塊主要由單色發(fā)光二極管(LED0)和RGB發(fā)光二極管(LED1)構(gòu)成,LED0用于指示設(shè)備電源接入情況,LED1用于指示設(shè)備的運(yùn)行狀態(tài),藍(lán)色表示正在檢測(cè)接入的USB設(shè)備,紅色表示拒絕該USB設(shè)備接入客戶機(jī),綠色表示放行該USB設(shè)備接入客戶機(jī)。
圖2 USB設(shè)備插拔檢測(cè)
該模塊是整個(gè)系統(tǒng)功能實(shí)現(xiàn)的關(guān)鍵,整個(gè)模塊設(shè)計(jì)采用運(yùn)算放大電路對(duì)USB端口的電壓進(jìn)行檢測(cè),當(dāng)無(wú)設(shè)備插入時(shí),CPU循環(huán)檢測(cè)PC6引腳的電平變化,當(dāng)檢測(cè)到該引腳電平為高電平時(shí),程序進(jìn)入任務(wù)處理函數(shù)中執(zhí)行相關(guān)的函數(shù)指令。
RTC實(shí)時(shí)時(shí)鐘為系統(tǒng)提供一個(gè)可靠的時(shí)間,并且,在斷電的情況下,RTC實(shí)時(shí)時(shí)鐘也可以通過(guò)電池供電,一直運(yùn)行下去。RTC通過(guò)STRB/LDRB這兩個(gè)ARM指令向CPU傳送8位數(shù)據(jù)(BCD碼)。數(shù)據(jù)包括秒,分,小時(shí),日期,天,月和年。RTC實(shí)時(shí)時(shí)鐘依靠一個(gè)外部的32.768 kHz的石英晶體產(chǎn)生周期性的脈沖信號(hào),每一個(gè)信號(hào)到來(lái)時(shí),計(jì)數(shù)器就加1,通過(guò)這種方式,完成計(jì)時(shí)功能。
在系統(tǒng)設(shè)計(jì)的日志信息存儲(chǔ)模塊中,日志處理程序需要將USB設(shè)備插入的具體時(shí)間信息記錄下來(lái),以便日后的歷史信息查詢。同時(shí),在創(chuàng)建日志文件時(shí),通過(guò)判斷系統(tǒng)時(shí)間,以天為單位創(chuàng)建日志文件,方便用戶對(duì)日志文件的管理和查閱。
圖3 USB信號(hào)切換
USB信號(hào)切換模塊采用的主控芯片是“沁恒CH440E”模擬開(kāi)關(guān)。模擬開(kāi)關(guān)是利用模擬器件(JFET或MOS)的特性實(shí)現(xiàn)控制信號(hào)通路的開(kāi)關(guān),主要用來(lái)完成信號(hào)鏈路連接或斷開(kāi)的切換功能,具有功耗低、速度快、無(wú)機(jī)械觸點(diǎn)、體積小和使用壽命長(zhǎng)等特點(diǎn)。CH440E芯片的工作電壓3.3~5 V,導(dǎo)通電阻約為5 Ω,實(shí)現(xiàn)快速切換,切換時(shí)間小于5 ns,支持500 MHz帶寬,可應(yīng)用于VGA信號(hào)、USB信號(hào)等高速信號(hào)切換。多通道開(kāi)關(guān)統(tǒng)一使能,統(tǒng)一切換,節(jié)省IO口。
通過(guò)多路開(kāi)關(guān)芯片CH440E,可將輸入端接到STM32主機(jī)的usb+/usb-端口上,而將輸出端分為2路信號(hào),通過(guò)多路開(kāi)關(guān)的CS、IN引腳的電平組成的二進(jìn)制數(shù),依此選擇不同的信號(hào)線路。
圖4 外部存儲(chǔ)模塊
外部存儲(chǔ)模塊采用的是“華邦W25Q80”,實(shí)際的容量為8M-Bit,將W25Q-CS引腳、W25Q-SCK引腳、W25Q-DO引腳、W25Q-DI引腳分別接到主控芯片的PB12-PB15引腳。W25Q80芯片通過(guò)SPI總線與主控芯片進(jìn)行通信。通過(guò)軟件設(shè)計(jì),在W25Q80芯片中開(kāi)辟6 M的存儲(chǔ)空間建立FATFS文件系統(tǒng),加載文件系統(tǒng)便于對(duì)日志文件的管理以及存儲(chǔ)空間的分配。在進(jìn)行日志信息拷貝時(shí)可直接將日志文件拷貝到特定U盤中。
數(shù)據(jù)實(shí)時(shí)顯示模塊是將微控制器的USART1模塊的RX、TX引腳分別接至CH340芯片的S1C、S2C引腳。當(dāng)微控制器未與PC機(jī)或終端進(jìn)行通信時(shí),將信號(hào)切換至USART1,利用上位機(jī)軟件通過(guò)串口通信的方式將微控制器發(fā)送的數(shù)據(jù)顯示到PC端或顯示到特定的終端上。當(dāng)微控制器與PC機(jī)或終端進(jìn)行通信時(shí)[13],將USART1的數(shù)據(jù)通路切斷。當(dāng)微控制器與PC機(jī)結(jié)束通信后,將信號(hào)切換至USART1。
圖5 數(shù)據(jù)實(shí)時(shí)顯示模塊
系統(tǒng)流程如圖6所示。系統(tǒng)的主要執(zhí)行流程如下。
圖6 軟件執(zhí)行流程圖
1)程序進(jìn)入到主函數(shù)main()當(dāng)中,對(duì)系統(tǒng)的各個(gè)功能模塊進(jìn)行相應(yīng)的初始化,包括時(shí)鐘初始化、RTC模塊初始化、USB_HOST初始化、串口初始化、SPI_FLASH初始化等。
2)對(duì)USB端口的電壓變化進(jìn)行監(jiān)測(cè),當(dāng)有設(shè)備插入時(shí),USB端口會(huì)產(chǎn)生一個(gè)電壓變化,由運(yùn)放電路模塊捕獲電平跳變。此時(shí),判斷USB檢測(cè)標(biāo)志位是否為1。當(dāng)標(biāo)志位1時(shí),說(shuō)明檢測(cè)到插入設(shè)備,程序繼續(xù)向下執(zhí)行,并將USB檢測(cè)標(biāo)志位清0;否則,說(shuō)明未檢測(cè)到有設(shè)備插入,程序?qū)?huì)繼續(xù)監(jiān)測(cè)USB端口的電平變化。
3)USB設(shè)備的初始化。提取USB設(shè)備的基本信息并加載相應(yīng)的USB設(shè)備驅(qū)動(dòng)程序,由USB_HOST對(duì)USB設(shè)備進(jìn)行枚舉,判斷出設(shè)備類型(包括設(shè)備的PID、VID、生產(chǎn)商、制造商、序列號(hào)等信息)。
4)判斷USB操作標(biāo)志位是否為1。當(dāng)USB操作標(biāo)志位1時(shí),將USB操作標(biāo)志位清0,并根據(jù)不同的USB設(shè)備做出不同的決策,同時(shí)可在不同的應(yīng)用場(chǎng)景也可以設(shè)置不同的操作指令。當(dāng)USB操作標(biāo)志位為0時(shí),表明當(dāng)前插入的USB設(shè)備沒(méi)有操作權(quán)限,需要記錄USB設(shè)備的基本信息,設(shè)備的基本信息以“設(shè)備插入時(shí)間—設(shè)備類型—生產(chǎn)商—序列號(hào)—系統(tǒng)主機(jī)標(biāo)號(hào)”的格式存儲(chǔ)到外部的flash當(dāng)中,并且使能拒絕信號(hào)燈,提示用戶該USB設(shè)備無(wú)法接入主機(jī)。
5)判斷USB操作結(jié)束標(biāo)志位是否為1。當(dāng)USB操作結(jié)束標(biāo)志位為1時(shí),將USB操作結(jié)束標(biāo)志位清0,程序繼續(xù)監(jiān)測(cè)USB端口的電平變化。當(dāng)USB操作結(jié)束標(biāo)志位為0時(shí),程序?qū)⒀舆t等待用戶操作結(jié)束。
根據(jù)不同應(yīng)用場(chǎng)景的需求,將黑名單內(nèi)設(shè)備的相關(guān)信息打印到相應(yīng)的終端,用戶可實(shí)時(shí)監(jiān)測(cè)自己主機(jī)接入U(xiǎn)SB設(shè)備的情況,并在同一時(shí)間內(nèi)做出應(yīng)對(duì)措施。
根據(jù)最初的系統(tǒng)設(shè)計(jì)要求,對(duì)系統(tǒng)進(jìn)行了性能測(cè)試。該USB過(guò)濾設(shè)備板載兩個(gè)LED燈,LED1為電源指示燈,LED2為信號(hào)燈。其中信號(hào)燈顯分為3種情況:藍(lán)燈(表示正在檢測(cè)設(shè)備),紅燈(表示拒絕設(shè)備),綠燈(表示放行設(shè)備)。
選擇不同的設(shè)備,包括USB-HUB、智能手機(jī)、稅控盤、大容量存儲(chǔ)設(shè)備和外設(shè)(鼠標(biāo))作為測(cè)試對(duì)象,每組設(shè)備進(jìn)行20次的插拔操作,最終以拒絕率和放行率來(lái)驗(yàn)證系統(tǒng)功能,具體數(shù)據(jù)如表1所示。
表1 設(shè)備測(cè)試表
系統(tǒng)在Flash中保存了黑/白名單,USB設(shè)備過(guò)濾器開(kāi)機(jī)后可對(duì)接入的USB設(shè)備進(jìn)行準(zhǔn)確的識(shí)別,并能夠根據(jù)預(yù)存的黑白名單進(jìn)行設(shè)備的分類,黑白名單設(shè)置的內(nèi)容如圖7所示。以下是系統(tǒng)對(duì)黑/白名單以及日志存儲(chǔ)模塊的測(cè)試結(jié)果。
圖7 黑白名單列表
1)大容量存儲(chǔ)設(shè)備測(cè)試:
將U盤接入到USB設(shè)備過(guò)濾器上,USB設(shè)備過(guò)濾器準(zhǔn)確識(shí)別出接入設(shè)備的類型,下一步執(zhí)行軟件設(shè)置的“掃描危險(xiǎn)文件”指令;掃描結(jié)果顯示未發(fā)現(xiàn)危險(xiǎn)文件,USB設(shè)備過(guò)濾器上的綠燈亮起,U盤便可以接入個(gè)人PC,與其進(jìn)行數(shù)據(jù)通信。實(shí)際操作圖結(jié)果如圖8所示。
圖8 大容量存儲(chǔ)設(shè)備測(cè)試圖
2)USB-HUB設(shè)備測(cè)試:
將USB-HUB接入到USB設(shè)備過(guò)濾器上,USB設(shè)備過(guò)濾器準(zhǔn)確識(shí)別出接入的類型,并在黑白名單中篩選當(dāng)前接入的設(shè)備類型,USB-HUB屬于黑名單中的設(shè)備,USB設(shè)備過(guò)濾器上的紅色指示燈被點(diǎn)亮,USB-HUB將被拒絕接入個(gè)人PC。上位機(jī)軟件將接入的USB設(shè)備信息打印出來(lái)并存入到日志存儲(chǔ)模塊當(dāng)中。實(shí)際操作以及結(jié)果顯示如圖9所示。
圖9 USB-HUB設(shè)備測(cè)試圖
3)智能手機(jī)測(cè)試:
將智能手機(jī)接入到USB設(shè)備過(guò)濾器上,USB設(shè)備過(guò)濾器準(zhǔn)確識(shí)別出接入的設(shè)備屬于智能手機(jī)設(shè)備,智能手機(jī)在黑名單內(nèi),USB設(shè)備過(guò)濾器的紅色指示燈被點(diǎn)亮,提示該設(shè)備無(wú)法接入到個(gè)人PC。實(shí)際操作圖以及測(cè)試效果圖如圖10所示。
圖10 智能手機(jī)測(cè)試圖
4)日志信息存儲(chǔ)模塊功能檢測(cè):
以上測(cè)試的幾種USB設(shè)備信息都被記錄在USB設(shè)備過(guò)濾器的外部FLASH當(dāng)中,記錄的數(shù)據(jù)由“接入時(shí)間—接入設(shè)備名稱—接入設(shè)備的PID和VID—接入設(shè)備的生產(chǎn)商—接入設(shè)備的序列號(hào)—USB設(shè)備過(guò)濾器設(shè)備號(hào)”構(gòu)成,通過(guò)使用“特殊U盤”實(shí)現(xiàn)將日志文件拷貝到個(gè)人PC,可查看USB設(shè)備過(guò)濾器最近接入設(shè)備的記錄。測(cè)試效果圖如圖11所示。
圖11 日志信息存儲(chǔ)模塊功能檢測(cè)圖
測(cè)試結(jié)果表明:在物理層檢測(cè)USB端口電壓變化來(lái)判斷是否有USB設(shè)備接入,通過(guò)對(duì)USB設(shè)備的枚舉,識(shí)別USB設(shè)備的準(zhǔn)確率高,對(duì)黑白名單內(nèi)設(shè)備的執(zhí)行決策準(zhǔn)確,達(dá)到了USB設(shè)備過(guò)濾系統(tǒng)的設(shè)計(jì)目的。
USB設(shè)備過(guò)濾器的設(shè)計(jì)核心在于:1)對(duì)USB設(shè)備的準(zhǔn)確識(shí)別以及對(duì)設(shè)備執(zhí)行響應(yīng)的事件;2)基于STM32的USB主機(jī)對(duì)USB設(shè)備過(guò)濾系統(tǒng),以增強(qiáng)普通設(shè)備上USB端口的安全性能。系統(tǒng)設(shè)計(jì)包括軟件設(shè)計(jì)和硬件設(shè)計(jì)兩大部分,首先是進(jìn)行USB設(shè)備過(guò)濾器系統(tǒng)的總體設(shè)計(jì)描述,然后進(jìn)行硬件電路設(shè)計(jì),包括USB設(shè)備插拔檢測(cè)模塊、USB信號(hào)控制模塊、日志信息存儲(chǔ)模塊以及數(shù)據(jù)實(shí)時(shí)傳輸模塊。軟件開(kāi)發(fā)設(shè)計(jì)部分由Keil_MDK5和STM32CUBEMX兩款應(yīng)用軟件來(lái)實(shí)現(xiàn),通過(guò)STM32CUBEMX可以快速生成基本配置代碼,再通過(guò)Keil_MDK5添加相應(yīng)的功能代碼,可快速開(kāi)發(fā)出自己的軟件。通過(guò)對(duì)系統(tǒng)的調(diào)試與實(shí)驗(yàn)證明,系統(tǒng)能夠準(zhǔn)確地對(duì)不同的USB設(shè)備執(zhí)行相應(yīng)的指令,客戶端主機(jī)的安全性得到保障,系統(tǒng)接入不同客戶端主機(jī)的兼容性很好。為了適用于更多的應(yīng)用場(chǎng)景,需要將系統(tǒng)的主芯片替換為GD32系列。該系列芯片為國(guó)產(chǎn)芯片,在STM32的基礎(chǔ)上,在主頻方面做了相應(yīng)的技術(shù)升級(jí),程序的執(zhí)行速度變快;在程序加密方面也做了技術(shù)創(chuàng)新,使得芯片的安全性更加牢固。綜合以上所介紹的幾個(gè)技術(shù)改進(jìn)方面,將系統(tǒng)移植到GD32上,總體的性能會(huì)有一定的提升。