整数在线漏洞检测

在线漏洞检测  时间:2021-02-18  阅读:()

软件学报ISSN1000-9825,CODENRUXUEWE-mail:jos@iscas.
ac.
cnJournalofSoftware,2015,26(2):413426[doi:10.
13328/j.
cnki.
jos.
004793]http://www.
jos.
org.
cn中国科学院软件研究所版权所有.
Tel:+86-10-62562563整数漏洞研究:安全模型、检测方法和实例孙浩1,2,曾庆凯1,21(计算机软件新技术国家重点实验室(南京大学),江苏南京210023)2(南京大学计算机科学与技术系,江苏南京210023)通讯作者:曾庆凯,E-mail:zqk@nju.
edu.
cn摘要:C/C++语言中整型的有限表示范围、不同符号或长度间的类型转换导致了整数漏洞的发生,包括整数上溢、整数下溢、符号错误和截断错误.
攻击者常常间接利用整数漏洞实施诸如恶意代码执行、拒绝服务等攻击行为.
综述了整数漏洞的研究进展,从缺陷发生后行为的角度提出了新的整数漏洞安全模型,总结了判定整数漏洞的充分条件.
从漏洞判定规则对充分条件覆盖的角度对现有检测方法进行比较和分析.
通过实例分析,讨论了整数漏洞在现实中的特征分布.
最后指出了整数漏洞研究中存在的挑战和有待进一步研究的问题.

关键词:整数漏洞;缺陷发生后行为;安全模型;故意使用;实例研究中图法分类号:TP311中文引用格式:孙浩,曾庆凯.
整数漏洞研究:安全模型、检测方法和实例.
软件学报,2015,26(2):413426.
http://www.
jos.
org.
cn/1000-9825/4793.
htm英文引用格式:SunH,ZengQK.
Researchoninteger-basedvulnerabilities:Securitymodel,detectingmethodsandreal-worldcases.
RuanJianXueBao/JournalofSoftware,2015,26(2):413426(inChinese).
http://www.
jos.
org.
cn/1000-9825/4793.
htmResearchonInteger-BasedVulnerabilities:SecurityModel,DetectingMethodsandReal-WorldCasesSUNHao1,2,ZENGQing-Kai1,21(StateKeyLaboratoryforNovelSoftwareTechnology(NanjingUniversity),Nanjing210023,China)2(DepartmentofComputerScienceandTechnology,NanjingUniversity,Nanjing210023,China)Abstract:InC/C++language,limitedragesrepresentedbyintegertypesandcastingsbetweendifferentsignsorwidthscauseinteger-basedweakness,includingintegeroverflow,integerunderflow,signednesserrorandtruncationerror.
Attackersusuallyexploitthemindirectlytocommitdamagingactssuchasarbitrarycodeexecutionanddenialofservice.
Thispaperpresentsasurveyoninteger-basedvulnerabilities.
Anovelsecuritymodelisproposedinviewofbehaviorsresultingfromtheweaknessoccurrence,andthesufficientconditionsindetermininginteger-basedvulnerabilitiesarealsopresented.
Athoroughcomparisonamongdetectingmethodsisfurtherconductedinconsiderationofcoveringsufficientconditions.
Throughanempiricalstudyonreal-worldintegerbugcases,thecharacteristicsanddistributionsarediscussed.
Finally,thechallengesandresearchdirectionsofinteger-basedvulnerabilitiesareexplored.
Keywords:integer-basedvulnerability;behaviorsafterweakness;securitymodel;intentionaluses;empiricalstudy整型(integertype)是C/C++语言中常用的基本数据类型,广泛应用于整数数值的表示、算术运算、内存地址、数组下标、循环计数以及标志位[1].
为了满足不同的计算需求,C/C++语言提供多种字节长度的整数类型,根据具体的体系结构、编译环境和语言标准来解释整数的符号、宽度及运算规则.

计算机中采用有限字节来表示整数,意味着整型变量的取值是有严格范围的.
对于由N比特表示的无符号基金项目:国家自然科学基金(61170070,61431008,61321491);国家科技支撑计划(2012BAK26B01)收稿时间:2014-05-04;修改时间:2014-07-16;定稿时间:2014-11-18;jos在线出版时间:2014-12-12CNKI网络优先出版:2014-12-1214:08,http://www.
cnki.
net/kcms/detail/11.
2560.
TP.
20141212.
1408.
005.
html414JournalofSoftware软件学报Vol.
26,No.
2,February2015类型,其表示范围是0~2N1;由N比特表示的有符号整型,其表示范围则是2N1~2N11.
因此,算术运算如加法、减法、乘法和左移操作可能使运算结果超出相应类型的表示范围的上界或者下界,使得计算结果是期望值与相应类型极值的取模,这类计算结果的失真称为整数溢出.
例如,32位乘法0x40000001*4的运算结果并不是0x100000004,而是4.
超出上界称为整数上溢(integeroverflow,简称OF),超出下界称为整数下溢(integerunderflow,简称UF).
程序中的类型转换操作会涉及不同符号和宽度的转换.
符号上的转换会引起无符号类型的最高位与有符号类型的符号位之间的转换,可能引起数值上的误解.
一个有符号类型的负数数值会被解释成一个很大的无符号类型的正数数值,反之亦然.
例如,有符号的1会被解读为最大的无符号正数2321.
这类数值上的误解在内存空间分配或者安全条件判断上会造成严重的后果,称为符号错误(signednesserror,简称SignErr).
C/C++语言设计不同宽度的整数类型,包括char,short,int,long和longlong.
高宽度的整数类型转换成低宽度的整数类型,可能导致高宽度的整数类型在高位上的缺失,使转换前后的数值大小不等,引起截断错误(truncationerror,简称TruncErr).
例如,32位int类型存放的65540(即0x10004)如果用16位short类型存放,数值则会转换为4.
如果算术运算引起的计算结果失真,或者类型转换造成的数值被误解,使程序语义偏离了程序员的期望,则称该整数操作发生了整数缺陷(integer-basedweakness),它们易被攻击者间接利用,实施诸如恶意代码执行、拒绝服务(denialofservice)等攻击行为.
国际权威漏洞披露组织CVE(commonvulnerabilitiesandexposures)[2]在2007年发布的年度报告中指出,整数漏洞(integer-basedvulnerability)已成为威胁软件安全的第二大类漏洞[4],仅次于缓冲区溢出漏洞.
目前,很多研究者致力于全面、有效、精确地检测程序中潜在的整数漏洞,代表性的工作如RICH[5],IntPatch[6],IntScope[7],BRICK[8],RA[9]和Kint[10]等.
本文统计了CVE公布的历年整数漏洞数量,如图1所示.
其中,横坐标表示年份,纵坐标表示漏洞数量.
Fig.
1NumberofintegerbugsdisclosedbyCVEfrom1999to2013图1CVE公布的1999年~2013年的整数漏洞的数量为了更好地理解整数漏洞问题,全面认识当前的研究现状,进一步完善检测方法,本文综述了整数漏洞的研究进展.
第1节从缺陷发生后行为(behaviorafterweakness)的角度提出新的整数漏洞的安全模型(securitymodel).
第2节分类讨论现有的检测方法.
第3节通过对现实整数漏洞的实例研究,分析其特征及分布.
第4节提出整数漏洞问题中存在的挑战和有待研究的问题.
可以看出:整数漏洞自2007年开始得到一定的缓解,漏洞数量大致呈现逐年下降的趋势.
可能的原因是CVE等发布的漏洞报告引起了人们对整数操作代码安全的重视以及整数漏洞检测研究等工作的作用.
然而漏洞数量仍然居高不下,究其原因包括:1)整数操作在程序中普遍存在,但只有其中极少一部分可能引发程序安全问题,程序员难免会遗漏对按照维基百科中的定义,软件漏洞是指可被攻击者利用以降低软件系统安全性的软件缺陷("Incomputersecurity,avulnerabilityisaweaknesswhichallowsanattackertoreduceasystem'sinformationassurance.
"[3]).
本文中,如果整数操作引起的计算结果失真和数值被误解,干扰了程序员对语义的理解,则称该整数操作发生了整数缺陷,将攻击者能够利用的整数缺陷称为整数漏洞.

199920002001200220032004200520062007200820092010201120122013180160140120100806040200孙浩等:整数漏洞研究:安全模型、检测方法和实例415部分整数操作的数值范围的安全检查(如观察4指出,NotRealize是引入整数漏洞的主要原因).
2)程序员对复杂整数语义(integersemantics)理解不充分[10],导致对已知整数漏洞的修复仍不安全(如第1.
3.
3节讨论).
3)程序员会故意使用整数溢出(intentionalusesofintegeroverflow)[11]以达到编程目的,如随机数生成(randomnumbergeneration)和哈希值计算(hashvaluecomputation)等.
产生的异常数值仍然在程序员的期望内,属于良性(benign)的溢出.
程序员对故意使用溢出的容忍,为精确识别整数漏洞提出挑战(如第1.
3.
4节讨论).
1整数漏洞安全模型1.
1整数缺陷本文将整数缺陷表示成一个由整数操作op、操作数类型符号信息sign、操作数类型宽度信息width和操作数数值范围信息range组成的四元组:其中,INT_OP是程序中可能引发整数缺陷的操作,包括加法ADD、减法SUB、乘法MUL、左移SHL、符号类型转换SIGN_CAST和宽度类型转换DOWN_CAST.
sign描述了INT_OP的源操作数和目的操作数的类型符号信息对,SIGN包括有符号类型signed和无符号类型unsigned两类.
width描述了INT_OP的源操作数和目的操作数的类型宽度信息对,WIDTH用int_8,int_16,int_32和int_64来表示.
TRIGGER_COND指源操作数在当前(op,sign,width)下触发整数缺陷的数值条件(可触发整数缺陷的数值条件,是判定整数漏洞的基本.
细节可参阅文献[5]的表1和文献[12]的表2).
以32位无符号加法x=o1+o2为例,该操作发生整数溢出的触发条件是:操作数o1和o2相加后的理论结果大于32位无符号整型的表示上界,即2321.
定义1(整数缺陷的判定).
程序中的整数操作(op,sign,width)导致整数缺陷,当且仅当源操作数的取值范围满足缺陷触发条件,即range∈TRIGGER_COND.
1.
2基于缺陷发生后行为的整数漏洞安全模型沿用RICH[5]的分类,整数缺陷可分为整数上溢、整数下溢、符号错误和截断错误(可参阅文献[5]图1的现实漏洞实例).
加法、减法、乘法和左移操作导致的整数溢出和类型转换操作导致的截断错误会使计算结果与期望值存在偏差,类型转换操作导致的符号错误会混淆负数和极大正数之间的数值解读.
我们称这些受整数缺陷影响的数值为异常整数数值(malformedintegervalue).
整数缺陷的直接危害是计算结果失真、数据丢失和数值被误解,并不会直接对内存作越界修改,所以通常不能直接利用整数缺陷实施攻击.
然而,攻击者可以利用程序中使用异常整数数值的敏感操作(security-relatedoperation)间接地实施恶意攻击,危害程序的安全性[5,12].
传统的整数漏洞安全模型[5,8,9,11]与整数缺陷模型类似,仅从操作类别、符号信息、类型信息和操作数取值范围的角度来判断整数操作是否引发漏洞.
文献[6,7,12]扩展了传统的安全模型,将既能被用户输入控制又能被程序敏感操作使用的整数操作作为整数缺陷的判定对象.
然而,程序中的异常整数数值还可能被程序员添加的安全检查语句过滤[6,10,13],而当前的安全模型并没有考虑这一要素.
为此,本文从整数缺陷发生后行为的角度出发,提出更全面的整数漏洞安全模型,以完善对整数漏洞的描述.
本文定义了基于缺陷发生后行为的整数漏洞安全模型,即,一个由整数缺陷INT_WEAK、数值是否可信TRUST、安全检查SANITY_CHK和使用模式USE_PATTERN组成的四元组:INT_VULN:INT_WEAK,TRUST,SANITY_CHK,USE_PATTERN|TRUST,SANITY_CHK∈Boolean这里描述的INT_OP是经过了隐式类型转换(implicitcasting)之后的形式,即所有算术运算的操作数的符号和宽度都是相同的,类型转换操作仅在符号或宽度上不同(符号类型转换操作的宽度相同,宽度类型转换操作的符号相同).

INT_WEAK:op,sign,width,range|op∈INT_OP,range∈TRIGGER_CONDsign∈{source_sign,dest_sign|source_sign,dest_sign∈SIGN}width∈{source_width,dest_width|source_width,dest_width∈WIDTH}416JournalofSoftware软件学报Vol.
26,No.
2,February2015USE_PATTERN∈{NONE,MEM,ARRAY,WHILE,IF,PTR}其中,TRUST标识源操作数是否由程序外部通过用户输入得到,因为对于用户不能控制的整数缺陷,攻击者是无法利用的[6,12].
SANITY_CHK和USE_PATTERN是整数缺陷发生后的具体行为,SANITY_CHK表示程序员针对可能的异常整数添加的数值过滤,如果能捕获到异常整数数值则为true,否则为false.
USE_PATTERN指异常整数数值在程序中的使用模式,包括NONE(表示异常整数数值没有被使用,或者仅被用于与程序安全性无关的使用点[11])、MEM(与程序内存操作相关的敏感操作)、ARRAY(用于数组访问操作)、WHILE(用于循环判断语句)、IF(用于程序安全条件判断语句)和PTR(用于指针偏移计算操作).
基于缺陷发生后行为的整数漏洞安全模型不再简单地将整数缺陷判定为整数漏洞,既考虑该缺陷是否可能会被攻击者利用,又考虑了异常整数数值是否会被程序员的安全检查代码捕获、是否会被程序安全相关的敏感操作使用.
因此,整数漏洞的判定过程可定义如下:定义2(整数漏洞的判定).
程序中的整数操作(op,sign,width)导致潜在的整数漏洞,当且仅当:range∈TRIGGER_COND∧TRUST=false∧SANITY_CHK=false∧USE_PATTERN!
=NONE.
由此可见,一个整数操作满足以下4个充分条件即可判定为整数漏洞:T1:源操作数必须来自不可信数据,即能被攻击者的输入控制.
T2:源操作数的数值范围range满足缺陷触发条件TRIGGER_COND,即引发整数缺陷,产生的目的操作数为异常整数数值.
T3:异常整数数值在随后的使用中,能绕过程序员实现的不严密的安全检查语句SANITY_CHK,或者随后的使用中没有安全检查语句.
T4:异常整数数值必须用于可影响程序安全性的敏感操作,才能被攻击者利用,以实施恶意攻击.

1.
2.
1使用模式USE_PATTERN定义3(不严重的整数缺陷uncriticalINT_WEAK).
程序中的整数操作(op,sign,width)导致不严重的整数缺陷,当且仅当range∈TRIGGER_COND∧USE_PATTERN=NONE.
不严重的整数缺陷产生的异常整数数值不会流入与程序安全性相关的敏感操作中(不满足充分条件T4),因此不会被攻击者利用完成恶意攻击,在现实的整数漏洞检测中需要排除对这类缺陷的报告.
例如,SPEC2000[14]164.
gzip中,deflate.
c:540处的无符号减法产生的异常数值在随后并没有被使用;186.
crafty中,iterate.
c:438处的有符号乘法产生的异常数值只是用于调试信息的打印.
按照敏感操作的类别,本文将异常整数数值的使用模式分为以下5类:1)MEM使用模式:通过影响与程序安全性相关的库函数如malloc(),memcpy(),strncpy(),memset()等,影响内存空间的分配、内存或字符串的复制,完成诸如缓冲区溢出、恶意代码执行、拒绝服务等攻击,是最为常见的异常数值使用模式,如实例:CVE-2008-1722[15],CVE-2011-1659[16],CVE-2011-0188[17].
2)ARRAY使用模式:程序中整数的一个重要用途是数组的下标.
ARRAY使用模式借助实际值与期望值的偏差,完成数组越界访问攻击,如实例CVE-2012-4405[18].
3)WHILE使用模式:常常借助异常整数数值来影响循环判定条件,进而影响循环次数,造成无限循环(infiniteloop)的攻击,如实例CVE-2010-4164[19].
4)IF使用模式:整数可以用于判断程序中的运行状态,条件判断语句根据整数数值来决定控制流的走向.
攻击者利用异常数值与期望值的偏差或数值的误解,使程序执行错误的程序行为,如实例:CVE-2009-1438[20].
5)PTR利用模式:借助异常数值与期望值的偏差,来影响指针偏移运算中的偏移值,从而完成指针越界访问攻击,如实例CVE-2010-2500[21].
1.
2.
2安全检查SANITY_CHK防止整数漏洞的一种有效方法是阻止异常整数数值流入程序的敏感操作点,因此,经验丰富的程序员会预孙浩等:整数漏洞研究:安全模型、检测方法和实例417期整数缺陷的发生,选择对重要的整数操作(可能的整数缺陷发生点)添加数值范围的安全检查[6,10,13],以捕获异常数据.
定义4(被拒绝的整数缺陷deniedINT_WEAK).
程序中的整数操作(op,sign,width)导致被拒绝的整数缺陷,当且仅当range∈TRIGGER_COND∧SANITY_CHK=true.
图2(a)描述了一个被拒绝的整数缺陷的代码实例,是针对CUPS的CVE-2008-1722[15]漏洞的修复.
在原始的漏洞代码中,攻击者可以恶意构造一个拥有很大width和height的PNG图片文件,引发第10行的整数乘法操作溢出,然后导致第16行分配的内存空间比预期少,造成缓冲区溢出.
第11行~第15行的安全检查语句是开发者针对该漏洞添加的修复代码.
显然,异常整数数值bufsize会被第11行的安全检查语句捕获,不会到达第16行的敏感操作,该整数溢出为被拒绝的整数缺陷.
(a)开发者针对CUPS的CVE-2008-1722整数漏洞的补丁代码(b)Apache中由体系结构变更引发的截断错误Fig.
2Real-Worldintegerbugcases图2整数漏洞实例被拒绝的整数缺陷因不满足整数漏洞判定条件中的T3,不会流入与程序安全性相关的敏感操作中,进而不会被攻击者用来完成恶意攻击.
因此,在整数漏洞检测中,需要排除对这类缺陷的报告.

1.
3影响因素体系结构、编译器和程序员是影响整数漏洞的重要因素,这些因素不易通过整数漏洞安全模型表示,常常被人们忽视,但却给整数漏洞的检测带来极大的挑战.
1.
3.
1体系结构体系结构决定了整数的表示宽度.
在不同的体系结构下,用于表示整数的位数不同,会影响整数缺陷模型中的宽度信息width和触发缺陷的取值范围TRIGGER_COND,进而影响整数缺陷的判定.
相同的程序代码移植到不同的体系结构,可能会发生整数漏洞,而人们往往会忽略体系结构带来的影响.

图2(b)描述了Apache-1.
3.
42中由体系结构变更导致的截断错误实例CVE-2010-0010[22].
在32位体系结构下,int类型和long类型都是由32比特表示,然而在64位体系结构下,long类型由64比特表示.
该软件在32位体系结构下运行正常,但在64位体系结构下存在截断错误.
具体来说,long类型的remaining变量在第11行通过socket从外界读取数值,随后在第17行强制转换成int类型后被ap_bread()调用,攻击者可以通过构造恶意长度的buf来实现第17行的截断错误.
/*ReadaPNGimagefile*/1int_cupsImageReadPNG(Cups_image_t*img,FILE*fp,.
.
.
){2png_uint_32width,Height;/*widthandheightofimage*/3png_structppp;/*PNGreadpointer*/4png_init_io(pp,fp);5/*Gettheimagedimensions*/6png_get_IHDR(pp,info,&width,&height,.
.
.
);7img→xsize=width;8img→ysize=height;9size_tbufsize;/*Sizeofbuffer*/10bufsize=img→xsize*img→ysize;11+if((bufsize/img→ysize)!
=img→xsize){12+fprintf(stderr,"PNGimagedimensionsToolarge!
\n");13+fclose(fp);14+return1;15+}16in=malloc(bufsize);17…18}1longintap_proxy_send_fb(BUFF*f,…){2…3longremaining=0;4…5/*getthechunksizefromthestream*/6chunk_start=ap_getline(buf,buf_size,f,0);7if((chunk_start≤0)||…){8n=1;9}10else{11remaining=ap_get_chunk_size(buf);12…13}14/*readthechunk*/15if(remaining>0){16n=ap_bread(f,buf,MIN((int)buf_size,17(int)remaining));18…19}20…21}418JournalofSoftware软件学报Vol.
26,No.
2,February20151.
3.
2编译器的过度优化(overoptimization)发生后验证(post-conditiontest)[11]是比较常用的安全检查.
在整数操作之后添加对目的操作数的数值范围的检查,以判断是否发生了整数缺陷.
例如,为保证无符号加法c=a+b不受整数溢出的影响,程序员在该加法之后添加if(cINT_MAXo2)error()的数值范围检测语句.
Narrow是指程序员在发生漏洞的整数操作之前添加对操作数的值范围界定.
例如,对无符号加法操作x=o1+100之前添加if(o1c变更为a>cb以避免a+b产生的溢出漏洞.
Remove是指程序员舍弃发生漏洞的代码片段.
具体的分布情况见表6.
Table6Distributionsofinteger-basedvulnerabilitiesinfixpatterns表6整数漏洞的修复方式分布TypePre-ConditionNarrowPost-ConditionWidthextensionSignchangeFormatchangeRemoveOF1132432260146UF13130030SignErr131402603TruncErr3004002观察5:Precondition和Narrow是从限制操作数取值的角度预防整数漏洞的发生,使其不满足缺陷触发条件(使漏洞判定条件T2失效),约有57.
73%的漏洞实例采用此类修复方式.
Postcondition阻止异常数值流入敏感操作,使漏洞判定条件T3失效,约有13.
40%的漏洞实例采用此类修复方式.
4挑战与趋势整数漏洞是一个普遍存在且不易察觉的程序安全问题,即使是经验丰富的程序员编写的成熟软件也难以避免整数漏洞(观察2).
针对整数漏洞的检测是一个有意义的研究热点,随着大量检测方法的出现(第2节介绍),整数漏洞问题得到一定程度的缓解,但一些关键问题研究仍存在不足之处.
具体来说,在整数漏洞研究中仍然存在以下具有挑战性的问题:(1)研究防治和避免整数漏洞的编程安全支持技术,以辅助程序员编写更安全的程序代码NotRealize是整数漏洞引入的最主要原因,一定比重的整数漏洞是由IncorrectCheck引发(观察3),并且程序员在修复整数漏洞时容易出错(如第1.
3.
3节讨论),因此,研究设计完善的针对整数漏洞的安全支持技术以辅助程序员编写更安全的程序代码,是从根本上防止和避免整数漏洞的途径之一.
例如:设计全面而准确的整数操作安全规则,指导程序员对关键的数据操作设计严格的取值限制;提供安全的整数漏洞修复模式和详细的修复实例,指导程序员进行漏洞修复工作;提供完善的体系结构变迁日志,明确受体系结构影响的整数操作(如第1.
3.
1节讨论),当变迁发生时实施代码变更;明确编译器的优化配置,及时排除高优化级别对修复的影响(如第1.
3.
2节讨论).
(2)预测和区分整数溢出的故意使用如第1.
3.
4节所述,程序员会故意使用整数溢出来实现特殊功能.
预测和区分这些故意使用,可以有效地降低检测方法的误报率.
然而,根据整数运算操作来推理其语义信息和程序员的意图十分困难,而且当前没有涵盖故意使用溢出的整数漏洞安全模型.
因此,如何预测和区分故意使用整数溢出,是当前检测方法亟需解决的问题,将会是下一步的研究热点.
(3)sink_malform_use方法的全面实现(fullimplementation)目前,weakness_detect方法已得到很好的应用,DRIVER和SmartFuzz已完成了path_weakness_detect方法的全面实现(见表2),考虑了所有5类使用模式和所有4类漏洞形式.
因此,sink_malform_use方法的全面实现将会是下一步的研究重点.
难点在于危险路径的抽取和安全检查语句的严密性判定:首先,与path_weakness_detect方法所面临的困难一样,路径抽取过程会受到指针分析、循环展开和结构体的域敏感等问题的影响,导致危险路径的抽取不完备;其次,如何判定安全检查语句SANITY_CHK是否能捕获异常整数数值,是排除deniedINT_孙浩等:整数漏洞研究:安全模型、检测方法和实例425WEAK误报的重点(见定义4),也是sink_malform_use方法的重点(充分条件T3).
如果采用动态信息流跟踪(dynamicinformationtracking)的方法来判断异常整数数值的后续行为,则需要额外开辟内存空间来标记和更新异常数值的状态,严重影响程序的运行速度;如果采用静态约束求解的方法来判断缺陷触发条件和安全检查条件是否能够同时满足,则存在分析精度低和误报率高的问题.
(4)二进制代码中的整数漏洞检测在本文的实例研究中,约41.
4%的整数漏洞存在于商业软件中(如第3.
1节讨论),并且Apple,Microsoft,Adobe等提供的软件中存在大量的整数漏洞(观察2).
因此,越来越多的安全研究人员将目光投入到商业软件上,试图在未知源代码的情况下检测整数漏洞.
然而与源代码分析方法相比,基于二进制代码的整数漏洞检测方法(如BRICK,IntFinder,IntScope和SmartFuzz)所面临的挑战是如何精确地得到整型变量的符号和宽度信息.
二进制代码恢复(binaryrecovery)技术[39,40]致力于重构二进制代码的类型和结构信息,将会推进商业软件中整数漏洞的检测进展.
致谢感谢审稿人的仔细评阅和中肯意见.
References:[1]AhmadD.
Therisingthreatofvulnerabilitiesduetointegererrors.
IEEESecurity&Privacy,2003,1(4):7782.
[doi:10.
1109/MSECP.
2003.
1219077][2]Commonvulnerabilitiesandexposures(CVE).
http://cve.
mitre.
org/[3]Definitionof'vulnerabilty'incomputerscience.
2015.
http://en.
wikipedia.
org/wiki/Vulnerability_%28computing%29[4]ChristeyS,MartinRA.
VulnerabilitytypedistributionsinCVE.
2007.
http://cve.
mitre.
org/docs/vunl-trends/vuln-trends.
pdf[5]BrumleyD,ChiuehT,JohnsonR,LinH,SongD.
RICH:Automaticallyprotectingagainstinteger-basedvulnerabilities.
In:Proc.
ofthe14thAnnualNetworkandDistributedSystemSecuritySymp(NDSS).
SanDiego:InternetSociety,2007.
[6]ZhangC,WangT,WeiTL,ChenY,ZouW.
IntPatch:Automaticallyfixinteger-overflow-to-buffer-overflowvulnerabilityatcompile-time.
In:Proc.
ofthe15thEuropeanConf.
onResearchinComputerSecurity(ESORICS).
Berlin,Heidelberg:Springer-Verlag,2010.
7186.
[doi:10.
1007/978-3-642-15497-3_5].
[7]WangTL,WeiT,LinZQ,ZouW.
IntScope:Automaticallydetectingintegeroverflowvulnerabilityinx86binaryusingsymbolicexecution.
In:Proc.
ofthe16thAnnualNetworkandDistributedSystemSecuritySymp.
(NDSS).
SanDiego:InternetSociety,2009.
114.
[8]ChenP,WangY,XinZ,MaoB,XieL.
BRICK:Abinarytoolforrun-timedetectingandlocatinginteger-basedvulnerability.
In:Proc.
ofthe4thInt'lConf.
onAvailability,ReliabilityandSecurity.
2009.
208215.
[doi:10.
1109/ARES.
2009.
77][9]RodriguesRE,CamposVHS,PereiraFMQ.
Afastandlow-overheadtechniquetosecureprogramsagainstintegeroverflows.
In:Porc.
oftheIEEE/ACMInt'lSymp.
onCodeGenerationandOptimization(CGO).
2013.
111.
[doi:10.
1109/CGO.
2013.
6494996][10]WangX,ChenH,JiaZ,ZeldovichN,KaashoekMF.
ImprovingintegersecurityforsystemswithKINT.
In:Proc.
ofthe10thUSENIXConf.
onOperatingSystemsDesignandImplementation(OSDI).
Berkeley:USENIXAssociation,2012.
163177.
[11]DietzW,LiP,RegehrJ,AdveV.
UnderstandingintegeroverflowinC/C++.
In:Proc.
ofthe2012Int'lConf.
onSoftwareEngineering(ICSE).
Piscataway:IEEEPress,2012.
760770.
[doi:10.
1109/ICSE.
2012.
6227142][12]SunH,LiHP,ZengQK.
Staticallydetectandrun-timecheckinteger-basedvulnerabilitieswithinformationflow.
RuanJianXueBao/JournalofSoftware,2013,24(12):27672781(inChinesewithEnglishabstract).
http://www.
jos.
org.
cn/1000-9825/4385.
htm[doi:10.
3724/SP.
J.
1001.
2013.
04385][13]WangX,ZeldovichN,KaashoekMF,Solar-LezamaA.
Towardsoptimization-safesystems:Analyzingtheimpactofundefinedbehavior.
In:Proc.
ofthe24thACMSymp.
onOperatingSystemsPrinciples(SOSP).
NewYork:ACMPress,2013.
260275.
[doi:10.
1145/2517349.
2522728][14]SPECCPUbenchmarksuites.
2005.
http://www.
spec.
org/cpu2000/[15]CUPSintegeroverflowunerability.
2008.
http://cve.
mitre.
org/cgi-bin/cvename.
cginame=CVE-2008-1722[16]Glibccraftedpatternargumentintegeroverflowvulnerability.
2011.
http://cve.
mitre.
org/cgi-bin/cvename.
cginame=CVE-2011-1659[17]RubyBigDecimalclasstruncationvulnerability.
2011.
http://cve.
mitre.
org/cgi-bin/cvename.
cginame=CVE-2011-0188[18]Ghostscriptintegerunderflowvulnerability.
2012.
http://cve.
mitre.
org/cgi-bin/cvename.
cginame=CVE-2012-4405[19]LinuxkernelX25integerunderflowvulnerability.
2010.
http://cve.
mitre.
org/cgi-bin/cvename.
cginame=CVE-2010-4164[20]LibmodplugcraftedMEDfileintegeroverflowvulnerability.
2009.
http://cve.
mitre.
org/cgi-bin/cvename.
cginame=CVE-2009-1438426JournalofSoftware软件学报Vol.
26,No.
2,February2015[21]FreeTypefontfileintegeroverflowvulnerability.
2010.
http://cve.
mitre.
org/cgi-bin/cvename.
cginame=CVE-2010-2500[22]Apache64-bitplatformintegeroverflowvulnerability.
2010.
http://cve.
mitre.
org/cgi-bin/cvename.
cginame=CVE-2010-0010[23]WangX,ChenHG,CheungA,JiaZH,ZeldovichN,KaashoekMF.
Undefinedbehaviors:WhathappenedtomycodeIn:Proc.
oftheAsia-PacificWorkshoponSystem(APSys).
NewYork:ACMPress,2012.
ArticleNo.
9.
[doi:10.
1145/2349896.
2349905][24]SafeIntclass.
2004.
http://safeint.
codeplex.
com/[25]IntSafe.
2006.
http://blogs.
msdn.
com/b/michael_howard/archive/2006/02/02/523392.
aspx[26]MolnarD,LiXC,WagnerDA.
Dynamictestgenerationtofindintegerbugsinx86binarylinuxprograms.
In:Proc.
ofthe18thUSENIXSecuritySymp.
SanDiego:USENIXAssociation,2009.
6782.
[27]LongF,DouskosS,KimD,RinardM.
Soundinputfiltergenerationforintegeroverflowerrors.
In:Porc.
ofthe41stACMSymp.
onPrinciplesofProgrammingLanguages(POPL).
NewYork:ACMPress,2014.
439452.
[doi:10.
1145/2578855.
2535888][28]SeacordR.
TheCERTCSecureCodingFormat.
Boston:Addison-WesleyProfessional,2008.
139201.
[29]CokerZ,HafizM.
ProgramtransformstofixCintegers.
In:Proc.
ofthe2013Int'lConf.
onSoftwareEngineering(ICSE).
Piscataway:IEEEPress,2013.
792801.
[30]Rangedinteger.
2006.
http://www.
sei.
cmu.
edu/library/abstracts/reports/07tn027.
cfmRL=library&WT.
ac=RLlibrary[31]ChinchaniR,IyerA,JayaramanB,UpadhyayaS.
ARCHERR:Runtimeenvironmentdrivenprogramsafety.
In:Proc.
ofthe9thEuropeanSymp.
onResearchinComputerSecurity(ESORICS).
Berlin,Heidelberg:Springer-Verlag,2004.
385406.
[doi:10.
1007/978-3-540-30108-0_24][32]DannenbergR,DormannW,KeatonD,PlumT,SeacordRC,SvobodaD,VolkovitskyA,WilsonT.
AIR:As-ifinfinitelyrangedintegermodel.
TechnicalReport,CMU/SEI-2009-TN-023,2009.
[33]WangY,RuanD,TangZ,XuJP,WenM.
RICF:Dynamicanalysisofintegerarithmeticoverflowvulnerabilityviafinitestatemachine.
JournalofComputationalInformationSystems,2010,6(6):19331941.
[34]SarkarD,JagannathanM,ThiagarajanJ,VenkatapathyR.
Flow-Insensitivestaticanalysisfordetectingintegeranomaliesinprograms.
In:Proc.
ofthe25thConf.
onIASTEDInt'lMulti-Conf.
:SoftwareEngineering.
ACTAPress,2007.
334340.
[35]ChenS,KalbarczykZ,XuJ,IyerRK.
Adata-drivenfinitestatemachinemodelforanalyzingsecurityvulnerabilities.
In:Proc.
ofthe2003Int'lConf.
onDependableSystemsandNetworks(DSN).
IEEEComputerSociety,2003.
605614.
[doi:10.
1109/DSN.
2003.
1209970][36]LuXC,LiG,LuK,ZhangY.
High-Trusted-Software-Orientedautomatictestingforintegeroverflowbugs.
RuanJianXueBao/JournalofSoftware,2010,21(2):179193(inChinesewithEnglishabstract).
http://www.
jos.
org.
cn/1000-9825/3785.
htm[doi:10.
3724/SP.
J.
1001.
2010.
03785][37]PozzaD,SistoR.
AlightweightsecurityanalyzerinsideGCC.
In:Proc.
ofthe3rdInt'lConf.
onAvailability,ReliabilityandSecurity(ARES).
IEEEComputerSociety,2008.
851858.
[http://dx.
doi.
org/10.
1109/ARES.
2008.
26][38]ChenP,HanH,WangY,ShenXB,YinXC,MaoB,XieL.
Intfinder:Automaticallydetectingintegerbugsinx86binaryprogram.
In:Proc.
oftheInt'lConf.
onInformationandCommunicationsSecurity.
Berlin,Heidelberg:Springer-Verlag,2009.
336345.
[doi:10.
1007/978-3-642-11145-7_26][39]LinZQ,ZhangXY,XuDY.
Automaticreverseengineeringofdatastructuresfrombinaryexecution.
In:Proc.
ofthe17thAnnualNetworkandDistributedSystemSecuritySymp.
(NDSS).
SanDiego:InternetSociety,2010.
[40]SlowinskaA,StancescuT,BosH.
Howard:Adynamicexcavatorforreverseengineeringdatastructures.
In:Proc.
ofthe18thAnnualNetworkandDistributedSystemSecuritySymp.
(NDSS).
SanDiego:InternetSociety,2011.
附中文参考文献:[12]孙浩,李会朋,曾庆凯.
基于信息流的整数漏洞插装和验证.
软件学报,2013,24(12):27672781.

http://www.
jos.
org.
cn/1000-9825/4385.
htm[doi:10.
3724/SP.
J.
1001.
2013.
04385][36]卢锡城,李根,卢凯,张英.
面向高可信软件的整数溢出错误的自动化测试.
软件学报,2010,21(2):179193.

企鹅小屋:垃圾服务商有跑路风险,站长注意转移备份数据!

企鹅小屋:垃圾服务商有跑路风险!企鹅不允许你二次工单的,二次提交工单直接关服务器,再严重就封号,意思是你提交工单要小心,别因为提交工单被干了账号!前段时间,就有站长说企鹅小屋要跑路了,站长不太相信,本站平台已经为企鹅小屋推荐了几千元的业绩,CPS返利达182.67CNY。然后,站长通过企鹅小屋后台申请提现,提现申请至今已经有20几天,企鹅小屋也没有转账。然后,搞笑的一幕出现了:平台账号登录不上提示...

A2Hosting三年付$1.99/月,庆祝18周年/WordPress共享主机最高优惠81%/100GB SSD空间/无限流量

A2Hosting主机,A2Hosting怎么样?A2Hosting是UK2集团下属公司,成立于2003年的老牌国外主机商,产品包括虚拟主机、VPS和独立服务器等,数据中心提供包括美国、新加坡softlayer和荷兰三个地区机房。A2Hosting在国外是一家非常大非常有名气的终合型主机商,拥有几百万的客户,非常值得信赖,国外主机论坛对它家的虚拟主机评价非常不错,当前,A2Hosting主机庆祝1...

SoftShellWeb:台湾(台北)VPS年付49美元起,荷兰VPS年付24美元起

SoftShellWeb是一家2019年成立的国外主机商,商家在英格兰注册,提供的产品包括虚拟主机和VPS,其中VPS基于KVM架构,采用SSD硬盘,提供IPv4+IPv6,可选美国(圣何塞)、荷兰(阿姆斯特丹)和台湾(台北)等机房。商家近期推出台湾和荷兰年付特价VPS主机,其中台湾VPS最低年付49美元,荷兰VPS年付24美元起。台湾VPSCPU:1core内存:2GB硬盘:20GB SSD流量...

在线漏洞检测为你推荐
iphone5解锁iphone5密码忘了怎么解锁云播怎么看片云播影视怎么样?公章制作制作公章尺寸标准大小,字体,字号?1433端口1433端口怎么打开ps抠图技巧请教PS抠图技巧!!!镜像文件是什么什么是文件镜像?什么是镜像文件?idc前线永恒之塔内侧 删档吗 ?bt封杀现在是全面封杀BT下载了吗?现在都找不到BT下载影片了iphone6上市时间苹果6什么时候出来bluestackbluestacks下载的东西在哪
免备案虚拟主机 虚拟主机评测 本网站服务器在美国维护 阿里云邮箱登陆首页 Dedicated 标准机柜尺寸 云图标 web服务器架设软件 建站代码 骨干网络 域名评估 adroit hdd 香港新世界中心 万网空间购买 超级服务器 厦门电信 空间排行榜 建站技术 服务器机柜 更多