基于二进制改写和动态随机化的软件安全增强方法

文档序号:9579544阅读:380来源:国知局
基于二进制改写和动态随机化的软件安全增强方法
【技术领域】
[0001] 本发明属于计算机技术领域,尤其是系统与软件安全领域。本发明提供了一种结 合二进制改写和动态随机化的软件安全增强方法,用于提高操作系统和应用软件的安全 性。
【背景技术】
[0002] 计算机技术在生产和生活中起到了举足轻重的作用,确保计算机系统和软件的安 全性显得越来越重要。在计算机系统与软件安全的军备竞赛中,先后出现的攻击方式有: 缓冲区溢出攻击(BufferOverflowAttack)、代码注入攻击(CodeInjectionAttack)、代 码复用攻击(CodeReuseAttack),信息泄露攻击(InformationLeakageAttack)等;作 为对应,相关的防御机制有:不可执行(No-eXecute,NX)、地址空间随机化(AddressSpace LayoutRandomization,ASLR)等。
[0003] 缓冲区溢出攻击:一种被广泛利用并危害严重的攻击方式,已经成为计算机系统 安全亟待解决的重要问题。其中,缓冲区溢出是指写入缓冲区的数据量超过缓冲区的实际 大小,溢出的数据覆盖了相邻存储单元中的数据。缓冲区溢出攻击主要包括:堆溢出、格式 化字符串溢出、整型溢出和栈溢出等,其中栈溢出最为常见。缓冲区溢出攻击常常作为基础 攻击方式用来配合其它类型的攻击,对系统安全构成极大威胁。
[0004] 代码注入攻击:攻击者通过将恶意代码注入进程地址空间并劫取控制流执行恶意 代码来进行攻击。被注入的代码称为payload,放在进程地址空间的堆或栈上。代码注入攻 击一般包括SQL注入,Shell注入等。
[0005] 代码复用攻击:攻击者通过直接复用程序中现有的代码而不是注入代码来 实现攻击。具有代表性的代码复用攻击有R〇P(Return-OrientedProgramming)、 J0P(Jump-OrientedProgramming),Ret-into-Libc;这些攻击直接复用二进制程序或者共 享库中的代码片段,因为没有向进程地址空间中注入代码,所以代码复用攻击可以绕过现 有的不可执行防御机制。
[0006] 信息泄露攻击:攻击者利用进程地址空间中的指针等信息来逆向分析进程地址空 间布局。此攻击利用现有地址空间随机化机制只能在程序装载时做一次随机化的特点,主 要用来绕过地址空间随机化,服务于其它类型的攻击。常见的信息泄露类型有堆或栈中的 指针,隐通道(Side-channel)等。
[0007] 不可执行(No-eXecute,NX):操作系统将特定内存区域设置为不可执行(NX),这 样CPU会拒绝执行被标记为NX区域的内存代码。因而,通过将栈、堆、数据段等段设置为不 可执行即可有效防御代码注入攻击。目前不可执行机制已经被Linux、Windows、Android等 主流操作系统采用。
[0008] 地址空间随机化:通过使进程地址空间布局不可预测,从而保护系统和软件不受 攻击。地址空间随机化的主要原理是通过随机排布进程地址空间中的各个内存对象,隐藏 攻击行为赖以成功的必要信息,增加攻击成功实施的难度,从而达到防御攻击的目的。地址 空间随机化的效果在于1)降低攻击者成功的概率2)使针对一台计算机的攻击方法不能简 单地移植到另一台计算机上。尽管地址空间随机化可以有效的降低缓冲区溢出攻击和代码 复用攻击的成功率,但是主流商用操作系统(包括Windows,Linux,Android,IOS和PaX) 中的地址空间随机化机制只能在程序装载阶段实施,装载阶段的随机化虽然能使程序启动 时形成不同的进程地址空间布局,但一旦地址空间布局形成,除非重启进程,否则无法在运 行时刻再次改变其地址空间布局。同时,现有的进程地址空间随机化机制只能对程序的代 码段、数据段、栈、堆、共享库等段的基地址进行随机化。综上,现有的地址空间随机化机制 存在随机化粒度粗,随机化频率低,产生的随机熵不足以在决定性的小概率下隐藏攻击行 为赖以成功的必要信息等缺陷,尤其在针对暴力破解和信息泄露攻击的防御力度上存在不 足。

【发明内容】

[0009] 在现有工作的基础上,本发明的目的在于:解决现有地址空间随机化机制中随机 化粒度粗、只能在程序装载阶段随机化、无法防御信息泄露攻击等问题,从而有效提高计算 机系统和软件的安全性和可靠性。
[0010] 本发明的技术方案为:基于二进制改写和动态随机化的软件安全增强方法,其特 征是静态二进制改写,进程逻辑页到逻辑页、逻辑页到物理页双层(Double-Level)映射, 动态随机化机制周期性以页为粒度随机化进程地址空间,逻辑地址映射重定向机制向进程 提供逻辑地址重定向服务;从而在确保程序正确运行的前提下杜绝攻击行为,确保计算机 系统与软件的安全性与可靠性。
[0011] 本发明具体包括以下模块:
[0012] 1)静态二进制改写模块,本模块负责将可执行文件重构为满足以页为粒度做动态 随机化要求的格式。二进制改写操作主要针对可执行文件代码段中的跳转类指令和页末指 令;根据需要,跳转类指令分为页间跳转指令和页内跳转指令,改写操作将页间跳转指令替 换为特定的系统调用指令序列,并在页末指令前插入系统调用指令序列;其中,页内跳转指 令定义为:跳转指令地址和指令目的地址在同一个逻辑页;页间跳转指令定义为:跳转指 令地址和指令目的地址不在同一个逻辑页;页末指令定义为:逻辑页的最后一条指令;逻 辑页定义为:与特定体系结构上物理页大小相同的、连续的逻辑块;
[0013] 2)可执行文件加载模块,本模块负责创建进程地址空间、加载可执行文件、建立 进程地址空间与可执行文件段的映射、激活动态随机化机制。操作系统运行可执行文件 时首先将可执行文件加载至内存,然后解析可执行文件格式,并根据可执行文件头提供的 信息,创建进程地址空间(如创建用户栈)并建立进程地址空间与可执行文件的代码段、 数据段等段的映射关系,然后激活动态随机化机制,最后将控制流重定向到可执行文件的 Entry-Point;
[0014] 3)动态随机化机制自举模块,本模块负责进程相关的动态随机化模块的初始 化。创建进程地址空间并加载可执行文件至进程地址空间之后,在进程开始执行之前, 操作系统激活动态随机化机制,自举模块根据模块2)的解析结果初始化动态随机化模 块,具体包括:分配相关的数据结构,建立进程逻辑页到逻辑页、逻辑页到物理页双层 (Double-Level)映射表,创建并激活随机化线程等;
[0015] 4)动态随机化模块,本模块负责周期性以页为粒度随机化进程的地址空间。在 由模块2)所创建的进程的整个生命周期中,动态随机化模块会异步的、透明的、周期性 的以页为粒度随机化进程的地址空间、从而保证此进程不被攻击者攻击,确保进程执行 的安全性;动态随机化主要通过本发明中的进程逻辑页到逻辑页、逻辑页到物理页双层 (Double-Level)映射表来实现;其中,随机化周期可以根据需要设定,例如lms、100ms、Is 等;
[0016] 5)逻辑地址映射重定向模块,本模块负责向进程提供"页间跳转"相关的逻辑地址 重定向服务,确保程序原有的静态逻辑的正确性。模块4)随机性打乱了由模块2)所创建 的进程地址空间,为了重构进程地址空间中合法的、原有的、静态的逻辑地址关联,逻辑地 址映射重定向模块以系统调用的形式向进程提供逻辑地址重定向服务,此服务是确保在动 态随机化机制下程序正确运行的基础;重定位模块接受进程所提供的静态的、随机化前目 的地址和地址类型(如,直接寻址、间接寻址、条件跳转)作为参数,通过查询逻辑页到逻辑 页映射表,计算随机化之后的地址,并将控制流重定向到此目的地址所对应的随机化之后 的地址或者判定为攻击行为;
[0017] 6)资源回收模块,本模块负责回收进程随机化相关的资源。当由模块2)所创建的 进程结束的时候,操作系统需要回收进程随机化相关的内存资源,并根据需要给出进程生 命周期的统计信息。
[0018] 进一步,其中上述模块1)的具体步骤如下:
[0019] 模块1)_1:给定可执行文件;
[0020] 模块1)-2 :分析可执行文件,抽取指令、基本快、函数等信息,构建控制流图;
[0021] 模块1)_3 :识别跳转类指令和页末指令,并将跳转类指令划分为页内跳转指令和 页间跳转指令;
[0022] 模块1)_4 :对于页内跳转指令不做处理;对于页间跳转指令,将之替换为系统调 用指令序列;对于页末指令,在其之前插入系统调用指令序列;
[0023] 模块1) _5 :重新生成可执行文件,新生成的可执行文件满足动态随机化的要求;
[0024] 进一步,其中上述模块2)的具体步骤如下:
[0025] 模块2)-1 :用户运行可执行文件;
[0026] 模块2) -2 :操作系统从磁盘读取此可执行文件,并解析可执行文件格式;
[0027] 模块2)-3:操作系统创建进程地址空间;
[0028] 模块2)-4:操作系统根据可执行文件头提供的信息将代码段、数据段等段映射到 进程地址空间中特定区域;
[0029] 模块2)_5:操作系统根据可执行文件头中的标志位判断此可执行文件是否为重 构之后的文件;
[0030] 模块2)-6 :如果此可执行文件被重构过,则操作系统激活动态随机化机制,并将 进程身份信息传递给动
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1