软件漏洞分析

软件漏洞分析的定义

  • 广义漏洞分析:指的是围绕漏洞所进行的所有工作,包括:
    • 漏洞挖掘:使用程序分析或软件测试技术发现软件中可能存在的未知的安全漏洞
    • 漏洞检测:又称漏洞扫描,基于漏洞特征库,通过扫描等手段对指定的远程或者本地计算机系统的安全脆弱性进行检测,以发现可利用的已知漏洞
    • 漏洞应用:借助漏洞堆软件或其依附的目标系统进行模拟攻击,并且对攻击代码进行生存性验证
    • 漏洞消除:对漏洞进行修复,包括漏洞防御、补丁修复、安全加固等
    • 漏洞管控:包括漏洞收集与发布、漏洞资源的积累与分析、漏洞的准则规范的制定等
  • 狭义漏洞分析:特指漏洞挖掘,包括:
    • 架构安全分析:在设计阶段进行软件架构分析,从更高、更抽象的层次保障软件安全性
    • 源代码漏洞分析:通常使用静态分析方法,整个过程包括源代码模型构造、漏洞模式提取、基于软件模型和漏洞模式的模式匹配
    • 二进制漏洞分析:包括静态分析和动态分析两种
    • 运行系统漏洞分析:分析对象是已经实际部署的软件系统,通过信息收集、漏洞检测和漏洞确认三个基本步骤堆软件系统进行漏洞分析

软件分析技术概述

技术类别基本原理分析阶段分析对象分析结果优点缺点
软件架构安全分析通过对软件架构进行建模,并对软件的安全需求或安全机制进行描述,然后检查架构模型直至满足所有安全需求软件设计软件架构设计错误考虑软件整体安全性,在软件设计阶段进行缺少实用且自动化程度高的技术
源代码漏洞分析通过对程序代码的模型提取及程序检测规则的提取,利用静态的漏洞分析技术分析结果软件开发源代码代码缺陷代码覆盖率高,能够分析出隐藏较深的漏洞,漏报率较低需要人工辅助,技术难度大,对先验知识(历史漏洞)依赖性较大,误报率较高
二进制漏洞分析通过对二进制可执行代码进行多层次(指令级、结构化、形式化等)、多角度(外部接口测试、内部结构测试等)的分析,发现软件程序中的安全缺陷和安全漏洞软件设计、测试及维护二进制代码程序漏洞不需要源代码,漏洞分析准确度较高,实用性广泛缺乏上层的结构信息和类型信息,分析难度大
运行系统漏洞分析通过向运行系统输入特定构造的数据,然后对输出进行分析和验证的方式来检测运行系统的安全性运行及维护运行系统配置缺陷考虑由多种软件共同构成的运行系统的整体安全性,检测项全面,准确度高对分析人员的经验依赖度较大

源代码漏洞分析

技术基本原理优点缺点典型工具
数据流分析数据流分析是一种用于收集计算机程序在不同点计算的值的信息的技术。进行数据流分析的最简单的一种形式就是对控制流图的某个节点建立数据流方程,然后通过迭代计算,反复求解,直到到达不动点具有更强的分析能力,适合需要考虑控制流信息且变量属性之操作十分简单的静态分析问题分析效率低,过程间分析和优化算法复杂,编程工作量大,容易出错且效率低Coverity, Prevent, Llocwork, Fortify, SCA, FindBugs, Checkmax
符号执行符号执行是指用符号值替代真实值,模拟程序的执行,从而得到程序的内部结构及其相关信息,从而产生有针对性的测试用例生成的测试用例有针对性,测试覆盖率较高,可以检测到深层次的问题在进行系统化的符号执行时,会产生路径爆炸或是求解困顿等问题EXE, KLEE, Clang, DART
污点分析该技术对输入的数据建立污点传播标签,之后静态地跟踪被标记数据的传播过程,检查是否有危险函数或是危险操作该技术的优点在于可以通过对数据的传播快速地找到典型的与输入数据相关的漏洞该技术有时会受到编译器优化的影响,同时需要构造污点传播树,这种树的构造比较复杂,有时需要人工介入Pixy, TAJ
模型检测该技术主要通过将程序转换为逻辑公式,然后使用公理和规则来证明程序是否是一个合法的定理。如果程序合法,那么被测程序便满足先前所要求的安全特性对路径的分析敏感,对于路径、状态的结果具有很高的精确性;检验并发错误能力较好,验证过程完全自动化由于穷举了所有可能状态,增加了额外的开销;数据密集度较大时,分析难度很大;对时序、路径等属性,在边界处的近似处理难度大SLAM, MOPS, Bandera
定理证明该方法主要是将原有程序验证中由研究人员手工完成的分析过程变为自动推导,其主要目的是证明程序计算中的特性使用严格的推导证明控制检测的进行,误报率低某些域上的公式推导缺乏适用性,对新漏洞扩展性不高ESC, Saturn

二进制漏洞分析

技术基本原理应用范围优点缺点典型工具
模糊测试向被测程序发送随机或预先给定的数据以文件、网络数据或是本地输入以其他对外部输入数据依赖较大的软件原理简单,执行所需计算量较少,相关工具较为成熟,可以很方便地应用于大型软件的测试中测试用例针对性低,覆盖率较低,测试结果不确定性较大SPIKE, Peach, Sully, BeStorm, MU-4000
动态污点分析对输入数据建立污染标签,在程序内部处理数据的同时加入污染标签的传播,通过分析标签的传播得出程序的内部结构以文件、网络数据或是本地输入及其他对外部输入数据依赖较大的软件可以获取程序内部的基本信息,易于发现与输入关联度较大的漏洞需要动态插桩或是虚拟化等技术支持,实现较为复杂,并且污染传播算法对分析结果影响较大TaintCheck, Dyta, Argos, Temu
基于模式的漏洞分析利用中间表示语言或是其他工具将漏洞抽象为具有一定特殊性的模式,最终通过找到这种模式进而找到相关漏洞需要对被分析漏洞表现形式有较深了解,并且需要对被分析软件进行一定转化对漏洞表现形式抽象程度较高,随着建模准确度的提升,漏洞分析的准确度和速度都会有很大提升,代表着未来研究的方向目前的漏洞建模较为简单,有时误报率较高BinNavi
二进制代码比对通过比对不同二进制文件,尤其是补丁文件与原文件之间的差异获取修改信息,从而定位并获取漏洞信息需要有针对某一漏洞的补丁文件或是两个不同版本的同型软件算法较为成熟,实现简单,有许多相关使用工具由于需要补丁或新版软件的比对,所以该类技术仅能发现已被报告并修复的漏洞Bindiff, IDA Compare, eEye Binary Diffing Suite
智能灰盒测试利用动态符号执行等技术,针对被测软件生成有针对性的测试用例,从而提高测试用例的覆盖能力以文件、网络数据或是本地输入及其他对外部输入数据依赖较大的软件可以有效提升测试用例的覆盖率,从而提高发现漏洞的可能性由于算法和计算量等问题,在使用时容易出现路径爆炸和求解困顿等问题,对大型软件的测试效果不是很理想SAGE, SmartFuzz

运行系统漏洞分析

技术基本原理应用范围优点缺点典型工具
配置管理测试配置管理测试是对运行系统配置进行安全性测试,检查系统各配置是否符合运行系统的安全需求和制定的安全策略检查配置漏洞可以全面地分析和检查运行系统的配置项需要对运行系统的业务需求,业务类型和运行环境有充分的了解,需要更多的人工介入MBSA, Metasploit
通信协议测试通信协议验证是对运行系统通信协议中潜在的安全漏洞进行检测。攻击验证是常用的通信协议验证手段。它利用已知的攻击手段对运行系统进行模拟攻击以判断通信协议是否存在某种类型的安全漏洞检测通信协议中潜在的漏洞攻击验证的通信协议验证手段检测结果较为准确,能够用于大规模运行系统攻击验证方法只适用于某些特定类型的通信协议安全漏洞检测Nessus, Nmap
授权认证测试认证测试通过了解运行系统的授权、认证工作流程来尝试规避运行系统的授权、认证机制检测运行系统中授权、认证机制中潜在的漏洞分析结果较为准确该类技术需要深入了解运行系统的授权认证工作,需要较多的人工参与分析工作Nessus, WebScarab
数据验证测试数据验证测试目的在于发现由于运行系统没有正确验证来自客户端或外界的数据而产生的安全漏洞。该类技术主要通过构造特定的输入以检测是否可以触发运行系统的某些特定类型安全漏洞检测运行系统中授权、认证机制中潜在的漏洞技术比较成熟,可用工具较多,操作简单分析结果误报率比较高MVS, AppScan
数据安全性验证数据安全性验证旨在发现威胁运行系统内部数据自身安全性的漏洞检测运行系统中在存储和传输数据时潜在的漏洞技术比较成熟,可用工具较多,操作简单分析结果误报率比较高WireShark

参考资料

  • 《软件漏洞分析技术》
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值