一種保護驅(qū)動程序的方法、裝置及電子設備的制造方法
【專利摘要】本發(fā)明的實施例公開一種保護驅(qū)動程序的方法、裝置及電子設備。方法包括:在預先注入到內(nèi)核層中的鉤子函數(shù)監(jiān)測到應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)時,鉤住所述驅(qū)動程序加載函數(shù);提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息,獲取所述文件路徑信息映射的驅(qū)動程序;如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序相同,拒絕所述應用層進程的驅(qū)動程序加載請求。應用本發(fā)明,可以提升操作系統(tǒng)的安全防護效率。
【專利說明】
一種保護驅(qū)動程序的方法、裝置及電子設備
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及計算機網(wǎng)絡通信安全技術(shù),尤其涉及一種保護驅(qū)動程序的方法、裝置及電子設備。
【背景技術(shù)】
[0002]隨著Windows操作系統(tǒng)內(nèi)核層技術(shù)細節(jié)的逐漸公開,越來越多的木馬病毒等惡意應用程序開始使用內(nèi)核層驅(qū)動程序來保護自身的進程,受內(nèi)核層驅(qū)動程序保護的惡意應用程序的進程,可以結(jié)束(殺死Windows操作系統(tǒng)中的其它進程,從而使得惡意應用程序的進程可以根據(jù)惡意應用程序提供者的意圖,對用戶的進程或系統(tǒng)進程進行惡意攻擊,可能造成計算機運行不穩(wěn)定,甚至可能給用戶帶來非常大的經(jīng)濟損失,例如,加載惡意應用程序?qū)尿?qū)動程序,使得惡意應用程序可對操作系統(tǒng)進行攻擊。其中,驅(qū)動程序一般指的是設備驅(qū)動(Device Driver)應用程序,是一種可以使計算機和設備通信的特殊應用程序,相當于硬件的接口,操作系統(tǒng)通過該接口控制硬件設備的工作,如果設備的驅(qū)動程序未能正確安裝,該設備便不能正常工作。進程(Process)是計算機中的應用程序關(guān)于數(shù)據(jù)集合上的一次運行活動,是Windows操作系統(tǒng)進行資源分配和調(diào)度的基本單位,是Windows操作系統(tǒng)結(jié)構(gòu)的基礎。在早期面向進程設計的計算機結(jié)構(gòu)中,進程是應用程序的基本執(zhí)行實體;在當代面向線程設計的計算機結(jié)構(gòu)中,進程是線程的容器。也就是說,應用程序是指令、數(shù)據(jù)及其組織形式的描述,進程是應用程序的實體。
[0003]目前,加載驅(qū)動程序的方法是調(diào)用操作系統(tǒng)提供的內(nèi)核NtLoadDriver函數(shù),因而,惡意應用程序可以通過調(diào)用內(nèi)核NtLoadDriver函數(shù)完成惡意驅(qū)動程序的加載,從而使得惡意應用程序可以運行并攻擊操作系統(tǒng)。為了保護Windows操作系統(tǒng)不被非法攻擊的方法是利用鉤子(Η00Κ)技術(shù),通過對加載驅(qū)動程序的內(nèi)核NtLoadDriver函數(shù)進行鉤子處理,SPHook加載驅(qū)動程序的內(nèi)核NtLoadDriver函數(shù),分析該內(nèi)核NtLoadDriver函數(shù)中的預定參數(shù),該參數(shù)用于配置待加載驅(qū)動程序的服務注冊表信息,通過解析配置的服務注冊表信息,可以獲得文件路徑信息,從而依據(jù)文件路徑信息得到待加載驅(qū)動程序,判斷得到的待加載驅(qū)動程序是否是需要攔截的驅(qū)動程序,如果是,則返回拒絕,從而攔截該待加載驅(qū)動程序的加載。
[0004]但該保護驅(qū)動程序的方法,是通過Hook內(nèi)核NtLoadDriver函數(shù)攔截成惡意驅(qū)動程序的加載,但在Windows操作系統(tǒng)中,通過統(tǒng)計分析,還存在另一隱蔽的加載驅(qū)動程序的方法,使得惡意應用程序可以通過該隱蔽的加載驅(qū)動程序的方法,實現(xiàn)惡意驅(qū)動程序的加載,從而對Windows操作系統(tǒng)進行攻擊,導致Windows操作系統(tǒng)的安全防護效率較低,安全性不尚O
【發(fā)明內(nèi)容】
[0005]有鑒于此,本發(fā)明實施例提供一種保護驅(qū)動程序的方法、裝置及電子設備,提升操作系統(tǒng)的安全防護效率。
[0006]為達到上述目的,本發(fā)明的實施例采用如下技術(shù)方案:
[0007]第一方面,本發(fā)明實施例提供一種保護驅(qū)動程序的方法,包括:
[0008]在預先注入到內(nèi)核層中的鉤子函數(shù)監(jiān)測到應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)時,鉤住所述驅(qū)動程序加載函數(shù);
[0009]提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息,獲取所述文件路徑信息映射的驅(qū)動程序;
[0010]如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序相同,拒絕所述應用層進程的驅(qū)動程序加載請求。
[0011]可選的,所述驅(qū)動程序加載函數(shù)包括:內(nèi)核驅(qū)動加載函數(shù)、內(nèi)核系統(tǒng)信息設置函數(shù)、扇區(qū)創(chuàng)建函數(shù)以及扇區(qū)映射函數(shù)中的一種或其任意組合。
[0012]可選的,所述驅(qū)動程序加載函數(shù)為內(nèi)核驅(qū)動加載函數(shù),所述提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息包括:
[0013]獲取調(diào)用所述驅(qū)動程序加載函數(shù)時的內(nèi)存地址;
[0014]解析所述內(nèi)存地址,得到調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的進程句柄;
[0015]利用所述進程句柄的內(nèi)核對象獲取文件路徑信息。
[0016]可選的,所述驅(qū)動程序加載函數(shù)為內(nèi)核系統(tǒng)信息設置函數(shù),所述提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息包括:
[0017]解析所述內(nèi)核系統(tǒng)信息設置函數(shù),獲取第一參數(shù)以及第二參數(shù);
[0018]如果第一參數(shù)中的操作系統(tǒng)信息的類型索引號值為預先設置的索引值,提取第二參數(shù)中包含的待加載驅(qū)動程序的文件路徑信息。
[0019]可選的,所述內(nèi)核系統(tǒng)信息設置函數(shù)為內(nèi)核NtSetSyStemInformat1n函數(shù),所述預先設置的索引值為38。
[0020]可選的,所述方法還包括:
[0021]如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序不相同,通知所述驅(qū)動程序加載函數(shù)執(zhí)行所述應用層進程的驅(qū)動程序加載請求,以進行驅(qū)動程序加載操作。
[0022]可選的,所述驅(qū)動程序特征庫由用戶在本地進行設置,所述方法還包括:
[0023]將拒絕的驅(qū)動程序信息上報至預先設置的網(wǎng)絡服務器。
[0024]第二方面,本發(fā)明實施例提供一種保護驅(qū)動程序的裝置,包括:鉤子模塊、驅(qū)動程序提取模塊以及操作處理模塊,其中,
[0025]鉤子模塊,用于在預先注入到內(nèi)核層中的鉤子函數(shù)監(jiān)測到應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)時,鉤住所述驅(qū)動程序加載函數(shù);
[0026]驅(qū)動程序提取模塊,用于提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息,獲取所述文件路徑信息映射的驅(qū)動程序;
[0027]操作處理模塊,如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序相同,拒絕所述應用層進程的驅(qū)動程序加載請求。
[0028]可選的,所述驅(qū)動程序加載函數(shù)包括:內(nèi)核驅(qū)動加載函數(shù)、內(nèi)核系統(tǒng)信息設置函數(shù)、扇區(qū)創(chuàng)建函數(shù)以及扇區(qū)映射函數(shù)中的一種或其任意組合。
[0029]可選的,所述驅(qū)動程序加載函數(shù)為內(nèi)核驅(qū)動加載函數(shù),所述驅(qū)動程序提取模塊包括:內(nèi)存地址獲取單元、進程句柄獲取單元、文件路徑信息獲取單元以及驅(qū)動程序獲取單元,其中,
[0030]內(nèi)存地址獲取單元,用于獲取調(diào)用所述驅(qū)動程序加載函數(shù)時的內(nèi)存地址;
[0031]進程句柄獲取單元,用于解析所述內(nèi)存地址,得到調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的進程句柄;
[0032]文件路徑信息獲取單元,用戶利用所述進程句柄的內(nèi)核對象獲取文件路徑信息;
[0033]驅(qū)動程序獲取單元,用于獲取所述文件路徑信息中包含的驅(qū)動程序。
[0034]可選的,所述驅(qū)動程序加載函數(shù)為內(nèi)核系統(tǒng)信息設置函數(shù),所述驅(qū)動程序提取模塊包括:參數(shù)解析單元、文件路徑信息提取單元以及驅(qū)動程序獲取單元,其中,
[0035]參數(shù)解析單元,用于解析所述內(nèi)核系統(tǒng)信息設置函數(shù),獲取第一參數(shù)以及第二參數(shù);
[0036]文件路徑信息提取單元,如果第一參數(shù)中的操作系統(tǒng)信息的類型索引號值為預先設置的索引值,提取第二參數(shù)中包含的待加載驅(qū)動程序的文件路徑信息;
[0037]驅(qū)動程序獲取單元,用于獲取所述文件路徑信息中包含的驅(qū)動程序。
[0038]可選的,所述內(nèi)核系統(tǒng)信息設置函數(shù)為內(nèi)核NtSetSyStemInformat1n函數(shù),所述預先設置的索引值為38。
[0039]可選的,所述操作處理模塊還用于如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序不相同,通知所述驅(qū)動程序加載函數(shù)執(zhí)行所述應用層進程的驅(qū)動程序加載請求,以進行驅(qū)動程序加載操作。
[0040]可選的,所述驅(qū)動程序特征庫由用戶在本地進行設置,所述裝置還包括:
[0041]信息上報模塊,用于將拒絕的驅(qū)動程序信息上報至預先設置的網(wǎng)絡服務器。
[0042]第三方面,本發(fā)明實施例提供一種電子設備,所述電子設備包括:殼體、處理器、存儲器、電路板和電源電路,其中,電路板安置在殼體圍成的空間內(nèi)部,處理器和存儲器設置在電路板上;電源電路,用于為上述電子設備的各個電路或器件供電;存儲器用于存儲可執(zhí)行程序代碼;處理器通過讀取存儲器中存儲的可執(zhí)行程序代碼來運行與可執(zhí)行程序代碼對應的程序,用于執(zhí)行前述任一所述的保護驅(qū)動程序的方法。
[0043]本發(fā)明實施例提供的保護驅(qū)動程序的方法、裝置及電子設備,在預先注入到內(nèi)核層中的鉤子函數(shù)監(jiān)測到應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)時,鉤住所述驅(qū)動程序加載函數(shù);提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息,獲取所述文件路徑信息映射的驅(qū)動程序;如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序相同,拒絕所述應用層進程的驅(qū)動程序加載請求。這樣,通過Hook驅(qū)動程序加載函數(shù),當應用程序調(diào)用驅(qū)動程序加載函數(shù)以加載對應的驅(qū)動程序時,能夠及時攔截應用程序的加載行為,提升了操作系統(tǒng)的安全防護效率,增強了操作系統(tǒng)的安全性。
【附圖說明】
[0044]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
[0045]圖1為本發(fā)明實施例保護驅(qū)動程序的方法流程示意圖;
[0046]圖2為本發(fā)明實施例提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息的流程示意圖;
[0047]圖3為本發(fā)明實施例保護驅(qū)動程序的裝置結(jié)構(gòu)示意圖;
[0048]圖4為本發(fā)明電子設備一個實施例的結(jié)構(gòu)不意圖。
【具體實施方式】
[0049]下面結(jié)合附圖對本發(fā)明實施例進行詳細描述。
[0050]應當明確,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。
[0051]圖1為本發(fā)明實施例保護驅(qū)動程序的方法流程示意圖。參見圖1,該方法包括:
[0052]步驟11,在預先注入到內(nèi)核層中的鉤子函數(shù)監(jiān)測到應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)時,鉤住所述驅(qū)動程序加載函數(shù);
[0053]本步驟中,作為一可選實施例,驅(qū)動程序加載函數(shù)包括但不限于:內(nèi)核驅(qū)動加載函數(shù)、內(nèi)核系統(tǒng)信息設置函數(shù)、扇區(qū)創(chuàng)建函數(shù)以及扇區(qū)映射函數(shù)中的一種或其任意組合。其中,內(nèi)核驅(qū)動加載函數(shù)可以是內(nèi)核NtLoadDriver函數(shù),內(nèi)核系統(tǒng)信息設置函數(shù)可以是內(nèi)核NtSetSystemInformat1n函數(shù),扇區(qū)創(chuàng)建函數(shù)可以是內(nèi)核NtCreateSect1n函數(shù),扇區(qū)映射函數(shù)可以是內(nèi)核NtMapV i ewOfSecti on函數(shù)。
[°°54] 本發(fā)明實施例中,作為一可選實施例,調(diào)用內(nèi)核NtSetSystemInformat1n函數(shù)是一種隱蔽的加載驅(qū)動程序的方法。操作系統(tǒng)提供的內(nèi)核NtSetSystemInformat1n函數(shù)用于設置操作系統(tǒng)的一些信息,至少包含兩個參數(shù),分別用于設置時間信息、處理器信息、進程信息、內(nèi)存信息等信息。其中,第一參數(shù)用于設置操作系統(tǒng)信息的類型索引號,例如,設置時間信息對應的類型索引號為28,設置進程信息對應的類型索引號為5,設置操作系統(tǒng)擴展服務注冊表信息對應的類型索引號為38 (將SYSTEM-1NFORMAT1N-CLASS的值設置為SystemLoadAndCalIImage)等;第二參數(shù)用于設置類型索引號的具體數(shù)據(jù),例如,如果類型索引號為28,則設置具體的時間信息,如果類型索引號為38,則設置待加載驅(qū)動程序的文件路徑信息。
[0055]本發(fā)明實施例中,注入的鉤子(Hook)函數(shù)用于監(jiān)聽應用層進程的函數(shù)調(diào)用相關(guān)操作,并在應用層進程調(diào)用的相關(guān)函數(shù)與預先設置的函數(shù)相匹配時,攔截該調(diào)用的函數(shù),轉(zhuǎn)由注入的鉤子函數(shù)替換該調(diào)用函數(shù)進行處理,并返回相應處理結(jié)果。
[0056]作為一可選實施例,鉤子函數(shù)可在金山毒霸防御驅(qū)動程序加載時注入,其中,
[0057]Hook函數(shù)是Windows操作系統(tǒng)中消息處理機制的一段程序代碼段,驅(qū)動程序可以通過該程序代碼段,設置子程序代碼段以監(jiān)視指定窗口的某種消息(操作),而且所監(jiān)視的指定窗口可以是其他進程所創(chuàng)建的c^Hook函數(shù)具有的鉤子機制通過Windows操作系統(tǒng)調(diào)用,將具有優(yōu)先控制權(quán)的Hook函數(shù)掛入Windows操作系統(tǒng),允許Hook函數(shù)截獲Windows操作系統(tǒng)發(fā)出的消息或特定事件,每當Windows操作系統(tǒng)中消息或特定事件發(fā)出,在沒有到達目的窗口前,Hook函數(shù)能夠先捕獲該消息或特定事件,從而可以加工處理(改變)該消息或特定事件,也可以不作處理而繼續(xù)傳遞,還可以強制結(jié)束消息或特定事件的傳遞。
[0058]本發(fā)明實施例中,通過Hook驅(qū)動程序加載函數(shù),在應用層進程,例如,應用程序通過向操作系統(tǒng)發(fā)送驅(qū)動程序加載請求,所述操作系統(tǒng)依據(jù)接收的驅(qū)動程序加載請求為所述應用程序創(chuàng)建相應的應用層進程,該應用層進程調(diào)用驅(qū)動程序加載函數(shù)以加載驅(qū)動程序時,就會先調(diào)用本發(fā)明實施例的Hook函數(shù),從而依據(jù)預先設置在Hook函數(shù)中的攔截規(guī)則進行相應處理。
[0059]本發(fā)明實施例中,作為一可選實施例,所述應用層進程為一應用程序向操作系統(tǒng)發(fā)送驅(qū)動程序加載請求時,所述操作系統(tǒng)為該應用程序創(chuàng)建的進程。
[0060]作為一可選實施例,應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)包括:
[0061 ] 應用層進程調(diào)用內(nèi)核NtLoadDriver函數(shù)。
[0062]作為另一可選實施例,應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)包括:
[0063]應用層進程調(diào)用內(nèi)核NtSetSystemInf ormat1n函數(shù)。
[0064]作為再一可選實施例,應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)包括:
[0065]應用層進程調(diào)用內(nèi)核NtCreateSect1n函數(shù)。
[0066]作為再一可選實施例,應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)包括:
[0067]應用層進程調(diào)用內(nèi)核NtMapViewOfSect1n函數(shù)。
[0068]步驟12,提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息,獲取所述文件路徑信息映射的驅(qū)動程序;
[0069]本步驟中,作為一可選實施例,如果驅(qū)動程序加載函數(shù)為內(nèi)核驅(qū)動加載函數(shù),提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息包括:
[0070]Al,獲取調(diào)用所述驅(qū)動程序加載函數(shù)時的內(nèi)存地址;
[0071]A2,解析所述內(nèi)存地址,得到調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的進程句柄;
[0072]A3,利用所述進程句柄的內(nèi)核對象獲取文件路徑信息。
[0073]本發(fā)明實施例中,步驟Al至步驟A3為公知技術(shù),在此略去詳述。
[0074]作為另一可選實施例,如果驅(qū)動程序加載函數(shù)為內(nèi)核系統(tǒng)信息設置函數(shù),圖2為本發(fā)明實施例提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息的流程示意圖。參見圖2,該流程包括:
[0075]步驟21,解析所述內(nèi)核系統(tǒng)信息設置函數(shù),獲取第一參數(shù)以及第二參數(shù);
[0076]步驟22,如果第一參數(shù)中的操作系統(tǒng)信息的類型索引號值為預先設置的索引值,提取第二參數(shù)中包含的待加載驅(qū)動程序的文件路徑信息。
[0077]本步驟中,作為一可選實施例,預先設置的索引值為38,通過判斷第一參數(shù)中的操作系統(tǒng)信息的類型索引號是否為38,如果是,表明該參數(shù)是用于為待加載驅(qū)動程序設置操作系統(tǒng)擴展服務注冊表信息對應的類型索引號,如果不是,則表明應用層進程的調(diào)用不是進行驅(qū)動程序的加載操作,則通知內(nèi)核系統(tǒng)信息設置函數(shù)進行相應操作。
[0078]本發(fā)明實施例中,對于扇區(qū)創(chuàng)建函數(shù)以及扇區(qū)映射函數(shù),提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息的流程與內(nèi)核系統(tǒng)信息設置函數(shù)相類似。文件路徑信息中包含有驅(qū)動文件,通過驅(qū)動文件,可以獲知驅(qū)動程序,驅(qū)動程序與應用程序為一一對應關(guān)系,因而,通過獲取驅(qū)動程序加載操作的文件路徑信息,可以獲知應用層進程對應的應用程序,即可以獲知向操作系統(tǒng)發(fā)送驅(qū)動程序加載請求的應用程序信息。
[0079]步驟13,如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序相同,拒絕所述應用層進程的驅(qū)動程序加載請求。
[0080]本步驟中,將獲取的驅(qū)動程序在驅(qū)動程序特征庫中進行搜索匹配,判斷調(diào)用驅(qū)動程序加載函數(shù)的應用層進程加載的驅(qū)動程序是否是驅(qū)動程序,如果與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序不相同,則可以確定發(fā)起驅(qū)動程序加載請求的應用程序是正常應用程序。
[0081 ]因而,作為一可選實施例,該方法還可以包括:
[0082]如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序不相同,通知所述驅(qū)動程序加載函數(shù)執(zhí)行所述應用層進程的驅(qū)動程序加載請求,以進行驅(qū)動程序加載操作。
[0083]本步驟中,如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序不相同,解除對驅(qū)動程序加載函數(shù)的Hook操作,使得驅(qū)動程序加載函數(shù)可以進行驅(qū)動程序加載操作。
[0084]本發(fā)明實施例中,如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序相同,則認為該應用層進程為預先設置的應用程序進程,需要進行攔截,則結(jié)束本次操作,返回拒絕,從而拒絕該應用程序(或?qū)膽脤舆M程)的驅(qū)動程序加載請求,使得應用程序加載驅(qū)動程序的請求失敗。例如,在用戶電腦環(huán)境中,存在一應用程序A,對應的驅(qū)動程序為驅(qū)動程序B,由于驅(qū)動程序工作在操作系統(tǒng)內(nèi)核中,能嚴重地破壞操作系統(tǒng)。假設通過在金山毒霸的防御驅(qū)動中注入Hook函數(shù),Hook用以執(zhí)行驅(qū)動程序加載的內(nèi)核NtSetSystemlnformat1n函數(shù),這樣,當應用程序A的進程調(diào)用內(nèi)核NtShutdownSystem函數(shù),以加載該應用程序?qū)尿?qū)動程序B時,注入在金山毒霸的防御驅(qū)動中的Hook函數(shù)對該加載驅(qū)動程序B的行為進行攔截,并返回拒絕,使得應用程序A不能加載驅(qū)動程序B,應用程序A就不能在內(nèi)核層中實現(xiàn)攻擊操作系統(tǒng)的目的,從而更好地保護操作系統(tǒng)環(huán)境不被破壞。
[0085]本發(fā)明實施例中,作為一可選實施例,驅(qū)動程序特征庫可通過相關(guān)技術(shù)人員在網(wǎng)絡服務器通過對各應用程序運行的分析,選取能夠?qū)Σ僮飨到y(tǒng)產(chǎn)生破壞的應用程序?qū)尿?qū)動程序,形成驅(qū)動程序特征庫,并將形成的驅(qū)動程序特征庫下發(fā)至各應用終端,應用終端接收網(wǎng)絡服務器下發(fā)的驅(qū)動程序特征庫進行保存。當然,實際應用中,也可以由用戶在本地設置驅(qū)動程序特征庫,本發(fā)明實施例對此不作限定。
[0086]作為另一可選實施例,如果由用戶在本地設置驅(qū)動程序特征庫,該方法還可以包括:
[0087]將拒絕的驅(qū)動程序信息上報至預先設置的網(wǎng)絡服務器。
[0088]本步驟中,用戶設置或由操作系統(tǒng)自動將拒絕的驅(qū)動程序的相關(guān)信息進行上報,可以便于網(wǎng)絡服務器統(tǒng)計各應用終端上報的驅(qū)動程序信息,并依據(jù)統(tǒng)計,確定哪些驅(qū)動程序為驅(qū)動程序,并設置該驅(qū)動程序的風險提示,從而在用戶下載該驅(qū)動程序?qū)膽贸绦驎r,提示相應的風險,使得用戶能夠慎重考慮是否下載該應用程序,以避免對用戶的應用終端帶來的安全隱患。
[0089]由上述可見,本發(fā)明實施例保護驅(qū)動程序的方法,在預先注入到內(nèi)核層中的鉤子函數(shù)監(jiān)測到應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)時,鉤住所述驅(qū)動程序加載函數(shù);提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息,獲取所述文件路徑信息映射的驅(qū)動程序;如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序相同,拒絕所述應用層進程的驅(qū)動程序加載請求。這樣,通過Hook驅(qū)動程序加載函數(shù),當應用程序調(diào)用驅(qū)動程序加載函數(shù)以加載對應的驅(qū)動程序時,能夠及時攔截應用程序的加載行為,使得應用程序加載驅(qū)動程序的行為失敗,從而更好地保護操作系統(tǒng)的安全,提升了操作系統(tǒng)的安全防護效率,增強了操作系統(tǒng)的安全性。
[0090]圖3為本發(fā)明實施例保護驅(qū)動程序的裝置結(jié)構(gòu)示意圖。參見圖3,該裝置包括:鉤子模塊31、驅(qū)動程序提取模塊32以及操作處理模塊33,其中,
[0091]鉤子模塊31,用于在預先注入到內(nèi)核層中的鉤子函數(shù)監(jiān)測到應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)時,鉤住所述驅(qū)動程序加載函數(shù);
[0092]本發(fā)明實施例中,作為一可選實施例,所述應用層進程為一應用程序向操作系統(tǒng)發(fā)送驅(qū)動程序加載請求時,所述操作系統(tǒng)依據(jù)所述驅(qū)動程序加載請求為所述應用程序創(chuàng)建的進程。
[0093]本發(fā)明實施例中,驅(qū)動程序加載函數(shù)包括:內(nèi)核驅(qū)動加載函數(shù)、內(nèi)核系統(tǒng)信息設置函數(shù)、扇區(qū)創(chuàng)建函數(shù)以及扇區(qū)映射函數(shù)中的一種或其任意組合。其中,內(nèi)核驅(qū)動加載函數(shù)可以是內(nèi)核NtLoadDriver函數(shù),內(nèi)核系統(tǒng)信息設置函數(shù)可以是內(nèi)核NtSetSystemInformat1n函數(shù),扇區(qū)創(chuàng)建函數(shù)可以是內(nèi)核NtCreateSect1n函數(shù),扇區(qū)映射函數(shù)可以是內(nèi)核NtMapViewOfSect 1n函數(shù)。
[0094]本發(fā)明實施例中,鉤子函數(shù)可在金山毒霸防御驅(qū)動程序加載時注入。
[0095]作為一可選實施例,鉤子模塊31包括:鉤子函數(shù)注入單元、操作請求單元、進程創(chuàng)建單元、監(jiān)測單元以及鉤子單元(圖中未示出),其中,
[0096]鉤子函數(shù)注入單元,用于在內(nèi)核層中注入預先設置的鉤子函數(shù),在操作系統(tǒng)啟動后,激活所述鉤子函數(shù);
[0097]操作請求單元,用于接收應用程序向操作系統(tǒng)發(fā)送的驅(qū)動程序加載請求;
[0098]進程創(chuàng)建單元,用于依據(jù)所述驅(qū)動程序加載請求為所述應用程序創(chuàng)建應用層進程;
[0099]監(jiān)測單元,用于利用所述鉤子函數(shù)監(jiān)測所述應用層進程是否調(diào)用驅(qū)動程序加載函數(shù),在監(jiān)測到應用層進程調(diào)用驅(qū)動程序加載函數(shù)時,通知鉤子單元;
[0100]鉤子單元,用戶鉤住所述驅(qū)動程序加載函數(shù)。
[0101]驅(qū)動程序提取模塊32,用于提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息,獲取所述文件路徑信息映射的驅(qū)動程序;
[0102]本發(fā)明實施例中,作為一可選實施例,所述驅(qū)動程序加載函數(shù)為內(nèi)核驅(qū)動加載函數(shù),驅(qū)動程序提取模塊32包括:內(nèi)存地址獲取單元、進程句柄獲取單元、文件路徑信息獲取單元以及驅(qū)動程序獲取單元(圖中未示出),其中,
[0103]內(nèi)存地址獲取單元,用于獲取調(diào)用所述驅(qū)動程序加載函數(shù)時的內(nèi)存地址;
[0104]進程句柄獲取單元,用于解析所述內(nèi)存地址,得到調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的進程句柄;
[0105]文件路徑信息獲取單元,用戶利用所述進程句柄的內(nèi)核對象獲取文件路徑信息;
[0106]驅(qū)動程序獲取單元,用于獲取所述文件路徑信息中包含的驅(qū)動程序。
[0107]作為另一可選實施例,所述驅(qū)動程序加載函數(shù)為內(nèi)核系統(tǒng)信息設置函數(shù),驅(qū)動程序提取模塊32包括:參數(shù)解析單元、文件路徑信息提取單元以及驅(qū)動程序獲取單元,其中,
[0108]參數(shù)解析單元,用于解析所述內(nèi)核系統(tǒng)信息設置函數(shù),獲取第一參數(shù)以及第二參數(shù);
[0109]文件路徑信息提取單元,如果第一參數(shù)中的操作系統(tǒng)信息的類型索引號值為預先設置的索引值,提取第二參數(shù)中包含的待加載驅(qū)動程序的文件路徑信息;
[0110]驅(qū)動程序獲取單元,用于獲取所述文件路徑信息中包含的驅(qū)動程序。
[0111]本發(fā)明實施例中,作為一可選實施例,所述內(nèi)核系統(tǒng)信息設置函數(shù)為內(nèi)核NtSetSystemInformat 1n函數(shù),所述預先設置的索引值為38。
[0112]本發(fā)明實施例中,對于扇區(qū)創(chuàng)建函數(shù)以及扇區(qū)映射函數(shù),提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息的流程與內(nèi)核系統(tǒng)信息設置函數(shù)相類似。文件路徑信息中包含有驅(qū)動文件,通過驅(qū)動文件,可以獲知驅(qū)動程序,驅(qū)動程序與應用程序為一一對應關(guān)系。
[0113]操作處理模塊33,如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序相同,拒絕所述應用層進程的驅(qū)動程序加載請求。
[0114]本發(fā)明實施例中,作為一可選實施例,操作處理模塊33還用于如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序不相同,通知所述驅(qū)動程序加載函數(shù)執(zhí)行所述應用層進程的驅(qū)動程序加載請求,以進行驅(qū)動程序加載操作。
[0115]本發(fā)明實施例中,作為一可選實施例,所述驅(qū)動程序特征庫由用戶在本地進行設置,該裝置還包括:
[0116]信息上報模塊34,用于將拒絕的驅(qū)動程序信息上報至預先設置的網(wǎng)絡服務器。
[0117]本發(fā)明實施例還提供一種電子設備,所述電子設備包含前述任一實施例所述的裝置。
[0118]圖4為本發(fā)明電子設備一個實施例的結(jié)構(gòu)示意圖,可以實現(xiàn)本發(fā)明圖1-3所示實施例的流程,如圖4所示,上述電子設備可以包括:殼體41、處理器42、存儲器43、電路板44和電源電路45,其中,電路板44安置在殼體41圍成的空間內(nèi)部,處理器42和存儲器43設置在電路板44上;電源電路45,用于為上述電子設備的各個電路或器件供電;存儲器43用于存儲可執(zhí)行程序代碼;處理器42通過讀取存儲器43中存儲的可執(zhí)行程序代碼來運行與可執(zhí)行程序代碼對應的程序,用于執(zhí)行前述任一實施例所述的保護驅(qū)動程序的方法。
[0119]處理器42對上述步驟的具體執(zhí)行過程以及處理器42通過運行可執(zhí)行程序代碼來進一步執(zhí)行的步驟,可以參見本發(fā)明圖1-3所示實施例的描述,在此不再贅述。
[0120]該電子設備以多種形式存在,包括但不限于:
[0121](I)移動通信設備:這類設備的特點是具備移動通信功能,并且以提供話音、數(shù)據(jù)通信為主要目標。這類終端包括:智能手機(例如iPhone)、多媒體手機、功能性手機,以及低端手機等。
[0122](2)超移動個人計算機設備:這類設備屬于個人計算機的范疇,有計算和處理功能,一般也具備移動上網(wǎng)特性。這類終端包括:PDA、MID和UMPC設備等,例如iPad。
[0123](3)便攜式娛樂設備:這類設備可以顯示和播放多媒體內(nèi)容。該類設備包括:音頻、視頻播放器(例如iPod),掌上游戲機,電子書,以及智能玩具和便攜式車載導航設備。
[0124](4)服務器:提供計算服務的設備,服務器的構(gòu)成包括處理器、硬盤、內(nèi)存、系統(tǒng)總線等,服務器和通用的計算機架構(gòu)類似,但是由于需要提供高可靠的服務,因此在處理能力、穩(wěn)定性、可靠性、安全性、可擴展性、可管理性等方面要求較高。
[0125](5)其他具有數(shù)據(jù)交互功能的電子設備。
[0126]本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random AccessMemory,RAM)等。
[0127]以上所述,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應以權(quán)利要求的保護范圍為準。
【主權(quán)項】
1.一種保護驅(qū)動程序的方法,其特征在于,該方法包括: 在預先注入到內(nèi)核層中的鉤子函數(shù)監(jiān)測到應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)時,鉤住所述驅(qū)動程序加載函數(shù); 提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息,獲取所述文件路徑信息映射的驅(qū)動程序; 如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序相同,拒絕所述應用層進程的驅(qū)動程序加載請求。2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述驅(qū)動程序加載函數(shù)包括:內(nèi)核驅(qū)動加載函數(shù)、內(nèi)核系統(tǒng)信息設置函數(shù)、扇區(qū)創(chuàng)建函數(shù)以及扇區(qū)映射函數(shù)中的一種或其任意組合。3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述驅(qū)動程序加載函數(shù)為內(nèi)核驅(qū)動加載函數(shù),所述提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息包括: 獲取調(diào)用所述驅(qū)動程序加載函數(shù)時的內(nèi)存地址; 解析所述內(nèi)存地址,得到調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的進程句柄; 利用所述進程句柄的內(nèi)核對象獲取文件路徑信息。4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述驅(qū)動程序加載函數(shù)為內(nèi)核系統(tǒng)信息設置函數(shù),所述提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息包括: 解析所述內(nèi)核系統(tǒng)信息設置函數(shù),獲取第一參數(shù)以及第二參數(shù); 如果第一參數(shù)中的操作系統(tǒng)信息的類型索引號值為預先設置的索引值,提取第二參數(shù)中包含的待加載驅(qū)動程序的文件路徑信息。5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述內(nèi)核系統(tǒng)信息設置函數(shù)為內(nèi)核NtSetSystemInfomat 1n函數(shù),所述預先設置的索引值為38。6.根據(jù)權(quán)利要求1至5任一項所述的方法,其特征在于,所述方法還包括: 如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序不相同,通知所述驅(qū)動程序加載函數(shù)執(zhí)行所述應用層進程的驅(qū)動程序加載請求,以進行驅(qū)動程序加載操作。7.根據(jù)權(quán)利要求1至5任一項所述的方法,其特征在于,所述驅(qū)動程序特征庫由用戶在本地進行設置,所述方法還包括: 將拒絕的驅(qū)動程序信息上報至預先設置的網(wǎng)絡服務器。8.一種保護驅(qū)動程序的裝置,其特征在于,該裝置包括:鉤子模塊、驅(qū)動程序提取模塊以及操作處理模塊,其中, 鉤子模塊,用于在預先注入到內(nèi)核層中的鉤子函數(shù)監(jiān)測到應用層進程調(diào)用預先設置的驅(qū)動程序加載函數(shù)時,鉤住所述驅(qū)動程序加載函數(shù); 驅(qū)動程序提取模塊,用于提取調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的文件路徑信息,獲取所述文件路徑信息映射的驅(qū)動程序; 操作處理模塊,如果獲取的驅(qū)動程序與預先設置的驅(qū)動程序特征庫中的任一驅(qū)動程序相同,拒絕所述應用層進程的驅(qū)動程序加載請求。9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述驅(qū)動程序加載函數(shù)包括:內(nèi)核驅(qū)動加載函數(shù)、內(nèi)核系統(tǒng)信息設置函數(shù)、扇區(qū)創(chuàng)建函數(shù)以及扇區(qū)映射函數(shù)中的一種或其任意組合。10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述驅(qū)動程序加載函數(shù)為內(nèi)核驅(qū)動加載函數(shù),所述驅(qū)動程序提取模塊包括:內(nèi)存地址獲取單元、進程句柄獲取單元、文件路徑信息獲取單元以及驅(qū)動程序獲取單元,其中, 內(nèi)存地址獲取單元,用于獲取調(diào)用所述驅(qū)動程序加載函數(shù)時的內(nèi)存地址; 進程句柄獲取單元,用于解析所述內(nèi)存地址,得到調(diào)用所述驅(qū)動程序加載函數(shù)的應用層進程的進程句柄; 文件路徑信息獲取單元,用戶利用所述進程句柄的內(nèi)核對象獲取文件路徑信息; 驅(qū)動程序獲取單元,用于獲取所述文件路徑信息中包含的驅(qū)動程序。
【文檔編號】G06F21/51GK105844146SQ201610149567
【公開日】2016年8月10日
【申請日】2016年3月16日
【發(fā)明人】楊峰
【申請人】北京金山安全軟件有限公司