程序安全測(cè)試方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種程序安全測(cè)試方法和裝置;其中的方法主要包括:獲取被測(cè)程序的測(cè)試任務(wù)信息,并獲取被測(cè)程序中的加載模塊的歷史加載記錄信息;在所述測(cè)試任務(wù)信息的基礎(chǔ)上,針對(duì)每一條歷史加載記錄信息分別生成用例和用例屬性信息,所述用例屬性信息是安裝運(yùn)行用例所需的信息,且所述用例屬性信息包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息;根據(jù)所述用例屬性信息安裝運(yùn)行用例,且所述用例基于所述所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作;獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息;根據(jù)所述執(zhí)行過(guò)程信息判斷所述被測(cè)程序是否存在安全漏洞,并輸出判斷結(jié)果信息。
【專利說(shuō)明】程序安全測(cè)試方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及程序測(cè)試技術(shù),具體涉及一種程序安全測(cè)試方法以及相應(yīng)的程序安全測(cè)試裝置。
【背景技術(shù)】
[0002]程序在正式投入使用之前,通常會(huì)針對(duì)加載模塊的白文件利用以及加載模塊劫持進(jìn)行安全測(cè)試。
[0003]上述加載模塊通常為DLL (Dynamic Link Library,動(dòng)態(tài)鏈接庫(kù)),也可以為類似于DLL的其他類型的加載模塊,如尾綴為TPI的加載模塊等。在加載模塊為DLL的情況下,DLL的白文件利用通常是指利用DLL白文件繞過(guò)安全軟件的主防加載惡意模塊,從而實(shí)現(xiàn)惡意攻擊;DLL劫持通常是指在運(yùn)行程序當(dāng)前所在目錄下偽造與程序調(diào)用(或啟動(dòng))的真正的DLL同名的DLL,且在偽造的DLL被程序調(diào)用并運(yùn)行DLL中的函數(shù)后,再轉(zhuǎn)向真正的DLL。下面以加載模塊為DLL為例對(duì)程序安全測(cè)試方法進(jìn)行說(shuō)明。
[0004]目前,針對(duì)DLL白文件的利用和DLL劫持的程序安全測(cè)試方法主要包括如下兩種:
[0005]方法一、在編寫完程序代碼后,由相關(guān)的測(cè)試人員(如白盒測(cè)試人員等)對(duì)程序源代碼進(jìn)行審查,以從程序源代碼中找出由于編寫疏忽而造成的DLL白文件的利用和DLL劫持的漏洞。
[0006]方法二、采用IDA等反編譯工具對(duì)編譯后的程序進(jìn)行反編譯,之后,由黑客或者系統(tǒng)安全工程師根據(jù)已經(jīng)公布的一些開源庫(kù)的漏洞進(jìn)行有針對(duì)性的調(diào)試以及實(shí)驗(yàn)。
[0007]發(fā)明人在實(shí)現(xiàn)本發(fā)明過(guò)程中發(fā)現(xiàn),上述方法一由于是通過(guò)人工進(jìn)行程序源代碼核查,因此,通常不可能對(duì)程序中的所有分支進(jìn)行核查,漏查率較高且測(cè)試效率較低;同時(shí),由于程序在各種系統(tǒng)環(huán)境下的表現(xiàn)不盡相同,因此核查后程序源代碼中通常會(huì)仍存在隱晦的漏洞,進(jìn)一步提升了漏查率;上述方法二需要測(cè)試人員具有強(qiáng)大的專業(yè)技能(如代碼分析能力等),且該方法同樣存在測(cè)試效率較低以及漏查率較高等問(wèn)題。
【發(fā)明內(nèi)容】
[0008]鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的程序安全測(cè)試方法和裝置。
[0009]依據(jù)本發(fā)明的一個(gè)方面,提供了一種程序安全測(cè)試方法,主要包括:獲取被測(cè)程序的測(cè)試任務(wù)信息,并獲取被測(cè)程序中的加載模塊的歷史加載記錄信息;在所述測(cè)試任務(wù)信息的基礎(chǔ)上,針對(duì)每一條歷史加載記錄信息分別生成用例以及用例屬性信息,用例屬性信息是安裝運(yùn)行用例所需的信息,且所述用例屬性信息包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息;根據(jù)所述用例屬性信息安裝運(yùn)行用例,且所述用例基于所述所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作;獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息;根據(jù)所述執(zhí)行過(guò)程信息判斷所述被測(cè)程序是否存在安全漏洞,并輸出判斷結(jié)果息。
[0010]依據(jù)本發(fā)明的再一個(gè)方面,提供了一種程序安全測(cè)試裝置,包括:第一獲取模塊,適于獲取被測(cè)程序的測(cè)試任務(wù)信息;第二獲取模塊,適于獲取被測(cè)程序中的加載模塊的歷史加載記錄信息;用例生成模塊,適于在所述測(cè)試任務(wù)信息的基礎(chǔ)上,針對(duì)每一條歷史加載記錄信息分別生成用例以及用例屬性信息,所述用例屬性信息是安裝運(yùn)行用例所需的信息,且所述用例屬性信息包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息;安裝運(yùn)行模塊,適于根據(jù)所述用例屬性信息安裝運(yùn)行用例,且所述用例基于所述所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作;第三獲取模塊,適于獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息;安全判斷模塊,適于根據(jù)所述執(zhí)行過(guò)程信息判斷所述被測(cè)程序是否存在安全漏洞,并輸出判斷結(jié)果信息。
[0011]本發(fā)明的程序安全測(cè)試方法和裝置通過(guò)利用測(cè)試任務(wù)信息以及加載模塊的歷史加載記錄信息生成用例以及用例屬性信息,且在用例屬性信息的基礎(chǔ)上自動(dòng)安裝并運(yùn)行用例,這樣,可以通過(guò)獲取到的用例運(yùn)行過(guò)程中對(duì)加載模塊的加載記錄信息自動(dòng)判斷出被測(cè)程序是否存在與預(yù)置的惡意加載模塊相關(guān)的安全漏洞;從而本發(fā)明有效降低了程序安全測(cè)試對(duì)測(cè)試人員自身的專業(yè)技能的依賴程度,實(shí)現(xiàn)了自動(dòng)對(duì)被測(cè)程序進(jìn)行安全測(cè)試的目的,最終本發(fā)明提高了程序安全測(cè)試效率,并有效降低了漏查率。
[0012]上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】。
【專利附圖】
【附圖說(shuō)明】
[0013]通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。本實(shí)施例的附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
[0014]圖1示出了根據(jù)本發(fā)明實(shí)施例一的程序安全測(cè)試方法流程圖;
[0015]圖2示出了根據(jù)本發(fā)明實(shí)施例二的程序安全測(cè)試方法流程圖;
[0016]圖3示出了根據(jù)本發(fā)明實(shí)施例三的程序安全測(cè)試裝置示意圖。
【具體實(shí)施方式】
[0017]下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0018]實(shí)施例一、程序安全測(cè)試方法。下面結(jié)合圖1對(duì)本實(shí)施例的方法進(jìn)行詳細(xì)說(shuō)明。
[0019]圖1中,S100、獲取被測(cè)程序的測(cè)試任務(wù)信息,并獲取被測(cè)程序中的加載模塊的歷史加載記錄信息。
[0020]具體的,本實(shí)施例的程序安全測(cè)試是指對(duì)被測(cè)程序中是否存在加載模塊的白文件利用這一安全漏洞以及加載模塊劫持這一安全漏洞中的至少其中之一進(jìn)行測(cè)試。
[0021]本實(shí)施例中的被測(cè)程序的測(cè)試任務(wù)信息主要用于描述本次程序安全測(cè)試的具體內(nèi)容;該測(cè)試任務(wù)信息主要包括:被測(cè)程序的標(biāo)識(shí)信息、測(cè)試對(duì)象的標(biāo)識(shí)信息、測(cè)試對(duì)象的種類、測(cè)試方式、測(cè)試對(duì)象的打開方式(也可以稱為測(cè)試對(duì)象的運(yùn)行方式或者啟動(dòng)方式)、測(cè)試對(duì)象的運(yùn)行參數(shù)以及被測(cè)程序的系統(tǒng)平臺(tái)等信息。另外,上述測(cè)試任務(wù)信息還可以包括:測(cè)試對(duì)象的測(cè)試優(yōu)先級(jí)、用例的安裝包存儲(chǔ)地址、用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址以及用例運(yùn)行結(jié)果發(fā)送地址等。
[0022]上述被測(cè)程序的標(biāo)識(shí)信息可以為被測(cè)試的應(yīng)用程序名稱,如360安全衛(wèi)士等;上述測(cè)試對(duì)象的標(biāo)識(shí)信息可以為被測(cè)試的應(yīng)用程序中的可執(zhí)行文件的文件名或者加載模塊的名稱等,且該測(cè)試對(duì)象的標(biāo)識(shí)信息也可以用代表被測(cè)程序安裝包中的所有/多個(gè)程序的缺省字符等來(lái)表示;上述測(cè)試對(duì)象的種類可以為可執(zhí)行文件類型或者加載模塊(如DLL或者TPI)類型等;上述測(cè)試方式可以為加載模塊的白文件利用和/或加載模塊劫持等,上述測(cè)試對(duì)象的打開方式可以為鼠標(biāo)雙擊打開運(yùn)行方式或者用命令行帶參數(shù)運(yùn)行方式等;上述測(cè)試對(duì)象的運(yùn)行參數(shù)即命令行所攜帶的具體參數(shù)等;上述被測(cè)程序的系統(tǒng)平臺(tái)是指被測(cè)程序運(yùn)行的系統(tǒng)環(huán)境信息(如win7_32_spl,xp_32_sp3等);上述測(cè)試對(duì)象的測(cè)試優(yōu)先級(jí)用于表示測(cè)試對(duì)象在進(jìn)行安全測(cè)試過(guò)程中被優(yōu)先執(zhí)行的程度;上述用例的安裝包存儲(chǔ)地址可以明確的表示出用例的安裝包的具體存儲(chǔ)位置;上述用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址可以明確的表示出用例自動(dòng)進(jìn)行程序測(cè)試的腳本代碼包的具體存儲(chǔ)位置;上述用例運(yùn)行結(jié)果發(fā)送地址可以明確的表示出用例運(yùn)行的結(jié)果信息(如加載列表或者加載模塊安全測(cè)試通過(guò)/未通過(guò)信息等)所存儲(chǔ)的位置;本實(shí)施例中的可執(zhí)行文件如后綴為.exe的文件等。
[0023]本實(shí)施例中獲取被測(cè)程序的測(cè)試任務(wù)信息的方式可以有多種,例如,用戶通過(guò)測(cè)試任務(wù)設(shè)置畫面輸入相應(yīng)信息和/或者選擇相應(yīng)的選項(xiàng),并通過(guò)點(diǎn)擊測(cè)試任務(wù)設(shè)置畫面中的“提交測(cè)試任務(wù)”按鈕等方式來(lái)提交測(cè)試任務(wù),從而可以成功獲取到被測(cè)程序的測(cè)試任務(wù)信息;再例如,通過(guò)文件傳輸或者消息傳輸?shù)确绞蕉@取被測(cè)程序的測(cè)試任務(wù)信息。
[0024]本實(shí)施例可以在獲取到測(cè)試任務(wù)信息后,對(duì)其進(jìn)行分門別類的整理,從而形成測(cè)試程序列表、測(cè)試方式列表、參數(shù)列表以及被測(cè)程序的系統(tǒng)平臺(tái)列表等,以方便后續(xù)的安全測(cè)試操作。
[0025]本實(shí)施例中的加載模塊是指本身并不能夠自行運(yùn)行,而需要通過(guò)進(jìn)程等的加載才能夠運(yùn)行的程序模塊;本實(shí)施例中的加載模塊通常是指DLL(也可以稱為DLL類型的加載模塊),也可以是類似于DLL的其他類型加載模塊,如尾綴為TPI的加載模塊(也可以稱為TPI類型的加載模塊)等。
[0026]由于本實(shí)施例是基于用例來(lái)實(shí)現(xiàn)針對(duì)被測(cè)程序中的加載模塊的安全測(cè)試的,因此,需要獲知被測(cè)程序中的加載模塊的歷史加載記錄信息,以在測(cè)試任務(wù)信息的基礎(chǔ)上,針對(duì)相應(yīng)的加載模塊,根據(jù)相應(yīng)的歷史加載記錄信息形成相應(yīng)的用例。
[0027]本實(shí)施例中的歷史加載記錄信息包括:啟動(dòng)加載模塊的進(jìn)程信息、啟動(dòng)加載模塊的啟動(dòng)參數(shù)以及進(jìn)程在啟動(dòng)加載模塊后加載模塊的加載列表等;其中,啟動(dòng)加載模塊的進(jìn)程信息是指被測(cè)程序中啟動(dòng)某個(gè)加載模塊的一個(gè)或者多個(gè)進(jìn)程;啟動(dòng)加載模塊的啟動(dòng)參數(shù)是指被測(cè)程序中啟動(dòng)某個(gè)加載模塊的一個(gè)或者多個(gè)進(jìn)程在啟動(dòng)該加載模塊時(shí)所使用的參數(shù);加載模塊的加載列表是指由被測(cè)程序在加載各個(gè)加載模塊時(shí)所使用的全路徑信息所組成的列表。
[0028]在本實(shí)施例中,獲取被測(cè)程序中的加載模塊的歷史加載記錄信息的方式主要包括如下兩種:
[0029]方式一、通過(guò)數(shù)據(jù)庫(kù)查詢獲得;該方式主要針對(duì)測(cè)試任務(wù)信息中的測(cè)試對(duì)象為被測(cè)程序中的加載模塊的情況。
[0030]具體的,數(shù)據(jù)庫(kù)中預(yù)先存儲(chǔ)有被測(cè)程序中的多個(gè)加載模塊的歷史加載記錄信息,在獲取到被測(cè)程序的測(cè)試任務(wù)信息后,可以對(duì)該測(cè)試任務(wù)信息中的測(cè)試對(duì)象的種類信息進(jìn)行判斷,在確定出本次測(cè)試對(duì)象中的某一個(gè)或某些測(cè)試對(duì)象為加載模塊的情況下,針對(duì)加載模塊類型的測(cè)試對(duì)象,可以通過(guò)直接從數(shù)據(jù)庫(kù)中查找的方式獲得該加載模塊的歷史加載記錄信息,例如,將加載模塊的名稱作為搜索關(guān)鍵詞,從數(shù)據(jù)庫(kù)存儲(chǔ)的信息中查找與該加載模塊的名稱對(duì)應(yīng)的所有歷史加載記錄信息。
[0031]方式二、通過(guò)前期用例運(yùn)行獲得;該方式主要針對(duì)測(cè)試任務(wù)信息中的測(cè)試對(duì)象為被測(cè)程序中的可執(zhí)行文件的情況。
[0032]具體的,在獲取到被測(cè)程序的測(cè)試任務(wù)信息后,根據(jù)該測(cè)試任務(wù)信息中的測(cè)試對(duì)象的種類信息進(jìn)行判斷,在確定出本次測(cè)試對(duì)象中的某一個(gè)或者某些測(cè)試對(duì)象為可執(zhí)行文件的情況下,針對(duì)可執(zhí)行文件類型的測(cè)試對(duì)象,先根據(jù)測(cè)試任務(wù)信息生成前期用例以及前期用例屬性信息,然后,根據(jù)前期用例屬性信息來(lái)安裝并運(yùn)行前期用例,并在前期用例的運(yùn)行過(guò)程中,獲取被啟動(dòng)的加載模塊的加載記錄信息,這些獲取到的加載記錄信息可以作為相應(yīng)的加載模塊的歷史加載記錄信息。
[0033]需要特別說(shuō)明的是,通過(guò)前期用例的運(yùn)行而獲得的加載記錄信息同時(shí)可以作為歷史加載記錄信息而存儲(chǔ)于數(shù)據(jù)庫(kù)中,以便于在上述方式一中,在測(cè)試任務(wù)信息中的測(cè)試對(duì)象為加載模塊類型時(shí),可以從數(shù)據(jù)庫(kù)中成功獲取到相應(yīng)的歷史加載記錄信息。
[0034]上述前期用例屬性信息是前期用例安裝運(yùn)行所需的信息。前期用例屬性信息也可以稱為前期用例安裝運(yùn)行所需的信息或者與前期用例安裝運(yùn)行相關(guān)的信息;前期用例屬性信息通常包括:前期用例的安裝包存儲(chǔ)地址(如前期用例的安裝包下載地址)、前期用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址(如可以稱為前期用例的代碼包下載地址)、前期用例運(yùn)行的系統(tǒng)平臺(tái)信息、前期用例重試次數(shù)以及前期用例運(yùn)行參數(shù)(即前期用例執(zhí)行附加參數(shù))等;另外,該前期用例屬性信息還可以包括:前期用例的測(cè)試優(yōu)先級(jí)以及前期用例運(yùn)行結(jié)果發(fā)送地址等;上述前期用例的安裝包存儲(chǔ)地址是由測(cè)試任務(wù)信息中的用例的安裝包存儲(chǔ)地址形成或者由缺省值設(shè)置形成;上述前期用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址是由測(cè)試任務(wù)信息中的用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址形成或者由缺省值設(shè)置形成;上述前期用例運(yùn)行的系統(tǒng)平臺(tái)信息是由測(cè)試任務(wù)信息中的被測(cè)程序的系統(tǒng)平臺(tái)(如win7_32_spl或者win8_64_spl等)形成;上述前期用例重試次數(shù)是指前期用例運(yùn)行失敗時(shí)再次運(yùn)行前期用例的次數(shù),即對(duì)于不能順利返回結(jié)果的前期用例需要再次運(yùn)行的次數(shù),這里的運(yùn)行失敗可以為前期用例結(jié)果不符合預(yù)期或者前期用例執(zhí)行超時(shí)等;且上述前期用例重試次數(shù)可以是由測(cè)試任務(wù)信息中的用例重試次數(shù)形成(也就是說(shuō),測(cè)試任務(wù)信息中可以包含有用例重試次數(shù)這一信息),前期用例重試次數(shù)也可以根據(jù)缺省值設(shè)置形成;上述前期用例執(zhí)行附加參數(shù)是指一些自定義字段,即除了前期用例的安裝包下載地址、前期用例的代碼包下載地址、前期用例運(yùn)行的系統(tǒng)平臺(tái)信息以及前期用例重試次數(shù)之外的自定義信息,這些自定義信息是前期用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包在運(yùn)行前期用例過(guò)程中需要使用的字段;且前期用例執(zhí)行附加參數(shù)可以由測(cè)試任務(wù)信息中的被測(cè)程序的標(biāo)識(shí)信息、測(cè)試對(duì)象的標(biāo)識(shí)信息、測(cè)試對(duì)象的種類、測(cè)試方式、測(cè)試對(duì)象的打開方式以及測(cè)試對(duì)象的運(yùn)行參數(shù)形成;上述前期用例的測(cè)試優(yōu)先級(jí)用于表示前期用例被優(yōu)先執(zhí)行的程度,前期用例的測(cè)試優(yōu)先級(jí)可以由測(cè)試任務(wù)信息中的測(cè)試對(duì)象的測(cè)試優(yōu)先級(jí)形成。上述前期用例運(yùn)行結(jié)果發(fā)送地址是指在前期用例執(zhí)行過(guò)程中所獲得的加載記錄信息應(yīng)傳輸至的具體地址信息,該前期用例運(yùn)行結(jié)果發(fā)送地址可以是一個(gè)URL (Uniform ResourceLocator,統(tǒng)一資源定位符),前期用例運(yùn)行結(jié)果發(fā)送地址可以由測(cè)試任務(wù)信息中的用例運(yùn)行結(jié)果發(fā)送地址形成,也可以采用缺省值方式來(lái)設(shè)置。
[0035]上述根據(jù)測(cè)試任務(wù)信息生成前期用例以及前期用例屬性信息可以為:執(zhí)行相應(yīng)的打包操作,以生成用例的安裝包以及用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包,并按照預(yù)先設(shè)定的用例格式以及用例屬性信息的格式利用測(cè)試任務(wù)信息生成前期用例以及前期用例屬性信息。上述前期用例的安裝包通常包括:用例的安裝文件以及針對(duì)用例的安裝文件的安裝腳本代碼(用于執(zhí)行用例的安裝文件)。上述用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包通常包括:用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼(用于執(zhí)行用例)。上述用例的安裝文件、安裝腳本代碼以及用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼都是預(yù)先編寫好的代碼,而且,用例的安裝文件、安裝腳本代碼以及用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼可以適用于所有的用例。上述預(yù)先設(shè)定的用例格式以及用例屬性信息的格式可以由測(cè)試人員根據(jù)實(shí)際情況設(shè)置,本發(fā)明實(shí)施例不限制用例格式以及用例屬性信息的格式的具體表現(xiàn)形式。
[0036]上述根據(jù)前期用例屬性信息來(lái)安裝并運(yùn)行前期用例可以具體為:從前期用例屬性信息中獲取前期用例的安裝包存儲(chǔ)地址,并根據(jù)該存儲(chǔ)地址下載前期用例的安裝包,然后,執(zhí)行用例的安裝包中的安裝腳本代碼,從而安裝腳本代碼執(zhí)行用例的安裝包的安裝操作;從前期用例屬性中獲取用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址,根據(jù)該存儲(chǔ)地址下載用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包,并執(zhí)行用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包中的腳本代碼。
[0037]本實(shí)施例可以利用現(xiàn)有的工具來(lái)獲取前期用例運(yùn)行過(guò)程中的加載記錄信息,例如,本實(shí)施例可以利用微軟公司的進(jìn)程監(jiān)控工具(process monitor)來(lái)獲取前期用例在運(yùn)行過(guò)程中對(duì)加載模塊的加載記錄信息。
[0038]前期用例對(duì)應(yīng)的加載記錄信息可以作為歷史加載記錄信息,且本實(shí)施例可以根據(jù)前期用例屬性信息中的前期用例運(yùn)行結(jié)果發(fā)送地址來(lái)將歷史加載記錄信息存儲(chǔ)在相應(yīng)的位置,進(jìn)而該位置處的歷史加載記載信息可以被匯總于相應(yīng)的數(shù)據(jù)庫(kù)中。另外,歷史加載記錄信息通常應(yīng)按照預(yù)先設(shè)定的存儲(chǔ)格式存儲(chǔ)在數(shù)據(jù)庫(kù)中,且數(shù)據(jù)庫(kù)中還可以存儲(chǔ)測(cè)試任務(wù)信息以及相應(yīng)的測(cè)試結(jié)果信息等與測(cè)試相關(guān)的內(nèi)容。
[0039]S110、在上述測(cè)試任務(wù)信息的基礎(chǔ)上,針對(duì)每一條歷史加載記錄信息分別生成用例以及用例屬性信息。
[0040]具體的,為了區(qū)別描述,S100步驟中所提及的前期用例可以稱為一期用例,而本步驟的“針對(duì)每一條歷史加載記錄信息分別生成用例以及用例屬性信息”中的用例可以稱為二期用例,且其中的用例屬性信息可以稱為二期用例屬性信息。
[0041]二期用例屬性信息是安裝運(yùn)行二期用例所需的信息,也可以稱為二期用例安裝運(yùn)行所需的信息或者與二期用例安裝運(yùn)行相關(guān)的信息。
[0042]本實(shí)施例中的二期用例屬性信息至少應(yīng)包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息(也可以稱為加載模塊的全路徑信息),且本實(shí)施例中的二期用例屬性信息通常還包括:二期用例的安裝包存儲(chǔ)地址(如二期用例的安裝包下載地址)、二期用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址(如可以稱為二期用例的代碼包下載地址)、二期用例運(yùn)行的系統(tǒng)平臺(tái)信息、二期用例重試次數(shù)以及二期用例運(yùn)行參數(shù)(即二期用例執(zhí)行附加參數(shù))等;另外,該二期用例屬性信息還可以包括:二期用例的測(cè)試優(yōu)先級(jí)以及二期用例運(yùn)行結(jié)果發(fā)送地址等。
[0043]上述加載路徑信息是由歷史加載記錄信息中的記載列表形成;上述二期用例的安裝包存儲(chǔ)地址可以由測(cè)試任務(wù)信息中的用例的安裝包存儲(chǔ)地址形成,也可以由前期用例的安裝包下載地址直接形成;上述二期用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址可以由測(cè)試任務(wù)信息中的用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址形成,也可以由前期用例的代碼包下載地址直接形成;上述二期用例運(yùn)行的系統(tǒng)平臺(tái)信息可以由測(cè)試任務(wù)信息中的被測(cè)程序的系統(tǒng)平臺(tái)(如win7_32_spl或者win8_64_spl等)形成,也可以由前期用例運(yùn)行的系統(tǒng)平臺(tái)信息直接形成;上述二期用例重試次數(shù)是指二期用例運(yùn)行失敗時(shí)再次運(yùn)行二期用例的次數(shù),即對(duì)于不能順利返回結(jié)果的二期用例需要再次運(yùn)行的次數(shù),這里的運(yùn)行失敗可以為二期用例結(jié)果不符合預(yù)期或者二期用例執(zhí)行超時(shí)等;且上述二期用例重試次數(shù)可以由測(cè)試任務(wù)信息中的用例重試次數(shù)形成(也就是說(shuō),測(cè)試任務(wù)信息中可以包含有用例重試次數(shù)這一信息),二期用例重試次數(shù)也可以根據(jù)缺省值設(shè)置形成,還可以由前期用例重試次數(shù)直接形成;上述二期用例執(zhí)行附加參數(shù)是指一些自定義字段,即除了二期用例的安裝包下載地址、二期用例的代碼包下載地址、二期用例運(yùn)行的系統(tǒng)平臺(tái)信息以及二期用例重試次數(shù)之外的自定義信息,這些自定義信息是二期用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包在運(yùn)行二期用例過(guò)程中所需要使用的字段;且二期用例執(zhí)行附加參數(shù)可以由前期用例執(zhí)行附加參數(shù)直接形成;上述二期用例的測(cè)試優(yōu)先級(jí)用于表示二期用例被優(yōu)先執(zhí)行的程度,二期用例的測(cè)試優(yōu)先級(jí)可以由測(cè)試任務(wù)信息中的測(cè)試對(duì)象的測(cè)試優(yōu)先級(jí)形成,也可以由前期用例的測(cè)試優(yōu)先級(jí)直接形成。上述二期用例運(yùn)行結(jié)果發(fā)送地址是指在二期用例執(zhí)行過(guò)程中所獲得的加載記錄信息應(yīng)傳輸至的具體地址信息,該二期用例運(yùn)行結(jié)果發(fā)送地址可以是一個(gè)URL,二期用例運(yùn)行結(jié)果發(fā)送地址可以由測(cè)試任務(wù)信息中的用例運(yùn)行結(jié)果發(fā)送地址形成,也可以由二期用例運(yùn)行結(jié)果發(fā)送地址直接形成或者采用缺省值方式來(lái)設(shè)置。
[0044]由上述描述可知,二期用例屬性信息與一期用例屬性信息基本相同,只是在一期用例屬性信息的基礎(chǔ)上增加了加載模塊的全路徑信息。
[0045]針對(duì)每一條歷史加載記錄信息分別生成用例以及用例屬性信息的具體實(shí)現(xiàn)過(guò)程請(qǐng)參考上述根據(jù)測(cè)試任務(wù)信息生成前期用例以及前期用例屬性信息的描述,兩者的區(qū)別包括:預(yù)置的惡意加載模塊被打入用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包中。上述的預(yù)置的惡意加載模塊是預(yù)先編寫好的代碼。
[0046]S120、根據(jù)用例屬性信息安裝運(yùn)行用例,且用例基于所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作。
[0047]具體的,本步驟的“根據(jù)用例屬性信息安裝運(yùn)行用例,且用例基于所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作”中的用例可稱為二期用例,且其中的用例屬性信息可以稱為二期用例屬性信息。
[0048]本步驟中的安裝運(yùn)行用例的過(guò)程可以為:從二期用例屬性信息中獲取二期用例的安裝包存儲(chǔ)地址,根據(jù)該存儲(chǔ)地址獲取二期用例的安裝包,并執(zhí)行用例的安裝包中的安裝腳本代碼,從而安裝腳本代碼運(yùn)行用例的安裝包中的安裝文件,以安裝二期用例;從二期用例屬性中獲取用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址,根據(jù)該存儲(chǔ)地址獲取用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包,執(zhí)行用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包中的腳本代碼,腳本代碼的執(zhí)行會(huì)將預(yù)置的惡意加載模塊放置于相應(yīng)的路徑中,并使用例基于所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作。
[0049]S130、獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息。
[0050]具體的,本步驟的“獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息”中的用例可稱為二期用例。本實(shí)施例可以利用現(xiàn)有的工具來(lái)獲取二期用例運(yùn)行過(guò)程中的執(zhí)行過(guò)程信息,例如,本實(shí)施例可以利用微軟公司的進(jìn)程監(jiān)控工具(processmonitor)來(lái)獲取二期用例在運(yùn)行過(guò)程中的執(zhí)行過(guò)程信息,該執(zhí)行過(guò)程信息包括:對(duì)加載模塊的加載記錄信息。
[0051]由于本實(shí)施例中的預(yù)置的惡意加載模塊在被執(zhí)行過(guò)程中會(huì)寫下預(yù)定標(biāo)記,因此,帶有預(yù)定標(biāo)記的執(zhí)行過(guò)程信息即為與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息。另外,如果執(zhí)行過(guò)程信息中存在預(yù)置的惡意加載模塊的加載記錄信息,則該加載記錄信息也為與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息。
[0052]S140、根據(jù)執(zhí)行過(guò)程信息判斷被測(cè)程序是否存在安全漏洞,并輸出判斷結(jié)果信息。
[0053]具體的,本實(shí)施例可以通過(guò)判斷與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息來(lái)確定出被測(cè)程序是否存在安全漏洞;例如,根據(jù)預(yù)置的惡意模塊寫下的預(yù)定標(biāo)記可以判斷出被測(cè)程序存在較嚴(yán)重的安全問(wèn)題;再例如,根據(jù)預(yù)置的惡意加載模塊的加載記錄信息可以判斷出被測(cè)程序存在安全隱患。
[0054]進(jìn)一步的,本實(shí)施例還可以判斷出被測(cè)程序存在安全問(wèn)題以及安全隱患的具體位置,例如,可以判斷出帶有預(yù)定標(biāo)記的執(zhí)行過(guò)程信息是哪個(gè)用例在運(yùn)行過(guò)程中出現(xiàn)的,而根據(jù)該用例即可判斷出被測(cè)程序存在安全問(wèn)題以及安全隱患的具體位置。
[0055]本實(shí)施例可以在測(cè)試任務(wù)信息以及執(zhí)行過(guò)程信息等內(nèi)容的基礎(chǔ)上制作程序測(cè)試結(jié)果報(bào)告,并將程序測(cè)試結(jié)果報(bào)告發(fā)送到預(yù)定地址。該預(yù)定地址可以通過(guò)測(cè)試任務(wù)信息來(lái)設(shè)置,即測(cè)試任務(wù)信息可以包括程序測(cè)試結(jié)果報(bào)告的發(fā)送地址這一內(nèi)容。
[0056]實(shí)施例二、程序安全測(cè)試方法。
[0057]本實(shí)施例的程序安全測(cè)試方法是通過(guò)服務(wù)器(下述稱為白利用劫持服務(wù)器)、前臺(tái)模塊、自動(dòng)推送接口模塊、數(shù)據(jù)庫(kù)存取模塊(即包含有數(shù)據(jù)庫(kù)在內(nèi)的數(shù)據(jù)庫(kù)存取模塊)、用例執(zhí)行平臺(tái)以及多個(gè)分布式虛擬機(jī)來(lái)實(shí)現(xiàn)的。
[0058]下面結(jié)合圖2對(duì)本實(shí)施例中的各個(gè)部件所執(zhí)行的操作分別進(jìn)行說(shuō)明。
[0059](一)、白利用劫持服務(wù)器
[0060]白利用劫持服務(wù)器是本實(shí)施例實(shí)現(xiàn)程序安全測(cè)試的核心部件。白利用劫持服務(wù)器所執(zhí)行的操作主要包括:
[0061]1、為前臺(tái)模塊提供歷史被測(cè)程序的測(cè)試任務(wù)信息,以使前臺(tái)模塊能夠向用戶展示相應(yīng)的測(cè)試任務(wù)設(shè)置及提交頁(yè)面,從而方便用戶針對(duì)被測(cè)程序設(shè)置相應(yīng)的測(cè)試任務(wù)信息;白利用劫持服務(wù)器可以對(duì)用戶設(shè)置的測(cè)試任務(wù)信息進(jìn)行整理,即對(duì)用戶設(shè)置的測(cè)試任務(wù)信息進(jìn)行分門別類的整理,如可以獲得測(cè)試程序列表、測(cè)試方式列表、參數(shù)列表以及系統(tǒng)平臺(tái)列表等,以方便后續(xù)的測(cè)試操作;其中,測(cè)試程序列表中通常包括一個(gè)或者多個(gè)需要進(jìn)行測(cè)試的被測(cè)程序的標(biāo)識(shí)信息與相應(yīng)測(cè)試對(duì)象的標(biāo)識(shí)信息的對(duì)應(yīng)關(guān)系,如被測(cè)程序的名稱與被測(cè)程序中的某個(gè)或者某些可執(zhí)行文件的名稱以及某個(gè)或者某些加載模塊的名稱的對(duì)應(yīng)關(guān)系等;測(cè)試方式列表通常用于表示測(cè)試程序列表中的每一個(gè)測(cè)試對(duì)象是進(jìn)行白文件利用測(cè)試還是進(jìn)行加載模塊劫持測(cè)試,亦或是同時(shí)進(jìn)行白文件利用測(cè)試以及加載模塊劫持測(cè)試;參數(shù)列表通常用于表示測(cè)試程序列表中的每一個(gè)測(cè)試對(duì)象的運(yùn)行方式(即打開方式或者啟動(dòng)方式)以及相應(yīng)的運(yùn)行參數(shù);系統(tǒng)平臺(tái)列表通常用于表示測(cè)試程序列表中的每一個(gè)測(cè)試對(duì)象在用例執(zhí)行平臺(tái)運(yùn)行的系統(tǒng)環(huán)境信息(如win7_32_spl或者win8_64_spl等)。
[0062]2、接收前臺(tái)模塊或自動(dòng)推送接口模塊傳輸來(lái)的被測(cè)程序的測(cè)試任務(wù)信息,并對(duì)接收到的測(cè)試任務(wù)信息進(jìn)行整理,即對(duì)接收到的測(cè)試任務(wù)信息進(jìn)行分門別類的整理,如可以獲得測(cè)試程序列表、測(cè)試方式列表、參數(shù)列表以及系統(tǒng)平臺(tái)列表等,以方便后續(xù)的測(cè)試操作。
[0063]3、在測(cè)試程序列表中的測(cè)試對(duì)象包含有DII或者TPI這種自身不能啟動(dòng)的加載模塊的情況下,白利用劫持服務(wù)器還需要根據(jù)測(cè)試對(duì)象標(biāo)識(shí)從數(shù)據(jù)庫(kù)存取模塊的數(shù)據(jù)庫(kù)存儲(chǔ)的歷史加載記錄信息中進(jìn)行查詢,查詢所獲得的歷史加載記錄信息可以表示出被測(cè)程序中啟動(dòng)DII或者TPI這種類型的測(cè)試對(duì)象的一個(gè)或者多個(gè)進(jìn)程(甚至所有進(jìn)程)、各進(jìn)程啟動(dòng)DII或者TPI這種類型的測(cè)試對(duì)象的啟動(dòng)參數(shù)以及各進(jìn)程啟動(dòng)DII或者TPI后所產(chǎn)生的加載列表等。
[0064]白利用劫持服務(wù)器可以在測(cè)試任務(wù)信息以及查詢到的歷史加載記錄信息的基礎(chǔ)上生成用例以及用例屬性信息;這里的用例即上述實(shí)施例中記載的二期用例。白利用劫持服務(wù)器將二期用例以及二期用例屬性信息提交給用例執(zhí)行平臺(tái)。
[0065]需要特別說(shuō)明的是,白利用劫持服務(wù)器針對(duì)自身不能自行啟動(dòng)的加載模塊不需要生成一期用例以及一期用例屬性信息,而是直接生成二期用例以及二期用例屬性信息,白利用劫持服務(wù)器生成二期用例以及用例屬性信息的過(guò)程請(qǐng)參見下述描述。
[0066]4、在測(cè)試程序列表中的測(cè)試對(duì)象包含有可執(zhí)行文件(如后綴為exe的文件)的情況下,白利用劫持服務(wù)器可以直接根據(jù)其接收到的測(cè)試任務(wù)信息生成前期用例以及前期用例屬性信息,并將前期用例以及前期用例屬性信息提交給用例執(zhí)行平臺(tái)。這里的前期用例即上述實(shí)施例中描述的一期用例。
[0067]本實(shí)施例中的一期用例的一個(gè)主要的目的包括:利用微軟的process monitor等工具動(dòng)態(tài)獲取被測(cè)程序的可執(zhí)行文件類型的測(cè)試對(duì)象(如某個(gè)exe文件)在執(zhí)行過(guò)程中針對(duì)加載模塊的加載列表。測(cè)試任務(wù)信息以及上述動(dòng)態(tài)獲取到的加載列表可以作為生成二期用例以及二期用例屬性的基礎(chǔ)信息。
[0068]白利用劫持服務(wù)器可以將其動(dòng)態(tài)獲取到的加載列表與啟動(dòng)加載模塊的進(jìn)程信息和啟動(dòng)加載模塊的啟動(dòng)參數(shù)一起作為歷史加載記錄信息存儲(chǔ)在數(shù)據(jù)庫(kù)存取模塊的數(shù)據(jù)庫(kù)中。
[0069]白利用劫持服務(wù)器生成一期用例的一個(gè)具體過(guò)程可以為:白利用劫持服務(wù)器根據(jù)測(cè)試任務(wù)信息中的被測(cè)程序的標(biāo)識(shí)信息、測(cè)試對(duì)象的標(biāo)識(shí)信息、測(cè)試對(duì)象的種類、測(cè)試方式、測(cè)試對(duì)象的打開方式(也可以稱為測(cè)試對(duì)象的運(yùn)行方式或者啟動(dòng)方式)、測(cè)試對(duì)象的運(yùn)行參數(shù)、測(cè)試對(duì)象的測(cè)試優(yōu)先級(jí)、被測(cè)程序的安裝包存儲(chǔ)地址、自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址以及被測(cè)程序的系統(tǒng)平臺(tái)等信息進(jìn)行相應(yīng)的打包處理,以形成分布式虛擬機(jī)運(yùn)行的用例的安裝包以及用例的自動(dòng)執(zhí)行腳本代碼包,并同時(shí)生成用例的安裝包的URL以及用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包的URL。
[0070]上述打包處理過(guò)程如將用例的安裝文件以及針對(duì)用例的安裝文件的安裝腳本代碼進(jìn)行打包,并將該包存儲(chǔ)在預(yù)定位置,再如將預(yù)置的惡意加載模塊以及用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼進(jìn)行打包。
[0071]上述用例的安裝文件的安裝腳本代碼用于執(zhí)行用例的安裝文件,且用例的安裝文件的安裝腳本代碼是預(yù)先編寫好的代碼。上述用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼用于執(zhí)行用例,且用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼是預(yù)先編寫好的代碼。
[0072]另外,白利用劫持服務(wù)器將上述兩個(gè)URL(即下載鏈接信息)作為一期用例屬性信息中的一個(gè)屬性。一期用例屬性信息是用例執(zhí)行平臺(tái)在執(zhí)行一期用例過(guò)程中所需要的一些信息;一期用例屬性信息主要包括:一期用例的安裝包下載地址、一期用例的代碼包下載地址、一期用例運(yùn)行的系統(tǒng)平臺(tái)信息、一期用例重試次數(shù)、一期用例執(zhí)行附加參數(shù)、一期用例的測(cè)試優(yōu)先級(jí)以及一期用例運(yùn)行結(jié)果發(fā)送地址等。
[0073]—期用例在分布式虛擬機(jī)上執(zhí)行結(jié)束后,白利用劫持服務(wù)器會(huì)接收到分布式虛擬機(jī)通過(guò)用例執(zhí)行平臺(tái)返回的加載列表、啟動(dòng)加載模塊的進(jìn)程信息和啟動(dòng)加載模塊的啟動(dòng)參數(shù)等,在被測(cè)對(duì)象的所有可執(zhí)行文件類型的測(cè)試對(duì)象的一期用例均執(zhí)行完成后,白利用劫持服務(wù)器會(huì)收集到較為全面的加載列表、啟動(dòng)加載模塊的進(jìn)程信息以及啟動(dòng)加載模塊的啟動(dòng)參數(shù)等,白利用劫持服務(wù)器可以將其收集到的加載列表、啟動(dòng)加載模塊的進(jìn)程信息以及啟動(dòng)加載模塊的啟動(dòng)參數(shù)等作為歷史加載記錄信息傳輸給數(shù)據(jù)庫(kù)存取模塊存儲(chǔ)于數(shù)據(jù)庫(kù)中。
[0074]5、白利用劫持服務(wù)器針對(duì)其收集到所有加載記錄信息中的每一條加載記錄信息分別生成二期用例以及二期用例屬性信息,并將二期用例以及二期用例屬性信息提交至用例執(zhí)行平臺(tái)。本實(shí)施例中的二期用例屬性信息基本上與一期用例屬性信息相同,只是在一期用例屬性信息的基礎(chǔ)上增加了加載模塊的全路徑信息。
[0075]本實(shí)施例中的二期用例的主要目的包括:查看測(cè)試對(duì)象的執(zhí)行結(jié)果是否包含有與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息,該執(zhí)行過(guò)程信息如惡意加載模塊的執(zhí)行標(biāo)記或者惡意加載|吳塊的路徑是否存在于加載列表中等。
[0076]需要特別說(shuō)明的是,預(yù)置的惡意加載模塊可以被白利用劫持服務(wù)器打包在二期用例的自動(dòng)執(zhí)行腳本代碼包中,且預(yù)置的惡意加載模塊是測(cè)試人員預(yù)先編寫設(shè)置的。
[0077]6、白利用劫持服務(wù)器接收分布式虛擬機(jī)通過(guò)用例執(zhí)行平臺(tái)返回的所有二期用例的執(zhí)行結(jié)果信息,并根據(jù)二期用例的執(zhí)行結(jié)果信息生成測(cè)試報(bào)告,之后,白利用劫持服務(wù)器將測(cè)試報(bào)告提供給用戶,例如,白利用劫持服務(wù)器以郵件的方式將測(cè)試報(bào)告發(fā)給相應(yīng)的用戶;再例如,白利用劫持服務(wù)器將測(cè)試報(bào)告通過(guò)前臺(tái)模塊向用戶展示。
[0078]本實(shí)施例中的測(cè)試報(bào)告的內(nèi)容主要包括:測(cè)試步驟的說(shuō)明、測(cè)試任務(wù)的詳細(xì)信息、對(duì)每個(gè)測(cè)試程序的測(cè)試結(jié)果的概要說(shuō)明以及詳細(xì)的報(bào)告內(nèi)容;其中,上述測(cè)試任務(wù)的詳細(xì)信息主要包括:測(cè)試任務(wù)ID、測(cè)試方式、被測(cè)程序的系統(tǒng)平臺(tái)、被測(cè)程序的安裝包信息以及測(cè)試任務(wù)的執(zhí)行時(shí)間等;上述測(cè)試結(jié)果的概要說(shuō)明主要包括:程序的信息(如被測(cè)程序的名稱、版本以及數(shù)字簽名等)、測(cè)試對(duì)象的運(yùn)行方式和測(cè)試對(duì)象的運(yùn)行參數(shù)、對(duì)測(cè)試對(duì)象進(jìn)行測(cè)試的耗時(shí)、是否發(fā)現(xiàn)安全漏洞(如羅列出測(cè)試未通過(guò)的加載模塊等)以及詳細(xì)報(bào)告內(nèi)容的鏈接地址信息等;上述詳細(xì)報(bào)告內(nèi)容通常會(huì)將被測(cè)程序的加載列表的各個(gè)加載模塊的測(cè)試結(jié)果均羅列出來(lái),如將測(cè)試通過(guò)的加載模塊以及測(cè)試未通過(guò)的加載模塊均羅列出來(lái)。
[0079](二)、前臺(tái)模塊
[0080]前臺(tái)模塊為用戶提供了供其手工設(shè)置被測(cè)程序的測(cè)試任務(wù)信息并向白利用劫持服務(wù)器提交測(cè)試任務(wù)的頁(yè)面。前臺(tái)模塊還可以為用戶提供測(cè)試任務(wù)查詢頁(yè)面,以查看測(cè)試任務(wù)的測(cè)試狀態(tài);測(cè)試狀態(tài)如已測(cè)試完成或者正在測(cè)試中或者未測(cè)試等。前臺(tái)模塊還可以為用戶提供測(cè)試結(jié)果顯示頁(yè)面,以方便用戶查看被測(cè)程序的測(cè)試結(jié)果。
[0081]用戶可以通過(guò)前臺(tái)模塊展示的測(cè)試任務(wù)設(shè)置及提交頁(yè)面手工設(shè)置被測(cè)程序的測(cè)試任務(wù)信息中的各個(gè)項(xiàng)的具體取值,如可以設(shè)置需要進(jìn)行測(cè)試的程序安裝包名稱、測(cè)試程序安裝包中的指定程序、指定程序的運(yùn)行方式和運(yùn)行參數(shù)、指定程序的測(cè)試方式以及根據(jù)測(cè)試結(jié)果生成的測(cè)試報(bào)告的郵件接收者信息等等。
[0082]用戶可以通過(guò)前臺(tái)模塊展示的任務(wù)列表頁(yè)面查看歷史測(cè)試任務(wù)信息、歷史測(cè)試任務(wù)的執(zhí)行狀態(tài)以及測(cè)試的詳細(xì)報(bào)告內(nèi)容的鏈接信息等。
[0083](三)、自動(dòng)推送接口模塊
[0084]自動(dòng)推送接口模塊主要用于在已經(jīng)進(jìn)行過(guò)測(cè)試的被測(cè)程序中的指定程序更新時(shí),將相應(yīng)的測(cè)試任務(wù)信息推送給白利用劫持服務(wù)器,以使白利用劫持服務(wù)器可以針對(duì)指定程序的更新實(shí)現(xiàn)白文件利用以及加載模塊劫持的自動(dòng)化安全測(cè)試。
[0085]具體的,在被測(cè)程序中的指定程序發(fā)生更新的情況下,自動(dòng)推送接口模塊會(huì)接收到測(cè)試請(qǐng)求,測(cè)試請(qǐng)求中攜帶有測(cè)試任務(wù)信息,自動(dòng)推送接口模塊對(duì)測(cè)試請(qǐng)求進(jìn)行解析,以從解析結(jié)果中獲取測(cè)試任務(wù)信息;自動(dòng)推送接口模塊將其獲取到的測(cè)試任務(wù)信息傳輸給白利用劫持服務(wù)器,使白利用劫持服務(wù)器可以根據(jù)該測(cè)試任務(wù)信息執(zhí)行后續(xù)的操作。
[0086](四)、數(shù)據(jù)庫(kù)存取模塊
[0087]數(shù)據(jù)庫(kù)存取模塊中可以包括數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)存取模塊主要用于對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀寫操作,使數(shù)據(jù)庫(kù)中存儲(chǔ)與程序安全測(cè)試相關(guān)的信息,并根據(jù)白利用劫持服務(wù)器的查詢需求從數(shù)據(jù)庫(kù)中查找讀取相應(yīng)的信息,將查找結(jié)果返回給白利用劫持服務(wù)器。
[0088]數(shù)據(jù)庫(kù)中存儲(chǔ)的信息可以包括:被測(cè)程序的標(biāo)識(shí)信息,如被測(cè)程序的安裝包的md5、被測(cè)程序的版本號(hào)以及被測(cè)程序的數(shù)字簽名等。被測(cè)程序的標(biāo)識(shí)信息主要用于表明與其共同存儲(chǔ)的其他數(shù)據(jù)所屬的被測(cè)程序。
[0089]數(shù)據(jù)庫(kù)中存儲(chǔ)的信息還可以包括:被測(cè)程序的歷史測(cè)試任務(wù)信息以及歷史加載記錄信息等。被測(cè)程序的歷史測(cè)試任務(wù)信息可以用于被測(cè)程序的歷史測(cè)試查詢,也可以用于形成被測(cè)程序的測(cè)試報(bào)告等。被測(cè)程序的歷史加載記錄信息主要用于形成二期用例以及二期用例的屬性信息。
[0090]數(shù)據(jù)庫(kù)中存儲(chǔ)的信息還可以包括:被測(cè)程序的更新文件列表。更新文件列表可以用于被測(cè)程序的歷史測(cè)試查詢,也可以用于形成被測(cè)程序的測(cè)試報(bào)告等。
[0091]數(shù)據(jù)庫(kù)中存儲(chǔ)的信息還可以包括:程序安全測(cè)試的測(cè)試結(jié)果信息。測(cè)試結(jié)果信息主要用于形成被測(cè)程序的測(cè)試報(bào)告等。
[0092]在某個(gè)被測(cè)程序未進(jìn)行過(guò)安全測(cè)試(初始狀態(tài))的情況下,數(shù)據(jù)庫(kù)中該被測(cè)程序?qū)?yīng)的歷史加載記錄信息中的啟動(dòng)加載模塊的進(jìn)程信息、啟動(dòng)加載模塊的啟動(dòng)參數(shù)以及加載列表通常為空;而隨著對(duì)測(cè)試對(duì)象為該被測(cè)程序中的各個(gè)可執(zhí)行文件的安全測(cè)試,數(shù)據(jù)庫(kù)中的歷史加載記錄信息中的啟動(dòng)加載模塊的進(jìn)程信息、啟動(dòng)加載模塊的啟動(dòng)參數(shù)以及加載列表均會(huì)被不斷的充實(shí)完善,這樣,在測(cè)試對(duì)象為該被測(cè)程序中的加載模塊進(jìn)行安全測(cè)試時(shí),白利用劫持服務(wù)器可以從數(shù)據(jù)庫(kù)中查找到對(duì)應(yīng)的啟動(dòng)加載模塊的進(jìn)程信息、啟動(dòng)加載模塊的啟動(dòng)參數(shù)以及加載列表等信息。
[0093](五)、用例執(zhí)行平臺(tái)
[0094]用例執(zhí)行平臺(tái)主要用于對(duì)各分布式虛擬機(jī)的資源進(jìn)行管理,并對(duì)白利用劫持服務(wù)器傳輸來(lái)的用例進(jìn)行分發(fā)調(diào)度,如用例執(zhí)行平臺(tái)根據(jù)其接收到的用例屬性信息將其接收到的用例分配給相應(yīng)的分布式虛擬機(jī),以便于由該分布式虛擬機(jī)執(zhí)行該用例。
[0095]用例執(zhí)行平臺(tái)對(duì)用例進(jìn)行分發(fā)調(diào)度的原則可以包括:根據(jù)用例屬性中的用例運(yùn)行的系統(tǒng)平臺(tái)信息來(lái)分配相應(yīng)的虛擬機(jī);該分發(fā)調(diào)度的原則也可以包括:針對(duì)同時(shí)提交的多個(gè)用例而言,根據(jù)用例屬性中的測(cè)試優(yōu)先級(jí)來(lái)為用例分配相應(yīng)的虛擬機(jī),且具有可復(fù)用的快照的虛擬機(jī)可以分配給測(cè)試優(yōu)先級(jí)高的用例;另外,該分發(fā)調(diào)度的原則還可以包括:針對(duì)先后提交的多個(gè)用例而言,具有不同測(cè)試優(yōu)先級(jí)的用例可以優(yōu)先為測(cè)試優(yōu)先級(jí)高的用例分配虛擬機(jī)。用例執(zhí)行平臺(tái)對(duì)用例進(jìn)行分發(fā)調(diào)度的原則可以根據(jù)實(shí)際需求來(lái)設(shè)置,本實(shí)施例不限制該原則的具體表現(xiàn)形式。
[0096](六)、分布式虛擬機(jī)
[0097]本實(shí)施例中的分布式虛擬機(jī)也可以稱為執(zhí)行測(cè)試腳本模塊。分布式虛擬機(jī)主要用于執(zhí)行用例,并獲取用例執(zhí)行結(jié)果信息。
[0098]分布式虛擬機(jī)所執(zhí)行的操作主要包括如下:
[0099]1、用例執(zhí)行環(huán)境的準(zhǔn)備,如針對(duì)用例的安裝包執(zhí)行用例的安裝操作等;具體的,分布式虛擬機(jī)從用例屬性信息中獲取用例的安裝包存儲(chǔ)地址(如URL1),并根據(jù)該存儲(chǔ)地址(如URL1)下載用例的安裝包,然后,分布式虛擬機(jī)執(zhí)行用例的安裝包中的安裝腳本代碼,從而安裝腳本代碼執(zhí)行用例的安裝包的安裝操作。
[0100]2、執(zhí)行一期用例,并在一期用例執(zhí)行過(guò)程中獲取所有的加載列表;具體的,分布式虛擬機(jī)可以從一期用例屬性中獲取用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址(如URL2),并根據(jù)URL2下載用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包;分布式虛擬機(jī)根據(jù)以前用例屬性中的測(cè)試方式來(lái)設(shè)置微軟的process monitor工具中的過(guò)濾器,之后,分布式虛擬機(jī)執(zhí)行用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包中的腳本代碼,并通過(guò)利用設(shè)置了過(guò)濾器的process monitor工具可以成功獲取加載列表。
[0101]3、根據(jù)其獲取到的加載列表分析出啟動(dòng)加載模塊的進(jìn)程信息和啟動(dòng)加載模塊的啟動(dòng)參數(shù)信息。
[0102]4、執(zhí)行二期用例,并在二期用例執(zhí)行過(guò)程中獲取所有的與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息;具體的,分布式虛擬機(jī)可以根據(jù)二期用例屬性中的測(cè)試方式來(lái)設(shè)置微軟的process monitor工具中的過(guò)濾器,之后,分布式虛擬機(jī)通過(guò)利用設(shè)置了過(guò)濾器的process monitor工具可以成功獲取所有與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息;之后,分布式虛擬機(jī)可以根據(jù)其獲取到的執(zhí)行過(guò)程信息進(jìn)行測(cè)試結(jié)果的判斷;例如,判斷預(yù)置的惡意加載模塊的路徑是否存在于獲取到的加載列表中,如果存在于加載列表中,則可以得知被測(cè)程序試圖加載該惡意加載模塊,由此可以判斷出測(cè)試對(duì)象存在安全隱患,應(yīng)向測(cè)試人員發(fā)出相應(yīng)的警示信息;再例如,判斷執(zhí)行過(guò)程信息中是否存在預(yù)定寫標(biāo)記,該預(yù)定寫標(biāo)記是由預(yù)置的惡意加載模塊寫下的,如果存在預(yù)定寫標(biāo)記,則可以得知該預(yù)置的惡意加載模塊成功被測(cè)試對(duì)象所加載,由此可以判斷出測(cè)試對(duì)象存在安全漏洞,即測(cè)試未通過(guò)。
[0103]5、將一期用例的執(zhí)行結(jié)果(如加載列表、啟動(dòng)加載模塊的進(jìn)程信息和啟動(dòng)加載模塊的啟動(dòng)參數(shù)信息等)以及二期用例的執(zhí)行結(jié)果(如加載列表以及上述判斷測(cè)試結(jié)果信息等)通過(guò)用例執(zhí)行平臺(tái)返回給白利用劫持服務(wù)器。
[0104]實(shí)施例三、程序安全測(cè)試裝置。下面結(jié)合圖3對(duì)本實(shí)施例的程序安全測(cè)試裝置進(jìn)行說(shuō)明。
[0105]圖3示出的裝置主要用于對(duì)被測(cè)程序中是否存在加載模塊的白文件利用這一安全漏洞以及加載模塊劫持這一安全漏洞中的至少其中之一進(jìn)行安全測(cè)試;且該裝置主要包括:第一獲取模塊300、第二獲取模塊310、用例生成模塊320、安裝運(yùn)行模塊330、第三獲取模塊340以及安全判斷模塊350。
[0106]第一獲取模塊300主要適于獲取被測(cè)程序的測(cè)試任務(wù)信息;其中的被測(cè)程序的測(cè)試任務(wù)信息主要用于描述本次程序安全測(cè)試的具體內(nèi)容;該測(cè)試任務(wù)信息主要包括:被測(cè)程序的標(biāo)識(shí)信息、測(cè)試對(duì)象的標(biāo)識(shí)信息、測(cè)試對(duì)象的種類、測(cè)試方式、測(cè)試對(duì)象的打開方式、測(cè)試對(duì)象的運(yùn)行參數(shù)以及被測(cè)程序的系統(tǒng)平臺(tái)等信息。另外,上述測(cè)試任務(wù)信息還可以包括:測(cè)試對(duì)象的測(cè)試優(yōu)先級(jí)、用例的安裝包存儲(chǔ)地址、用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址以及用例運(yùn)行結(jié)果發(fā)送地址等。
[0107]第一獲取模塊300獲取被測(cè)程序的測(cè)試任務(wù)信息的方式可以有多種,例如,第一獲取模塊300向用戶提供測(cè)試任務(wù)設(shè)置畫面,用戶可以在該畫面中輸入相應(yīng)信息和/或者選擇相應(yīng)的選項(xiàng),在用戶點(diǎn)擊測(cè)試任務(wù)設(shè)置畫面中的“提交測(cè)試任務(wù)”按鈕等方式來(lái)提交測(cè)試任務(wù)時(shí),第一獲取模塊300成功獲取到被測(cè)程序的測(cè)試任務(wù)信息;再例如,第一獲取模塊300通過(guò)文件傳輸或者消息傳輸?shù)确绞将@取被測(cè)程序的測(cè)試任務(wù)信息。
[0108]第一獲取模塊300在獲取到測(cè)試任務(wù)信息后,可以對(duì)其進(jìn)行分門別類的整理,從而形成測(cè)試程序列表、測(cè)試方式列表、參數(shù)列表以及被測(cè)程序的系統(tǒng)平臺(tái)列表等,以方便后續(xù)的安全測(cè)試操作。
[0109]第一獲取模塊300可以設(shè)置于實(shí)施例二的白利用劫持服務(wù)器中。
[0110]第二獲取模塊310主要適于獲取被測(cè)程序中的加載模塊的歷史加載記錄信息;其中的歷史加載記錄信息包括:啟動(dòng)加載模塊的進(jìn)程信息、啟動(dòng)加載模塊的啟動(dòng)參數(shù)以及進(jìn)程在啟動(dòng)加載模塊后加載模塊的加載列表等。上述啟動(dòng)加載模塊的進(jìn)程信息是指被測(cè)程序中啟動(dòng)某個(gè)加載模塊的一個(gè)或者多個(gè)進(jìn)程;上述啟動(dòng)加載模塊的啟動(dòng)參數(shù)是指被測(cè)程序中啟動(dòng)某個(gè)加載模塊的一個(gè)或者多個(gè)進(jìn)程在啟動(dòng)該加載模塊時(shí)所使用的參數(shù);上述加載模塊的加載列表是指由被測(cè)程序在加載各個(gè)加載模塊時(shí)所使用的全路徑信息所組成的列表。
[0111]第二獲取模塊310獲取被測(cè)程序中的加載模塊的歷史加載記錄信息的方式主要包括兩種:方式一、通過(guò)數(shù)據(jù)庫(kù)查詢獲得;方式二、通過(guò)前期用例運(yùn)行獲得。方式一主要針對(duì)測(cè)試任務(wù)信息中的測(cè)試對(duì)象為被測(cè)程序中的可執(zhí)行文件的情況。方式二主要針對(duì)測(cè)試任務(wù)信息中的測(cè)試對(duì)象為被測(cè)程序中的加載模塊的情況。這兩種方式的具體實(shí)現(xiàn)過(guò)程、方式二中的前期用例和前期用例屬性信息的生成過(guò)程、前期用例屬性信息所包含的具體信息以及前期用例的安裝運(yùn)行過(guò)程等等內(nèi)容如上述方法實(shí)施例中的描述,在此不再重復(fù)說(shuō)明。
[0112]另外,上述方式二中生成前期用例和前期用例屬性、安裝并運(yùn)行前期用例以及獲取前期用例運(yùn)行過(guò)程中針對(duì)加載模塊的加載記錄信息等操作可以由用例生成模塊320、安裝運(yùn)行模塊330以及第三獲取模塊340分別執(zhí)行,第二獲取模塊310可以通過(guò)接收第三獲取模塊340傳輸來(lái)的記載記錄信息來(lái)獲取歷史加載記錄信息。
[0113]第二獲取模塊310可以設(shè)置于實(shí)施例二的白利用劫持服務(wù)器中。
[0114]用例生成模塊320主要適于在測(cè)試任務(wù)信息的基礎(chǔ)上,針對(duì)每一條歷史加載記錄信息分別生成用例以及用例屬性信息;這里的用例可稱為二期用例,這里的用例屬性信息可以稱為二期用例屬性信息。
[0115]二期用例屬性信息是安裝運(yùn)行二期用例所需的信息,也可以稱為二期用例安裝運(yùn)行所需的信息或者與二期用例安裝運(yùn)行相關(guān)的信息。
[0116]用例生成模塊320生成的二期用例屬性信息至少應(yīng)包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息,且生成的二期用例屬性信息通常還包括:二期用例的安裝包存儲(chǔ)地址、二期用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址、二期用例運(yùn)行的系統(tǒng)平臺(tái)信息、二期用例重試次數(shù)以及二期用例運(yùn)行參數(shù)等;另外,該二期用例屬性信息還可以包括:二期用例的測(cè)試優(yōu)先級(jí)以及二期用例運(yùn)行結(jié)果發(fā)送地址等。二期用例以及二期用例屬性信息的形成具體請(qǐng)參見上述實(shí)施例一中的描述,在此不再詳細(xì)說(shuō)明。
[0117]另外,用例生成模塊320也需要執(zhí)行生成一期用例和一期用例屬性信息的操作,且二期用例屬性信息與一期用例屬性信息基本相同,只是在一期用例屬性信息的基礎(chǔ)上增加了加載模塊的全路徑信息。
[0118]用例生成模塊320可以設(shè)置于實(shí)施例二的白利用劫持服務(wù)器中。
[0119]安裝運(yùn)行模塊330主要適于根據(jù)用例屬性信息安裝運(yùn)行用例,且用例基于所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作。這里的用例可稱為二期用例,這里的用例屬性信息可以稱為二期用例屬性信息。
[0120]安裝運(yùn)行模塊330安裝運(yùn)行用例的過(guò)程可以為:安裝運(yùn)行模塊330從二期用例屬性信息中獲取二期用例的安裝包存儲(chǔ)地址,并根據(jù)該存儲(chǔ)地址獲取二期用例的安裝包,安裝運(yùn)行模塊330運(yùn)行用例的安裝包中的安裝腳本代碼,從而安裝腳本代碼運(yùn)行用例的安裝包中的安裝文件,以安裝二期用例;安裝運(yùn)行模塊330從二期用例屬性中獲取用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址,安裝運(yùn)行模塊330根據(jù)該存儲(chǔ)地址獲取用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包,安裝運(yùn)行模塊330執(zhí)行用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包中的腳本代碼,腳本代碼的執(zhí)行會(huì)將預(yù)置的惡意加載模塊放置于相應(yīng)的路徑中,并使用例基于所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作。
[0121]另外,安裝運(yùn)行模塊330也需要執(zhí)行生成一期用例的安裝以及運(yùn)行的操作,且安裝運(yùn)行模塊330在用例的安裝運(yùn)行過(guò)程中可以考慮用例的測(cè)試優(yōu)先級(jí)。安裝運(yùn)行模塊330可以設(shè)置于實(shí)施例二的用例執(zhí)行平臺(tái)以及分布式虛擬機(jī)中。
[0122]第三獲取模塊340主要適于獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息。這里的用例可稱為二期用例。第三獲取模塊340可以利用現(xiàn)有的工具來(lái)獲取二期用例運(yùn)行過(guò)程中的執(zhí)行過(guò)程信息,例如,第三獲取模塊340可以利用微軟公司的進(jìn)程監(jiān)控工具(process monitor)來(lái)獲取二期用例在運(yùn)行過(guò)程中的執(zhí)行過(guò)程信息,該執(zhí)行過(guò)程信息包括:對(duì)加載模塊的加載記錄信息。
[0123]由于本實(shí)施例中的預(yù)置的惡意加載模塊在被執(zhí)行過(guò)程中會(huì)寫下預(yù)定標(biāo)記,因此,帶有預(yù)定標(biāo)記的執(zhí)行過(guò)程信息即為與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息。另外,如果執(zhí)行過(guò)程信息中存在預(yù)置的惡意加載模塊的加載記錄信息,則該加載記錄信息也為與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息。
[0124]另外,第三獲取模塊340也需要執(zhí)行獲取一期用例運(yùn)行過(guò)程中的加載記錄信息的操作。第三獲取模塊340可以設(shè)置于實(shí)施例二的分布式虛擬機(jī)中。
[0125]安全判斷模塊350主要適于根據(jù)上述執(zhí)行過(guò)程信息判斷被測(cè)程序是否存在安全漏洞,并輸出判斷結(jié)果信息。
[0126]具體的,安全判斷模塊350可以通過(guò)判斷與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息來(lái)確定出被測(cè)程序是否存在安全漏洞;例如,安全判斷模塊350根據(jù)預(yù)置的惡意模塊寫下的預(yù)定標(biāo)記可以判斷出被測(cè)程序存在較嚴(yán)重的安全問(wèn)題;再例如,根據(jù)預(yù)置的惡意加載模塊的加載記錄信息可以判斷出被測(cè)程序存在安全隱患。
[0127]進(jìn)一步的,安全判斷模塊350還可以判斷出被測(cè)程序存在安全問(wèn)題以及安全隱患的具體位置,例如,安全判斷模塊350可以判斷出帶有預(yù)定標(biāo)記的執(zhí)行過(guò)程信息是哪個(gè)用例在運(yùn)行過(guò)程中出現(xiàn)的,而根據(jù)該用例即可判斷出被測(cè)程序存在安全問(wèn)題以及安全隱患的具體位置。
[0128]安全判斷模塊350可以設(shè)置于實(shí)施例二的分布式虛擬機(jī)中。
[0129]另外,本實(shí)施例的裝置還可以包括測(cè)試報(bào)告模塊(圖3中未示出),測(cè)試報(bào)告模塊可以在測(cè)試任務(wù)信息以及執(zhí)行過(guò)程信息等內(nèi)容的基礎(chǔ)上制作程序測(cè)試結(jié)果報(bào)告,并將程序測(cè)試結(jié)果報(bào)告發(fā)送到預(yù)定地址。測(cè)試報(bào)告模塊可以設(shè)置于實(shí)施例二的白利用劫持服務(wù)器中。
[0130]Al、一種程序安全測(cè)試方法,包括:
[0131]獲取被測(cè)程序的測(cè)試任務(wù)信息,并獲取被測(cè)程序中的加載模塊的歷史加載記錄信息;
[0132]在所述測(cè)試任務(wù)信息的基礎(chǔ)上,針對(duì)每一條歷史加載記錄信息分別生成用例以及用例屬性信息,所述用例屬性信息是安裝運(yùn)行用例所需的信息,且所述用例屬性信息包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息;
[0133]根據(jù)所述用例屬性信息安裝運(yùn)行用例,且所述用例基于所述所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作;
[0134]獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息;
[0135]根據(jù)所述執(zhí)行過(guò)程信息判斷所述被測(cè)程序是否存在安全漏洞,并輸出判斷結(jié)果信肩、O
[0136]A2、如Al所述的方法,其中,所述測(cè)試任務(wù)信息包括:被測(cè)程序的標(biāo)識(shí)信息、測(cè)試對(duì)象的標(biāo)識(shí)信息、測(cè)試對(duì)象的種類、測(cè)試方式、測(cè)試對(duì)象的打開方式、測(cè)試對(duì)象的運(yùn)行參數(shù)以及被測(cè)程序的系統(tǒng)平臺(tái)等信息。
[0137]A3、如Al所述的方法,其中,所述獲取被測(cè)程序中的加載模塊的歷史加載記錄信息包括:
[0138]在所述測(cè)試任務(wù)信息中的測(cè)試對(duì)象為加載模塊的情況下,通過(guò)從數(shù)據(jù)庫(kù)中查詢的方式獲得測(cè)試對(duì)象的歷史加載記錄信息。
[0139]A4、如Al所述的方法,其中,所述獲取被測(cè)程序中的加載模塊的歷史加載記錄信息包括:
[0140]在所述測(cè)試任務(wù)信息中的測(cè)試對(duì)象為可執(zhí)行文件的情況下,根據(jù)所述測(cè)試任務(wù)信息生成前期用例以及前期用例屬性信息,所述前期用例屬性信息是安裝運(yùn)行前期用例所需的信息;
[0141]根據(jù)所述前期用例屬性信息運(yùn)行前期用例;
[0142]獲取前期用例運(yùn)行過(guò)程中針對(duì)加載模塊的加載記錄信息,并將其作為歷史加載記錄信息存儲(chǔ)于數(shù)據(jù)庫(kù)中。
[0143]A5、如Al至A4中任一所述的方法,其中,一條歷史加載記錄信息包括:啟動(dòng)加載模塊的進(jìn)程信息、啟動(dòng)加載模塊的啟動(dòng)參數(shù)以及進(jìn)程在啟動(dòng)加載模塊后加載模塊的加載列表,且所述加載列表包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息。
[0144]A6、如Al所述的方法,其中,所述用例屬性信息還包括:用例的安裝包存儲(chǔ)地址、用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址、用例運(yùn)行的系統(tǒng)平臺(tái)信息、用例重試次數(shù)以及用例運(yùn)行參數(shù)。
[0145]A7、如A6所述的方法,其中,所述根據(jù)所述用例屬性信息安裝運(yùn)行用例包括:
[0146]根據(jù)用例運(yùn)行的系統(tǒng)平臺(tái)信息為用例設(shè)置系統(tǒng)環(huán)境;
[0147]根據(jù)所述用例的安裝包存儲(chǔ)地址獲取用例的安裝包,并運(yùn)行用例的安裝包中的安裝腳本代碼,安裝腳本代碼通過(guò)執(zhí)行安裝包中的用例的安裝文件以安裝用例;
[0148]根據(jù)所述用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址獲取腳本代碼包,所述腳本代碼包中的腳本代碼在用例重試次數(shù)以及用例運(yùn)行參數(shù)的基礎(chǔ)上運(yùn)行用例。
[0149]AS、如Al所述的方法,其中,所述獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息包括:
[0150]利用進(jìn)程監(jiān)控工具獲取用例運(yùn)行過(guò)程中的執(zhí)行過(guò)程信息,并從所述用例運(yùn)行過(guò)程中的執(zhí)行過(guò)程信息中篩選出與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息。
[0151]A9、如Al所述的方法,其中,所述與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息包括:用例在運(yùn)行過(guò)程中針對(duì)預(yù)置的惡意加載模塊的加載記錄信息和/或預(yù)置的惡意加載模塊的執(zhí)行標(biāo)記信息。
[0152]B10、一種程序安全測(cè)試裝置,包括:
[0153]第一獲取模塊,適于獲取被測(cè)程序的測(cè)試任務(wù)信息;
[0154]第二獲取模塊,適于獲取被測(cè)程序中的加載模塊的歷史加載記錄信息;
[0155]用例生成模塊,適于在所述測(cè)試任務(wù)信息的基礎(chǔ)上,針對(duì)每一條歷史加載記錄信息分別生成用例以及用例屬性信息,所述用例屬性信息是安裝運(yùn)行用例所需的信息,且所述用例屬性信息包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息;
[0156]安裝運(yùn)行模塊,適于根據(jù)所述用例屬性信息安裝運(yùn)行用例,且所述用例基于所述所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作;
[0157]第三獲取模塊,適于獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程?目息;
[0158]安全判斷模塊,適于根據(jù)所述執(zhí)行過(guò)程信息判斷所述被測(cè)程序是否存在安全漏洞,并輸出判斷結(jié)果信息。
[0159]B11、如BlO所述的裝置,其中,所述測(cè)試任務(wù)信息包括:被測(cè)程序的標(biāo)識(shí)信息、測(cè)試對(duì)象的標(biāo)識(shí)信息、測(cè)試對(duì)象的種類、測(cè)試方式、測(cè)試對(duì)象的打開方式、測(cè)試對(duì)象的運(yùn)行參數(shù)以及被測(cè)程序的系統(tǒng)平臺(tái)等信息。
[0160]B12、如BlO所述的裝置,其中,所述第二獲取模塊還適于:
[0161]在所述測(cè)試任務(wù)信息中的測(cè)試對(duì)象為加載模塊的情況下,通過(guò)從數(shù)據(jù)庫(kù)中查詢的方式獲得測(cè)試對(duì)象的歷史加載記錄信息。
[0162]B13、如BlO所述的裝置,其中,所述第二獲取模塊還適于:
[0163]在所述測(cè)試任務(wù)信息中的測(cè)試對(duì)象為可執(zhí)行文件的情況下,根據(jù)所述測(cè)試任務(wù)信息生成前期用例以及前期用例屬性信息,所述前期用例屬性信息是安裝運(yùn)行前期用例所需的信息;
[0164]根據(jù)所述前期用例屬性信息運(yùn)行前期用例;
[0165]獲取前期用例運(yùn)行過(guò)程中針對(duì)加載模塊的加載記錄信息,并將其作為歷史加載記錄信息存儲(chǔ)于數(shù)據(jù)庫(kù)中。
[0166]B14、如BlO至B13中任一所述的裝置,其中,一條歷史加載記錄信息包括:啟動(dòng)加載模塊的進(jìn)程信息、啟動(dòng)加載模塊的啟動(dòng)參數(shù)以及進(jìn)程在啟動(dòng)加載模塊后加載模塊的加載列表,且所述加載列表包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息。
[0167]B15、如BlO所述的裝置,其中,所述用例屬性信息還包括:用例的安裝包存儲(chǔ)地址、用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址、用例運(yùn)行的系統(tǒng)平臺(tái)信息、用例重試次數(shù)以及用例運(yùn)行參數(shù)。
[0168]B16^n B15所述的裝置,其中,所述安裝運(yùn)行模塊還適于:
[0169]根據(jù)用例運(yùn)行的系統(tǒng)平臺(tái)信息為用例設(shè)置系統(tǒng)環(huán)境;
[0170]根據(jù)所述用例的安裝包存儲(chǔ)地址獲取用例的安裝包,并運(yùn)行用例的安裝包中的安裝腳本代碼,安裝腳本代碼通過(guò)執(zhí)行安裝包中的用例的安裝文件以安裝用例;
[0171]根據(jù)所述用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址獲取腳本代碼包,所述腳本代碼包中的腳本代碼在用例重試次數(shù)以及用例運(yùn)行參數(shù)的基礎(chǔ)上運(yùn)行用例。
[0172]B17、如BlO所述的裝置,其中,所述第三獲取模塊還適于:
[0173]利用進(jìn)程監(jiān)控工具獲取用例運(yùn)行過(guò)程中的執(zhí)行過(guò)程信息,并從所述用例運(yùn)行過(guò)程中的執(zhí)行過(guò)程信息中篩選出與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息。
[0174]B18、如BlO所述的裝置,其中,所述與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息包括:用例在運(yùn)行過(guò)程中針對(duì)預(yù)置的惡意加載模塊的加載記錄信息和/或預(yù)置的惡意加載模塊的執(zhí)行標(biāo)記信息。
[0175]在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
[0176]在此處所提供的說(shuō)明書中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書的理解。
[0177]類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循【具體實(shí)施方式】的權(quán)利要求書由此明確地并入該【具體實(shí)施方式】,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
[0178]本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過(guò)程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。
[0179]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。
[0180]本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的程序安全測(cè)試裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(如計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
[0181]應(yīng)該注意的是,上述實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
【權(quán)利要求】
1.一種程序安全測(cè)試方法,包括: 獲取被測(cè)程序的測(cè)試任務(wù)信息,并獲取被測(cè)程序中的加載模塊的歷史加載記錄信息; 在所述測(cè)試任務(wù)信息的基礎(chǔ)上,針對(duì)每一條歷史加載記錄信息分別生成用例以及用例屬性信息,所述用例屬性信息是安裝運(yùn)行用例所需的信息,且所述用例屬性信息包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息; 根據(jù)所述用例屬性信息安裝運(yùn)行用例,且所述用例基于所述所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作; 獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息; 根據(jù)所述執(zhí)行過(guò)程信息判斷所述被測(cè)程序是否存在安全漏洞,并輸出判斷結(jié)果信息。
2.如權(quán)利要求1所述的方法,其中,所述測(cè)試任務(wù)信息包括:被測(cè)程序的標(biāo)識(shí)信息、測(cè)試對(duì)象的標(biāo)識(shí)信息、測(cè)試對(duì)象的種類、測(cè)試方式、測(cè)試對(duì)象的打開方式、測(cè)試對(duì)象的運(yùn)行參數(shù)以及被測(cè)程序的系統(tǒng)平臺(tái)等信息。
3.如權(quán)利要求1所述的方法,其中,所述獲取被測(cè)程序中的加載模塊的歷史加載記錄信息包括: 在所述測(cè)試任務(wù)信息中的測(cè)試對(duì)象為加載模塊的情況下,通過(guò)從數(shù)據(jù)庫(kù)中查詢的方式獲得測(cè)試對(duì)象的歷史加載記錄信息。
4.如權(quán)利要求1所述的方法,其中,所述獲取被測(cè)程序中的加載模塊的歷史加載記錄信息包括: 在所述測(cè)試任務(wù)信息中的測(cè)試對(duì)象為可執(zhí)行文件的情況下,根據(jù)所述測(cè)試任務(wù)信息生成前期用例以及前期用例屬性信息,所述前期用例屬性信息是安裝運(yùn)行前期用例所需的信息; 根據(jù)所述前期用例屬性信息運(yùn)行前期用例; 獲取前期用例運(yùn)行過(guò)程中針對(duì)加載模塊的加載記錄信息,并將其作為歷史加載記錄信息存儲(chǔ)于數(shù)據(jù)庫(kù)中。
5.如權(quán)利要求1至4中任一權(quán)利要求所述的方法,其中,一條歷史加載記錄信息包括:啟動(dòng)加載模塊的進(jìn)程信息、啟動(dòng)加載模塊的啟動(dòng)參數(shù)以及進(jìn)程在啟動(dòng)加載模塊后加載模塊的加載列表,且所述加載列表包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息。
6.如權(quán)利要求1所述的方法,其中,所述用例屬性信息還包括:用例的安裝包存儲(chǔ)地址、用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址、用例運(yùn)行的系統(tǒng)平臺(tái)信息、用例重試次數(shù)以及用例運(yùn)行參數(shù)。
7.如權(quán)利要求6所述的方法,其中,所述根據(jù)所述用例屬性信息安裝運(yùn)行用例包括: 根據(jù)用例運(yùn)行的系統(tǒng)平臺(tái)信息為用例設(shè)置系統(tǒng)環(huán)境; 根據(jù)所述用例的安裝包存儲(chǔ)地址獲取用例的安裝包,并運(yùn)行用例的安裝包中的安裝腳本代碼,安裝腳本代碼通過(guò)執(zhí)行安裝包中的用例的安裝文件以安裝用例; 根據(jù)所述用例的自動(dòng)執(zhí)行程序測(cè)試的腳本代碼包存儲(chǔ)地址獲取腳本代碼包,所述腳本代碼包中的腳本代碼在用例重試次數(shù)以及用例運(yùn)行參數(shù)的基礎(chǔ)上運(yùn)行用例。
8.如權(quán)利要求1所述的方法,其中,所述獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息包括: 利用進(jìn)程監(jiān)控工具獲取用例運(yùn)行過(guò)程中的執(zhí)行過(guò)程信息,并從所述用例運(yùn)行過(guò)程中的執(zhí)行過(guò)程信息中篩選出與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息。
9.如權(quán)利要求1所述的方法,其中,所述與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息包括:用例在運(yùn)行過(guò)程中針對(duì)預(yù)置的惡意加載模塊的加載記錄信息和/或預(yù)置的惡意加載模塊的執(zhí)行標(biāo)記信息。
10.一種程序安全測(cè)試裝置,包括: 第一獲取模塊,適于獲取被測(cè)程序的測(cè)試任務(wù)信息; 第二獲取模塊,適于獲取被測(cè)程序中的加載模塊的歷史加載記錄信息; 用例生成模塊,適于在所述測(cè)試任務(wù)信息的基礎(chǔ)上,針對(duì)每一條歷史加載記錄信息分別生成用例以及用例屬性信息,所述用例屬性信息是安裝運(yùn)行用例所需的信息,且所述用例屬性信息包括:加載模塊被加載時(shí)的所有嘗試加載路徑信息; 安裝運(yùn)行模塊,適于根據(jù)所述用例屬性信息安裝運(yùn)行用例,且所述用例基于所述所有嘗試加載路徑信息執(zhí)行加載模塊的加載操作; 第三獲取模塊,適于獲取用例在運(yùn)行過(guò)程中與預(yù)置的惡意加載模塊相關(guān)的執(zhí)行過(guò)程信息; 安全判斷模塊,適于根據(jù)所述執(zhí)行過(guò)程信息判斷所述被測(cè)程序是否存在安全漏洞,并輸出判斷結(jié)果信息。
【文檔編號(hào)】G06F11/36GK104199774SQ201410453672
【公開日】2014年12月10日 申請(qǐng)日期:2014年9月5日 優(yōu)先權(quán)日:2014年9月5日
【發(fā)明者】李文林, 張一武, 張 杰 申請(qǐng)人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司