CN107239410A - 基于动态插桩的大块内存分配系统及方法 - Google Patents

基于动态插桩的大块内存分配系统及方法 Download PDF

Info

Publication number
CN107239410A
CN107239410A CN201710398778.6A CN201710398778A CN107239410A CN 107239410 A CN107239410 A CN 107239410A CN 201710398778 A CN201710398778 A CN 201710398778A CN 107239410 A CN107239410 A CN 107239410A
Authority
CN
China
Prior art keywords
memory
brk
randomization
module
systems
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
CN201710398778.6A
Other languages
English (en)
Other versions
CN107239410B (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.)
Shanghai Jiaotong University
Original Assignee
Shanghai Jiaotong 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 Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN201710398778.6A priority Critical patent/CN107239410B/zh
Publication of CN107239410A publication Critical patent/CN107239410A/zh
Application granted granted Critical
Publication of CN107239410B publication Critical patent/CN107239410B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • 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
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7202Allocation control and policies

Abstract

一种基于动态插桩的大块内存分配系统及方法,首先获得程序内存布局信息,然后通过动态插桩工具拦截mmap和brk系统调用,即首先对二进制程序的基本块进行指令翻译;然后对翻译过后的基本块检查是否有系统调用指令;最后对检测到的系统调用指令进行插桩,并对mmap系统调用进行随机化分配、对brk系统调用使用污点跟踪处理,从而实现大块内存分配。本发明通过自动化定位相似的代码,从而将已经分析完成的代码信息同步迁移到不同的平台上,着重于对实际系统中存在的通用性系统缺陷进行防护,更为注重对实时系统的防御以及性能开销。

Description

基于动态插桩的大块内存分配系统及方法
技术领域
本发明涉及的是一种计算机领域的技术,具体是一种基于动态插桩的针对大于4KB内存块的分配系统及方法。
背景技术
随着Linux操作系统在个人计算机、服务器、移动终端等领域的广泛普及,其安全性随之成为了一个所有人无法回避的话题。操作系统的安全性直接影响了运行于操作系统之上的应用程序的安全性,并对所有用户的隐私与利益构成威胁。为了增强Linux系统的安全性,多种安全增强技术被设计并应用到现实的生产环境中,其中就包含内存地址随机化技术,该技术能够有效的阻止攻击者通过应用程序漏洞对应用程序实施内存攻击。
内存随机化的程度是用于衡量一个内存地址随机化技术安全性的最重要的指标。在实际使用时,当内存分配请求过大时,所有的内存分配技术都会直接使用操作系统的mmap以及brk系统调用来进行内存分配。而在Linux操作系统中,这两个系统调用返回的内存不是完全随机的:连续的系统调用,返回的地址也是连续的。该特性导致了即使对于安全内存随机化分配技术来说,大内存块的分配随机性仍然存在缺陷,可以被攻击者利用。
尽管国内外的研究中有很多针对这类系统调用随机化措施,但是在可移植性,以及brk 系统调用的防御上始终存在一些缺陷。
发明内容
本发明针对现有技术只能支持线下分析的缺陷检测功能,一来缺少对检测到缺陷的防护功能,二来对一些实时性要求较高的软件,其性能上的开销也无法达到实际生产中线上检测/ 防护的要求,提出一种基于动态插桩的大块内存分配系统及方法,通过自动化定位相似的代码,从而将已经分析完成的代码信息同步迁移到不同的平台上,着重于对实际系统中存在的通用性系统缺陷进行防护,更为注重对实时系统的防御以及性能开销。
本发明是通过以下技术发明实现的:
本发明涉及一种基于动态插桩的大块内存分配系统,包括:内存布局获取模块、调用拦截模块、内存随机化分配模块和污点跟踪模块,其中:内存布局获取模块与内存随机化分配模块相连并传输空闲内存块信息,调用拦截模块与内存随机化分配模块以及污点跟踪模块相连并传输上层应用程序系统调用信息,内存随机化分配模块连接用户进程并传输随机化后的内存地址信息,污点跟踪模块与内存随机化分配模块相连并传输对brk内存区域污点跟踪信息。
本发明涉及上述系统的大块内存分配方法,首先获得程序内存布局信息,然后通过动态插桩工具拦截mmap和brk系统调用,即首先对二进制程序的基本块进行指令翻译;然后对翻译过后的基本块检查是否有系统调用指令;最后对检测到的系统调用指令进行插桩,并对mmap 系统调用进行随机化分配、对brk系统调用使用污点跟踪处理,从而实现大块内存分配。
所述的随机化分配是指:
i)当上层应用请求的内存大小超过4KB时,从现有内存中满足大小的最小的空闲内存块开始,并随机选取一个空闲内存块,从中随机选取一个偏移值进行内存分配;
ii)当请求内存不超过4KB,即一个内存页时,从另一块单页空闲内存池中随机进行分配;
iii)单页空闲内存池在内存分配开始时进行初始化,为满足随机化要求,单页空闲内存池中应保证一定数量的内存页供随机化选择。
所述的污点跟踪处理是指:对brk系统调用使用污点跟踪技术,并对内存块进行实时迁移,具体包括:
①当第一次检测到brk系统调用时开始污点跟踪,对每条内存读写指令进行污点跟踪,判断是否存在brk内存区域的指针引用;
②当应用请求的brk内存超过阈值1时,对brk内存区域进行随机化的迁移,并根据污点跟踪信息更新指针引用;
③当应用请求的brk内存超过阈值2时,返回错误信息,表示brk内存分配失败。
技术效果
与现有技术相比,本发明使用动态插桩技术对大块内存进行实时随机化的分配发明。相较于以往的其他发明,本发明可迁移性更好,并且可以对brk分配的内存块进行随机化的防护;此外,本发明在Nginx下测试性能开销在5%到10%之间,能成功防御堆风水和堆喷射两种攻击技术,能够稳定运行包括Nginx在内的多种类别的应用程序。
附图说明
图1为本发明系统结构示意图。
具体实施方式
如图1所示,本实施例包括:内存布局获取模块、调用拦截模块、内存随机化分配模块和污点跟踪模块,其中:内存布局获取模块与内存随机化分配模块相连并传输空闲内存块信息;调用拦截模块与内存随机化分配模块以及污点跟踪模块相连并传输上层应用程序系统调用信息;内存随机化分配模块连接用户进程并传输随机化后的内存地址信息;污点跟踪模块与内存随机化分配模块相连并传输对brk内存区域污点跟踪信息。
本实施例涉及上述系统的大块内存分配方法,包括以下步骤:
1)使用动态插桩框架,在应用程序运行前使用程序加载器(loader)加载程序文件。
所述的程序加载器具体是指:操作系统运行一个程序时会从内核中调用一个指定程序加载器对即将运行的应用程序进行一些初始化的操作。动态插桩框架通过在第一步加载阶段进行拦截,并对二进制文件进行指令翻译。
2)通过解析/proc/self/maps文件获取程序内存布局,具体包括:
2.1)读取并解析/proc/self/maps文件内容
2.2)分析内存中的空闲内存块,并保存在全局数组中,供后续随机化模块使用
3)拦截程序运行中所有的mmap/munmap/mremap系统调用,并进行随机化处理,具体包括:
3.1)通过动态插桩框架在系统调用指令处插桩,拦截mmap/munmap/mremap系统调用
3.2)当上层应用请求的内存大小超过4KB,则从现有内存中满足大小的最小的空闲内存块开始,并随机选取一个空闲内存块,从中随机选取一个偏移值进行内存分配
3.3)当请求内存不超过4KB(一个内存页),则从另一块单页空闲内存池中随机进行分配
3.4)单页空闲内存池在内存分配开始时进行初始化,为满足随机化要求,单页空闲内存池中应保证一定数量的内存页供随机化选择。
4)在执行步骤3)的同时,拦截程序运行中所有的brk系统调用,具体包括:
4.1)当第一次检测到brk系统调用时开始污点跟踪,对每条内存读写指令进行污点跟踪,判断是否存在brk内存区域的指针引用
4.2)当应用请求的brk内存超过200MB时,返回错误信息,表示brk内存分配失败。
5)使用污点跟踪技术记录所有指向brk内存的指针。当brk分配的内存超过512KB时,对该内存块随机迁移到一个新的地址,并修复指针,具体包括:
5.1)使用随机化分配模块寻找合适的内存地址;
5.2)将当前的brk段数据的引用指针修改成新的内存地址;
5.3)最后把brk段数据拷贝到新的内存地址。
上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现发明均受本发明之约束。

Claims (6)

1.一种基于动态插桩的大块内存分配系统,其特征在于,包括:内存布局获取模块、调用拦截模块、内存随机化分配模块和污点跟踪模块,其中:内存布局获取模块与内存随机化分配模块相连并传输空闲内存块信息,调用拦截模块与内存随机化分配模块以及污点跟踪模块相连并传输上层应用程序系统调用信息,内存随机化分配模块连接用户进程并传输随机化后的内存地址信息,污点跟踪模块与内存随机化分配模块相连并传输对brk内存区域污点跟踪信息。
2.根据权利要求1所述系统的大块内存分配方法,其特征在于,首先获得程序内存布局信息,然后通过动态插桩工具拦截mmap和brk系统调用,即首先对二进制程序的基本块进行指令翻译;然后对翻译过后的基本块检查是否有系统调用指令;最后对检测到的系统调用指令进行插桩,并对mmap系统调用进行随机化分配、对brk系统调用使用污点跟踪处理,从而实现大块内存分配。
3.根据权利要求2所述的大块内存分配方法,其特征是,所述的获得程序内存布局信息,具体包括:
1.1)读取并解析/proc/[pid]/maps位置下的内存文件中的数据;
1.2)跟踪内存分配的情况,对内存布局信息进行实时更新。
4.根据权利要求2所述的大块内存分配方法,其特征是,所述的随机化分配,具体包括:
i)当上层应用请求的内存大小超过4KB时,从现有内存中满足大小的最小的空闲内存块开始,并随机选取一个空闲内存块,从中随机选取一个偏移值进行内存分配;
ii)当请求内存不超过4KB,即一个内存页时,从另一块单页空闲内存池中随机进行分配;
iii)单页空闲内存池在内存分配开始时进行初始化,为满足随机化要求,单页空闲内存池中应保证一定数量的内存页供随机化选择。
5.根据权利要求2所述的大块内存分配方法,其特征是,所述的污点跟踪处理是指:对brk系统调用使用污点跟踪技术,并对内存块进行实时迁移,具体包括:
①当第一次检测到brk系统调用时开始污点跟踪,对每条内存读写指令进行污点跟踪,判断是否存在brk内存区域的指针引用;
②当应用请求的brk内存超过阈值1时,对brk内存区域进行随机化的迁移,并根据污点跟踪信息更新指针引用;
③当应用请求的brk内存超过阈值2时,返回错误信息,表示brk内存分配失败。
6.根据权利要求5所述的大块内存分配方法,其特征是,所述的阈值1为:200MB,所述的阈值2为:512KB。
CN201710398778.6A 2017-05-31 2017-05-31 基于动态插桩的大块内存分配系统及方法 Active CN107239410B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710398778.6A CN107239410B (zh) 2017-05-31 2017-05-31 基于动态插桩的大块内存分配系统及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710398778.6A CN107239410B (zh) 2017-05-31 2017-05-31 基于动态插桩的大块内存分配系统及方法

Publications (2)

Publication Number Publication Date
CN107239410A true CN107239410A (zh) 2017-10-10
CN107239410B CN107239410B (zh) 2020-06-09

Family

ID=59985981

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710398778.6A Active CN107239410B (zh) 2017-05-31 2017-05-31 基于动态插桩的大块内存分配系统及方法

Country Status (1)

Country Link
CN (1) CN107239410B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108664419A (zh) * 2018-04-03 2018-10-16 郑州云海信息技术有限公司 一种确定内存大页数目的方法及其装置
CN110147329A (zh) * 2019-05-24 2019-08-20 武汉瓯越网视有限公司 一种动态检测模拟器的方法、装置及终端
CN113535545A (zh) * 2021-06-16 2021-10-22 中国工程物理研究院计算机应用研究所 一种用于程序动态分析的二进制插桩方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101419558A (zh) * 2008-11-13 2009-04-29 湖南大学 Cuda图形子系统虚拟化方法
CN101984409A (zh) * 2010-11-10 2011-03-09 南京南瑞继保电气有限公司 一种用于Linux系统测试代码注入的方法
US20130054925A1 (en) * 2011-08-24 2013-02-28 Microsoft Corporation Memory allocation tracking
CN103440457A (zh) * 2013-08-20 2013-12-11 上海交通大学 基于进程模拟的二进制程序分析系统
CN103440201A (zh) * 2013-09-05 2013-12-11 北京邮电大学 动态污点分析装置及其在文件格式逆向解析中的应用
CN103745755A (zh) * 2014-01-06 2014-04-23 中国科学院软件研究所 一种高效且高可用的空间内存错误检测方法
US20150264065A1 (en) * 2009-12-15 2015-09-17 Intel Corporation Sensitive data tracking using dynamic taint analysis

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101419558A (zh) * 2008-11-13 2009-04-29 湖南大学 Cuda图形子系统虚拟化方法
US20150264065A1 (en) * 2009-12-15 2015-09-17 Intel Corporation Sensitive data tracking using dynamic taint analysis
CN101984409A (zh) * 2010-11-10 2011-03-09 南京南瑞继保电气有限公司 一种用于Linux系统测试代码注入的方法
US20130054925A1 (en) * 2011-08-24 2013-02-28 Microsoft Corporation Memory allocation tracking
CN103440457A (zh) * 2013-08-20 2013-12-11 上海交通大学 基于进程模拟的二进制程序分析系统
CN103440201A (zh) * 2013-09-05 2013-12-11 北京邮电大学 动态污点分析装置及其在文件格式逆向解析中的应用
CN103745755A (zh) * 2014-01-06 2014-04-23 中国科学院软件研究所 一种高效且高可用的空间内存错误检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
傅建明 等: "一种基于动态污点的内存越界访问检测框架", 《武汉大学学报(理学版)》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108664419A (zh) * 2018-04-03 2018-10-16 郑州云海信息技术有限公司 一种确定内存大页数目的方法及其装置
CN110147329A (zh) * 2019-05-24 2019-08-20 武汉瓯越网视有限公司 一种动态检测模拟器的方法、装置及终端
CN110147329B (zh) * 2019-05-24 2022-06-14 武汉瓯越网视有限公司 一种动态检测模拟器的方法、装置及终端
CN113535545A (zh) * 2021-06-16 2021-10-22 中国工程物理研究院计算机应用研究所 一种用于程序动态分析的二进制插桩方法

Also Published As

Publication number Publication date
CN107239410B (zh) 2020-06-09

Similar Documents

Publication Publication Date Title
KR101971389B1 (ko) 연합 기반 메모리 관리
US10534915B2 (en) System for virtual patching security vulnerabilities in software containers
CN105190570B (zh) 用于虚拟机器的完整性保护的存储器自省引擎
US20160021142A1 (en) Automatic content inspection system for exploit detection
CN109344616B (zh) 一种移动应用程序动态加载行为监控方法及装置
CN109784062B (zh) 漏洞检测方法及装置
CN102521537A (zh) 基于虚拟机监控器的隐藏进程检测方法和装置
CN107239410A (zh) 基于动态插桩的大块内存分配系统及方法
CN105022956A (zh) 一种抵御代码重用攻击的方法
CN109471697A (zh) 一种监控虚拟机中系统调用的方法、装置及存储介质
Nikiforakis et al. HeapSentry: Kernel-assisted protection against heap overflows
CN108898012B (zh) 检测非法程序的方法和装置
CN102722672A (zh) 一种检测运行环境真实性的方法及装置
CN111191243A (zh) 一种漏洞检测方法、装置和存储介质
US20150039812A1 (en) Modify Executable Bits of System Management Memory Page Table
CN107229867B (zh) 内核漏洞挖掘方法、装置、计算设备及计算机存储介质
CN115688106A (zh) 一种Java agent无文件注入内存马的检测方法及装置
CN104750623A (zh) 一种内存虚拟化的方法及装置
CN107301349A (zh) 一种数据库访问控制方法及系统
CN111428240B (zh) 一种用于检测软件的内存违规访问的方法及装置
CN111176986B (zh) 线程脚本调试方法、装置、计算机设备和存储介质
US11263307B2 (en) Systems and methods for detecting and mitigating code injection attacks
CN101315655A (zh) 一种防御缓冲区溢出攻击方法和装置
KR102066580B1 (ko) 캡쳐 데이터에 워터마크를 추가하는 프로그램과 화면 유출 파악 서비스 제공방법
US20220138311A1 (en) Systems and methods for detecting and mitigating code injection attacks

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