CN113918948A - 一种基于语义分析的无害化处理识别方法 - Google Patents
一种基于语义分析的无害化处理识别方法 Download PDFInfo
- Publication number
- CN113918948A CN113918948A CN202111513722.3A CN202111513722A CN113918948A CN 113918948 A CN113918948 A CN 113918948A CN 202111513722 A CN202111513722 A CN 202111513722A CN 113918948 A CN113918948 A CN 113918948A
- Authority
- CN
- China
- Prior art keywords
- function
- suspicious
- branch
- statement
- program
- 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
Links
Images
Classifications
-
- 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/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于语义分析的无害化处理识别方法,通过静态分析提取目标系统源码的自然语义与程序语义,并利用构建的程序语义特征模型识别无害化处理,能够有效识别无害化处理,提高了准确性。另外,这一方法可用于污点分析方法中进一步使用,对提高污点分析效率有显著效果,也能极大地降低基于污点分析的漏洞挖掘方法的误报率。
Description
技术领域
本发明涉及计算机安全技术领域,尤其涉及一种基于语义分析的无害化处理识别方法。
背景技术
输入型的漏洞是Web应用程序中最为普遍且威胁最大的漏洞类型之一,这一类漏洞通常是指由恶意的外部输入所引起的安全问题,比如SQL注入漏洞和XSS漏洞等。近几年,为检测这类漏洞,研究者提出很多方法对Web应用进行分析,其中,静态代码分析以其高效率的优点被广泛研究。这一方法能够在不运行程序的情况下,获取程序内部的结构和特性,进而分析程序中潜在的安全问题。在众多静态分析方法中,基于污点数据流分析的方法是一个研究热点。它对程序中的数据流动进行跟踪,根据数据的源头与使用是否到达敏感函数,判断是否存在安全风险。这一方法对于数据的源头与使用进行建模,和人工审计代码寻找漏洞时的方法相似,具备一定的准确性。然而,静态污点分析方法同样存在误报率较高的问题。
在目前的污点分析方法中,方法重点更偏向解决别名传播的分析问题,以提升污点分析的效果。无害化处理识别是污点分析的重要组成部分,也是污点分析结果是否有效的重要影响因素。在现有的无害化处理识别方法中,常使用的方法为库函数字典或关键字匹配。但实际上,由于Web应用的开发环境复杂,代码量大,难以确定一个有效的关键字集合对无害化处理进行有效识别。也就是说,现有的识别方法可能存在较多的漏报与误报,而这也会进一步影响到污点分析结果的准确性。
发明内容
为了克服上述现有技术的不足,本发明提供一种基于语义分析的无害化处理识别方法,能够准确识别源码中的无害化处理,构建一个较为精准的无害化处理集合,使污点分析结果与漏洞检测准确、高效。
本发明提供的技术方案是:一种基于语义分析的无害化处理识别方法,整个识别方法分为自然语义分析与程序语义分析两个部分:
自然语义分析:在这一步中,基于自然语义分析对数据变换、异常处理函数和返回错误代码进行初步识别。我们对收集的基础函数集中的函数名进行分词,并根据负向词分词得到新的可疑关键词集合,从而实现智能化的可疑关键词集合构建,针对分析目标构建更加完整的函数与语句集合。
程序语义分析:构建无害化处理程序语义模型,对通过自然语义分析得出的数据变换函数进一步过滤。使用程序语义分析对前一步骤中得到的结果进一步校验,过滤掉不符合条件的结果。之后,我们结合分析得到的数据变换函数、异常处理函数与返回错误代码集合,利用程序语义分析识别程序中的安全检查。
其中,自然语义分析部分执行如下步骤:
步骤1,收集数据变换函数、异常处理函数和返回错误代码初始集合,即初始无害化处理集合,并进行分词得到关键词集合;
步骤2,使用关键词集合对目标Web应用程序源码进行分析,并进行新一轮的分词,构建新的可疑关键词集合;
步骤3,根据步骤2中得到的可疑关键词集合对目标Web应用程序源码进行第二轮分析,构建可疑的数据变换函数、异常处理函数和返回错误代码集合,即可疑无害化处理集合。
程序语义分析部分包含回溯过滤、安全检查识别两个阶段。
步骤4,回溯过滤:对于可疑的数据变换函数,使用数据流分析获取其数据流图,判断是否满足无害化处理条件,若满足则保留,不满足则将其剔除;对于可疑的异常处理函数和返回错误代码,首先使用控制流分析获取程序的控制流图,进而对集合中的每一个可疑元素进行分析,判断是否符合类安全检查的语义模型,是则保留,否则删除该元素。
针对步骤3得到的可疑的数据变换函数集合,符合无害化处理的数据变换函数应满足如下条件:
(1)函数输入值经过函数内语句传播后,必须能够到达函数输出口,即返回值;
(2)函数内语句的操作对象,应和输入值直接或间接相关,函数内不应出现与输入值毫无关联的数据传播链。
而对于可疑的异常处理函数和返回错误代码集合,需在回溯过滤阶段根据是否符合类安全检查的语义模型进行进一步校验,对集合中的每一个元素进行分析。其中,所述类安全检查的语义模型具体如下:
假设分支语句整体为N,使用N(Rj)表示其中特定的一条分支语句,用表示
这一条分支中使用的函数与指令,上述可疑的异常处理函数与错误代码返回集合为D,Di为
该集合中的某一元素,NDi表示Di外的任意元素。如果Di满足类安全检查的语义模型,则:
and
即在一个分支语句中,如果部分分支包含Di,部分分支不包含Di,则Di服从类安全检查的语义模型。若一个可疑函数不满足类安全检查的语义模型,则一定不是异常处理函数。
步骤5,使用安全检查识别进一步识别无害化处理集合,在这一步骤中,需要对步骤4回溯过滤后得到的数据变换函数、异常处理函数和返回错误代码集合所处的代码片段进行分析,判断是否符合安全检查的语义模型。其中,安全检查的语义模型为:
假设分支语句整体为M,使用M(Ci) 表示其中特定的一条分支,则分支语句可能的情况为:
进而,如果分支语句M为一个无害化处理,则:
也就是说,如果一个条件语句的分支中有至少一个安全处理语句分支和正常程序分支,则这一个条件语句即为无害化处理。
本发明的有益效果是:
本发明提供一种基于语义分析的无害化处理识别方法,通过静态分析,提取目标系统源码的自然语义与程序语义,并利用构建的程序语义特征模型识别无害化处理,能够有效识别无害化处理,提高了准确性。另外,这一方法可用于污点分析方法中进一步使用,对提高污点分析效率有显著效果,也能极大地降低基于污点分析的漏洞挖掘方法的误报率。
附图说明
图1为本发明基于语义分析的无害化处理识别方法的流程框图。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
图1展现了本发明提出方法的工作流程,整个分析流程分为自然语义分析与程序语义分析两个部分:
自然语义分析:在这一步中,我们对数据变换函数、异常处理函数和返回错误代码进行初步识别。编程语言自带的函数可以很容易地从官方文档中找到。而处于编程规范的考虑,自定义的函数往往会使用一些相同的字符串,如“filter”、“safe”等。因此,我们提出基于自然语义分析进行自动化识别。我们对收集的基础函数集中的函数名进行分词,并根据负向词分词得到新的可疑关键词集合,从而实现智能化的可疑关键词集合构建,针对分析目标构建更加完整的函数与语句集合。
程序语义分析:我们通过构建语义模型,对通过自然语义分析得出的数据变换函数进一步过滤。使用程序语义分析对前一步骤中得到的结果进一步校验,过滤掉不符合条件的结果。之后,我们结合分析得到的数据变换函数、异常处理函数与返回错误代码集合,利用程序语义分析识别程序中的安全检查。
阶段一、自然语义分析
由于可疑关键词集合很难人为定义,因此仅通过关键词来识别可疑函数容易出现大量误报和漏报。此外,现有的方法无法针对特定应用开发人员的规范要求自动化构建关键词集合。
为了解决这个问题,我们将能确定的函数与语句进行分词,根据字符片段在确定集合中出现的的频率选取特征字段,进而实现可疑关键词集合的自动生成。
关键词集合构建的一大挑战在于,某些频率较高的函数名片段可能并无意义,比如开发者常使用的“to”、“get”等通用单词。为解决这一问题,我们对无害化处理的语义进行分析,发现无害化处理往往带有一些负向语义的片段(如“error”、“fail”等)。因此,在我们的方法中,我们会选择带有负向语义的高频词汇作为关键词集合。自然语义分析检测流程分为以下几个步骤:
①通过收集编程语言库函数集合,得到初始无害化处理集合即数据变换函数、异常处理函数和返回错误代码初始集合,并进行分词,将带有负向语义的高频词汇作为关键词集合;
②使用关键词集合对目标Web应用程序源码进行分析,得到具备这一Web应用开发人员规范特性的无害化处理集合,并进行新一轮的分词,构建可疑关键词集合;
③根据可疑关键词集合对目标Web应用程序源码进行第二轮分析,构建可疑无害化处理集合。
阶段二、程序语义分析
基于自然语义分析的识别结果中,往往存在一些误报,自然语义分析也无法对安全检查进行识别。因此,我们需要结合程序语义分析对结果进一步过滤,并对安全检查进行识别,添加到最终的无害化处理集合中。
步骤一、回溯过滤
正如前文的分析,无害化处理的各种类型都具备一些特定的语义特征,因此,我们可以根据语义特征对自然语义分析识别出的结果进行过滤。
(1)数据变换函数
我们发现,用于无害化处理的数据变换函数,往往具备相似的语义模式。这些函数除了对数据的变换操作外,其他多余的语句较少,并且输入值与输出值强相关。因此,符合无害化处理的数据变换函数应满足如下条件:
①函数输入值经过函数内语句传播后,必须能够到达函数输出口,即返回值;
②函数内语句的操作对象,应和输入值直接或间接相关,函数内不应出现与输入值毫无关联的数据传播链。
根据上述无害化处理语义模型,我们对数据变换操作进行过滤,主要使用数据流分析获取可疑函数的数据流图(DFG),从而判断函数是否满足以上两个条件,不满足则将其剔除。
(2)异常处理函数与返回错误代码:
这两者主要出现在安全检查中,且将用于后续的安全检查识别。而通过对安全检查的语义模型,我们可以反向推论得:在程序中,使用于安全检查的异常处理函数和返回错误代码,位于条件语句的某一分支中。因此我们可以通过识别它们所处的代码语义来判断,是否满足安全检查的语义模型。
在这一步中,因为此时我们并未获得最终的安全检查集合,所以我们定义了一种类安全检查的语义模型:
我们假设分支语句整体为N,使用 N(Rj) 表示其中特定的一条分支语句,用示这一条分支中使用的函数或指令;可疑的异常处理函数与返回错误代码集合为
D,Di为可疑集合中的某一元素,NDi表示Di外的任意元素。如果Di满足类安全检查的语义模
型,则:
and
即在一个分支语句中,如果部分分支包含Di,部分分支不包含Di,则N满足类安全检查的语义模型。若一个可疑函数不满足类安全检查的语义模型,则一定不是异常处理函数与返回错误代码。需要注意的是,这一条定义无法用来确定一个可疑函数是异常处理函数,但是可以确定一个可疑函数不是异常处理函数。因此,通过使用这一定义,我们可以筛掉可疑集合中的误报。
在具体实现时,我们需要获取程序中可疑元素的调用环境,因此首先需要分析获取程序的控制流图(CFG),进而对集合中每一个可疑元素进行分析,具体分析流程如下:
①构建程序控制流图,并对控制流图进行遍历;
②如果发现在某个程序中调用了可疑集合中的元素,则回溯找到父指令;
③判断父指令是否为IF或SWITCH等条件语句,如是则对分支进行检查;
④对条件语句每一个分支进行检查,判断是否符合类安全检查的语义模型,若满足,则保留该可疑元素;否则,删除该元素;
⑤继续分析下一个可疑元素调用情况。
步骤二、安全检查识别
在识别数据变换函数、异常处理函数和返回错误代码后,我们可以进一步识别程序中的安全检查语句。这一步的识别与上述回溯过滤方法类似,只是将可疑元素集改成了由回溯过滤后得到的集合。另外,在这一步骤的分析中,我们所使用的模型为安全检查的语义模型。所述安全检查的语义模型为:
假设分支语句整体为M,使用M(Ci) 表示其中特定的一条分支,则分支语句可能的情况为:
进而,如果分支语句M为一个无害化处理,则:
也就是说,如果一个条件语句的分支中有至少一个安全处理语句分支和正常程序分支,则这一个条件语句即为无害化处理。具体步骤如下:
①构建程序控制流图,并对控制流图进行遍历;
②如果发现在某个程序中使用了数据变换函数、异常处理函数或返回错误代码,则回溯找到父指令;
③判断父指令是否为IF或SWITCH等条件语句,如是则对分支进行检查;
④对条件语句每一个分支进行检查,判断是否符合安全检查的语义模型,若满足,则保留该可疑元素;否则,删除该元素;
⑤继续分析下一个元素。
Claims (7)
1.一种基于语义分析的无害化处理识别方法,分为自然语义分析与程序语义分析两个部分,其中:
所述自然语义分析部分执行如下步骤1)至3):
1) 收集数据变换函数、异常处理函数和返回错误代码初始集合,并进行分词得到关键词集合;
2) 使用关键词集合对目标Web应用程序源码进行分析,并进行新一轮的分词,构建新的可疑关键词集合;
3) 根据步骤2)得到的可疑关键词集合对目标Web应用程序源码进行第二轮分析,构建可疑的数据变换函数、异常处理函数和返回错误代码集合;
所述程序语义分析部分包含回溯过滤、安全检查识别两个阶段,执行如下步骤4)至5):
4) 回溯过滤:对于可疑的数据变换函数,使用数据流分析获取其数据流图,判断是否满足无害化处理条件,若满足则保留,不满足则将其剔除;对于可疑的异常处理函数和返回错误代码,首先使用控制流分析获取程序的控制流图,进而对集合中的每一个可疑元素进行分析,判断是否符合类安全检查的语义模型,是则保留,否则删除该元素;
5) 安全检查识别:对于回溯过滤后的数据变换函数、异常处理函数和返回错误代码集合,进一步识别程序中的安全检查语句,判断其是否符合安全检查的语义模型,是则保留,否则删除,得到最终的无害化处理集合。
2.如权利要求1所述的无害化处理识别方法,其特征在于,步骤1)通过收集编程语言库函数集合,得到数据变换函数、异常处理函数和返回错误代码初始集合,分词时将带有负向语义的高频词汇作为关键词集合。
3.如权利要求1所述的无害化处理识别方法,其特征在于,在步骤4)中,符合无害化处理的数据变换函数应满足如下条件:
① 函数输入值经过函数内语句传播后,必须能够到达函数输出口,即返回值;
② 函数内语句的操作对象,应和输入值直接或间接相关,函数内不应出现与输入值毫无关联的数据传播链。
5.如权利要求4所述的无害化处理识别方法,其特征在于,在步骤4)中,对于可疑的异常处理函数和返回错误代码集合,根据下述流程进行回溯过滤:
① 构建程序控制流图,并对控制流图进行遍历;
② 如果发现在某个程序中调用了可疑集合中的元素,则回溯找到父指令;
③ 判断父指令是否为条件语句,如是则对分支进行检查;
④ 对条件语句每一个分支进行检查,判断是否符合类安全检查的语义模型,若满足,则保留该元素;否则,删除该元素;
⑤ 继续分析下一个元素调用情况。
7.如权利要求6所述的无害化处理识别方法,其特征在于,步骤5)的具体处理流程为:
① 构建程序控制流图,并对控制流图进行遍历;
② 如果发现在某个程序中使用了数据变换函数、异常处理函数或返回错误代码,则回溯找到父指令;
③ 判断父指令是否为条件语句,如是则对分支进行检查;
④ 对条件语句每一个分支进行检查,判断是否符合安全检查的语义模型,若满足,则保留该可疑元素;否则,删除该元素;
⑤ 继续分析下一个元素。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111513722.3A CN113918948B (zh) | 2021-12-13 | 2021-12-13 | 一种基于语义分析的无害化处理识别方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111513722.3A CN113918948B (zh) | 2021-12-13 | 2021-12-13 | 一种基于语义分析的无害化处理识别方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113918948A true CN113918948A (zh) | 2022-01-11 |
CN113918948B CN113918948B (zh) | 2022-03-22 |
Family
ID=79248600
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111513722.3A Active CN113918948B (zh) | 2021-12-13 | 2021-12-13 | 一种基于语义分析的无害化处理识别方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113918948B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115134326A (zh) * | 2022-08-29 | 2022-09-30 | 中航信移动科技有限公司 | 用于生成待发送消息的数据处理装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017181628A1 (zh) * | 2016-04-19 | 2017-10-26 | 西安交通大学 | 一种基于符号计算的动态并行程序污点分析方法 |
CN113497809A (zh) * | 2021-09-07 | 2021-10-12 | 中国人民解放军国防科技大学 | 基于控制流和数据流分析的mips架构漏洞挖掘方法 |
-
2021
- 2021-12-13 CN CN202111513722.3A patent/CN113918948B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017181628A1 (zh) * | 2016-04-19 | 2017-10-26 | 西安交通大学 | 一种基于符号计算的动态并行程序污点分析方法 |
CN113497809A (zh) * | 2021-09-07 | 2021-10-12 | 中国人民解放军国防科技大学 | 基于控制流和数据流分析的mips架构漏洞挖掘方法 |
Non-Patent Citations (2)
Title |
---|
杜笑宇,叶何,文伟平: "《基于字节码搜索的Java反序列化漏洞调用链挖掘方法》", 《信息网络安全》 * |
秦彪: "《面向Android应用的静态污点分析结果的正确性验证》", 《计算机应用》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115134326A (zh) * | 2022-08-29 | 2022-09-30 | 中航信移动科技有限公司 | 用于生成待发送消息的数据处理装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113918948B (zh) | 2022-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107844705B (zh) | 基于二进制代码特征的第三方组件漏洞检测方法 | |
CN108268777B (zh) | 一种利用补丁信息进行未知漏洞发现的相似性检测方法 | |
Bao et al. | {BYTEWEIGHT}: Learning to recognize functions in binary code | |
CN111240982A (zh) | 源代码静态分析方法 | |
CN111240687A (zh) | 源代码静态分析装置 | |
US8589888B2 (en) | Demand-driven analysis of pointers for software program analysis and debugging | |
CN112000952B (zh) | Windows平台恶意软件的作者组织特征工程方法 | |
Awad et al. | Modeling malware as a language | |
CN112035359B (zh) | 程序测试方法、装置、电子设备及存储介质 | |
CN114861194B (zh) | 一种基于bgru与cnn融合模型的多类型漏洞检测方法 | |
Higo et al. | How often do unintended inconsistencies happen? Deriving modification patterns and detecting overlooked code fragments | |
CN113918948B (zh) | 一种基于语义分析的无害化处理识别方法 | |
CN111881300A (zh) | 面向第三方库依赖的知识图谱构建方法及系统 | |
CN113468525A (zh) | 针对二进制程序的相似漏洞检测方法及装置 | |
CN112307478A (zh) | 一种脚本病毒检测方法、系统及电子设备和存储介质 | |
Li et al. | PolyFax: a toolkit for characterizing multi-language software | |
Harzevili et al. | Automatic Static Vulnerability Detection for Machine Learning Libraries: Are We There Yet? | |
RU168346U1 (ru) | Устройство выявления уязвимостей | |
CN115438341A (zh) | 提取代码循环计数器的方法、装置、存储介质和电子设备 | |
CN115758388A (zh) | 一种基于低维字节码特征的智能合约的漏洞检测方法 | |
CN113392016A (zh) | 对程序异常情况处理的规约生成方法、装置、设备及介质 | |
CN114297664A (zh) | 一种基于Gradle的开源组件漏洞检测方法 | |
CN114925369A (zh) | 一种针对业务系统容器安全的静态分析方法与系统 | |
RU2500024C2 (ru) | Способ автоматизированного определения языка и (или) кодировки текстового документа | |
Xiong et al. | BUAA_AntiPlagiarism: A System To Detect Plagiarism for C Source Code |
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 |