CN107239410B - 基于动态插桩的大块内存分配系统及方法 - Google Patents
基于动态插桩的大块内存分配系统及方法 Download PDFInfo
- Publication number
- CN107239410B CN107239410B CN201710398778.6A CN201710398778A CN107239410B CN 107239410 B CN107239410 B CN 107239410B CN 201710398778 A CN201710398778 A CN 201710398778A CN 107239410 B CN107239410 B CN 107239410B
- Authority
- CN
- China
- Prior art keywords
- memory
- brk
- module
- block
- allocation
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7202—Allocation control and policies
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
- Debugging And Monitoring (AREA)
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 (5)
1.一种基于动态插桩的大块内存分配系统,其特征在于,包括:内存布局获取模块、调用拦截模块、内存随杋化分配模块和污点跟踪模块,其中:内存布局获取模块与内存随机化分配模块相连并传输空闲内存块信息,调用拦截模块与内存随杋化分配模块以及污点跟踪模块相连并传输上层应用程序系统调用信息,内存随杋化分配模块连接用户进程并传输随机化后的内存地址信息,污点跟踪模块与内存随杋化分巸模块相连并传输对bκk内有区域污点跟踪信息;
所述的内存布局获取模块获得程序内存布局信息,然后调用拦截模块通过动态插桩工具拦截mmap和brk系统调用,即首先对二进制程序的基本块进行指令翻译;
然后对翻译过后的基本块检査是香有系统调用指令;
最后对检测到的系统调用指令进行插桩,内存随机化分配模块对mmap系统调用进行随机化分配、污点跟踪模块对brk系统调用使用污点跟踪处理,从而实现大块内存分配;
所述的污点跟踪处理是指:对brk系统调用使用污点跟踪技术,并对内存块进行实时迁移,具体包括:
①当第一次检测到brk系统调用时开始污点跟踪,对每条内存读写指令进行污点跟踪,判断是否存在brk内存区域的指针引用;
②当应用请求的brk内存超过阈值1时,对brk内存区域进行随机化的迁移,并根据污点跟踪信息更新指针引用;
③当应用请求的brk内存超过阈值2时,返回错误信息,表示brk内存分配失败。
2.根据权利要求1所述的大块内存分配系统,其特征是,所述的阈值1为:200MB,所述的阀值2为:512KB。
3.一种大块内存分配方法,其特征在于,根据权利要求1所述系统实现。
4.根据权利要求3所述的大块内存分配方法,其特征是,所述的获得程序内存布局信息,具体包括
1.1)读取并解析/proc/[pid]/maps位置下的内存文件中的数据;
1.2)跟踪内存分配的情况,对内存布局信息进行实时更新。
5.根据权利要求3所述的大块内存分配方法,其特征是,所述的随机化分配,具体包括:
i)当上层应用请求的内存大小超过4KB时,从现有内存中满足大小的最小的空闲内存块开始,并随机选取一个空闲内存块,从中随机选取一个偏移值进行内存分配;
ii)当请求内存不超过4KB,即一个内存页时,从另一块单页空闲内存池中随机进行分配;
iii)单页空闲内存池在内存分配开始时进行初始化,为满足随机化要求,单页空闲内存池中应保证一定数量的内存页供随机化选择。
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 CN107239410A (zh) | 2017-10-10 |
CN107239410B true 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) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108664419A (zh) * | 2018-04-03 | 2018-10-16 | 郑州云海信息技术有限公司 | 一种确定内存大页数目的方法及其装置 |
CN110147329B (zh) * | 2019-05-24 | 2022-06-14 | 武汉瓯越网视有限公司 | 一种动态检测模拟器的方法、装置及终端 |
CN113535545A (zh) * | 2021-06-16 | 2021-10-22 | 中国工程物理研究院计算机应用研究所 | 一种用于程序动态分析的二进制插桩方法 |
Citations (5)
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系统测试代码注入的方法 |
CN103440201A (zh) * | 2013-09-05 | 2013-12-11 | 北京邮电大学 | 动态污点分析装置及其在文件格式逆向解析中的应用 |
CN103440457A (zh) * | 2013-08-20 | 2013-12-11 | 上海交通大学 | 基于进程模拟的二进制程序分析系统 |
CN103745755A (zh) * | 2014-01-06 | 2014-04-23 | 中国科学院软件研究所 | 一种高效且高可用的空间内存错误检测方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8893280B2 (en) * | 2009-12-15 | 2014-11-18 | Intel Corporation | Sensitive data tracking using dynamic taint analysis |
US9141510B2 (en) * | 2011-08-24 | 2015-09-22 | Microsoft Technology Licensing, Llc | Memory allocation tracking |
-
2017
- 2017-05-31 CN CN201710398778.6A patent/CN107239410B/zh active Active
Patent Citations (5)
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系统测试代码注入的方法 |
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)
Title |
---|
一种基于动态污点的内存越界访问检测框架;傅建明 等;《武汉大学学报(理学版)》;20161031;第62卷(第5期);第401-410页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107239410A (zh) | 2017-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10180899B2 (en) | Device for automatically generating test cases for embedded software using symbolic and concrete execution | |
US8516589B2 (en) | Apparatus and method for preventing virus code execution | |
CN107239410B (zh) | 基于动态插桩的大块内存分配系统及方法 | |
CN103065084B (zh) | 在虚拟机外部机进行的windows隐藏进程检测方法 | |
CN102521537A (zh) | 基于虚拟机监控器的隐藏进程检测方法和装置 | |
US20180060579A1 (en) | Detecting Malware by Monitoring Execution of a Configured Process | |
CN111191243A (zh) | 一种漏洞检测方法、装置和存储介质 | |
US9176821B2 (en) | Watchpoint support system for functional simulator | |
US10311233B2 (en) | Generic unpacking of program binaries | |
US7861231B2 (en) | System and method of identification of dangling pointers | |
CN107229867B (zh) | 内核漏洞挖掘方法、装置、计算设备及计算机存储介质 | |
CN111967044A (zh) | 一种适用于云环境的被泄漏隐私数据的追踪方法及系统 | |
CN104750536A (zh) | 一种实现虚拟机自省的方法和装置 | |
CN103425563B (zh) | 基于虚拟化技术的在线i/o电子取证系统及其取证方法 | |
CN114781322B (zh) | Cpu芯片仿真加速中针对无mmu环境的内存状态恢复方法 | |
US10817432B2 (en) | Memory address assignment method for virtual machine and apparatus | |
CN107798244A (zh) | 一种检测远程代码执行漏洞的方法及装置 | |
CN108446186B (zh) | 从加壳Android应用程序中恢复Dex源文件的方法 | |
CN111046390A (zh) | 一种协同防御补丁防护方法、装置及存储设备 | |
CN105653948B (zh) | 一种阻止恶意操作的方法及装置 | |
KR20190035244A (ko) | 캡쳐 데이터에 워터마크를 추가하는 화면 유출방지 프로그램과 화면 유출방지 서비스 제공방법 | |
CN112351008A (zh) | 网络攻击分析方法、装置、可读存储介质及计算机设备 | |
Zhan et al. | A low-overhead kernel object monitoring approach for virtual machine introspection | |
CN101650688A (zh) | 一种访问vm_io地址空间的方法和用户态调试器 | |
CN111143851A (zh) | 适用于操作系统内核对象地址泄露的检测方法及系统 |
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 |