本發(fā)明涉及智能卡技術領域,尤其涉及一種JAVA卡幀的邊界檢查方法。
背景技術:
隨著電子政務和電子商務的發(fā)展,Java卡的應用越來越廣泛,為解決用戶對一卡多用的需要,目前多應用的Java卡越來越普遍,而應用之間的安全問題也日益重要。
現有的攻擊手段中可通過激光攻擊java卡的存儲介質或者下載惡意Applet應用等方式,修改java方法的局部變量索引或者增減彈棧壓棧操作,對方法幀的操作數棧和局部變量區(qū)進行越界訪問,非法獲取卡的存儲數據。Java卡需要提供一種幀的邊界檢查方法,識別針對Java虛擬機的越界訪問,即保證應用不能訪問權限之外的棧數據。
技術實現要素:
為了解決Java卡平臺現有技術中存在的上述問題,本發(fā)明提供了一種JAVA卡幀的邊界檢查方法。
本發(fā)明采取的技術方案如下:
一種JAVA卡幀的邊界檢查方法,包括如下步驟:
步驟S1:Java卡虛擬機執(zhí)行應用的Java方法時,建立一個方法幀,并壓入棧,記錄方法幀的起始地址。同時記錄兩個范圍:合法操作數范圍和合法局部變量索引范圍。
步驟S2:所述Java卡虛擬機執(zhí)行所述所述Java方法的字節(jié)碼時如需訪問棧數據,獲取需要訪問的棧數據類型。
步驟S3:根據所述數據類型;如果當前操作數據是局部變量,則執(zhí)行步驟A1;如果當前操作數據是操作數,則執(zhí)行步驟B1。
步驟A1:判斷局部變量索引是否在合法局部變量索引范圍內,是則執(zhí)行步驟S4,否則拋出異常。
步驟B1:判斷操作數地址是否在合法操作數范圍內,是則執(zhí)行步驟S4,否則拋出異常。
步驟S4:Java卡虛擬機執(zhí)行當前字節(jié)碼。
進一步的,所述的記錄兩個范圍,其特征是:所述Java卡虛擬機解析所述應用的Java方法的method_header_info數據結構中的max_stack,max_locals,nargs信息結合所述方法幀的起始地址信息。使用0作為合法局部變量索引范圍的下邊界;使用方法幀下邊界加上(max_locals+nargs-1)作為合法局部變量索引范圍的上邊界;使用方法幀起始地址+((max_locals+nargs)*2)作為合法操作數范圍的下邊界;使用合法操作數范圍的下邊界加上(max_stack*2)作為合法操作數范圍的上邊界。
本發(fā)明的有益效果在于:本發(fā)明實現了Java卡的多應用安全管理,尤其是通過邊界檢查的方法控制棧幀數據的訪問,提高了多應用共存的安全性。
附圖說明
圖1是一個Java方法在java卡虛擬機上的執(zhí)行流程圖。
圖2是合法操作數范圍和合法局部變量索引范圍的位置示意圖。
圖3是以sstore_2字節(jié)碼為示例的執(zhí)行流程圖。
具體實施方式
下面將結合附圖和具體實施例對本發(fā)明做進一步的說明。
圖1指出了一個java方法在java卡虛擬機上的執(zhí)行流程。Java卡虛擬機執(zhí)行該方法時,會為其建立一個方法幀,并壓入棧,記錄方法幀的起始地址。同時記錄兩個范圍:合法操作數范圍和合法局部變量索引范圍。然后依次執(zhí)行java方法中的字節(jié)碼。直至java方法執(zhí)行結束,方法幀彈出棧。
圖2指出了合法操作數范圍和合法局部變量索引范圍的位置示意圖。從方法幀的起始地址開始,是局部變量區(qū)。因此合法局部變量范圍為方法幀起始地址到((max_locals+nargs)*2)。則合法局部變量索引范圍為0到(max_locals+nargs-1)。局部變量區(qū)上方是操作數區(qū)。因此合法操作數范圍為(方法幀起始地址+((max_locals+nargs)*2))到(方法幀起始地址+(max_locals+nargs)*2+max_stack*2)。
圖3是上述Java方法中sstore_2字節(jié)碼的執(zhí)行流程圖。檢查字節(jié)碼所要寫入索引為2的局部變量是否在合法局部變量索引范圍內,在則繼續(xù)執(zhí)行,不在則拋出異常結束。從幀中將兩個字節(jié)數據彈棧,并將幀頂指針減2存儲。檢查幀頂指針是否在合法操作數范圍內,在則繼續(xù)執(zhí)行,不在則拋出異常結束。將兩個字節(jié)數據寫入到局部變量中。
顯然,本領域的技術人員可以對本發(fā)明進行各種改動和變形而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變形屬于本發(fā)明權利要求及其等同技術的范圍之內,則本發(fā)明也意圖包含這些改動和變型在內。