《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > Java卡虛擬機的安全攻擊技術(shù)及防御技術(shù)研究
Java卡虛擬機的安全攻擊技術(shù)及防御技術(shù)研究
2017年電子技術(shù)應(yīng)用第10期
崔炳榮1,,2,,劉 亮1,2,,甘 杰1,,2,張海峰1,,陳 雷1,,2,尹國龍3
1.北京智芯微電子科技有限公司,,國家電網(wǎng)公司重點實驗室電力芯片設(shè)計分析實驗室,,北京100192; 2.北京智芯微電子科技有限公司,,北京市電力高可靠性集成電路設(shè)計工程技術(shù)研究中心,,北京100192; 3.國網(wǎng)寧夏電力公司電力科學研究院,,寧夏 銀川750002
摘要: Java卡是一個基于Java的智能卡操作系統(tǒng),,Java卡能夠動態(tài)更新。著重介紹了在Java卡系統(tǒng)實現(xiàn)過程中需要關(guān)注的各種基于Java卡虛擬機的安全點,,研究了Java卡虛擬機運行過程中的脆弱性,,總結(jié)了其在安全方面面臨的各種威脅,并進一步研究了這些安全威脅可能產(chǎn)生的影響,。最后針對可能出現(xiàn)的不同的安全攻擊,,提出并完成了相應(yīng)的安全防御措施。實驗證明,,這些防御措施能夠有效地保障Java卡系統(tǒng)的安全性,。
關(guān)鍵詞: Java卡 虛擬機 攻擊 防御
中圖分類號: TN409
文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.179014
中文引用格式: 崔炳榮,劉亮,,甘杰,,等. Java卡虛擬機的安全攻擊技術(shù)及防御技術(shù)研究[J].電子技術(shù)應(yīng)用,2017,,43(10):12-15,,19.
英文引用格式: Cui Bingrong,,Liu Liang,Gan Jie,,et al. The offensive and defensive technology of the Java card virtual machine[J].Application of Electronic Technique,,2017,43(10):12-15,,19.
The offensive and defensive technology of the Java card virtual machine
Cui Bingrong1,,2,Liu Liang1,,2,,Gan Jie1,2,,Zhang Haifeng1,,Chen Lei1,2,,Yin Guolong3
1.State Grid Key Laboratory of Power Industrial Chip Design and Analysis Technology,, Beijing Smart-Chip Microelectronics Technology Co.,Ltd.,,Beijing 100192,,China; 2.Beijing Engineering Research Center of High-reliablity IC with Power Industrial Grade,, Beijing Smart-Chip Microelectronics Technology Co.,,Ltd.,Beijing 100192,,China,; 3.State Grid Ningxia Electric Power Company,Yinchuan 750002,,China
Abstract: Java card is a smart card running a small Java based operating system that can dynamically be upgraded. This article introduce developers to the security issues of the Java card virtual machine that should be taken into account when implementing a Java card platform. This article studies vulnerabilities of the Java card virtual machine and tries to identify its shortcomings. Further studies illustrate the impact of various threats. Finally some defensive technology are presented to counteract the threats. The test results can tell the defensive technology is valid for the security of the Java card platform.
Key words : Java card,;virtual machine;offensive,;defensive

0 引言

    金融,、移動通信、身份認證等領(lǐng)域?qū)?a class="innerlink" href="http://forexkbc.com/tags/Java卡" title="Java卡" target="_blank">Java卡多應(yīng)用軟件平臺的需求在近幾年變得日益迫切,,多應(yīng)用軟件平臺支持產(chǎn)品發(fā)行后還可以后下載應(yīng)用,,所以Java卡技術(shù)在給使用者帶來開放式便利性的同時,也帶來了極大的安全風險,。針對智能卡嵌入式軟件安全技術(shù)的研究,,已經(jīng)成為智能卡行業(yè)近兩年的熱點。北京智芯微電子科技有限公司的Java卡團隊在Java卡軟件平臺的安全攻擊防御方面做了很多工作,,本文主要介紹其基于Java卡虛擬機的安全攻擊及防御技術(shù)方面的研究成果,。

1 Java卡軟件平臺簡介

    Java卡軟件平臺是智能卡嵌入式軟件的發(fā)展趨勢,。目前金融卡及部分其他行業(yè)卡片都已經(jīng)要求是平臺卡,,電信行業(yè)先前已有成熟的Java平臺卡發(fā)行,。基于移動支付的卡片已經(jīng)明確規(guī)定是多應(yīng)用的平臺卡,,而Java平臺卡是智能卡平臺卡的絕對主流,。

    Java卡系統(tǒng)架構(gòu)如圖1所示。

dldz2-t1.gif

    Java卡產(chǎn)品應(yīng)用于金融以及移動支付領(lǐng)域,,其安全性是不容忽視的,,需要很高的安全保障才可以進入市場。如圖2所示,,Java卡平臺需要達到31分以上才可獲得EMVco的平臺安全證書(參考Brightsight機構(gòu)的數(shù)據(jù)),。

dldz2-t2.gif

    Java卡虛擬機是Java卡軟件平臺的引擎,在整個平臺中起著核心的作用,,其實現(xiàn)了一個軟CPU,,用于解釋執(zhí)行Java卡代碼(包括Java卡平臺的系統(tǒng)代碼以及Java卡應(yīng)用代碼),它維護下面一些主要的系統(tǒng)資源:

    (1)PC:程序地址指針,;

    (2)棧:用于維護Java卡應(yīng)用執(zhí)行時的方法調(diào)用現(xiàn)場,;

    (3)寄存器:用于維護棧幀結(jié)構(gòu)的寄存器變量;

    (4)字節(jié)碼解釋器:解析應(yīng)用代碼編譯出的目標字節(jié)碼,。

    通過攻擊以上資源,,攻擊者可以破壞Java卡虛擬機,獲取到一些卡片敏感數(shù)據(jù),,甚至可以控制代碼流程非法跳轉(zhuǎn)到攻擊者的惡意代碼進行執(zhí)行,。

2 Java卡虛擬機的安全攻擊研究

2.1 針對虛擬機的攻擊技術(shù)研究

    Java卡軟件平臺是否安全,其重點在于:

    (1)黑客是不是能隨意安裝應(yīng)用程序,;

    (2)虛擬機如何抵御惡意代碼,;

    (3)如何抵御旁路攻擊;

    (4)如何抵御程序執(zhí)行流程和數(shù)據(jù)被惡意干擾,;

    (5)平臺是否遵守硬件的安全要求,。

    對于以上第(1)種攻擊可以通過GP(GlobalPlatform)技術(shù)中的安全通道等方式進行防御;對于第(5)種,,軟件平臺會依賴芯片平臺的安全保障,。而對于其余的(2)、(3),、(4)種,,Java卡虛擬機本身需要具備很強的防攻擊能力,承擔重要的安全防御角色,。

    研究發(fā)現(xiàn),,針對Java卡軟件平臺較為有效的攻擊方式有以下幾種,。

    (1)混淆數(shù)據(jù)類型攻擊

    Java卡支持byte、short,、int和 reference(對象)數(shù)據(jù),,這些數(shù)據(jù)在卡片上的物理存儲方式一致。攻擊者可以使用不同類型數(shù)組對象之間的混淆訪問,、簡單對象和數(shù)組對象之間的混淆訪問,、基本類型數(shù)據(jù)和對象數(shù)據(jù)之間的混淆訪問、偽造對象,、對象域作為數(shù)組成員等方式進行攻擊,。其目的在于迷惑虛擬機讀取越界數(shù)據(jù)給卡外,從而造成嚴重的信息泄露,。

    (2)操作數(shù)棧攻擊

    在Java卡中棧是方法運行的基礎(chǔ),,棧中保存了調(diào)用方法的現(xiàn)場信息,也為被調(diào)用方法提供了運行時的操作空間,。對當前方法操作數(shù)棧進行攻擊(比如通過持續(xù)壓?;蚱渌绞酵黄茥吔?,進而改變方法棧邊界外的數(shù)據(jù)就能破壞掉整個系統(tǒng)的有序運行狀態(tài),,攻擊者可以通過這種方式修改PC指針,,使程序跳轉(zhuǎn)到惡意代碼地址進行執(zhí)行,也可以改變方法對??臻g資源的占用情況導致其他不可預(yù)期的錯誤,。攻擊者通過上述方法能有效提升非法獲取信息的可能性。

    (3)局部變量攻擊

    局部變量存在于方法棧中,,針對局部變量的攻擊手段有許多種,,產(chǎn)生的效果也不盡相同。比如可以對cap文件中對應(yīng)方法的局部變量大小信息進行修改,,達到突破局部變量邊界,,造成數(shù)據(jù)和代碼混亂的目的;也可以針對局部變量的讀寫進行非法操作(比如將short數(shù)據(jù)當作對象數(shù)據(jù)讀取使用),,以達到非法數(shù)據(jù)訪問的目的,。

    (4)字節(jié)碼篡改攻擊

    字節(jié)碼執(zhí)行流程如圖3所示。

dldz2-t3.gif

    通過激光攻擊等手段更改數(shù)據(jù)總線上讀出的字節(jié)碼,,按照圖3所示使得虛擬機跳轉(zhuǎn)到錯誤字節(jié)碼解釋執(zhí)行,,導致不可預(yù)知的后果。

    借助標準的JCDK工具,,手動修改字節(jié)碼也可以達到激光攻擊同樣的效果,。人工修改的方式可以控制攻擊的預(yù)期效果,比激光攻擊更加有效和可控,,危害性更高,。

2.2 虛擬機的攻擊方式

    目前主流的攻擊方式為準備一個CAP,,采用以下方式:(1)數(shù)據(jù)類型混淆;(2)破壞虛擬機棧幀結(jié)構(gòu),;(3)破壞虛擬機解釋執(zhí)行流程,。

    對CAP進行篡改,以自定義方法或者Java Card平臺標準API方法為切入點,,對卡片進行安全攻擊,。另外還可以采用激光篡改卡片內(nèi)部數(shù)據(jù)的攻擊方式。

2.2.1 混合攻擊示例

    首先編寫源文件,,然后對源文件目標文件即CAP文件里的字節(jié)碼進行惡意修改,將其修改為CAP’,,然后下載到Java卡軟件平臺上執(zhí)行,,從而達到攻擊目的。

    源文件如下:

Public void process(APDU apdu) {

        if (selectingApplet()) {

            return;

        }

        byte[] buf = apdu.getBuffer();

switch (buf[ISO7816.OFFSET_INS]) {

            case (byte) 0x00:

            M1(buf);

    apdu.setOutgoingAndSend((short) 0, (short) 2);

            break;

        default:

    ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);

        }

    }

    Public void M1(byte[] buf) {

        byte[] ba = newbyte[2];

        shorti = 258;

        Util.setShort(buf, (short) 0, i);

    }

2.2.2 修改CAP文件

    通過修改源文件編譯出來的CAP文件,,即修改method組件中M1方法的method_head_info值,,由0x0322修改為其他兩字節(jié)的任意數(shù)值(通常會從0x0000遍歷到0xFFFF),然后重新生成新的攻擊CAP′文件,,下載到Java卡軟件平臺上選擇并執(zhí)行,。CAP文件中方法信息存在于方法組件中,方法組件信息如圖4所示,。

dldz2-t4.gif

    圖4中出現(xiàn)的字段信息如下:

    (1)tag:虛擬機規(guī)范中定義的方法組件的標識,,值為7

    (2)size:方法組件數(shù)據(jù)長度

    (3)handler_count:異常個數(shù)

    (4)exception_handler_info:異常信息

    (5)method_info:所有的方法信息標識

    (6)methods[n]:第n個方法的信息

    (7)method_header_info:方法頭信息標識

    (8)Data:方法頭信息的數(shù)據(jù)

    (9)flags:標志位信息

    (10)max_stack:方法最大棧使用量

    (11)nargs:參數(shù)個數(shù)

    (12)max_locals:局部變量個數(shù)

    (13)bytecodes:方法內(nèi)容對應(yīng)的字節(jié)碼

2.2.3 測試結(jié)果

    圖4中method_header_info前兩個字代表了方法的操作數(shù)棧的大小、參數(shù)的個數(shù)和局部變量的個數(shù),。篡改此數(shù)據(jù)使其從0000-ffff遍歷,,期望卡返回數(shù)據(jù)為0x0102,或者拋出異常,。安全的Java卡軟件平臺不會返回其他任何數(shù)據(jù),。如果虛擬機不夠安全,執(zhí)行過程中可能會拋出各種數(shù)據(jù),。

3 Java卡虛擬機的安全防御技術(shù)研究及實現(xiàn)

    根據(jù)上面章節(jié)的分析明確了Java卡虛擬機內(nèi)核被攻擊的重點所在,。接著從以下幾個方面來闡述如何對Java卡虛擬機進行安全防護。

3.1 棧幀保護

    (1)操作數(shù)棧完整性檢查

    在方法調(diào)用時記錄操作數(shù)?;跅5椎钠莆恢?,作為現(xiàn)場信息的一部分記錄在幀頭中,在方法返回時從幀頭信息中讀取出來并和SP(棧當前位置指針)進行比對,,兩值應(yīng)該相等,。如果不等,說明棧幀的出入數(shù)據(jù)不對應(yīng),,表明是操作數(shù)棧受到了惡意攻擊,。

    (2)操作數(shù)棧邊界檢查

    在進行操作數(shù)的出入棧操作時,,檢查其訪問到的地址邊界是否超出操作數(shù)棧的邊界,超出則表示異常發(fā)生,。

    (3)參數(shù)和局部變量邊界檢查

    在方法執(zhí)行過程中對于參數(shù)和局部變量的訪問應(yīng)該符合方法頭中對于其個數(shù)的限定,,并保障其地址范圍在此方法棧的起始位置和操作數(shù)棧之間(不同的棧結(jié)構(gòu)設(shè)計可能有不同的限制條件)。

    (4)方法棧的參數(shù)準確性檢查

    方法的最大棧使用情況和局部變量數(shù)據(jù)都是方法運行時數(shù)據(jù),,對于這兩個值的修改不會影響方法的正常執(zhí)行,。但是參數(shù)是先于方法執(zhí)行被壓入棧中的,如果方法頭中參數(shù)個數(shù)被修改,,方法運行過程中的安全機制會進行相關(guān)防護,。比如參數(shù)個數(shù)被改小,那么正常的參數(shù)訪問就可能被參數(shù)邊界檢查判錯,;如果參數(shù)改大,,會導致方法出棧時上一個方法的執(zhí)行環(huán)境被修改從而產(chǎn)生連鎖的防御反應(yīng)。

    以上所有防護在產(chǎn)生問題的時候軟件平臺都會認為受到了惡意攻擊,,應(yīng)該報錯并采取進一步的防御措施,,如安全審計、卡片靜默等,。

3.2 字節(jié)碼保護

3.2.1 運行時類型檢查

    (1)byte/short/int/reference類型數(shù)組檢查

    規(guī)范中定義的數(shù)組類型分別為byte數(shù)組,、short數(shù)組、int數(shù)組和reference型數(shù)組,,數(shù)組對象在字節(jié)碼層面的訪問入口為讀指令BALOAD,、SALOAD、IALOAD,、AALOAD和寫指令BASTORE,、SASTORE、IASTORE,、AASTORE,。軟件平臺通過對象數(shù)據(jù)結(jié)構(gòu)的設(shè)計可以記錄當前數(shù)組對象的具體類型,進而在字節(jié)碼指令訪問時進行對應(yīng)性檢查來屏蔽掉不合法的數(shù)組對象訪問,。

    (2)簡單對象/數(shù)組對象混淆檢查

    與數(shù)組類型檢查類似,,簡單對象和數(shù)組對象也可以通過對象數(shù)據(jù)結(jié)構(gòu)中的相應(yīng)標識來進行區(qū)分。在訪問簡單對象的字節(jié)碼指令中應(yīng)該進行判斷保證此對象非數(shù)組對象,,反之亦然,。

    (3)對象/基本數(shù)據(jù)類型(byte/short/int)混淆檢查

    對于這種混淆檢查需要設(shè)計一種新的防護方式:添加一個類型棧。此棧記錄操作數(shù)棧中數(shù)據(jù)的類型,。執(zhí)行字節(jié)碼指令時按照此指令對操作數(shù)類型的要求,,結(jié)合類型棧的記錄進行一致性判斷。這樣就保證了棧數(shù)據(jù)訪問的一致性。

3.2.2 對象/數(shù)組/靜態(tài)域邏輯邊界檢查    

    Java卡虛擬機在訪問數(shù)組時需要做數(shù)組邊界的運行時檢查,;對象管理數(shù)據(jù)結(jié)構(gòu)中應(yīng)記錄相應(yīng)的size(針對域和方法),,防止攻擊者訪問到非法空間;靜態(tài)域的讀寫訪問時檢查當前訪問的包的靜態(tài)域邊界,。

3.2.3 防篡改檢查

    為了防止錯誤注入攻擊,,可適當添加關(guān)鍵數(shù)據(jù)的冗余校驗機制,保證程序運行流程不受攻擊干擾,。

    以上所有檢查在發(fā)現(xiàn)錯誤時都表示系統(tǒng)異常,,應(yīng)采取相應(yīng)的安全措施。

3.3 特殊數(shù)據(jù)保護

    在Java Card規(guī)范中定義了全局對象和入口點對象,,這些對象的訪問不受防火墻控制,,同時也沒有外部接口供應(yīng)用創(chuàng)建。Java Card平臺自身不受限制,,可以使用私有方式創(chuàng)建一些全局對象或者入口點對象來承載特殊的使命(如內(nèi)部的快速訪問等),。為了保證這些數(shù)據(jù)不被非法訪問,需要添加對應(yīng)的防護手段,。APDU數(shù)組作為全局對象不僅負責命令數(shù)據(jù)的傳輸,在標準外部接口中還被當做返回數(shù)據(jù)緩沖區(qū)使用,,這些數(shù)據(jù)具有一定的敏感性以防止被非法竊取,,需要在使用后及時清理。

3.4 執(zhí)行流程保護

    針對此攻擊可以采取在下載器中進行方法跳轉(zhuǎn)指令的越界判斷,,如果有越界情況發(fā)生,,則不允許外部下載。另外為了防止執(zhí)行時的字節(jié)碼流程跑飛,,也可以在下載時記錄方法邊界,,在字節(jié)碼執(zhí)行時進行越界判斷。此實現(xiàn)機制稍微復雜一些,,會增加下載器的處理復雜度以及影響執(zhí)行時的性能,。

3.5 虛擬機系統(tǒng)關(guān)鍵數(shù)據(jù)的保護

    虛擬機中的關(guān)鍵系統(tǒng)變量可以進行備份處理,在相應(yīng)的流程節(jié)點上進行比對,,這樣可以防止關(guān)鍵數(shù)據(jù)被惡意篡改,;也可以結(jié)合有安全功能的Java芯片提供的保護機制,進行軟硬件的聯(lián)合防護,,以達到關(guān)鍵系統(tǒng)變量不能被惡意代碼隨意更改的目的,。

4 測試結(jié)果及結(jié)論

    北京智芯微電子科技有限公司針對Java卡虛擬機安全攻擊的研究成果,設(shè)計開發(fā)了具有自主知識產(chǎn)權(quán)的安全攻擊用例庫,,包含如下幾個方面:API攻擊,、邊界攻擊、執(zhí)行流程攻擊、局部變量攻擊,、操作數(shù)棧攻擊,、參數(shù)攻擊、共享接口攻擊,、特殊數(shù)據(jù)訪問攻擊,、事務(wù)機制攻擊、類型混淆攻擊和防火墻攻擊,。腳本示意如圖5所示,。

dldz2-t5.gif

    北京智芯微電子科技有限公司自研的Java卡軟件平臺通過了自研安全攻擊平臺的攻擊測試。此外通過了金融卡檢測中心(BCTC)的安全攻擊測試,。金融卡檢測中心的嵌入式軟件安全攻擊測試被公認是目前國內(nèi)攻擊水平最高的第三方測試,。事實證明,北京智芯微電子科技有限公司的安全攻擊技術(shù)及防御技術(shù)研究是卓有成效的,。

    安全領(lǐng)域的攻與防是個永恒的話題,,北京智芯微電子科技有限公司以后還會沿著這條路繼續(xù)前進,加強自研能力,,跟進國際最新的攻擊技術(shù)和防御技術(shù),,持續(xù)提升安全技術(shù)水平。

參考文獻

[1] 鄧赟,,周道雙,,李宇.基于智能卡的COS安全設(shè)計與實現(xiàn)[J].通信技術(shù),2016(3):352-355.

[2] 徐江珮,,烏力吉,,楊向軍,等.Java卡COS安全漏洞的一種探測與分析方法[J].微電子學與計算機,,2014(12):71-74.

[3] 李奕.智能卡的安全體系研究[J].電子技術(shù),,2015(5):19-22.

[4] Guillaume Bouffard,Julien Iguchi-Cartigny,Jean-Louis Lanet.Combined software and hardware attacks on the Java Card control flow[C].10th IFIP WG 8.8/11.2 International Conference,,CARDIS,,2011.

[5} 于暉.基于混合攻擊的Java卡3.0安全性研究[J].信息安全與通信保密,2014(9):125-128.

[6] 蔣龍龍.JCVM相關(guān)安全性分析與優(yōu)化[D].廣州:廣東工業(yè)大學,,2014.

[7] 孫立元.基于漏洞攻擊的Java卡安全性分析[J].計算機光盤軟件與應(yīng)用,,2013(5):212-214.



作者信息:

崔炳榮1,2,,劉  亮1,,2,甘  杰1,,2,,張海峰1,,陳  雷1,2,,尹國龍3

(1.北京智芯微電子科技有限公司,,國家電網(wǎng)公司重點實驗室電力芯片設(shè)計分析實驗室,北京100192,;

2.北京智芯微電子科技有限公司,,北京市電力高可靠性集成電路設(shè)計工程技術(shù)研究中心,北京100192,;

3.國網(wǎng)寧夏電力公司電力科學研究院,,寧夏 銀川750002)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。