CN106815520A - 引擎保护方法和装置 - Google Patents

引擎保护方法和装置 Download PDF

Info

Publication number
CN106815520A
CN106815520A CN201611259940.8A CN201611259940A CN106815520A CN 106815520 A CN106815520 A CN 106815520A CN 201611259940 A CN201611259940 A CN 201611259940A CN 106815520 A CN106815520 A CN 106815520A
Authority
CN
China
Prior art keywords
memory address
memory
application
address
size
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.)
Pending
Application number
CN201611259940.8A
Other languages
English (en)
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.)
Neusoft Corp
Original Assignee
Neusoft Corp
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 Neusoft Corp filed Critical Neusoft Corp
Priority to CN201611259940.8A priority Critical patent/CN106815520A/zh
Publication of CN106815520A publication Critical patent/CN106815520A/zh
Pending legal-status Critical Current

Links

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/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management

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)

Abstract

本公开涉及一种引擎保护方法和装置,涉及网络安全领域,该方法包括按照第一预设规则给可执行对象分配内存地址;按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写,这样就能够在一定程度上能够避免其引擎在可执行对象执行时被非法恶意攻击。

Description

引擎保护方法和装置
技术领域
本公开涉及网络安全领域,具体地,涉及一种引擎保护方法和装置。
背景技术
目前大部分浏览器引擎以及Java、Perl、Ruby、Flash等都使用了JIT编译(Just-In-Time Compilation)技术来提高代码执行效率。JIT编译技术在为可执行对象分配内存时会直接分配可预期的、具有可读写可执行(Read、Write、Exeute,RWX)权限的内存地址,这样违背了数据执行保护以及随机地址分配的保护措施,使得可执行对象执行时其引擎很容易受到缓冲区溢出、堆喷射等恶意攻击。因此,少数使用JIT编译技术的引擎采取了实时修改内存地址权限的方法对其进行保护,将分配给可执行对象的内存地址的写权限与可执行权限分开。但是这样又会使其处理周期过长,造成使用JIT编译技术的引擎效率降低。
发明内容
本公开的目的是提供一种引擎保护方法,该方法能够在一定程度上避免引擎在可执行对象执行时被非法恶意攻击。
为了实现上述目的,本公开提供一种引擎保护方法,该方法包括:
按照第一预设规则给可执行对象分配内存地址;
按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写。
可选的,所述按照第一预设规则给可执行对象分配内存地址包括:
根据默认内存地址分配规则给所述可执行对象分配内存地址。
可选的,所述按照第一预设规则给可执行对象分配内存地址包括:
获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限;
当所述申请内存地址为空且所述申请内存权限为可读写可执行权限时,对所述申请内存地址进行随机化处理以得到随机化内存地址;
根据所述随机化内存地址、所述申请内存大小和所述申请内存权限确定要分配给所述可执行对象的内存地址;
当所确定的内存地址属于系统内存地址时,返回所述对所述申请内存地址进行随机化处理以得到随机化内存地址的步骤;
当所确定的内存地址不属于系统内存地址时,将所确定的内存地址分配给所述可执行对象。
可选的,在所述获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限之后,所述按照第一预设规则给可执行对象分配内存地址还包括:
判断所述申请内存大小是否是2的幂次方;
当所述申请内存大小不是2的幂次方时,将所述申请内存大小增加至大于所述申请内存大小的最小的2的幂次方。
可选的,所述按照第二预设规则为所分配的内存地址设置保护区包括:
将所述保护区设置在从所分配的内存地址的首地址开始的预设大小的内存空间内;
将所分配的内存地址向后偏移,其中偏移的大小为所述预设大小。
本公开还提供一种引擎保护装置,该装置包括:
内存地址分配模块,用于按照第一预设规则给可执行对象分配内存地址;
保护区设置模块,用于按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写。
可选的,所述内存地址分配模块包括:
内存地址默认分配子模块,用于根据默认内存地址分配规则给所述可执行对象分配内存地址。
可选的,所述内存地址分配模块包括:
获取子模块,用于获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限;
内存地址随机化子模块,用于当所述申请内存地址为空且所述申请内存权限为可读写可执行权限时,对所述申请内存地址进行随机化处理以得到随机化内存地址;
内存地址确定子模块,用于根据所述随机化内存地址、所述申请内存大小和所述申请内存权限确定要分配给所述可执行对象的内存地址;
内存地址判断子模块,用于判断所述内存地址确定子模块所确定的内存地址是否属于系统内存地址,并当所确定的内存地址属于系统内存地址时,通知所述内存地址随机化子模块重新对所述申请内存地址进行随机化处理以得到随机化内存地址;
内存地址分配子模块,用于当所述内存地址判断子模块判断所确定的内存地址不属于系统内存地址时,将所确定的内存地址分配给所述可执行对象。
可选的,在所述获取子模块获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限之后,所述内存地址分配模块还包括:
申请内存大小判断子模块,用于判断所述申请内存大小是否是2的幂次方;
申请内存大小增加子模块,用于当所述申请内存大小不是2的幂次方时,将所述申请内存大小增加至大于所述申请内存大小的最小的2的幂次方。
可选的,所述保护区设置模块包括:
保护区设置子模块,用于将所述保护区设置在从所分配的内存地址的首地址开始的预设大小的内存空间内;
内存地址偏移子模块,用于将所分配的内存地址向后偏移,其中偏移的大小为所述预设大小。
通过上述技术方案,先按照第一预设规则给可执行对象分配内存地址,然后按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写,这样就能够在一定程度上保护所述内存地址,且避免其引擎在可执行对象执行时被非法恶意攻击。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是根据本公开一种实施方式的引擎保护方法的流程图。
图2是根据本公开又一种实施方式的引擎保护方法的流程图。
图3是根据本公开又一种实施方式的引擎保护方法的流程图。
图4是根据本公开又一种实施方式的引擎保护方法的流程图。
图5是根据本公开又一种实施方式的引擎保护方法的流程图。
图6是根据本公开一种实施方式的引擎保护装置的示意框图。
图7是根据本公开又一种实施方式的引擎保护装置中的内存地址分配模块的示意框图。
图8是根据本公开又一种实施方式的引擎保护装置中的内存地址分配模块的示意框图。
图9是根据本公开又一种实施方式的引擎保护装置中的内存地址分配模块的示意框图。
图10是根据本公开一种实施方式的引擎保护装置中的保护区设置模块的示意框图。
附图标记说明
100引擎保护装置 10内存地址分配模块
20保护区设置模块 101内存地址默认分配子模块
102获取子模块 103内存地址随机化子模块
104内存地址确定子模块 105内存地址判断子模块
106内存地址分配子模块 107申请内存大小判断子模块
108申请内存大小增加子模块 201保护区设置子模块
202内存地址偏移子模块
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
图1是根据本公开一种实施方式的引擎保护方法的流程图,如图1所示,该方法包括步骤S101和步骤S102。
在步骤S101中,按照第一预设规则给可执行对象分配内存地址。
在步骤S102中,按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写。
所述保护区的设置目的是为了保护所述内存地址,其保护的方法即将所述保护区的权限设置为不可写。
通过上述技术方案,当需要给可执行对象分配内存时,先按照第一预设规则给可执行对象分配内存地址,然后按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写,这样就能够在一定程度上保护所分配的内存地址,且避免其引擎在可执行对象执行时被非法恶意攻击。
图2是根据本公开又一种实施方式的引擎保护方法的流程图,如图2所示,该方法包括图1中的步骤S102,还包括步骤S201。
在步骤S201中,根据默认内存地址分配规则给所述可执行对象分配内存地址。
上述步骤即为图1中步骤S101中所述的第一预设规则的其中一种。
所述默认内存地址分配规则即按照现有技术中使用JIT编译技术的引擎为可执行对象分配内存地址的规则,本公开对所述默认内存地址分配规则不作限定。
通过上述技术方案,先根据默认内存地址分配规则给所述可执行对象分配内存地址,然后按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写,这样提供了一种通过为所分配的内存地址设置保护区进而来保护引擎不受非法恶意攻击的方法。
图3是根据本公开又一种实施方式的引擎保护方法的流程图,图3所示的方法是图1中步骤S101中所述的第一预设规则中的另外一种。如图3所示,该方法包括步骤S301至步骤S307。
在步骤S301中,获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限。
可执行对象申请内存时,会通过自己的内存申请函数来进行申请,所述内存申请函数中主要包括申请的内存大小,申请内存的首地址,以及所要申请的内存页的权限等参数信息。
在步骤S302中,判断所述申请内存地址是否为空且所述申请内存权限是否为可读写可执行权限,如果是,则转至步骤S303,如果不是,则转至步骤S304。
判断所述申请内存地址是否为空且所述申请内存权限是否为可读写可执行权限即为判断所述可执行对象申请的内存是否为有被非法恶意攻击的危险的内存。
在步骤S303中,在申请内存地址为空且申请内存权限为可读写可执行权限时,对所述申请内存地址进行随机化处理以得到随机化内存地址,然后转至步骤S305。
步骤S303的主要目的是只在申请内存地址为空且申请内存权限为RWX权限时对申请内存地址进行随机化,这样就不会过多的占用系统时间,不会影响引擎(例如,使用JIT编译技术的引擎)的运行效率。
其中,所述对所述申请内存地址进行随机化处理可以通过利用GeorgeMarsaglia's MWC算法来进行随机化处理。George Marsaglia's MWC算法是一种利用异或与移位运算来产生高伪随机度的伪随机数生成算法,易于软件实现,而且在硬件上运行速度非常快,因此对所述申请内存地址进行随机化处理的过程几乎不会影响到引擎的运行效率。
在步骤S304中,根据所述申请内存大小、所述申请内存地址和所述申请内存权限给所述可执行对象分配内存地址。
当判断所述申请内存地址不为空时,说明可执行对象的申请内存地址是具体的地址,针对这种申请内存地址,选择不对其进行随机化处理,而直接根据所述申请内存大小、所述申请内存地址和所述申请内存权限给所述可执行对象分配内存地址。
当申请内存地址为空,但所述申请内存权限不为可读写可执行权限时,即所述可执行对象申请的内存地址不是RWX权限的内存地址时,也选择不对其进行随机化处理,而直接根据所述申请内存大小、所述申请内存地址和所述申请内存权限给所述可执行对象分配内存地址。因为当所述可执行对象的申请内存权限不是RWX权限时,所述引擎收到非法恶意攻击的危险程度相对并不高,在这种情况下就无需占用过多的系统时间对引擎进行保护。
在步骤S305中,根据所述随机化内存地址、所述申请内存大小和所述申请内存权限确定要分配给所述可执行对象的内存地址。
所述确定要分配给所述可执行对象的内存地址的过程常用的方法是调用一个系统内存分配函数来完成。在windows系统下,所述系统内存分配函数可以是VitualAlloc函数,当然也可以是其他系统内存分配函数,例如直接调用Windows堆函数或者CRT堆函数等。对于不同的系统,调用的内存分配函数可以不一样。
在步骤S306中,判断所确定的内存地址是否属于系统内存地址,如果否,则转至步骤S307,如果是,则转至步骤S303。
在确定了要分配给所述可执行对象的内存地址之后,需要对所确定的内存地址进行是否属于系统内存地址的判断,这一步属于常规判断。如果属于系统内存地址,因为系统内存地址不可用,则返回步骤S303对所确定的内存地址进行再一次的随机化处理,直到判断所确定的内存地址不属于系统内存地址时,即此时所确定的内存地址属于用户可用地址空间,这时,再转至步骤S307。
在步骤S307中,将所确定的内存地址分配给所述可执行对象。
在判断所确定的内存地址属于用户可用地址空间后,就将所确定的内存地址通过赋值的过程真正分配给可执行对象。
通过上述的技术方案,首先获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限,当所述申请内存地址为空且所述申请内存权限为可读写可执行权限时,对所述申请内存地址进行随机化处理以得到随机化内存地址,然后根据所述随机化内存地址、所述申请内存大小和所述申请内存权限确定要分配给所述可执行对象的内存地址,当所确定的内存地址属于系统内存地址时,返回所述对所述申请内存地址进行随机化处理以得到随机化内存地址的步骤,而当所确定的内存地址不属于系统内存地址时,就将所确定的内存地址分配给所述可执行对象,这样,如果攻击者想要在分配给可执行对象的内存地址上执行恶意代码,由于采取了以上的随机化处理,给可执行对象分配的内存地址是随机的,攻击者很难获取可执行对象的准确内存地址,这样,就能在一定程度上防止所述引擎被非法恶意攻击。
以下是针对图3中的随机化处理方法的有效性评估。
从表1中可以看出,没有使用本公开中的随机化处理方法时,使用JIT编译技术的引擎给可执行对象分配的是连续的相差0x10000字节的内存地址,因此攻击者能够猜测出可执行对象在内存中的准确位置。然而,使用本公开的随机化处理方法之后,所述引擎给可执行对象分配的地址是完全随机的,攻击者很难获取可执行对象在内存中的准确位置。
表1
图4是根据本公开又一种实施方式的引擎保护方法的流程图,是图1中步骤S101中所述的第一预设规则中的又一种。如图4所示,该方法在图3的步骤S301之后,还包括步骤S401和步骤S402,以及接下来的步骤S302至步骤S307。
在步骤S401中,判断所述申请内存大小是否是2的幂次方,如果否,则转至步骤S402,如果是,则转至步骤S302。
判断所述申请内存大小是否是2的幂次方的原因,一是通常情况下给可执行对象分配内存时,所述内存大小都是以2的幂的形式对齐的;二是2的幂的大小的内存空间适合硬件操作,有利用提高运行效率。
在步骤S402中,将所述申请内存大小增加至大于所述申请内存大小的最小的2的幂次方。
如果判断所述申请内存大小不是2的幂次方,则主动将所述申请内存大小增加至最接近原申请内存大小的2的幂次方,然后在进行内存分配工作。
通过上述的技术方案,在所述获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限之后,先判断所述申请内存大小是否是2的幂次方,当所述申请内存大小不是2的幂次方时,将所述申请内存大小增加至大于所述申请内存大小的最小的2的幂次方,然后再进行后续的内存分配,这样,有利于提高引擎的运行效率。
图5是根据本公开又一种实施方式的引擎保护方法的流程图,如图5所示,该方法包括步骤S501和步骤S502。
步骤S501,将所述保护区设置在从所分配的内存地址的首地址开始的预设大小的内存空间内。
所述保护区的大小相对于所述所分配的内存地址大小很小,例如,所述保护区的大小可以是8k。
将所述保护区设置在从所分配的内存地址的首地址开始的预设大小的内存空间内时,保护区的内存地址与所分配的内存地址会出现重合,此时执行步骤S502。
步骤S502,将所分配的内存地址向后偏移,其中偏移的大小为所述预设大小。
在设置好保护区的地址之后,为避免内存重合,将所分配的内存地址向后偏移所述保护区的大小,保证保护区的内存地址与所分配的内存的保护地址是连续且不重合的。
通过上述的技术方案,先将所述保护区设置在从所分配的内存地址的首地址开始的预设大小的内存空间内,然后将所分配的内存地址向后偏移,其中偏移的大小为所述预设大小,这样就为可执行对象的内存地址空间设置了一个能够起到保护作用的保护区,由于这个保护区的地址与可执行对象的内存地址空间是连续的,且所述保护区的权限是不可写,因此,当所述引擎受到非法恶意攻击例如缓冲区溢出等攻击时,就能够及时的反应报警,以使所述引擎终止程序的运行,从而起到保护所述引擎的功能。
本公开的发明人以JavaScript引擎V8、Tamarin以及Safari’s为例,编写了一系列的测试用例,用来测试使用本公开内容后引擎对于非法恶意攻击的防范效果。表中的JIT引擎即使用JIT编译技术的引擎。如表2所示,测试中的三个引擎对于测试用攻击样例的攻击,防范效果都是有效的。
表2
本公开的发明人还将本公开内容与使用JIT编译技术的引擎常用的安全防范措施进行了调研比较,结果如表3所示,从表3中可以看出,目前大多数使用JIT编译技术的引擎都没有使用本公开中的发明内容。
表3
其中,所述内存权限限定的方法,即在背景技术中提到的,少数使用JIT编译技术的引擎采取的实时修改内存地址权限的方法,将分配给可执行对象的内存地址的写权限与可执行权限分开,在最初为可执行对象分配内存地址时分配的是具有RWX权限的内存地址,并将权限修改为RW,在可执行对象即将执行时,将其内存地址的权限修改为RX,执行结束后再将其内存地址的权限修改为RW,这样处理非常消耗处理器周期,会降低引擎效率。
另外,引擎JagerMonkey是实现了内存权限限定功能的,但是在默认情况下此功能未被开启,因此默认其不具有此功能。
本公开的发明人还针对不同的使用JIT编译技术的引擎进行了10000次的内存分配操作,表4显示了在使用和不使用本公开内容的情况下的所用时间以及系统开销,如表4所示,使用本公开内容的引擎的系统开销在10%以内,这是在可以接受的范围内的;且所用时间的差距也在可以接收的范围内。
表4
图6是根据本公开一种实施方式的引擎保护装置100的示意框图。如图6所示,该装置包括:
内存地址分配模块10,用于按照第一预设规则给可执行对象分配内存地址;
保护区设置模块20,用于按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写。
通过上述技术方案,当可执行对象申请内存时,内存地址分配模块10先按照第一预设规则给可执行对象分配内存地址,然后保护区设置模块20按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写,这样就能够在一定程度上保护所述内存地址,且避免其引擎在可执行对象执行时被非法恶意攻击。
图7是根据本公开又一种实施方式的引擎保护装置100中的内存地址分配模块10的示意框图。如图7所示,所述内存地址分配模块10包括:
内存地址默认分配子模块101,用于根据默认内存地址分配规则给所述可执行对象分配内存地址。
通过上述技术方案,内存地址默认分配子模块101先根据默认内存地址分配规则给所述可执行对象分配内存地址,然后保护区设置模块20再按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写,这样提供了一种通过为所分配的内存地址设置保护区进而来保护引擎不受非法恶意攻击的方法。
图8是根据本公开又一种实施方式的引擎保护装置100中的内存地址分配模块10的示意框图。如图8所示,所述内存地址分配模块10包括:
获取子模块102,用于获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限;
内存地址随机化子模块103,用于当所述申请内存地址为空且所述申请内存权限为可读写可执行权限时,对所述申请内存地址进行随机化处理以得到随机化内存地址;
内存地址确定子模块104,用于根据所述随机化内存地址、所述申请内存大小和所述申请内存权限确定要分配给所述可执行对象的内存地址;
内存地址判断子模块105,用于判断所述内存地址确定子模块所确定的内存地址是否属于系统内存地址,并当所确定的内存地址属于系统内存地址时,通知所述内存地址随机化子模块重新对所述申请内存地址进行随机化处理以得到随机化内存地址;
内存地址分配子模块106,用于当所述内存地址判断子模块105判断所确定的内存地址不属于系统内存地址时,将所确定的内存地址分配给所述可执行对象。
通过上述的技术方案,首先获取子模块102获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限,内存地址随机化子模块103在当所述申请内存地址为空且所述申请内存权限为可读写可执行权限时,对所述申请内存地址进行随机化处理以得到随机化内存地址,然后内存地址确定子模块104根据所述随机化内存地址、所述申请内存大小和所述申请内存权限确定要分配给所述可执行对象的内存地址,内存地址判断子模块105在当所确定的内存地址属于系统内存地址时,返回所述对所述申请内存地址进行随机化处理以得到随机化内存地址的步骤,而内存地址分配子模块106在当所确定的内存地址不属于系统内存地址时,将所确定的内存地址分配给所述可执行对象,这样,如果攻击者想要在分配给可执行对象的内存地址上执行恶意代码,由于采取了以上的随机化处理,给可执行对象分配的内存地址是随机的,攻击者很难获取可执行对象的准确内存地址,这样,就能在一定程度上防止所述引擎被非法恶意攻击。
图9是根据本公开又一种实施方式的引擎保护装置100中的内存地址分配模块10的示意框图。如图9所示,在获取子模块102获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限之后,所述内存地址分配模块10还包括:
申请内存大小判断子模块107,用于判断所述申请内存大小是否是2的幂次方;
申请内存大小增加子模块108,用于当所述申请内存大小不是2的幂次方时,将所述申请内存大小增加至大于所述申请内存大小的最小的2的幂次方。
通过上述的技术方案,在获取子模块102获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限之后,申请内存大小判断子模块107判断所述申请内存大小是否是2的幂次方,申请内存大小增加子模块108在当所述申请内存大小不是2的幂次方时,将所述申请内存大小增加至大于所述申请内存大小的最小的2的幂次方,然后再进行后续的内存分配,这样,有利于提高引擎的运行效率。
图10是根据本公开一种实施方式的引擎保护装置100中的保护区设置模块20的示意框图。如图10所示,所述保护区设置模块20包括:
保护区设置子模块201,用于将所述保护区设置在从所分配的内存地址的首地址开始的预设大小的内存空间内;
内存地址偏移子模块202,用于将所分配的内存地址向后偏移,其中偏移的大小为所述预设大小。
通过上述的技术方案,保护区设置子模块201先将所述保护区设置在从所分配的内存地址的首地址开始的预设大小的内存空间内,然后内存地址偏移子模块202将所分配的内存地址向后偏移,其中偏移的大小为所述预设大小,这样就为可执行对象的内存地址空间设置了一个能够起到保护作用的保护区,由于这个保护区的地址与可执行对象的内存地址空间是连续的,且所述保护区的权限是不可写,因此,当所述引擎受到非法恶意攻击例如缓冲区溢出等攻击时,就能够及时的反应报警,以使所述引擎终止程序的运行,从而起到保护所述引擎的功能。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合。为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。

Claims (10)

1.一种引擎保护方法,其特征在于,该方法包括:
按照第一预设规则给可执行对象分配内存地址;
按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写。
2.根据权利要求1所述的方法,其特征在于,所述按照第一预设规则给可执行对象分配内存地址包括:
根据默认内存地址分配规则给所述可执行对象分配内存地址。
3.根据权利要求1所述的方法,其特征在于,所述按照第一预设规则给可执行对象分配内存地址包括:
获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限;
当所述申请内存地址为空且所述申请内存权限为可读写可执行权限时,对所述申请内存地址进行随机化处理以得到随机化内存地址;
根据所述随机化内存地址、所述申请内存大小和所述申请内存权限确定要分配给所述可执行对象的内存地址;
当所确定的内存地址属于系统内存地址时,返回所述对所述申请内存地址进行随机化处理以得到随机化内存地址的步骤;
当所确定的内存地址不属于系统内存地址时,将所确定的内存地址分配给所述可执行对象。
4.根据权利要求3所述的方法,其特征在于,在所述获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限之后,所述按照第一预设规则给可执行对象分配内存地址还包括:
判断所述申请内存大小是否是2的幂次方;
当所述申请内存大小不是2的幂次方时,将所述申请内存大小增加至大于所述申请内存大小的最小的2的幂次方。
5.根据权利要求1至4中任一权利要求所述的方法,其特征在于,所述按照第二预设规则为所分配的内存地址设置保护区包括:
将所述保护区设置在从所分配的内存地址的首地址开始的预设大小的内存空间内;
将所分配的内存地址向后偏移,其中偏移的大小为所述预设大小。
6.一种引擎保护装置,其特征在于,该装置包括:
内存地址分配模块,用于按照第一预设规则给可执行对象分配内存地址;
保护区设置模块,用于按照第二预设规则为所分配的内存地址设置保护区,其中所述保护区的权限为不可写。
7.根据权利要求6所述的装置,其特征在于,所述内存地址分配模块包括:
内存地址默认分配子模块,用于根据默认内存地址分配规则给所述可执行对象分配内存地址。
8.根据权利要求6所述的装置,其特征在于,所述内存地址分配模块包括:
获取子模块,用于获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限;
内存地址随机化子模块,用于当所述申请内存地址为空且所述申请内存权限为可读写可执行权限时,对所述申请内存地址进行随机化处理以得到随机化内存地址;
内存地址确定子模块,用于根据所述随机化内存地址、所述申请内存大小和所述申请内存权限确定要分配给所述可执行对象的内存地址;
内存地址判断子模块,用于判断所述内存地址确定子模块所确定的内存地址是否属于系统内存地址,并当所确定的内存地址属于系统内存地址时,通知所述内存地址随机化子模块重新对所述申请内存地址进行随机化处理以得到随机化内存地址;
内存地址分配子模块,用于当所述内存地址判断子模块判断所确定的内存地址不属于系统内存地址时,将所确定的内存地址分配给所述可执行对象。
9.根据权利要求8所述的装置,其特征在于,在所述获取子模块获取为所述可执行对象申请内存的内存申请函数中的申请内存大小、申请内存地址和申请内存权限之后,所述内存地址分配模块还包括:
申请内存大小判断子模块,用于判断所述申请内存大小是否是2的幂次方;
申请内存大小增加子模块,用于当所述申请内存大小不是2的幂次方时,将所述申请内存大小增加至大于所述申请内存大小的最小的2的幂次方。
10.根据权利要求6至9中任一权利要求所述的装置,其特征在于,所述保护区设置模块包括:
保护区设置子模块,用于将所述保护区设置在从所分配的内存地址的首地址开始的预设大小的内存空间内;
内存地址偏移子模块,用于将所分配的内存地址向后偏移,其中偏移的大小为所述预设大小。
CN201611259940.8A 2016-12-30 2016-12-30 引擎保护方法和装置 Pending CN106815520A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611259940.8A CN106815520A (zh) 2016-12-30 2016-12-30 引擎保护方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611259940.8A CN106815520A (zh) 2016-12-30 2016-12-30 引擎保护方法和装置

Publications (1)

Publication Number Publication Date
CN106815520A true CN106815520A (zh) 2017-06-09

Family

ID=59110583

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611259940.8A Pending CN106815520A (zh) 2016-12-30 2016-12-30 引擎保护方法和装置

Country Status (1)

Country Link
CN (1) CN106815520A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107958166A (zh) * 2017-12-20 2018-04-24 联想(北京)有限公司 一种数据检测方法及检测设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1581108A (zh) * 2003-07-31 2005-02-16 深圳市中兴通讯股份有限公司南京分公司 一种具有内存保护功能的内存管理方法
CN1808402A (zh) * 2005-01-17 2006-07-26 华为技术有限公司 一种内存访问监控方法
CN1967508A (zh) * 2005-11-15 2007-05-23 华为技术有限公司 一种对内存进行保护的方法
CN101788958A (zh) * 2010-02-04 2010-07-28 杭州晟元芯片技术有限公司 一种存储器数据保护的方法
CN101976577A (zh) * 2010-11-03 2011-02-16 冠捷显示科技(武汉)有限公司 显示设备软件的布置方法及控制参数写入flash的方法
CN102880461A (zh) * 2012-08-29 2013-01-16 华为技术有限公司 一种编译链接方法及装置
US20140095812A1 (en) * 2012-09-28 2014-04-03 Appli Inc. Obfuscating function resources while reducing stack consumption
CN105740172A (zh) * 2016-01-26 2016-07-06 浪潮(北京)电子信息产业有限公司 一种块设备数据缓存掉电保护的方法及系统

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1581108A (zh) * 2003-07-31 2005-02-16 深圳市中兴通讯股份有限公司南京分公司 一种具有内存保护功能的内存管理方法
CN1808402A (zh) * 2005-01-17 2006-07-26 华为技术有限公司 一种内存访问监控方法
CN1967508A (zh) * 2005-11-15 2007-05-23 华为技术有限公司 一种对内存进行保护的方法
CN101788958A (zh) * 2010-02-04 2010-07-28 杭州晟元芯片技术有限公司 一种存储器数据保护的方法
CN101976577A (zh) * 2010-11-03 2011-02-16 冠捷显示科技(武汉)有限公司 显示设备软件的布置方法及控制参数写入flash的方法
CN102880461A (zh) * 2012-08-29 2013-01-16 华为技术有限公司 一种编译链接方法及装置
US20140095812A1 (en) * 2012-09-28 2014-04-03 Appli Inc. Obfuscating function resources while reducing stack consumption
CN105740172A (zh) * 2016-01-26 2016-07-06 浪潮(北京)电子信息产业有限公司 一种块设备数据缓存掉电保护的方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
朱若宇: "JIT引擎的安全性研究以及保护工具的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107958166A (zh) * 2017-12-20 2018-04-24 联想(北京)有限公司 一种数据检测方法及检测设备

Similar Documents

Publication Publication Date Title
Van Schaik et al. Malicious management unit: Why stopping cache attacks in software is harder than you think
Paccagnella et al. Lord of the ring (s): Side channel attacks on the {CPU}{On-Chip} ring interconnect are practical
Brasser et al. DR. SGX: Automated and adjustable side-channel protection for SGX using data location randomization
Guanciale et al. Cache storage channels: Alias-driven attacks and verified countermeasures
CN105447406B (zh) 一种用于访问存储空间的方法与装置
Strackx et al. Efficient isolation of trusted subsystems in embedded systems
AU2012200181B2 (en) System and method for supporting JIT in a secure system with randomly allocated memory ranges
KR101390077B1 (ko) 보안 메모리 도메인에 이미지를 직접 렌더링하고 대응하는 사용자 입력을 상관시키는 방법 및 시스템
US10503931B2 (en) Method and apparatus for dynamic executable verification
CN109828827A (zh) 一种检测方法、装置及相关设备
Liu et al. Security testing of a secure cache design
EP3271828A1 (en) Cache and data organization for memory protection
CN110008693A (zh) 安全应用程序加密保证方法及装置与系统和存储介质
CN111159097A (zh) 一种片上访存保护系统及方法
CN115374440A (zh) 安全防御方法和电子装置
Lang et al. Mole: Mitigation of side-channel attacks against SGX via dynamic data location escape
CN106815520A (zh) 引擎保护方法和装置
Irazoqui et al. Cache side channel attack: Exploitability and countermeasures
US11003597B2 (en) Memory domains protection method and apparatus with composite protection key numbers
WO2019070195A1 (en) COMPUTER-IMPLEMENTED METHOD FOR PREVENTING MARKING ATTACK IN A COMPUTER DEVICE
Kaur et al. A survey on cache timing channel attacks for multicore processors
Brotzman et al. Ghost thread: Effective user-space cache side channel protection
Mazaheri et al. Lurking eyes: A method to detect side-channel attacks on javascript and webassembly
CN103886251B (zh) 系统加固的方法及装置
KR102028657B1 (ko) 부채널 공격에 대한 방어대책을 갖는 모바일 장치

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20170609