CN111931179B - 基于深度学习的云端恶意程序检测***及方法 - Google Patents

基于深度学习的云端恶意程序检测***及方法 Download PDF

Info

Publication number
CN111931179B
CN111931179B CN202010814447.8A CN202010814447A CN111931179B CN 111931179 B CN111931179 B CN 111931179B CN 202010814447 A CN202010814447 A CN 202010814447A CN 111931179 B CN111931179 B CN 111931179B
Authority
CN
China
Prior art keywords
information
program
dynamic link
matrix
link library
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
Application number
CN202010814447.8A
Other languages
English (en)
Other versions
CN111931179A (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.)
Beijing Institute of Technology BIT
Original Assignee
Beijing Institute of Technology BIT
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 Beijing Institute of Technology BIT filed Critical Beijing Institute of Technology BIT
Priority to CN202010814447.8A priority Critical patent/CN111931179B/zh
Publication of CN111931179A publication Critical patent/CN111931179A/zh
Application granted granted Critical
Publication of CN111931179B publication Critical patent/CN111931179B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/23Clustering techniques
    • G06F18/232Non-hierarchical techniques
    • G06F18/2321Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions
    • G06F18/23213Non-hierarchical techniques using statistics or function optimisation, e.g. modelling of probability density functions with fixed number of clusters, e.g. K-means clustering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/25Fusion techniques
    • G06F18/253Fusion techniques of extracted features
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45587Isolation or security of virtual machine instances
    • 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)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Computer Security & Cryptography (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • General Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Molecular Biology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Computational Linguistics (AREA)
  • Biomedical Technology (AREA)
  • Virology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了基于深度学习的云端恶意程序检测***及方法,属于软件安全技术领域,该方案效率更高、准确率更高。该***包括信息获取模块、数据预处理模块以及训练模型模块。信息获取模块具体为:程序样本集中包含恶意程序检测时所使用的程序样本;程序自动执行样本用于在虚拟机中自动执行程序样本;虚拟机中每次运行一个程序样本,并在运行过程中提取***实时参数信息和动态链接库信息,程序样本执行完成后,保存虚拟机快照,分析虚拟机快照得到内存取证信息;各信息送入数据预处理模块。数据预处理模块进行数据预处理得到动态链接库特征向量、***实时参数矩阵以及内存取证矩阵送入到训练模型模块。训练模型模块预先构建并训练神经网络模型。

Description

基于深度学习的云端恶意程序检测***及方法
技术领域
本发明涉及软件安全技术领域,具体涉及基于深度学习的云端恶意程序检测***及方法。
背景技术
恶意程序检测是指一种能够识别出恶意程序的方法。云计算是目前最流行且最重要的IT趋势之一,云计算是一种通过互联网向计算机或其它设备提供共享计算资源(软件或数据)的服务的过程。如何在云端进行恶意程序检测,目前恶意程序检测的重要发展方向。因此云端恶意程序检测工作十分重要。
深度学习是恶意程序检测领域的重要方法,目前较为流行的恶意程序检测方法大多都使用了深度学习技术,因此深度学习在实践和研究方面都收到了广泛的关注。
目前深度学习在恶意程序检测领域被广泛应用,由于深度学习,特别是卷积神经网络在图像处理领域取得了十分优异的成果,因此在恶意程序检测时通常会借助到深度学习在这方面的成果。通常都会把恶意程序转化为图像或是一个类似于图像的数字矩阵,然后再按照深度学习的步骤进行训练,获得到最终的结果。
将恶意程序转化为图像的方法有很多,常用的是把恶意程序转化为灰度图,这种方法是利用了将二进制文件转化为灰度图的方法,对于一个二进制文件,它的每个字节范围在00到FF之间,可以对应于灰度图的0到255,把二进制文件转化为矩阵,每一位代表一个像素点,即可转化为一个灰度图。对于这些灰度图,通常从图像上的纹理就可以看出恶意程序和良性程序的不同。
将恶意程序转化为灰度图的方法通常用于静态分析,但是对于恶意程序的发展,有时需要通过运行恶意程序才可以完成检测的目的,这时可以通过沙箱等工具对恶意程序进行分析。沙箱可以分析出恶意程序在***运行时所调用的API序列,将API转化为向量,通常可以将API视为是一段文本,仿照自然语言处理的方法将API转化为词向量,而每个样本运行时获得到的API序列列表就变成了一个矩阵,这个矩阵同样可以作为神经网络的输入。
目前大多数的恶意程序静态分析方法难以适应恶意程序的发展,互联网环境越来越复杂,软件环境变得多样化,而且随着恶意程序的发展,编写恶意程序的人也通常都会使用多态或变形的技术,导致使用传统的标注特征的方式去识别恶意程序的方法已经很难检测出新的恶意程序了,同时也很难检测出许多经过伪装的恶意程序。近几年来恶意程序也在不断进化,一些恶意程序具备反检测和反分析的功能。
动态分析可以更加有效地检测恶意程序,通常需要通过沙箱环境对恶意程序API函数调用进行拦截和分析,不过沙箱环境的环境配置十分复杂,同时还需要对其分析报告进行更细致地处理。
许多动态获取到的恶意程序特征可能会被恶意程序干扰,例如利用沙箱获取到恶意程序的API信息,但这些API信息可能是恶意程序故意调用进行伪装的,去分析这些信息可能会对检测结果造成一定的影响。
目前已经有很多研究开始使用深度学习进行恶意程序检测,不过目前的研究通常都通过加深网络层次、对网络进行调参或一些其他方法优化神经网络的模型,以致于神经网络模型越来越复杂,并且模型训练时间较长。
恶意程序本身转化为适合深度学习训练的数据的方式比较复杂,而将恶意程序转化为数据的方式也有很多种,但其转化方式并不简便,可能需要运用一些复杂的技术(比如沙箱技术),或是比较严格的环境配置。
深度学习模型自身的结构会影响到判断恶意程序的准确率,但是目前将深度学习应用到恶意程序检测领域已经有很长一段时间了,对模型自身再进行优化已经越来越困难。
大部分检测方案性能开销较大、难以在实际环境中部署,不适合应用于云中恶意代码的检测。
因此,如何利用现有恶意程序检测技术使得恶意程序检测更加高效准确,且更加适配云端的恶意代码检测是目前亟待解决的问题。
发明内容
有鉴于此,本发明提供了基于深度学习的云端恶意程序检测***及方法,是一种能够适配云端的恶意代码检测方案,其效率更高、准确率更高。
为达到上述目的,本发明的技术方案为:基于深度学习的云端恶意程序检测***,包括信息获取模块、数据预处理模块以及训练模型模块。
信息获取模块包含虚拟机、程序自动执行脚本和程序样本集;程序样本集中包含恶意程序检测时所使用的程序样本;程序自动执行样本用于在虚拟机中自动执行程序样本;虚拟机中每次运行一个程序样本,并在运行过程中提取***实时状态参数信息和动态链接库信息,程序样本执行完成后,保存虚拟机内存快照,分析虚拟机内存快照得到内存取证信息;每个程序样本执行时得到的***实时状态参数信息、动态链接库信息以及内存取证信息送入数据预处理模块。
数据预处理模块进行如下数据预处理:将动态链接库信息转化为动态链接库特征向量,将***实时状态参数信息转化为***实时参数矩阵,提取内存取证信息中的数字特征信息转化为内存取证矩阵;动态链接库特征向量、***实时参数矩阵以及内存取证矩阵送入到训练模型模块。
训练模型模块预先构建并训练神经网络模型;神经网络模型由第一特征提取部,第二特征提取部、特征融合部以及全连接层组成;第一和第二特征提取部均由卷积层和池化层组成;第一特征提取部的输入为***实时参数矩阵,输出为***实时参数矩阵的特征信息;第二特征提取部的输入为内存取证矩阵,输出为内存取证矩阵的特征信息;特征融合模块用于对第一和第二特征提取部的输出、以及动态链接库特征向量进行特征融合,得到融合特征;融合特征经全连接层后得到神经网络模型的分类输出,即判断出目标虚拟机中是否存在恶意程序。
进一步地,恶意程序检测***包括模型训练模式以及实测模式。
模型训练模式下,程序样本集中为收集获得的程序训练样本。
程序训练样本包括已知类别程序及其类别标签,类别标签包括正常程序和恶意程序。
已知类别程序经息获取模块和数据预处理模块得到的动态链接库特征向量、***实时参数矩阵以及内存取证矩阵,结合类别标签,对训练模型模块中的神经网络模型进行训练,获得训练好的神经网络模型。
实测模式下,程序样本集中为程序测试样本,程序测试样本为未知类别的程序;未知类别的程序信息获取模块和数据预处理模块得到的动态链接库特征向量、***实时参数矩阵以及内存取证矩阵,利用训练好的神经网络模型获得目标虚拟机中是否存在恶意程序的判别结果。
进一步地,信息获取模块,采用PythonPsutil模块提取***实时状态参数信息;并利用Volatility工具分析虚拟机内存快照得到内存取证信息。
进一步地,数据处理模块中,***实时参数矩阵以及内存取证矩阵的每一行对应程序样本执行时的一个进程,行内数据为对应进程中产生的***实时参数或者内存取证信息中的数字特征。
将动态链接库信息转化为动态链接库特征向量,具体为:动态链接库信息包括:程序样本执行时的每个进程中不同动态链接库的出现次数;利用TF-IDF算法计算每个动态链接库对当前进程判别的贡献程度,筛选得到贡献程度大于设定阈值的动态链接库;取筛选的多个动态链接库在当前进程中的出现次数构成初始向量,进一步利用k-means算法对不同进程的初始向量进行聚类,得到不同进程的初步类别标签;所有进程的初步类别标签组成一个一维向量即为动态链接库特征向量。
进一步地,特征融合部首先采用连接concat方式或者添加add方式将***实时参数矩阵的特征信息和内存取证矩阵的特征信息进行融合,得到中间融合结果,然后将中间融合结果以连接concat方式与动态链接库特征向量进行融合,得到融合特征。
本发明的另外一个实施例提供了基于深度学习的云端恶意程序检测方法,包括如下步骤:
S1、建立虚拟机环境;在虚拟机中部署程序自动执行脚本,用于自动执行程序样本集中样本。
程序样本集中样本初始为程序训练样本;程序训练样本包括已知类别程序及其类别标签,类别标签包括正常程序和恶意程序。
S2、虚拟机自动执行程序样本集中样本,每次运行一个程序样本;每个程序训练样本执行过程中,虚拟机提取***实时状态参数信息和动态链接库信息,程序样本执行完成后,保存虚拟机内存快照,分析虚拟机内存快照得到内存取证信息。
S3、将动态链接库信息转化为动态链接库特征向量,将***实时状态参数信息转化为***实时参数矩阵,提取内存取证信息中的数字特征信息转化为内存取证矩阵。
S4、程序训练样本对应的动态链接库特征向量、***实时参数矩阵以及内存取证矩阵输入至预先构建好的神经网络模型中,对神经网络模型进行训练,得到训练好的神经网络模型。
神经网络模型由第一特征提取部,第二特征提取部、特征融合模块以及全连接层组成;第一和第二特征提取部均由卷积层和池化层组成;第一特征提取部的输入为***实时参数矩阵,输出为***实时参数矩阵的特征信息;第二特征提取部的输入为内存取证矩阵,输出为内存取证矩阵的特征信息;特征融合模块用于对第一和第二特征提取部的输出、以及动态链接库特征向量进行特征融合;特征融合模块输出的融合特征经全连接层后得到神经网络模型的分类输出,即判别出目标虚拟机中是否存在恶意程序。
S5、将程序样本集中样本设置为程序测试样本,程序测试样本为未知类别的程序。
S6、执行S2和S3得到程序测试样本的动态链接库特征向量、***实时参数矩阵以及内存取证矩阵,利用训练好的神经网络模型获得目标虚拟机中是否存在恶意程序的判别结果。
进一步地,S2中,提取***实时状态参数信息和动态链接库信息,具体为:在虚拟机运行程序样本过程中,按照设定时间间隔提取两次以上的***实时状态参数信息以及动态链接库信息;实时参数信息包括程序样本执行时每个进程对应的执行参数;动态链接库信息包括程序样本执行时每个进程对应的动态链接库出现次数。
进一步地,S3中,将***实时状态参数信息转化为***实时参数矩阵,提取内存取证信息中的数字特征信息转化为内存取证矩阵,具体包括如下步骤:
S301、统计对应程序样本中包含的进程,即:统计共有进程和单一进程数量,共有进程指在所有的程序样本中出现超过一次的进程;单一进程指在所有的程序样本中仅出现过一次的进程。
S302、确定矩阵的行数为共有进程的数量加所有的程序样本中单一进程个数最大值。
S303、根据***实时状态参数信息,将每一个进程对应数据填入相应行中,得到***实时参数矩阵;提取内存取证信息中的数字特征信息,将每一个进程对应数字特征信息填入相应行中,得到内存取证矩阵。
进一步地,S3中,将动态链接库信息转化为动态链接库特征向量,具体为:动态链接库信息包括:程序样本执行时的每个进程中不同动态链接库的出现次数;利用TF-IDF算法计算每个动态链接库对当前进程判别的贡献程度,筛选得到贡献程度大于设定阈值的动态链接库;取筛选的动态链接库在当前进程中的出现次数构成初始向量,进一步利用k-means算法对不同进程的初始向量筛选得到的动态链接库进行聚类,得到不同进程的初步类别标签;所有进程的初步类别标签组成一个一维向量即为动态链接库特征向量。
有益效果:
本发明提出了一个基于深度学习的云端虚拟机恶意程序检测***及方法,利用普通的虚拟机模拟云端环境,在虚拟机中执行样本,无需进行复杂的环境配置,同时可以直接获取到数字特征,直接转化为矩阵供深度学习模型进行训练;因此大大降低了计算复杂度,提升了计算效率。本发明获取多种特征,利用特征融合增加神经网络的效率,而非通过优化模型的方式,这样做可以从特征角度对深度学习进行优化,可以避免使用过于复杂的神经网络架构,仅用简单的神经网络架构即可实现云端恶意程序检测,准确率和效率均得到了提升。
附图说明
图1为本发明实施例提供的基于深度学习的云端恶意程序检测***组成原理图;
图2为本发明实施例使用的concat融合方式的融合示意图;
图3为本发明实施例使用的add融合方式的融合示意图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明提供了基于深度学习的云端恶意程序检测***,如图1所示,包括信息获取模块、数据预处理模块以及训练模型模块。
信息获取模块包含虚拟机、程序自动执行脚本和程序样本集;程序样本集中包含恶意程序检测时所使用的程序样本;程序自动执行样本用于在虚拟机中自动执行程序样本;虚拟机中每次运行一个程序样本,并在运行过程中提取***实时状态参数信息和动态链接库信息,程序样本执行完成后,保存虚拟机内存快照,分析虚拟机内存快照得到内存取证信息;每个程序样本执行时得到的***实时状态参数信息、动态链接库信息以及内存取证信息送入数据预处理模块。
数据预处理模块进行如下数据预处理:将动态链接库信息转化为动态链接库特征向量,将***实时状态参数信息转化为***实时参数矩阵,提取内存取证信息中的数字特征信息转化为内存取证矩阵;动态链接库特征向量、***实时参数矩阵以及内存取证矩阵送入到训练模型模块。
训练模型模块预先构建并训练神经网络模型;神经网络模型由第一特征提取部,第二特征提取部、特征融合部以及全连接层组成;第一和第二特征提取部均由卷积层和池化层组成;第一特征提取部的输入为***实时参数矩阵,输出为***实时参数矩阵的特征信息;第二特征提取部的输入为内存取证矩阵,输出为内存取证矩阵的特征信息;特征融合模块用于对第一和第二特征提取部的输出、以及动态链接库特征向量进行特征融合,得到融合特征;融合特征经全连接层后得到神经网络模型的分类输出,即为程序样本的类别。
本发明实施例中,该***包括模型训练模式以及实测模式。
模型训练模式下,程序样本集中为收集获得的程序训练样本。
程序训练样本包括已知类别程序及其类别标签,类别标签包括正常程序和恶意程序。
已知类别程序经息获取模块和数据预处理模块得到的动态链接库特征向量、***实时参数矩阵以及内存取证矩阵,结合类别标签,对训练模型模块中的神经网络模型进行训练,获得训练好的神经网络模型。
实测模式下,程序样本集中为程序测试样本,程序测试样本为未知类别的程序;未知类别的程序经息获取模块和数据预处理模块得到的动态链接库特征向量、***实时参数矩阵以及内存取证矩阵,利用训练好的神经网络模型获得目标虚拟机中是否存在恶意程序的判别结果。
本发明实施例中,各模块具体设计如下:
信息获取模块:
首先包含的是一个自动执行程序的脚本,大量的数据集样本不需要人工手动运行。所有样本都在虚拟机中运行,每次在虚拟机中只运行一个样本,并提取操作***运行时状态相关参数和动态链接库信息。执行完成后,保存虚拟机内存快照,分析该快照得到内存取证信息。关闭虚拟机,继续运行下一个目标程序。
一个程序运行时,无论是良性还是恶意,都会在***中进行一些操作,这些操作无论是程序自带的操作还是用户执行的操作,都可能会对***中的一些状态参数做出改变,这些变化可以通过***中每个进程的***参数变化情况作为表现形式表现出来。通常在需要提取***参数的时候都需要用Python进行提取,虽然Python可以使用自带的一些模块进行提取,不过提取方法比较复杂,而且还需要对数据进行解析才能够使用。Psutil是process and system utilities的简称,即进程与***实用工具,顾名思义,它可以对***和进程进行监测。利用Python调用该工具,可以获取到***内的一些状态相关的参数,例如CPU、内存、磁盘、进程信息等。
传统的杀毒软件是在***中运行,然而当恶意程序在***上运行的时候,可能会发现***中存在杀毒软件,进而不会展现恶意状态,或者可能通过自身破坏杀毒软件,达到攻击***的目的。一些高级的恶意程序在***内部展现出一些恶意状态,可能会使***内部的一些检测工具都做出恶意攻击,影响这些检测工具的检测状态,导致其检测结果可能是正常的,但实际上***已经被恶意程序感染。因此,通过安装在现有操作***上的检测工具或基于这些工具的检测方案都是不一定是可信的。psutil是在***内部运行,因此这样获取到的数据可能结果为正常数据,但实际程序为恶意程序,有可能无法检测出来它们的恶意状态,后续处理这部分数据的时候可能会对结果造成一些影响。因此通过增加内存特征信息的方法,融合更多的特征,对检测结果有一定的提升。内存镜像是指保存操作***内存的一个文件,它可以通过在虚拟机开启的时候,利用虚拟机自带的保存快照的功能来完成,其镜像可以保存到主机上。这种方法是可信的,整个过程在主机中完成,不需要虚拟机中的操作***的参与,因此在虚拟机中运行的恶意程序不会监测到这个过程,它不会干扰和破坏基于虚拟机内存镜像的检测方法,恶意程序会像在正常***中一样展现其恶意特征,这些特征都会保存在***的内存快照中,而恶意程序在运行过程中不会发现生成快照这个过程,因此恶意程序所展现的恶意特征均将保存到虚拟机内存快照中,因此内存镜像包含展现恶意程序行为的状态信息。Volatility是一款专门分析内存镜像的工具,它基于python开发,可以为绝大多数的操作***进行内存取证分析,可以利用这个工具从内存镜像文件中提取出操作***语义特征。用它来分析虚拟机的内存转储,它可以使用不同的插件分析内存转储文件并提取对应的程序语义信息。恶意程序在***中执行过程中会引起***内存发生一些改变(比如写内存操作),通过该工具分析出内存中的程序语义特征,可利用深度学习模型对其进行建模分析。
动态链接库(DLL)是一个程序模块,在其内部有着可供程序或其它DLL使用的函数功能。在***中存在着大量的使用DLL构成的文件或模块,API是应用程序编程接口,它可以由一个或一组DLL实现,因此***中的进程在使用任何API的时候都会使用DLL,进程使用这些DLL中所导出的API函数与文件***、进程、注册表、网络和图形用户界面(GUI)进行交互。因此在***中运行的进程,无论是恶意还是良性,在其运行的时候都会调用***的动态链接库,进程可以利用动态链接库调用其中的可执行代码,完成其自身所需完成的一系列功能。对于一个良性进程来说,其所要完成的功能通常都是一些正常的功能,因此调用的DLL也都是比较常用的动态链接库,而对于一个恶意进程,它在执行中需要执行一些恶意操作,因此可能会调用一些特殊的动态链接库。
信息获取模块的处理流程为:
①配置环境:建立好虚拟机环境,虚拟机内部需要配有可供代码运行的环境,而且还要安装有一些应用程序,以满足用户执行程序完成常用任务(比如浏览网页、文字编辑、播放视频),以后开启虚拟机都从这个镜像开启。
②执行自动运行样本的代码:该代码可以自动执行样本,并获取到数据,这些数据不需要人工进行获取。该代码可以自动开启虚拟机***,开启***的同时在虚拟机内部执行该样本,同时获取操作***运行状态和动态链接库信息,提取好信息之后将这些信息保存。在主机中,待这些信息提取好之后,保存虚拟机内存镜像,关闭虚拟机,对该内存镜像进行分析,得到内存取证信息。然后再重新开启虚拟机,运行下一个样本。
③获取***实时参数:在虚拟机***中,待样本开始运行之后可以开始对操作***运行状态参数进行获取。但是,提取***参数过程中可能会出现一些异常情况,例如进程不存在,或无法提取到进程的某些参数,这时需要将这些无法获取到的参数置为-1。由于一些程序或进程可能在执行之初并没有什么表现,需要执行一段时间才会产生一些对***的变化,又或者是在执行一段时间之后进程自身发生变化,或是关闭,或是展现出一些恶意状态,因此,只提取虚拟机中单一时间的进程***状态参数信息可能并不能展现进程的所有状态。在本发明中获取了6次进程的***状态参数,每次间隔30秒,让进程充分运行,尽可能地让进程展现其应有的对操作***的操作。有些恶意程序执行后可能会造成虚拟机中***的崩溃,同样会导致获取到的进程***参数不足6次,这种情况下将会将所有进程的所有参数都置为-1,表示的是虚拟机***被破坏,提取参数失败。
④获取内存取证参数:保存镜像之后,在主机对虚拟机镜像进行分析。由于分析时间较长,所以应该将其与开启虚拟机的动作同时进行,以节省时间。获取到的特征信息会以分析报告的形式进行保存,具体的数字信息在下一模块进行获取。
数据处理模块:
***实时参数矩阵以及内存取证矩阵的每一行对应程序样本执行时***的一个进程,行内数据为对应进程中产生的***实时参数或者内存取证信息中的数字特征;动态链接库特征向量对应程序样本执行时***的一个进程,动态链接库特征向量中一个位置表示在对应进程中一个动态链接库的出现次数。
数据处理模块需要对上述特征信息进行处理,并将它们转化为特征矩阵或特征向量。
在数据处理模块,主要需要处理的数据是内存取证信息,由于***实时状态参数信息是直接以数值的形式保存的,故无需对其进一步处理,而内存取证信息是由Volatility工具分析得到的分析报告,因此需要进一步处理。具体的处理方法是根据其分析报告格式,提取到相关数字特征信息。为此,需要利用正则表达式对字符串进行分析和处理。
数据处理模块的主要工作是将数据转化为特征矩阵或特征向量,而神经网络所需要的特征矩阵的大小需要是相同的,故需要率先确定特征矩阵的大小。所有特征矩阵的每一行都应当对应唯一的一个进程,而不可以让进程随机排列。训练过程中神经网络可以对比各个样本中对应进程的变化而对其是否是恶意样本进行判断,如果每个矩阵中每行的样本是随机排列的,神经网络可能无法做出准确判断,否则会影响准确率,因此需确保每个特征矩阵的每一行所表示的进程是唯一的,且排列次序相同。PID是进程的唯一标识符,可以作为一个进程的标识,但是,如果矩阵的每一行对应一个PID,这个矩阵会非常庞大,且特别稀疏,不利于神经网络的训练,因此利用PID作为矩阵行数的方法不可行。在本发明中,利用PID、进程名称和进程路径信息作为一个进程的唯一标识,用于确定特征矩阵的行数。由于PID是不确定的,但进程名和进程的路径信息对于一个进程来说是确定的,因此率先通过遍历所有利用psutil获取到的特征信息,提取出所有的进程名和进程路径信息的组合,以该组合作为神经网络输入矩阵行数的确定,提前确定好每一行代表的是哪个进程,后续将上述提取到的数据写入矩阵对应的位置,即可作为神经网络的输入。
虽然矩阵行数可以以此方式确定,但由于样本数量很大,若要保证每个进程一行,行数仍然很大,因此对所有样本中的“共有进程”和“单一进程”进行区分。“共有进程”是指在所有样本中出现超过1次的进程,超过1次是指某个进程并非只出现在单一样本运行时的***中,而是在不同样本运行时都出现过,这种进程不属于某个样本的特定进程或其子进程,而它一般是***中本来存在的,在这个样本运行的过程中被调用,可能与这个样本的进程或子进程之间存在着某种通信,这种共有进程在特征矩阵的上方逐一排列,如果存在这个进程,可以把这个进程的数据填入对应的行中。“单一进程”是指只出现过一次的进程,这些进程可能是特定样本的特定进程,如果这些进程也要保证每个特征矩阵的每一行都对应同一进程,那么特征矩阵的行数就太大了,因此在每个样本的特征矩阵中,这些进程按照刚刚的进程队列依次向下排列。矩阵行数是固定的,因此需要遍历所有样本,得到在所有样本中单一进程个数的最大值即可,特征矩阵的行数为:共有进程数量+单一进程个数最大值。
在这些数据中,它们可能会因为单位的不同而造成数值上的差距很大,因此需要对这些数据进行归一化处理。但由于它们对结果的贡献程度不同,因此还需要对它们进行加权处理。加权的方法是利用机器学习中的随机森林算法,按照矩阵的列对每一列依次利用随机森林训练,得到结果准确率,将这个准确率按比例转化为权重,对每一列的数据乘以权重,然后矩阵的列按照权重由大到小排列。加权处理将有利于后续的特征融合。
另一方面,动态链接库信息也需要转化为特征向量,由于事先不知道每个进程是否是恶意的,因此利用机器学习的无监督学习方法,对这些动态链接库进行聚类。首先利用TF-IDF算法计算每个动态链接库对当前进程的贡献程度,筛选得到贡献程度大于设定阈值的动态链接库,该处设定阈值可依据经验进行设定。取筛选的动态链接库在当前进程中的出现次数构成初始向量,筛选得到的动态链接库在进程中出现的次数,未出现则记为0。进一步利用k-means++算法不同进程对筛选得到的动态链接库进行聚类,得到进程的聚类结果,该聚类结果表示每个进程可能是恶意的或可能是良性的,即为进程的初步类别标签。所有进程的初步类别标签组成一个一维向量即为动态链接库特征向量。
数据处理模块模块的处理流程为:
①特征数据转化为数字特征:目标是将利用volatility工具获取的内存取证信息转化为数字特征,以便后面的步骤进行使用。
②确定特征矩阵的大小:首先统计进程信息,确定每个进程的标识方法,然后统计共有进程和单一进程,确定矩阵的行数,然后把特征数据写入矩阵中。
③特征加权:首先为避免数值差距过大,所有数据都进行归一化。然后利用随进森林计算每个特征对分类结果的贡献程度,按照贡献值对其加权,再按照权重将列从大到小排列。
④动态链接库信息转化为特征向量:利用TF-IDF算法筛选贡献程度较大的动态链接库,然后利用k-means算法对其进行聚类,得到一个分类结果,以大致表示该进程是恶意还是良性的,即为当前进程的初步类别标签。所有进程的初步类别标签组成一个一维向量即为动态链接库特征向量。
训练模型模块:
训练模型模块需要利用卷积神经网络,训练上述特征信息,获得训练模型,对结果进行预测。卷积神经网络最初用于图像处理,和普通的算法比起来,它可以减少预处理,直接处理原始数据,因此对于提取和分析特征十分方便。基于在图像处理领域中的方法,本发明也利用了卷积神经网络。本发明中利用恶意程序运行时产生的多种数据,分别对这些数据进行分析并进行特征融合,然后对其进行学习,目的是让网络获取到更多的特征信息,取得更好的分类效果。卷积神经网络有两个输入,其中一个是***运行时的状态参数信息,另一个是内存取证信息,分别通过开源psutil和volatility工具获取得到,这两类信息分别转化为自己的特征矩阵,分别通过卷积层、池化层,然后进行特征融合,在通过之后按照正常的全连接层的步骤继续构建模型。模型包括多个卷积层和池化层,再经过全连接层,得到结果。
为了能够让神经网络在训练过程中充分利用样本程序在虚拟机中运行过程中产生的数据信息,采用了神经网络融合的方式。神经网络融合的目的就是可以让神经网络接受不同的特征,而且每一部分特征在特征提取的过程中互不影响,只有在分类过程中才会让同一个分类器获取到它们的特征,进而完成分类。通常融合方式有两种,即concat方式和add方式,这两种方式都是从特征层面进行整合,完成特征融合。连接方法的融合示意图如图2所示,它是把两部分特征在通道上进行连接,经过了连接之后,通道数增加了,但是实际上每一个基本块上的信息都没有变化。添加的融合示意图如图3所示,它实际是进行特征的相加,对于添加方式,它与连接不同的是,通道数没有改变,但每个基本块上的信息都变多了。
特征融合部首先采用连接concat方式或者添加add方式将***实时参数矩阵的特征信息和内存取证矩阵的特征信息进行融合,得到中间融合结果,然后将中间融合结果以连接concat方式与动态链接库特征向量进行融合,得到融合特征。
神经网络的特征融合技术多数用于复杂的图像处理,连接融合是在空间维度上进行的,而添加融合是对信息进行改变,因此从计算量的角度讲,很显然,添加要优于连接。由于添加的操作是进行特征像素之间的融合,因此在融合过程中可能会造成一些信息上的损失,但连接则只是单纯的相连,则不用担心这种损失的问题。但是,添加方式对信息之间进行融合,可以产生信息之间的关联,这种信息之间的关联程度要比连接方式更好。
对于本发明来说,这两种融合方式的效果是相当的,具体采用哪种方式可以根据不同的应用场景。Add融合方式的计算量要小于concat,而concat融合方式能保留更多的特征信息。
训练模型模块的处理流程为:
①搭建神经网络:整体按照卷积神经网络的模型进行搭建,在全连接层之前对两个网络进行融合,融合方法可以选择concat或add。搭建好神经网络之后,可以对其进行训练。
②训练神经网络:对发明中提取到的三部分特征信息按照设定好的方式加入到神经网络中,并开始训练,得到训练模型。
③评估结果:按照训练模型,对测试数据进行验证,得到评估结果,即可以对验证数据集进行验证。
本发明另外一个实施例还提供了基于深度学习的云端恶意程序检测方法,包括如下步骤:
S1、建立虚拟机环境;在虚拟机中部署程序自动执行脚本,用于自动执行程序样本集中样本。
程序样本集中样本初始为程序训练样本;程序训练样本包括已知类别程序及其类别标签,类别标签包括正常程序和恶意程序。
S2、虚拟机自动执行程序样本集中样本,每次运行一个程序样本;每个程序训练样本执行过程中,虚拟机提取***实时状态参数信息和动态链接库信息,程序样本执行完成后,保存虚拟机内存快照,分析虚拟机内存快照得到内存取证信息。
提取***实时状态参数信息和动态链接库信息,具体为:在虚拟机运行程序样本过程中,按照设定时间间隔提取两次以上的***实时状态参数信息以及动态链接库信息;实时参数信息包括程序样本执行时每个进程对应的状态参数;动态链接库信息包括程序样本执行时每个进程对应的动态链接库出现次数。
S3、将动态链接库信息转化为动态链接库特征向量,将***实时状态参数信息转化为***实时参数矩阵,提取内存取证信息中的数字特征信息转化为内存取证矩阵。
将***实时状态参数信息转化为***实时参数矩阵,提取内存取证信息中的数字特征信息转化为内存取证矩阵,具体包括如下步骤:
S301、统计对应程序样本中包含的进程,即:统计共有进程和单一进程数量,共有进程指在所有的程序样本中出现超过一次的进程;单一进程指在所有的程序样本中进出现过一次的进程。
S302、确定矩阵的行数为共有进程的数量加所有的程序样本中单一进程个数最大值。
S303、根据***实时状态参数信息,将每一个进程对应数据填入相应行中,得到***实时状态参数矩阵;提取内存取证信息中的数字特征信息,将每一个进程对应数字特征信息填入相应行中,得到内存取证矩阵。
将动态链接库信息转化为动态链接库特征向量,具体为:
动态链接库信息包括:程序样本执行时的每个进程中不同动态链接库的出现次数;利用TF-IDF算法计算每个动态链接库对当前进程判别的贡献程度,筛选得到贡献程度大于设定阈值的动态链接库;取筛选的动态链接库在当前进程中的出现次数构成初始向量,进一步利用k-means算法对不同进程的初始向量进行聚类,得到不同进程的初步类别标签;所有进程的初步类别标签组成一个一维向量即为动态链接库特征向量。
S4、程序训练样本对应的动态链接库特征向量、***实时参数矩阵以及内存取证矩阵输入至预先构建好的神经网络模型中,对神经网络模型进行训练,得到训练好的神经网络模型。
神经网络模型由第一特征提取部,第二特征提取部、特征融合模块以及全连接层组成;第一和第二特征提取部均由卷积层和池化层组成;第一特征提取部的输入为***实时参数矩阵,输出为***实时参数矩阵的特征信息;第二特征提取部的输入为内存取证矩阵,输出为内存取证矩阵的特征信息;特征融合模块用于对第一和第二特征提取部的输出、以及动态链接库特征向量进行特征融合;特征融合模块输出的融合特征经全连接层后得到神经网络模型的分类输出,即为程序样本的类别。
S5、将程序样本集中样本设置为程序测试样本,程序测试样本为未知类别的程序。
S6、执行S2和S3得到程序测试样本的动态链接库特征向量、***实时参数矩阵以及内存取证矩阵,利用训练好的神经网络模型获得目标虚拟机中是否存在恶意程序。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (5)

1.基于深度学习的云端恶意程序检测***,其特征在于,所述***包括信息获取模块、数据预处理模块以及训练模型模块;
所述信息获取模块包含虚拟机、程序自动执行脚本和程序样本集;所述程序样本集中包含恶意程序检测时所使用的程序样本;所述程序自动执行脚本用于在虚拟机中自动执行所述程序样本;虚拟机中每次运行一个程序样本,并在运行过程中提取***实时状态参数信息和动态链接库信息,程序样本执行完成后,保存虚拟机内存快照,分析虚拟机快照得到内存取证信息;每个程序样本执行时得到的***实时状态参数信息、动态链接库信息以及内存取证信息送入所述数据预处理模块;
所述数据预处理模块进行如下数据预处理:将所述动态链接库信息转化为动态链接库特征向量,将所述***实时状态参数信息转化为***实时参数矩阵,提取所述内存取证信息中的数字特征信息转化为内存取证矩阵;动态链接库特征向量、***实时参数矩阵以及内存取证矩阵送入到所述训练模型模块;
所述训练模型模块预先构建并训练神经网络模型;所述神经网络模型由第一特征提取部,第二特征提取部、特征融合模块以及全连接层组成;第一和第二特征提取部均由卷积层和池化层组成;所述第一特征提取部的输入为***实时参数矩阵,输出为***实时参数矩阵的特征信息;所述第二特征提取部的输入为内存取证矩阵,输出为内存取证矩阵的特征信息;所述特征融合模块用于对第一和第二特征提取部的输出、以及动态链接库特征向量进行特征融合,得到融合特征;所述融合特征经所述全连接层后得到所述神经网络模型的分类输出,即为目标虚拟机中是否存在恶意程序的判别结果。
2.如权利要求1所述的***,其特征在于,所述恶意程序检测***包括模型训练模式以及实测模式;
所述模型训练模式下,所述程序样本集中为收集获得的程序训练样本;
所述程序训练样本包括已知类别程序及其类别标签,所述类别标签包括正常程序和恶意程序;
所述已知类别程序经所述信息获取模块和所述数据预处理模块得到的动态链接库特征向量、***实时参数矩阵以及内存取证矩阵,结合所述类别标签,对所述训练模型模块中的神经网络模型进行训练,获得训练好的神经网络模型;
所述实测模式下,所述程序样本集中为程序测试样本,所述程序测试样本为未知类别的程序;所述未知类别的程序经所述信息获取模块和所述数据预处理模块得到的动态链接库特征向量、***实时参数矩阵以及内存取证矩阵,利用所述训练好的神经网络模型获得目标虚拟机中是否存在恶意程序的判别结果。
3.如权利要求1或2所述的***,其特征在于,所述信息获取模块,采用Python相关模块提取***实时状态参数信息;
所述信息获取模块,利用Volatility工具分析虚拟机快照得到内存取证信息。
4.如权利要求1或2所述的***,其特征在于,所述数据预处理模块中,***实时参数矩阵以及内存取证矩阵的每一行对应程序样本执行时的一个进程,行内数据为对应进程中产生的***实时参数或者内存取证信息中的数字特征;
所述将所述动态链接库信息转化为动态链接库特征向量,具体为:
所述动态链接库信息包括:程序样本执行时的每个进程中不同动态链接库的出现次数;利用TF-IDF算法计算每个动态链接库对当前进程判别的贡献程度,筛选得到贡献程度大于设定阈值的动态链接库;取筛选的动态链接库在当前进程中的出现次数构成初始向量,进一步利用k-means算法对不同进程的初始向量进行聚类,得到不同进程的初步类别标签;所有进程的初步类别标签组成一个一维向量即为动态链接库特征向量。
5.如权利要求1或2所述的***,其特征在于,所述特征融合模块首先采用连接concat方式或者添加add方式将***实时参数矩阵的特征信息和内存取证矩阵的特征信息进行融合,得到中间融合结果,然后将所述中间融合结果以连接concat方式与所述动态链接库特征向量进行融合,得到融合特征。
CN202010814447.8A 2020-08-13 2020-08-13 基于深度学习的云端恶意程序检测***及方法 Active CN111931179B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010814447.8A CN111931179B (zh) 2020-08-13 2020-08-13 基于深度学习的云端恶意程序检测***及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010814447.8A CN111931179B (zh) 2020-08-13 2020-08-13 基于深度学习的云端恶意程序检测***及方法

Publications (2)

Publication Number Publication Date
CN111931179A CN111931179A (zh) 2020-11-13
CN111931179B true CN111931179B (zh) 2023-01-06

Family

ID=73311302

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010814447.8A Active CN111931179B (zh) 2020-08-13 2020-08-13 基于深度学习的云端恶意程序检测***及方法

Country Status (1)

Country Link
CN (1) CN111931179B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112989344B (zh) * 2021-03-16 2022-07-05 北京理工大学 基于硬件追踪技术的恶意程序智能检测方法、装置及***
CN113010268B (zh) * 2021-03-22 2022-10-04 腾讯科技(深圳)有限公司 恶意程序识别方法及装置、存储介质、电子设备
CN113221110B (zh) * 2021-04-08 2022-06-28 浙江工业大学 一种基于元学习的远程访问木马智能分析方法
CN113139185B (zh) * 2021-04-13 2023-09-05 北京建筑大学 基于异质信息网络的恶意代码检测方法及***
CN114692148B (zh) * 2022-03-31 2024-04-26 中国舰船研究设计中心 一种基于机器学习的恶意代码检测方法
CN114925363B (zh) * 2022-05-12 2023-05-19 丝路信息港云计算科技有限公司 基于递归神经网络的云在线恶意软件检测方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107180192A (zh) * 2017-05-09 2017-09-19 北京理工大学 基于多特征融合的安卓恶意应用程序检测方法和***
CN110618854A (zh) * 2019-08-21 2019-12-27 浙江大学 基于深度学习与内存镜像分析的虚机行为分析***

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA3058010A1 (en) * 2017-04-03 2018-10-11 Royal Bank Of Canada Systems and methods for malicious code detection
US11620384B2 (en) * 2018-09-28 2023-04-04 Ut-Battelle, Llc Independent malware detection architecture
US10826919B2 (en) * 2018-10-29 2020-11-03 Acronis International Gmbh Methods and cloud-based systems for protecting devices from malwares

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107180192A (zh) * 2017-05-09 2017-09-19 北京理工大学 基于多特征融合的安卓恶意应用程序检测方法和***
CN110618854A (zh) * 2019-08-21 2019-12-27 浙江大学 基于深度学习与内存镜像分析的虚机行为分析***

Also Published As

Publication number Publication date
CN111931179A (zh) 2020-11-13

Similar Documents

Publication Publication Date Title
CN111931179B (zh) 基于深度学习的云端恶意程序检测***及方法
Warnecke et al. Evaluating explanation methods for deep learning in security
US10785241B2 (en) URL attack detection method and apparatus, and electronic device
CN106776842B (zh) 多媒体数据检测方法及装置
CN110505241B (zh) 一种网络攻击面检测方法及***
CN111600919B (zh) 智能网络应用防护***模型的构建方法和装置
CN110618854B (zh) 基于深度学习与内存镜像分析的虚机行为分析***
CN111177731A (zh) 一种基于人工神经网络的软件源代码漏洞检测方法
CN111428236A (zh) 一种恶意软件的检测方法、装置、设备及可读介质
CN112035345A (zh) 一种基于代码片段分析的混合深度缺陷预测方法
CN114024761B (zh) 网络威胁数据的检测方法、装置、存储介质及电子设备
CN113468524B (zh) 基于rasp的机器学习模型安全检测方法
CN108985052A (zh) 一种恶意程序识别方法、装置和存储介质
CN110581857B (zh) 一种虚拟执行的恶意软件检测方法及***
CN112817877A (zh) 异常脚本检测方法、装置、计算机设备和存储介质
CN115766090A (zh) 一种多特征融合神经网络网络安全检测方法
CN116707859A (zh) 特征规则提取方法和装置、网络入侵检测方法和装置
CN114841705B (zh) 一种基于场景识别的反欺诈监测方法
CN112749003A (zh) ***优化的方法、设备及计算机可读存储介质
KR20200067044A (ko) 악성 파일 탐지 방법 및 장치
CN115292701A (zh) 一种基于主动与被动相结合的恶意代码检测方法及***
KR102247179B1 (ko) 이상행위탐지모델의 비지도 학습을 위한 xai 기반 정상학습데이터 생성방법 및 장치
CN111190813B (zh) 基于自动化测试的安卓应用网络行为信息提取***及方法
CN114706761A (zh) 一种基于约束分割的混合执行测试优化方法及装置
CN113919488A (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