本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域以及信息安全技術(shù)領(lǐng)域,尤其涉及一種引擎漏洞檢測(cè)的方法以及檢測(cè)裝置。
背景技術(shù):
如今,隨著信息技術(shù)的不斷發(fā)展,應(yīng)用程序也日益普及化。為了豐富人們的日常生活,開(kāi)發(fā)人員開(kāi)發(fā)了多種多樣的應(yīng)用程序,例如社交類(lèi)應(yīng)用、游戲類(lèi)應(yīng)用、電商類(lèi)應(yīng)用、搜索類(lèi)應(yīng)用以及論壇類(lèi)應(yīng)用等。然而,在開(kāi)發(fā)應(yīng)用程序的過(guò)程中應(yīng)用程序編程接口(英文全稱(chēng):Application Programming Interface,英文縮寫(xiě):API)可能會(huì)出現(xiàn)漏洞,從而導(dǎo)致該應(yīng)用程序在運(yùn)行過(guò)程中發(fā)生宕機(jī)的情況。
為了降低應(yīng)用程序在運(yùn)行過(guò)程中出現(xiàn)宕機(jī)的頻率,目前可以采用一種手段對(duì)API是否存在漏洞進(jìn)行檢測(cè)。
具體如圖1所示,圖1為現(xiàn)有技術(shù)中檢測(cè)應(yīng)用程序編程接口漏洞的流程示意圖。步驟101中開(kāi)發(fā)人員需要先熟悉應(yīng)用程序核心功能和架構(gòu),然后設(shè)計(jì)可能存在性能問(wèn)題的場(chǎng)景。步驟102中,開(kāi)發(fā)人員可以為開(kāi)發(fā)引擎中的每條API編寫(xiě)接口測(cè)試用例,使得在步驟103中能夠采用每條接口測(cè)試用例對(duì)相應(yīng)的每個(gè)API進(jìn)行接口測(cè)試。由于修改開(kāi)發(fā)引擎底層API風(fēng)險(xiǎn)較高,且不利于更新和維護(hù)引擎代碼,一般需要通過(guò)步驟104來(lái)調(diào)用接口的上層邏輯代碼。最后,在步驟105中,將輸出步驟104中定位得到的高危API代碼行,開(kāi)發(fā)人員可以根據(jù)輸出的高危API代碼行進(jìn)行及時(shí)修復(fù)。
然而,由于開(kāi)發(fā)引擎的API有很多,且存在較多的開(kāi)發(fā)引擎版本,每個(gè)版本的API又存在著一定的差異,因此需要為每個(gè)開(kāi)發(fā)版本編寫(xiě)大量的測(cè)試用例,從而耗費(fèi)巨大的API漏洞檢測(cè)成本。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種引擎漏洞檢測(cè)的方法以及檢測(cè)裝置,可以不用為每個(gè)應(yīng)用開(kāi)發(fā)引擎編寫(xiě)測(cè)試用例,而是根據(jù)應(yīng)用開(kāi)發(fā)引擎中存在安全漏洞的API信息建立起API經(jīng)驗(yàn)庫(kù),通過(guò)該API經(jīng)驗(yàn)庫(kù)掃描出待檢測(cè)應(yīng)用程序中存在的API漏洞,從而降低了API漏洞的檢測(cè)成本。
有鑒于此,本發(fā)明第一方面提供一種引擎漏洞檢測(cè)的方法,包括:
獲取待檢測(cè)應(yīng)用程序;
獲取第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),所述第一應(yīng)用開(kāi)發(fā)引擎用于開(kāi)發(fā)所述待檢測(cè)應(yīng)用程序,所述API經(jīng)驗(yàn)庫(kù)中包含至少一項(xiàng)存在安全漏洞的API信息;
提取所述待檢測(cè)應(yīng)用程序的應(yīng)用程序編程接口API;
根據(jù)所述API經(jīng)驗(yàn)庫(kù),判斷所述待檢測(cè)應(yīng)用程序的API是否存在安全漏洞,若是,則從所述待檢測(cè)應(yīng)用程序的API中確定存在安全漏洞的目標(biāo)API。
第二方面,本方面實(shí)施例還提供一種檢測(cè)裝置,包括:
第一獲取模塊,用于獲取待檢測(cè)應(yīng)用程序;
第二獲取模塊,用于獲取第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),所述第一應(yīng)用開(kāi)發(fā)引擎用于開(kāi)發(fā)所述第一獲取模塊獲取的所述待檢測(cè)應(yīng)用程序,所述API經(jīng)驗(yàn)庫(kù)中包含至少一項(xiàng)存在安全漏洞的API信息;
提取模塊,用于提取所述第一獲取模塊獲取的所述待檢測(cè)應(yīng)用程序的應(yīng)用程序編程接口API;
確定模塊,用于根據(jù)所述第二獲取模塊獲取的所述API經(jīng)驗(yàn)庫(kù),判斷所述提取模塊提取的所述待檢測(cè)應(yīng)用程序的API是否存在安全漏洞,若是,則從所述待檢測(cè)應(yīng)用程序的API中確定存在安全漏洞的目標(biāo)API。
從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
本發(fā)明實(shí)施例中,提供了一種檢測(cè)應(yīng)用程序中API漏洞的方法,檢測(cè)裝置先獲取待檢測(cè)應(yīng)用程序以及第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),其中,第一應(yīng)用開(kāi)發(fā)引擎用于開(kāi)發(fā)待檢測(cè)應(yīng)用程序,該API經(jīng)驗(yàn)庫(kù)中包含至少一項(xiàng)存在安全漏洞的API信息,然后檢測(cè)裝置提取待檢測(cè)應(yīng)用程序的API,最后根據(jù)API經(jīng)驗(yàn)庫(kù),判斷待檢測(cè)應(yīng)用程序的API是否存在安全漏洞,若是,則從待檢測(cè)應(yīng)用程序的API中確定存在安全漏洞的目標(biāo)API。采用上述方式,無(wú)需為每個(gè)應(yīng)用開(kāi)發(fā)引擎編寫(xiě)測(cè)試用例,而是根據(jù)安全漏洞的API信息建立起應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),通過(guò)該API經(jīng)驗(yàn)庫(kù)掃描出待檢測(cè)應(yīng)用程序中存在的API漏洞,從而降低了API漏洞的檢測(cè)成本。
附圖說(shuō)明
圖1為現(xiàn)有技術(shù)中檢測(cè)應(yīng)用程序編程接口漏洞的流程示意圖;
圖2為本發(fā)明實(shí)施例中引擎漏洞檢測(cè)的方法一個(gè)實(shí)施例示意圖;
圖3為本發(fā)明實(shí)施例中檢測(cè)應(yīng)用程序中API漏洞的流程示意圖;
圖4為本發(fā)明實(shí)施例中建立API經(jīng)驗(yàn)庫(kù)的流程示意圖;
圖5為本發(fā)明實(shí)施例中實(shí)現(xiàn)應(yīng)用開(kāi)發(fā)引擎檢測(cè)項(xiàng)的流程示意圖;
圖6為應(yīng)用場(chǎng)景中CocosCheck工具檢測(cè)前的界面顯示圖;
圖7為應(yīng)用場(chǎng)景中CocosCheck工具檢測(cè)時(shí)的界面顯示圖;
圖8為應(yīng)用場(chǎng)景中CocosCheck工具檢測(cè)后的界面顯示圖;
圖9為本發(fā)明實(shí)施例中檢測(cè)裝置一個(gè)實(shí)施例示意圖;
圖10為本發(fā)明實(shí)施例中檢測(cè)裝置另一個(gè)實(shí)施例示意圖;
圖11為本發(fā)明實(shí)施例中檢測(cè)裝置另一個(gè)實(shí)施例示意圖;
圖12為本發(fā)明實(shí)施例中檢測(cè)裝置另一個(gè)實(shí)施例示意圖;
圖13為本發(fā)明實(shí)施例中檢測(cè)裝置另一個(gè)實(shí)施例示意圖;
圖14為本發(fā)明實(shí)施例中檢測(cè)裝置另一個(gè)實(shí)施例示意圖;
圖15為本發(fā)明實(shí)施例中檢測(cè)裝置另一個(gè)實(shí)施例示意圖;
圖16為本發(fā)明實(shí)施例中檢測(cè)裝置一個(gè)結(jié)構(gòu)示意圖。
具體實(shí)施方式
本發(fā)明實(shí)施例提供了一種引擎漏洞檢測(cè)的方法以及檢測(cè)裝置,無(wú)需為每個(gè)應(yīng)用開(kāi)發(fā)引擎編寫(xiě)測(cè)試用例,而是根據(jù)應(yīng)用開(kāi)發(fā)引擎中存在安全漏洞的API信息建立起API經(jīng)驗(yàn)庫(kù),通過(guò)該API經(jīng)驗(yàn)庫(kù)掃描出待檢測(cè)應(yīng)用程序中存在的API漏洞,從而降低了API漏洞的檢測(cè)成本。
本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”、“第三”、“第四”等(如果存在)是用于區(qū)別類(lèi)似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例例如能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
應(yīng)理解,本發(fā)明實(shí)施例中的應(yīng)用開(kāi)發(fā)引擎主要是一種基于開(kāi)源軟件許可協(xié)議(英文全稱(chēng):Massachusetts Institute of Technology,英文縮寫(xiě):MIT)的開(kāi)源框架,具體可以為Cocos的開(kāi)源框架。Cocos提供了全套的引擎和開(kāi)發(fā)工具,涵蓋從前期設(shè)計(jì)、資源制作、開(kāi)發(fā)調(diào)試和打包上線全套的解決方案。Cocos用于構(gòu)建游戲、應(yīng)用程序和其他圖形界面交互應(yīng)用,可以重點(diǎn)優(yōu)化工作流,規(guī)范了整個(gè)開(kāi)發(fā)流程,降低溝通成本,提高開(kāi)發(fā)效率。
Cocos的開(kāi)源框架的功能主要有流程控制,流程控制可以非常容易地管理不同場(chǎng)景之間的流程控制。除了流程控制的功能,還具有以下功能,例如:
(1)動(dòng)作(英文全稱(chēng):Sprites)功能,可組合的動(dòng)作如移動(dòng)、旋轉(zhuǎn)和縮放等;
(2)特效(英文全稱(chēng):Effects)功能,包括波浪、旋轉(zhuǎn)和透鏡等;
(3)平面地圖(英文全稱(chēng):Tiled Maps)功能,支持包括矩形和六邊形平面地圖;
(4)轉(zhuǎn)換(英文全稱(chēng):Transitions)功能,從一個(gè)場(chǎng)景移動(dòng)到另外一個(gè)不同風(fēng)格的場(chǎng)景;
(5)菜單(英文全稱(chēng):Menus)功能,創(chuàng)建內(nèi)部菜單;
(6)文本渲染(英文全稱(chēng):Text Rendering)功能,支持標(biāo)簽和超級(jí)文本標(biāo)記語(yǔ)言(英文全稱(chēng):HyperText Markup Language,英文縮寫(xiě):HTML);
(7)文檔(英文全稱(chēng):Documents功能,編程指南、API參考、視頻教學(xué)以及很多教用戶如何使用的簡(jiǎn)單測(cè)試?yán)印?/p>
在實(shí)際應(yīng)用中,Cocos的開(kāi)源框架作為交互式應(yīng)用程序的引擎開(kāi)發(fā)工具,還可能會(huì)包括或者增強(qiáng)更多的功能,此處不一一窮舉。
應(yīng)理解,本發(fā)明實(shí)施例中的待檢測(cè)應(yīng)用程序可以是游戲應(yīng)用,但并不僅限于游戲應(yīng)用,還可以是其他類(lèi)型的應(yīng)用,例如社交類(lèi)應(yīng)用、媒體播放類(lèi)應(yīng)用或者服務(wù)類(lèi)應(yīng)用等,此處不作限定。
而本發(fā)明中的檢測(cè)裝置具體可以是一款針對(duì)Cocos開(kāi)源框架而采用的檢測(cè)工具,該檢測(cè)工具可稱(chēng)為CocosCheck,CocosCheck在終端上顯示為一個(gè)客戶端,通過(guò)CocosCheck的客戶端將待檢測(cè)應(yīng)用程序包含的相關(guān)文件進(jìn)行添加、檢測(cè)以及輸出,以使得用戶開(kāi)發(fā)人員能夠迅速定位待檢測(cè)應(yīng)用程序中出現(xiàn)API漏洞的代碼位置,并且及時(shí)地進(jìn)行修復(fù),以恢復(fù)待檢測(cè)應(yīng)用程序的正常運(yùn)行。
此外,本發(fā)明能夠應(yīng)用于微軟公司開(kāi)發(fā)的視窗操作系統(tǒng)(英文全稱(chēng):Windows Operation System,英文縮寫(xiě):Windows OS),Windows OS采用了圖形用戶界面(英文全稱(chēng):Graphical User Interface,英文縮寫(xiě):GUI)。隨著電腦硬件和軟件的不斷升級(jí),微軟的Windows也在不斷升級(jí),需要說(shuō)明的是,本方案能夠應(yīng)用于視窗操作體驗(yàn)版(英文全稱(chēng):Windows Experience,英文縮寫(xiě):Windows XP)OS、Windows 7OS、Windows 8OS或者Windows 10OS,還可以應(yīng)用于其他類(lèi)型的Windows OS,此處不做限定。
請(qǐng)參閱圖2,本發(fā)明實(shí)施例中引擎漏洞檢測(cè)的方法一個(gè)實(shí)施例包括:
201、獲取待檢測(cè)應(yīng)用程序;
本實(shí)施例中,檢測(cè)裝置獲取待檢測(cè)應(yīng)用程序,其中,該待檢測(cè)應(yīng)用程序是通過(guò)第一應(yīng)用開(kāi)發(fā)引擎開(kāi)發(fā)而成的,第一應(yīng)用開(kāi)發(fā)引擎可以是Cocos的開(kāi)源框架,而檢測(cè)裝置則可以是針對(duì)Cocos開(kāi)源框架設(shè)計(jì)的一個(gè)用于檢測(cè)API漏洞的工具。
202、獲取第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),第一應(yīng)用開(kāi)發(fā)引擎用于開(kāi)發(fā)待檢測(cè)應(yīng)用程序,API經(jīng)驗(yàn)庫(kù)中包含至少一項(xiàng)存在安全漏洞的API信息;
本實(shí)施例中,檢測(cè)裝置進(jìn)而調(diào)用并獲取第一應(yīng)用開(kāi)發(fā)引擎對(duì)應(yīng)的API經(jīng)驗(yàn)庫(kù)。其中,API經(jīng)驗(yàn)庫(kù)中包含了至少一項(xiàng)存在安全漏洞的API信息,存在安全漏洞的API信息即為存在高危險(xiǎn)性的API信息,通過(guò)該API信息可以確定高危險(xiǎn)性API類(lèi)型的提煉規(guī)則。
具體地,例如API信息包括了出現(xiàn)安全漏洞的API名稱(chēng)以及在整段源代碼中出現(xiàn)的位置,高危險(xiǎn)性API類(lèi)型的提煉規(guī)則即為根據(jù)API名稱(chēng)可以定位到該API在整段源代碼中出現(xiàn)的位置。由此,檢測(cè)裝置能夠利用這一提煉規(guī)則找出待檢測(cè)應(yīng)用程序中可能出現(xiàn)API漏洞的代碼位置。
203、提取待檢測(cè)應(yīng)用程序的應(yīng)用程序編程接口API;
本實(shí)施例中,檢測(cè)裝置可以利用關(guān)鍵字提取待檢測(cè)應(yīng)用程序的API。
API是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開(kāi)發(fā)人員基于某軟件或硬件得以訪問(wèn)一組例程的能力,而又無(wú)需訪問(wèn)源代碼或者理解內(nèi)部工作機(jī)制的細(xì)節(jié)。
204、根據(jù)API經(jīng)驗(yàn)庫(kù),判斷待檢測(cè)應(yīng)用程序的API是否存在安全漏洞,若是,則從待檢測(cè)應(yīng)用程序的API中確定存在安全漏洞的目標(biāo)API。
本實(shí)施例中,檢測(cè)裝置在獲取到第一應(yīng)用開(kāi)發(fā)引擎所對(duì)應(yīng)的API經(jīng)驗(yàn)庫(kù)后,判斷待檢測(cè)應(yīng)用程序的API是否存與API經(jīng)驗(yàn)庫(kù)中出現(xiàn)安全漏洞的API信息一致,例如是否具有相同的API名稱(chēng),如果有,那么就認(rèn)為該待檢測(cè)應(yīng)用程序的API中確定存在安全漏洞的目標(biāo)API。
為了便于理解,請(qǐng)參閱圖3,圖3為本發(fā)明實(shí)施例中檢測(cè)應(yīng)用程序中API漏洞的流程示意圖,如圖所示,具體為:
步驟301中,通過(guò)靜態(tài)掃描分析的手段,分析應(yīng)用開(kāi)發(fā)引擎的源代碼,其中,對(duì)于應(yīng)用開(kāi)發(fā)引擎而言通常會(huì)出現(xiàn)多個(gè)版本,當(dāng)前最新的版本即為第一應(yīng)用開(kāi)發(fā)引擎。具體為,挖掘各個(gè)版本Cocos開(kāi)源框架的源代碼,然后找出里頭存在風(fēng)險(xiǎn)的高危險(xiǎn)性API;
步驟302中,通過(guò)步驟301中靜態(tài)掃描分析結(jié)果,按照版本建立Cocos的高危險(xiǎn)性API經(jīng)驗(yàn)庫(kù),可選地,也可以每次將更新版本對(duì)應(yīng)的高危險(xiǎn)性API添加至至API經(jīng)驗(yàn)庫(kù),即不需對(duì)每個(gè)版本的Cocos都建立各自的API經(jīng)驗(yàn)庫(kù),而是不斷地更新API經(jīng)驗(yàn)庫(kù),從而節(jié)省計(jì)算機(jī)存儲(chǔ)資源;
步驟303中,CocosChec工具根據(jù)API經(jīng)驗(yàn)庫(kù)中的高危險(xiǎn)性API類(lèi)型提煉規(guī)則,實(shí)現(xiàn)CocosCheck工具的檢查項(xiàng);
步驟304中,使用CocosCheck工具掃描待檢測(cè)應(yīng)用程序的源代碼;
步驟305中,CocosCheck工具掃描已定位到調(diào)用高危險(xiǎn)性API的代碼行,開(kāi)發(fā)人員直接進(jìn)行修改即可。
本發(fā)明實(shí)施例中,無(wú)需為每個(gè)應(yīng)用開(kāi)發(fā)引擎編寫(xiě)測(cè)試用例,而是根據(jù)安全漏洞的API信息建立起應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),通過(guò)該API經(jīng)驗(yàn)庫(kù)掃描出待檢測(cè)應(yīng)用程序中存在的API漏洞,從而降低了API漏洞的檢測(cè)成本。
可選地,在上述圖2對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的引擎漏洞檢測(cè)的方法第一個(gè)可選實(shí)施例中,獲取第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)之前,還可以包括:
獲取第一應(yīng)用開(kāi)發(fā)引擎的源代碼;
查找第一應(yīng)用開(kāi)發(fā)引擎的源代碼中存在安全漏洞的API;
根據(jù)存在安全漏洞的API,建立API經(jīng)驗(yàn)庫(kù)。
本實(shí)施例中,在檢測(cè)裝置獲取第一應(yīng)用開(kāi)發(fā)燃具的API經(jīng)驗(yàn)庫(kù)之前,已經(jīng)提前建立起了該API經(jīng)驗(yàn)庫(kù)。
具體地,請(qǐng)參閱圖4,圖4為本發(fā)明實(shí)施例中建立API經(jīng)驗(yàn)庫(kù)的流程示意圖,如圖所示,通過(guò)以下流程中的步驟就可以建立起第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)。
步驟401中,先獲取第一應(yīng)用開(kāi)發(fā)引擎,即Cocos的各個(gè)版本源代碼,如果只有一個(gè)版本,獲取該版本的源代碼即可。
步驟402中,然后遍歷第一應(yīng)用開(kāi)發(fā)引擎的各個(gè)版本源代碼,所謂遍歷就是指沿著某條搜索路線,依次對(duì)每個(gè)結(jié)點(diǎn)均做一次且僅做一次訪問(wèn)。
步驟403中,在步驟402中已經(jīng)遍歷了第一應(yīng)用開(kāi)發(fā)引擎的各個(gè)版本源代碼,從中可以找到最新版本對(duì)應(yīng)的源代碼,通過(guò)靜態(tài)代碼分析當(dāng)前版本的源代碼中存在空指針風(fēng)險(xiǎn)的API。
其中,采用靜態(tài)代碼分析不不用運(yùn)行代碼,只是通過(guò)對(duì)代碼的靜態(tài)掃描對(duì)程序進(jìn)行分析,執(zhí)行速度快、效率高。目前成熟的代碼靜態(tài)分析工具每秒可掃描上萬(wàn)行代碼,相對(duì)于動(dòng)態(tài)分析,具有檢測(cè)速度快、效率高的特點(diǎn)。
需要說(shuō)明的是,本方案采用的靜態(tài)代碼分析技術(shù)可以是詞法分析,或者語(yǔ)法分析,或者抽象語(yǔ)法樹(shù)分析,還可以是語(yǔ)義分析、控制流分析或者數(shù)據(jù)流分析,在實(shí)際應(yīng)用中,還可以采用其他類(lèi)型的靜態(tài)代碼分析技術(shù),此處不作限定。
步驟404中,經(jīng)過(guò)步驟403中的靜態(tài)代碼分析后,得到最新版本對(duì)應(yīng)的源代碼中存在高危API風(fēng)險(xiǎn)的API名稱(chēng)和相應(yīng)的參數(shù)位置,并記錄下這些高危API信息。
步驟405中,根據(jù)步驟404記錄的API信息建立起最新版本對(duì)應(yīng)的API經(jīng)驗(yàn)庫(kù)。由于第一應(yīng)用開(kāi)發(fā)引擎Cocos的版本會(huì)不斷更新,因此完成步驟405后還將再次執(zhí)行步驟402,以此保證API經(jīng)驗(yàn)庫(kù)覆蓋所有第一應(yīng)用開(kāi)發(fā)引擎的版本以及對(duì)應(yīng)的API信息。
可選地,靜態(tài)代碼分析還可以進(jìn)一步通過(guò)代碼掃描檢測(cè)不同腳本語(yǔ)言在調(diào)用參數(shù)時(shí)的合法性,如果腳本語(yǔ)言之間互相調(diào)用時(shí)存在參數(shù)不匹配,或者調(diào)用的API不存在時(shí),也可能存在風(fēng)險(xiǎn)。
其次,本發(fā)明實(shí)施例中,還可以通過(guò)對(duì)第一應(yīng)用開(kāi)發(fā)引擎的源代碼查找存在安全漏洞的API,以此建立API經(jīng)驗(yàn)庫(kù),使得該API經(jīng)驗(yàn)庫(kù)中的API信息更加完整,從而提升方案的可行性和實(shí)用性。
可選地,在上述圖2對(duì)應(yīng)的第一個(gè)實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的引擎漏洞檢測(cè)的方法第二個(gè)可選實(shí)施例中,查找第一應(yīng)用開(kāi)發(fā)引擎的源代碼中存在安全漏洞的API,可以包括:
檢測(cè)第一應(yīng)用開(kāi)發(fā)引擎的源代碼中存在空指針的API;
獲取存在空指針的API所對(duì)應(yīng)的API名稱(chēng)和參數(shù)位置。
本實(shí)施例中,檢測(cè)裝置在查找第一應(yīng)用開(kāi)發(fā)引擎Cocos開(kāi)源框架中的源代碼是否存在具有安全漏洞API,一種可行方式為,檢測(cè)源代碼中是否存在空指針的API,如果存在,就獲取存在空指針API的API名稱(chēng)和參數(shù)位置。
其中,空指針一般的文檔中傾向于用NULL表示,對(duì)于指針類(lèi)型來(lái)說(shuō),返回NULL和返回0是等價(jià)的,因?yàn)镹ULL和0都表示“null pointer(空指針)”。
關(guān)于自動(dòng)定位空指針異常的方式,具體可以為,首先結(jié)合程序的靜態(tài)分析技術(shù),利用程序運(yùn)行時(shí)的堆棧信息指導(dǎo)程序切片,然后對(duì)得到的切片進(jìn)行空指針?lè)治黾皠e名分析,得出引發(fā)空指針異常的可疑語(yǔ)句集合,最終給出錯(cuò)誤定位報(bào)告。在實(shí)際應(yīng)用中,可以存在其他方式定位空指針,此處不做限定。
再次,本發(fā)明實(shí)施例中,具體定義了檢測(cè)API漏洞的依據(jù)可以是檢測(cè)源代碼中的API是否存在空指針,由于空指針的出現(xiàn)是引起宕機(jī)的關(guān)鍵因素,因此將其作為API漏洞檢測(cè)的標(biāo)準(zhǔn)更有利于提升方案的實(shí)用性,同時(shí),檢測(cè)空指針的方式也較為簡(jiǎn)便,從而提升了方案的檢測(cè)效率。
可選地,在上述圖2對(duì)應(yīng)的第二個(gè)實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的引擎漏洞檢測(cè)的方法第三個(gè)可選實(shí)施例中,根據(jù)存在安全漏洞的API,建立API經(jīng)驗(yàn)庫(kù),可以包括:
根據(jù)存在空指針的API所對(duì)應(yīng)的API名稱(chēng)和參數(shù)位置,建立第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)。
本實(shí)施例中,檢測(cè)裝置對(duì)于存在安全漏洞的API,將建立起對(duì)應(yīng)的API經(jīng)驗(yàn)庫(kù),該API經(jīng)驗(yàn)庫(kù)中包括了高危險(xiǎn)性API的相關(guān)信息,例如存在空指針的API所對(duì)應(yīng)的API名稱(chēng)和參數(shù)位置。
以下是一種Cocos的高危API經(jīng)驗(yàn)庫(kù)示例,如下表1所示:
表1
進(jìn)一步地,本發(fā)明實(shí)施例中,示意了API經(jīng)驗(yàn)庫(kù)建立的依據(jù),其中存在空指針的API被認(rèn)為是高危API,于是在API經(jīng)驗(yàn)庫(kù)中會(huì)記錄這些高危API的相關(guān)信息,以便后續(xù)進(jìn)行漏洞檢測(cè),以此提升方案的可行性。
可選地,在上述圖2對(duì)應(yīng)的第一、第二或第三個(gè)實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的引擎漏洞檢測(cè)的方法第四個(gè)可選實(shí)施例中,獲取第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)之后,還可以包括:
當(dāng)?shù)谝粦?yīng)用開(kāi)發(fā)引擎更新為第二應(yīng)用開(kāi)發(fā)引擎時(shí),獲取第二應(yīng)用開(kāi)發(fā)引擎的源代碼;
查找第二應(yīng)用開(kāi)發(fā)引擎的源代碼中存在安全漏洞的API;
根據(jù)存在安全漏洞的API,將第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)更新為第二應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)。
本實(shí)施例中,假設(shè)第一應(yīng)用開(kāi)發(fā)引擎進(jìn)行了版本更新,得到更新后的第二應(yīng)用開(kāi)發(fā)引擎,換言之,第二應(yīng)用開(kāi)發(fā)引擎與第一應(yīng)用開(kāi)發(fā)引擎都為同一款軟件,但是版本不同,其中,第二應(yīng)用開(kāi)發(fā)引擎比第一應(yīng)用開(kāi)發(fā)引擎的版本更新。
具體地,檢測(cè)裝置將不斷遍歷第一應(yīng)用開(kāi)發(fā)引擎的版本,當(dāng)發(fā)現(xiàn)存在信息版本時(shí),可以確定第一應(yīng)用開(kāi)發(fā)引擎更新為第二應(yīng)用開(kāi)發(fā)引擎,于是檢測(cè)裝置再?gòu)膽?yīng)用開(kāi)發(fā)引擎的官網(wǎng)上調(diào)取第二應(yīng)用開(kāi)發(fā)引擎的源代碼。接下來(lái),檢測(cè)裝置將查找第二應(yīng)用開(kāi)發(fā)引擎的源代碼中存在安全漏洞的API,即查找是否存在空指針的API,如果存在就認(rèn)為該API存在安全漏洞。
最后,檢測(cè)裝置根據(jù)存在安全漏洞的API,將第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)更新為第二應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),也就是將第二應(yīng)用開(kāi)發(fā)引擎的高危API信息添加至上一個(gè)版本對(duì)應(yīng)的API經(jīng)驗(yàn)庫(kù)。
更進(jìn)一步地,本發(fā)明實(shí)施例中,當(dāng)應(yīng)用開(kāi)發(fā)引擎的版本發(fā)生更新時(shí),檢測(cè)裝置可以找出更新后的應(yīng)用開(kāi)發(fā)引擎中存在安全漏洞的API,并且直接更新API經(jīng)驗(yàn)庫(kù),不需要再次建立更新后應(yīng)用開(kāi)發(fā)引擎對(duì)應(yīng)的API經(jīng)驗(yàn)庫(kù),而是將新信息添加至上一個(gè)版本的API經(jīng)驗(yàn)庫(kù)即可,不但可以提高建立API經(jīng)驗(yàn)庫(kù)的效率,而且還節(jié)省了檢測(cè)裝置的存儲(chǔ)資源。
可選地,在上述圖2對(duì)應(yīng)的第三個(gè)實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的引擎漏洞檢測(cè)的方法第五個(gè)可選實(shí)施例中,根據(jù)API經(jīng)驗(yàn)庫(kù),判斷待檢測(cè)應(yīng)用程序的API是否存在安全漏洞,可以包括:
遍歷待檢測(cè)應(yīng)用程序的API名稱(chēng);
判斷待檢測(cè)應(yīng)用程序的API名稱(chēng)是否與API經(jīng)驗(yàn)庫(kù)中包含的API名稱(chēng)一致,若是,則根據(jù)API經(jīng)驗(yàn)庫(kù)獲取待檢測(cè)應(yīng)用程序中API名稱(chēng)對(duì)應(yīng)的參數(shù)位置;
若參數(shù)位置上對(duì)應(yīng)的參數(shù)為空指針,則確定待檢測(cè)應(yīng)用程序的API存在安全漏洞。
本實(shí)施例中,檢測(cè)裝置根據(jù)API經(jīng)驗(yàn)庫(kù)中的高危API信息,判斷待檢測(cè)應(yīng)用程序的API是否存在安全漏洞的具體實(shí)現(xiàn)方式如下介紹:
請(qǐng)參閱圖5,圖5為本發(fā)明實(shí)施例中實(shí)現(xiàn)應(yīng)用開(kāi)發(fā)引擎檢測(cè)項(xiàng)的流程示意圖,步驟501中,檢測(cè)裝置先獲取待掃描應(yīng)用程序的使用的第一應(yīng)用開(kāi)發(fā)引擎版本號(hào),具體可以從cocos2d.cpp的cocos2dVersion函數(shù)中提取,其提取的代碼如下所示:
#include“cocos2d.h”
NS_CC_BEGIN
Const char*cocos2dversion()
{
{return“2.2.1”;
}
}
通過(guò)上述代碼可以提取版本號(hào),可選地,也可以直接提取最新版本對(duì)應(yīng)的版本號(hào)。
步驟502中,查看是否存在對(duì)應(yīng)版本的API經(jīng)驗(yàn)庫(kù),該API經(jīng)驗(yàn)庫(kù)中包含了高危API的信息,若存在,則繼續(xù)進(jìn)入步驟503,否則跳轉(zhuǎn)至步驟510;
步驟503中,根據(jù)第一應(yīng)用開(kāi)發(fā)引擎的版本號(hào)找到對(duì)應(yīng)的API經(jīng)驗(yàn)庫(kù),并提取該API經(jīng)驗(yàn)庫(kù);
步驟504中,對(duì)待檢測(cè)應(yīng)用程序中的每一個(gè)文件都進(jìn)行掃描,這些文件即為待檢測(cè)應(yīng)用程序的源代碼,遍歷源代碼中的每一處的函數(shù)調(diào)用。
步驟505中,檢測(cè)裝置在步驟504中遍歷待檢測(cè)應(yīng)用程序中的每一處調(diào)用后,得到各個(gè)API的函數(shù)名。
步驟506中,接下來(lái),檢測(cè)裝置將步驟505中獲取到API的函數(shù)名與API經(jīng)驗(yàn)庫(kù)中的函數(shù)名進(jìn)行對(duì)比,從而判斷是否為高危API,如果函數(shù)名一致,則可以認(rèn)為是高危API,于是進(jìn)入步驟507,否則則跳轉(zhuǎn)至步驟504,即繼續(xù)遍歷源代碼中的每一處函數(shù)調(diào)用。
步驟507中,檢測(cè)裝置根據(jù)API經(jīng)驗(yàn)庫(kù)中存儲(chǔ)的高危API信息,可以查找到API函數(shù)名所對(duì)應(yīng)的參數(shù)信息,例如其出現(xiàn)的位置以及代碼內(nèi)容等。
步驟508中,判斷調(diào)用API位置的參數(shù)是否為NULL,若是,則進(jìn)入步驟509,否則就跳轉(zhuǎn)至步驟504,,即繼續(xù)遍歷源代碼中的每一處函數(shù)調(diào)用。
步驟509中,輸出待檢測(cè)應(yīng)用程序的風(fēng)險(xiǎn)信息,包括出現(xiàn)漏洞的文件名、代碼行號(hào)、調(diào)用的API名稱(chēng)以及報(bào)錯(cuò)信息等。
步驟510中,結(jié)束本次API漏洞的檢測(cè)。
再進(jìn)一步地,本發(fā)明實(shí)施例中,提供了利用API經(jīng)驗(yàn)庫(kù)對(duì)待檢測(cè)應(yīng)用程序進(jìn)行API漏洞檢測(cè)的方式,通過(guò)API經(jīng)驗(yàn)庫(kù)中包含的高危API信息,確定待檢測(cè)應(yīng)用程序中可能出現(xiàn)的高危API,相對(duì)于現(xiàn)有技術(shù),無(wú)需在定位到的高危API基礎(chǔ)上,再查找上層調(diào)用該API的參數(shù)位置,而是直接定位到高危API的參數(shù)位置,從而極大地降低了挖掘高危API的成本。
可選地,在上述圖2對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,本發(fā)明實(shí)施例提供的引擎漏洞檢測(cè)的方法六個(gè)可選實(shí)施例中,從待檢測(cè)應(yīng)用程序的API中確定存在安全漏洞的目標(biāo)API之后,還可以包括:
輸出待檢測(cè)應(yīng)用程序中的風(fēng)險(xiǎn)信息,風(fēng)險(xiǎn)信息包括存在目標(biāo)API的待檢測(cè)應(yīng)用程序的文件名、代碼位置、調(diào)用的API名稱(chēng)以及報(bào)錯(cuò)信息中的至少一項(xiàng)。
本實(shí)施例中,檢測(cè)裝置在確定待檢測(cè)應(yīng)用程序中存在安全漏洞的目標(biāo)API后,還可以進(jìn)一步地將目標(biāo)API的風(fēng)險(xiǎn)信息顯示在前端界面上,以供開(kāi)發(fā)人員查看并及時(shí)進(jìn)行修復(fù)。
需要說(shuō)明的是,目標(biāo)API的風(fēng)險(xiǎn)信息包括待檢測(cè)應(yīng)用程序的文件名、代碼位置、調(diào)用的API名稱(chēng)以及報(bào)錯(cuò)信息中的至少一項(xiàng),然而在實(shí)際應(yīng)用中,包括但不僅限于上述的信息。
其中,風(fēng)險(xiǎn)信息中待檢測(cè)應(yīng)用程序的文件名,表示待檢測(cè)應(yīng)用程序中出現(xiàn)高危API的文件是哪個(gè);風(fēng)險(xiǎn)信息中代碼位置,表示在待檢測(cè)應(yīng)用程序的源代碼中出現(xiàn)高危API的代碼位置;風(fēng)險(xiǎn)信息中調(diào)用的API名稱(chēng),表示高危API的名稱(chēng);風(fēng)險(xiǎn)信息中報(bào)錯(cuò)信息就是一個(gè)消息提示,用于提示開(kāi)發(fā)人員當(dāng)前的待檢測(cè)應(yīng)用程序出現(xiàn)了API漏洞。
其次,本發(fā)明實(shí)施例中,檢測(cè)裝置可以展示關(guān)于待檢測(cè)應(yīng)用程序一系列的風(fēng)險(xiǎn)信息,使得開(kāi)發(fā)人員能夠及時(shí)獲取到出現(xiàn)API漏洞的信息,從而提升修復(fù)待檢測(cè)應(yīng)用程序的效率。
為便于理解,下面以一個(gè)具體應(yīng)用場(chǎng)景對(duì)本發(fā)明中一種引擎漏洞檢測(cè)的方法進(jìn)行詳細(xì)描述,具體為:
開(kāi)發(fā)人員甲采用Cocos開(kāi)源框架開(kāi)發(fā)了一款游戲,為了保證這款游戲的順利上線,開(kāi)發(fā)人員甲采用CocosCheck工具檢測(cè)這款游戲是否存在API漏洞。其檢測(cè)步驟如下:
首先,開(kāi)發(fā)人員甲雙擊電腦上的“CocosCheck.exe”工具,于是進(jìn)入CocosCheck工具的使用界面,請(qǐng)參閱圖6,圖6為應(yīng)用場(chǎng)景中CocosCheck工具檢測(cè)前的界面顯示圖,菜單欄中的“Check”為檢測(cè)功能,“File”為文件選擇功能,“Edit”為編輯功能,“View”為視圖功能,“Help”為幫助功能。
接著,開(kāi)發(fā)人員甲選擇菜單欄中的檢測(cè)功能,即點(diǎn)擊“Check”,然后再選擇“Check”中的“Directory”選項(xiàng)。選擇后CocosCheck工具的界面上就會(huì)出現(xiàn)待檢測(cè)的游戲源代碼目錄,具體如圖7,圖7為應(yīng)用場(chǎng)景中CocosCheck工具檢測(cè)時(shí)的界面顯示圖,開(kāi)發(fā)人員甲選擇了該游戲中所有的源代碼文件進(jìn)行掃描。
CocosCheck工具掃描完成后,將顯示界面如圖8所示,圖8為應(yīng)用場(chǎng)景中CocosCheck工具檢測(cè)后的界面顯示圖,開(kāi)發(fā)人員甲可以看到掃描完成后的結(jié)果,結(jié)果中展示調(diào)用高危API的代碼文件名為“QGAuto.cpp”,對(duì)應(yīng)的代碼行數(shù)為247行,這個(gè)高危API名稱(chēng)為“initWithMaskSprite”。
于是,開(kāi)發(fā)人員迅速找到出現(xiàn)高危API的文件,并根據(jù)代碼位置找到出錯(cuò)的地方,然后及時(shí)進(jìn)行了修復(fù),從而保證這款游戲順利上線。
下面對(duì)本發(fā)明中的檢測(cè)裝置進(jìn)行詳細(xì)描述,請(qǐng)參閱圖9,本發(fā)明實(shí)施例中的檢測(cè)裝置包括:
第一獲取模塊601,用于獲取待檢測(cè)應(yīng)用程序;
第二獲取模塊602,用于獲取第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),所述第一應(yīng)用開(kāi)發(fā)引擎用于開(kāi)發(fā)所述第一獲取模塊601獲取的所述待檢測(cè)應(yīng)用程序,所述API經(jīng)驗(yàn)庫(kù)中包含至少一項(xiàng)存在安全漏洞的API信息;
提取模塊603,用于提取所述第一獲取模塊601獲取的所述待檢測(cè)應(yīng)用程序的應(yīng)用程序編程接口API;
確定模塊604,用于根據(jù)所述第二獲取模塊602獲取的所述API經(jīng)驗(yàn)庫(kù),判斷所述提取模塊603提取的所述待檢測(cè)應(yīng)用程序的API是否存在安全漏洞,若是,則從所述待檢測(cè)應(yīng)用程序的API中確定存在安全漏洞的目標(biāo)API。
本實(shí)施例中,第一獲取模塊601獲取待檢測(cè)應(yīng)用程序,第二獲取模塊602獲取第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),所述第一應(yīng)用開(kāi)發(fā)引擎用于開(kāi)發(fā)所述第一獲取模塊601獲取的所述待檢測(cè)應(yīng)用程序,所述API經(jīng)驗(yàn)庫(kù)中包含至少一項(xiàng)存在安全漏洞的API信息,提取模塊603提取所述第一獲取模塊601獲取的所述待檢測(cè)應(yīng)用程序的應(yīng)用程序編程接口API,確定模塊604根據(jù)所述第二獲取模塊602獲取的所述API經(jīng)驗(yàn)庫(kù),判斷所述提取模塊603提取的所述待檢測(cè)應(yīng)用程序的API是否存在安全漏洞,若是,則從所述待檢測(cè)應(yīng)用程序的API中確定存在安全漏洞的目標(biāo)API。
本發(fā)明實(shí)施例中,無(wú)需為每個(gè)應(yīng)用開(kāi)發(fā)引擎編寫(xiě)測(cè)試用例,而是根據(jù)安全漏洞的API信息建立起應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),通過(guò)該API經(jīng)驗(yàn)庫(kù)掃描出待檢測(cè)應(yīng)用程序中存在的API漏洞,從而降低了API漏洞的檢測(cè)成本。
可選地,在上述圖9所對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,請(qǐng)參閱圖10,本發(fā)明實(shí)施例提供的檢測(cè)裝置的另一實(shí)施例中,所述檢測(cè)裝置還包括:
第三獲取模塊605A,用于所述第二獲取模塊602獲取第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)之前,獲取所述第一應(yīng)用開(kāi)發(fā)引擎的源代碼;
第一查找模塊605B,用于查找所述第三獲取模塊605A獲取的所述第一應(yīng)用開(kāi)發(fā)引擎的源代碼中存在安全漏洞的API;
第一建立模塊605C,用于根據(jù)所述第一查找模塊605B查找的所述存在安全漏洞的API,建立所述API經(jīng)驗(yàn)庫(kù)。
其次,本發(fā)明實(shí)施例中,還可以通過(guò)對(duì)第一應(yīng)用開(kāi)發(fā)引擎的源代碼查找存在安全漏洞的API,以此建立API經(jīng)驗(yàn)庫(kù),使得該API經(jīng)驗(yàn)庫(kù)中的API信息更加完整,從而提升方案的可行性和實(shí)用性。
可選地,在上述圖10所對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,請(qǐng)參閱圖11,本發(fā)明實(shí)施例提供的檢測(cè)裝置的另一實(shí)施例中,
所述第一查找模塊605B包括:
檢測(cè)單元605B1,用于檢測(cè)所述第一應(yīng)用開(kāi)發(fā)引擎的源代碼中存在空指針的API;
第一獲取單元605B2,用于獲取所述檢測(cè)單元605B1檢測(cè)的所述存在空指針的API所對(duì)應(yīng)的API名稱(chēng)和參數(shù)位置。
再次,本發(fā)明實(shí)施例中,具體定義了檢測(cè)API漏洞的依據(jù)可以是檢測(cè)源代碼中的API是否存在空指針,由于空指針的出現(xiàn)是引起宕機(jī)的關(guān)鍵因素,因此將其作為API漏洞檢測(cè)的標(biāo)準(zhǔn)更有利于提升方案的實(shí)用性,同時(shí),檢測(cè)空指針的方式也較為簡(jiǎn)便,從而提升了方案的檢測(cè)效率。
可選地,在上述圖11所對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,請(qǐng)參閱圖12,本發(fā)明實(shí)施例提供的檢測(cè)裝置的另一實(shí)施例中,
所述第一建立模塊605C包括:
建立單元605C1,用于根據(jù)所述第一獲取單元605B2獲取的所述存在空指針的API所對(duì)應(yīng)的API名稱(chēng)和參數(shù)位置,建立所述第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)。
進(jìn)一步地,本發(fā)明實(shí)施例中,示意了API經(jīng)驗(yàn)庫(kù)建立的依據(jù),其中存在空指針的API被認(rèn)為是高危API,于是在API經(jīng)驗(yàn)庫(kù)中會(huì)記錄這些高危API的相關(guān)信息,以便后續(xù)進(jìn)行漏洞檢測(cè),以此提升方案的可行性。
可選地,在上述圖10、圖11或圖12所對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,請(qǐng)參閱圖13,本發(fā)明實(shí)施例提供的檢測(cè)裝置的另一實(shí)施例中,
所述檢測(cè)裝置60還包括:
第四獲取模塊606A,用于所述第二獲取模塊602獲取第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)之后,當(dāng)所述第一應(yīng)用開(kāi)發(fā)引擎更新為第二應(yīng)用開(kāi)發(fā)引擎時(shí),獲取所述第二應(yīng)用開(kāi)發(fā)引擎的源代碼;
第二查找模塊606B,用于查找所述第四獲取模塊606A獲取的所述第二應(yīng)用開(kāi)發(fā)引擎的源代碼中存在安全漏洞的API;
更新模塊606C,用于根據(jù)所述第二查找模塊606B查找的所述存在安全漏洞的API,將所述第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)更新為所述第二應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù)。
更進(jìn)一步地,本發(fā)明實(shí)施例中,當(dāng)應(yīng)用開(kāi)發(fā)引擎的版本發(fā)生更新時(shí),檢測(cè)裝置可以找出更新后的應(yīng)用開(kāi)發(fā)引擎中存在安全漏洞的API,并且直接更新API經(jīng)驗(yàn)庫(kù),不需要再次建立更新后應(yīng)用開(kāi)發(fā)引擎對(duì)應(yīng)的API經(jīng)驗(yàn)庫(kù),而是將新信息添加至上一個(gè)版本的API經(jīng)驗(yàn)庫(kù)即可,不但可以提高建立API經(jīng)驗(yàn)庫(kù)的效率,而且還節(jié)省了檢測(cè)裝置的存儲(chǔ)資源。
可選地,在上述圖12所對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,請(qǐng)參閱圖14,本發(fā)明實(shí)施例提供的檢測(cè)裝置的另一實(shí)施例中,
所述確定模塊604包括:
遍歷單元6041,用于遍歷所述待檢測(cè)應(yīng)用程序的API名稱(chēng);
第二獲取單元6042,用于判斷所述遍歷單元6041遍歷得到的所述待檢測(cè)應(yīng)用程序的API名稱(chēng),是否與所述API經(jīng)驗(yàn)庫(kù)中包含的API名稱(chēng)一致,若是,則根據(jù)所述API經(jīng)驗(yàn)庫(kù)獲取所述待檢測(cè)應(yīng)用程序中所述API名稱(chēng)對(duì)應(yīng)的參數(shù)位置;
確定單元6043,用于若所述第二獲取單元6042獲取的所述參數(shù)位置上對(duì)應(yīng)的參數(shù)為空指針,則確定所述待檢測(cè)應(yīng)用程序的API存在安全漏洞。
再進(jìn)一步地,本發(fā)明實(shí)施例中,提供了利用API經(jīng)驗(yàn)庫(kù)對(duì)待檢測(cè)應(yīng)用程序進(jìn)行API漏洞檢測(cè)的方式,通過(guò)API經(jīng)驗(yàn)庫(kù)中包含的高危API信息,確定待檢測(cè)應(yīng)用程序中可能出現(xiàn)的高危API,相對(duì)于現(xiàn)有技術(shù),無(wú)需在定位到的高危API基礎(chǔ)上,再查找上層調(diào)用該API的參數(shù)位置,而是直接定位到高危API的參數(shù)位置,從而極大地降低了挖掘高危API的成本。
可選地,在上述圖9所對(duì)應(yīng)的實(shí)施例的基礎(chǔ)上,請(qǐng)參閱圖15,本發(fā)明實(shí)施例提供的檢測(cè)裝置的另一實(shí)施例中,
所述檢測(cè)裝置60還包括:
輸出模塊607,用于所述確定模塊604從所述待檢測(cè)應(yīng)用程序的API中確定存在安全漏洞的目標(biāo)API之后,輸出所述待檢測(cè)應(yīng)用程序中的風(fēng)險(xiǎn)信息,所述風(fēng)險(xiǎn)信息包括存在所述目標(biāo)API的待檢測(cè)應(yīng)用程序的文件名、代碼位置、調(diào)用的API名稱(chēng)以及報(bào)錯(cuò)信息中的至少一項(xiàng)。
其次,本發(fā)明實(shí)施例中,檢測(cè)裝置可以展示關(guān)于待檢測(cè)應(yīng)用程序一系列的風(fēng)險(xiǎn)信息,使得開(kāi)發(fā)人員能夠及時(shí)獲取到出現(xiàn)API漏洞的信息,從而提升修復(fù)待檢測(cè)應(yīng)用程序的效率。
本發(fā)明實(shí)施例還提供了另一種檢測(cè)裝置,如圖16所示,為了便于說(shuō)明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分,具體技術(shù)細(xì)節(jié)未揭示的,請(qǐng)參照本發(fā)明實(shí)施例方法部分。該終端可以為包括個(gè)人電腦(英文全稱(chēng):Personal Computer,英文縮寫(xiě):PC)、手機(jī)、平板電腦、個(gè)人數(shù)字助理(英文全稱(chēng):Personal Digital Assistant,英文縮寫(xiě):PDA)、銷(xiāo)售終端(英文全稱(chēng):Point of Sales,英文縮寫(xiě):POS)、車(chē)載電腦等任意終端設(shè)備,以終端為PC為例:
圖16示出的是與本發(fā)明實(shí)施例提供的終端相關(guān)的PC的部分結(jié)構(gòu)的框圖。參考圖16,PC包括:射頻(英文全稱(chēng):Radio Frequency,英文縮寫(xiě):RF)電路710、存儲(chǔ)器720、輸入單元730、顯示單元740、傳感器750、音頻電路760、無(wú)線保真(英文全稱(chēng):wireless fidelity,英文縮寫(xiě):WiFi)模塊770、處理器780、以及電源790等部件。本領(lǐng)域技術(shù)人員可以理解,圖16中示出的PC結(jié)構(gòu)并不構(gòu)成對(duì)PC的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。
下面結(jié)合圖16對(duì)PC的各個(gè)構(gòu)成部件進(jìn)行具體的介紹:
RF電路710可用于收發(fā)信息或通話過(guò)程中,信號(hào)的接收和發(fā)送,特別地,將基站的下行信息接收后,給處理器780處理;另外,將設(shè)計(jì)上行的數(shù)據(jù)發(fā)送給基站。通常,RF電路710包括但不限于天線、至少一個(gè)放大器、收發(fā)信機(jī)、耦合器、低噪聲放大器(英文全稱(chēng):Low Noise Amplifier,英文縮寫(xiě):LNA)、雙工器等。此外,RF電路710還可以通過(guò)無(wú)線通信與網(wǎng)絡(luò)和其他設(shè)備通信。上述無(wú)線通信可以使用任一通信標(biāo)準(zhǔn)或協(xié)議,包括但不限于全球移動(dòng)通訊系統(tǒng)(英文全稱(chēng):Global System of Mobile communication,英文縮寫(xiě):GSM)、通用分組無(wú)線服務(wù)(英文全稱(chēng):General Packet Radio Service,GPRS)、碼分多址(英文全稱(chēng):Code Division Multiple Access,英文縮寫(xiě):CDMA)、寬帶碼分多址(英文全稱(chēng):Wideband Code Division Multiple Access,英文縮寫(xiě):WCDMA)、長(zhǎng)期演進(jìn)(英文全稱(chēng):Long Term Evolution,英文縮寫(xiě):LTE)、電子郵件、短消息服務(wù)(英文全稱(chēng):Short Messaging Service,SMS)等。
存儲(chǔ)器720可用于存儲(chǔ)軟件程序以及模塊,處理器780通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器720的軟件程序以及模塊,從而執(zhí)行PC的各種功能應(yīng)用以及數(shù)據(jù)處理。存儲(chǔ)器720可主要包括存儲(chǔ)程序區(qū)和存儲(chǔ)數(shù)據(jù)區(qū),其中,存儲(chǔ)程序區(qū)可存儲(chǔ)操作系統(tǒng)、至少一個(gè)功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲(chǔ)數(shù)據(jù)區(qū)可存儲(chǔ)根據(jù)PC的使用所創(chuàng)建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話本等)等。此外,存儲(chǔ)器720可以包括高速隨機(jī)存取存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,例如至少一個(gè)磁盤(pán)存儲(chǔ)器件、閃存器件、或其他易失性固態(tài)存儲(chǔ)器件。
輸入單元730可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與PC的用戶設(shè)置以及功能控制有關(guān)的鍵信號(hào)輸入。具體地,輸入單元730可包括觸控面板731以及其他輸入設(shè)備732。觸控面板731,也稱(chēng)為觸摸屏,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸控面板731上或在觸控面板731附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動(dòng)相應(yīng)的連接裝置。可選的,觸控面板731可包括觸摸檢測(cè)裝置和觸摸控制器兩個(gè)部分。其中,觸摸檢測(cè)裝置檢測(cè)用戶的觸摸方位,并檢測(cè)觸摸操作帶來(lái)的信號(hào),將信號(hào)傳送給觸摸控制器;觸摸控制器從觸摸檢測(cè)裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點(diǎn)坐標(biāo),再送給處理器780,并能接收處理器780發(fā)來(lái)的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類(lèi)型實(shí)現(xiàn)觸控面板731。除了觸控面板731,輸入單元730還可以包括其他輸入設(shè)備732。具體地,其他輸入設(shè)備732可以包括但不限于物理鍵盤(pán)、功能鍵(比如音量控制按鍵、開(kāi)關(guān)按鍵等)、軌跡球、鼠標(biāo)、操作桿等中的一種或多種。
顯示單元740可用于顯示由用戶輸入的信息或提供給用戶的信息以及PC的各種菜單。顯示單元740可包括顯示面板741,可選的,可以采用液晶顯示器(英文全稱(chēng):Liquid Crystal Display,英文縮寫(xiě):LCD)、有機(jī)發(fā)光二極管(英文全稱(chēng):Organic Light-Emitting Diode,英文縮寫(xiě):OLED)等形式來(lái)配置顯示面板741。進(jìn)一步的,觸控面板731可覆蓋顯示面板741,當(dāng)觸控面板731檢測(cè)到在其上或附近的觸摸操作后,傳送給處理器780以確定觸摸事件的類(lèi)型,隨后處理器780根據(jù)觸摸事件的類(lèi)型在顯示面板741上提供相應(yīng)的視覺(jué)輸出。雖然在圖16中,觸控面板731與顯示面板741是作為兩個(gè)獨(dú)立的部件來(lái)實(shí)現(xiàn)PC的輸入和輸入功能,但是在某些實(shí)施例中,可以將觸控面板731與顯示面板741集成而實(shí)現(xiàn)PC的輸入和輸出功能。
PC還可包括至少一種傳感器750,比如光傳感器、運(yùn)動(dòng)傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線的明暗來(lái)調(diào)節(jié)顯示面板741的亮度,接近傳感器可在PC移動(dòng)到耳邊時(shí),關(guān)閉顯示面板741和/或背光。作為運(yùn)動(dòng)傳感器的一種,加速計(jì)傳感器可檢測(cè)各個(gè)方向上(一般為三軸)加速度的大小,靜止時(shí)可檢測(cè)出重力的大小及方向,可用于識(shí)別PC姿態(tài)的應(yīng)用(比如橫豎屏切換、相關(guān)游戲、磁力計(jì)姿態(tài)校準(zhǔn))、振動(dòng)識(shí)別相關(guān)功能(比如計(jì)步器、敲擊)等;至于PC還可配置的陀螺儀、氣壓計(jì)、濕度計(jì)、溫度計(jì)、紅外線傳感器等其他傳感器,在此不再贅述。
音頻電路760、揚(yáng)聲器761,傳聲器762可提供用戶與PC之間的音頻接口。音頻電路760可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號(hào),傳輸?shù)綋P(yáng)聲器761,由揚(yáng)聲器761轉(zhuǎn)換為聲音信號(hào)輸出;另一方面,傳聲器762將收集的聲音信號(hào)轉(zhuǎn)換為電信號(hào),由音頻電路760接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器780處理后,經(jīng)RF電路710以發(fā)送給比如另一PC,或者將音頻數(shù)據(jù)輸出至存儲(chǔ)器720以便進(jìn)一步處理。
WiFi屬于短距離無(wú)線傳輸技術(shù),PC通過(guò)WiFi模塊770可以幫助用戶收發(fā)電子郵件、瀏覽網(wǎng)頁(yè)和訪問(wèn)流式媒體等,它為用戶提供了無(wú)線的寬帶互聯(lián)網(wǎng)訪問(wèn)。雖然圖16示出了WiFi模塊770,但是可以理解的是,其并不屬于PC的必須構(gòu)成,完全可以根據(jù)需要在不改變發(fā)明的本質(zhì)的范圍內(nèi)而省略。
處理器780是PC的控制中心,利用各種接口和線路連接整個(gè)PC的各個(gè)部分,通過(guò)運(yùn)行或執(zhí)行存儲(chǔ)在存儲(chǔ)器720內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲(chǔ)在存儲(chǔ)器720內(nèi)的數(shù)據(jù),執(zhí)行PC的各種功能和處理數(shù)據(jù),從而對(duì)PC進(jìn)行整體監(jiān)控??蛇x的,處理器780可包括一個(gè)或多個(gè)處理單元;優(yōu)選的,處理器780可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無(wú)線通信??梢岳斫獾氖?,上述調(diào)制解調(diào)處理器也可以不集成到處理器780中。
PC還包括給各個(gè)部件供電的電源790(比如電池),優(yōu)選的,電源可以通過(guò)電源管理系統(tǒng)與處理器780邏輯相連,從而通過(guò)電源管理系統(tǒng)實(shí)現(xiàn)管理充電、放電、以及功耗管理等功能。
盡管未示出,PC還可以包括攝像頭、藍(lán)牙模塊等,在此不再贅述。
在本發(fā)明實(shí)施例中,該終端所包括的處理器780還具有以下功能:
獲取待檢測(cè)應(yīng)用程序;
獲取第一應(yīng)用開(kāi)發(fā)引擎的API經(jīng)驗(yàn)庫(kù),所述第一應(yīng)用開(kāi)發(fā)引擎用于開(kāi)發(fā)所述待檢測(cè)應(yīng)用程序,所述API經(jīng)驗(yàn)庫(kù)中包含至少一項(xiàng)存在安全漏洞的API信息;
提取所述待檢測(cè)應(yīng)用程序的應(yīng)用程序編程接口API;
根據(jù)所述API經(jīng)驗(yàn)庫(kù),判斷所述待檢測(cè)應(yīng)用程序的API是否存在安全漏洞,若是,則從所述待檢測(cè)應(yīng)用程序的API中確定存在安全漏洞的目標(biāo)API。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng),裝置和單元的具體工作過(guò)程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過(guò)程,在此不再贅述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(英文全稱(chēng):Read-Only Memory,英文縮寫(xiě):ROM)、隨機(jī)存取存儲(chǔ)器(英文全稱(chēng):Random Access Memory,英文縮寫(xiě):RAM)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。