CN117056906B - 一种指令访问控制方法、系统、存储介质及设备 - Google Patents
一种指令访问控制方法、系统、存储介质及设备 Download PDFInfo
- Publication number
- CN117056906B CN117056906B CN202310937008.XA CN202310937008A CN117056906B CN 117056906 B CN117056906 B CN 117056906B CN 202310937008 A CN202310937008 A CN 202310937008A CN 117056906 B CN117056906 B CN 117056906B
- Authority
- CN
- China
- Prior art keywords
- instruction
- class
- package
- instance
- checking whether
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 216
- 238000004590 computer program Methods 0.000 claims description 6
- 239000000306 component Substances 0.000 description 43
- 230000008676 import Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 239000008186 active pharmaceutical agent Substances 0.000 description 4
- 239000003550 marker Substances 0.000 description 3
- 238000012946 outsourcing Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000002787 reinforcement Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005242 forging Methods 0.000 description 1
- 238000011423 initialization method Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000011900 installation process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Databases & Information Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种指令访问控制方法、系统、存储介质及设备,方法包括:在类转换程序生成可执行文件中,对类组件增加类声明实例域的访问许可信息;在虚拟机执行实例域访问指令前,通过指令解释器检查是否访问超类所声明的实例域,并检查超类所属包是否和当前执行指令所属类是同一个包,如果不是,检查实例域是否为私有实例域或者包可见实例域;若是,抛出安全异常,以拒绝执行指令;在虚拟机执行包可见虚方法调用指令前,通过指令解释器检查是否调用超类所声明的虚方法,如果是检查虚方法所属的类是否和当前虚方法指令所属的类包是同一个包,如果不是,则抛出安全异常,以拒绝执行指令。采用本申请,可解决实例域访问以及虚方法调用存在的安全风险。
Description
技术领域
本发明涉及指令访问控制的技术领域,特别涉及一种指令访问控制方法、系统、存储介质及设备。
背景技术
传统在资源受限的系统(如安全元件)实现的面向对象的虚拟机,可以硬件独立地执行采用高级语言编写的应用,经过编译、转换为可执行的文件格式,安装到安全元件的运行环境中执行。
传统虚拟机指令集通过常量池引用导入包以及本包定义的类、静态域、实例域、静态方法以及虚方法;在资源受限系统实现跨平台后安装应用,需要采取优化技术简化类加载过程的处理,比如采用基于令牌的链接技术,将常量池中符号名称替换固定长度的标记,明显减少了常量池的大小;因此可通过引用位置组件简化指令中的常量池索引的解析过程;但现有技术在处理实例域访问以及方法调用存在安全风险。
发明内容
本申请实施例提供了一种指令访问控制方法、系统、存储介质及设备。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。其唯一目的是用简单的形式呈现一些概念,以此作为后面的详细说明的序言。
第一方面,本申请实施例提供了一种指令访问控制方法,方法包括:
在类转换程序生成可执行文件中,对类组件增加类声明实例域的访问许可信息;在虚拟机执行实例域访问指令前,通过指令解释器检查是否访问超类所声明的实例域,并检查超类所属包是否和当前执行指令所属包是同一个包,如果不同包,检查实例域是否为私有实例域或者包可见实例域;若是,抛出安全异常,以拒绝执行指令;
在虚拟机执行包可见虚方法调用指令前,通过指令解释器检查是否调用超类所声明的虚方法,如果是检查虚方法所属的包是否和当前虚方法指令所属的包是同一个包,如果不是同一个包,则抛出安全异常,以拒绝执行指令;
当包可见方法或者私有方法由于偏移大小无法放在传统的方法调用指令中且需要放到全局引用表时,全局引用表通过增加相关信息可区分出是公有成员还是包可见方法或者私有方法,在虚拟机执行方法调用时,如果方法引用是全局引用表的索引,通过指令解释器检查此索引存储的是否为包可见方法或者私有方法,如果是,检查当前方法调用指令所属包是否和包可见方法或者私有方法所属包是同一个包,如果不是抛出安全异常,以拒绝执行指令。
可选的,对类组件增加类声明实例域的访问许可信息,包括:
将类组件的实例域按照访问公有或者保护、包可见或者私有划分为2组;
按照预设顺序对每组分别分配实例域的标记值,记录每组标记值的范围信息,从而通过标记值大小可以得到访问许可信息。
可选的,按照以下步骤找到超类,包括:
根据对象引用查询该对象的类信息,检查是否访问超类所声明的实例域,如果是,读取类信息指示的当前类的直接超类信息;检查实例域访问指令中实例域索引是否在超类所声明的实例域范围内;如果不在,检查是否在超类的超类所声明的实例域范围,直到找到声明此实例域的超类。
可选的,抛出安全异常,包括:
在超类的访问许可信息中获取预设字段的内容,得到第一个公有或者保护实例域标记、第一个包可见或者私有实例域标记;
检查实例域访问指令中实例域索引是否大于或等于第一个包可见或者私有实例域标记,如果大于或等于,确定超类和当前指令的方法所属类是否在同一包中,如果不在同一包中则抛出安全异常;
可选的,检查是否调用异包super类声明的包可见虚方法;若是,则抛出安全异常,包括:
依据包可见虚方法标记值,确定包可见虚方法的声明类;
如果所属声明类是超类,且超类与该指令所属的类不属于同一个包,抛出安全异常。
可选的,更新指令解释器的实现方式,包括:
在接收到调用非虚方法类指令时,检查指令中是否含有全局引用表索引;如果指令中含有全局引用表索引,检查该指令对应的方法引用是否是大偏移方法引用,如果是,则检查调用的指令的方法和被调用方法是否属于同一包,如果不在同一包中,则抛出安全异常,以拒绝访问。
第二方面,本申请实施例提供了一种指令访问控制系统,系统包括:
第一判断模块,用于在类转换程序生成可执行文件中,对类组件增加类声明实例域的访问许可信息;在虚拟机执行实例域访问指令前,通过指令解释器检查是否访问超类所声明的实例域,并检查超类所属包是否和当前执行指令所属包是同一个包,如果不同包,检查实例域是否为私有实例域或者包可见实例域;若是,抛出安全异常,以拒绝执行指令;
第二判断模块,用于在虚拟机执行包可见虚方法调用指令前,通过指令解释器检查是否调用超类所声明的虚方法,如果是检查虚方法所属的包是否和当前虚方法指令所属的包是同一个包,如果不是同一个包,则抛出安全异常,以拒绝执行指令;
第三判断模块,用于当包可见方法或者私有方法由于偏移大小无法放在传统的方法调用指令中且需要放到全局引用表时,全局引用表通过增加相关信息可区分出是公有成员还是包可见方法或者私有方法,在虚拟机执行方法调用时,如果方法引用是全局引用表的索引,通过指令解释器检查此索引存储的是否为包可见方法或者私有方法,如果是,检查当前方法调用指令所属包是否和包可见方法或者私有方法所属包是同一个包,如果不是抛出安全异常,以拒绝执行指令。
第三方面,本申请实施例提供一种计算机存储介质,计算机存储介质存储有多条指令,指令适于由处理器加载并执行上述的方法步骤。
第四方面,本申请实施例提供一种设备,可包括:处理器和存储器;其中,存储器存储有计算机程序,计算机程序适于由处理器加载并执行上述的方法步骤。
本申请实施例提供的技术方案可以包括以下有益效果:
在本申请实施例中,本申请对类组件增加类声明实例域的访问许可信息,因此在实例域访问指令前或者包可见虚方法调用指令前,可通过访问许可信息对本次访问进行安全检查,在检查不通过的情况下抛出异常以拒绝访问,从而可解决实例域访问以及虚方法调用存在的安全风险。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是本申请实施例提供的一种指令访问控制方法的流程示意图;
图2是本申请实施例提供的一种Java程序编译、转换、安装以及执行流程示意图;
图3是本申请实施例提供的一种常量池组件包括的引用项示意图;
图4是本申请实施例提供的一种对象的实例域的存储布局示意图;
图5是本申请实施例提供的一种应用安装程序解析引用位置组件实现对方法组件中的实例域访问指令中常量池索引的替换处理示意图;
图6是本申请实施例提供的一种指令访问控制系统的系统结构示意图;
图7是本申请实施例提供的一种设备的结构示意图。
具体实施方式
以下描述和附图充分地示出本发明的具体实施方案,以使本领域的技术人员能够实践它们。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是如所附权利要求书中所详述的、本发明的一些方面相一致的系统和方法的例子。
在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。此外,在本发明的描述中,除非另有说明,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本申请提供了一种指令访问控制方法、系统、存储介质及设备,以解决上述相关技术问题中存在的问题。本申请提供的技术方案中,本申请对类组件增加类声明实例域的访问许可信息,因此在实例域访问指令前或者包可见虚方法调用指令前,可通过访问许可信息对本次访问进行安全检查,在检查不通过的情况下抛出异常以拒绝访问,从而可解决实例域访问以及虚方法调用存在的安全风险,下面采用示例性的实施例进行详细说明。
下面将结合附图1-附图5,对本申请实施例提供的指令访问控制方法进行详细介绍。该方法可依赖于计算机程序实现,可运行于基于冯诺依曼体系的指令访问控制系统上。该计算机程序可集成在应用中,也可作为独立的工具类应用运行。
请参见图1,为本申请实施例提供了一种指令访问控制方法的流程示意图。
如图1所示,本申请实施例的方法可以包括以下步骤:
S101,在类转换程序生成可执行文件中,对类组件增加类声明实例域的访问许可信息;在虚拟机执行实例域访问指令前,通过指令解释器检查是否访问超类所声明的实例域,并检查超类所属包是否和当前执行指令所属包是同一个包,如果不同包,检查实例域是否为私有实例域或者包可见实例域;若是,抛出安全异常,以拒绝执行指令;
其中,将源码包中的Java文件由编译器编译为Class文件后,需要类转换程序生成可执行文件。具体是:将一个包中多个Class文件转换为一个非常紧凑的可执行文件(比如Java卡的CAP文件),将可执行文件下载并安装到支持虚拟机的卡内,安装过程需要完成下载的可执行程序和卡内程序(应用编程接口API)的链接处理,后续执行应用程序时不需要进行任何类加载处理操作,具体可参见图2。
具体的,Java卡允许下载的可执行文件(包括库或者应用)与Java卡上已存在的API链接,该方法将引用的项表示为不透明的标记,而不是Java类文件中使用的Unicode字符串。包中定义的所有实例域都分配公有或私有实例域标记。一组实例域标记的范围仅限于声明实例域的类,不包括该类的超类声明的实例域。外部可见的公有或者保护实例域标记称为公有标记,包可见或者私有实例域标记称为私有标记,Java卡规范规定在一个类中公有标记的编号必须小于私有标记的编号,对于公有标记,引用类型标记必须大于基本类型标记;对于私有标记,引用类型标记必须小于基本类型标记。包中定义的所有虚方法都分配公有或私有虚方法标记,公有或者保护虚方法分配公有虚方法标记,包可见虚方法分配私有虚方法标记;公有或者保护虚方法和包可见虚方法的标记单独编号,公有或者保护虚方法在整个类的继承结构编号,覆盖的的虚方法具有相同的标记值;而包可见虚方法标记在每个包内声明的继承结构编号,包内覆盖的的包可见虚方法具有相同的标记值。
现有技术的可执行文件(比如Java卡的CAP文件)包括一个Java包中所有类的可执行的二进制表示,包括如下核心组件:导入组件、类组件、常量池组件、方法组件、引用位置组件;导入组件包括该包导入(import)的所有包的信息,每个导入包分配唯一的私有包标记。类组件包括本包声明的所有接口以及类的动态绑定信息,类组件中包含的类信息足以解析调用虚方法和接口方法以及定位引用类型的实例域,包括数组。常量池组件Java卡访问Java成员的相关指令通过引用常量池方式指定引用的成员,即指令中包括常量池索引,常量池的该索引位置包括该引用类型的具体信息。实例域引用需要指定对象的类信息(即类引用)以及类声明的实例域,实例域包括外部可见的公有或保护实例域、包可见实例域以及私有实例域。虚方法引用需要指定对象的类信息(即类引用)以及类声明的虚方法,虚方法包括外部可见的公有或保护虚方法以及包可见虚方法。类引用可指定本包声明的类或者导入包声明的类。具体内容参见附图3,本申请主要关注实例域和虚方法引用。方法组件包括包中类声明的所有方法的字节码(指令),其中部分指令包括常量池索引。引用位置组件可指定方法组件的字节码中常量池索引的位置信息,卡内可执行文件安装程序需要解析该组件对指令中的常量池索引进行替换,执行指令时不用访问常量池。
实例域访问指令例如表1所示。其中t指定实例域的类型,可以是a表示引用类型,b表示byte类型,s表示short类型,i表示int类型。getfield_<t>_this和putfield_<t>_this指令对当前对象进行操作,其他指令要求对象引用先放入操作数栈中。安装可执行文件时指令中的常量池索引替换为实例域的索引,即安装程序更新后的实例域标记值。
表1
虚方法调用指令例如表2所示。invokevirtual指令要求对象引用以及方法调用参数先放入操作数栈中。安装可执行文件时指令中的常量池索引替换为虚方法的索引以及虚方法参数个数(参数个数也可从方法头从获取,或者指令包含了参数个数,可不包括参数个数),虚方法的索引就是虚方法标记值(安装程序需要增加包可见虚方法标记值)。
表2
super方法调用指令如表3所示。invokespecail指令要求对象引用以及方法调用参数先放入操作数栈中。安装可执行文件时指令中的常量池索引替换为该虚方法的方法偏移。
表3
静态方法调用指令例如表4所示,invokestatic指令要求方法调用参数先放入操作数栈中。安装可执行文件时指令中的常量池索引替换为该静态方法引用或者方法偏移。
表4
卡内可执行文件安装程序:
解析常量池组件:增加类的包可见或者私有实例域的标记值。增加类的包可见虚方法的标记值。解析super方法引用为虚拟机实现特定的方法应用。解析引用位置组件:用常量池组件中实例域标记值替换方法组件中实例域访问指令中包含的常量池索引。用常量池组件中虚方法标记值替换方法组件中虚方法调用指令中包含的常量池索引。用常量池组件中super方法的方法引用替换方法组件中super方法调用指令中包含的常量池索引。具体可参见图4和图5。图4中对象实例域包括所有超类以及自身声明的实例域,超类的实例域排在其直接子类声明实例域的前端,实例域通过实例域索引访问;以及示意应用安装程序对常量池中的实例域引用的解析处理。
虚拟机指令解释器,指令解释器执行实例域访问指令,用实例域标记值作为索引访问对象中指定的实例域。指令解释器执行虚方法调用指令,用虚方法标记值作为索引访问对象中指定的虚方法。指令解释器执行super方法调用指令,用方法引用调用该虚方法。
基于上述内容,现有技术中存在缺陷,攻击者通过下述方法达到如下攻击目的:访问外包类的公有类的包可见或者私有实例域;调用外包类的公有类的包可见虚方法。按照Java语言规范,上述访问是不允许的,因此提出本申请的技术内容。需要说明的是:外包可以是系统提供的掩膜API包或者后下载安装的库包,掩膜API也称系统API,通过这些API虚拟机环境为应用提供安全相关的服务。
在本申请实施例中,为了解决实例域访问调用存在的安全风险,需要进行实例域访问的安全加固,具体可以是对可执行文件格式更新,因此在类转换程序生成可执行文件中,对类组件增加类声明实例域的访问许可信息。
在一种可能的实现方式中,对类组件增加类声明实例域的访问许可信息时,将类组件的实例域按照访问公有或者保护、包可见以及私有划分为3组;按照预设顺序对每组分别分配实例域的标记值,记录每组标记值的范围信息,从而通过标记值大小可以得到访问许可信息。
在一种实施方式中,类声明的实例域标记按照下述顺序编号,将引用类型连续存放便于垃圾回收时对象遍历。
1.公有或者保护 基本类型
2.公有或者保护 引用类型
3.包可见或者私有引用类型
4.包可见或者私有基本类型
类信息增加如下2个字段,第一个公有或者保护实例域标记,第一个包可见或者实例域标记,如果该类声明的实例域中没有指定类型实例域,该字段的值为0xFF。
S102,在虚拟机执行包可见虚方法调用指令前,通过指令解释器检查是否调用超类所声明的虚方法,如果是,检查虚方法所属的包是否和当前虚方法指令所属的包是同一个包,如果不是同一个包,则抛出安全异常,以拒绝执行指令;
在本申请实施例中,按照以下步骤找到超类,根据对象引用查询该对象的类信息,检查是否访问超类所声明的实例域,如果是,读取类信息指示的当前类的直接超类信息;检查实例域访问指令中实例域标记是否在超类所声明的实例域范围内;如果不在,检查是否在超类的超类所声明的实例域范围,直到找到声明此实例域的超类。
在本申请实施例中,在抛出安全异常时,首先确定超类和当前执行指令所属包是否为同一个包,如果不是,在超类的访问许可信息中获取预设一个字段的内容,得到第一个包可见或者私有实例域标记;然后检查实例域访问指令中实例域索引是否大于或等于第一个包可见或者或者私有实例域标记,如果大于或等于则抛出安全异常。
需要说明的是,卡内可执行文件安装程序更新中,安装可执行文件需要对这些新增字段的值进行相应的更新,如果声明了指定类型实例域,需要同步累加父类的最大实例域标记。
在一种可能的实现方式中,执行实例域访问指令前进行如下安全检查。具体检查步骤如下:依据对象引用查询该对象的类信息,获取该类预设的两个字段信息,第一个公有或者保护实例域标记值,第一个包可见或者私有实例域标记值,如果实例标记大于或者等于其中一个标记值,确定访问当前类的实例域字段,如果不是,确定访问当前类的直接超类的实例域信息以及访问实例域的许可类型,通过比较两个预设字段确定是否访问该超类声明的实例域,如果不是,继续访问超类的超类,直到找到声明该实例域的超类;如果访问包可见或者私有实例域,确认超类和当前指令所属类是否在同一包中;如果不在同一包中,则抛出安全异常。
例如表5所示。
表5
在本申请实施例中,检查是否调用异包super类声明的包可见虚方法;若是,则抛出安全异常,具体为:依据包可见虚方法标记值,确定包可见虚方法的声明类;如果所属声明类是超类,且超类与该指令所属的类不属于同一个包,抛出安全异常。
在一种实施例中,执行包可见虚方法调用指令前进行如下安全检查:依据虚方法标记值确定虚方法的声明类,如果标记值较小(Java卡示例,小于package_method_table_base字段的值)表示该虚方法的声明类是对象的类的超类,需要确认超类是否和对象的类属于同一包中,如果不在同一包中抛出安全异常。
进一步地,调用方法安全加固方案中,所述私有方法包括私有实例方法、私有实例初始化方法以及私有静态方法。
S103,当包可见方法或者私有方法由于偏移大小无法放在传统的方法调用指令中且需要放到全局引用表时,全局引用表通过增加相关信息可区分出是公有成员还是包可见方法或者私有方法,在虚拟机执行方法调用时,如果方法引用是全局引用表的索引,通过指令解释器检查此索引存储的是否为包可见方法或者私有方法,如果是,检查当前方法调用指令所属包是否和包可见方法或者私有方法所属包是同一个包,如果不是抛出安全异常,以拒绝执行指令。
在本申请实施例中,更新虚拟机的全局引用表实现方式包括:更新全局引用表的实现方式,可区分出包可见或者私有方法;增加标记用于区分偏移超过32k的包可见或者私有方法;比如可以在表示包的内部标识的1字节的高位增加标记;或者对偏移超过32k的包可见或者私有方法采用单独引用表,本文称为大偏移引用表,正常全局引用表和大偏移引用表的索引不同,16位引用用b15b14…b1b0表示,可用次高位b14进行区分。
在本申请实施例中,更新指令解释器的实现方式为:在接收到调用invokespecial指令或者invokestatic指令时,检查指令中是否含有全局引用表索引;如果指令中含有全局引用表索引,检查该指令对应的方法引用是否是大偏移方法引用,如果是,则检查调用的指令的方法和被调用方法是否属于同一包,如果不在同一包中,则抛出安全异常,以拒绝访问。
具体的,更新指令解释器时,调用invokespecial或者invokestatic指令时,检查指令中是否含有全局引用表索引,如果有,检查方法引用是否是私有方法引用,如果抛出安全异常检查是否大偏移方法引用,如果是,检查调用指令的方法和被调用方法是否属于同一包,不在同一包抛出安全异常。
在本申请另一个实施例,重新设计非虚方法类调用方法指令,包括调用本包方法的指令和调用导入包中方法的指令。调用本包方法和调用导入包中的方法可采用不同指令码,常量池索引可采用16位或者更长,调用本包方法的16位常量池索引可直接替换为16位的地址偏移,无需将超过32k偏移的私有方法的地址放入全局引用表中。由于全局引用表没有私有方法的地址,攻击者无法通过修改引用位置组件或者其他方式伪造方法调用指令中的全局引用表的索引就调用导入包中的私有或者包可见的方法。
进一步地,如果在虚拟机执行实例域访问指令前或者在虚拟机执行包可见虚方法调用指令前检查的结果符合要求,则执行实例域访问指令或者包可见虚方法调用指令,以执行相关业务逻辑。
需要说明的是,尽管本申请针对Java卡虚拟机实现陈述发明的原理,同样适用其他采用标记链接的虚拟机实现方式,包括指令集类型(比如采用寄存器指令集)、可执行文件生成、可执行文件卡内安装程序以及虚拟机的指令解释器的实现。
在本申请实施例中,对类组件增加类声明实例域的访问许可信息,因此在实例域访问指令前或者包可见虚方法调用指令前,可通过访问许可信息对本次访问进行安全检查,在检查不通过的情况下抛出异常以拒绝访问,从而可解决实例域访问以及虚方法调用存在的安全风险。
下述为本发明系统实施例,可以用于执行本发明方法实施例。对于本发明系统实施例中未披露的细节,请参照本发明方法实施例。
请参见图6,其示出了本发明一个示例性实施例提供的指令访问控制系统的结构示意图。该指令访问控制系统可以通过软件、硬件或者两者的结合实现成为设备的全部或一部分。该系统1包括第一判断模块10、第二判断模块20、第三判断模块30。
第一判断模块10,用于在类转换程序生成可执行文件中,对类组件增加类声明实例域的访问许可信息;在虚拟机执行实例域访问指令前,通过指令解释器检查是否访问超类所声明的实例域,并检查超类所属包是否和当前执行指令所属包是同一个包,如果不同包,检查实例域是否为私有实例域或者包可见实例域;若是,抛出安全异常,以拒绝执行指令;
第二判断模块20,用于在虚拟机执行包可见虚方法调用指令前,通过指令解释器检查是否调用超类所声明的虚方法,如果是检查虚方法所属的包是否和当前虚方法指令所属的包是同一个包,如果不是同一个包,则抛出安全异常,以拒绝执行指令;
第三判断模块30,用于当包可见方法或者私有方法由于偏移大小无法放在传统的方法调用指令中且需要放到全局引用表时,全局引用表通过增加相关信息可区分出是公有成员还是包可见方法或者私有方法,在虚拟机执行方法调用时,如果方法引用是全局引用表的索引,通过指令解释器检查此索引存储的是否为包可见方法或者私有方法,如果是,检查当前方法调用指令所属包是否和包可见方法或者私有方法所属包是同一个包,如果不是抛出安全异常,以拒绝执行指令。
需要说明的是,上述实施例提供的指令访问控制系统在执行指令访问控制方法时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的指令访问控制系统与指令访问控制方法实施例属于同一构思,其体现实现过程详见方法实施例,这里不再赘述。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
在本申请实施例中,本申请对类组件增加类声明实例域的访问许可信息,因此在实例域访问指令前或者包可见虚方法调用指令前,可通过访问许可信息对本次访问进行安全检查,在检查不通过的情况下抛出异常以拒绝访问,从而可解决实例域访问以及虚方法调用存在的安全风险。
本发明还提供一种计算机可读介质,其上存储有程序指令,该程序指令被处理器执行时实现上述各个方法实施例提供的指令访问控制方法。
本发明还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各个方法实施例的指令访问控制方法。
请参见图7,为本申请实施例提供了一种设备的结构示意图。如图7所示,设备1000可以包括:至少一个处理器1001,至少一个网络接口1004,用户接口1003,存储器1005,至少一个通信总线1002。
其中,通信总线1002用于实现这些组件之间的连接通信。
其中,用户接口1003可以包括显示屏(Display)、摄像头(Camera),可选用户接口1003还可以包括标准的有线接口、无线接口。
其中,网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。
其中,处理器1001可以包括一个或者多个处理核心。处理器1001利用各种接口和线路连接整个电子设备1000内的各个部分,通过运行或执行存储在存储器1005内的指令、程序、代码集或指令集,以及调用存储在存储器1005内的数据,执行电子设备1000的各种功能和处理数据。可选的,处理器1001可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器1001可集成中央处理器(Central Processing Unit,CPU)、图像处理器(Graphics Processing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示屏所需要显示的内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器1001中,单独通过一块芯片进行实现。
其中,存储器1005可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。可选的,该存储器1005包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。存储器1005可用于存储指令、程序、代码、代码集或指令集。存储器1005可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现上述各个方法实施例的指令等;存储数据区可存储上面各个方法实施例中涉及到的数据等。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储系统。如图7所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及指令访问控制应用程序。
在图7所示的设备1000中,用户接口1003主要用于为用户提供输入的接口,获取用户输入的数据;而处理器1001可以用于调用存储器1005中存储的指令访问控制应用程序,并具体执行以下操作:
在类转换程序生成可执行文件中,对类组件增加类声明实例域的访问许可信息;在虚拟机执行实例域访问指令前,通过指令解释器检查是否访问超类所声明的实例域,并检查超类所属包是否和当前执行指令所属包是同一个包,如果不同包,检查实例域是否为私有实例域或者包可见实例域;若是,抛出安全异常,以拒绝执行指令;
在虚拟机执行包可见虚方法调用指令前,通过指令解释器检查是否调用超类所声明的虚方法,如果是检查虚方法所属的包是否和当前虚方法指令所属的包是同一个包,如果不是同一个包,则抛出安全异常,以拒绝执行指令;
当包可见方法或者私有方法由于偏移大小无法放在传统的方法调用指令中且需要放到全局引用表时,全局引用表通过增加相关信息可区分出是公有成员还是包可见方法或者私有方法,在虚拟机执行方法调用时,如果方法引用是全局引用表的索引,通过指令解释器检查此索引存储的是否为包可见方法或者私有方法,如果是,检查当前方法调用指令所属包是否和包可见方法或者私有方法所属包是同一个包,如果不是抛出安全异常,以拒绝执行指令。
在一个实施例中,处理器1001在执行对类组件增加类声明实例域的访问许可信息时,具体执行以下操作:
将类组件的实例域按照访问公有或者保护、包可见以及私有划分为3组;
按照预设顺序对每组分别分配实例域的标记值,记录每组标记值的范围信息,从而通过标记值大小可以得到访问许可信息。
在一个实施例中,处理器1001按照以下步骤找到超类,具体行以下操作:
根据对象引用查询该对象的类信息,检查是否访问超类所声明的实例域,如果是,读取类信息指示的当前类的直接超类信息;检查实例域访问指令中实例域索引是否在超类所声明的实例域范围内;如果不在,检查是否在超类的超类所声明的实例域范围,直到找到声明此实例域的超类。
在一个实施例中,处理器1001在执行抛出安全异常时,具体执行以下操作:
在超类的访问许可信息中获取预设二个字段的内容,得到第一个公有或者保护实例域标记、第一个包可见或者私有实例域标记;
检查实例域访问指令中实例域索引是否大于或等于第一个包可见或者私有实例域标记,如果大于或等于,检查超类和当前指令所属类是否在同一包中,如果是则抛出安全异常;
在一个实施例中,处理器1001在执行根检查是否调用异包super类声明的包可见虚方法;若是,则抛出安全异常时,具体执行以下操作:
依据包可见虚方法标记值,确定包可见虚方法的声明类;
如果所属声明类是超类,且超类与该指令所属的类不属于同一个包,抛出安全异常。
在一个实施例中,处理器1001在执行更新指令解释器的实现方式时,具体执行以下操作:
在接收到调用invokespecial指令或者invokestatic指令时,检查指令中是否含有全局引用表索引;如果指令中含有全局引用表索引,检查该指令对应的方法引用是否是大偏移方法引用,如果是,则检查调用的指令的方法和被调用方法是否属于同一包,如果不在同一包中,则抛出安全异常,以拒绝访问。
在本申请实施例中,由于本申请对类组件增加类声明实例域的访问许可信息,因此在实例域访问指令前或者包可见虚方法调用指令前,可通过访问许可信息对本次访问进行安全检查,在检查不通过的情况下抛出异常以拒绝访问,从而可解决实例域访问以及虚方法调用存在的安全风险。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,指令访问控制的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,的存储介质可为磁碟、光盘、只读存储记忆体或随机存储记忆体等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。
Claims (9)
1.一种指令访问控制方法,其特征在于,所述方法包括:
在类转换程序生成可执行文件中,对类组件增加类声明实例域的访问许可信息;在虚拟机执行实例域访问指令前,通过指令解释器检查是否访问超类所声明的实例域,并检查超类所属包是否和当前执行指令所属包是同一个包,如果不同包,检查所述实例域是否为私有实例域或者包可见实例域;若是,抛出安全异常,以拒绝执行指令;
在虚拟机执行包可见虚方法调用指令前,通过指令解释器检查是否调用超类所声明的虚方法,如果是检查所述虚方法所属的包是否和当前虚方法指令所属的包是同一个包,如果不是同一个包,则抛出安全异常,以拒绝执行指令;
当包可见方法或者私有方法由于偏移大小无法放在传统的方法调用指令中且需要放到全局引用表时,全局引用表通过增加相关信息可区分出是公有成员还是包可见方法或者私有方法,在虚拟机执行方法调用时,如果方法引用是全局引用表的索引,通过指令解释器检查此索引存储的是否为包可见方法或者私有方法,如果是,检查当前方法调用指令所属包是否和包可见方法或者私有方法所属包是同一个包,如果不是抛出安全异常,以拒绝执行指令。
2.根据权利要求1所述的方法,其特征在于,所述对类组件增加类声明实例域的访问许可信息,包括:
将类组件的实例域按照访问公有或者保护、包可见以及私有划分为3组;
按照预设顺序对每组分别分配实例域的标记值,记录每组标记值的范围信息,从而通过标记值大小可以得到访问许可信息。
3.根据权利要求1所述的方法,其特征在于,按照以下步骤找到所述超类,包括:
根据对象引用查询该对象的类信息,检查是否访问超类所声明的实例域,如果是,读取所述类信息指示的当前类的直接超类信息;检查所述实例域访问指令中实例域索引是否在所述超类所声明的实例域范围内;如果不在,检查是否在所述超类的超类所声明的实例域范围,直到找到声明此实例域的超类。
4.根据权利要求3所述的方法,其特征在于,所述抛出安全异常,包括:
在超类的访问许可信息中获取预设字段的内容,得到第一个公有或者保护实例域标记值、第一个包可见或者私有实例域标记值;
检查所述实例域访问指令中实例域索引是否大于或等于所述第一个包可见或者私有实例域标记值,如果大于或等于则抛出安全异常。
5.根据权利要求1所述的方法,其特征在于,检查是否调用异包super类声明的所述包可见虚方法;若是,则抛出安全异常,包括:
依据所述包可见虚方法标记值,确定包可见虚方法的声明类;
如果所属声明类是超类,且超类与该指令所属的类不属于同一个包,抛出安全异常。
6.根据权利要求1所述的方法,其特征在于,更新指令解释器的实现方式,包括:
在接收到调用非虚方法类指令时,检查指令中是否含有全局引用表索引;如果指令中含有全局引用表索引,检查该指令对应的方法引用是否是大偏移方法引用,如果是,则检查调用的指令的方法和被调用方法是否属于同一包,如果不在同一包中,则抛出安全异常,以拒绝访问。
7.一种指令访问控制系统,其特征在于,所述系统包括:
第一判断模块,用于在类转换程序生成可执行文件中,对类组件增加类声明实例域的访问许可信息;在虚拟机执行实例域访问指令前,通过指令解释器检查是否访问超类所声明的实例域,并检查超类所属包是否和当前执行指令所属包是同一个包,如果不同包,检查所述实例域是否为私有实例域或者包可见实例域;若是,抛出安全异常,以拒绝执行指令;
第二判断模块,用于在虚拟机执行包可见虚方法调用指令前,通过指令解释器检查是否调用超类所声明的虚方法,如果是检查所述虚方法所属的包是否和当前虚方法指令所属的包是同一个包,如果不是同一个包,则抛出安全异常,以拒绝执行指令;
第三判断模块,用于当包可见方法或者私有方法由于偏移大小无法放在传统的方法调用指令中且需要放到全局引用表时,全局引用表通过增加相关信息可区分出是公有成员还是包可见方法或者私有方法,在虚拟机执行方法调用时,如果方法引用是全局引用表的索引,通过指令解释器检查此索引存储的是否为包可见方法或者私有方法,如果是,检查当前方法调用指令所属包是否和包可见方法或者私有方法所属包是同一个包,如果不是抛出安全异常,以拒绝执行指令。
8.一种计算机存储介质,其特征在于,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行如权利要求1-6任意一项的方法步骤。
9.一种设备,其特征在于,包括:处理器和存储器;其中,所述存储器存储有计算机程序,所述计算机程序适于由所述处理器加载并执行如权利要求1-6任意一项的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310937008.XA CN117056906B (zh) | 2023-07-27 | 2023-07-27 | 一种指令访问控制方法、系统、存储介质及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310937008.XA CN117056906B (zh) | 2023-07-27 | 2023-07-27 | 一种指令访问控制方法、系统、存储介质及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117056906A CN117056906A (zh) | 2023-11-14 |
CN117056906B true CN117056906B (zh) | 2024-03-29 |
Family
ID=88668377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310937008.XA Active CN117056906B (zh) | 2023-07-27 | 2023-07-27 | 一种指令访问控制方法、系统、存储介质及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117056906B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103093142A (zh) * | 2012-12-26 | 2013-05-08 | 飞天诚信科技股份有限公司 | 一种Java卡对象访问的控制方法 |
CN103914326A (zh) * | 2014-04-21 | 2014-07-09 | 飞天诚信科技股份有限公司 | 一种高效更新java指令的方法和装置 |
CN106778238A (zh) * | 2016-12-27 | 2017-05-31 | 广州智慧城市发展研究院 | 一种java智能卡访问越界的检测方法 |
CN114968282A (zh) * | 2022-05-20 | 2022-08-30 | 北京握奇智能科技有限公司 | 一种异常处理执行的优化方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8387111B2 (en) * | 2001-11-01 | 2013-02-26 | International Business Machines Corporation | Type independent permission based access control |
-
2023
- 2023-07-27 CN CN202310937008.XA patent/CN117056906B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103093142A (zh) * | 2012-12-26 | 2013-05-08 | 飞天诚信科技股份有限公司 | 一种Java卡对象访问的控制方法 |
CN103914326A (zh) * | 2014-04-21 | 2014-07-09 | 飞天诚信科技股份有限公司 | 一种高效更新java指令的方法和装置 |
CN106778238A (zh) * | 2016-12-27 | 2017-05-31 | 广州智慧城市发展研究院 | 一种java智能卡访问越界的检测方法 |
CN114968282A (zh) * | 2022-05-20 | 2022-08-30 | 北京握奇智能科技有限公司 | 一种异常处理执行的优化方法和系统 |
Non-Patent Citations (1)
Title |
---|
Java智能卡解析优化方法;张大伟;丁文锐;;北京航空航天大学学报;20090115(第01期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117056906A (zh) | 2023-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6880155B2 (en) | Token-based linking | |
US11354144B2 (en) | Java native interface and windows universal app hooking | |
JP3689368B2 (ja) | データ処理リソースを備えたマルチアプリケーション組込システムにアプリケーションをローディングする方法、対応するシステムおよび実行方法 | |
JP3632598B2 (ja) | 変更定数プールを備えたJavaランタイム・システム | |
US7430734B2 (en) | Interface invoke mechanism | |
CN108139896A (zh) | 扩展虚拟机指令集体系架构 | |
US20040268301A1 (en) | Adding new compiler methods to an integrated development environment | |
US6996804B2 (en) | Adapting polymorphic inline caches for multithreaded computing | |
US8561042B2 (en) | System and method for reducing execution time of bytecode in java virtual machine | |
US20230128866A1 (en) | Source code conversion from application program interface to policy document | |
US7089242B1 (en) | Method, system, program, and data structure for controlling access to sensitive functions | |
EP1826668A1 (en) | Fast patch-based method calls | |
CN112416418B (zh) | 应用组件的生成方法、装置、计算机设备和可读存储介质 | |
US6782532B1 (en) | Object type system for a run-time environment using generated high-order language instructions for generic functions | |
CN117056906B (zh) | 一种指令访问控制方法、系统、存储介质及设备 | |
CN106681782B (zh) | 一种编译安卓安装包的动态链接库so文件的方法和装置 | |
CN113127055A (zh) | 动态链接库文件的生成方法、应用校验方法、装置及设备 | |
CN112579129A (zh) | 基于服务器的软件更新方法、装置、设备及存储介质 | |
CN112765676B (zh) | 一种智能合约执行方法、智能合约执行装置及节点设备 | |
CN114416219B (zh) | 系统函数调用方法、装置、电子设备及可读介质 | |
US20010007146A1 (en) | Method for providing a set of software components | |
CN115037735A (zh) | 一种基于短名称的链接方法和系统 | |
CN118092962A (zh) | 代码文件的加载方法、电子设备、存储介质及程序产品 | |
CN117234590A (zh) | 指令集生成方法、装置、介质及设备 | |
CN116340904A (zh) | 应用运行保护方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |