(空軍參謀部 北京 100038)
USB存儲設備存儲容量大,優盤或閃存卡攜帶和隱藏方便,在工作生活中得到廣泛使用。隨著智能手機存儲容量不斷變大,很多人也將它用作移動存儲。但在國家機關、企事業單位和一些高科技公司內部,出于網絡系統安全、敏感信息保密或知識產權保護的考慮,通常會限制使用移動存儲設備。因此,如何對計算機上曾使用過移動存儲設備的痕跡進行分析取證,對安全人員、保密工作者來說,成為一個不斷發展的計算機取證課題。USB設備痕跡取證作為計算機取證的重要環節[1-2],業內孫奕探討了Windows 7 環境下電子取證特點[3]、吳玉強研究了Windows 8系統中的USB設備連接時間戳問題[4]。當前,各類品牌計算機、筆記本電腦一般預裝Windows 10 操作系統,本文基于USB設備識別機制原理,從注冊表信息、系統文件、系統日志等角度探討接入痕跡取證方法。
USB設備種類眾多,為使操作系統識別出具體廠商型號以加載對應驅動,USB 執行論壇(USB-IF)定義了具體的分類標準,對每種設備分配了標識符ID。其中,大容量存儲(Mass Storage)的ID為08h,打印機(Printer)的ID為07h,無線控制器(Wireless Controller)的ID為E0h。
根據USB 規范的規定,所有的USB設備都有確定的供應商ID(VID)和產品識別碼(PID),計算機通過不同的VID和PID來區別不同的設備,VID和PID都是兩個字節長,其中,供應商ID(VID)由供應商向USB 執行論壇申請[5],每個供應商的VID是唯一的[6],PID 由供應商自行決定。常見供應商的VID 如表1所示。

表1 常見供應商VID
在Windows 10系統中,一個完整的USB 硬件ID 由如下格式構成:USBVID_v(4)&PID_d(4)&REV_r(4),其中,r(4)是修正碼。比如,一個HP 迷你閃存它的硬件ID 就是USBVID_0 3F0&PID_5207&REV_1100。
所有USB設備出廠時,每個硬件都有一個唯一的身份ID:iS erialNumber,設備的唯一序列碼[7]。在Windows 10系統中,當插入USB存儲設備時,依次打開計算機“設備管理器”,“通用串行總線控制器”,右鍵打開“USB 大容量存儲設備”的“屬性”,在彈出的屬性對話框中選擇“詳細信息”,在“屬性”下拉框中選擇“設備實例路徑”,可以看到對應值為“USBVID_03F0&PID_520 7AA0412700007572”,這里的“AA0412700007572”就是該設備的序列碼。如圖1所示。需要注意的是,出于成本的考慮,有的廠商會把同一批次的同型號存儲設備定義成同一序列碼,或者缺省。

圖1 USB設備詳細信息
注冊表中蘊含了最完整的USB 接入痕跡。任何一個USB 接口的設備與計算機初次連接時,操作系統都會在注冊表中寫入該設備相關信息[8]。在HKEY_LOCAL_MACHINESYSTEMCurrentCo ntrolSetEnum\USB下創建一個子鍵,形如“VID_03F0&PID_520 7”,這個就是前文提及的硬件ID,通過查找在USB-IF 官方網站上公布的名錄,就能確定設備供應商、產品型號。
如果接入計算機的是存儲設備、手機或光驅等,還會在HKE Y_LOCAL_MACHINESYSTEMCurrentControlSetEnumUSBSTO R下創建設備子鍵,一般來說,子鍵直接寫明了接入設備的產商和型號。展開該子鍵,就可以看到該設備的唯一標識(iSerialNumbe r)。如圖2所示,注冊表顯示HP v155w是個存儲設備,序列號為“AA0412700007572”,與圖1一致。

圖2 USB設備在注冊表中的痕跡1
同時,在序列號子鍵下有個值項ClassGUID[9],是微軟用來確定各種設備類型的標識,常見的設備類型見表2。值項Service中也直接寫明了設備類型,比如“disk”、“cdrom”等。圖2所示的“H P v155w USB Device”的ClassGUID值為“{4D36E96DE325-11CE-BFC1-08002BE10318}”,Service的值為“disk”,與表2一致。

表2 常見設備類型ClassGUID
此外,USB 移動存儲設備連接計算機后,會在注冊表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlDeviceCla sses{53f56307-b6bf-11d0-94f2-00a0c91efb8b}和HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlDeviceClasses{a5d cbf10-6530-11d2-901f-00c04fb951ed}下留下痕跡,如圖3所示。

圖3 USB設備在注冊表中的痕跡2
操作系統在上述注冊表位置記錄USB設備相關信息時,會同時打上時間戳,直接在注冊表中看不到,通過相關的API 函數可獲取子鍵的最后修改時間[10],即USB設備的最后一次使用時間。也可以選擇導出子鍵內容為txt文件,就可以查看到相應時間了,如圖4所示,HP v155w 最近一次使用時間是2019/10/30。

圖4 USB設備末次使用時間
通過注冊表可以獲取USB設備末次使用時間,而首次使用時間則可以通過系統文件來獲取。Windows 10系統中,在%HOMEDRIVE%/Windows/INF 目錄下,有一個setupapi.dev.log文件[11],用記事本打開后,就可以查找到USB設備首次使用時間,如圖5所示,HP v155w 首次使用時間是2019/08/26。

圖5 USB設備在系統文件中的痕跡
在Windows 10 操作系統的系統日志中,也包含USB設備插拔的痕跡[12]。依次打開“計算機管理”、“系統工具”、“事件查看器”、“Windows日志”、“系統”就可以查看本機的系統日志,與USB設備痕跡有關的事件ID 有225、20001、20003、24576、24577、24578。如圖6所示,系統在2019/08/26為HP v155w 安裝了設備驅動程序,即該設備首次使用時間為2019/08/26,與圖5一致。

圖6 USB設備在系統日志中的痕跡
對USB設備進行取證,通過注冊表相關鍵值來判斷是否曾經使用過USB設備;通過設備的ClassGUID號、注冊表DeviceClasses表項等信息判斷使用的是否為存儲設備;通過獲取設備的序列號來對連接設備進行具體確定;通過比對不同計算機中有無相同序列號,來判斷同一設備是否在涉密計算機上和非涉密計算機上進行過交叉使用;結合系統日志和系統文件可以獲取USB設備的首次使用時間;通過查看注冊表相關鍵值的最后修改時間來獲得末次使用時間。綜上所述,就完成了Windows 10系統下USB設備使用痕跡的取證全過程。