您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 漏洞挖掘的过去、现在、未来
漏洞挖掘的过去、现在、未来Funnywei提纲•漏洞挖掘技术的发展•补丁的安全性漏洞挖掘技术的发展•过去Æ现在•未来ExistingParadigmsTestingFormalverificationcheapCostAssuranceexpensivelowhigh(sweetspot?)ExtractedfromD.wagner’sppt漏洞发现•Fuzzing•API测试•静态分析Fuzzing的目标•FileFormats•NetworkProtocols•Webapplications•Environmentvariables•COMObjects•IPCsFuzz技术•文件格式的Fuzz–图像格式–文档格式–等等•协议的Fuzz–RPC协议–Http协议–等等Fuzz的优缺点•优点:–思想简单,容易理解–从发现漏洞Æ漏洞重现容易–不存在误报•缺点:–黑盒测试的全部缺点–不通用,构造测试用例周期长,如复杂的协议–Undocumented的接口无法测试文件格式的Fuzzer框架构造畸形数据测试异常监测测试模式异常分析暴力测试等价类测试边界值测试组合字段测试记录异常情况分析找出有价值的异常API测试•测试API的安全性–如netapi32.dll的303号导出函数NetpwPathCanonicalize•查找调用这些API的程序•验证调用该API的可执行文件的安全静态分析技术•提出问题:给定程序和安全属性,验证程序是否满足属性,如果不满足,找出原因。静态分析框架分析算法漏洞模型程序漏洞模型分析结果静态分析技术(1)bugscam静态分析模式匹配词法分析AST分析metaC++FlawFinderRatsITS4静态分析技术(2)数据流分析类型系统模型检测污点分析静态分析Cqual漏洞的建模•时序逻辑模型•约束模型•类型限定模型•依赖图模型时序逻辑模型•将安全相关的操作序列描述为时序安全逻辑•采用FSA描述•可以参考”ModelCheckingOneMillionLinesofCCode”时序安全属性的简单例子•在调用chroot之后,进程应立即调用chdir(“/”)来切换到根目录下。otherchrootchdir(/)约束模型DavidWagner等人将缓冲区溢出的检测问题规范化为整数约束的问题,并定义了约束语言(ConstraintLanguage)。线形约束条件的产生符号len(s)表示当前使用的长度(包含结束字符’\0’),范围属性为[a,b]。Alloc(s)表示buffer实际分配的大小,范围属性为[c,d]。在对所有的变量进行了范围推断之后,再进行安全属性检查:如果bc,溢出不可能发生。如果ad,那么肯定发生。如果dbca,那么溢出有可能发生。类型限定模型•Jeffreyfoster开发的typequalifier框架•一个方法:静态污点分析–扩展C的类型系统–例如taintedchar*是不可信untrustedstring基于依赖图的分析•PDG是1984年Ottenstein等人提出,用于intra-procedural的中间表示形式•什么是依赖图?–节点--表示语句–边表示--控制流和数据流•虚线边表示数据流依赖•实线边表示控制流依赖PDG的简单例子PDG的简单例子entryfunc()sum=sum+ii=i+1printf(sum)while(i11)printf(i)i=1sum=0SDG•1990年,Horwitz等人提出。•从函数A到B的调用,在A中增加一个Call的顶点,B中增加一个入口点,并且增加一条从A到B的inter-procedural的控制依赖边。•在A中增加进出的实参顶点,B中增加进出的形参顶点。并且增加interprocedural的数据依赖边。•如果有全局变量,则看作输入参数,并被编码为实参和形参顶点。整型错误的检测(1)外部输入定义验证使用正确编码模式所有的使用都必须经过验证Æ使用控制依赖于验证所有的使用都必须有定义Æ使用数据流依赖于定义整型错误的检测(2)外部输入a定义a使用anarrowingtype-cast外部输入a定义a使用a验证a外部输入a定义a验证a使用anarrowingtype-cast错误编码模式(只举了部分)两次释放漏洞callfree()1callfree()2ptr_in_2=bufptr_in_1=buf错误编码模式静态分析的优缺点•缺点–依赖于预先定义的模式–复杂的分析往往是停机问题–可能发现不可行路径,产生误报–从发现问题Æ利用之间存在时间鸿沟•优点–通用性较好–发现错误后,容易定位问题•其它用途:–辅助补丁比较分析源码分析vs可执行代码分析•为什么源码中的技巧不能应用于可执行文件中?–变量信息的缺失–类型信息的缺失•可执行代码分析的优点–“所见非所执行”漏洞–很多时候没有源码–源码分析工具往往不分析内联汇编。–程序中经常涉及到库和dll的调用,而这些二进制文件是没有源码的。抽象翻译•过去的分析–只分析和追踪寄存器取值–如果寄存器的值从内存中获得,就假设为任意值•恢复变量信息–抽象出运行时的地址空间•恢复结构信息–进行聚合结构识别•抽象出中间表示–高级语言代码Æ中间表示Æ可执行代码–可执行代码Æ中间表示Æ高级语言代码静态分析算法的考虑•追求的目标–可伸缩性–正确性–精确性•算法–流相关--依赖于控制流–上下文相关漏洞挖掘的现状•特点:–一定程度的自动化–线性程序分析•缺点:–误报–没有良好的图形化显示–很少研究多线程程序的安全性一定程度的自动化•自动化测试–自动化构造测试用例–自动化监测执行•自动化分析–漏洞严重级别•我们可以将重心放在更重要的漏洞上–记录错误路径,快速定位出错函数–记录栈信息–记录寄存器内容潜在漏洞的级别划分•漏洞严重级别的划分,利于将研究重点放在更严重的漏洞上–指针分析算法参与越多,级别越低–别名分析算法参与越多,级别越低–过程间的控制流分析参与越多,级别越低•识别类型–溢出—堆?或者栈?–整型的处理—Overflows或者Signedness?–DoS--Outofboundsreads?Infiniteloops?NULLpointerdereferences?–逻辑错误–Formatstrings–Raceconditions数据流分析•等式集合—迭代方法•图的可达性—上下文无关语言的识别问题图的可达性ENTERmainn1READ(x)n2CALLPn3RETURNFROMPEXITmainENTERPn4IFa0n5READ(g)n6a:=a-gn7CALLPn8RETURNFROMPEXITPn9PRINT(a,g)(11)(2)2pexitmainstartpstartmainexitDeclareg:intProceduremainBegindeclarex:intread(x)callP(x)EndProcedureP(valuea:int)Beginif(a0)thenread(g)a:=a-gcallP(a)print(a,g)fiendCFL的可达性问题•路径“startmain-n1-n2-startp-n4-exitp-n3”—”ee(1ee)1”–匹配和可行的•路径“startmain-n1-n2-startp-n4”—”ee(1e”–可行的但是不匹配的•路径“startmain-n1-n2-startp-n4-exitp-n8”—”ee(1ee)2”–既不是匹配的也不是可行的未来•全方面的可视化•更高程度的自动化•运算的并行化•漏洞可用性的判定•静态分析和动态检测的结合瓶颈分析—现象•Fuzzer技术–分析所产生的大量异常--耗时•静态分析–运算量大•NP问题•停机问题–精度与可伸缩性的权衡瓶颈分析—原因•异常情况分析–可用性判定需要人的鉴别•需要更好的图形化•需要自动分析•静态分析–需要更高的精度可视化visualizationdevelopmentofExploitprogressoftestingvulnerabilitydiscoveryprocessexploitationprocesstestingprocessdebuggingandtracingprocessvulnerabilitymodelsreasonforvulerabilitydebugprocessdataflow并行化•J.Wilander的实验采用基于依赖图的方法。–Wu-ftpd2.6-4包含将近20,000行代码,产生130,000个顶点。–在P42.66的机器上需要运行15个多小时。•Balakrishnan的实验自动化•测试过程的自动化•分析过程的自动化自动化的可用性判定•难问题•需要知道权限–权限推断•找出到达给定程序点的所有权限•静态分析–产生溢出的整型变量是否和数组操作有关–算法的精度决定了可用性判定的精度•动态测试–栈覆盖情况分析–寄存器分析–结合静态分析,可以判定出错函数的出错类型补丁的安全性•为什么研究补丁的安全性•结构化比较的原理•改进的比较算法•一些新的比较方法为什么研究补丁的安全性•对抗bindiff技术•对抗0-day攻击5621869389906-00201141487306-0142142323705-047268006412252906-020340414666034137224368606-040启发式匹配递归相同入度相同素数乘积相同字符串引用唯一性签名相同名字补丁补丁分析的例子(FunnyDiff)249249116,2245.0.2600.2180Umpnpmgr.dll1,0001249249116,2245.0.2600.2710Umpnpmgr.dllM05-03918318378,0965.0.2180.1Fontsub.dll9683518320479,6325.0.2195.7071Fontsub.dllMS06-002894894143,3602.81.1117.0Msadco.dll2,5943894896143,3602.81.1124.0Msadco.dllMS06-014249249116,2245.1.2600.2710Umpnpmgr.dll1,06219249268121,3445.1.2600.2744Umpnpmgr.dllMS05-0472,6212,621425,4722001.12.4414.308Msdtcprx.dll10,82842,6212,623426,4962001.12.4414.311Msdtcprx.dllMS06-0201,1681,168326,9285.0.2195.7038Netapi32.dll7,15371,1681,172309,5205.0.2195.7105Netapi32.dllMS06-040运行时间(ms)发生改变匹配个数函数个数大小版本文件名补丁结构化签名补丁比较的原理•基于控制流•基于偏序关系改进的比较算法•初始化基点的可信–基于模糊聚类•基点传播过程的启发式校验–减少误匹配改进补丁的安全性•减少调试符号文件中dump的函数名字信息•改变函数结构化签名–增加无意义的if-else结构,破坏签名,造成误匹配•改变引用字符串–对字符串进行编码•素数乘积的变化–做等价指令序列变换–填充随机无意义指令一些新的比较方法•Import/export表函数作为固定点•使用相同变量•RPC接口•相同栈布局•相同参数•具有循环属性•TheEnd
本文标题:漏洞挖掘的过去、现在、未来
链接地址:https://www.777doc.com/doc-4804966 .html