CN111143851A - 适用于操作系统内核对象地址泄露的检测方法及系统 - Google Patents

适用于操作系统内核对象地址泄露的检测方法及系统 Download PDF

Info

Publication number
CN111143851A
CN111143851A CN201911268776.0A CN201911268776A CN111143851A CN 111143851 A CN111143851 A CN 111143851A CN 201911268776 A CN201911268776 A CN 201911268776A CN 111143851 A CN111143851 A CN 111143851A
Authority
CN
China
Prior art keywords
kernel
data
pointer
address
user space
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
CN201911268776.0A
Other languages
English (en)
Other versions
CN111143851B (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 CN201911268776.0A priority Critical patent/CN111143851B/zh
Publication of CN111143851A publication Critical patent/CN111143851A/zh
Application granted granted Critical
Publication of CN111143851B publication Critical patent/CN111143851B/zh
Active 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种适用于操作系统内核对象地址泄露的检测方法及系统,包括:函数接口标记步骤:标记所有内核与用户空间交换数据的函数接口;数据分析步骤:根据获取的函数接口,通过编译器分析传输到用户空间的数据中是否包含指针:若包含,则进入内核指针判断步骤;若不包含,则表明该数据不泄露内核对象地址,直接返回继续分析下一待分析数据。本发明具有实现复杂度低、工程量小、分析效率高、准确性高和假阳性较低的特点,并且能检测无非法内存操作的情况下由于开发者的疏忽造成的内核对象地址泄露的情况。

Description

适用于操作系统内核对象地址泄露的检测方法及系统
技术领域
本发明涉及计算机软件技术领域,具体地,涉及一种适用于操作系统内核对象地址泄露的检测方法及系统。
背景技术
操作系统内核一直都是攻击者重点关注的攻击对象。本地攻击或者远程攻击,一般都需要知道内核地址的布局从而获得更高的系统权限或窃取私密数据。操作系统内核地址的机密性对于保障操作系统安全不被恶意用户攻击十分重要。在检测操作系统内核安全漏洞的技术中,检测内核对象地址泄露的方法是其中的重要技术之一。
近几年来,检测内核对象地址泄露的方法主要有两大类:检测对未初始化的对象的访问,检测内存越界访问。对未初始化的对象的访问有可能会泄露内核对象地址,当一块内存区域被释放之后重新被分配,过程中没有对该内存区域清零或进行初始化,对该未初始化的对象的访问可以读到该内存区域原来的值,可能会造成内核对象地址的泄露。内存越界访问是另外一种可能泄露内核对象地址的方式,对于越界地址的访问可以非法访问到其他内存地址的值,从而读取到内核对象地址。
这两种内核对象地址泄露的方法都是通过非法的内存操作实现的。目前检测内核对象地址泄露的方法主要基于检测非法的内存操作实现的。
当前的检测方法能检测大部分由于非法的内存操作导致的内核对象地址的泄露,但是其缺点是:这些方法都只能检测非法的内存操作导致的内核对象地址泄露,而不能检测到由于开发者疏忽造成的内核对象地址泄露。
一种检测内核对象地址泄露的方式是跟踪所有内核对象指针的数据流,检查是否通过与内核与用户空间交互的接口泄露到用户空间。这种方法需要跟踪所有内核对象指针,数量庞大,而且由于内核代码中存在大量间接调用函数,传统的数据流和控制流分析方法耗时长,且准确率低,从内核对象地址赋值给指针到该指针传播到用户空间的过程中可能存在大量的间接调用,从而导致分析结果具有较高的假阳性。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种适用于操作系统内核对象地址泄露的检测方法及系统。
根据本发明提供的一种适用于操作系统内核对象地址泄露的检测方法,包括:
函数接口标记步骤:标记所有内核与用户空间交换数据的函数接口;
数据分析步骤:根据获取的函数接口,通过编译器分析传输到用户空间的数据中是否包含指针:若包含,则进入内核指针判断步骤;若不包含,则表明该数据不泄露内核对象地址,直接返回继续分析下一待分析数据;
内核指针判断步骤:根据当前处理器的特性和内核指针在内核代码中的特点,判断分析得到的指针是否为内核指针:如果是内核指针,则进入地址泄露检测步骤继续执行;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据;
地址泄露检测步骤:通过过滤掉调试专用的上下文,从而检测在非调试环境下是否有内核对象地址泄露到用户空间:若有,则判定存在内核对象地址泄露;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据。
优选地,所述函数接口标记步骤:
采用编译器分析技术或用户标记的方法,标记所有内核与用户空间交换数据的函数接口。
优选地,所述函数接口标记步骤:
借助编译器分析技术,在内核态代码中找到和用户空间交换数据的函数接口或通过用户在源代码中加标记指定。
优选地,所述数据分析步骤:
根据获取的函数接口,通过分析该函数接口的参数或通过用户指定,获取传递到用户空间的数据的起始地址的变量和传递数据的大小,通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针;传递的数据的大小包括:一个固定的常数、一个数值变量;
所述通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针:
根据获取的数据的起始地址的变量和传递数据的大小,储存该数据起始地址的变量是一个指针,通过该指针指向的数据类型和传递数据的大小变量进行数据流分析,得到该指针指向的数据类型以及传递数据的大小,从而判断传递的数据中是否包含指针。
优选地,所述内核指针判断步骤:
所述处理器的特性指:SMAP处理器特性用途是禁止内核因为自身错误而访问用户空间的数据,以避免内核漏洞所导致的安全隐患;
操作系统内核提供了对这种处理器的特性的支持,如果在内核态访问用户空间的数据,会造成内核出错,默认情况下内核态是不访问空间的数据的;
在处理器开启的情况下,如果一个指针在内核态被解引用,访问了该指针指向位置的数据,则判定该指针一定是内核态指针。
优选地,所述地址泄露检测步骤:
过滤掉所有在调试用选项开启时的上下文:在调试的时候,内核指针的地址是开发者故意传递到用户空间供调试目的用的,通过函数名判断该函数名是否包含调试目的的字眼及源代码信息,从而过滤掉所有调试用的上下文;
所述源代码信息指泄露的地点在调试专用的分支中。
根据本发明提供的一种适用于操作系统内核对象地址泄露的检测系统,包括:
函数接口标记模块:标记所有内核与用户空间交换数据的函数接口;
数据分析模块:根据获取的函数接口,通过编译器分析传输到用户空间的数据中是否包含指针:若包含,则调用内核指针判断模块;若不包含,则表明该数据不泄露内核对象地址,直接返回继续分析下一待分析数据;
内核指针判断模块:根据当前处理器的特性和内核指针在内核代码中的特点,判断分析得到的指针是否为内核指针:如果是内核指针,则进入地址泄露检测模块继续执行;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据;
地址泄露检测模块:通过过滤掉调试专用的上下文,从而检测在非调试环境下是否有内核对象地址泄露到用户空间:若有,则判定存在内核对象地址泄露;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据。
优选地,所述函数接口标记模块:
采用编译器分析技术或用户标记的方法,标记所有内核与用户空间交换数据的函数接口;
所述函数接口标记模块:
借助编译器分析技术,在内核态代码中找到和用户空间交换数据的函数接口或通过用户在源代码中加标记指定。
优选地,所述数据分析模块:
根据获取的函数接口,通过分析该函数接口的参数或通过用户指定,获取传递到用户空间的数据的起始地址的变量和传递数据的大小,通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针;传递的数据的大小包括:一个固定的常数、一个数值变量;
所述通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针:
根据获取的数据的起始地址的变量和传递数据的大小,储存该数据起始地址的变量是一个指针,通过该指针指向的数据类型和传递数据的大小变量进行数据流分析,得到该指针指向的数据类型以及传递数据的大小,从而判断传递的数据中是否包含指针。
优选地,所述内核指针判断模块:
所述处理器的特性指:SMAP处理器特性用途是禁止内核因为自身错误而访问用户空间的数据,以避免内核漏洞所导致的安全隐患;
操作系统内核提供了对这种处理器的特性的支持,如果在内核态访问用户空间的数据,会造成内核出错,默认情况下内核态是不访问空间的数据的;
在处理器开启的情况下,如果一个指针在内核态被解引用,访问了该指针指向位置的数据,则判定该指针一定是内核态指针;
所述地址泄露检测模块:
过滤掉所有在调试用选项开启时的上下文:在调试的时候,内核指针的地址是开发者故意传递到用户空间供调试目的用的,通过函数名判断该函数名是否包含调试目的的字眼及源代码信息,从而过滤掉所有调试用的上下文;
所述源代码信息指泄露的地点在调试专用的分支中。
与现有技术相比,本发明具有如下的有益效果:
1、本发明能检测无非法内存操作的情况下由于开发者的疏忽造成的内核对象地址泄露的情况。
2、本发明利用内核对象地址在现有的处理器上及内核代码中的行为特性,数据流分析到该指针被解引用即可判断该指针为内核指针,而不需要一直分析到该指针最初创建或赋值的地方,实现复杂度低,工程量小,分析效率和准确性大大提升。
3、本发明自动识别内核代码中调试用的上下文,过滤掉因调试目的而传递到用户空间的内核对象地址,假阳性较低。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明提供的程序分析流程图;
图2为本发明提供的软件实现架构示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
根据本发明提供的一种适用于操作系统内核对象地址泄露的检测方法,包括:
函数接口标记步骤:标记所有内核与用户空间交换数据的函数接口;
数据分析步骤:根据获取的函数接口,通过编译器分析传输到用户空间的数据中是否包含指针:若包含,则进入内核指针判断步骤;若不包含,则表明该数据不泄露内核对象地址,直接返回继续分析下一待分析数据;
内核指针判断步骤:根据当前处理器的特性和内核指针在内核代码中的特点,判断分析得到的指针是否为内核指针:如果是内核指针,则进入地址泄露检测步骤继续执行;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据;
地址泄露检测步骤:通过过滤掉调试专用的上下文,从而检测在非调试环境下是否有内核对象地址泄露到用户空间:若有,则判定存在内核对象地址泄露;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据。
具体地,所述函数接口标记步骤:
采用编译器分析技术或用户标记的方法,标记所有内核与用户空间交换数据的函数接口。
具体地,所述函数接口标记步骤:
借助编译器分析技术,在内核态代码中找到和用户空间交换数据的函数接口或通过用户在源代码中加标记指定。
具体地,所述数据分析步骤:
根据获取的函数接口,通过分析该函数接口的参数或通过用户指定,获取传递到用户空间的数据的起始地址的变量和传递数据的大小,通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针;传递的数据的大小包括:一个固定的常数、一个数值变量;
所述通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针:
根据获取的数据的起始地址的变量和传递数据的大小,储存该数据起始地址的变量是一个指针,通过该指针指向的数据类型和传递数据的大小变量进行数据流分析,得到该指针指向的数据类型以及传递数据的大小,从而判断传递的数据中是否包含指针。
具体地,所述内核指针判断步骤:
所述处理器的特性指:SMAP处理器特性用途是禁止内核因为自身错误而访问用户空间的数据,以避免内核漏洞所导致的安全隐患;
操作系统内核提供了对这种处理器的特性的支持,如果在内核态访问用户空间的数据,会造成内核出错,默认情况下内核态是不访问空间的数据的;
在处理器开启的情况下,如果一个指针在内核态被解引用,访问了该指针指向位置的数据,则判定该指针一定是内核态指针。
具体地,所述地址泄露检测步骤:
过滤掉所有在调试用选项开启时的上下文:在调试的时候,内核指针的地址是开发者故意传递到用户空间供调试目的用的,通过函数名判断该函数名是否包含调试目的的字眼及源代码信息,从而过滤掉所有调试用的上下文;
所述源代码信息指泄露的地点在调试专用的分支中。
本发明提供的适用于操作系统内核对象地址泄露的检测系统,可以通过本发明给的适用于操作系统内核对象地址泄露的检测方法的步骤流程实现。本领域技术人员可以将所述适用于操作系统内核对象地址泄露的检测方法,理解为所述适用于操作系统内核对象地址泄露的检测系统的一个优选例。
根据本发明提供的一种适用于操作系统内核对象地址泄露的检测系统,包括:
函数接口标记模块:标记所有内核与用户空间交换数据的函数接口;
数据分析模块:根据获取的函数接口,通过编译器分析传输到用户空间的数据中是否包含指针:若包含,则调用内核指针判断模块;若不包含,则表明该数据不泄露内核对象地址,直接返回继续分析下一待分析数据;
内核指针判断模块:根据当前处理器的特性和内核指针在内核代码中的特点,判断分析得到的指针是否为内核指针:如果是内核指针,则进入地址泄露检测模块继续执行;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据;
地址泄露检测模块:通过过滤掉调试专用的上下文,从而检测在非调试环境下是否有内核对象地址泄露到用户空间:若有,则判定存在内核对象地址泄露;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据。
具体地,所述函数接口标记模块:
采用编译器分析技术或用户标记的方法,标记所有内核与用户空间交换数据的函数接口;
所述函数接口标记模块:
借助编译器分析技术,在内核态代码中找到和用户空间交换数据的函数接口或通过用户在源代码中加标记指定。
具体地,所述数据分析模块:
根据获取的函数接口,通过分析该函数接口的参数或通过用户指定,获取传递到用户空间的数据的起始地址的变量和传递数据的大小,通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针;传递的数据的大小包括:一个固定的常数、一个数值变量;
所述通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针:
根据获取的数据的起始地址的变量和传递数据的大小,储存该数据起始地址的变量是一个指针,通过该指针指向的数据类型和传递数据的大小变量进行数据流分析,得到该指针指向的数据类型以及传递数据的大小,从而判断传递的数据中是否包含指针。
具体地,所述内核指针判断模块:
所述处理器的特性指:SMAP处理器特性用途是禁止内核因为自身错误而访问用户空间的数据,以避免内核漏洞所导致的安全隐患;
操作系统内核提供了对这种处理器的特性的支持,如果在内核态访问用户空间的数据,会造成内核出错,默认情况下内核态是不访问空间的数据的;
在处理器开启的情况下,如果一个指针在内核态被解引用,访问了该指针指向位置的数据,则判定该指针一定是内核态指针;
所述地址泄露检测模块:
过滤掉所有在调试用选项开启时的上下文:在调试的时候,内核指针的地址是开发者故意传递到用户空间供调试目的用的,通过函数名判断该函数名是否包含调试目的的字眼及源代码信息,从而过滤掉所有调试用的上下文;
所述源代码信息指泄露的地点在调试专用的分支中。
下面通过优选例,对本发明进行更为具体地说明。
优选例1:
下面结合附图对本发明作进一步说明。
如图1所示,为本发明程序分析的具体流程,完成对内核代码中内核对象地址泄露的检测。下面以一个操作系统内核源程序为例,结合图1对以下内核对象地址泄露检测步骤进行详细描述:
在步骤401中,用户可以选择手动在源程序中指定内核态与用户空间交换数据的函数接口或者通过编译器分析技术自动找到对应接口,然后执行步骤402;
在步骤402中,根据内核态与用户空间交换数据的接口,从参数中识别和获取出传递到用户空间的数据的起始地址变量指针ptr和表示传输大小size,然后执行步骤403;
在步骤403中,根据获取到的指针的类型计算出所有传输到用户空间的对象,如果该指针是指向一个基本类型的指针,则把其指向的变量加入待检查的对象集合中,如果该指针是指向一个数组类型的指针,则把该数组中从起始地址开始到大小为size能覆盖的所有数组元素加入待检查的对象中,如果该指针是一个指向一个结构体类型的指针,则把该结构体从起始地址开始,大小为size能覆盖的所有成员变量加入待检查的对象中,然后执行步骤404;
在步骤404中,从待检查的对象中获取一个未检查的对象;
在步骤405中,对该对象进行类型检查,如果该对象不是指针类型,然后执行步骤406,如果该对象是指针类型,则执行步骤407;
在步骤406中,如果待检查的对象集合里所有对象都被检查过了,结束所有操作。
在步骤407中,通过内核指针在内核代码中的行为判断该指针是否内核指针,如果该指针在SMAP特性开启时在内核态中解引用了,则该指针为内核指针,如果该指针被赋值为一个内核对象的地址,该指针为内核指针,如果该指针是从用户空间拷贝过来的,该指针不为内核指针,当该指针为内核指针时,然后执行步骤408,当该指针不为内核指针时,然后执行步骤406;
在步骤408中,通过内核中定义的宏或函数名字,判断该指针是否在调试专用的上下文中被拷贝到用户空间,如果不是调试用上下文,则此内核对象地址泄露到用户空间,然后执行步骤409;否则然后执行步骤406;
在步骤409中,报告内核对象地址泄露的位置,然后执行步骤406。
如图2所示,本发明结合编译器分析和内核指针在内核代码中的行为特点,从所有内核态与用户空间交换数据的接口(模块1a、1b)中提取拷贝到用户空间的对象(模块2),内核对象指针识别模块(模块3)负责判断该对象是否为内核指针,调试专用上下文识别模块(模块4)负责判断该拷贝操作是否在调试专用上下文中。
优选例2:
一种适用于操作系统内核对象地址泄露的检测方法。
该方法先采用编译器分析技术或用户标记的方法,标记所有内核与用户空间交换数据的函数接口。
然后通过编译器分析传输到用户空间的数据中是否包含指针,若包含则进入下一步分析,若不包含,则表明该数据不泄露内核对象地址,直接返回继续分析下一待分析数据。
然后根据内核指针的定义和内核对象地址在内核代码中的特点,判断上一步分析得到的指针是否为内核指针,如果是内核指针,则进行下一步分析,否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据。
最后通过过滤掉调试专用的上下文,从而检测在非调试环境下是否有内核对象地址泄露到用户空间。
上述的对于内核代码分析的过程包括以下步骤:
(1)识别和获取所有内核态与用户空间数据交换的函数接口
(2)识别和获取传递到用户空间的数据的起始地址变量和传递数据的大小
(3)通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针
(4)判断该指针是否内核指针
(5)过滤掉调试用上下文
所述步骤(1)借助编译器分析技术,在内核态代码中找到和用户空间交换数据的函数接口或通过用户在源代码中加标记指定。
所述步骤(2)中通过步骤(1)中获取的数据交换的函数接口,通过分析该函数接口的参数或用户指定获取传递到用户空间的数据的起始地址的变量和传递数据的大小。传递的数据的大小可以是一个固定的常数也可以是一个数值变量。
所述步骤(3)中计算传递到用户空间的数据是否包含指针,使用的是步骤(2)中获取的数据的起始地址的变量和传递数据的大小,储存该数据起始地址的变量是一个指针,通过该指针指向的数据类型和传递数据的大小变量进行数据流分析(通过数据流分析,计算出该数据和传递数据的大小变量的值),得到该指针指向的数据类型以及传递数据的大小,从而判断传递的数据中是否包含指针。
所述步骤(4)中判断该指针是否内核指针,根据当前处理器的特性和内核指针在内核代码中的特点。SMAP处理器特性用途是禁止内核因为自身错误而访问用户空间的数据,以避免一些内核漏洞所导致的安全隐患。常见的操作系统内核都提供了对这种特性的支持,如果在内核态访问用户空间的数据,会造成内核出错,默认情况下内核态是不访问空间的数据的。因此,在SMAP开启的情况下,如果一个指针在内核态被解引用,即访问了该指针指向位置的数据,该指针一定是内核态指针。
所述步骤(5)中过滤掉所有在调试用选项开启时的上下文,在调试的时候,内核指针的地址是开发者故意传递到用户空间供调试目的用的,通过函数名判断该函数名是否包含调试目的的字眼如debug/dbg,及其他源代码信息例如该泄露的地点在调试专用的分支中,从而过滤掉所有调试用的上下文。
一种适用于操作系统内核对象地址泄露的检测方法,软件部分包括识别内核态和用户空间交换数据的接口编译器工具,包括内核对象地址的识别和调试用上下文的识别过滤编译器分析工具。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

Claims (10)

1.一种适用于操作系统内核对象地址泄露的检测方法,其特征在于,包括:
函数接口标记步骤:标记所有内核与用户空间交换数据的函数接口;
数据分析步骤:根据获取的函数接口,通过编译器分析传输到用户空间的数据中是否包含指针:若包含,则进入内核指针判断步骤;若不包含,则表明该数据不泄露内核对象地址,直接返回继续分析下一待分析数据;
内核指针判断步骤:根据当前处理器的特性和内核指针在内核代码中的特点,判断分析得到的指针是否为内核指针:如果是内核指针,则进入地址泄露检测步骤继续执行;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据;
地址泄露检测步骤:通过过滤掉调试专用的上下文,从而检测在非调试环境下是否有内核对象地址泄露到用户空间:若有,则判定存在内核对象地址泄露;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据。
2.根据权利要求1所述的适用于操作系统内核对象地址泄露的检测方法,其特征在于,所述函数接口标记步骤:
采用编译器分析技术或用户标记的方法,标记所有内核与用户空间交换数据的函数接口。
3.根据权利要求1所述的适用于操作系统内核对象地址泄露的检测方法,其特征在于,所述函数接口标记步骤:
借助编译器分析技术,在内核态代码中找到和用户空间交换数据的函数接口或通过用户在源代码中加标记指定。
4.根据权利要求1所述的适用于操作系统内核对象地址泄露的检测方法,其特征在于,所述数据分析步骤:
根据获取的函数接口,通过分析该函数接口的参数或通过用户指定,获取传递到用户空间的数据的起始地址的变量和传递数据的大小,通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针;传递的数据的大小包括:一个固定的常数、一个数值变量;
所述通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针:
根据获取的数据的起始地址的变量和传递数据的大小,储存该数据起始地址的变量是一个指针,通过该指针指向的数据类型和传递数据的大小变量进行数据流分析,得到该指针指向的数据类型以及传递数据的大小,从而判断传递的数据中是否包含指针。
5.根据权利要求1所述的适用于操作系统内核对象地址泄露的检测方法,其特征在于,所述内核指针判断步骤:
所述处理器的特性指:SMAP处理器特性用途是禁止内核因为自身错误而访问用户空间的数据,以避免内核漏洞所导致的安全隐患;
操作系统内核提供了对这种处理器的特性的支持,如果在内核态访问用户空间的数据,会造成内核出错,默认情况下内核态是不访问空间的数据的;
在处理器开启的情况下,如果一个指针在内核态被解引用,访问了该指针指向位置的数据,则判定该指针一定是内核态指针。
6.根据权利要求1所述的适用于操作系统内核对象地址泄露的检测方法,其特征在于,所述地址泄露检测步骤:
过滤掉所有在调试用选项开启时的上下文:在调试的时候,内核指针的地址是开发者故意传递到用户空间供调试目的用的,通过函数名判断该函数名是否包含调试目的的字眼及源代码信息,从而过滤掉所有调试用的上下文;
所述源代码信息指泄露的地点在调试专用的分支中。
7.一种适用于操作系统内核对象地址泄露的检测系统,其特征在于,包括:
函数接口标记模块:标记所有内核与用户空间交换数据的函数接口;
数据分析模块:根据获取的函数接口,通过编译器分析传输到用户空间的数据中是否包含指针:若包含,则调用内核指针判断模块;若不包含,则表明该数据不泄露内核对象地址,直接返回继续分析下一待分析数据;
内核指针判断模块:根据当前处理器的特性和内核指针在内核代码中的特点,判断分析得到的指针是否为内核指针:如果是内核指针,则进入地址泄露检测模块继续执行;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据;
地址泄露检测模块:通过过滤掉调试专用的上下文,从而检测在非调试环境下是否有内核对象地址泄露到用户空间:若有,则判定存在内核对象地址泄露;否则表明该数据不泄露内核对象地址,直接返回继续分析下一个待分析数据。
8.根据权利要求7所述的适用于操作系统内核对象地址泄露的检测系统,其特征在于,所述函数接口标记模块:
采用编译器分析技术或用户标记的方法,标记所有内核与用户空间交换数据的函数接口;
所述函数接口标记模块:
借助编译器分析技术,在内核态代码中找到和用户空间交换数据的函数接口或通过用户在源代码中加标记指定。
9.根据权利要求7所述的适用于操作系统内核对象地址泄露的检测系统,其特征在于,所述数据分析模块:
根据获取的函数接口,通过分析该函数接口的参数或通过用户指定,获取传递到用户空间的数据的起始地址的变量和传递数据的大小,通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针;传递的数据的大小包括:一个固定的常数、一个数值变量;
所述通过数据的起始地址和大小计算传递到用户空间的数据中是否包括指针:
根据获取的数据的起始地址的变量和传递数据的大小,储存该数据起始地址的变量是一个指针,通过该指针指向的数据类型和传递数据的大小变量进行数据流分析,得到该指针指向的数据类型以及传递数据的大小,从而判断传递的数据中是否包含指针。
10.根据权利要求7所述的适用于操作系统内核对象地址泄露的检测系统,其特征在于,所述内核指针判断模块:
所述处理器的特性指:SMAP处理器特性用途是禁止内核因为自身错误而访问用户空间的数据,以避免内核漏洞所导致的安全隐患;
操作系统内核提供了对这种处理器的特性的支持,如果在内核态访问用户空间的数据,会造成内核出错,默认情况下内核态是不访问空间的数据的;
在处理器开启的情况下,如果一个指针在内核态被解引用,访问了该指针指向位置的数据,则判定该指针一定是内核态指针;
所述地址泄露检测模块:
过滤掉所有在调试用选项开启时的上下文:在调试的时候,内核指针的地址是开发者故意传递到用户空间供调试目的用的,通过函数名判断该函数名是否包含调试目的的字眼及源代码信息,从而过滤掉所有调试用的上下文;
所述源代码信息指泄露的地点在调试专用的分支中。
CN201911268776.0A 2019-12-11 2019-12-11 适用于操作系统内核对象地址泄露的检测方法及系统 Active CN111143851B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911268776.0A CN111143851B (zh) 2019-12-11 2019-12-11 适用于操作系统内核对象地址泄露的检测方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911268776.0A CN111143851B (zh) 2019-12-11 2019-12-11 适用于操作系统内核对象地址泄露的检测方法及系统

Publications (2)

Publication Number Publication Date
CN111143851A true CN111143851A (zh) 2020-05-12
CN111143851B CN111143851B (zh) 2023-08-08

Family

ID=70518056

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911268776.0A Active CN111143851B (zh) 2019-12-11 2019-12-11 适用于操作系统内核对象地址泄露的检测方法及系统

Country Status (1)

Country Link
CN (1) CN111143851B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113010899A (zh) * 2021-04-16 2021-06-22 上海交通大学 一种php反序列化漏洞利用链检测方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102467473A (zh) * 2010-11-03 2012-05-23 Tcl集团股份有限公司 一种在用户空间和内核之间传输数据的方法和装置
US8225329B1 (en) * 2007-09-13 2012-07-17 Juniper Networks, Inc. Tail synchronized FIFO for fast user space packet access
CN104092743A (zh) * 2014-06-27 2014-10-08 清华大学 云环境下用户数据的保护方法及系统
CN104123233A (zh) * 2013-04-26 2014-10-29 华茂云天科技(北京)有限公司 一种虚拟机大容量内存共享方法
CN107229867A (zh) * 2017-06-12 2017-10-03 北京奇虎科技有限公司 内核漏洞挖掘方法、装置、计算设备及计算机存储介质
US20190318081A1 (en) * 2018-04-16 2019-10-17 International Business Machines Corporation Injecting trap code in an execution path of a process executing a program to generate a trap address range to detect potential malicious code

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8225329B1 (en) * 2007-09-13 2012-07-17 Juniper Networks, Inc. Tail synchronized FIFO for fast user space packet access
CN102467473A (zh) * 2010-11-03 2012-05-23 Tcl集团股份有限公司 一种在用户空间和内核之间传输数据的方法和装置
CN104123233A (zh) * 2013-04-26 2014-10-29 华茂云天科技(北京)有限公司 一种虚拟机大容量内存共享方法
CN104092743A (zh) * 2014-06-27 2014-10-08 清华大学 云环境下用户数据的保护方法及系统
CN107229867A (zh) * 2017-06-12 2017-10-03 北京奇虎科技有限公司 内核漏洞挖掘方法、装置、计算设备及计算机存储介质
US20190318081A1 (en) * 2018-04-16 2019-10-17 International Business Machines Corporation Injecting trap code in an execution path of a process executing a program to generate a trap address range to detect potential malicious code

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李高坤: "Android系统漏洞检测和利用方法的研究与实现" *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113010899A (zh) * 2021-04-16 2021-06-22 上海交通大学 一种php反序列化漏洞利用链检测方法
CN113010899B (zh) * 2021-04-16 2022-06-07 上海交通大学 一种php反序列化漏洞利用链检测方法

Also Published As

Publication number Publication date
CN111143851B (zh) 2023-08-08

Similar Documents

Publication Publication Date Title
CN109583200B (zh) 一种基于动态污点传播的程序异常分析方法
US10380343B1 (en) System and method for programmatic runtime de-obfuscation of obfuscated software utilizing virtual machine introspection and manipulation of virtual machine guest memory permissions
JP4518564B2 (ja) 不正コード実行の防止方法、不正コード実行の防止用プログラム、及び不正コード実行の防止用プログラムの記録媒体
US8539593B2 (en) Extraction of code level security specification
CN109784062B (zh) 漏洞检测方法及装置
US7711914B2 (en) Debugging using virtual watchpoints
US10599558B1 (en) System and method for identifying inputs to trigger software bugs
CN108197476B (zh) 一种智能终端设备的漏洞检测方法及装置
Zou et al. {Syzscope}: Revealing {high-risk} security impacts of {fuzzer-exposed} bugs in linux kernel
CN108920253B (zh) 一种无代理的虚拟机监控系统和监控方法
CN112733150A (zh) 一种基于脆弱性分析的固件未知漏洞检测方法
CN113497809A (zh) 基于控制流和数据流分析的mips架构漏洞挖掘方法
CN113760770B (zh) 基于自动静态资源检测的反调试方法和系统
CN118567971A (zh) 用于测试计算机程序的方法
CN104750602B (zh) 一种动态污点数据分析方法及装置
CN111143851B (zh) 适用于操作系统内核对象地址泄露的检测方法及系统
CN117725583A (zh) 基于虚拟机自省的Linux恶意代码检测方法与系统
CN115795489B (zh) 一种基于硬件级进程跟踪的软件漏洞静态分析方法及装置
Harzevili et al. Automatic Static Vulnerability Detection for Machine Learning Libraries: Are We There Yet?
CN111931191A (zh) Linux平台二进制软件堆溢漏洞动态检测方法及系统
CN109726115B (zh) 一种基于Intel处理器跟踪的反调试自动绕过方法
RU168346U1 (ru) Устройство выявления уязвимостей
CN112287353B (zh) 一种漏洞检测方法、终端及存储介质
WO2019212757A1 (en) Static software analysis tool approach to determining breachable common weakness enumerations violations
Wang et al. Detecting data races in interrupt-driven programs based on static analysis and dynamic simulation

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