田晓鹏 杨元原
【 摘 要 】 针对当前Java智能卡Applet防火墙缺乏系统性评估技术的问题,论文提出了一种新的安全评估方法。该方法分别从一致性、安全性等角度系统衡量Applet防火墙的安全功能,一方面对Applet防火墙的合规性进行一致性评估,另一方面,利用典型的Java智能卡攻击技术,形成攻击测试集合,对Applet交互过程中隐含的安全漏洞进行评估,从而实现系统性衡量Applet防火墙的安全性。
【 关键词 】 Java智能卡;Applet防火墙;安全评估;一致性;安全性
【 中图分类号 】 TP3
【 文献标识码 】 A
【 Abstract 】 The article presents a new systemic security evaluation method for Java card Applet firewall which is mainly focused on special attack method in previous research. The article attempts to evaluate Applet firewall in conforming and secure perspective. First introduce the method of compliance evaluation for Applet firewall. Then evaluate Applet firewall using test attack kit which is composed of typical smart card attack method.
【 Keywords 】 java card; applet firewall; security evaluation; compliance;security
1 引言
Java智能卡是在智能卡硬件系统的基础之上,在卡片内通过软件构建的一个支持Java程序下载、安装和运行的软、硬件系统。Java智能卡最初由Schlumberger工程师提出,后来其他公司如Bull和Gemplus,参加到Schlumberger中来,形成Java Card Forum[1]。最后Sun公司加入,并和其他智能卡厂商一起开发出Java Card规范,目前最新的规范版本是Java Card 3.0.5。
与传统智能卡产品相比,Java智能卡具备平台无关性、支持一卡多用和重用、灵活性、安全性等优势,在移动通信、金融证券、交通运输、身份识别等领域具有广泛的应用[1]。目前,国家在大力推进智慧城市和物联网建设,SIM卡、银行卡、交通卡、社保卡等逐步更换为智能卡产品,Java智能卡在上述产品中占据较大的市场份额。
Java智能卡在设计时充分考虑了应用环境的安全性,采用了CAP校验、原子性和Applet防火墙等多种安全机制[2],其中Applet防火墙作为不同Applet程序之间进行数据隔离的唯一手段,其安全性关系到整个Java智能卡的安全。
目前针对Java智能卡的研究中,主要集中于两个方面。一是针对Java智能卡的字节码校验、交易机制以及算法等功能提出新的实现方法或者框架,如 Massimiliano Zilli等提出一种轻量级的Java卡压缩算法[3];Dawei Zhang、Zhen Han和Wei Jin基于对象本地化提出一种优化的交易机制[4]。另一方面是针对特定Java智能卡及Applet防火墙中存在的某些漏洞进行脆弱性分析,比如Jip Hogenboom 和Wojciech Mostowski提出的利用类型混淆技术(Type Confusion)对某种类型Java智能卡进行的内存读写攻击[5];以及Michael Lackner、Reinhard Berlach等针对类型混淆和缓冲区溢出攻击提出合并方式的解决措施[6]。
上述分析方法往往缺少系统性的手段,较少关注产品的实现方式是否与规范一致。而现今针对传统安全产品和服务的脆弱性分析往往是建立安全知识库,及时发布脆弱性漏洞和修补措施,智能卡产品亦是如此。
本文从一致性评估、安全性评估等角度对Applet防火墙的整体安全进行评估,并结合目前已有的实现方法,提出系统性的安全评估技术。
一致性评估主要是评估目标对象Applet防火墙的实现方法与Java智能卡规范中的要求是否一致,特别是针对对象异常和数据边界的处理方式,实现不当容易造成数据泄露[7]。Applet防火墙实现的主要内容是不同Applet间的数据共享机制,因此Java智能卡支持的数据共享方式是一致性评估的重点。
安全性评估主要是通过收集Java智能卡以及Applet防火墙的攻击防护方法,建立攻击知识库,并形成测试工具和方法集合,对评估对象进行单独或者组合攻击,以此衡量产品的安全性和健壮性[8]。
2 Applet防火墙
由于Java智能卡支持多应用,即允许多个Applet同时存在于同一智能卡中,因此Java智能卡平台需要提供一种机制将应用相互隔离,即保证某一Applet不能随意访问其他Applet的对象或域。Java智能卡防火墙的主要功能是对不同Applet程序之间的内存空间进行隔离和访问控制[1]。默认情况下,一个Applet程序不能访问其他Applet程序的方法、属性,即便方法和属性是Public属性[9]。
但是,由于业务的需要,部分Applet程序需要调用其他程序的方法和数据,比如支付Applet程序,在支付环节发送验证码验证用户身份时,需要调用短信Applet程序。Applet防火墙提供一套机制,可用于不同Applet程序之间的数据共享。提供共享服务的Applet程序通过继承指定接口程序,可为其它Applet程序提供数据。如果出现未授权的访问请求,JCRE会抛出SecurityException异常。
3 Applet防火墙安全评估
3.1 一致性评估
一致性评估是安全性评估、性能评估等其他测试评估的基础,类似于传统系统的扫描测试,一致性评估有利于发现Applet防火墙实现中的漏洞,进而为后续攻击提供切入点。与传统网络协议一致性评估不同的是,由于Applet防火墙作为Java智能卡COS的系统组件,评估的主要方法是安装测试Applet套件到智能卡上,通过Applet的输出结果来测试系统组件的实现是否与Java智能卡规范要求一致,这种测试方法实际上是一种灰盒测试。由此可知一致性测试的重点和难点是设计完备的测试Applet套件。
由于评估方法的不同,传统网络协议一致性测试套件均无法应用于Java智能卡,但是在设计和实现方法上却有共同之处,如应支持自动化执行和有效的结果展示方法等。针对Applet防火墙,本文提出可在Java智能卡集中开发环境的基础上,利用完备的Applet防火墙测试套件,并提供自动化编译和执行方法,最后通过界面输出测试结果,如图1所示。
Applet防火墙的主要功能是支持不同Applet间以及Applet同JCRE间的数据交互。具体来说,这些机制包括JCRE上下文及其访问权限、全局数组、入口点对象、共享接口及对象共享。因此,针对Applet防火墙的一致性评估主要是评估几种不同的数据共享方式与Java智能卡规范的要求是否一致。
3.1.1 全局数组
在Java智能卡中,有时一些数据需要被所有的Applet和JCRE执行上下文共享,为此引入了全局数组。防火墙允许JCRE指定基本数组为全局,此后数组的公共域即可被任何执行上下文所访问。当前Java智能卡规范中定义的全局数组只有APDU缓冲区数组和被当做Install方式输入参数的bArray数组[9]。
在对Java卡全局数组进行安全评估时,可针对APDU缓冲区数组和bArray数组设计测试脚本,对目标对象的异常处理进行测试,评估是否存在处理不一致的情况或者数据泄露的风险。如apdu.getBuffer()方法为JCRE调用返回APDU缓冲区数组,如果当前执行上下文为指定Applet上下文,根据Java智能卡规范,赋值给其局部变量数组实例值是不允许的,尝试赋值时,会抛出SecurityException异常。
3.1.2 入口点对象
JCRE可以访问任何Applet的执行上下文,但是反过来,Applet不能任意访问JCRE,但是有时候需要调用JCRE的系统服务。Applet智能卡引入JCRE入口点对象来完成此访问。指定的Applet对象实例通过访问JCRE入口点对象的公用方法来完成系统调用。Java智能卡定义了临时JCRE入口点对象和永久JCRE入口点对象[10]。
在对Java智能卡入口点对象进行安全评估时,可针对入口点对象单独或组合设计测试脚本,对目标对象的异常处理进行测试。如apdu为临时JCRE入口点对象,根据Applet防火墙规范的要求,临时JCRE入口点对象的公用方法可被任何执行上下文所调用,但是出于安全方面的考虑,临时JCRE对象入口点对象引用不能被存入任何类变量、实例变量和数组。
另外,对于JCRE临时接入点对象,如果不在JCRE执行上下文中,根据Applet防火墙规范的要求,可以对其进行格式检查和赋值操作,不会抛出异常。
3.1.3 共享接口及对象共享
Applet能够访问不同Package中声明的共享方法,提供共享方法的服务Applet需要定义继承Javacard.framework.Shareable的接口,并在指定的类中实现该接口[10]。对共享接口及对象共享进行一致性评估,主要是根据Applet防火墙规范的要求,对不同包中共享接口、共享对象的访问权限方法进行遍历,通过观察防火墙抛出异常的方式或者不抛出异常,来评估与Applet防火墙规范要求的匹配程度。
另外,Java智能卡的规范存在多个版本,在Java智能卡共享机制执行动态方法链接时,如果Client和Server使用不同版本的共享接口,有可能导致类型混淆(Type Confusion),因此针对特定的Java卡,可设计不同版本类型的共享程序,以此评估目标对象的一致性。
在对Applet防火墙进行一致性评估时,可以同健壮性评估结合在一起组合测试,即通过在上述正常测试脚本的基础上,增加超长字符、乱码、恶意Applet等,验证是否出现敏感信息的泄漏。
本文选取上海华虹公司的Java智能卡芯片,利用Java智能卡一致性评估平台对Applet共享方法进行验证评估,如下为全局数组实例的验证结果,通过在被测芯片上安装测试Applet组件,并发送CLA指令,通过Applet的响应结果来验证Applet防火墙的处理是否正确。
3.2 安全性评估
针对信息安全产品或者信息系统进行安全评估,除产品功能可按照相关国际标准或者国家标准进行测评,安全性评估及脆弱性评估由于各个机构的资源、成本等因素限制,测试结果往往参差不齐,另外零日漏洞以及新攻击方法的出现往往对Java智能卡的安全造成严重影响,需要及时响应处理。
目前常见的针对Java智能卡以及Applet防火墙的攻击方法,主要包括信息收集、类型篡改、兼容性攻击以及密钥攻击等,各种攻击方法的最终目的是篡改或者获取Applet中的敏感数据。Applet防火墙实现不当可能导致上述攻击方法被成功执行,造成Applet中的敏感信息泄露给其他Applet。
本文提出建立Applet防火墙安全性测试平台,通过利用已知的针对智能卡、Java智能卡以及Applet防火墙的攻击技术,形成攻击测试知识库,知识库可根据需要进行动态更新,并可形成攻击工具集合,以便提高攻击效率。同时,收集Applet防火墙的相关标准、研究报告以及其他信息,为知识库提供数据支撑。该测试平台有利于全面、系统地对Applet防火墙的安全性进行评估;并且通过分析已有研究成果及攻击方法,可为标准制定、攻击更新提供平台支撑。
3.2.1 信息收集
传统的攻击方法第一步总是信息收集,对于可开放下载应用的Java智能卡来说,向卡上装载一个带有恶意代码的应用并运行它,虽然普通的攻击行为会被Java智能卡拒绝,但通过收集拒绝或者报错信息,仍可完成加密算法遍历、统计已有应用等信息收集。完成这项工作可为之后的漏洞攻击做铺垫。另外,通过阅读生产厂商提供的开放文档等公开信息,也可进一步获取信息[11]。
3.2.2 类型篡改
由于Java智能卡支持多Applet应用,为了防止恶意开发者上传攻击性Applet应用,Java卡提供了CAP文件字节码校验功能。CAP文件字节码校验划分为卡上校验和卡下校验,主要对CAP文件和EXP文件的合法性进行校验,具体检查对象包括头文件、所有类文件。由于其转换和下载到卡内的时间并不连续,因此攻击者可以通过CFM( Cap File Manipulator) 工具进行CAP 文件篡改,从而可以实现将恶意应用程序加载到Java 卡中[12]。
如图4所示,共享接口的公共方法的输入参数是byte[4],通过类型篡改,使输入参数修改为short[4],导致客户端Applet可访问的空间扩大一倍,达到读取内存空间的目的。
尽管Java Card 3.0 的VM 标准中,强制规定实现卡内字节码校验,这使得之前所有基于CAP 文件篡改的逻辑篡改都将失效。但是,一方面,市面上仍然存在大量没有采用最新标准的Java卡,因此此漏洞仍然存在;另一方面,即便是采用最新标准的Java智能卡,如果事务程序回退机制存在Bug,仍然可以利用此漏洞。
3.2.3 兼容性攻击
目前Java卡广泛应用于移动通信、银行金融、公共交通等领域,每个领域均有自己定义的规范标准,同时,每个标准或者标准内部也有子版本更新,版本的兼容性对于基础Applet程序或者基础库至关重要。如果不同版本之间任意滥用,有可能导致意想不到的结果。
如图5所示,AppletPackage在CAP文件中实现具体的方法,并且在EXP文件中进行声明;Applet通过EXP文件中的声明调用相应方法。EXP文件是Applet和Package的链接,由于EXP文件不会部署到卡上,这就要求输入参数和返回值类型必须一致。不兼容性可能导致数据的泄漏以及功能异常。
3.2.4 混合攻击
目前Java智能卡产品均采用了多种安全加固机制,导致之前的逻辑攻击技术,如类型篡改、兼容性攻击等失效。对于这种情况,我们可以结合物理攻击、旁路攻击、逻辑篡改等智能卡攻击技术,修改或者监听程序处理逻辑,特别是对于Applet间数据交互过程和Applet装载校验过程,由于涉及到不同业务应用,可能引起数据泄露。
比如Applet程序经过编译、连接形成CAP安装文件后,我们利用特殊工具增加类型篡改等恶意代码,在进行卡上校验时,由于最新Java智能卡均采用证书签名等加固校验技术,正常情况下无法通过校验。这里我们可以利用智能卡物理攻击和旁路攻击技术,跟踪并确定CAP校验判定的位置,使指定位置的校验判定结果反转,从而使恶意程序安装到Java智能卡上,从而为进一步的攻击做好铺垫。
需要说明的是,物理攻击技术非常有效,但是成本较高,需要昂贵的仪器支撑;同时,操作较为复杂,需要掌握物理、化学和计算机等多种学科知识。
4 结束语
针对Java智能卡以及Applet防火墙的攻击手段和方法种类繁多,如何全面、系统的评价Java智能卡以及Applet防火墙的安全是一个亟待解决的问题。本文从一致性、安全性评估角度对Applet防火墙的安全性进行脆弱性评估,并借鉴传统信息安全产品的经验,提出建立攻击知识库和测试工具箱,收集常见的Java智能卡攻击方法,形成较为完备的评估集合。
目前相关的厂商和研究者也开发了相应的工具和技术,协助进行安全评估。比如Riscure公司开发的JCworkBench平台能够依据不同的智能卡标准对Java卡平台的安全功能进行一致性评估;另外,针对类型篡改攻击,目前很多研究是通过卡上攻击来检验Java卡平台的安全,Pietro Ferrara提出了一种Java卡Applet防火墙静态分析工具,在卡外就可判断Applet防火墙的安全性[13]。
由于针对Java智能卡以及Applet防火墙的安全评估工具主要由国外厂商提供,对外依赖度较高,因此国内相关的评估能力需要政府、厂商、相关检验机构等多方面的努力。因此,随着国家大力推进智慧城市建设以及相应智能卡芯片更换的机遇,一方面要加快评估工具的研发,特别是针对Applet防火墙的测评工具;同时加强智能卡芯片人才的培养,从而进一步提高对国内重要信息系统的安全保障能力。
参考文献
[1] 张大伟,靳伟.Java智能卡原理与应用开发[M].北京:电子工业出版社,2008:5-100.
[2] Marc WittemanJava Card Security[J],Information Security Bulletin,2003,8,291-298.
[3] Massimiliano Zilli, Wolfgang Raschke, Reinhold Weiss, Christian Steger, Johannes Loinig. A light-weight compression method for Java card technology[J]. ACM SIGBED Review - Special Issue on the 4th Embedded Operating Systems Workshop (EWiLi 2014),2014,11(4):13-18.
[4] Dawei Zhang, Zhen Han, Wei Jin. Optimized Java Card transaction mechanism based on object locality[C]. Proceedings of the 2010 ACM Symposium on Applied Computing.New York,USA:ACM,2010, 550-551.
[5] Jip Hogenboom,Wojciech MostowskiFull Memory Read Attack on a Java Card[J],2009.https://wwwhome.ewi.utwente.nl/~mostowskiwi/papers/wissec2009.pdf.
[6] Michael Lackner, Reinhard Berlach, Reinhold Weiss, Christian Steger.Countering type confusion and buffer overflow attacks on Java smart cards by data type sensitive obfuscation[C],CS2 '14 Proceedings of the First Workshop on Cryptography and Security in Computing SystemsPages. New York,USA:ACM, 2014, 19-24.
[7] Wojciech Mostowski, Erik Poll Testing the Java Card Applet Firewall,http://www.cs.ru.nl/~erikpoll/papers/firewall2007.pdf.
[8] Pietro Ferrara JAIL: Firewall Analysis of Java Card by Abstract Interpretation[J],Electronic Notes in Theoretical Computer Science,2006.
[9] 王卓人,王峰. 智能卡大全[M].北京:电子工业出版社,2002.
[10] Surender Reddy Adavalli Smart Card Solution: Highly secured Java Card Technology[J],2001.https://www.cs.auckland.ac.nz/courses/compsci725s2c/archive/termpapers/725adavalli.pdf.
[11] Marc Witteman Advances in Smartcard Security[J], Information Security Bulletin,2002,11-22.
[12] 刘嵩岩,毛志刚,叶以正.Java卡的研究与实现[J].2000,30(6),402-405.
[13] Werner Dietl,Peter Muller,Arnd Poetzsch-HeffterA Type System for Checking Applet Isolation in Java Card,2005.
https://softech.informatik.uni-kl.de/homepage/publications/Dietl.Mueller.Poetzsch-Heffter04typesystem.pdf.
基金项目:
上海市移动智能终端安全性测试公共服务平台(上海市科学技术委员会2014年“科技创新行动计划”专业技术服务平台建设专项)(课题编号:14DZ2294400)。
作者简介:
田晓鹏(1984-),男,汉族,河南偃师人,毕业于北京邮电大学,硕士研究生,中级检验员,助理研究员,参与国家发改委信息安全测评专项等;主要研究方向和关注领域:信息安全及相关检测技术。
杨元原(1981-),男,汉族,河南洛阳人,毕业于西安电子科技大学,博士研究生,高级检验员,助理研究员,作为牵头人成功申报上海市智能卡等科研项目;主要研究方向和关注领域:信息安全及相关检测技术。