CN100465853C - 基于程序内部行为监控的软件安全保障的方法 - Google Patents

基于程序内部行为监控的软件安全保障的方法 Download PDF

Info

Publication number
CN100465853C
CN100465853C CNB2004100657109A CN200410065710A CN100465853C CN 100465853 C CN100465853 C CN 100465853C CN B2004100657109 A CNB2004100657109 A CN B2004100657109A CN 200410065710 A CN200410065710 A CN 200410065710A CN 100465853 C CN100465853 C CN 100465853C
Authority
CN
China
Prior art keywords
program
function
operating system
loader
software security
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.)
Expired - Fee Related
Application number
CNB2004100657109A
Other languages
English (en)
Other versions
CN1605968A (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.)
Nanjing University
Original Assignee
Nanjing 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 Nanjing University filed Critical Nanjing University
Priority to CNB2004100657109A priority Critical patent/CN100465853C/zh
Publication of CN1605968A publication Critical patent/CN1605968A/zh
Application granted granted Critical
Publication of CN100465853C publication Critical patent/CN100465853C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于程序内部行为监控的软件安全保障的方法,其步骤是:1.语言代码分析器分析程序的控制流,并添加描述控制流转换代码,添加程序的协助保护功能,然后编译成可执行程序;2.处理过的程序递交给程序加载器,判断当前程序是否具有保护功能,如果有则加载适当的运行环境,否则转到4;3.向操作***递交该进程的保护信息并设置该程序进程的保护标志为真;4.操作***内核一旦获得控制权利,则判断进程的保护标志,如果为假转到7;5.操作***内核检查该进程控制流转换的一致性,如果不一致,发出安全警告,并杀死进程,转到7;6.继续运行进程;7.结束。本发明的显著优点是提高了安全保障方法的精确性和通用性。

Description

基于程序内部行为监控的软件安全保障的方法
一、技术领域
本发明涉及一种计算机***安全(system security)保障方法,特别是一种软件不因为本身自带的漏洞而受到攻击所提供的安全保障方法。
二、背景技术
软件的安全问题是指由于软件的研究、设计、开发、测试,以及使用过程中的缺陷而造成的安全漏洞(security flaws)。攻击者可能利用这些漏洞使得软件的运行偏离原本设计的意图来达到特有的攻击目的,典型的例子包括缓冲区溢出(buffer overflow)漏洞,格式化串(format string)错误,malloc/free错误等。随着计算机应用和互联网的迅速发展,计算机之间的交互不断增强,软件的安全问题已成为计算机***安全的最大问题所在。目前解决此问题的方法大致分两类:一是针对已知漏洞的方法,二是程序的行为管理。前者缺乏通用性,每种方法都只能防范一小部分的攻击,并且对于未知攻击类型毫无作用;后者的分析粒度比较有相当精确度的损失,即较高的漏报率和错报率。这两种方法都已经在现实中有了一定程度的应用,两种方法的代表作有Immunix Secured OS、Computer Misuse DetectionSystem等。
三、发明内容
1、发明目的:本发明的目的是为了弥补目前防范软件漏洞攻击的两类方法通用性和精确程度难以结合的不足,提供了一种基于程序内部行为监控的同时具有很高的精确性和通用性的方法。
2、技术方案:为了实现本发明所述目的,本发明从操作***环境的角度来提供对经过特别处理的程序的攻击防护,其方法包括以下步骤:
(1)C语言代码分析器分析程序的控制流,并在关键位置(分为:函数调用点、被调用函数入口、函数返回点)添加描述控制流转换代码,添加程序的协助保护功能,然后按照正常方式编译成可执行程序;
(2)处理过的程序递交给程序加载器,程序加载器判断当前程序是否具有保护功能,如果有则加载辅助计算控制流转和向操作***递交控制流转信息的运行环境,如果没有转到步骤(4);
(3)向操作***递交该进程的保护信息并设置该程序进程的保护标志为真;
(4)操作***内核在整个***运行中一旦获得控制权利,则立即判断当前进程的保护标志,如果为假转到步骤(7);
(5)操作***内核检查该进程控制流转换的一致性,如果不一致,发出安全警告,并杀死进程,转到步骤(7);
(6)继续运行进程;
(7)保护机制结束。
在具体***实现中,即构建一个具有以上安全保障特性的操作***环境,构建的方法按照以下的流程:
(1)改造通用操作***内核,添加监控机制;
(2)构造C语言分析器或者修改编译器,使其具有分析控制流和添加合适代码的功能;
(3)从源代码重新创建可运行的程序,在这个过程中自动添加描述控制流的代码;
(4)修改***程序加载器和运行库,提供对这种特殊的添加了保护特性的程序的加载和运行提供支持;
(5)将以上的各部分按照以上描述的保护机制的总体步骤整合成一个一致的操作***环境。
本发明的主要思想是通过分析程序的控制流转换,给普通程序添加描述控制流转换的代码,通过操作***内核来监控程序的运行,达到判断一个程序是否收到攻击的目的。该方法一个非常重要的出发点,也是目前几乎所有攻击的一个共性,就是对程序正常控制流的篡改。
3、有益效果:本发明的显著优点是克服了现有两类方法防范软件漏洞攻击的通用性和精确程度难以结合的不足,提高了安全保障方法的精确性和通用性。
四、附图说明
图1是C语言程序转换的流程图。
图2是***程序加载器工作流程图。
图3是***内核状态转换和执行流程图。
图4是***构造及总体工作流程图。
五、具体实施方式
为了更好地说明整个构建基于程序内部行为监控保护机制的操作***环境的具体实施方式,首先需要简单引入一些原理和概念。
1、控制流——函数调用关系图。
一个程序的执行通常由一系列顺序执行的语句或指令所连接的函数调用所组成,如果把一个程序的函数看作这样的相对独立的指令序列块,对于这个指令块有统一的入口点(entry point)和出口点(return point),并把所有函数的入/出口点,以及函数调用指令都缩减成图的节点,把连接这些节点的顺序指令看作节点间的路径,那么就称之为一个程序的函数调用关系图。
2、等价调用关系——简单函数调用轨迹。
为了构造简单函数调用轨迹,首先需要对call graph的信息做一定的转换。
等价调用关系计算方法是:
假设调用关系图G中调用点表示为Ci(i=1…N)函数的表示为Fj(j=1…M),Ci→Fj表示在call graph中存在一条由Ci到Fj的调用关系边。将G按照以下的算法转换为G’:对于一个调用点Ci和它所调用关系所指向的集合F,如果存在任何其他调用点的调用关系Ck→Fh,且Fh∈F,则添加Ci→Fh到G’中。重复这个过程直到没有新边添加为止。将同一个调用点指向的函数称为“等价调用函数集合”,而所有指向同一个等价调用函数结合的调用点为“等价调用点集合”,它们之间的关系为“等价调用关系”。类似的,可以构造“等价返回函数集合”、“等价返回点集合”以及“等价返回关系”并说明它们的类似特性。
在此基础上,构造运行时候的“简单函数调用轨迹”:
对于所有程序中每一个“等价调用关系”赋值不同的标识数,并定义等价调用关系标识数的集合为IN,类似定义等价返回标识数集合OUT,它的简单函数调用轨迹是如下产生的两组整数数字序列对(调用序列对Ii、I’i;返回序列对Oi、O’i):
I i = n i = 0 f ( a , I i - 1 ) i > 0   I ′ i = n i = 0 f ( a ′ , I ′ i - 1 ) i > 0  (公式一)
O i = m i = 0 g ( b , O i - 1 ) i > 0   O ′ i = m i = 0 g ( b ′ , O ′ i - 1 ) i > 0  (公式二)
其中,I为索引值,表示函数运行时候函数调用或者返回的次数。n、m为两个数列对的初始值,可以为任何整数,a,a’∈IN分别为本次的函数调用点和本次被调用返回函数所在“等价调用关系”(等价返回关系)的标识数。b,b’∈IN分别为本次的返回函数和本返回点所在“等价调用关系”(等价返回关系)的标识数。调用序列函数f(a,b),与返回序列函数g(x,y)为使得所生成的Ii、Oi满足以下条件的任意函数:
∀ i , j i ≠ → I i ≠ I j 且Oi≠Oj                (条件一)
Figure C200410065710D00076
  (条件二)。
本发明的流程:
本发明的三个重要组成部分是:C程序转换器、程序加载器和监控内核。它们分别来自通用的C语言分析器(CIL)、通用程序加载器(ld.so)和通用操作***内核(Linux kernel 2.4.x)。为了更好的说明本发明的工作流程,我们将分别具体说明该三个主要组成部分的内部工作流程,然后再描述由这三个部分组成的整体工作流程。
1、C语言源码程序的保护机制的添加流程。
一个C语言源码的程序首先需要通过本发明的C语言分析器进行转换,C语言分析和添加保护代码的步骤如图1所示。首先扫描所有程序的C语言源文件,分析整个程序的函数调用关系,以一定格式记录(步骤10)。然后,根据所得的函数调用关系按照前面部分所介绍的等价调用关系计算法计算所有等价调用(返回)关系,并为每一个等价关系分配一个唯一的标识数(步骤11)。接着,根据标识数选择满足条件一、二的序列函数f(x,y)和g(x,y)(步骤12),这两个函数的选择原则上是任意满足条件一、二的任何函数,实现当中最简单的选择可以是f(x,y)=g(x,y)=x+y。再接着,分析器将上面所得的标识数和序列函数组成计算简单函数调用轨迹的C语言源代码并***程序中适当的部位(步骤13)。所添加代码的主要任务是按照概念介绍部分的公式一和公式二计算简单函数调用轨迹序列。最后得到一个添加了保护机制的程序的C语言的源代码,通过***编译器编译成具有保护功能的程序可执行程序。
2、保护程序加载器工作流程。
保护程序加载器是在通用程序加载器的基础上添加对受保护程序识别和运行时候支持的功能而产生的程序加载器。它的简单工作流程如图2所示。程序加载器通过发现可执行程序是否特别加载了某些库来判断它是否已经被添加了本发明的保护机制(步骤14)。如果是,就通过操作***的特殊***调用将需要监控的信息递交给操作***作为该进程的相关信息保存,然后设置进程的保护标志为真(步骤15),并将保护机制需要的支撑库加载入进程寻址空间(步骤16),支撑库的作用是为受保护程序中的计算简单函数轨迹而由转换器添加的代码的提供辅助,具体功能和内容可以视转换器所添加的代码的功能而定。最后继续一般程序加载器的工作(步骤17)。如果加载器发现该程序为一个普通程序,则执行一般加载器的工作,进而保证了加载器对一般程序的兼容性。
3、***内核状态转换和执行流程。
本发明的操作***内核的主要工作是监控一个受保护程序的正常运行,它的主要状态转换和执行流程如图3,内核的监控代码全部运行于有特殊权限的***空间。运行于用户空间的进程可能通过***调用或者由于中断的发生陷入***空间,导致内核取得CPU控制权限(步骤18),内核立即进行检查,看是否当前进程属于被保护进程(步骤19),如果是,则检查调用序列对Ii、I’i和返回序列对Oi、O’i是否一致(步骤20),如果不一致就作为受到攻击的情况处理(步骤21),具体处理可以包括杀死或停止进程以及发出攻击警告。内核执行流的最后为通用内核的正常事务处理(步骤22),包括***调用、中断处理代码,任务调度等等。整个流程可以保证***内核对程序监控的实时的性。
4、本发明总体工作流程。
整个***构建的构建步骤以及工作流程如图4,需要保护的程序的C语言源码首先经过本发明的C语言转换器转换为添加了保护机制的C语言程序源码(步骤210),它的内部工作流程如前面第1节所述(步骤10~13);紧接着,添加了保护机制的C语言程序源码经过通用编译器(gnu cc)编译成为添加了保护机制的二进制可执行文件(步骤220),该二进制文件经由本发明的程序加载器加载,进入操作***成为等待运行的含有保护机制的普通用户进程(步骤230),加载器的内部流程如前面第2节所述(步骤14~17)。本发明的操作***内核将该等待运行的进程执行,并实时监控它的简单函数调用序列是否一致,以此作为受到攻击的判断(步骤240),本发明内核的内部工作流程如前面第3节所述(步骤18~步骤22)。
程序在受到攻击的情况下将被本发明***内核杀死,进而作为被杀死的进程推出***,或者正常运行结束自动推出***,从而结束整个程序在整个***中的生命周期。本发明的总体工作流程完整涵盖此生命周期。

Claims (7)

1、一种基于程序内部行为监控的软件安全保障的方法,其特征在于该方法包括以下步骤:
(1)C语言代码分析器分析程序的控制流,并在函数调用点、被调用函数入口、函数返回点添加描述控制流转换代码,添加程序的协助保护功能,然后按照正常方式编译成可执行程序;
(2)处理过的程序递交给程序加载器,由程序加载器加载成为进程,其中,程序加载器判断被加载程序是否具有协助保护功能,如果否,则继续一般程序加载器的工作并转到步骤(4);如果是,则继续步骤(3);
(3)加载辅助计算控制流转换信息的运行环境以及向操作***递交控制流转信息的运行环境,向操作***递交该进程的保护信息并设置该进程的保护标志为真;
(4)操作***内核取得CPU控制权限,则判断当前进程的保护标志,如果为假转到步骤(7);
(5)操作***内核检查当前进程的控制流转换信息的一致性,如果一致则转到步骤(7);
(6)作为攻击情况处理;
(7)操作***内核正常事务处理。
2、根据权利要求1所述的基于程序内部行为监控的软件安全保障的方法,其特征在于在步骤(1)中:
(10)首先扫描所有程序的C语言源文件,分析整个程序的函数调用关系,以一定格式记录;
(11)根据所得的函数调用关系计算所有等价调用/返回关系,并为每一个等价关系分配一个唯一的标识数;
(12)根据标识数选择满足条件的序列函数f(x,y)和g(x,y),其中f(x,y)、g(x,y)分别为调用序列函数和返回序列函数;
(13)分析器将上面所得的标识数和序列函数组成计算简单函数调用轨迹的C语言源代码并***程序中适当的部位。
3、根据权利要求1所述的基于程序内部行为监控的软件安全保障的方法,其特征在于在步骤(2)中的由程序加载器加载成为进程的步骤具体为:
(14)程序加载器通过发现可执行程序是否加载了某些库来判断它是否已经被添加了协助保护功能,如果否继续一般程序加载器的工作,并转到步骤(4);如果是,则转至(3),(3)的详细步骤是(15)、(16)、(17);
(15)通过操作***的特殊***调用将需要监控的信息递交给操作***作为该进程的保护信息保存,然后设置进程的保护标志为真;
(16)将保护机制需要的支撑库加载入进程寻址空间;
(17)继续一般程序加载器的工作。
4、根据权利要求1所述的基于程序内部行为监控的软件安全保障的方法,其特征在于在步骤(4)中:
(18)操作***内核取得CPU控制权限;
(19)操作***内核立即进行检查,看是否当前进程属于被保护进程即进程的保护标志是否为真,如果否转到步骤(7)。
5、根据权利要求1所述的基于程序内部行为监控的软件安全保障的方法,其特征在于在步骤(5)中:
(20)检查调用序列对Ii、I’i和返回序列对Oi、O’i是否一致,如果一致则转步骤(7)。
6、根据权利要求1所述的基于程序内部行为监控的软件安全保障的方法,其特征在于在步骤(6)中:
(21)作为受到攻击的情况处理,可以包括结束或停止进程以及发出攻击警告。
7、根据权利要求1所述的基于程序内部行为监控的软件安全保障的方法,其特征在于在步骤(7)中:
(22)通过内核的正常事务处理,包括***调用、中断处理代码、任务调度。
CNB2004100657109A 2004-11-15 2004-11-15 基于程序内部行为监控的软件安全保障的方法 Expired - Fee Related CN100465853C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2004100657109A CN100465853C (zh) 2004-11-15 2004-11-15 基于程序内部行为监控的软件安全保障的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2004100657109A CN100465853C (zh) 2004-11-15 2004-11-15 基于程序内部行为监控的软件安全保障的方法

Publications (2)

Publication Number Publication Date
CN1605968A CN1605968A (zh) 2005-04-13
CN100465853C true CN100465853C (zh) 2009-03-04

Family

ID=34764771

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2004100657109A Expired - Fee Related CN100465853C (zh) 2004-11-15 2004-11-15 基于程序内部行为监控的软件安全保障的方法

Country Status (1)

Country Link
CN (1) CN100465853C (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1983296B (zh) * 2005-12-12 2010-09-08 北京瑞星信息技术有限公司 用于防止非法程序窃取用户信息的方法及装置
CN100446023C (zh) * 2006-04-26 2008-12-24 何波 一种对程序执行器的程序信息的保护方法
EP1936532B1 (en) * 2006-12-21 2009-07-29 Telefonaktiebolaget LM Ericsson (publ) Obfuscating computer program code
CN103150505A (zh) * 2007-10-15 2013-06-12 北京瑞星信息技术有限公司 对目标进程进行保护的方法
CN101446905B (zh) * 2008-12-29 2012-06-27 飞天诚信科技股份有限公司 编译方法
CN101986326A (zh) * 2010-12-01 2011-03-16 浙江核新同花顺网络信息股份有限公司 保护软件安全的方法及装置
CN108351938B (zh) * 2015-10-29 2022-02-08 惠普发展公司,有限责任合伙企业 校验针对程序代码的一部分所计算的安全值的装置、***和方法
CN105868626B (zh) * 2016-03-25 2018-10-02 中国人民解放军信息工程大学 基于控制流粗粒度完整性的监控软件业务行为的方法
CN109711153B (zh) * 2018-12-26 2021-03-19 北京北信源信息安全技术有限公司 一种windows进程保护方法及***
KR102491925B1 (ko) * 2021-02-26 2023-01-26 고려대학교 산학협력단 프로그램 분석 장치 및 방법

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000052580A1 (en) * 1999-03-04 2000-09-08 Origins Software Company Automatic consistency checking of computer programs
CN1381785A (zh) * 2001-04-13 2002-11-27 互慧科技股份有限公司 软件诊断***与方法
WO2003027851A1 (fr) * 2001-09-24 2003-04-03 Gemplus Procede et dispositif de verifieur de code optimise
CN1506830A (zh) * 2002-12-13 2004-06-23 英业达股份有限公司 可弹性扩展维护的检测***及其方法
CN1506829A (zh) * 2002-12-06 2004-06-23 中国科学院计算技术研究所 预防软件由于长时间运行而发生错误的方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000052580A1 (en) * 1999-03-04 2000-09-08 Origins Software Company Automatic consistency checking of computer programs
CN1381785A (zh) * 2001-04-13 2002-11-27 互慧科技股份有限公司 软件诊断***与方法
WO2003027851A1 (fr) * 2001-09-24 2003-04-03 Gemplus Procede et dispositif de verifieur de code optimise
CN1506829A (zh) * 2002-12-06 2004-06-23 中国科学院计算技术研究所 预防软件由于长时间运行而发生错误的方法
CN1506830A (zh) * 2002-12-13 2004-06-23 英业达股份有限公司 可弹性扩展维护的检测***及其方法

Also Published As

Publication number Publication date
CN1605968A (zh) 2005-04-13

Similar Documents

Publication Publication Date Title
Lattner et al. Making context-sensitive points-to analysis with heap cloning practical for the real world
Chen et al. Compiler support for speculative multithreading architecture with probabilistic points-to analysis
Vahabzadeh et al. Fine-grained test minimization
Mosier et al. Axiomatic hardware-software contracts for security
Chin et al. Analysing memory resource bounds for low-level programs
CN100465853C (zh) 基于程序内部行为监控的软件安全保障的方法
Dor et al. Software validation via scalable path-sensitive value flow analysis
Slabý et al. Checking properties described by state machines: On synergy of instrumentation, slicing, and symbolic execution
Wang et al. Locating vulnerabilities in binaries via memory layout recovering
Lin et al. Graph-based seed object synthesis for search-based unit testing
Gadelha et al. SMT-based refutation of spurious bug reports in the clang static analyzer
Schrijvers et al. Abstract interpretation for constraint handling rules
Eslamimehr et al. Efficient detection and validation of atomicity violations in concurrent programs
Saumya et al. Xstressor: Automatic generation of large-scale worst-case test inputs by inferring path conditions
Gao et al. Effective test generation for combinatorial decision coverage
Cheng et al. Precise sparse abstract execution via cross-domain interaction
Ferrara et al. CIL to Java-bytecode translation for static analysis leveraging
Parygina et al. Strong optimistic solving for dynamic symbolic execution
Kreindl et al. Dynamic taint analysis with label-defined semantics
Wildmoser et al. Prototyping proof carrying code
Xi et al. An approach of coarse-grained dynamic slice for Java program
Antoniol et al. Impact of function pointers on the call graph
Delamare et al. Vidock: a tool for impact analysis of aspect weaving on test cases
Pereira et al. Beetle: A feature-based approach to reduce staleness in profile data
Johnsen et al. Regression verification of AADL models through slicing of system dependence graphs

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20090304

Termination date: 20091215