CN105808430A - 一种多语义动态污点分析方法 - Google Patents

一种多语义动态污点分析方法 Download PDF

Info

Publication number
CN105808430A
CN105808430A CN201610122106.8A CN201610122106A CN105808430A CN 105808430 A CN105808430 A CN 105808430A CN 201610122106 A CN201610122106 A CN 201610122106A CN 105808430 A CN105808430 A CN 105808430A
Authority
CN
China
Prior art keywords
stain
semantic
instruction
program
taint
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.)
Granted
Application number
CN201610122106.8A
Other languages
English (en)
Other versions
CN105808430B (zh
Inventor
和亮
苏璞睿
杨轶
闫佳
黄桦烽
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201610122106.8A priority Critical patent/CN105808430B/zh
Publication of CN105808430A publication Critical patent/CN105808430A/zh
Application granted granted Critical
Publication of CN105808430B publication Critical patent/CN105808430B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/552Detecting local intrusion or implementing counter-measures involving long-term monitoring or reporting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种多语义动态污点分析方法。本方法为:1)对每种待跟踪语义数据分别设定唯一的污点语义类型;在一次动态污点分析过程中配置同时跟踪多种语义信息数据;2)根据每种污点语义类型,监控程序运行过程中是否有该污点语义类型的语义信息数据产生函数的调用;如果有则判定存在相应的污点源,并进行记录;3)根据监控到的每条指令语义信息以及操作数的污点状态进行污点传播计算,并将计算结果记录到影子内存;4)进行传播计算后,根据已有污点语义类型中预置的程序敏感指令集合判定该程序执行的指令是否为敏感指令,如果是则进行污点检测确定该指令位置上是否存在对应类型的污点。本发明提高了动态污点传播方法的分析效率。

Description

一种多语义动态污点分析方法
技术领域
本发明属于计算机技术领域,具体涉及一种多语义动态污点分析方法。
背景技术
动态污点分析(DynamicTaintAnalysis,简称DTA)技术从基本原理上来讲,其主要是通过跟踪外部不可信数据在程序内部的处理逻辑,并通过污点扩散规则来发现程序敏感位置中可能隐藏的污点数据内容,最终利用该机制来解决程序安全性分析中的相关问题,例如恶意代码检测、软件漏洞挖掘以及敏感数据保护等。经过多年的发展,DTA技术已经成为软件安全性分析领域中的一种重要方法。
据相关统计,自2004年至2015年间,和动态污点传播相关的研究成果多达百余项。其中,2004年由斯坦福大学J.Chow等人提出的TaintBochs系统在DTA方法的基础上首次分析了系统中敏感数据的生命周期问题,并发现许多知名软件(例如,Mozilla浏览器、Apache服务器以及Perl脚本解析引擎等)存在敏感数据泄露的风险。此外,2005年由卡内基梅隆大学的J.Newsome等人提出的TaintCheck系统首次通过DTA方法对CodeRed、Slammer等恶意蠕虫进行较好的检测和分析。最后,2010年由宾夕法尼亚大学的W.Enck、杜克大学的P.Gilbert以及英特尔实验室的B.G.Chun合作完成了著名开源系统—TaintDroid,该系统更是将DTA技术应用在了智能终端上的用户隐私保护问题。
尽管已经有众多研究者根据DTA技术取得了很多瞩目的成绩,但是对于DTA技术本身来说,仍面临着众多难以解决的问题:
(1)DTA技术适合于解决数据流相关的问题,而对于控制流相关问题来说,由于需要引入过多的污点数据,导致无法有效分析;
(2)DTA技术存在误报和漏报的问题,由于现有污点内存映射机制无法实现bit级的一一映射,因此在实际传播分析的过程中,难以避免出现误报和漏洞问题;
(3)DTA技术在分析过程中碰到的污点数据主要是代表了程序从外部接收的不可信内容,因此存在语义单一的问题,即一次DTA分析往往只能对一种语义的污点数据进行传播分析。
目前,由于问题(1)和问题(2)已有相关研究人员提出了初步的解决方案。例如,2011年加州伯克利大学以及卡内基梅隆大学的M.G.Kang等人结合静态分析技术提出了DTA++来解决控制流相关的问题。此外,2014年美国雪城大学的H.Yin等人提出了DECAF系统,该系统首次通过理论证明的方式给出了基于Bit级的污点传播规则,尽可能的消除了DTA技术中的误报和漏报问题。
对于问题(3)来说,目前尚未有相关的解决方案,如果需要对多个语义的数据内容进行动态污点分析,则现有方案一般都是通过多次分析的方式来解决,这种方式费时费力,难以应用在实际场景中。
发明内容
针对现有DTA技术存在语义单一的问题,本发明的目的在于提供一种多语义动态污点分析方法,通过不同的污点类型来表明程序中不同语义的污点数据,并设置每种类型的污点传播规则和默认传播规则,进而通过一次分析即可完成多语义污点传播过程。
一种多语义动态污点分析方法,其步骤如下:
1、根据在一次动态污点分析过程中同时跟踪多种语义信息数据的配置要求,对每种待跟踪语义信息数据设定唯一的污点语义类型;
2、根据每种污点语义类型,监控程序运行过程中是否有该污点语义类型的语义信息数据产生函数的调用进而判断是否在程序中引入了相应的污点源,如果有相应污点源的产生,则以影子内存的方式进行记录;
3、在程序动态执行的过程,根据监控到的每条指令语义信息以及操作数的污点状态进行污点传播计算,并将最终的结果记录到影子内存;
4、在进行传播计算后,根据已有污点语义类型中预置的程序敏感指令集合来判定当前目标程序执行的指令是否为敏感指令,如果是则进行污点检测,并且如果在该指令位置上存在对应类型的污点,则调用其处理方法。程序敏感指令集合是指检测污点可能被误用的一系列指令集合,包括程序跳转指令JMP以及方法调用指令CALL/RET等;这些信息只需要提前写到配置文件即可。
进一步,在上述步骤1)中的污点语义类型包括类型标识、传播规则集合、程序敏感点以及污点处理方法;步骤2)中的影子内存包括污点语义信息数据对应的内存地址或者寄存器编号、污点语义信息数据的长度以及污点语义类型,污点语义类型为空表示未被感染。
此外,在步骤3)中提到的污点传播计算流程主要包括以下三个过程:即首先在程序动态执行过程提取程序当前执行指令的语义信息;其次,根据提取的语义信息得到该指令的指令操作数,然后根据待分析指令操作数的地址来查询其对应的影子内存中污点状态,如果污点语义类型不为空且对应的传播规则集合中包含有该指令操作码的具体传播规则,则按照该规则进行污点传播计算,否则按照预置的默认传播规则计算;最后,将传播计算结果记录在该指令目的操作数对应的影子内存,同时如果该指令属于程序敏感指令集合且该指令操作数中存在污点,则调用该污点语义类型中的污点处理方法。
本发明的优点和积极效果如下:
1、本发明在传统DTA的基础上,给出了多语义污点类型的相关描述,增强了污点分析方法的描述能力;
2、本发明通过为每种语义污点定义特殊的规则集合和处理方法,保证在污点传播计算过程中,既能对多种污点类型进行统一的传播计算,同时也能够对特殊类型的污点数据进行特殊处理,从而提高了污点分析方法的处理能力;
3、本发明通过在一次动态分析的过程中对多种语义污点进行传播计算,提高了动态污点传播方法的分析效率。
综上,本发明提出的多语义动态污点分析方法,解决现有DTA技术中语义单一的问题,为推动DTA技术应用在更多的实际问题中起到了基础支撑作用。
附图说明
图1为多语义动态污点分析流程图。
图2为多语义动态污点传播计算流程图。
具体实施方式
下面结合附图详细说明本发明的技术方案:
如图1所示,一种多语义动态污点分析方法,包括以下阶段:
1.根据多语义污点配置生成不同的污点语义类型
首先解析多语义动态污点分析的配置要求,即提取同时跟踪多少种不同的污点语义类型,其次结合每种污点语义类型,初始化相关的实例参数。具体的,本发明使用实例参数TT=(T,L,C,R,P,F)来描述污点语义类型,其中T表示唯一的类型标示,例如0表示普通文件类型污点,1表示网络数据类型污点;L为污点语义类型,C表示程序中产生该种污点语义类型污点的所有方法,例如ReadFile表示产生文件类型污点的方法,recv表示网络数据类型污点的方法;R表示该种污点语义类型污点对应的传播规则集合,例如“T=1的污点的减法操作进行漂白”;P表示该种污点语义类型污点对应的程序敏感点集合,例如“T=1的程序敏感点程序调用send方法的入口处”;F表示在程序敏感点P存在该种污点语义类型污点时需要调用的处理方法,例如“当T=1的污点进入到send方法的入口处时要进行告警通知处理”。
2.监控程序动态运行过程中调用的所有方法,并结合每种污点语义类型中的TT.C来识别程序中的污点源及其类型;
在定义污点语义类型的过程中,我们给出了程序中生成每种类型污点的方法集合C。在程序执行的过程中,通过典型动态指令插装技术可提取到程序调用的方法CS=(IP,NAME),其中IP表示指令动态运行的地址集合,NAME表示方法名称。因此,通过实时比对的方法,我们可以在程序运行的过程中识别出是否有污点源产生,如果有,本发明将使用影子内存的方式进行记录,其中影子内存SM=(A,S,TT),A表示污点内存地址或者寄存器编号,S表示污点数据长度,TT表示对应的污点语义类型,如果TT为空,则表明该内存数据没有被任何污点源感染。
3.在引入污点源的基础上,根据程序动态执行的每条指令的语义信息进行相关的多语义污点传播计算,并在程序敏感点处检查是否存在污点,如果存在则调用污点处理方法,否则继续执行;
本发明在多语义污点传播计算的阶段主要以程序动态监控得到的指令序列为输入对象,图2所示显示了多语义污点传播的整个流程,具体内容如下:
(1)根据程序动态监控获取到的每条指令提取其语义信息IS,其中IS=(OPC,SRC,DST),OPC为指令的操作码,SRC为指令的源操作数集合,DST为指令的目的操作数集合;
(2)根据IS.SRC的地址进而查询其在影子内存SM中对应的污点类型TT,并判断是否为空,为空表示该条指令中不涉及污点数据,跳转至步骤(1),否则继续以下步骤;
(3)如果TT不为空,则判断该类型污点对应的特殊规则集合TT.R中是否有该操作码对应的规则,如果有则按照该规则进行传播计算,如果没有则以OPC的默认传播规则进行计算;
(4)在进行完传播计算以后,我们将结果记录在IS.DST地址对应的影子内存SM中,进而完成该条指令的污点传播计算过程;
(5)最后判断当前执行指令是否属于某一个污点语义类型中的程序敏感点,如果不是敏感点则返回步骤(1),否则调用相应的污点处理方法;
(6)根据处理方法返回的结果来判断是否完成分析任务,如果完成则整个污点分析过程结束,否则返回步骤(1)。
本发明提出的多语义动态污点分析方法,对于本领域的技术人员而言,可以根据需要自己部署不同的程序动态监控方案,以及在传播过程中添加更加复杂的传播规则,可以根据情况针对每种语义类型部署不同的传播规则、程序敏感点以及处理方法,从而获得达到特定需求的分析目的。
尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (6)

1.一种多语义动态污点分析方法,其步骤为:
1)对每种待跟踪语义数据分别设定唯一的污点语义类型;其中,在一次动态污点分析过程中配置同时跟踪多种语义信息数据;
2)根据每种污点语义类型,监控程序运行过程中是否有该污点语义类型的语义信息数据产生函数的调用;如果有,则判定该程序中存在相应的污点源,并以影子内存的方式进行记录;
3)在程序动态执行的过程,根据监控到的每条指令语义信息以及操作数的污点状态进行污点传播计算,并将计算结果记录到影子内存;
4)在进行传播计算后,根据已有污点语义类型中预置的程序敏感指令集合判定该程序执行的指令是否为敏感指令,如果是则进行污点检测确定该指令位置上是否存在对应类型的污点。
2.如权利要求1所述的方法,其特征在于,步骤2)中以影子内存方式记录的信息包括污点数据对应的内存地址或者寄存器编号、污点语义数据的长度以及污点语义类型。
3.如权利要求1或2所述的方法,其特征在于,所述污点语义类型包括类型标识以及程序中产生该种污点语义类型污点的方法集合、传播规则集合、程序敏感点和污点处理方法。
4.如权利要求3所述的方法,其特征在于,所述污点传播计算的方法为:首先根据监控到的每条指令操作数的地址来查询影子内存中该指令对应的污点状态,如果污点状态为未被感染且对应的传播规则集合中包含有该指令操作码的具体传播规则,则按照该具体传播规则进行污点传播计算,否则按照默认传播规则计算;然后将传播计算结果记录在该指令目的操作数对应的影子内存;如果该指令属于程序敏感指令集合且该指令操作数中存在污点,则调用对应污点语义类型的污点处理方法。
5.如权利要求3所述的方法,其特征在于,所述指令语义信息包括指令的操作码、指令的源操作数集合和指令的目的操作数集合。
6.如权利要求3所述的方法,其特征在于,所述步骤2)中,通过动态指令插装技术提取到程序调用的方法CS=(IP,NAME),其中IP表示指令动态运行的地址集合,NAME表示方法名称;然后根据提取的调用方法CS与每一所述方法集合中的方法进行对比,确定程序运行过程中是否有该污点语义类型的语义信息数据产生函数的调用。
CN201610122106.8A 2016-03-03 2016-03-03 一种多语义动态污点分析方法 Active CN105808430B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610122106.8A CN105808430B (zh) 2016-03-03 2016-03-03 一种多语义动态污点分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610122106.8A CN105808430B (zh) 2016-03-03 2016-03-03 一种多语义动态污点分析方法

Publications (2)

Publication Number Publication Date
CN105808430A true CN105808430A (zh) 2016-07-27
CN105808430B CN105808430B (zh) 2018-07-03

Family

ID=56466654

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610122106.8A Active CN105808430B (zh) 2016-03-03 2016-03-03 一种多语义动态污点分析方法

Country Status (1)

Country Link
CN (1) CN105808430B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107729747A (zh) * 2017-11-10 2018-02-23 中国科学院软件研究所 一种面向二进制程序的堆溢出检测方法
CN109711159A (zh) * 2018-11-26 2019-05-03 北京计算机技术及应用研究所 一种基于信息流的ip核rtl级代码安全漏洞检测方法
CN110661804A (zh) * 2019-09-29 2020-01-07 南京邮电大学 一种针对防火墙的污点分析漏洞检测方法
CN110727598A (zh) * 2019-10-16 2020-01-24 西安电子科技大学 基于动态污点跟踪的二进制软件脆弱性检测系统及方法
CN110895499A (zh) * 2018-09-13 2020-03-20 北京奇虎科技有限公司 程序溢出保护方法及装置
CN111625833A (zh) * 2020-04-13 2020-09-04 中国科学院软件研究所 一种高效的软件程序释放后重用漏洞判定方法和装置
CN112883093A (zh) * 2021-02-04 2021-06-01 湖北宸威玺链信息技术有限公司 基于动态指令流检测的数据导出方法及系统及装置及介质
CN112988563A (zh) * 2019-12-18 2021-06-18 中国电信股份有限公司 污点动态分析方法和装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521543A (zh) * 2011-12-23 2012-06-27 中国人民解放军国防科学技术大学 一种基于动态污点分析进行消息语义解析的方法
CN104750602A (zh) * 2013-12-27 2015-07-01 阿里巴巴集团控股有限公司 一种动态污点数据分析方法及装置
CN104850781A (zh) * 2014-02-17 2015-08-19 中国科学院信息工程研究所 一种动态多级恶意代码行为分析方法及系统
CN105279091A (zh) * 2015-11-19 2016-01-27 中国人民大学 一种基于动态污点分析的按需跟踪方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102521543A (zh) * 2011-12-23 2012-06-27 中国人民解放军国防科学技术大学 一种基于动态污点分析进行消息语义解析的方法
CN104750602A (zh) * 2013-12-27 2015-07-01 阿里巴巴集团控股有限公司 一种动态污点数据分析方法及装置
CN104850781A (zh) * 2014-02-17 2015-08-19 中国科学院信息工程研究所 一种动态多级恶意代码行为分析方法及系统
CN105279091A (zh) * 2015-11-19 2016-01-27 中国人民大学 一种基于动态污点分析的按需跟踪方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王蕊、冯登国、杨轶等: "基于语义的恶意代码行为特征提取及检测方法", 《软件学报》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107729747A (zh) * 2017-11-10 2018-02-23 中国科学院软件研究所 一种面向二进制程序的堆溢出检测方法
CN110895499A (zh) * 2018-09-13 2020-03-20 北京奇虎科技有限公司 程序溢出保护方法及装置
CN109711159A (zh) * 2018-11-26 2019-05-03 北京计算机技术及应用研究所 一种基于信息流的ip核rtl级代码安全漏洞检测方法
CN110661804A (zh) * 2019-09-29 2020-01-07 南京邮电大学 一种针对防火墙的污点分析漏洞检测方法
CN110727598A (zh) * 2019-10-16 2020-01-24 西安电子科技大学 基于动态污点跟踪的二进制软件脆弱性检测系统及方法
CN112988563A (zh) * 2019-12-18 2021-06-18 中国电信股份有限公司 污点动态分析方法和装置
CN111625833A (zh) * 2020-04-13 2020-09-04 中国科学院软件研究所 一种高效的软件程序释放后重用漏洞判定方法和装置
CN111625833B (zh) * 2020-04-13 2023-06-13 中国科学院软件研究所 一种高效的软件程序释放后重用漏洞判定方法和装置
CN112883093A (zh) * 2021-02-04 2021-06-01 湖北宸威玺链信息技术有限公司 基于动态指令流检测的数据导出方法及系统及装置及介质

Also Published As

Publication number Publication date
CN105808430B (zh) 2018-07-03

Similar Documents

Publication Publication Date Title
CN105808430A (zh) 一种多语义动态污点分析方法
CN111695119B (zh) 一种基于细粒度静态污点分析与符号执行的web漏洞检测方法
CN108255711A (zh) 一种基于污点分析的plc固件模糊测试系统及测试方法
Liao et al. SmartDagger: a bytecode-based static analysis approach for detecting cross-contract vulnerability
CN114996126B (zh) 一种针对eosio智能合约的漏洞检测方法及系统
CN115270131A (zh) 一种Java反序列化漏洞检测方法及系统
CN109587125A (zh) 一种网络安全大数据分析方法、系统及相关装置
CN110162474B (zh) 一种基于抽象语法树的智能合约重入漏洞检测方法
CN110704874A (zh) 一种基于数据溯源的隐私泄露防护方法
CN106506280A (zh) 智能家居设备的通信协议测试方法及系统
CN101853200A (zh) 一种高效动态软件漏洞挖掘方法
Avancini et al. Comparison and integration of genetic algorithms and dynamic symbolic execution for security testing of cross-site scripting vulnerabilities
CN112506564B (zh) 一种用于建立控制流图的方法、系统和介质
CN110674503B (zh) 一种基于图卷积神经网络的智能合约死循环检测方法
CN108268773B (zh) Android应用升级包本地存储安全性检测方法
CN111831275A (zh) 一种编排微场景剧本的方法、服务器、介质及计算机设备
CN116662177A (zh) 一种面向电力系统终端的测试用例自动化生成方法及系统
CN113079151A (zh) 一种异常处理方法、装置、电子设备及可读存储介质
CN101388055A (zh) 一种用于漏洞模型检测的程序操作特征提取方法
CN116932381A (zh) 小程序安全风险自动化评估方法及相关设备
Dahl et al. Stack-based buffer overflow detection using recurrent neural networks
CN111309589A (zh) 一种基于代码动态分析的代码安全扫描系统及方法
CN106709350A (zh) 一种病毒检测方法及装置
CN117744087A (zh) 基于静态分析的智能设备远程代码执行漏洞检测方法
CN102982282B (zh) 程序漏洞的检测系统和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant