本發(fā)明涉及密碼技術(shù)領(lǐng)域,具體涉及一種對調(diào)用函數(shù)進行動態(tài)安全檢測的方法。
背景技術(shù):
當(dāng)前的應(yīng)用系統(tǒng)開發(fā)過程中,為實現(xiàn)功能的高度復(fù)用,一般采用將功能相對獨立、需重復(fù)使用的功能封裝為函數(shù)庫,對外提供調(diào)用接口,供其他應(yīng)用程序在需要時調(diào)用相關(guān)的函數(shù)實現(xiàn)應(yīng)用所需的各項功能。函數(shù)庫一般包括操作系統(tǒng)提供的系統(tǒng)庫、第三方提供的開發(fā)庫、內(nèi)部實現(xiàn)的接口庫等多種類型。
函數(shù)庫所提供的功能較為純粹,但同時也較為重要。比如安全函數(shù)庫,一般會提供身份認(rèn)證、權(quán)限判斷、數(shù)據(jù)加密、數(shù)據(jù)解密、數(shù)據(jù)簽名、完整性驗證等功能,函數(shù)庫的上述功能所返回的處理結(jié)果將直接決定應(yīng)用程序的后續(xù)處理流程判斷、傳輸及存儲數(shù)據(jù)所處的狀態(tài)等,關(guān)系到整個應(yīng)用程序的安全性。由于函數(shù)庫的接口功能對應(yīng)用程序而言為黑盒模式,應(yīng)用程序無法對函數(shù)返回的處理結(jié)果進行有效的合法性判斷,均無條件信任函數(shù)所返回的處理結(jié)果。
目前應(yīng)用程序主要運行在計算機、移動終端等設(shè)備中,這些設(shè)備基本均運行于Windows、Linux、MAC OS、Android、iOS等操作系統(tǒng)之上,均為開放式系統(tǒng),可安裝、運行種類繁多的應(yīng)用程序,為惡意軟件提供了極大的方便。針對主要操作系統(tǒng)的惡意軟件層出不窮,各個惡意軟件采用的方法也千奇百怪,無所不用其極,包括對系統(tǒng)庫、廣泛使用的開發(fā)庫、特定應(yīng)用的接口庫等函數(shù)庫采用替換函數(shù)庫、對函數(shù)調(diào)用進行攔截等操作,向應(yīng)用程序返回虛假數(shù)據(jù)欺騙運行,從而達到非法接入系統(tǒng)、獲取數(shù)據(jù)等目的。
為防范上述的函數(shù)調(diào)用安全風(fēng)險,目前采用較多的方法為在操作系統(tǒng)啟動時對系統(tǒng)庫進行完整性校驗的措施。但此種安全檢測方法無法覆蓋應(yīng)用程序需使用的第三方開發(fā)庫、內(nèi)部接口庫。惡意軟件可采取在操作系統(tǒng)啟動后方替換系統(tǒng)庫、對函數(shù)調(diào)用進行攔截直接引向惡意軟件的虛假函數(shù)庫或直接返回虛假結(jié)果等方式對予以規(guī)避,造成上述安全措施的防范效果大大降低,無法有效保證函數(shù)調(diào)用的真正安全。
技術(shù)實現(xiàn)要素:
為解決上述問題,本發(fā)明提供了一種對調(diào)用函數(shù)進行動態(tài)安全檢測的方法,包括如下步驟:
步驟一:應(yīng)用程序生成檢測源數(shù)據(jù),并將檢測源數(shù)據(jù)與預(yù)先確定的業(yè)務(wù)數(shù)據(jù)輸入到函數(shù)庫的函數(shù)庫的接口函數(shù)。
步驟二:函數(shù)庫的接口函數(shù)解析輸入數(shù)據(jù),獲得檢測源數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)。
步驟三:函數(shù)庫的接口函數(shù)根據(jù)檢測源數(shù)據(jù)形成第一檢測值
步驟四:函數(shù)庫的接口函數(shù)對業(yè)務(wù)數(shù)據(jù)按照流程進行計算,形成業(yè)務(wù)返回值。
步驟五:函數(shù)庫的接口函數(shù)將第一檢測值、業(yè)務(wù)返回值一并返回至應(yīng)用程序。
步驟六:應(yīng)用程序解析函數(shù)庫的接口函數(shù)返回的數(shù)據(jù),獲得第一檢測值、業(yè)務(wù)返回值。
步驟七:應(yīng)用程序根據(jù)第一檢測值判斷本次函數(shù)調(diào)用過程可信,并依據(jù)業(yè)務(wù)返回值進行后續(xù)流程處理,否則判定本次函數(shù)調(diào)用過程不可信。
進一步的,步驟一中,應(yīng)用程序利用即時數(shù)據(jù)生成檢測源數(shù)據(jù)。
進一步的,步驟一中,所述即時數(shù)據(jù)為應(yīng)用程序生成的隨機數(shù)和/或獲取自身進程ID和/或當(dāng)前時間信息。
進一步的,步驟三中,函數(shù)庫的接口函數(shù)根據(jù)檢測源數(shù)據(jù)進行散列運算,形成第一檢測值。
進一步的,步驟七具體為:
步驟7.1:應(yīng)用程序根據(jù)檢測源數(shù)據(jù)形成第二檢測值。
步驟7.2:應(yīng)用程序比較第一檢測值與第二檢測值是否一致。若一致,則判定本次函數(shù)調(diào)用過程可信,并依據(jù)業(yè)務(wù)返回值進行后續(xù)流程處理,否則判定本次函數(shù)調(diào)用過程不可信。
進一步的,步驟7.1中,應(yīng)用程序?qū)z測源數(shù)據(jù)進行散列運算形成第二檢測值。
本發(fā)明的有益效果為:
1.適用于大部分應(yīng)用程序?qū)瘮?shù)調(diào)用的檢測
本發(fā)明所設(shè)定的調(diào)用函數(shù)方式是目前絕大部分應(yīng)用程序所采用的模式,包括計算機端設(shè)備、智能移動終端設(shè)備上的應(yīng)用程序,均可采用本發(fā)明提出的方法對函數(shù)調(diào)用進行安全檢測,保證所獲得的返回數(shù)據(jù)合法可信。
2.安全性高
本發(fā)明提出的安全檢測方法嵌入到接口函數(shù)的處理邏輯中,且在應(yīng)用程序中對處理結(jié)果進行動態(tài)、即時的合法性判斷,無論攻擊者采用替換函數(shù)庫、還是攔截函數(shù)調(diào)用的方法,均可被本發(fā)明提出的動態(tài)安全檢測措施有效察覺規(guī)避,應(yīng)用程序可準(zhǔn)確識別當(dāng)前對函數(shù)的調(diào)用是否安全可信,有效避免了目前采用的“一次檢測、長期有效”的方式所導(dǎo)致的函數(shù)庫中途被替換、函數(shù)調(diào)用被非法攔截等的安全風(fēng)險。動態(tài)檢測方式可避免函數(shù)調(diào)用被攔截的非法攻擊問題,從而可覆蓋系統(tǒng)庫、開發(fā)庫、接口庫等全部類型函數(shù)庫的調(diào)用安全保障,可從根本上解決函數(shù)庫被替換、函數(shù)調(diào)用被攔截等惡意行為導(dǎo)致的安全風(fēng)險。
3.有效防止破解、仿冒
同時,檢測計算所需的數(shù)據(jù)源包括隨機數(shù)、進程ID、當(dāng)前時間等即時數(shù)據(jù),可進一步避免由于使用固定源數(shù)據(jù)進行計算檢測所可能引致的破解、仿冒頂替等問題。
附圖說明
圖1為本發(fā)明流程圖。
具體實施方式
本發(fā)明的設(shè)計構(gòu)思為:針對應(yīng)用程序的函數(shù)的調(diào)用提出一種動態(tài)安全檢測方法,將函數(shù)調(diào)用安全檢測直接置入函數(shù)庫函數(shù)庫的接口函數(shù)及應(yīng)用程序的調(diào)用處理過程中,在函數(shù)庫實現(xiàn)時增加對調(diào)用信息的即時運算處理過程,并將運算結(jié)果向外返回。應(yīng)用程序在調(diào)用函數(shù)時增加輸入當(dāng)前的即時數(shù)據(jù),同時應(yīng)用程序?qū)磿r信息同樣進行運算,與函數(shù)所返回的檢測運算結(jié)果進行比對,若二者運算結(jié)果一致,應(yīng)用程序方認(rèn)為本次函數(shù)調(diào)用真實有效。
圖1所示為本發(fā)明的流程圖。包含如下步驟:
步驟一:應(yīng)用程序生成檢測源數(shù)據(jù),并將檢測源數(shù)據(jù)與預(yù)先確定的業(yè)務(wù)數(shù)據(jù)輸入到函數(shù)庫的接口函數(shù)。
檢測源數(shù)據(jù)可以根據(jù)實際需求靈活生成。優(yōu)選的,本實施例中采用即時數(shù)據(jù)生成檢測源數(shù)據(jù)。所述即時數(shù)據(jù)可以為:應(yīng)用程序生成的隨機數(shù)和/或獲取自身進程ID和/或當(dāng)前時間信息。采用隨機數(shù)、進程ID、當(dāng)前時間等即時數(shù)據(jù)組成檢測源數(shù)據(jù)可避免由于使用固定源數(shù)據(jù)進行計算檢測所可能引致的破解、仿冒頂替等問題。
步驟二:函數(shù)庫的接口函數(shù)解析輸入數(shù)據(jù),獲得檢測源數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)。
步驟三:函數(shù)庫的接口函數(shù)根據(jù)檢測源數(shù)據(jù)形成第一檢測值。
函數(shù)庫的接口函數(shù)根據(jù)檢測源數(shù)據(jù)進行散列運算,形成第一檢測值。
步驟四:函數(shù)庫的接口函數(shù)對業(yè)務(wù)數(shù)據(jù)按照流程進行計算,形成業(yè)務(wù)返回值。
步驟三、步驟四的執(zhí)行順序并無要求,也可以同時執(zhí)行。
步驟五:函數(shù)庫的接口函數(shù)將第一檢測值、業(yè)務(wù)返回值一并返回至應(yīng)用程序。
步驟六:應(yīng)用程序解析函數(shù)庫的接口函數(shù)返回的數(shù)據(jù),獲得第一檢測值、業(yè)務(wù)返回值。
步驟七:應(yīng)用程序根據(jù)第一檢測值判斷本次函數(shù)調(diào)用過程可信,并依據(jù)業(yè)務(wù)返回值進行后續(xù)流程處理,否則判定本次函數(shù)調(diào)用過程不可信。
步驟7.1:應(yīng)用程序根據(jù)檢測源數(shù)據(jù)形成第二檢測值。
應(yīng)用程序?qū)z測源數(shù)據(jù)進行散列運算形成第二檢測值。
步驟7.2:應(yīng)用程序比較第一檢測值與第二檢測值是否一致;若一致,則判定本次函數(shù)調(diào)用過程可信,并依據(jù)業(yè)務(wù)返回值進行后續(xù)流程處理,否則判定本次函數(shù)調(diào)用過程不可信。