CN110147673A - 一种基于文本和源代码符号提取的漏洞位置标注方法和装置 - Google Patents

一种基于文本和源代码符号提取的漏洞位置标注方法和装置 Download PDF

Info

Publication number
CN110147673A
CN110147673A CN201910249282.1A CN201910249282A CN110147673A CN 110147673 A CN110147673 A CN 110147673A CN 201910249282 A CN201910249282 A CN 201910249282A CN 110147673 A CN110147673 A CN 110147673A
Authority
CN
China
Prior art keywords
text
loophole
source code
source
software
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
CN201910249282.1A
Other languages
English (en)
Other versions
CN110147673B (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.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
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 Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN201910249282.1A priority Critical patent/CN110147673B/zh
Publication of CN110147673A publication Critical patent/CN110147673A/zh
Application granted granted Critical
Publication of CN110147673B publication Critical patent/CN110147673B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及一种基于文本和源代码符号提取的漏洞位置标注方法和装置。该方法的步骤包括:1)从漏洞描述文本中提取出<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组作为漏洞位置线索;2)对漏洞描述文本所在的网络资源链接进行分析和源代码符号提取,以对所述四元组进行补全,并获得源代码行集合;3)给定源代码项目的各版本代码,将源代码项目中所包含的信息与所述四元组、所述源代码行集合进行比对,以标注漏洞位置。本发明以网络资源上的漏洞描述文本作为标注信息源提取出漏洞位置线索,通过与源代码项目中的符号进行比对以标注漏洞位置,是相比现有的依赖于固定模式的相关方法更为通用的漏洞位置标注方法。

Description

一种基于文本和源代码符号提取的漏洞位置标注方法和装置
技术领域
本发明属于软件漏洞分析领域,涉及如何在软件源代码中对已知漏洞进行标注的方法和装置。
背景技术
网络资源上可持续获取到近期的漏洞信息,包括漏洞描述文本和漏洞修复前后版本的源代码项目等。这些漏洞信息中时常包含项目正式名称、相应项目版本、文件名称和函数名称等漏洞位置线索。在获取到位置线索之后,分析受影响版本的项目源代码,可以将漏洞标注至源代码语句上。进一步地,可从代码语句层面抽象出漏洞模式,比对确认该模式在其它源代码和二进制代码中是否存在,实现漏洞的传播分析。
然而,不管是从CVE(全称Common Vulnerability Enumeration)漏洞库等审核渠道,还是个人通过社交账号发布的非正式渠道,并无规范的文本格式来保证分析程序能直接解析获取到漏洞位置线索。因此,为获取漏洞位置线索并实现其在源代码语句上的标注,需要对非规范格式的漏洞描述文本进行解析,以从中提取出有用的文本符号,进一步比对确认源代码中漏洞的修补和删减语句。
与本发明最相似的有VUDDY(Kim S,Woo S,Lee H,et al.VUDDY:a scalableapproach for vulnerable code clone discovery[C]//Security and Privacy(SP),2017IEEE Symposium on.IEEE,2017:595-614.)、ReDeBug(Jang J,Agrawal A,BrumleyD.ReDeBug:finding unpatched code clones in entire os distributions[C]//Security and Privacy(SP),2012IEEE Symposium on.IEEE,2012:48-62.)方法构建其数据集时所采用的漏洞位置标注技术。但这两种方法所采用的技术是基于已收集的源代码项目版本间diff文件,根据diff文件直接获取前后版本的代码区别,以确定漏洞修补和删减语句。同时,这两种方法通过确认项目更新日志中是否存在CVE漏洞库编号,以判断是否需要应用diff文件开展分析,如通过“CVE-20”关键词直接搜索到日志中存在的CVE-2018-6187编号。这两种方法的局限性在于1)需获取到项目版本diff文件,且2)需要日志中存在CVE编号,方能在源代码语句上对漏洞位置进行标注,无法处理普遍性的情况。例如,CVE漏洞库中的文本描述很多时候并不反映在项目更新日志中,即版本间日志中很有可能并不包含其所修复漏洞的CVE编号,该两种方法均无法针对性地处理这一情形。
综上,现有的源代码漏洞位置标注研究未着重解决从漏洞描述源头提取位置线索的问题,仅仅能处理比较固定的情形,没有普适性。
发明内容
为了克服现有方法依赖于diff文件和特定更新日志的局限性,本发明提出一种文本和源代码符号提取比对的漏洞位置标注方法,从漏洞描述源头的文本信息中提取有用的符号信息,与源代码符号进行比对,将漏洞位置标注至源代码上。
本发明提出一种从漏洞描述文本中提取漏洞位置线索的通用方式,并分析源代码符号进行以定位漏洞,称之为“漏洞位置标注”方法。应用该方法需满足这样的前提条件:给定一份漏洞描述文本,该文本包含漏洞所涉及的软件或项目名称,且已拥有该软件或项目的含漏洞版本(或漏洞版本区间之一)的源代码。具体地,本发明从漏洞描述文本中提取出<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组作为漏洞位置线索,对漏洞描述文本所在网络资源链接进行分析和源代码符号提取,与给定软件或项目源代码进行位置比对标注。根据标注,可进一步比对其它源代码和二进制代码,开展漏洞传播分析。
本发明解决其技术问题所采用的技术方案是:
(1)从漏洞描述文本中提取出<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组作为漏洞位置线索。以英文漏洞描述进行说明,对于每一元线索,本发明总结出以下提取方式。
a)软件/项目名提取:漏洞描述文本通常仅用于形容一个软件/项目的漏洞,因此从文本中提取最有可能为软件/项目名的单词或词组符号。该线索的提取条件为
i)给定一本英文词典语料,软件/项目名在词典条目中不存在,或条目释义中包含software或同义解释关键词,如Linux通常被解释为system software;
ii)软件/项目名不能被认定为版本号、文件名、函数名或漏洞编号,如版本号4.17.1不是软件名;
iii)软件/项目名位于介词如in之后,且当遇到介词后存在多个连续单词的情况,在去掉副词等辅助性单词后将其组合为词组,共同作为软件/项目名称,如从in the Linuxkernel中提取的软件名为Linux kernel;
iv)软件/项目名对应的单词或词组符号在文本距离与版本号(或版本区间)相较其它候选符号更为接近,即相距版本号间隔的单词数目最少(或间隔单词数目一致,在文本序中先出现的单词或词组符号),如in the Linux kernel through 4.17.1,there is arace condition between fchownat and close in cases中的Linux kernel相较fchownat距离版本号4.17.1更近,故选定Linux kernel作为软件名。
其中,i)和ii)为必备条件,iii)和iv)为挑选唯一单词/词组符号作为软件/项目名的辅助条件。
b)版本号或区间提取:漏洞描述文本中时常包含漏洞所涉及的版本号或版本区间。该线索的提取条件为
v)认定版本号:单词符号中包含数字、希腊符号(如alpha或α等)、连接符(如-号、.号等),如3.1.1-alpha;
vi)认定版本区间:两个被认定为版本号的单词符号以单词to或连接符相连,且拥有共同前缀,如3.0.0to 3.1.1-alpha通过to连接,且拥有3.作为共同大版本号。
c)文件名列表提取:漏洞可能会涉及到一个或多个文件代码的修补和删除。该线索的提取条件为
vii)文件名通常包含斜杠/号,或反斜杠\号作为文件路径分隔符,如net/socket.c;
viii)文件名的结尾通常以特定语言的后缀名结束,如C语言以.c,.h等为后缀名;
ix)文件名常位于介词如in之后,前后时常包含file关键词作为前缀或后缀,如infile net/socket.c。
满足条件vii),viii)和ix)之一即可认定为其可能是文件名。
d)函数名列表提取:漏洞可能会涉及到一个或多个文件中多个函数代码的修补和删除。该线索的提取条件为
x)给定一本英文词典语料,函数名通常在词典条目中不存在,如函数名sock_close和sockfs_setattr在词典条目中无查询结果;
xi)函数名不能被认定为软件/项目名、版本号、文件名或漏洞编号,如软件/项目名Linux通常认为是函数名;
xii)函数名会在某些时候包含左右括号(),如描述文本Heap-Based BufferOverflow in function gdi_Bitmap_Decompress()中的gdi_Bitmap_Decompress();
xiii)文件名常位于介词如in之后,前后时常包含function关键词作为前缀或后缀,如描述文本the sock_close and sockfs_setattr functions后紧跟functions。
xiv)当软件名和函数名无法区分时,认定函数名对应的单词或词组符号在文本距离与文件名(或文件名列表)更为接近,即相距版本号间隔的单词数目最少。
(2)对漏洞描述文本所在的网络资源链接(URL)进行分析和源代码符号提取,以对所述四元组进行补全,并获得源代码行集合。对所在URL开展两层引用URL分析,即对URL表示页面中的内容进行解析,访问页面内容中出现的URL并开展分析;由于与当前漏洞的相关度随着分析URL层数变多而迅速下降,限定在两层以内。具体分析方式如下:
a)解析第一层URL:URL可能会部分包含软件/项目名,可用于解析确认四元组中的软件/项目名是否提取正确。如URL http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e4f3aa2e1e67bb48dfbaaf1cad59013d5a5bc276包含linux kernel这一名称。
b)第一层引用URL:区分页面的文本内容和代码内容部分,通常文本内容部分可通过查询判断英文词典语料阈值以上的单词符号有含义来判断(如超过85%以上的单词符号在词典条目中存在),而代码内容可通过编程语言的符号进行判断(如for/while/if等关键词,大括号{}等作用域符)
对于文本内容:在第(1)步流程提取四元组有缺项的情况下,采取第(1)步流程中的方式提取并补全<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组;
对于代码内容:对于代码进行逐行提取,去掉空格、换行以及回车等无编程含义的字符,形成针对源代码的检索符号列表。如代码中包含diff文件,对删减语句和增加语句进行标记,用于源代码版本匹配检索。
c)第二层引用URL:仅判断URL对应页面内容中是否包含diff文件。如有,则与第一层引用URL中的处理一致,提取去掉无编程含义字符后的删减语句和增加语句,同样用于源代码版本匹配检索。
(3)基于第(1)步和第(2)步中的文本和源代码符号提取,对漏洞位置进行比对标注。给定源代码项目各版本代码,具体执行<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组,以及提取的源代码行集合的比对,以标注漏洞位置。分别用标记<soft,ver,file,func>,code_set表示四元组和源代码行集合,用Text和Source分别表示解析漏洞描述文本及其URL页面的信息和源代码项目中包含的信息。比对如下:
a)对软件/项目名Text(soft)和Source(soft)进行部分比对,如Source(soft)包含于Text(soft)中,则认为软件/项目源代码存在,例如Source(soft)=’Linux’,Text(soft)=’Linux kernel’表示Linux源代码存在;
b)对版本号或区间Text(ver)和Source(ver)进行比对,缩小寻找漏洞位置的范围,例如区间Text(ver)=[‘3.0.0’,‘3.1.1-alpha’],同时Souce(ver)=’3.0.1’∈Text(ver);
c)对文件名列表Text(file)和Source(file)进行比对,在前述比对的基础上缩小寻找漏洞位置的范围,例如表示所提取文件名可在源代码中找到;
d)对函数名列表Text(func)和Source(func)进行比对,在前述比对的基础上缩小寻找漏洞位置的范围,例如表示所提取的函数名可在源代码中找到;
e)对源代码行集合Text(code_set)和Source(code_set)进行比对,在前述比对的基础上定位漏洞修补增加和删减语句。
除软件/项目名Text(soft)之外,其它Text(ver),Text(file),Text(func),Text(code_set)的缺失并不影响比对过程的进行。最终,通过比对,将尽可能的缩小漏洞位置范围并进行标注。
本发明还提供一种与上面方法对应的基于文本和源代码符号提取的漏洞位置标注装置,其包括:
文本提取模块,负责从漏洞描述文本中提取出<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组作为漏洞位置线索;
URL分析模块,负责对漏洞描述文本所在的网络资源链接进行分析和源代码符号提取,以对所述四元组进行补全,并获得源代码行集合;
符号比对模块,负责对于给定源代码项目的各版本代码,将源代码项目中所包含的信息与所述四元组、所述源代码行集合进行比对,以标注漏洞位置。
本发明还提供一种计算机,其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行上面所述方法中各步骤的指令。
本发明以网络资源上的漏洞描述文本作为标注信息源,提取出漏洞位置线索,通过与源代码项目中的符号进行比对以标注漏洞位置。相比依赖于固定模式的相关方法,本发明提供了一种更为通用的漏洞位置标注方法:1)方法VUDDY和ReDeBug在标注漏洞位置时,需拥有项目版本代码间的diff文件,版本更新日志需存在CVE编号,本发明能覆盖这类处理情形;2)在获取不到diff文件时,本发明的方法仍有可能将漏洞标注至相关的修补和删减语句上,或标注至函数、文件等较粗粒度的范围上;3)版本更新日志中有无漏洞库正式编号,如CVE编号,均不会影响本发明方法的应用效果。
附图说明
图1是本发明的实施流程图。
图2是漏洞CVE-2018-18710描述页面示例。
图3是针对漏洞CVE-2018-18710修复的代码版本间diff文件和日志。
具体实施方式
为了更好地说明本发明的工作流程,下面以发明人之一所发现的Linux内核漏洞(编号CVE-2018-18710)为例,阐述具体实施方式。图2为漏洞CVE-2018-18710的描述页面,其所提供的漏洞描述文本为”An issue was discovered in the Linux kernel through4.19.An information leak in cdrom_ioctl_select_disc in drivers/cdrom/cdrom.ccould be used by local attackers to read kernel memory because a cast fromunsigned long to int interferes with bounds checking.This is similar to CVE-2018-10940and CVE-2018-16658.”
图1是本发明的实施流程图,主要包括文本提取、URL分析、符号比对这三步流程。
第一步:文本提取。以漏洞描述文本为输入,提取生成<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组作为位置线索。选定牛津词典(https://developer.oxforddictionaries.com/)作为语料,该步具体按以下顺序执行四个分步骤:
1.版本号或区间提取。执行技术方案中的条件v)从CVE-2018-18710描述文本中所提取版本号Text(ver)=[‘4.19’];
2.文件名列表提取。先执行条件vii)和viii)提取出文件名drivers/cdrom/cdrom.c,再通过条件ix)进一步确认该文件名在介词in之后,得到Text(file)=[‘drivers/cdrom/cdrom.c’];
3.软件/项目名提取。首先,经技术方案中的条件i)判断,从CVE-2018-18710所提取出的候选软件/项目名集合为{‘Linux’,‘4.19’,‘cdrom_ioctl_select_disc’,‘drivers/cdrom/cdrom.c’};其次,经过条件ii)排除为{‘Linux’,‘cdrom_ioctl_select_disc’};然后,经过条件iii)判断改为{‘Linux kernel’,‘cdrom_ioctl_select_disc’};最后,经过条件iv)判断得到Text(soft)=’Linux kernel’;
4.函数名列表提取。经过条件x),xi)和xii)判断得到Text(func)=[‘cdrom_ioctl_select_disc’],经过条件xiii)和xiv)辅助判断仍维持不变。
经过文本提取,得到CVE-2018-18710的位置线索四元组为<’Linux kernel’,[‘4.19’],[‘drivers/cdrom/cdrom.c’],[‘cdrom_ioctl_select_disc’]>。
第二步:URL分析。对描述文本所在网络资源链接(URL)进行分析和源代码符号提取。漏洞CVE-2018-18710的描述页面包含的第一层引用URL包括:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e4f3aa2e1e67bb48dfbaa f1cad59013d5a5bc276
https://github.com/torvalds/linux/commit/e4f3aa2e1e67bb48dfbaaf1cad59013d5a5bc276
https://usn.ubuntu.com/3846-1/
https://usn.ubuntu.com/3847-1/
https://usn.ubuntu.com/3847-2/
https://usn.ubuntu.com/3847-3/
https://usn.ubuntu.com/3848-1/
https://usn.ubuntu.com/3848-2/
https://usn.ubuntu.com/3849-2/
http://www.securityfocus.com/bid/106041
顺序执行以下三个分步骤:
1.解析第一层URL,可确认Linux kernel部分/全部存在于一些URL路径中,确认第一步中软件/项目名提取的准确性;
2.分析第一层URL的页面内容。以http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=e4f3aa2e1e67bb48dfbaaf1cad59013d5a5bc276为例,如图3所示,其包含文本内容和diff代码内容。对于文本内容,因位置线索四元组无缺项,则无需补全,否则仍按照第一步中的步骤进行提取。对于代码内容,在去掉无编程含义的字符之后,可提取出Text(code_set)为
其中‘if((int)arg>=cdi->capacity)’标记为删减语句,‘if(arg>=cdi->capacity)’标记为增加语句;
3.分析第二层URL中是否存在diff文件。因diff代码已在第一层URL中发现,故不做处理,否则将以第2分步骤的方式进行提取。
第三步:符号比对。在第一步和第二步得到四元组<Text(soft),Text(ver),Text(file),Text(func)>,以及源代码行集合Text(code_set)。给定源代码项目各版本代码,可得到相应源代码项目中所包含的信息Source(soft),Source(ver),Source(file),Source(func),Source(code_set)。依照本发明的技术方案中所述比对方法,依次执行1.软件/项目名Text(soft)和Source(soft)的部分比对;2.版本号或区间Text(ver)和Source(ver)比对;3.文件名列表Text(file)和Source(file)比对;4.函数名列表Text(func)和Source(func)比对;5.源代码行集合Text(code_set)和Source(code_set)比对。
除软件/项目名Text(soft)要求不为空,Text(ver),Text(file),Text(func),Text(code_set)在比对中均可为空,仅对标注精度有所影响。例如,Text(func),Text(code_set)为空,则漏洞标注粒度为文件级别;Text(ver)为空,但Text(file),Text(func),Text(code_set),可通过扩大版本比对区间,使得标注粒度达到漏洞修补增加和删减语句级别;对于CVE-2018-18710来说,均不为空,最终将在Source(code_set)上标注‘if((int)arg>=cdi->capacity)’为漏洞删减语句,‘if(arg>=cdi->capacity)’标记为漏洞修补增加语句。
本发明另一实施例提供一种基于文本和源代码符号提取的漏洞位置标注装置,其包括:
文本提取模块,负责从漏洞描述文本中提取出<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组作为漏洞位置线索;
URL分析模块,负责对漏洞描述文本所在的网络资源链接进行分析和源代码符号提取,以对所述四元组进行补全,并获得源代码行集合;
符号比对模块,负责对于给定源代码项目的各版本代码,将源代码项目中所包含的信息与所述四元组、所述源代码行集合进行比对,以标注漏洞位置。
上述各模块的具体实现方式参见前文对本发明方法的说明。
本发明另一实施例提供一种计算机,其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行上面所述方法中各步骤的指令。
本发明在爬取近245万各版本C/C++源代码包的同时,收集到安全补丁33838个,总计涵盖635个开源软件(库)的3263个已公开披露的漏洞和2万余个未公开披露的疑似漏洞。通过本发明的方法能提取到46202个漏洞函数信息(1个漏洞可对应多个修复函数),而采取VUDDY和ReDeBug中的漏洞标记方法仅能标记到5727个漏洞函数。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的原理和范围,本发明的保护范围应以权利要求书所述为准。

Claims (10)

1.一种基于文本和源代码符号提取的漏洞位置标注方法,其特征在于,包括以下步骤:
1)从漏洞描述文本中提取出<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组作为漏洞位置线索;
2)对漏洞描述文本所在的网络资源链接进行分析和源代码符号提取,以对所述四元组进行补全,并获得源代码行集合;
3)给定源代码项目的各版本代码,将源代码项目中所包含的信息与所述四元组、所述源代码行集合进行比对,以标注漏洞位置。
2.根据权利要求1所述的方法,其特征在于,从英文漏洞描述文本中提取软件/项目名,是从英文漏洞描述文本中提取最有可能为软件/项目名的单词或词组符号,提取条件包括:
i)给定一本英文词典语料,软件/项目名在词典条目中不存在,或条目释义中包含software或同义解释关键词;
ii)软件/项目名不能被认定为版本号、文件名、函数名或漏洞编号;
iii)软件/项目名位于介词如in之后,且当遇到介词后存在多个连续单词的情况,在去掉辅助性单词后将其组合为词组,共同作为软件/项目名称;
iv)软件/项目名对应的单词或词组符号在文本距离与版本号或版本区间相较其它候选符号更为接近,即相距版本号间隔的单词数目最少,或间隔单词数目一致,在文本序中先出现的单词或词组符号;
其中,i)和ii)为必备条件,iii)和iv)为挑选唯一单词/词组符号作为软件/项目名的辅助条件。
3.根据权利要求1所述的方法,其特征在于,从英文漏洞描述文本中提取版本号或区间的提取条件包括:
v)认定版本号:单词符号中包含数字、希腊符号、连接符;
vi)认定版本区间:两个被认定为版本号的单词符号以单词to或连接符相连,且拥有共同前缀。
4.根据权利要求1所述的方法,其特征在于,从英文漏洞描述文本中提取文件名列表的提取条件包括:
vii)文件名通常包含斜杠/号,或反斜杠\号作为文件路径分隔符;
viii)文件名的结尾通常以特定语言的后缀名结束;
ix)文件名常位于介词如in之后,前后时常包含file关键词作为前缀或后缀;
满足条件vii),viii)和ix)之一即可认定为其可能是文件名。
5.根据权利要求1所述的方法,其特征在于,从英文漏洞描述文本中提取函数名列表的提取条件包括:
x)给定一本英文词典语料,函数名通常在词典条目中不存在;
xi)函数名不能被认定为软件/项目名、版本号、文件名或漏洞编号;
xii)函数名会在某些时候包含左右括号();
xiii)文件名常位于介词如in之后,前后时常包含function关键词作为前缀或后缀;
xiv)当软件名和函数名无法区分时,认定函数名对应的单词或词组符号在文本距离与文件名或文件名列表更为接近,即相距版本号间隔的单词数目最少。
6.根据权利要求1所述的方法,其特征在于,步骤2)对网络资源链接URL开展两层引用URL分析,包括:
2.1)解析第一层URL:URL可能会部分包含软件/项目名,能够用于解析确认四元组中的软件/项目名是否提取正确;
2.2)第一层引用URL:区分页面的文本内容和代码内容部分;
对于文本内容:在步骤1)提取的四元组有缺项的情况下,提取并补全<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组;
对于代码内容:对代码进行逐行提取,去掉空格、换行以及回车等无编程含义的字符,形成针对源代码的检索符号列表;如果代码中包含diff文件,对删减语句和增加语句进行标记,用于源代码版本匹配检索;
2.3)第二层引用URL:仅判断URL对应页面内容中是否包含diff文件,如有,则与第一层引用URL中的处理一致,提取去掉无编程含义字符后的删减语句和增加语句,同样用于源代码版本匹配检索。
7.根据权利要求1所述的方法,其特征在于,步骤3)分别用标记<soft,ver,file,func>,code_set表示四元组和源代码行集合,用Text和Source分别表示解析漏洞描述文本及其URL页面的信息和源代码项目中包含的信息,依次执行:1.软件/项目名Text(soft)和Source(soft)的部分比对;2.版本号或区间Text(ver)和Source(ver)比对;3.文件名列表Text(file)和Source(file)比对;4.函数名列表Text(func)和Source(func)比对;5.源代码行集合Text(code_set)和Source(code_set)比对。
8.根据权利要求7所述的方法,其特征在于,步骤3)的比对过程包括:
3.1)对软件/项目名Text(soft)和Source(soft)进行部分比对,如果Source(soft)包含于Text(soft)中,则认为软件/项目源代码存在;
3.2)对版本号或区间Text(ver)和Source(ver)进行比对,缩小寻找漏洞位置的范围;
3.3)对文件名列表Text(file)和Source(file)进行比对,在前述比对的基础上缩小寻找漏洞位置的范围;
3.4)对函数名列表Text(func)和Source(func)进行比对,在前述比对的基础上缩小寻找漏洞位置的范围;
3.5)对源代码行集合Text(code_set)和Source(code_set)进行比对,在前述比对的基础上定位漏洞修补增加和删减语句;
其中,除软件/项目名Text(soft)之外,其它Text(ver),Text(file),Text(func),Text(code_set)的缺失不影响比对过程的进行,最终通过比对尽可能的缩小漏洞位置范围并进行标注。
9.一种基于文本和源代码符号提取的漏洞位置标注装置,其特征在于,包括:
文本提取模块,负责从漏洞描述文本中提取出<软件/项目名,版本号或区间,文件名列表,函数名列表>四元组作为漏洞位置线索;
URL分析模块,负责对漏洞描述文本所在的网络资源链接进行分析和源代码符号提取,以对所述四元组进行补全,并获得源代码行集合;
符号比对模块,负责对于给定源代码项目的各版本代码,将源代码项目中所包含的信息与所述四元组、所述源代码行集合进行比对,以标注漏洞位置。
10.一种计算机,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1至8中任一权利要求所述方法中各步骤的指令。
CN201910249282.1A 2019-03-29 2019-03-29 一种基于文本和源代码符号提取的漏洞位置标注方法和装置 Active CN110147673B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910249282.1A CN110147673B (zh) 2019-03-29 2019-03-29 一种基于文本和源代码符号提取的漏洞位置标注方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910249282.1A CN110147673B (zh) 2019-03-29 2019-03-29 一种基于文本和源代码符号提取的漏洞位置标注方法和装置

Publications (2)

Publication Number Publication Date
CN110147673A true CN110147673A (zh) 2019-08-20
CN110147673B CN110147673B (zh) 2021-08-31

Family

ID=67588977

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910249282.1A Active CN110147673B (zh) 2019-03-29 2019-03-29 一种基于文本和源代码符号提取的漏洞位置标注方法和装置

Country Status (1)

Country Link
CN (1) CN110147673B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110659502A (zh) * 2019-09-05 2020-01-07 中国科学院软件研究所 一种基于文本信息关联关系分析的项目版本检测方法及系统
CN112651026A (zh) * 2020-12-30 2021-04-13 微梦创科网络科技(中国)有限公司 一种具有业务安全问题的应用版本挖掘方法及装置
CN113626820A (zh) * 2021-06-25 2021-11-09 中国科学院信息工程研究所 针对网络设备的已知漏洞定位方法及装置
CN112651026B (zh) * 2020-12-30 2024-05-24 微梦创科网络科技(中国)有限公司 一种具有业务安全问题的应用版本挖掘方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140032505A1 (en) * 2012-07-25 2014-01-30 Aviv Grafi Method, computer readable medium and a device for neutralization of attacks
CN105809039A (zh) * 2016-03-04 2016-07-27 南京大学 缓冲区溢出漏洞自动修复方法
CN107194260A (zh) * 2017-04-20 2017-09-22 中国科学院软件研究所 一种基于机器学习的Linux‑Kernel关联CVE智能预测方法
CN107273750A (zh) * 2017-05-31 2017-10-20 上海交通大学 Android设备内核漏洞的修补系统及方法
CN107688748A (zh) * 2017-09-05 2018-02-13 中国人民解放军信息工程大学 基于漏洞指纹的脆弱性代码克隆检测方法及其装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140032505A1 (en) * 2012-07-25 2014-01-30 Aviv Grafi Method, computer readable medium and a device for neutralization of attacks
CN105809039A (zh) * 2016-03-04 2016-07-27 南京大学 缓冲区溢出漏洞自动修复方法
CN107194260A (zh) * 2017-04-20 2017-09-22 中国科学院软件研究所 一种基于机器学习的Linux‑Kernel关联CVE智能预测方法
CN107273750A (zh) * 2017-05-31 2017-10-20 上海交通大学 Android设备内核漏洞的修补系统及方法
CN107688748A (zh) * 2017-09-05 2018-02-13 中国人民解放军信息工程大学 基于漏洞指纹的脆弱性代码克隆检测方法及其装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
ROBERT A. BRIDGES等: "Automatic Labeling for Entity Extraction in Cyber Security", 《HTTPS://ARXIV.ORG/ABS/1308.4941》 *
Y.Y.TATARINOVA: "Extended Vulnerability Feature Extraction Based on Public Resources", 《THEORETICAL AND APPLIED CYBERSECURITY》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110659502A (zh) * 2019-09-05 2020-01-07 中国科学院软件研究所 一种基于文本信息关联关系分析的项目版本检测方法及系统
CN112651026A (zh) * 2020-12-30 2021-04-13 微梦创科网络科技(中国)有限公司 一种具有业务安全问题的应用版本挖掘方法及装置
CN112651026B (zh) * 2020-12-30 2024-05-24 微梦创科网络科技(中国)有限公司 一种具有业务安全问题的应用版本挖掘方法及装置
CN113626820A (zh) * 2021-06-25 2021-11-09 中国科学院信息工程研究所 针对网络设备的已知漏洞定位方法及装置

Also Published As

Publication number Publication date
CN110147673B (zh) 2021-08-31

Similar Documents

Publication Publication Date Title
US8249855B2 (en) Identifying parallel bilingual data over a network
Wang et al. Version history, similar report, and structure: Putting them together for improved bug localization
US8572093B2 (en) System and method for providing a license description syntax in a software due diligence system
US8307351B2 (en) System and method for performing code provenance review in a software due diligence system
US8479161B2 (en) System and method for performing software due diligence using a binary scan engine and parallel pattern matching
Butler et al. Improving the tokenisation of identifier names
CN101878476B (zh) 用于查询扩展的机器翻译
Han et al. Perflearner: Learning from bug reports to understand and generate performance test frames
US20170308380A1 (en) Apparatus and method for detecting code cloning of software
JP2004038976A (ja) 用例ベースの機械翻訳システム
Meuschke et al. Improving academic plagiarism detection for STEM documents by analyzing mathematical content and citations
JP2009543255A (ja) パラレル・データを特定するために階層的かつ順次的なドキュメント・ツリーを対応付けること
CN102819604A (zh) 基于内容相关性的文件涉密内容检索、密级判定及标注方法
JP2005251206A (ja) 単語分割で使用される新単語収集方法およびシステム
US20080168049A1 (en) Automatic acquisition of a parallel corpus from a network
Chen et al. A joint model to identify and align bilingual named entities
CN114861194B (zh) 一种基于bgru与cnn融合模型的多类型漏洞检测方法
JP4951416B2 (ja) プログラム検証方法、プログラム検証装置
CN110147673A (zh) 一种基于文本和源代码符号提取的漏洞位置标注方法和装置
JP4237813B2 (ja) 構造化文書管理システム
KR100691400B1 (ko) 부가 정보를 이용하여 형태소를 분석하는 방법 및 상기방법을 수행하는 형태소 분석기
Binkley et al. The impact of vocabulary normalization
Pirapuraj et al. Analyzing source code identifiers for code reuse using NLP techniques and WordNet
JP6056489B2 (ja) 翻訳支援プログラム、方法、および装置
CN115391785A (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