本發(fā)明涉及智能卡技術(shù)領(lǐng)域,尤其涉及一種智能卡安全防護方法及裝置。
背景技術(shù):
智能卡技術(shù)由于其良好的可靠性和便攜性,在金融、交通、醫(yī)療、教育等各領(lǐng)域得到日趨廣泛的應(yīng)用。在智能卡的應(yīng)用場景日趨復雜的今天,各類信息攻擊技術(shù)也在同步發(fā)展,因此其安全性的需求也日益得到重視。
Java智能卡以其支持后下載,多應(yīng)用,跨平臺的特性在各類環(huán)境下得到廣泛使用和推廣。隨之而來的是,諸如惡意代碼植入等軟件攻擊技術(shù)通過后下載的應(yīng)用程序窺探Java智能卡的漏洞并進行數(shù)據(jù)篡改和破壞,已引起學術(shù)界和工業(yè)界的廣泛研究。
傳統(tǒng)的Java智能卡,利用線下的字節(jié)碼驗證器(Byte Code Verifier,BCV)對即將燒錄到卡上的應(yīng)用程序文件進行安全性檢查,若檢查通過則允許應(yīng)用程序文件燒錄到卡上,否則給出報警信息。
然而,上述方法無法對Java智能卡在出廠后安裝的應(yīng)用程序文件進行安全性檢查,導致Java智能卡存在安全隱患。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例解決的問題是如何降低Java智能卡的安全隱患。
為解決上述問題,本發(fā)明實施例提供一種智能卡安全防護方法,包括:
接收訪問智能卡數(shù)據(jù)區(qū)的指令;
在對訪問指令進行處理時,實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于目標數(shù)據(jù)區(qū)間內(nèi);
當檢測到所述訪問指令對應(yīng)的目標數(shù)據(jù)處于目標數(shù)據(jù)區(qū)間外時,判定所述智能卡受到攻擊。
可選的,所述智能卡安全防護方法還包括:實時獲取所述訪問指令涉及 的數(shù)據(jù)類型,以及所述訪問指令指向的目標數(shù)據(jù)的數(shù)據(jù)類型;檢測所述訪問指令涉及的數(shù)據(jù)類型與所述目標數(shù)據(jù)的數(shù)據(jù)類型是否相同;當檢測到所述訪問指令涉及的數(shù)據(jù)類型與所述目標數(shù)據(jù)的數(shù)據(jù)類型不同時,判定所述智能卡受到攻擊。
可選的,在判定所述智能卡受到攻擊后,還包括以下至少一種:發(fā)送報警信息;終止訪問操作。
可選的,所述智能卡數(shù)據(jù)區(qū)包括以下至少一種:棧數(shù)據(jù)區(qū)、靜態(tài)變量數(shù)據(jù)區(qū)以及對象字段數(shù)據(jù)區(qū)。
可選的,當所述訪問指令為對所述棧數(shù)據(jù)區(qū)進行訪問時,所述實時獲取所述訪問指令涉及的數(shù)據(jù)類型,包括:解析所述訪問指令,獲取所述訪問指令攜帶的操作碼和操作數(shù),并獲取所述操作碼中包含的數(shù)據(jù)類型信息;所述獲取所述訪問指令指向的目標數(shù)據(jù)的數(shù)據(jù)類型,包括:獲取所述操作數(shù)對應(yīng)的棧數(shù)據(jù)區(qū)中的目標數(shù)據(jù)的數(shù)據(jù)類型。
可選的,所述實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于預設(shè)范圍內(nèi),包括:實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于所述棧數(shù)據(jù)區(qū)的預設(shè)范圍內(nèi)。
可選的,所述實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于所述棧數(shù)據(jù)區(qū)的預設(shè)范圍內(nèi),包括:當所述訪問指令對應(yīng)的操作包括壓棧操作或彈棧操作時,實時獲取與所述訪問指令操作相關(guān)的數(shù)據(jù)單元的位置,檢測所述數(shù)據(jù)單元的位置是否處于當前函數(shù)幀的操作數(shù)棧的上下邊界;當函數(shù)調(diào)用產(chǎn)生新的函數(shù)幀時,檢測存放函數(shù)特征信息的棧頂是否超出新函數(shù)幀的操作數(shù)棧上邊界;當函數(shù)調(diào)用返回時,檢測所述訪問指令對應(yīng)的棧頂信息彈出時是否超出整個棧的上邊界。
可選的,當所述訪問指令為對靜態(tài)變量數(shù)據(jù)區(qū)進行訪問的指令時,所述實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于預設(shè)范圍內(nèi),包括:解析所述訪問指令,獲取所述訪問指令攜帶的操作碼和操作數(shù),并獲取所述操作碼中包含的數(shù)據(jù)類型信息;獲取所述訪問指令對應(yīng)的目標數(shù)據(jù)包的靜態(tài)鏡像信息;根據(jù)所述靜態(tài)鏡像信息,檢測所述操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)地址是否處于 所述靜態(tài)鏡像信息對應(yīng)的數(shù)據(jù)區(qū)間內(nèi)。
可選的,所述檢測所述訪問指令涉及的數(shù)據(jù)類型與所述目標數(shù)據(jù)類型是否相同,包括:當所述操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)為引用類型時,檢測所述靜態(tài)數(shù)據(jù)是否處于所述靜態(tài)鏡像信息對應(yīng)的引用數(shù)據(jù)區(qū)間內(nèi);當所述操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)為基本數(shù)據(jù)類型時,檢測所述靜態(tài)數(shù)據(jù)是否處于所述靜態(tài)鏡像信息對應(yīng)的基本類型數(shù)據(jù)區(qū)間內(nèi)。
可選的,當所述訪問指令為對所述對象字段數(shù)據(jù)區(qū)進行訪問的指令時,所述檢測所述訪問指令涉及的數(shù)據(jù)類型與所述目標數(shù)據(jù)的數(shù)據(jù)類型是否相同,包括:解析所述訪問指令,獲取所述訪問指令攜帶的操作碼和操作數(shù),并獲取所述操作碼中包含的數(shù)據(jù)類型信息;獲取所述訪問指令指向的對象的類信息;根據(jù)所述類信息獲取所述對應(yīng)的繼承結(jié)構(gòu)信息,以獲取所述目標對象每層類結(jié)構(gòu)中的引用類型數(shù)據(jù)以及基本類型數(shù)據(jù);根據(jù)所述操作數(shù)以及所述操作碼中包含的數(shù)據(jù)類型信息,遍歷每次類結(jié)構(gòu);當所述操作碼中包含的數(shù)據(jù)類型信息為引用類型時,檢測所述目標數(shù)據(jù)是否處于引用類型數(shù)據(jù)區(qū)間;當所述操作碼中包含的數(shù)據(jù)類型信息為基本數(shù)據(jù)類型時,檢測所述目標數(shù)據(jù)是否處于基本數(shù)據(jù)類型區(qū)間。
可選的,所述實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于預設(shè)范圍內(nèi),包括:實時檢測所述目標數(shù)據(jù)是否處于所述訪問指令對應(yīng)的對象的數(shù)據(jù)區(qū)間內(nèi)。
本發(fā)明實施例還提供了一種智能卡安全防護裝置,包括:
接收單元,用于接收訪問智能卡數(shù)據(jù)區(qū)的指令;
邊界檢測單元,用于對在對訪問指令進行處理時,實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于目標數(shù)據(jù)區(qū)間內(nèi);
判斷單元,用于當檢測到所述訪問指令對應(yīng)的目標數(shù)據(jù)處于目標數(shù)據(jù)區(qū)間外時,判定所述智能卡受到攻擊。
可選的,所述智能卡安全防護裝置還包括:類型檢測單元,用于獲取所述訪問指令涉及的數(shù)據(jù)類型,以及所述訪問指令指向的目標數(shù)據(jù)的數(shù)據(jù)類型,并檢測所述訪問指令涉及的數(shù)據(jù)類型與所述目標數(shù)據(jù)的數(shù)據(jù)類型是否相同; 所述判斷單元還用于:當檢測到所述訪問指令涉及的數(shù)據(jù)類型與所述目標數(shù)據(jù)的數(shù)據(jù)類型不同時,判定所述智能卡受到攻擊。
可選的,所述智能卡安全防護裝置還包括:安全控制單元,用于在所述判斷單元判定所述智能卡受到攻擊后,發(fā)送報警信息,終止訪問操作。
可選的,所述智能卡數(shù)據(jù)區(qū)包括以下至少一種:棧數(shù)據(jù)區(qū)、靜態(tài)變量數(shù)據(jù)區(qū)以及對象字段數(shù)據(jù)區(qū)。
可選的,當所述訪問指令為對所述棧數(shù)據(jù)區(qū)進行訪問時,所述類型檢測單元用于:解析所述訪問指令,獲取所述訪問指令攜帶的操作碼和操作數(shù),并獲取所述操作碼中包含的數(shù)據(jù)類型信息;以及獲取所述操作數(shù)對應(yīng)的棧數(shù)據(jù)區(qū)中的目標數(shù)據(jù)的數(shù)據(jù)類型。
可選的,所述邊界檢測單元用于:實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于所述棧數(shù)據(jù)區(qū)的預設(shè)范圍內(nèi)。
可選的,所述邊界檢測單元用于:當所述訪問指令對應(yīng)的操作包括壓棧操作或彈棧操作時,實時獲取與所述訪問指令操作相關(guān)的數(shù)據(jù)單元的位置,檢測所述數(shù)據(jù)單元的位置是否處于當前函數(shù)幀的操作數(shù)棧的上下邊界;當函數(shù)調(diào)用產(chǎn)生新的函數(shù)幀時,檢測存放函數(shù)特征信息的棧頂是否超出新函數(shù)幀的操作數(shù)棧上邊界;當函數(shù)調(diào)用返回時,檢測所述訪問指令對應(yīng)的棧頂信息彈出時是否超出整個棧的上邊界。
可選的,當所述訪問指令為對靜態(tài)變量數(shù)據(jù)區(qū)進行訪問的指令時,所述邊界檢測單元用于:解析所述訪問指令,獲取所述訪問指令攜帶的操作碼和操作數(shù),并獲取所述操作碼中包含的數(shù)據(jù)類型信息;獲取所述訪問指令對應(yīng)的目標數(shù)據(jù)包的靜態(tài)鏡像信息;根據(jù)所述靜態(tài)鏡像信息,檢測所述操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)地址是否處于所述靜態(tài)鏡像信息對應(yīng)的數(shù)據(jù)區(qū)間內(nèi)。
可選的,所述類型檢測單元用于:當所述操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)為引用類型時,檢測所述靜態(tài)數(shù)據(jù)是否處于所述靜態(tài)鏡像信息對應(yīng)的引用數(shù)據(jù)區(qū)間內(nèi);當所述操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)為基本數(shù)據(jù)類型時,檢測所述靜態(tài)數(shù)據(jù)是否處于所述靜態(tài)鏡像信息對應(yīng)的基本類型數(shù)據(jù)區(qū)間內(nèi)。
可選的,當所述訪問指令為對所述對象字段數(shù)據(jù)區(qū)進行訪問的指令時, 所述類型檢測單元用于:解析所述訪問指令,獲取所述訪問指令攜帶的操作碼和操作數(shù),并獲取所述操作碼中包含的數(shù)據(jù)類型信息;獲取所述訪問指令指向的對象的類信息;根據(jù)所述類信息獲取所述對應(yīng)的繼承結(jié)構(gòu)信息,以獲取所述目標對象每層類結(jié)構(gòu)中的引用類型數(shù)據(jù)以及基本類型數(shù)據(jù);根據(jù)所述操作數(shù)以及所述操作碼中包含的數(shù)據(jù)類型信息,遍歷每次類結(jié)構(gòu);當所述操作碼中包含的數(shù)據(jù)類型信息為引用類型時,檢測所述目標數(shù)據(jù)是否處于引用類型數(shù)據(jù)區(qū)間;當所述操作碼中包含的數(shù)據(jù)類型信息為基本數(shù)據(jù)類型時,檢測所述目標數(shù)據(jù)是否處于基本數(shù)據(jù)類型區(qū)間。
可選的,所述邊界檢測單元用于:實時檢測所述目標數(shù)據(jù)是否處于所述訪問指令對應(yīng)的對象的數(shù)據(jù)區(qū)間內(nèi)。
與現(xiàn)有技術(shù)相比,本發(fā)明實施例的技術(shù)方案具有以下優(yōu)點:
在接收到對智能卡數(shù)據(jù)區(qū)訪問的訪問指令時,檢測訪問指令對應(yīng)的目標數(shù)據(jù)是否處于目標數(shù)據(jù)區(qū)間內(nèi)。當訪問指令對應(yīng)的目標數(shù)據(jù)處于目標數(shù)據(jù)區(qū)間外時,判定智能卡受到攻擊,從而可以實時地檢測智能卡是否遭到攻擊,降低智能卡的安全隱患。
進一步,通過比較訪問指令涉及的數(shù)據(jù)類型以及目標數(shù)據(jù)的數(shù)據(jù)類型,當二者不同時,則判定智能卡遭到攻擊,可以更進一步地降低智能卡的安全隱患。
附圖說明
圖1是本發(fā)明實施例中的一種智能卡安全防護方法的流程圖;
圖2是本發(fā)明實施例中的一種智能卡安全防護裝置的結(jié)構(gòu)示意圖。
具體實施方式
對于傳統(tǒng)的Java智能卡,通常利用線下的字節(jié)碼驗證器(Byte Code Verifier,BCV)對即將燒錄到卡上的應(yīng)用程序文件進行安全性檢查,若檢查通過則允許應(yīng)用程序文件燒錄到卡上,否則給出報警信息。然而,若用戶在使用Java智能卡時下載一些應(yīng)用程序,而一些來自未知信息源的應(yīng)用程序中可 能攜帶有病毒程序,現(xiàn)有的Java智能卡檢測方法并不能對用戶自行下載的程序進行安全性檢測,導致Java智能卡存在安全隱患。
在本發(fā)明實施例中,當接收到對智能卡數(shù)據(jù)區(qū)訪問的訪問指令時,檢測訪問指令對應(yīng)的目標數(shù)據(jù)是否處于目標數(shù)據(jù)區(qū)間內(nèi)。當訪問指令對應(yīng)的目標數(shù)據(jù)處于目標數(shù)據(jù)區(qū)間外時,判定智能卡受到攻擊,從而可以實時地檢測智能卡是否遭到攻擊,降低智能卡的安全隱患。
為使本發(fā)明實施例的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實施例做詳細的說明。
本發(fā)明實施例提供了一種智能卡安全方法檢測方法,參照圖1,以下通過具體步驟進行詳細說明。
步驟S101,接收訪問智能卡數(shù)據(jù)區(qū)指令。
在本發(fā)明實施例中,智能卡數(shù)據(jù)區(qū)可以包括棧數(shù)據(jù)區(qū)、靜態(tài)變量數(shù)據(jù)區(qū)以及對象字段數(shù)據(jù)區(qū)三種數(shù)據(jù)區(qū)。接收到的訪問指令可以是對上述三種數(shù)據(jù)區(qū)中的任一數(shù)據(jù)區(qū)或多個數(shù)據(jù)區(qū)進行訪問的指令。
步驟S102,在對訪問指令進行處理時,實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于目標數(shù)據(jù)區(qū)間內(nèi)。
在本發(fā)明實施例中,可以實時檢測訪問指令對應(yīng)的目標數(shù)據(jù)是否處于目標數(shù)據(jù)區(qū)間內(nèi)。目標數(shù)據(jù)可以是指訪問指令指向的數(shù)據(jù),目標數(shù)據(jù)區(qū)間可以是在實際應(yīng)用中預先設(shè)定的用于存儲目標數(shù)據(jù)的地址區(qū)間。例如,目標數(shù)據(jù)為數(shù)據(jù)A,在實際應(yīng)用中,數(shù)據(jù)A應(yīng)存儲在地址區(qū)間B內(nèi)。
在正常情況下,當訪問指令為正常的訪問指令時,訪問指令對應(yīng)的目標數(shù)據(jù)理論上應(yīng)處于目標數(shù)據(jù)區(qū)間內(nèi)。若處于目標數(shù)據(jù)區(qū)間之外,則可以判定存在異常情況。
因此,在對訪問指令進行處理時,可以判斷訪問指令對應(yīng)的目標數(shù)據(jù)是否處于預設(shè)目標數(shù)據(jù)區(qū)間內(nèi)。當訪問指令對應(yīng)的目標數(shù)據(jù)處于目標數(shù)據(jù)區(qū)間內(nèi)時,判定訪問指令為合法指令,當前智能卡未存在被攻擊的情況;當訪問指令對應(yīng)的目標數(shù)據(jù)未處于目標數(shù)據(jù)區(qū)間內(nèi)時,則執(zhí)行步驟S103。
步驟S103,當檢測到所述訪問指令對應(yīng)的目標數(shù)據(jù)處于目標數(shù)據(jù)區(qū)間外時,判定所述智能卡受到攻擊。
在本發(fā)明實施例中,如前所述,若目標數(shù)據(jù)未處于目標數(shù)據(jù)區(qū)間內(nèi)時,則可以判定當前訪問指令可能為非法指令,因此可以判定智能卡受到攻擊。
例如,目標數(shù)據(jù)為數(shù)據(jù)A,在正常情況下,數(shù)據(jù)A存儲在地址區(qū)間B內(nèi)。在對訪問指令進行處理的過程中,若檢測到數(shù)據(jù)A處于地址區(qū)間B內(nèi),則可以判定訪問指令為合法指令;若檢測到數(shù)據(jù)A未處于地址區(qū)間B內(nèi),則判定智能卡當前受到攻擊。
在本發(fā)明實施例中,當智能卡受到攻擊時,可以立即終止訪問指令對應(yīng)的訪問操作。當終止訪問操作后,還可以發(fā)送相應(yīng)的報警信息,來告知用戶當前智能卡受到攻擊,并向用戶指示是哪個應(yīng)用程序?qū)?yīng)的訪問指令為非法的,以告知用戶哪個應(yīng)用程序存在安全隱患。
由此可見,在接收到對智能卡數(shù)據(jù)區(qū)訪問的訪問指令時,檢測訪問指令對應(yīng)的目標數(shù)據(jù)是否處于目標數(shù)據(jù)區(qū)間內(nèi)。當訪問指令對應(yīng)的目標數(shù)據(jù)處于目標數(shù)據(jù)區(qū)間外時,判定智能卡受到攻擊,從而可以實時地檢測智能卡是否遭到攻擊,降低智能卡的安全隱患。
在本發(fā)明實施例中,在接收到訪問智能卡數(shù)據(jù)區(qū)指令后,還可以實時獲取訪問指令涉及的數(shù)據(jù)類型,并將訪問指令涉及的數(shù)據(jù)類型與訪問指令指向的目標數(shù)據(jù)的數(shù)據(jù)類型進行比較。當訪問指令涉及的數(shù)據(jù)類型與目標數(shù)據(jù)的數(shù)據(jù)類型相同時,則可以判定訪問指令為合法指令;當訪問指令涉及的數(shù)據(jù)類型與目標數(shù)據(jù)的數(shù)據(jù)類型不同時,則可以判定訪問指令為非法指令,此時智能卡可能受到攻擊。
下面對本發(fā)明上述實施例中提供的智能卡安全方法防護方法在三種智能卡數(shù)據(jù)區(qū)中的執(zhí)行流程進行說明。
在本發(fā)明實施例中,當訪問指令為對棧數(shù)據(jù)區(qū)進行訪問的指令時,可以先將智能卡中的隨機存儲器(Random Access Memory,RAM)的??臻g存儲一倍,使得堆棧上的每個單元的長度均擴充一倍。即將一個2字節(jié)長度的單元擴充到4字節(jié)長度,新增的2個字節(jié)用于存放該單元存儲的數(shù)據(jù)的類型信 息。
在對棧數(shù)據(jù)區(qū)進行訪問時,可以實時地對棧數(shù)據(jù)區(qū)的訪問過程中涉及的數(shù)據(jù)進行邊界檢查。
假設(shè)RAM中的棧結(jié)構(gòu)的地址增長順序是自下而上的,通常在智能卡系統(tǒng)里,用到的棧是一個雙向棧,即函數(shù)調(diào)用時創(chuàng)建的函數(shù)幀是自下而上生長,而函數(shù)的特征信息會被保存到棧頂,是自上而下生長。
當訪問指令對應(yīng)的操作為壓棧操作時,可以實時檢測壓棧操作涉及的數(shù)據(jù)單元的位置是否超出當前函數(shù)幀的操作數(shù)棧的上邊界。當超出上邊界時,則可以判定當前智能卡遭到攻擊;當未超出上邊界時,則可以判定當前訪問指令為正常指令。
當訪問指令對應(yīng)的操作為彈棧操作時,可以實時檢測彈棧操作涉及的數(shù)據(jù)單元的位置是否超出當前函數(shù)幀的操作數(shù)棧的下邊界。當超出下邊界時,則可以判定當前智能卡遭到攻擊;當未超出上邊界時,則可以判定當前訪問指令為正常指令。
此外,當進行函數(shù)調(diào)用時會創(chuàng)建新的函數(shù)幀,而之前舊的函數(shù)幀的特征信息會被保存到棧頂??梢詫崟r檢測存放函數(shù)特征信息的棧頂是否超出新函數(shù)幀的操作數(shù)的上邊界。當超出上邊界時,判定當前智能卡遭到攻擊。
類似地,當函數(shù)調(diào)用返回時,需要將當期訪問指令對應(yīng)的函數(shù)幀清除,恢復其調(diào)用者的幀。此時,可以檢測調(diào)用者的棧頂信息被彈出時,是否超出整個棧的上邊界。當檢測到彈出的棧頂信息超出整個棧的上邊界時,判定當前智能卡遭到攻擊。
在對棧的訪問增加邊界檢查的同時,還可以對棧的訪問增加類型檢查。對數(shù)據(jù)單元內(nèi)的數(shù)據(jù)進行讀操作和寫操作時,均需要滿足數(shù)據(jù)類型匹配原則。對于任意涉及棧操作的訪問指令,可以對其進行解析以獲取對應(yīng)的操作數(shù)和操作碼。對操作數(shù)對應(yīng)的棧數(shù)據(jù)區(qū)中的目標數(shù)據(jù)的數(shù)據(jù)類型與操作碼中包含的數(shù)據(jù)類型進行比較,當二者相同時,可以判定訪問指令為合法指令;當二者不同時,判定當前智能卡遭到攻擊,立即終止程序并報錯。
當訪問指令為對靜態(tài)變量數(shù)據(jù)區(qū)進行訪問的指令時,也可以對靜態(tài)變量 數(shù)據(jù)的訪問增加邊界檢查和類型檢查。
在具體應(yīng)用中,對靜態(tài)變量的訪問指令涉及到智能卡上某個數(shù)據(jù)包對應(yīng)的靜態(tài)鏡像。按照預設(shè)的對訪問指令的解析方式,將訪問指令定位到數(shù)據(jù)包C后,可以獲取數(shù)據(jù)包C的靜態(tài)鏡像信息。
在本發(fā)明實施例中,數(shù)據(jù)包C的靜態(tài)鏡像信息可以包括:數(shù)據(jù)包C的靜態(tài)變量存儲的地址區(qū)間、數(shù)據(jù)包C內(nèi)包含有引用類型的靜態(tài)變量的數(shù)量等。通過數(shù)據(jù)包C的靜態(tài)鏡像信息對訪問指令進行邊界檢查和類型檢查。
當對訪問指令進行解析后,獲取到的操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)地址位于數(shù)據(jù)包C的靜態(tài)鏡像的地址區(qū)間內(nèi)時,可以判定邊界檢查成功,也即當前訪問指令為合法指令;否則,判定邊界檢查失敗,也即當前訪問指令為非法指令。
當獲取到的訪問指令的操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)是引用類型,且位于靜態(tài)鏡像的引用數(shù)據(jù)區(qū)間內(nèi)時,可以判定類型檢查成功,也即訪問指令涉及的數(shù)據(jù)類型與目標數(shù)據(jù)類型相同,當前訪問指令為合法指令。當獲取到的訪問指令的操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)是基本數(shù)據(jù)類型,且位于靜態(tài)鏡像的基本類型數(shù)據(jù)區(qū)間內(nèi),則可以判定類型檢查成功,也即訪問指令涉及的數(shù)據(jù)類型與目標數(shù)據(jù)類型相同,當前訪問指令為合法指令。否則,視為類型檢查失敗,當前訪問指令為非法指令。
相類似地,當訪問指令為對對象字段數(shù)據(jù)區(qū)進行訪問的指令時,也可以對對象字段數(shù)據(jù)區(qū)的訪問增加邊界檢查和類型檢查。
在實際應(yīng)用中,在對對象字段數(shù)據(jù)的訪問指令執(zhí)行之前,已經(jīng)有對象引用數(shù)據(jù)預先被存儲到棧上。該對象引用按照預定義的規(guī)則被解析成相對應(yīng)的對象地址。讀取對象地址上定義的對象頭,獲取該對象對應(yīng)的類信息以及包信息。根據(jù)類信息可以獲取相關(guān)的繼承結(jié)構(gòu)信息,以及當前類的引用類型數(shù)據(jù)個數(shù)。依據(jù)上述信息劃分當前對象的字段區(qū)間,包括每層類結(jié)構(gòu)里的引用類型數(shù)據(jù)和基本類型數(shù)據(jù)。根據(jù)訪問指令中的操作數(shù)以及操作碼中包含的數(shù)據(jù)類型信息,遍歷每層類結(jié)構(gòu),包括各種子類結(jié)構(gòu)以及根結(jié)構(gòu)。
當操作碼中包含的數(shù)據(jù)類型信息為引用類型時,檢測目標數(shù)據(jù)是否處于引用類型數(shù)據(jù)區(qū)間。當目標數(shù)據(jù)處于引用類型數(shù)據(jù)區(qū)間內(nèi)時,判定類型檢測 成功。當操作碼中包含的數(shù)據(jù)類型信息為基本數(shù)據(jù)類型時,檢測目標數(shù)據(jù)是否處于基本數(shù)據(jù)類型區(qū)間內(nèi)。當目標數(shù)據(jù)處于基本數(shù)據(jù)類型區(qū)間內(nèi)時,判定類型檢測成功。
當目標數(shù)據(jù)處于訪問指令對應(yīng)對象的數(shù)據(jù)區(qū)間內(nèi)時,可以判定邊界檢查成功;否則,判定邊界檢查失敗。
可以理解的是,在本發(fā)明實施例中,既可以只通過判斷訪問指令對應(yīng)的目標數(shù)據(jù)是否處于目標數(shù)據(jù)區(qū)間內(nèi)來獲知智能卡是否受到攻擊,也可以只通過判斷訪問指令涉及的數(shù)據(jù)類型與目標數(shù)據(jù)的數(shù)據(jù)類型是否相同來獲知智能手機是否受到攻擊。還可以同時通過判斷訪問指令對應(yīng)的目標數(shù)據(jù)是否處于目標數(shù)據(jù)區(qū)間內(nèi),以及數(shù)據(jù)類型與目標數(shù)據(jù)的數(shù)據(jù)類型是否相同,來共同獲知智能卡是否受到攻擊。
參照圖2,給出了本發(fā)明實施例中的一種智能卡安全防護裝置20,包括:接收單元201、邊界檢測單元202以及判斷單元203,其中:
接收單元201,用于接收訪問智能卡數(shù)據(jù)區(qū)的指令;
邊界檢測單元202,用于對在對訪問指令進行處理時,實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于目標數(shù)據(jù)區(qū)間內(nèi);
判斷單元203,用于當檢測到所述訪問指令對應(yīng)的目標數(shù)據(jù)處于目標數(shù)據(jù)區(qū)間外時,判定所述智能卡受到攻擊。
在具體實施中,所述智能卡安全防護裝置20還可以包括:類型檢測單元204,用于獲取所述訪問指令涉及的數(shù)據(jù)類型,以及所述訪問指令指向的目標數(shù)據(jù)的數(shù)據(jù)類型,并檢測所述訪問指令涉及的數(shù)據(jù)類型與所述目標數(shù)據(jù)的數(shù)據(jù)類型是否相同;
所述判斷單元203還可以用于:當檢測到所述訪問指令涉及的數(shù)據(jù)類型與所述目標數(shù)據(jù)的數(shù)據(jù)類型不同時,判定所述智能卡受到攻擊。
在具體實施中,所述智能卡安全防護裝置20還可以包括:安全控制單元205,用于在所述判斷單元判定所述智能卡受到攻擊后,發(fā)送報警信息,終止訪問操作。
在具體實施中,所述智能卡數(shù)據(jù)區(qū)可以包括以下至少一種:棧數(shù)據(jù)區(qū)、靜態(tài)變量數(shù)據(jù)區(qū)以及對象字段數(shù)據(jù)區(qū)。
在具體實施中,當所述訪問指令為對所述棧數(shù)據(jù)區(qū)進行訪問時,所述類型檢測單元204可以用于:解析所述訪問指令,獲取所述訪問指令攜帶的操作碼和操作數(shù),并獲取所述操作碼中包含的數(shù)據(jù)類型信息;以及獲取所述操作數(shù)對應(yīng)的棧數(shù)據(jù)區(qū)中的目標數(shù)據(jù)的數(shù)據(jù)類型。
在具體實施中,所述邊界檢測單元202可以用于:實時檢測所述訪問指令對應(yīng)的目標數(shù)據(jù)是否處于所述棧數(shù)據(jù)區(qū)的預設(shè)范圍內(nèi)。
在具體實施中,所述邊界檢測單元202可以用于:當所述訪問指令對應(yīng)的操作包括壓棧操作或彈棧操作時,實時獲取與所述訪問指令操作相關(guān)的數(shù)據(jù)單元的位置,檢測所述數(shù)據(jù)單元的位置是否處于當前函數(shù)幀的操作數(shù)棧的上下邊界;當函數(shù)調(diào)用產(chǎn)生新的函數(shù)幀時,檢測存放函數(shù)特征信息的棧頂是否超出新函數(shù)幀的操作數(shù)棧上邊界;當函數(shù)調(diào)用返回時,檢測所述訪問指令對應(yīng)的棧頂信息彈出時是否超出整個棧的上邊界。
在具體實施中,當所述訪問指令為對靜態(tài)變量數(shù)據(jù)區(qū)進行訪問的指令時,所述邊界檢測單元202可以用于:
解析所述訪問指令,獲取所述訪問指令攜帶的操作碼和操作數(shù),并獲取所述操作碼中包含的數(shù)據(jù)類型信息;
獲取所述訪問指令對應(yīng)的目標數(shù)據(jù)包的靜態(tài)鏡像信息;
根據(jù)所述靜態(tài)鏡像信息,檢測所述操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)地址是否處于所述靜態(tài)鏡像信息對應(yīng)的數(shù)據(jù)區(qū)間內(nèi)。
在具體實施中,所述類型檢測單元204可以用于:
當所述操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)為引用類型時,檢測所述靜態(tài)數(shù)據(jù)是否處于所述靜態(tài)鏡像信息對應(yīng)的引用數(shù)據(jù)區(qū)間內(nèi);
當所述操作數(shù)對應(yīng)的靜態(tài)數(shù)據(jù)為基本數(shù)據(jù)類型時,檢測所述靜態(tài)數(shù)據(jù)是否處于所述靜態(tài)鏡像信息對應(yīng)的基本類型數(shù)據(jù)區(qū)間內(nèi)。
在具體實施中,當所述訪問指令為對所述對象字段數(shù)據(jù)區(qū)進行訪問的指 令時,所述類型檢測單元204可以用于:
解析所述訪問指令,獲取所述訪問指令攜帶的操作碼和操作數(shù),并獲取所述操作碼中包含的數(shù)據(jù)類型信息;
獲取所述訪問指令指向的對象的類信息;根據(jù)所述類信息獲取所述對應(yīng)的繼承結(jié)構(gòu)信息,以獲取所述目標對象每層類結(jié)構(gòu)中的引用類型數(shù)據(jù)以及基本類型數(shù)據(jù);
根據(jù)所述操作數(shù)以及所述操作碼中包含的數(shù)據(jù)類型信息,遍歷每次類結(jié)構(gòu);
當所述操作碼中包含的數(shù)據(jù)類型信息為引用類型時,檢測所述目標數(shù)據(jù)是否處于引用類型數(shù)據(jù)區(qū)間;
當所述操作碼中包含的數(shù)據(jù)類型信息為基本數(shù)據(jù)類型時,檢測所述目標數(shù)據(jù)是否處于基本數(shù)據(jù)類型區(qū)間。
在具體實施中,所述邊界檢測單元202可以用于:實時檢測所述目標數(shù)據(jù)是否處于所述訪問指令對應(yīng)的對象的數(shù)據(jù)區(qū)間內(nèi)。
本領(lǐng)域普通技術(shù)人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,該程序可以存儲于一計算機可讀存儲介質(zhì)中,存儲介質(zhì)可以包括:ROM、RAM、磁盤或光盤等。
雖然本發(fā)明披露如上,但本發(fā)明并非限定于此。任何本領(lǐng)域技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),均可作各種更動與修改,因此本發(fā)明的保護范圍應(yīng)當以權(quán)利要求所限定的范圍為準。