CN101286191A - 一种缓冲区溢出攻击的防护方法、装置及系统 - Google Patents

一种缓冲区溢出攻击的防护方法、装置及系统 Download PDF

Info

Publication number
CN101286191A
CN101286191A CNA200810028213XA CN200810028213A CN101286191A CN 101286191 A CN101286191 A CN 101286191A CN A200810028213X A CNA200810028213X A CN A200810028213XA CN 200810028213 A CN200810028213 A CN 200810028213A CN 101286191 A CN101286191 A CN 101286191A
Authority
CN
China
Prior art keywords
randomization
function
pointer
memory allocation
dll
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
CNA200810028213XA
Other languages
English (en)
Other versions
CN101286191B (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.)
Huawei Digital Technologies Chengdu Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN200810028213XA priority Critical patent/CN101286191B/zh
Publication of CN101286191A publication Critical patent/CN101286191A/zh
Application granted granted Critical
Publication of CN101286191B publication Critical patent/CN101286191B/zh
Expired - Fee Related 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明实施例公开了一种缓冲区溢出攻击的防护方法、装置及系统,所述方法包括:在Windows内核模式下,将随机化管理驱动加载到内存中;通过所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址。从而扩大了防护缓冲区溢出带来的攻击的范围,且效果较佳。

Description

一种缓冲区溢出攻击的防护方法、装置及系统
技术领域
本发明涉及通信领域,尤其涉及一种缓冲区溢出攻击的防护方法、装置及系统。
背景技术
微软新一代操作系统Windows vista在安全方面最引以为豪的是它采用了地址空间布局随机化(ASLR,Address Space Layout Randomization)技术,对内存分配,如动态链接库(DLL,Dynamic-link Library)和可执行程序进行随机化,以确保操作系统的两个并发实例(比如,两个相同的可执行程序)每次都会载入到不同的内存地址上。
Windows Vista的ASLR通过每次系统启动时在不同位置加载系统DLL和可执行文件,使恶意软件不可能知道应用程序接口(API,Application ProgrammingInterface)的位置。在启动进程早期,内存管理器会从用户模式地址空间顶部16MB区域的256个64KB地址中随机选取一个作为DLL映像加载偏差,内存管理器会从映像加载偏差地址开始并继续将DLL选取到内存中。具有标记组的可执行文件会得到类似的处理,在存储其映像标头中的16MB基本加载地址内以随机的64KB对其加载。此外,如果使用给定的DLL或可执行文件的所有进程卸载后再次加载所述进程,内存管理器会为所述进程重新选择一个随机的加载位置。
Vista采用ASLR技术后,可对部分内存分配(比如,DLL和可执行程序)进行地址随机化,恶意程序不能通过所述内存分配加载到系统的应用程序的接口的位置,因此无法对其进行攻击。
但是,现有的ASLR技术仅对部分内存分配(比如,DLL和可执行程序)进行随机化,因此,现有技术防护缓冲区溢出攻击的范围窄,效果差。
发明内容
本发明实施例所要解决的技术问题在于,提供一种缓冲区溢出攻击的防护方法、装置及系统。可对系统多种内存分配进行随机化管理,扩大了防护缓冲区溢出带来的攻击的范围,且效果较佳。
为了解决上述技术问题,本发明实施例提供了一种缓冲区溢出攻击的防护方法,包括:
在Windows内核模式下,将随机化管理驱动加载到内存中;
通过所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址。
相应的,本发明实施例还提供了一种缓冲区溢出攻击的防护装置,包括:
加载单元,用于在Windows内核模式下,将随机化管理驱动加载到内存中;
随机化单元,用于通过所述加载单元加载的所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址。
相应的,本发明实施例还提供了一种缓冲区溢出攻击的防护系统,该系统包括缓冲区溢出攻击防护装置,所述装置用于在Windows内核模式下,将随机化管理驱动加载到内存中,并通过所述加载的所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址。
本发明实施例在Windows内核模式下,将随机化管理驱动加载到内存中;通过所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址,当基地址随机化后,内存中的静态数据也相应的随机化,从而,扩大了防护缓冲区溢出带来的攻击的范围,且效果较佳。
附图说明
图1是本发明的缓冲区溢出攻击的防护装置的一个实施例结构组成示意图;
图2是本发明的缓冲区溢出攻击的防护方法的一个实施例流程示意图;
图3是本发明随机化DLL的一个实施例流程示意图;
图4是本发明随机化DLL的另一个实施例流程示意图;
图5是本发明随机化栈的一个实施例流程示意图;
图6是本发明随机化堆的一个实施例流程示意图;
图7是本发明随机化进程环境块/线程环境块的一个实施例流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
本发明实施例提供了一种缓冲区溢出攻击的防护系统,该系统包括缓冲区溢出攻击装置,所述装置用于在Windows内核模式下,将随机化管理驱动加载到内存中,并通过所述加载的所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址。
图1是本发明的缓冲区溢出攻击的防护装置的一个实施例结构组成示意图;如图1所示,本实施例的缓冲区溢出攻击防护装置包括加载单元1、随机化单元2以及第二随机化单元3,其中:
所述加载单元1用于在Windows内核模式下,将随机化管理驱动加载到内存中;本发明是在Windows内核模式下实现对内存地址空间的随机化,具体实现中,所述随机化管理驱动可以用boot-driver表示,该boot-driver可以在系统启动内核ntokrnl.exe之后,启动lsass.exe和csrss.exe之前被加载到内存中。
所述随机化单元2用于通过所述加载单元1加载的所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址,具体实现中,所述API函数可包括:DLL内存映射函数(比如,NtMapViewOfSection函数)、栈内存分配函数(比如,NtAllocateVirturlMemory函数)、堆内存分配函数(比如,RtlCreateHeap函数)、进程创建函数(比如,MiCreatePebOrTeb函数)、线程创建函数(比如,MmCreatePeb函数)中至少一种。进而仍参考图1,在具体实现中,随机化单元2可包括DLL随机化单元21、栈随机化单元22、堆随机化单元23、进程随机化单元24以及线程随机化单元25,其中:
所述DLL随机化单元21用于通过所述加载单元1加载的随机化管理驱动boot-driver勾挂Windows内核中与内存分配相关的NtMapViewOfSection函数,修改由DLL的Session指针找到的装载基地址来随机化所述DLL的内存分配的基地址,或,修改NtMapViewOfSection函数的基地址参数BaseAddress的值来随机化所述DLL的内存分配基地址;通过DLL随机化单元21实现了DLL的随机化,当DLL的基地址随机化后,DLL文件里的静态数据也相应的随机化,因此将DLL中固定的静态地址作为跳转地址的溢出攻击程序将失效。比如,攻击者利用缓冲区溢出在程序中植入shellcode,以达到修改栈中的返回地址,改变程序的原有执行流程而转去执行shellcode达到攻击的目的,本发明实施例在对DLL进行随机化后,随机化了DLL的静态地址,那么即使shellcode能够植入,也不能利用DLL中固定的静态地址作为跳转地址去执行shellcode了。另外,由于Windows系统DLL要求64KB边界(16位),而应用程序可用空间有2GB(31位),因此本方案对DLL的随机化粒度至少有15位。
所述栈随机化单元22用于通过所述加载单元1加载的随机化管理驱动boot-driver勾挂Windows内核中与内存分配相关的NtAllocateVirturlMemory函数,将NtAllocateVirturlMemory函数的ZeroBits参数的值设置为0,为NtAllocateVirturlMemory函数的AllocationType参数添加或选择MEM_TOP_DOWN特性,修改指向MM_HIGHEST_VAD_ADDRESS的局部指针。
Windows系统中的大多数服务支持多线程机制,同时很多程序请求都是在子线程中完成,而且栈溢出是远程溢出攻击的主要目标,因而保护线程的栈空间十分必要。在多线程程序中,主线程可以创建一个或多个对等线程,从这个时间点开始,这些线程就开始并发执行。主线程和对等线程的区别仅在于主线程总是进程中第一个运行的线程。每个线程都拥有独立的线程上下文,线程ID,程序计数器,线程栈,一组寄存器和条件码。其中,本发明中将主线程中的栈称为主栈,将对等线程中的栈称为辅栈。本实施例的栈随机化单元22通过勾挂NtAllocateVirturlMemory函数,并修改其相应参数来实现对主栈基地址和辅栈基地址的随机化。
本实施例通过栈随机化单元22对栈的基地址进行随机化后,栈的静态数据也相应被随机化,攻击者利用栈溢出的攻击失效,另外,Windows系统中栈要求4KB边界(12位),应用程序可用空间只有2GB(31位),因此本方案对栈随机化粒度是19位(31-12=19bits)。
所述堆随机化单元23用于通过所述加载单元1加载的随机化管理驱动boot-driver勾挂Windows内核中与内存分配相关的RtlCreateHeap函数,修改所述RtlCreateHeap函数的HeapBase的值来随机化所述堆的内存分配基地址。
堆是Windows提供的一种内存机制,主要用来分配小的数据块。在进程刚启动时,系统便在刚创建的进程虚拟地址空间中创建了一个堆,该堆即为进程的默认堆,本发明中称为主堆,可供众多Windows函数使用。在进程中,如果需要可以在原有默认堆的基础上动态创建一个堆,程序员一般调用WIN32下API函数HeapCreate来创建需要的堆,该函数最终将会调用NTDLL.DLL中的RtlCreateHeap来进行实际的堆创建工作,本发明将这种方式创建的堆称为辅堆。主堆也是通过RtlCreateHeap函数分配空间。本发明通过勾挂RtlCreateHeap函数,并修改其参数HeapBase为一指定的随机值来实现堆基地址的随机化。
本实施例通过堆随机化单元23对堆的基地址进行随机化后,堆的静态数据也相应被随机化,这样利用堆溢出的攻击由于目标地址改变而失效。由于Windows堆要求4KB边界(12位),应用程序可用空间只有2GB(31位),因此堆随机化的粒度为19位(31-12=19bits)。
所述进程随机化单元24用于通过所述加载单元加载的随机化管理驱动boot-driver勾挂Windows内核中与内存分配相关的MiCreatePebOrTeb函数,并生成指向随机值的指针,确定当前系统ntoskrnl.exe的地址空间,搜索ntoskrnl.exe中未导出函数MiCreatePebOrTeb的地址空间;搜索MiCreatePebOrTeb函数的地址空间中所有指向MmHighestUserAddress指针的指针,修改所述指向MmHighestUserAddress指针的指针,使指针指向一个有效值的随机指针。
所述线程随机化单元25用于通过所述加载单元加载的随机化管理驱动boot-driver勾挂Windows内核中与内存分配相关的MmCreatePeb函数,并生成指向随机值的指针,确定当前系统ntoskrnl.exe的地址空间,搜索ntoskrnl.exe中未导出函数MmCreatePeb的地址空间,搜索MmCreatePeb函数的地址空间中所有指向MmHighestUserAddress指针的指针,修改所述指向MmHighestUserAddress指针的指针,使指针指向一个有效值的随机指针。
本实施例通过进程随机化单元24和线程随机化单元25对进程环境块(PEB,Process Environment Block)/线程环境块(TEB,Thead Environment Block)至间的随机化。PEB/TEB基地址随机化后,其中相应的数据地址也被随机化,利用PEB进行堆溢出攻击或利用TEB进行栈溢出攻击会由于目标地址改变而攻击失败。由于Windows中PEB/TEB要求4KB边界(12位),应用程序可用空间只有2GB(31位),因此PEB/TEB随机化的粒度为19位(31-12=19bits)。
进一步,本实施例的攻击防护装置还包括第二随机化单元3,该单元用于为最底层的DLL进行随机化处理,具体的所述第二随机化单元3用于在Windows系统重启前,创建Kernel32.dll、User32.dll以及Ntdll.dll的备份随机化文件,并在Windows重启过程运行boot-driver时,用所述备份的随机化文件覆盖系统system32下的文件。
本实施例的攻击防护装置,在Windows内核模式下,将随机化管理驱动加载到内存中;通过所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数(DLL内存映射函数、栈内存分配函数、堆内存分配函数、进程创建函数、线程创建函数中至少一种),并修改所述API函数的参数来随机化所述内存分配的基地址,实现对所述内存分配DLL、栈、堆等的随机化;当基地址随机化后,内存中的静态数据也相应的随机化,从而扩大了防护缓冲区溢出带来的攻击的范围,且效果较佳。
相应的,图2是本发明的缓冲区溢出攻击的防护方法的一个实施例流程示意图;如图2所示,本实施例的方法包括:
步骤S200,在Windows内核模式下,将随机化管理驱动加载到内存中。具体实现中,可在Windows系统启动内核ntokrnl.exe之后,启动lsass.exe和csrss.exe之前,将随机化管理驱动boot-driver加载到内存中。
步骤S201,通过所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址。具体实现中,所述API函数包括:所述API函数可包括:DLL内存映射函数(比如,NtMapViewOfSection函数)、栈内存分配函数(比如,NtAllocateVirturlMemory函数)、堆内存分配函数(比如,RtlCreateHeap函数)、进程创建函数(比如,MiCreatePebOrTeb函数)、线程创建函数(比如,MmCreatePeb函数)中至少一种。
步骤S202,在Windows系统重启前,创建Kernel32.dll、User32.dll以及Ntdll.dll的备份随机化文件;以及在Windows重启过程运行boot-driver时,用所述备份的随机化文件覆盖系统system32下的文件。
具体实现中,步骤S201和步骤S202没有执行时间的先后顺序,可并行执行。在本发明其他实施例中,也可不包括所述步骤S202。
本实施例的攻击防护方法,在Windows内核模式下,将随机化管理驱动加载到内存中;通过所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数(DLL内存映射函数、栈内存分配函数、堆内存分配函数、进程创建函数、线程创建函数中至少一种),并修改所述API函数的参数来随机化所述内存分配的基地址,实现对所述内存分配DLL、栈、堆等的随机化;当基地址随机化后,内存中的静态数据也相应的随机化,从而扩大了防护缓冲区溢出带来的攻击的范围,且效果较佳。
下面分别通过具体的实施例说明本发明对DLL、栈、堆、进程环境块以及线程环境块的随机化流程。
图3是本发明随机化DLL的一个实施例流程示意图,如图3所示,本实施例的流程包括:
步骤S300,在Windows系统启动内核ntokrnl.exe之后,启动lsass.exe和csrss.exe之前,将随机化管理驱动boot-driver加载到内存中。
步骤S301,勾挂NtMapViewOfSection函数;具体实现中,可通过HookNtoskm.exe导出函数NtMapViewOfSection。
步骤S302,修改由DLL的Session指针找到的装载基地址来随机化所述DLL的内存分配的基地址;具体实现中,步骤S302也可以为修改NtMapViewOfSection函数的基地址参数BaseAddress的值来随机化所述DLL的内存分配基地址。
本实施例实现了DLL的随机化,当DLL的基地址随机化后,DLL文件里的静态数据也相应的随机化,因此将DLL中固定的静态地址作为跳转地址的溢出攻击程序将失效。比如,攻击者利用缓冲区溢出在程序中植入shellcode,以达到修改栈中的返回地址,改变程序的原有执行流程而转去执行shellcode达到攻击的目的,本发明实施例在对DLL进行随机化后,随机化了DLL的静态地址,那么即使shellcode能够植入,也不能利用DLL中固定的静态地址作为跳转地址去执行shellcode了。另外,由于Windows系统DLL要求64KB边界(16位),而应用程序可用空间有2GB(31位),因此本方案对DLL的随机化粒度至少有15位。
图4是本发明随机化DLL的另一实施例流程示意图,如图4所示,本实施例的方法包括:
步骤S400,在Windows系统启动前,创建Kernel32.dll、User32.dll以及Ntdll.dll的备份随机化文件;
步骤S401,在启动ntokrnl.exe之后,启动lsass.exe和csrss.exe之前,将随机化管理驱动boot-driver加载到内存中时,用所述备份的随机化文件覆盖system32下的文件;
步骤S402,启动win32子系统。
本实施例针对Kernel32.dll、User32.dll以及Ntdll.dll三种DLL进行了随机化,可防止针对三者的溢出攻击。
图5是本发明随机化栈的一个实施例流程示意图;如图5所示,本实施例的方法包括:
步骤S500,在Windows系统启动内核ntokrnl.exe之后,启动lsass.exe和csrss.exe之前,将随机化管理驱动boot-driver加载到内存中。
步骤S501,勾挂NtAllocateVirturlMemory函数;具体实现中,可通过HookNtoskrnl.exe导出函数NtAllocateVirturlMemory。
步骤S502,将NtAllocateVirturlMemory函数的ZeroBits参数的值设置为0;通过步骤S502,可取消地址高位0限制。
步骤S503,为NtAllocateVirturlMemory函数的AllocationType参数添加或选择MEM_TOP_DOWN特性;通过步骤S503,则NtAllocateVirtualMemory会从MM_HIGHEST_VAD_ADDRR ESS这个指针指向的地址开始搜索创建栈;最高虚拟地址为指针的MM_HIGHEST_VAD_ADDRESS指向一随机值,在默认情况下其值为:
MM_HIGHEST_USER_ADDRESS-(64*1024)
其中,MM_HIGHEST_USER_ADDRESS为0x7ffeffff=0x80000000-64k
步骤S504,修改指向MM_HIGHEST_VAD_ADDRESS的局部指针。通过步骤S504,实现随机化栈的基地址。
具体实现中,栈的随机化可结合DLL的随机化,即对栈的随机化可在对DLL随机化的基础上进行。
本实施例对栈的基地址进行随机化后,栈的静态数据也相应被随机化,攻击者利用栈溢出的攻击失效,另外,Windows系统中栈要求4KB边界(12位),应用程序可用空间只有2GB(31位),因此本方案对栈随机化粒度是19位(31-12=19bits)。
图6是本发明随机化堆的一个实施例流程示意图;如图6所示,本实施例的方法包括:
步骤S600,在Windows系统启动内核ntokrnl.exe之后,启动lsass.exe和csrss.exe之前,将随机化管理驱动boot-driver加载到内存中。
步骤S601,勾挂RtlCreateHeap函数;具体实现中,可通过Hook Ntoskrnl.exe导出函数NtAllocateVirturlMemory。
步骤S602,修改所述RtlCreateHeap函数的HeapBase的值来随机化所述堆的内存分配基地址。
具体实现中,堆的随机化可结合DLL的随机化,即对堆的随机化可在对DLL随机化的基础上进行。
本实施例对堆的基地址进行随机化后,堆的静态数据也相应被随机化,这样利用堆溢出的攻击由于目标地址改变而失效。由于Windows堆要求4KB边界(12位),应用程序可用空间只有2GB(31位),因此堆随机化的粒度为19位(31-12=19bits)。
图7是本发明随机化进程环境块/线程环境块的一个实施例流程示意图;如图7所示,本实施例的方法包括:
步骤S700,在Windows系统启动内核ntokrnl.exe之后,启动lsass.exe和csrss.exe之前,将随机化管理驱动boot-driver加载到内存中。
步骤S701,勾挂MiCreatePebOrTeb函数/MmCreatePeb函数。
步骤S702,生成指向随机值的指针;
步骤S703,确定当前系统ntoskrnl.exe的地址空间;
步骤S704,搜索ntoskrnl.exe中未导出函数MiCreatePebOrTeb/MmCreatePeb的地址空间;
步骤S705,搜索MiCreatePebOrTeb函数/MmCreatePeb函数的地址空间中所有指向MmHighestUserAddress指针的指针;
步骤S706,修改所述指向MmHighestUserAddress指针的指针,使指针指向一个有效值的随机指针。
本实施例通过对进程环境块PEB/线程环境块TEB空间的随机化。PEB/TEB基地址随机化后,其中相应的数据地址也被随机化,利用PEB进行堆溢出攻击或利用TEB进行栈溢出攻击会由于目标地址改变而攻击失败。由于Windows中PEB/TEB要求4KB边界(12位),应用程序可用空间只有2GB(31位),因此PEB/TEB随机化的粒度为19位(31-12=19bits)。
本发明实施例,在Windows内核模式下,将随机化管理驱动加载到内存中;通过所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数(DLL内存映射函数、栈内存分配函数、堆内存分配函数、进程创建函数、线程创建函数中至少一种),并修改所述API函数的参数来随机化所述内存分配的基地址,实现对所述内存分配DLL、栈、堆等的随机化;当基地址随机化后,内存中的静态数据也相应的随机化,从而扩大了防护缓冲区溢出带来的攻击的范围,且效果较佳。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

Claims (18)

1、一种缓冲区溢出攻击的防护方法,其特征在于,包括:
在Windows内核模式下,将随机化管理驱动加载到内存中;
通过所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址。
2、如权利要求1所述的缓冲区溢出攻击的防护方法,其特征在于,所述在Windows内核模式下,将随机化管理驱动加载到内存中包括:
在Windows系统启动内核ntokrnl.exe之后,启动lsass.exe和csrss.exe之前,将随机化管理驱动boot-driver加载到内存中。
3、如权利要求1所述的缓冲区溢出攻击的防护方法,其特征在于,所述API函数包括:
DLL内存映射函数、栈内存分配函数、堆内存分配函数、进程创建函数、线程创建函数中至少一种。
4、如权利要求3所述的缓冲区溢出攻击的防护方法,其特征在于,
所述DLL内存映射函数为NtMapViewOfSection;
所述修改所述API函数的参数来随机化所述内存分配的基地址至少包括:
修改由DLL的Session指针找到的装载基地址来随机化所述DLL的内存分配的基地址,或,
修改NtMapViewOfSection函数的基地址参数BaseAddress的值来随机化所述DLL的内存分配基地址。
5、如权利要求3所述的缓冲区溢出攻击的防护方法,其特征在于,
所述栈内存分配函数为NtAllocateVirturlMemory;
所述修改所述API函数的参数来随机化所述内存分配的基地址至少包括:
将NtAllocateVirturlMemory函数的ZeroBits参数的值设置为0;
为NtAllocateVirturlMemory函数的AllocationType参数添加或选择MEM_TOP_DOWN特性;
修改指向MM_HIGHEST_VAD_ADDRESS的局部指针。
6、如权利要求3所述的缓冲区溢出攻击的防护方法,其特征在于,
所述堆内存分配函数为RtlCreateHeap;
所述修改所述API函数的参数来随机化所述内存分配的基地址至少包括:
修改所述RtlCreateHeap函数的HeapBase的值来随机化所述堆的内存分配基地址。
7、如权利要求3所述的缓冲区溢出攻击的防护方法,其特征在于,
所述进程创建函数为MiCreatePebOrTeb;
所述修改所述API函数的参数来随机化所述内存分配的基地址至少包括:
生成指向随机值的指针;
确定当前系统ntoskrnl.exe的地址空间;
搜索ntoskrnl.exe中未导出函数MiCreatePebOrTeb的地址空间;
搜索MiCreatePebOrTeb函数的地址空间中所有指向MmHighestUserAddress指针的指针;
修改所述指向MmHighestUserAddress指针的指针,使指针指向一个有效值的随机指针。
8、如权利要求3所述的缓冲区溢出攻击的防护方法,其特征在于,
所述线程创建函数为MmCreatePeb;
所述修改所述API函数的参数来随机化所述内存分配的基地址至少包括:
生成指向随机值的指针;
确定当前系统ntoskrnl.exe的地址空间;
搜索ntoskrnl.exe中未导出函数MmCreatePeb的地址空间;
搜索MmCreatePeb函数的地址空间中所有指向MmHighestUserAddress指针的指针;
修改所述指向MmHighestUserAddress指针的指针,使指针指向一个有效值的随机指针。
9、如权利要求2所述的缓冲区溢出攻击的防护方法,其特征在于,还包括:
在Windows系统重启前,创建Kernel32.dll、User32.dll以及Ntdll.dll的备份随机化文件;
在Windows重启过程运行boot-driver时,用所述备份的随机化文件覆盖系统system32下的文件。
10、一种缓冲区溢出攻击的防护装置,其特征在于,包括:
加载单元,用于在Windows内核模式下,将随机化管理驱动加载到内存中;
随机化单元,用于通过所述加载单元加载的所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址。
11、如权利要求10所述的缓冲区溢出攻击的防护装置,其特征在于,所述随机化单元至少包括:
DLL随机化单元,用于通过所述加载单元加载的随机化管理驱动boot-driver勾挂Windows内核中与内存分配相关的NtMapViewOfSection函数,修改由DLL的Session指针找到的装载基地址来随机化所述DLL的内存分配的基地址,或,修改NtMapViewOfSection函数的基地址参数BaseAddress的值来随机化所述DLL的内存分配基地址。
12、如权利要求10所述的缓冲区溢出攻击的防护装置,其特征在于,所述随机化单元至少包括:
栈随机化单元,用于通过所述加载单元加载的随机化管理驱动boot-driver勾挂Windows内核中与内存分配相关的NtAllocateVirturlMemory函数,将NtAllocateVirturlMemory函数的ZeroBits参数的值设置为0,为NtAllocateVirturlMemory函数的AllocationType参数添加或选择MEM_TOP_DOWN特性,修改指向MM_HIGHEST_VAD_ADDRESS的局部指针。
13、如权利要求10所述的缓冲区溢出攻击的防护装置,其特征在于,所述随机化单元至少包括:
堆随机化单元,用于通过所述加载单元加载的随机化管理驱动boot-driver勾挂Windows内核中与内存分配相关的RtlCreateHeap函数,修改所述RtlCreateHeap函数的HeapBase的值来随机化所述堆的内存分配基地址。
14、如权利要求10所述的缓冲区溢出攻击的防护装置,其特征在于,所述随机化单元至少包括:
进程随机化单元,用于通过所述加载单元加载的随机化管理驱动boot-driver勾挂Windows内核中与内存分配相关的MiCreatePebOrTeb函数,并生成指向随机值的指针,确定当前系统ntoskrnl.exe的地址空间,搜索ntoskrnl.exe中未导出函数MiCreatePebOrTeb的地址空间;搜索MiCreatePebOrTeb函数的地址空间中所有指向MmHighestUserAddress指针的指针,修改所述指向MmHighestUserAddress指针的指针,使指针指向一个有效值的随机指针。
15、如权利要求10所述的缓冲区溢出攻击的防护装置,其特征在于,所述随机化单元至少包括:
线程随机化单元,用于通过所述加载单元加载的随机化管理驱动boot-driver勾挂Windows内核中与内存分配相关的MmCreatePeb函数,并生成指向随机值的指针,确定当前系统ntoskrnl.exe的地址空间,搜索ntoskrnl.exe中未导出函数MmCreatePeb的地址空间,搜索MmCreatePeb函数的地址空间中所有指向MmHighestUserAddress指针的指针,修改所述指向MmHighestUserAddress指针的指针,使指针指向一个有效值的随机指针。
16、如权利要求10所述的缓冲区溢出攻击的防护装置,其特征在于,还包括:
第二随机化单元,用于在Windows系统重启前,创建Kernel32.dll、User32.dll以及Ntdll.dll的备份随机化文件,并在Windows重启过程运行boot-driver时,用所述备份的随机化文件覆盖系统system32下的文件。
17、一种缓冲区溢出攻击的防护系统,其特征在于,包括缓冲区溢出攻击防护装置,所述装置用于在Windows内核模式下,将随机化管理驱动加载到内存中,并通过所述加载的所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址。
18、如权利要求17所述的缓冲区溢出攻击的防护系统,其特征在于,所述防护装置包括:
加载单元,用于在Windows内核模式下,将随机化管理驱动加载到内存中;
随机化单元,用于通过所述加载单元加载的所述随机化管理驱动勾挂Windows内核中与内存分配相关的应用程序接口API函数,并修改所述API函数的参数来随机化所述内存分配的基地址。
CN200810028213XA 2008-05-21 2008-05-21 一种缓冲区溢出攻击的防护方法、装置及系统 Expired - Fee Related CN101286191B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200810028213XA CN101286191B (zh) 2008-05-21 2008-05-21 一种缓冲区溢出攻击的防护方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200810028213XA CN101286191B (zh) 2008-05-21 2008-05-21 一种缓冲区溢出攻击的防护方法、装置及系统

Publications (2)

Publication Number Publication Date
CN101286191A true CN101286191A (zh) 2008-10-15
CN101286191B CN101286191B (zh) 2011-01-12

Family

ID=40058392

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200810028213XA Expired - Fee Related CN101286191B (zh) 2008-05-21 2008-05-21 一种缓冲区溢出攻击的防护方法、装置及系统

Country Status (1)

Country Link
CN (1) CN101286191B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105279429A (zh) * 2015-11-24 2016-01-27 无锡江南计算技术研究所 一种got表写保护的保护方法
CN105653906A (zh) * 2015-12-28 2016-06-08 中国人民解放军信息工程大学 基于地址随机的反内核挂钩方法
CN105740697A (zh) * 2016-01-26 2016-07-06 国家信息技术安全研究中心 一种xp中地址空间布局随机化方法及装置
CN106407754A (zh) * 2015-07-30 2017-02-15 中兴通讯股份有限公司 一种生成随机布局程序的方法及装置
CN106856470A (zh) * 2015-12-09 2017-06-16 中国电信股份有限公司 用于防范网络攻击的方法以及装置
CN110472411A (zh) * 2019-08-20 2019-11-19 杭州和利时自动化有限公司 一种内存溢出处理方法、装置、设备及可读存储介质
GB2579070A (en) * 2018-11-19 2020-06-10 Secure Micro Ltd Computer implemented method
US11836246B2 (en) 2018-11-19 2023-12-05 Secure Micro Ltd Computer implemented method

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106407754A (zh) * 2015-07-30 2017-02-15 中兴通讯股份有限公司 一种生成随机布局程序的方法及装置
CN105279429A (zh) * 2015-11-24 2016-01-27 无锡江南计算技术研究所 一种got表写保护的保护方法
CN105279429B (zh) * 2015-11-24 2018-01-19 无锡江南计算技术研究所 一种got表写保护的保护方法
CN106856470A (zh) * 2015-12-09 2017-06-16 中国电信股份有限公司 用于防范网络攻击的方法以及装置
CN105653906A (zh) * 2015-12-28 2016-06-08 中国人民解放军信息工程大学 基于地址随机的反内核挂钩方法
CN105653906B (zh) * 2015-12-28 2018-03-27 中国人民解放军信息工程大学 基于地址随机的反内核挂钩方法
CN105740697A (zh) * 2016-01-26 2016-07-06 国家信息技术安全研究中心 一种xp中地址空间布局随机化方法及装置
CN105740697B (zh) * 2016-01-26 2018-08-31 国家信息技术安全研究中心 一种xp中地址空间布局随机化方法及装置
GB2579070A (en) * 2018-11-19 2020-06-10 Secure Micro Ltd Computer implemented method
GB2579070B (en) * 2018-11-19 2023-04-05 Secure Micro Ltd Computer implemented method
US11836246B2 (en) 2018-11-19 2023-12-05 Secure Micro Ltd Computer implemented method
CN110472411A (zh) * 2019-08-20 2019-11-19 杭州和利时自动化有限公司 一种内存溢出处理方法、装置、设备及可读存储介质

Also Published As

Publication number Publication date
CN101286191B (zh) 2011-01-12

Similar Documents

Publication Publication Date Title
CN101286191B (zh) 一种缓冲区溢出攻击的防护方法、装置及系统
JP5655677B2 (ja) ハイパーバイザ置き換え方法および情報処理装置
US10902112B2 (en) System including a hypervisor
EP2891060B1 (en) Layout and execution of software applications using bpram
US9703957B2 (en) Atomic detection and repair of kernel memory
EP1467282B1 (en) Operating systems
JP2008510238A (ja) オペレーティングシステム
EP2891059B1 (en) Layout and execution of operating systems using bpram
EP1830257A2 (en) Input/output control apparatus, input/output control system, and input/output control method
JP6615726B2 (ja) 情報処理装置、情報処理方法及びプログラム
KR20070005917A (ko) 운영체제
US9158562B2 (en) Method and apparatus for supporting virtualization of loadable module
JP2010113488A (ja) オペレーティングシステムおよび情報処理装置
IL256164A (en) Tracking data access in guaranteed mode
CN1584840A (zh) 存储器管理系统以及在多任务系统中的任务控制器
JP2011060225A (ja) オペレーティングシステム起動方法
CN101615129B (zh) 应用于分布式系统中的升级方法及版本管理客户端
KR20070003765A (ko) 운영체제
JP2009009232A (ja) コンピュータとカーネル保護方法並びにコンピュータソフトウエア
Nakajima et al. Temporal and spatial isolation in a virtualization layer for multi-core processor based information appliances
US8650579B1 (en) Containment for computer-software update installation processes
KR20060023956A (ko) 운영체제
US11256631B1 (en) Enhanced security via dynamic regions for memory protection units (MPUs)
JP2003216449A (ja) パッチ処理システム
JP2006048186A (ja) 動的コンパイラの生成コードを保護する言語処理系

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: CHENGDU CITY HUAWEI SAIMENTEKE SCIENCE CO., LTD.

Free format text: FORMER OWNER: HUAWEI TECHNOLOGY CO., LTD.

Effective date: 20090508

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20090508

Address after: Qingshui River District, Chengdu high tech Zone, Sichuan Province, China: 611731

Applicant after: Chengdu Huawei Symantec Technologies Co., Ltd.

Address before: Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Province, China: 518129

Applicant before: Huawei Technologies Co., Ltd.

C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee

Owner name: HUAWEI DIGITAL TECHNOLOGY (CHENGDU) CO., LTD.

Free format text: FORMER NAME: CHENGDU HUAWEI SYMANTEC TECHNOLOGIES CO., LTD.

CP01 Change in the name or title of a patent holder

Address after: 611731 Chengdu high tech Zone, Sichuan, West Park, Qingshui River

Patentee after: Huawei Symantec Technologies Co., Ltd.

Address before: 611731 Chengdu high tech Zone, Sichuan, West Park, Qingshui River

Patentee before: Chengdu Huawei Symantec Technologies Co., Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110112

Termination date: 20180521