(计算机系统结构专业论文)java智能卡字节码校验算法的研究与实现.pdf_第1页
(计算机系统结构专业论文)java智能卡字节码校验算法的研究与实现.pdf_第2页
(计算机系统结构专业论文)java智能卡字节码校验算法的研究与实现.pdf_第3页
(计算机系统结构专业论文)java智能卡字节码校验算法的研究与实现.pdf_第4页
(计算机系统结构专业论文)java智能卡字节码校验算法的研究与实现.pdf_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 随着我国信息化建设的不断推进和信息技术的持续发展,j a v a 智能卡已在身 份认证、电子支付和信息安全领域得n t 广泛的应用。但是由此所带来的安全性 问题在一定程度上妨碍了j a v a 智能卡的进一步普及和应用。而字节码校验是保证 j a v a 智能卡应用下载安全性的重要措施之一。 本文首先对j a v a 智能卡面临的安全性问题进行了研究,接着对具有代表性的 字节码校验算法进行了分析和研究,重点从时间和空间方面进行了分析,为其后 提出改进的字节码校验算法提供了理论依据。然后将d a g 图和和缓存策略引入 到算法设计思想中,设计并实现了一种基于d a g 图和缓存策略的j a v a 智能卡字 节码校验算法。最后通过算法分析和仿真实验证明该算法是一种可以在j a v a 智能 卡上实现的高效算法。 关键词:j a v a 智能卡d a g 字节码字节码校验 a b s t r a c t w i t ht h er a p i dd e v e l o p m e n to fi n f o r m a t i o nt e c h n o l o g ya n dt h ec o n t i n u o u s p r o g r e s so fi n f o r m a t i o nc o n s t r u c t i o n , j a v as m a r tc a r dh a sb e e nw i d e l ya p p l i e di nt h e f i e l d so fi d e n t i f i c a t i o n , e l e c t r o n i cp a y m e n ta n di n f o r m a t i o ns e c u r i t y h o w e v e r , t h e s e c u r i t yc a u s e db yi th a m p e r e d i t sf u r t h e rp r e v a l e n c ea n da p p l i c a t i o n s b y t e c o d e v e r i f i c a t i o ni so n eo ft h em e a s u r e sf o re n s u r i n gt h es e c u r i t yo ft h ea p p l i c a t i o n f i r s to fa l l ,t h er e s e a r c ho nt h es e c u r i t yc o n f r o n t e db yj a v as m a r tc a r di sm a d ei n t h i sp a p e r a n dt h e nt h er e p r e s e n t a t i v ev e r i f i c a t i o na l g o r i t h m sa r ea n a l y z e da n d r e s e a r c h e d ,e s p e c i a l l yt h ec o s tf o rt h es p a c ea n dt i m e ,w h i c hl a y st h et h e o r yf o u n d a t i o n f o rt l l e p r e s e n t a t i o n o fa na d v a n c e db y t e c o d ev e r i f i c a t i o na l g o r i t h m a f t e rt h a t , c o n s i d e r i n g t h e d i r e c t e d a c y c l i c - g r a p ha n dc a c h e p o l i c y , a n d a gb a s e da n d c a c h e p o l i c y - b a s e db y t e c o d ev e r i f i c a t i o na l g o r i t h mi sd e s i g n e da n di m p l e m e n t e d i n t h ee n d ,a c c o r d i n gt ot h ea l g o r i t h ma n a l y s i sa n de x p e r i m e n tt e s t i n g ,i ti sp r o v e dt h a t t h i sa l g o r i t h mi se f f i c i e n ta n df e a s i b l e k e y w o r d :j a v as m a r t c a r d d i r e c t e d - a c y c l i c - g r a p hb y t e c o d e b y t e c o d e v e r i f i c a t i o n 西安电子科技大学 学位论文独创性( 或创新性) 声明 秉承学校严谨的学风和优良的科学道德,本人声明所呈交的论文是我个人在 导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标 注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰写过的研究成 果;也不包含为获得西安电子科技大学或其他教育机构的学位或证书而使用过的 材料。与我同工作的同志对本研究所做的任何贡献均已在论文中做了明确的说 明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名:圣:掉日期j 盟陴 西安电子科技大学 关于论文使用授权的说明 本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究 生在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。学校有权保 留送交论文的复印件,允许查阅和借阅论文;学校可以公布论文的全部或部分内 容,可以允许采用影印、缩印或其它复制手段保存论文。同时本人保证,毕业后 结合学位论文研究课题再攥写的文章一律署名单位为西安电子科技大学。 ( 保密的论文在解密后遵守此规定) 本学位论文属于保密,在- 年解密后适用本授权书。 本人签名: 导师签名: 日期玉舛 醐中 第一章绪论 第一章绪论 1 1 课题背景及意义 目前,智能卡应用已经逐渐深入到社会生活的各个领域,如公共交通、医疗 保险、身份证、电话卡、汽车加油卡、出租车付费等领域,携带现金、笔记本、 户口簿、病历本、身份证等证件、证明和档案的时代即将过去,人们只要带上能 识别个人合法身份、能提供个人档案和数据的i c 卡或智能卡,即可充分享受数字 时代所带来的高效管理和便捷服务【l j 。随着信息时代的到来,智能卡将会成为个 人身份识别和实现电子支付的最佳手段。 作为一种良好的跨平台语言,网络上提供的j a v aa p p l e t 应用程序被j a v a 智能 卡体系结构1 2 j 允许下载到智能卡中( 其实是a p p l e t 经过编译和转换后生成j a v a 智 能卡虚拟机能够识别的字节码指令,而后再通过读写器下载到智能卡上) 。但是, 个人电脑w e b 浏览器上下载和运行的代码是不可信的,没有经过用户的认可,显 然面临着严重的安全性问题:一个恶意的a p p l e t 程序下载到卡内会产生比如破坏 原有安全代码、篡改敏感数据、泄露个人信息以及木马攻击等问题。标准的j a v a 虚拟机流程如图1 1 所示。 o f f - c a r dp r o c e s s i n g u n t r u s t e d o n c a r dp r o c e s s i n g 图1 1 标准j a v a 虚拟机流程 为防止恶意a p p l e t 下载到j a v a 智能卡上运行,必须采取有效的手段来保证代 码的安全性。目前,字节码校验算法和g p ( g l o b a lp l a t f o r m ) 规范 习( 基于字节码签 名的安全下载机制) 是实现a p p l e t 安全下载到卡内的两种主要方法。g p 规范采用 申请证书对a p p l e t 程序进行签名和验证的方式,而字节码校验采用的是指令流比 对( 主要是数据类型比对) 的方式。因此可以这样认为,g p 规范是对编写a p p l e t 的用户的认证,它的前提是a p p l e t 内容的正确性,字节码校验算法则是对内容正 确性的评估。 j a v a 智能卡字节码校验算法的研究与实现 利用g p 规范对a p p l e t 正确性的判断可能存在一些问题和不足: a p p l e t 导入j a v a 智能卡内的文件格式是s c r 格式文件,而g p 规范是对s c r 文件 进行签名( 在j a v a 智能卡体系结构中,s c r 文件是对c a p 文件执行a p d u 命令所得 到的,因此确切地讲应该是对c a p 文件进行签名) ,这样可能存在一种情况:从 a p p l e t 生成s c r 文件的过程和s c r 文件在被签名的过程中其内容可能被篡改,从而 导致恶意的a p p l e t 被写入到卡内,造成安全威胁。由于签名认证只是对编写a p p l e t 的开发人员的合法性进行了确认,对于a p p l e t 生成n o r 文件的过程以及s c r 文件 被签名的过程无法保证其安全性( 这是由于p c 本身不安全) 。 对于用户自己编写的a p p l e t 程序,采用g p 规范后不能随意下载到卡内,必须 经申请证书进行签名后才能下载。这样就用户而言,灵活性受到了限制。此外, 证书需要向c a 中心进行购买,这样也增加了成本。 对于攻击者而言,他可以编写一个恶意的a p p l e t 程序然后申请证书进行签名后 下载到卡内,j a v a 智能卡进行认证后误认为它是正确和安全的,从而恶意攻击者 达到了目的。 而字节码校验算法可以解决这种潜在威胁。因为它是对下载到卡内的内容进 行校验,所以可以有效的防止恶意攻击者篡改内容却被正确签名的情况,这正是 本课题研究的一个意义所在。 但是由于j a v a 智能卡本身的空间和运算器的限制,将字节码校验算法如何应 用到卡上以及校验效率的提高是目前国内外学者研究的重点。这是本课题研究的 另一个意义。 1 2 国内外研究现状 为了实现卡上的字节码校验,很多研究人员在j a v a 智能卡字节码校验上做了 大量的工作。文献h 1 采用了数字签名的方法。借用可信的第三方对字节码进行数 字签名,从而省去字节码校验过程,这个方法不涉及到狭义上的校验。该方法不 适用于离线状态或没有可信第三方的场所。文献喳1 将校验分成卡外和卡上两个阶 段:在字节码校验的卡外阶段处理语意翻译,统一所有的指令:在校验数据结构 上,堆栈在处理的开始和结束全部为空,从而减少空间复杂度。此种算法不能动 态检查局部变量初始化。文献也将校验分成了卡外和卡上两个阶段:在卡外阶 段处理所有的分枝,并且将附加信息放入字节码中;在校验的卡上阶段处理直线 型字节码,因为不存在分枝,从而减少校验所需的空间。字节码的代码量却因为 附加信息而大约增加了5 0 。文献h 3 中描述了一个在j a v a 智能卡上字节码校验的 动态算法,这个算法是将整个程序流程图的分枝进行处理,在处理完一个分枝结 构后清除堆栈中的数据,接着分析下一个分枝结构。这种算法的最大空间复杂度 第一章绪论 取决于程序中分枝最多的校验单元。文献睛1 采用了种称为p c c 的方法,即使用 非易失性存储器来存放与字节码校验相应的数据结构,解决了字典的存储空间问 题。由于非易失性存储器的写操作比r a m 要慢很多,虽然这个方法不存在存储空 间的问题,但时间上比传统算法慢很多。文献阳3 采用一种改进的p c c 方法,和p c c 不同的是采用“软缓存 将程序校验尽可能放入r a m 中,利用r a m 的快速来实现 时间上的进一步提高。但是,实际上其实现需要大量的r a m ,无疑会使其应用场 合受到很大限制。 1 3 论文研究的主要内容和结构安排 本文将对j a v a 智能卡所面临的安全性问题进行讨论,并针对此问题对目前提 出的j a v a 智能卡字节码校验算法进行改进,提出并实现一种基于d a g 图和缓存 策略的j a v a 智能卡字节码校验算法,以期提高和增强j a v a 智能卡的应用安全性。 本文的研究内容主要包括两部分,即j a v a 智能卡的安全性分析和j a v a 智能卡字 节码校验算法的研究,以及基于d a g 图和缓存策略的j a v a 智能卡字节码校验算 法的设计与实现。 本论文的结构安排如下: 第一章绪论。简要描述j a v a 智能卡的应用发展概况和面临的安全性问题, 指出了字节码校验算法和g p 规范是解决该问题的主要方法,然后对两者进行了 比较,确定了本文的,丰要研究内容和研究思路。 第二章j a v a 智能卡及j a v a 智能卡虚拟机技术研究。本章首先对j a v a 智能卡 技术进行了简要介绍。然后,针对j a v a 智能卡当前运行机制的安全性进行分析, 指出了j a v a 智能卡面i 临的主要安全威胁,为建立字节码校验算法提供研究依据。 第三章字节码校验技术研究。本章首先对字节码校验技术进行简要的介绍, 接下来对代表性的校验算法进行了介绍和分析。其中,重点分析了目前校验算法 的空间和时间需求,为其后提出改进的字节码校验算法提供了理论依据。 第四章基于d a g 图和缓存策略的j a v a 智能卡字节码校验算法的设计。本章 给出了一套基于d a g 图和缓存策略的j a v a 智能卡字节码校验算法的设计方案。 第五章基于d a g 图和缓存策略的j a v a 智能卡字节码校验算法的实现。在分 析和设计的基础上,给出了基于d a g 图和缓存策略的j a v a 智能卡字节码校验算 法的实现方案,在p c 平台上对实现方案进行了仿真测试。 第六章总结全文并对未来的研究方向进行了展望。 第二章j a v a 智能卡技术研究 第二章j a v a 智能卡技术研究 j a v a 智能卡是一种能运行j a v a 语言程序的智能卡,它在资源有限的智能卡 环境中支持j a v a 语言的一个子集,是j a v a 嵌入到智能卡中的一种新的应用n 们。 j a v a 智能卡的出现,使原有嵌入式设备只能实现单一或有限应用的局面得以突 破,使得真正意义上的一卡多应用成为现实。 2 1 - 1 智能卡概述 2 1j a v a 智能卡原理 智能卡( s m a r tc a r d ) ,又称集成电路卡( i n t e g r a t e dc i r c u i tc a r d ) ,是一种大小和 普通名片相仿的塑料卡片,内含一块集成电路芯片,具有存储信息和进行复杂运 算的功能。在智能卡的芯片上,集成了微处理器、存储器以及输入输出单元等。 它被认为是世界上最小的电子计算机。在智能卡上,拥有一整套性能极强的安全 保密控制机制,一般情况下安全控制程序都被固化在只读存储器中,因而具有无 法复制的特点和强密码验证的安全保证。 智能卡的概念于七十年代中期提出,其发明人是法国人罗兰模瑞诺( r o l a n d m o r e n o ) 。1 9 7 6 年,法国b u l l 公司的m i c h e lv g o n 制造出了第一片智能卡。 第一代智能卡实际上并不拥有任何“智慧”,而且是采用接触式读取方式的。它 首先被法国应用于电话卡上,后来,通过存储器和微电脑的结合使卡片有了“智 慧”,并制造出了免接触式智能卡。这便使得智能卡开始广泛应用于金融领域和 交通运输领域。免接触功能可使持卡公交乘客只要从读取终端走过,便能自动检 验票证和扣取票款,而不需要排队。1 9 9 6 年开始,还开发了在短距离范围安全可 靠的前提下,用电磁波沟通智能卡的技术。 随着智能卡技术的发展,智能卡从早期的只有接触式读取的工作方式己发展 到了采用无源射频识别技术的非接触式工作方式。同时由于智能卡技术应用愈加 广泛,商业需求愈加显著,行业内的标准的制定也不断在提速。目前i s o 国际标 准化组织和i e c 国际电工委员会已经联合成立了多个工作小组专门负责制定智能 卡业内相关标准。现今为人们最熟悉的智能卡业内相关标准可称得上是i s o i e c 规定的与接触式智能卡相关的7 8 1 6 系列标准。 但与智能卡需求量急剧上升所矛盾的是,智能卡应用的研发是一个复杂漫长 的过程。尽管对智能卡的结构大小和通信协议,国际规范i s 0 7 8 1 6 早已规定,但 各个卡生产商对智能卡的研制都各不相同。各个卡生产商对自己的智能卡操作都 j a v a 智能卡字节码校验算法的研究与实现 有自己独特的一套指令集。 此外,智能卡编程接口( a p i s ) 非常复杂,用之编程,需要开发人员非常熟悉 底层通信接口协议,内存管理和一些智能卡硬件的细节。因此,在开发智能卡应 用之前,开发人员就需要花费大量时间来了解智能卡的复杂开发环境,而且在他 们研究后会发现并不存在现代化的开发工具( 如v i s u a ls t u d i o ) 。更糟糕的是,对不 同的智能卡并没有一个通用的开发环境。每次需要开发一种新的应用时,可能都 必须重新了解新的开发环境。 由于所有的智能卡都是在专门的开发环境中开发出来的,不同生产商生产的 相同应用的卡可能并不兼容,这使同一系统中使用不同生产商的卡变得很复杂。 据估计,2 0 0 1 年,智能卡的需求量为l o 3 0 亿片,而了解智能卡编程的人员 少之又少。智能卡编程的复杂性、不统一性将严重阻碍智能卡的发展。市场的需 求为智能卡的发展提出了新的要求。然而这一切将随着j a v a 智能卡的出现而改 变。 2 1 2 j a v a 智能卡组成及结构 j a v a 智能卡是一种基于j a v a 语言的智能卡技术。即在智能卡原有的硬件系统 之上,构造的一个支持j a v a 程序下载、安装和运行的软硬件系统。 j a v a 智能卡不仅保留了原有智能卡应用的便捷性和安全性,而且还继承了 j a v a 技术的硬件无关特性,将智能卡应用程序的开发同智能卡硬件系统相分离, 简化了应用程序的开发,提高了应用程序的可重用性,实现了j a v a 设计者所宣称 的:“( 应用程序) 一次写完,到处运行”的理念【l 。 j a v a 智能卡系统由以下几部分组成: 智能卡硬件系统 包括微处理器、易失性存储器( r a m ) 和非易失性存储器( e z p r o m ) 、通信电路、 加密协处理器等模块。 与智能卡硬件系统相关的本地方法集 完成基本的i o 通信、存储、加密等对硬件进行控制操作的本地方法集。 j a v a 智能卡虚拟机j c v m ( j a v ac a r dv i r t u a lm a c h i n e ) 在智能卡硬件系统上通过软件构造的用于解释执行字节码的虚拟计算机,以 及其他一些安全机制,如卡内防火墙安全机制和对象共享机制等。 j a v a 智能卡类库( j a v ac a r da p i ) 包括支持j a v a 智能卡运行的核心类库和应用扩展类库,为a p p l e t 的开发提供 统一的应用编程接口。 j a v a 智能卡应用管理组件( j c r eo b jm a n a g e r ) 第二章j a v a 智能卡技术研究 完成对卡上a p p l e t 的安装、注册和删除。 j a v a 智能卡运行环境j c r e ( j a v ac a r dr u n t i m ee n v i r o n m e n t ) 包括j a v a 智能卡卡内虚拟机、a p i 类库、事务处理、数据通信( a p d up a s e r ) , 以及逻辑通道等。 智能卡本地操作系统( c a r do p e r a t i o ns y s t e m ) j a v a 智能卡系统可以建立在原本已有操作系统的智能卡上。这样的j a v a 智能 卡可以进一步提高多应用性,也可以保留原有的智能卡应用。此外,还可大大降 低j a v a 智能卡系统的构造复杂度。该模块是可选的。 j a v a 智能卡应用( j a v aa p p l e t ) 运行于j a v a 智能卡上的j a v a 应用程序a p p l e t 。 其结构如图2 1 所示: j a v ac a r dr u n t i m ee n v i r o n m e n ts t r u c t u r e j a v ac a r dj a v ac a r dj a v ac a r d a p p l e tla p p l e t 2a p p l c t 3 j | j r f r a m e w o r k - 。 , 1 j a v ac a r dv i r t u a lm a c h i n e i = i j a v ac a r da p l 卜 fj , a p d up a r s e r ji n a t i v em e t h o d j c r eo b jm a n a g e r j i ji c a r do p e r a t i o ns y s t e m ( o p t i o n ) 1r e 2 p r o m 1 j c r e o 蟮h c a r dh a r d w a r e c p u i = j 1r | | 一c o 一 图2 1j a v a 智能卡体系结构【1 2 l j a v a 智能卡字节码校验算法的研究与实现 2 1 3 j a v a 智能卡的工作原理 j a v a 智能卡技术定义的是一个平台,由于是分开的虚拟机结构,此平台在时 间上和空间上分布在智能卡和台式机环境之间,由3 个技术规范组成,即j a v a 智 能卡类库2 2 2 技术规范、j a v a 智能卡运行环境2 2 2 技术规范和j a v a 智能卡虚拟 机技术规范。 下面介绍一下j a v a 智能卡的工作原理。 首先,源代码经过j a v a 编译器编译后产生类文件,也称为字节码。然后,j a v a 智能卡转换器将类文件转换成一个c a p 文件。转换器的主要功能是对字节码文件 进行优化以适合在卡中有限的内存中运行。接下来就是将c a p 文件下载到卡中。 每个a p p l e t 都会被赋予一个特定的a i d 。 当一个a p p l e t 被正确下载到e 2 p r o m 后,并与j a v a 智能卡类库和卡上的其 它库关联后,j c r e 就调用该a p p l e t 的安装方法i n s t a l l 来安装该a p p l e t 。i n s t a l l 是一种公共静态方法,用来创建a p p l e t 的一个实例,此时,j c r e 会调用解释器 来完成创建实例的工作。同时,j c r e 会在a p p l e t 注册表中进行记录。由于存储 器是有限的,通常在这一阶段创建和初始化a p p l e t 生命期内需要的对象。 安装在卡上的a p p l e t 还需要被显式地选择后才会被激活。当j c r e 接受到 “s e l e c ta p d u ”命令时,j c r e 暂停当前选中的a p p l e t ,并调用该a p p l e t 的 d e s e l e c t 方法进行清理。然后,j c r e 根据命令中的a i d 选中对应的a p p l e t ,调用 该a p p l e t 的s e l e c t 方法。如果是多个逻辑通道选择了这个a p p l e t ,需要调用它的 m u l t i s e l e c t a b l e d e s e l e c t 方法。s e l e c t 方法让该a p p l e t 做好接受a p d u 命令的准备。 所有接受到的a p d u 命令j c r e 将发送给当前选中a p p l e t 的p r o c e s s 方法,此时 j c r e 会调用解释器,将系统的控制权交给解释器,直到它接收到下一个“s e l e c t a p d u ”命令为止。 解释器启动后,进行必要的初始化,就跳转至当前a p p l e t 的p r o c e s s 方法中, 根据具体的字节码进行解释执行。这时,解释器就如同使用不同语言的人在交流 时所需要的翻译一样,使得用j a v a 语言编写的程序可以运行在不同的系统上,使 得j a v a “一次编写,到处运行”的理念得以实现。当j a v a 栈中为空时,解释器会 将系统控制权转交给j c r e 。 2 2j a v a 智能卡虚拟机技术 j a v a 智能卡虚拟机j c v m ( j a v ac a r dv i r t u a lm a c h i n e ) 是用于支持字节码运行 的虚拟计算机。正是有了j a v a 智能卡虚拟机,j a v a 智能卡平台才具备了硬件无关 第二章j a v a 智能卡技术研究 9 的特性。与p c 平台不同的是,由于j a v a 智能卡拥有的资源有限,因此无法在j a v a 智能卡中实现j c v m 的全部功能。针对这一限制,典型的解决方案是将j a v a 智能 卡虚拟机按其负责的功能进行折分,将其划分为卡外和卡内虚拟机两个部分【l 3 1 。 其中,卡外虚拟机工作于p c 或工作站环境中,负责将编译后的类文件转换 成更加紧凑、高效的安装下载文件c a p 文件( c o n v e r t e da p p l e t ,简称c a p ) 。 j a v aa p p l e t 语言经转换后将形成与j a v a 语句相对应的字节码( b y t e c o d e ) ,并被保 存于c a p 文件的方法( m e t h o d ) 组件中。 而卡内虚拟机则工作于j a v a 智能卡平台中,通过将c a p 中的字节码转换为 智能卡硬件和操作系统可以识别的本地方法集这一方式来执行这些字节码。卡内 虚拟机的设计不仪直接关系j a v a 智能卡的运行效率,还直接影响j a v a 智能卡计 算环境的安全性。因此,卡内虚拟机是j a v a 智能卡的核心部件,也是整个系统设 计和实现的关键所在,j a v a 智能卡虚拟机的总体结构如图2 2 所示: c l 笛s t f l 蓝 图2 2j a v a 智能卡虚拟机的总体结构( j c v ma r c h i t e c t u r e ) 2 3j a v a 智能卡面临的安全性问题 以嵌入式j a v a 为支撑的智能卡可以为用户提供一个广阔的应用开发平台。按 照s u n 公司发布的j a v ac a r da p p l e t 开发规范【l 训,用户可根据自己的需要开发各 类应用程序,这使得j a v a 智能卡平台更具有通用性。另一方面,也直接导致j a v a 智能卡计算环境的安全性面临更大的威胁。这是因为从某种意义上讲,j a v a 智能 卡平台已成为一个小型的多应用系统。因此,恶意的应用程序可能会像合法应用 程序一样被下载到j a v a 智能卡中,从而像p c 平台一样,遭受恶意代码的攻击。 当前,针对j a v a 智能卡的主要攻击大致可以分为两类:即针对j a v a 语言类型系 统的攻击【1 5 , 1 6 , 1 7 l 和针对j a v a 智能卡对象隔离和共享机制的攻击。本章主要对j a v a 语言类型系统攻击展开分析和讨论,另一类攻击由于不在本课题讨论范围内请参 阅相关文献7 l 引。 1 0 j a v a 智能卡字节码校验算法的研究与实现 2 3 1 基于j a v a 类型系统的攻击原理 j a v a 语言从语言层上克服了很多其他语言所面临的传统安全问题。使用j a v a 语言编写的应用程序无法直接访问硬件,或任意地访问内存空间。这取决于j a v a 虚拟机机制和j a v a 语言的类型检查机制。在语言层上,j a v a 语言没有像其他语言 那样提供指针数据类型,而且j a v a 语言的类型一致性原则也禁止用户在编写j a v a 代码时,执行某些强制类型的数据转换操作。 例如,在c 语言中可以使用语句i n t 擘p = ( i n t ) 0 来声明一个指针类型的变量, 让其指向存放常数0 所在的内存空间。但实际上,该指针还可被用于指向系统 中的任意一内存地址空间。这一灵活的特性最终衍生出许多典型的攻击手段。例 如使用缓冲区溢出攻击系统程序的代码、数据以及受保护的机密信息【1 9 2 0 】等。 在j a v a 智能卡中,j a v a 虚拟机将对象创建并组织到堆空间【2 l j 中,然后通过提 供引用( r e f e r e n c e ) 类型的方式向用户开放访问这些对象的途径。一个引用型变量 既可以间接或直接地指向某一对象拥有的内存区域,又可以指向该对象所属内存 空间中的一个具体的偏移位置。 j a v a 智能卡虚拟机使用基于符号( t o k e n ) 的动态链接机制【2 ,即卡外虚拟机在 对j a v aa p p l e t 程序进行编译时,会将对象引用( 即物理地址) 直接编译为符号 ( t o k e n ) ,而卡内虚拟机在解释执行字节码时,再将这些t o k e n 动态地解析为要访 问对象的物理地址,从而实现对卡内对象的访问。这一机制有效地解决了上面介 绍的内存地址空间的安全访问问题。此外j a v a 语言严格规定了类型一致性原则, 不允许其他数据类型到引用类型的强制性转换。例如像图2 3 中代码所示的那样, 将一个引用类型的数据赋给i n t 型变量的操作是非法的。 图2 3违反j a v a 语言类型一致性原则的j a v aa p p l e t 代码及其字节码 第二章j a v a 智能卡技术研究 上述代码中,变量r e f 为o b j e c t 型的引用型变量,而函数i l l e g a l t y p e f u n 的返 回值为一个整型变量。由于上述代码违反了j a v a 语言的类型一致性原则,将无法 通过j a v a 语言类型校验机制的检查。而图2 4 所示的为符合j a v a 语言类型一致性 原则的正确代码。 图2 4 符合j a v a 语言类型一致性原则的j a v aa p p l e t 代码及其字节码 如果攻击者能够对j a v aa p p l e t 对应的字节码进行篡改,将打破j a v a 语言的 类型一致性机制,从而实现恶意攻击。例如,攻击者将上述字节码序列中的“0 x 1 0 o x l 80 x 7 9 ,更改为“0 x 1 80 x 7 9 ,那么将出现图2 3 中所述的违反j a v a 语言 类型一致性原则的代码攻击。 正如前面介绍的那样,受j a v a 智能卡中资源的限制,j a v a 智能卡不得不将j a v a a p p l e t 的代码转换和类型检验工作交由卡外虚拟机执行。然后,再由j c r e 的下 载安装组件将包含字节码的c a p 文件下载到j a v a 智能卡内【2 2 】,并最后交由卡内 虚拟机执行。由于卡外虚拟机的转换和校验工作发生于不可信的p c 环境中,因此 存在着攻击者篡改字节码,以实现攻击j a v a 语言类型系统的可能性。 2 3 2 安全防范手段 针对上述攻击,可以采用以下两种防范手段: 基于字节码签名的安全下载机制。 即在安全的p c 环境下,使用p k i 机制对卡外虚拟机转换的字节码进行签名。 然后通过设计相应的j c r e 安全下载组件,对将要下载到卡内的字节码进行验证, 以确保其完整性2 3 1 。采用这种安全下载机制可有效地防范针对j a v a 语言类型系统 j a v a 智能卡字节码校验算法的研究与实现 的攻击。但这种解决方案限制了用户自由下载和安装j a v aa p p l e t 的权利。同时, 可信第三方( t r u s t e dt h i r dp a r t y ,简称t t p ) 的引入也在一定程度上降低了j a v a 智 能卡的应用灵活性。目前基于字节码签名下载机制的j a v a 智能卡也被称为封闭 ( c l o s e ) 型j a v a 智能卡,而对应的另一类则被称为开放( o p e n ) 型j a v a 智能卡。 基于卡内字节码校验的j a v a 虚拟机。 解决上述攻击的另一措施是在j a v a 智能卡内构建字节码校验器 2 4 】,在解释器 解释执行相应的代码之前,首先对字节码的类型进行检验,只有符合j a v a 语言类 型一致性原则,才允许将其下载到j a v a 智能卡内。显然,这种措施比采用前一种 更为灵活。 实际上,j a v a 智能卡虚拟指令集为实现字节码校验已经对指令进行了详细地 划分。例如,将局部变量加载到操作数栈的指令可分为以下三种:a l o a d 、s l o a d 、 i l o a d ,依次表示将r e f e r e n c e ( 弓l 用) 型、s h o r t 型和i n t 型数据加载到栈项。相应的返 回指令也可分为三种( 除直接返回r e t u r n 外) ,即a r e t u r n 、s r e t u m 、i r e t u m ,分别表 示向调用者返回r e f e r e n c e 型、s h o r t 型和i n t 型数据。上述将数据加载到操作数栈 和将数据返回调用者的指令在实现上并无本质区别,但将这些指令按其处理的数 据类型进行细化正是为了便于进一步实现字节码校验功能。例如,如果出现图2 5 中所示的情况,虚拟机中的字节码校验器将通过指令序列“a l o a d0 、i r e t u m 判 断出操作数栈顶的数据类型( r e f e r e n c e 型数据) 与向调用者返回的数据类型( i n t 型 数据) 不一致,从而拒绝下载该a p p l e t 应用程序。 图2 5 使用字节码校验实现类型一致性检查 这一解决方案的不足之处在于,字节码校验功能会耗费大量的系统资源i l 6 j ( 例如时间、内存等) 。因此字节码校验多出现在p c 计算机环境下的j a v a 平台之中。 由于j a v a 智能卡的资源非常有限,因此目前实现字节码校验机制的j a v a 智能卡 产品很少。表2 1 【2 5 】列出了欧美主要j a v a 智能卡厂商2 0 0 6 年的产品性能介绍。其 v e r i f i e r 一列用于指明该产品是否在卡内虚拟机中实现了字节码校检功能,如表中 所示,除c y b e r f l e x 一家外,其余厂商都没有提供字节码校验功能。 第二章j a v a 智能卡技术研究 表2 12 0 0 6 年欧美主要j a v a 智能卡厂商生产的产品性能表 j a v ac a r dl c , a dp a r a mi n s t a l lp a r a ml o a dm o d eb l o c ks i z ev e r i f i e rd e b u g j r c o p 2 02 5 5 j c o p 4 1t 12 5 5 c y b e r f l e x3 2 k c fc fa i o2 5 5 t l y e s c y b e r f l e x6 4 k c fc fa i 02 5 5 t l y e s g & d 2 1 1t 2c b c 木2 5 5 g & de x p e r t6 4t 22 5 5 g & de x p e r t3 0t 12 5 5 o b e r t h u rc o s m o6 4t 22 5 5 ( 其中t l 表示字节码校验功能基于t r u s t e dl o g i c 实现) 无论采用安全下载机制,还是卡内字节码校验机制,虽然很大程度上能提高 j a v a 智能卡的安全性,但都不是万无一失的。目前针对j a v a 智能卡最有效的攻击 手段是边通道( s i d e c h a n n e l ) t 2 6 2 7 ,2 8 1 攻击。例如,典型的针对e 2 :p r o m 的毛刺攻击 ( g l i t c ha t t a c ko ne 2 p r o m ) 和针对数据总线的激光干扰攻击【2 9 l ( 1 a s e ra t t a c ko nad a t a b u s ) 。借助这些攻击手段,攻击者可以实现忽略或跳过某些关键指令、增加或减 少某一循环,以及篡改数据总线上数据的目的【1 6 j 。因此,构建具有运行时安全检 查功能的卡内j a v a 虚拟机是十分必要的。 2 4 本章小结 本章首先简要介绍了j a v a 智能卡技术的基本概念;然后通过举例就当前基于 j a v a 智能卡的应用的安全性进行了分析,指出了当前j a v a 智能卡所面临的两类主 要安全性问题;最后就本文所研究的安全问题提出了两种安全防范手段。 第三章字节码校验技术研究 第三章字节码校验技术研究 字节码校验是用来保证j a v a 智能卡应用下载安全性的重要措施之一。现有 j a v a 智能卡采用的是在卡外进行字节码校验的方法,恶意代码完全有可能绕过这 个校验环节。理想的方法是在j a v a 智能卡上实现字节码校验过程,由卡上的虚拟 机来进行校验。这种校验方式基于运行时的数据类型分析和数据溢出分析。但由 于j a v a 智能卡本身在处理能力和存储空间方面的限制,这种校验过程很难在j a v a 智能卡上实现。为了实现这一目标,国内外的许多学者对此作了深入研究。下面 分别以s u n 公司提出的传统字节码校验算法【3 0 , 3 1 , 3 2 】和最新提出的基于d b g ( 有向 分枝图,d i r e c t e db r a n c hg r a p h ) 并f l 缓存策略的字节码校验算法【3 3 j 来讲述字节码校 验技术的研究。 3 1j a v a 虚拟机字节码校验算法综述 j a v a 虚拟机是基于堆栈结构的,指令在栈中对参数变量进行压栈和弹栈操作。 此外还包括一组对应的寄存器( 也称局部变量) ,“l o a d 指令将存储在给定寄存器 内的数值压入栈中,而“s t o r e 指令将栈顶数值存储到寄存器中。堆栈和寄存器 在方法调用过程中都保存了方法的部分信息,其入口点记录了所用的寄存器号和 堆栈相关信息。 j a v a 虚拟机的重要特征是大多数字节码指令的执行是基于类型的。例如,i a d d 指令( i n t 型数加法) 需要初始状态下栈至少存放两个i n t 型数据,这样才能将i n t 型 结果压入栈中。同理,g e t f i e l dc ff 指令( 访问类c 中声明的类型f 的实例化域力 需要栈顶元素为类c 或其子类的一个实例对象引用,执行该指令时就会弹出该引 用并将类型f 的值( 类型域厂的值) 压入栈中,一个具体的j a v a 源程序及对应的字 节码指令如图3 1 所示: j a v a 智能卡字节码校验算法的研究与实现 m e t h o ds t a t i ci n tf a c t o r i a i ( m t ) , 2 r e g i s t e r s ,2s t a c ks l o t s o :i c o n s t1 墒擞作数栈中压入i n t 型立即数1 tl s t o r e1 爝操作数栈栈顶元素( i n t 型) 保存列l 号局部变量区中 2 = i l o a d 一0 蛔载第0 个局部变量中的i n t 鍪数据到操作数栈中 3 , f i e1 4 细果小于等予0 则跳转到1 4 6 = i l o a d 一1 仂载第1 个局部变量中的i n t 墅数据到操作数栈中 7 l l o a d 一0 伽载第o 个局部变量中的i n t 壁数据到操作数拽中 8i m u l t l 蘸j i n t 型数据相乘 9 l s t o r e _ l 海操作数棱拽顶元素( i n t 型) 保存劐l 号局部变量区串 1 0i m c0 ,一i 号局部变重区中的i n t 型数字加上其后的立即数一l l l g o t ( 2 值接跳转到2 1 4 i l o a d 一1 旧n 戴第t 个局部变薰中的i n t 型数据到操作数栈中 i 5i r e t u m y 函数返回,并返回一个i n t 壁值 图3 1j a v a 源程序及对应的字节码指令 一般来说,j a v a 虚拟机需要满足以下条件才能保证程序操作正确。 类型正确:指令参数类型与预期一致; 无栈溢出:包括栈的上溢和下溢,即指令不会对空栈执行出栈操作,也不会在 栈满状态下执行压栈操作; 代码密封( c o d ec o n t a i n m e n t ) :在该方法作用域内程序计数器应指向程序代码起 始处( 不是程序代码末尾,也不是中间) ; 寄存器初始化:对寄存器执行l o a d 操作和s t o r e 操作应对应,对未初始化的寄 存器执行l o a d 操作是错误的; 对象初始化:当类c 的实例创建后,类c 的实例化方法须在类实例访问之前调 用。 要满足以上条件,可以在执行字节码指令时对其动态校验,这称为“d e f e n s i v e i v ma p p r o a c h ” 3 4 】。然而在指令执行期间进行校验不仅工作量很大,指令执行速 度也会明显降低。字节码校验的目的是在指令加载期间对字节码进行一次性静态 分析。在上述条件下,通过检验的字节码忽略动态校验后执行速度会加快。 需要指出的是,字节码校验不能保证代码的安全执行,这是因为代码的许多 关键特性需要动态校验,例如虚拟机的数组越界、空指针以及a p i 中的访问控制 等情况。字节码校验只是将指令执行时的校验操作转移到指令加载时段。 3 2 传统字节码校验算法 s u n 公司提出的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论