CN107908954B - 一种基于地址压缩技术的动态检测gpu上内存溢出的方法 - Google Patents

一种基于地址压缩技术的动态检测gpu上内存溢出的方法 Download PDF

Info

Publication number
CN107908954B
CN107908954B CN201711114892.8A CN201711114892A CN107908954B CN 107908954 B CN107908954 B CN 107908954B CN 201711114892 A CN201711114892 A CN 201711114892A CN 107908954 B CN107908954 B CN 107908954B
Authority
CN
China
Prior art keywords
memory
address
detector
compressed
header
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
CN201711114892.8A
Other languages
English (en)
Other versions
CN107908954A (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.)
Hunan University
Original Assignee
Hunan University
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 Hunan University filed Critical Hunan University
Priority to CN201711114892.8A priority Critical patent/CN107908954B/zh
Publication of CN107908954A publication Critical patent/CN107908954A/zh
Application granted granted Critical
Publication of CN107908954B publication Critical patent/CN107908954B/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/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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明涉及GPU安全领域的内存溢出检测。具体涉及一种基于地址压缩技术的动态检测GPU上内存溢出的方法。本发明的方法包括:让用户程序使用mallocN函数分配内存,插入canary,并把地址压缩到多个字节数组组成的压缩地址集,使用freeN函数来标记要释放的内存;利用检测器的垃圾回收模块,对压缩地址集进行垃圾回收或者动态扩充它的容量;利用检测器的内存溢出检测模块来解压缩地址,并对进行内存溢出检查;利用检测器的内存释放模块释放被freeN标记的内存。如图1所示。该系统能在消耗较少的内存的情况下,实现对用户程序透明、性能影响小的内存溢出检测。

Description

一种基于地址压缩技术的动态检测GPU上内存溢出的方法
技术领域
本发明涉及GPU安全领域的内存溢出检测。具体涉及一种基于地址压缩技术的动态检测GPU上内存溢出的方法。
背景技术
图形处理器(GPU)最初被设计用来进行图形渲染,如今得益于它的高并发性和易于使用的编程框架,GPU被广泛的应用于各种通用计算任务当中,比如各种图形计算应用、GPU辅助加速路由等。特别是一些需要高安全性保障的应用,比如AES加密和数据库系统,都使用GPU来进行加速。随着GPU应用的场景越来越多,对GPU编程框架也提出了更多的要求。一方面,由于云计算变得越来越流行,GPU虚拟化的技术也变得成熟起来。各大云服务提供商比如亚马逊,为了更好的利用GPU的计算资源,会让多个用户共享一个GPU的硬件资源。另一方面,更多新的功能,比如动态分配GPU内存,被引入新一代的GPU编程框架来减少编写GPU程序的难度。然而在这种多用户共享GPU变得越来越普遍的情况下,这些新的功能也带来巨大的安全问题。
即使经过数十年的努力,在CPU上内存溢出问题依然是最大的安全问题之一。许多的恶名昭彰的攻击,比如Code Red、Morris Worm和Slammer都是利用内存溢出的漏洞,造成了巨大的危害。在运行时对应用的堆内存进行攻击可以造成程序的崩溃、数据污染和各种安全问题。最近的研究表明,堆内存溢出漏洞在GPU上同样存在,攻击者利用这个漏洞可以造成恶意GPU代码的执行。不幸的是,当前的GPU编程框架对于复杂的程序场景,如多用户共享GPU,不能提供有效的安全保护,仅提供面向测试阶段,而不是运行时的简单内存错误的识别。
在GPU程序中,GPU上的代码一般称为设备代码,执行的函数通常称为核函,也被叫做kernel。在编程过程中,常见的内存错误有三种:
(1)上溢出错误(overflow),是当一个超长的数据进入到缓冲区时,超出部分被写入上级缓冲区,上级缓冲区存放的可能是数据甚至是指令的指针,这些内容都被篡改或者破坏掉。
(2)下溢出错误(underflow),与上溢出一样,但是溢出的方向是向下。
(3)多次释放内存错误(double free),通过释放同一个内存两次会造成程序的错误,攻击者利用系统的内存管理机制,甚至能够对任意内存进行读写。
现有的用来进行GPU内存溢出检测的方法,要么存在很高的性能开销不能部署在实际的应用场景,要么存在较大的设计缺陷以至于不能提供完整的保护。
CUDA-MEMCHECK可以找到GPU代码中的引发内存错误的原因和具体的位置。但是它巨大的性能开销,使它不可能部署在实际的场景来为应用提供运行时的保护,只能作为一个非运行时的线下检测工具。在多个不可信用户共享一个GPU的时候,只依赖于线下的检测是不能阻止恶意用户攻击其他用户的。因此,在那些不可能在系统层面来为用户提供强隔离的情况下,提供运行时保护的动态检测内存的方法是必不可少的。
常见的canary技术是在分配的内存前或后插入一个加密的信息。这样,当缓冲区被溢出时,在返回地址被覆盖之前canary会首先被覆盖。通过检查canary的值是否被修改,就可以判断是否发生了溢出攻击。最近由AMD研究员提出的clARMOR系统就是一个基于canary技术的GPU上的内存检测工具。但是它存在以下的缺陷:
(1)clARMOR系统的内存溢出检查,是在用户的一个kernel运行结束后,另一个kernel开始前,这个间隙中进行的,在这种情况下,攻击者可以在这段时间内完成攻击,甚至是攻击完成后再将数据恢复成原样,从而避免被检查出来。
(2)clARMOR只对那些调用OpenCL API,或者OpenCL函数创建的内存提供保护。但是它对于调用malloc进行的细粒度的内存分配,并不提供保护。
(3)clARMOR只能检测overflow,但是检测不到向下溢出的underflow,以及doublefree错误。
不仅这些GPU端的检测工具都存在不足,部署在CPU端的检测内存溢出的工具,比如Electric Fence和StackGuard,因为需要在设备驱动或者编译器端进行虚拟内存系统的修改,所以都很难整合到目前闭源的商业环境。
发明内容
本发明针对目前GPU动态分配内存存在的内存溢出安全问题,以及现有的方法的缺点,提出了一种基于地址压缩技术的动态检测GPU上内存溢出的方法,包括以下内容:
(1)为了能检查到内存溢出错误,该工具在用户动态分配的内存的首尾两端都插入了canary来检测内存溢出。
(2)为了对用户程序造成尽可能小的影响并提供不间断的保护,该系统利用GPU的高并发性,让小部分线程运行检测器,大部分线程运行用户程序,从而使检测器独立于用户程序外并对用户程序进行不间断、透明的保护。
(3)为了方便检测器对相应的内存块进行溢出检查,该系统记录用户分配的内存的地址。同时,为了减少用来存储地址的内存消耗,该系统对内存地址进行压缩,并且利用压缩地址集代替链表形式来存储压缩过的地址。针对压缩地址集存储压缩地址的这种方式,本系统还设计了垃圾回收策略。
(4)为了减少用户程序的负担,同时防范double free攻击,该系统让用户程序只是对要释放的内存块进行标记,真正的释放内存委托给检测器。
该系统的结构图如图1,该系统主要由压缩地址集、检测器、用户程序使用的malloc和free函数的替换函数mallocN和freeN构成。对于用户程序,它调用mallocN分配内存,然后把分配的内存地址压缩到压缩地址集,freeN函数被用户程序用来标记要释放的内存。压缩地址集由多个字节数组组成,用来存储压缩地址。对于检测器而言,垃圾回收模块,在压缩地址集容量不够的时候,对它进行垃圾回收或者动态扩充它的容量。内存溢出检测模块,从压缩地址集中解压缩地址,并对该地址的内存进行内存溢出检查。内存释放模块,在发现内存被freeN函数标记释放的时候,会释放内存,并且更新压缩地址集中该内存的信息,具体内容如下:
1.压缩地址集
压缩地址集由多个字节数组组成,在用户程序和检测器运行前,执行初始化来为压缩地址集分配内存。用户程序使用压缩地址集存储压缩的地址,检测器从压缩地址集中解压缩地址。以压缩地址集为桥梁建立的用户程序和检测器的关系如下:
(1)所有的用户程序的线程,都被均匀的映射到组成压缩地址集的各个字节数组上面,用户线程按照映射的结果向对应的字节数组中写入压缩好的用户地址。
(2)检测器中的每个线程对应一个字节数组,线程对各自字节数组里存储的内容进行操作。
2.内存的动态申请和释放函数
一般情况下,用户程序调用malloc和free函数,来实现动态内存的申请和释放。在该系统中,使用自定义的mallocN、freeN来替换malloc、free,来完成动态内存申请和释放以及其他的一些功能。
2.1 mallocN函数
在本系统中,定义了新的mallocN,来替代GPU上原本的malloc函数。为了减少存储地址的内存开销,mallocN函数在分配完内存后,把分配的内存地址进行压缩,生成压缩地址,再存储到压缩地址集中。具体的过程如下:
(1)构建受保护的内存块:首先,调用mallocN分配比用户请求的内存稍大的内存空间。然后,在头部插入canary(head canary)和内存块大小的加密信息。最后在尾部也插入canary(tail canary),如图2。具体的生成方式如下:
●head canary的值是head canary密钥、内存大小信息和内存地址,三者加密计算出来的。tail canary是用相同的方式计算出来的,只是用的是另外一个tail canary密钥。通过这种方式,每个内存地址生成的head canary和tail canary都不一样,即使一个内存块的head canary和tail canary被泄露,其他的内存块也是安全的。
●内存块大小的加密信息,是通过将该内存的大小与size密钥,进行加密计算得出来的,它被检测器用来定位tail canary的位置。对内存块大小进行加密,提高了攻击者定位tail canary位置的难度。
通过这种方式,如果head canary或者tail canary正确性验证失败,那么就发生了内存的underflow或者overflow。另外,从前面的叙述可以看出来,各个密钥的安全性是十分重要的,该系统把这些密钥全部都存储在GPU的寄存器上,来阻止任何来自主机端和用户程序对他们的非法访问。由于GPU的非抢占式调度模式,即使攻击者完全控制了主机端,他也无法暂停当前GPU程序的执行。然而,在GPU程序运行结束后,存储在寄存器上的这些密钥,都会自动销毁。
(2)生成压缩地址:压缩地址由header和payload两部分组成,header占用固定的一个字节,用来存储解压缩过程中需要的信息。payload通过计算该内存地址与参考地址的差值的绝对值得到,参考地址是指用户程序分配的第一块动态内存的地址,根据payload的大小不同,占用不同的字节。在生成header的过程中:
●第一个bit根据该内存地址与参考地址的差值的正负来赋值。
●接下来的四个bit用payload部分占用的字节数来赋值。
●最后的三个bit被用来标记被释放的内存的压缩地址,初始标记是1,说明压缩地址对应的内存块未被释放,下面称之为有效压缩地址,反之称为无效压缩地址。如果存储的压缩地址对应的内存块,已经被保护线程释放了的话,标记这三位为0,在以后的查询当中,不再对该地址进行解压缩。
得益于以下两个原因,可以有效的减少存储地址所消耗的内存。首先,用压缩地址代替地址,减少了内存开销。其次,压缩地址集本质上是多个字节数组,它不像传统的链表存储地址的方式,不需要存储next指针,来指向下一个存储地址的节点。
(3)将压缩地址存储到压缩地址集:存储到压缩地址集的过程中有以下两个要点:
●由于存在多个线程同时插入到同一个字节数组,该系统利用CUDA的原子操作atomicCAS进行无锁并发插入,来保证每个需要插入的压缩地址,都能获得正确的插入位置。
●由于进行垃圾回收的时候,会进行字节数组的替换,为了保证在检测器执行垃圾回收的时候,压缩的地址能插入到正确的字节数组里面,无锁并发过程中的字节数组的指针被记录下来。在最后插入的过程中,插入的位置是记录的指针所指的字节数组。
2.2 freeN函数
和mallocN函数相似,该系统定义了新的freeN来替代GPU上原本的free函数的功能。但是释放的方式有所不同,为了减少用户程序的负担,用户程序调用freeN释放内存的时候只是对该内存块进行标记,真正的最后一步释放交给检测器来做,具体如下:
(1)判断是否已经被标记,如果已经标记了,那么说明这个内存块被重复释放了,这时检测到double free攻击,输出错误信息并且停止程序的运行。
(2)如果没有被标记的话,进行内存块的标记。
3.检测器
检测器运行的时候,会调用多个线程并发执行,每个线程对各自的字节数组执行垃圾回收模块、内存溢出检测模块以及内存释放模块。检测器的各个线程在保护用户程序的时候,需要不间断的进行检测,完成一个内存块的检测需要的执行流程如下:
(1)根据压缩地址集的剩余空间,判断是否执行垃圾回收模块;
(2)执行内存溢出检测模块。从压缩地址集中解压出未被释放的地址,并检测内存溢出问题;
(3)如果内存被标记释放的话,执行内存释放模块;
(4)检测下一个内存块。
3.1 垃圾回收模块
该模块执行垃圾回收或动态扩容操作,由于两者的区别只是申请的新字节数组的内存大小不一样,所以下面只对垃圾回收进行具体说明。
(1)当发现字节数组当中剩余的空间低于自设置的阈值的时候,执行垃圾回收。
(2)执行垃圾回收会申请一个相同大小的新字节数组,如果执行的是动态扩容的话,那么这个大小是以前的两倍。
(3)接下来用这个新的字节数组代替旧的字节数组,再把旧字节数组当中未被释放的内存对应的压缩地址,转移到新的字节数组上来。有两点需要注意:
●这时候用户程序也在进行压缩地址的插入,所以在转移压缩地址的时候,采用atomicCAS原子操作,把检测器中的线程模拟成一个用户线程,与用户线程一起,来插入有效的压缩地址到新的字节数组。
●由于用户线程在执行atomicCAS操作的时候,会保存接下来插入的字节数组的指针,保证了即使发生了字节数组的替换,用户线程只有两种情况:第一,插入压缩地址到旧字节数组,然后被检测器的线程转移到新的字节数组中去。第二,直接插入到新的字节数组,这两种情况都保证了系统的正确执行。
3.2 内存溢出检测模块
内存溢出模块主要进行地址的解压缩,和检测内存溢出安全问题。
(1)首先,检测器线程根据自己对应的字节数组,找到解压缩用的索引。然后根据索引,找到字节数组中压缩地址的header位置,提取出header保存的信息。
(2)如果header后三位为0,那么该内存块被释放了,用header中提取出的payload的字节数加上1,来更新解压缩的索引,重新解压,直到解压出未被释放的地址。
(3)如果header后三位不为0,利用从header提取出的payload的字节数,来提取存储的差值绝对值payload,然后根据header存储的正负号信息、参考地址以及刚得到的绝对值,来计算出内存的地址。
(4)根据地址获取保存的head canary和tail canary,验证head canary和tailcanary的正确性。有问题的话说明发现内存溢出,输出错误信息,并且停止程序的运行。
3.3 内存释放模块
内存释放模块在内存被标记的情况下,进行内存释放。如果该内存块被用户标记释放的话,内存释放模块释放该内存块,并且修改存储在压缩地址集中的压缩地址,将header的最后三位置0,避免在以后的检查中对已经释放的内存块进行解压缩。
附图说明
图1:系统结构图
图2:内存结构图
图3:压缩地址集
图4:检测器流程图
具体实施方式
本发明的硬件环境主要是一台服务器。其中,服务器的CPU为Intel Xeon E5-2609,1.9GHz,以及一块进行GPU计算的独立显卡NVIDIAGM200GeForce GTX TITAN X,这个GPU有24个流处理器和3072个CUDA核心以及12GB的GDDR5内存,内存带宽为336.5GB/s。
本发明的软件实现以64位Ubuntu 14.04.4LTS为平台,在CUDA环境下,使用CUDA C++语言开发。NVIDIA的图形驱动的版本是352.39,CUDA的版本是7.5。
程序主要分为四部分。第一部为初始化部分。第二部分为由用户程序调用mallocN执行的分配内存、压缩地址以及插入到压缩地址集。第三部分是调用freeN进行的内存块的标记。第四部分是由检测器执行的垃圾回收模块、内存溢出检测模块以及内存释放模块。
1.压缩地址集初始化部分
(1)算法描述
算法输入:N,S
算法输出:B
说明:N为创建字节数组的数量,S是字节数组的大小,B为创建好压缩地址集。
(2)算法步骤:
1)创建一个线程数为N的GPU运行程序;
2)每个线程申请一个大小为S的内存;
3)将申请的内存初始化为0;
4)以初始化好的内存为参数创建压缩地址集;
(3)其伪代码如下:
Figure BDA0001465977810000071
2.用户程序调用mallocN
(1)算法描述
算法输入:S
算法输出:Info
说明:S是用户申请的地址大小,Info是插入的压缩地址。
(2)算法步骤:
1)分配一块比用户申请的大小S要大的内存空间;
2)插入加密的canary和内存块大小信息构建被保护内存块;
3)生成压缩地址;
4)通过原子操作atomiCAS获取插入的字节数组的位置;
5)插入压缩地址。
(3)其伪代码如下:
Figure BDA0001465977810000072
Figure BDA0001465977810000081
3.用户程序调用freeN
(1)算法描述
算法输入:P
算法输出:Mark
说明:P是用户需要释放的地址,Mark是完成对内存块的标记。
(2)算法步骤:
1)通过head canary位置处存储的值与预值相互比较,判断是否发生了doublefree(预值通过内存大小值、内存地址、head canary密钥、free密钥计算出来);
2)如果发现double free的话,停止程序运行,输出错误信息,否则执行下一步;
3)进行内存块标记,用该内存处存储的head canary与free密钥进行计算得出加密值,然后用这个加密值替换head canary;
(3)其伪代码如下:
Figure BDA0001465977810000082
4.检测器
(1)算法描述
算法输入:DecodeIndx
算法输出:Security
说明:DecodeIndx是当前检测器线程需要解压的压缩地址的header,在字节数组中的位置,Security指是否发现安全内存溢出问题。
(2)算法步骤
1)判断是否需要进行垃圾回收或者动态扩充字节数组,如果字节数组的剩余存储空间小于某个自设置的阈值的话,执行垃圾回收或者扩充字节数组的大小;
2)不需要执行的话或者执行完垃圾回收或者动态扩充后直接下一步;
3)解压缩没有被释放的压缩地址;
4)进行canary的正确性验证;
5)发现内存溢出的话输出错误信息并且停止程序继续运行,没有的话直接下一步;
6)判断该内存是否被freeN标记释放;
7)如果被标记释放,释放内存并且修改字节数组中对应的信息,没有的话解压下一个;
(3)其伪代码如下:
Figure BDA0001465977810000091
Figure BDA0001465977810000101

Claims (6)

1.本发明涉及一种基于地址压缩技术的动态检测GPU上内存溢出的方法,该方法主要包括以下五个方面:
(1)用户程序使用mallocN分配比用户请求的内存稍大的内存空间,然后在头部插入headcanary和内存块大小的加密信息,在尾部插入tail canary,head canary的值通过headcanary密钥、内存大小信息和内存地址加密计算出来,tail canary使用相同的方式计算,只是使用tail canary密钥代替head canary密钥,接下来,地址被压缩到多个字节数组组成的压缩地址集;
(2)使用freeN函数来标记需要释放的内存;
(3)利用检测器的垃圾回收模块,对压缩地址集进行垃圾回收或者动态扩充它的容量;
(4)利用检测器的内存溢出检测模块来解压缩地址,并对进行内存溢出检查;
(5)利用检测器的内存释放模块释放被freeN标记的内存。
2.根据权利要求1所述的一种基于地址压缩技术的动态检测GPU上内存溢出的方法,其特征在于,本方法使用户程序在调用mallocN函数的时候具体执行以下操作:
(1)构建受保护的内存块:调用mallocN分配比用户请求的内存稍大的内存空间,在头部插入head canary和内存块大小的加密信息,在尾部也插入tail canary;
(2)生成压缩地址:压缩地址由header和payload两部分组成,header占用固定的一个字节,用来存储解压缩过程中需要的信息,payload通过计算内存地址与参考地址的差值的绝对值得到,参考地址是指用户程序分配的第一块动态内存的地址,根据payload的大小不同,占用不同的字节,在生成header的过程中,第一个bit根据内存地址与参考地址的差值的正负来决定,接下来的四个bit用payload部分占用的字节数来赋值,最后的三个bit被用来标记已经释放的内存的压缩地址,初始标记是1,说明压缩地址有效,该压缩地址对应的内存块被释放的时候,标记为0;
(3)将压缩地址存储到压缩地址集:利用CUDA的原子操作atomicCAS进行无锁并发,来保证每个需要插入的压缩地址,都能获得正确的插入位置,另外,无锁并发过程中的字节数组的指针被记录下来,保证在执行垃圾回收模块的同时,用户的压缩地址能被保存到正确的字节数组。
3.根据权利要求1所述的一种基于地址压缩技术的动态检测GPU上内存溢出的方法,其特征在于本方法在用户调用freeN的时候:
(1)判断是否已经被标记,如果已经标记了,说明内存块被重复释放,这时检测到doublefree攻击,输出错误信息并且停止程序的运行;
(2)如果没有被标记的话,进行内存块的标记。
4.根据权利要求1所述的一种基于地址压缩技术的动态检测GPU上内存溢出的方法,其特征在于利用检测器的垃圾回收模块,对压缩地址集进行垃圾回收或者动态扩充它的容量,该模块执行垃圾回收或动态扩容操作的时候,两者的区别只是申请的新字节数组的内存大小不一样,所以下面只对垃圾回收进行具体说明:
(1)当发现字节数组当中剩余的空间低于自设置的阈值的时候,执行垃圾回收;
(2)执行垃圾回收会申请一个相同大小的新字节数组,如果执行的是动态扩容的话,那么这个大小是以前的两倍;
(3)接下来用这个新的字节数组代替旧的字节数组,然后采用atomicCAS原子操作,把检测器的线程模拟成一个用户线程,与用户线程一起,并发的将旧字节数组中的未被标记释放的压缩地址,插入到新的字节数组中去。
5.根据权利要求1所述的一种基于地址压缩技术的动态检测GPU上内存溢出的方法,其特征在于利用检测器的内存溢出检测模块来解压缩地址,并对进行内存溢出检查:
(1)首先,检测器线程根据自己对应的字节数组,找到解压缩用的索引,然后根据索引,找到字节数组中压缩地址的header位置,提取出header保存的信息;
(2)如果header后三位为0,用header中提取出的payload的字节数加1的值,来更新解压缩的索引,重新解压,直到解压出的未被释放的地址;
(3)如果header后三位不为0,利用从header提取出的字节数,来提取存储的差值绝对值payload,然后根据header存储的正负号信息、参考地址以及刚得到的绝对值计算出内存的地址;
(4)根据地址获取head canary和tail canary,验证head canary和tail canary的正确性。
6.根据权利要求1所述的一种基于地址压缩技术的动态检测GPU上内存溢出的方法,其特征在于利用检测器的内存释放模块释放被标记的内存:如果内存块被用户标记释放的话,内存释放模块释放该内存块,并且修改存储在压缩地址集中的压缩地址,将header的最后三位置0,避免在以后的检查中对已经释放的内存块进行解压缩。
CN201711114892.8A 2017-11-13 2017-11-13 一种基于地址压缩技术的动态检测gpu上内存溢出的方法 Active CN107908954B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711114892.8A CN107908954B (zh) 2017-11-13 2017-11-13 一种基于地址压缩技术的动态检测gpu上内存溢出的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711114892.8A CN107908954B (zh) 2017-11-13 2017-11-13 一种基于地址压缩技术的动态检测gpu上内存溢出的方法

Publications (2)

Publication Number Publication Date
CN107908954A CN107908954A (zh) 2018-04-13
CN107908954B true CN107908954B (zh) 2021-04-30

Family

ID=61845056

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711114892.8A Active CN107908954B (zh) 2017-11-13 2017-11-13 一种基于地址压缩技术的动态检测gpu上内存溢出的方法

Country Status (1)

Country Link
CN (1) CN107908954B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110633190B (zh) * 2019-09-26 2023-08-29 北京博睿宏远数据科技股份有限公司 一种应用程序内存监控方法、装置、设备及存储介质
CN110895492B (zh) * 2019-12-11 2023-01-10 Oppo(重庆)智能科技有限公司 设备控制方法、装置、存储介质及电子设备
CN111832022B (zh) * 2020-07-03 2024-02-13 北京智游网安科技有限公司 Double Free漏洞检测方法、终端及存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1564098A (zh) * 2004-04-09 2005-01-12 南京大学 一种防止缓冲区溢出攻击的动态堆栈内存管理方法
CN1702634A (zh) * 2004-05-27 2005-11-30 国际商业机器公司 便利无环境主机干预下的可分页模式虚拟环境存储管理
CN101694686A (zh) * 2009-09-21 2010-04-14 北京工业大学 基于逻辑隔离的缓冲区溢出动态度量方法
US7752459B2 (en) * 2001-12-06 2010-07-06 Novell, Inc. Pointguard: method and system for protecting programs against pointer corruption attacks
CN102298677A (zh) * 2011-08-29 2011-12-28 瑞斯康达科技发展股份有限公司 一种堆栈溢出的保护方法和装置
CN102662830A (zh) * 2012-03-20 2012-09-12 湖南大学 一种基于动态二进制翻译框架的代码复用攻击检测系统
CN104766015A (zh) * 2015-04-10 2015-07-08 北京理工大学 一种基于函数调用的缓冲区溢出漏洞动态检测方法
CN105721427A (zh) * 2016-01-14 2016-06-29 湖南大学 一种从Web日志中挖掘攻击频繁序列模式的方法
CN107229862A (zh) * 2017-06-06 2017-10-03 电子科技大学 基于模拟栈和线程注入的一种rop攻击栈溢出防护方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8626968B2 (en) * 2009-12-26 2014-01-07 Intel Corporation Inter-queue anti-starvation mechanism with dynamic deadlock avoidance in a retry based pipeline
US9411668B2 (en) * 2014-01-14 2016-08-09 Nvidia Corporation Approach to predictive verification of write integrity in a memory driver

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7752459B2 (en) * 2001-12-06 2010-07-06 Novell, Inc. Pointguard: method and system for protecting programs against pointer corruption attacks
CN1564098A (zh) * 2004-04-09 2005-01-12 南京大学 一种防止缓冲区溢出攻击的动态堆栈内存管理方法
CN1702634A (zh) * 2004-05-27 2005-11-30 国际商业机器公司 便利无环境主机干预下的可分页模式虚拟环境存储管理
CN101694686A (zh) * 2009-09-21 2010-04-14 北京工业大学 基于逻辑隔离的缓冲区溢出动态度量方法
CN102298677A (zh) * 2011-08-29 2011-12-28 瑞斯康达科技发展股份有限公司 一种堆栈溢出的保护方法和装置
CN102662830A (zh) * 2012-03-20 2012-09-12 湖南大学 一种基于动态二进制翻译框架的代码复用攻击检测系统
CN104766015A (zh) * 2015-04-10 2015-07-08 北京理工大学 一种基于函数调用的缓冲区溢出漏洞动态检测方法
CN105721427A (zh) * 2016-01-14 2016-06-29 湖南大学 一种从Web日志中挖掘攻击频繁序列模式的方法
CN107229862A (zh) * 2017-06-06 2017-10-03 电子科技大学 基于模拟栈和线程注入的一种rop攻击栈溢出防护方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
A study of overflow vulnerabilities on GPUs.;Bang Di, Jianhua Sun(B), and Hao Chen;《Springer》;20161231;全文 *
vCUDA: GPU Accelerated High Performance Computing in Virtual Machines;Lin Shi, Hao Chen and Jianhua Sun;《IEEE Transaction on Computers》;20121231;全文 *

Also Published As

Publication number Publication date
CN107908954A (zh) 2018-04-13

Similar Documents

Publication Publication Date Title
US11784786B2 (en) Mitigating security vulnerabilities with memory allocation markers in cryptographic computing systems
US11748468B2 (en) Dynamic switching between pointer authentication regimes
CN112149145A (zh) 基于不变指针的数据加密
Nagarakatte et al. Watchdog: Hardware for safe and secure manual memory management and full memory safety
CN110659244A (zh) 内联编码能力
CN112149152A (zh) 使用加密的基地址和用于多租户环境的以密码方式的计算
CN106687938B (zh) 跨电源周期维护安全处理环境的方法及系统
CN107807839B (zh) 一种修改虚拟机内存数据的方法、装置及电子设备
CN107908954B (zh) 一种基于地址压缩技术的动态检测gpu上内存溢出的方法
CN114692176A (zh) 基于已编码指针的数据加密
US10671548B2 (en) Memory initialization detection system
CN112148521A (zh) 为元数据使用提供改善的效率
CN112639789A (zh) 用于存储器完好性检查的完好性树
US8990627B2 (en) Leveraging page fault and page reclaim capabilities in debugging
EP2645249A1 (en) Information processing apparatus, and method of controlling information processing apparatus
US9639477B2 (en) Memory corruption prevention system
US9286483B2 (en) Protecting visible data during computerized process usage
CN115964758A (zh) 一种基于TrustZone的内核数据完整性保护方法
US10229070B2 (en) Computer-implemented method and a system for encoding a heap application memory state using shadow memory
US20220294634A1 (en) Method for executing a computer program by means of an electronic apparatus
US20220292182A1 (en) Method for the execution of a binary code of a computer program by a microprocessor
US20220058119A1 (en) Free detection with double free protection
Bang et al. Enhancing a Lock-and-key Scheme with MTE to Mitigate Use-After-Frees
Chu et al. Using Multi-core to Debug Interactive Applications
CN117666960A (zh) 一种应用了NVIDIA CUDA加速和改进Merkle哈希树的安全存储框架的实现方法、设备及存储介质

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