软件漏洞及检测技术概述

首席安全官Plus是一个围绕“大数据、云计算和人工智能”高技术领域,发布相关网络安全前沿技术和产业趋势的平台,努力打造“有特色、高水平、国际化”的网络安全思想高地。如投稿,请发送到:csoplus@163.com。

 

                                                   


软件的质量是软件产品的生命线,其质量问题的根源在于软件设计的不合理以及软件开发过程中的疏忽所引起的软件缺陷。软件缺陷会导致软件运行时出现一些设计时的非预期行为,非但不能完成预期的功能,反而会出现意料之外的执行状况。这种预期之外的行为轻则会损害程序的预期功能,重则会导致程序崩溃而不能正常运行,更为严重的情况下,与安全相关的程序缺陷可以被恶意程序利用,使程序宿主机器受到侵害,以至于泄露与程序本身完全无关的信息,如银行账号等私密数据,这种导致软件系统出现安全性问题的缺陷称为软件的安全漏洞.

 

软件安全漏洞检测是提高软件质量和安全性的重要方法和基本手段。软件安全漏洞检测是在给定软件程序和待检测的安全性质下,设计算法来判断程序中所有可能出现的行为和状态是否都满足待检验的安全性质,若程序在某次执行过程中存在违反该安全性质的行为,则说明存在相应的安全漏洞。

 

判断程序是否满足某种安全性质是一个逻辑命题,主要有3种方法:

  1. 基于程序正确性证明方法。程序正确性证明一般使用Hoarce逻辑[1,2]等公理系统从语法推导的角度证明程序的公理语义是否满足待检验的安全性质,基于该方法开发的工具通常需要事先给出程序的安全性规约,是一件费时费力的事情;

  2. 基于模型检验的方法。该方法使用有穷自动机表示程序的状态迁移系统,并从语义的角度验证所建立的状态迁移系统是否为待检验性质的一个模型,该方法只能应用于有穷状态系统,且存在状态爆炸问题;

  3. 基于程序分析的方法。该方法对软件进行人工或者自动分析,以验证、确认或发现软件性质(或者规约、约束)的过程或活动,使用程序分析的方法进行软件安全性检测,可有效发现和检测软件中存在的安全缺陷或漏洞,是目前普遍应用的方法。

 

需要注意的是,Henry Rice[1]在1953年证明了程序分析在普遍意义上不可能完全判定程序的任意非平凡性质,即无法构造出停机的通用算法对任意给定的程序判定其是否满足指定的性质。

 

尽管通用算法不存在,但是若对问题稍加限制,在有限范围内解决这一问题却是可行的。经过不断努力和尝试,科研人员提出了多种程序分析方法和支撑工具,可根据对程序安全性的实际需求从不同的角度和程度解决问题。

 

在介绍基于程序分析的软件安全漏洞检测技术之前,先介绍一下程序分析以及软件安全漏洞检测方法的评价指标,最重要的指标就是误报率和漏报率,其中误报是指算法报告了实际不存在的错误,漏报是指算法遗漏了本来存在的错误。

 

 

按照不用的角度,基于程序分析的软件安全漏洞检测可以有不同的分类方式:

1.按照程序代码的文本形式分类:

    1) 基于二进制代码分析的方法。二进制分析多采用下面要介绍的动态分析方法。

    2)  基于源代码分析的方法。源代码分析多采用下面要介绍的静态分析方法。

 

2.按照是否运行程序代码分类:

   1)基于静态分析的方法。静态分析方法从语法或语义的层面分析程序文本(源代码或二进制),以推导其语法或语义性质。多数静态分析方法为了建立用于分析的模型需要对程序的动态语义做某种形式的抽象,其抽象结果难免会引入实际不可行路径和不可达状态,如图1(b)所示,而静态分析方法难以在有限时间内判定抽象路径的可行性,这是导致误报的主要原因。这类方法对被分析程序的实际可达状态做上近似处理(Over Approximation)。当然也存在一些静态方法同时做上近似和下近似(Under Approximation),因而同时引入漏报和误报,如图1(C)所示。

    2)基于动态分析的方法。动态分析方法通过运行待测程序以获取和分析程序运行过程中产生的动态信息,以判断其运行时语义性质。动态分析只获取程序的实际可行路径和可达状态,这是保证分析结果没有误报的根本原因。但由于其大多时候并不能遍历程序的所有可行路径,因而可能错过了某些可以引发程序错误的执行路径,进而导致漏报,如图1(a)所示。换言之,动态分析方法对程序的实际可达状态做下近似处理。

 

总而言之,各种具体的分析方法均须隐式或显式地对被分析程序的可达状态集合建立分析模型,这个模型总可以被视为是对实际语义域的上近似或下近似,清楚区分分析方法对程序可达状态集的近似方式,是考察各种分析方法是否存在误报和漏报的根本角度。

 

参考文献

[1]SipserM.Introduction to the Theory of Computation. Boston,USA:ThomsonCourseTechnology,2006

[2]HoareCAR.Anaxiomatic approach to computerprogramming. Communications of the ACM,1969,12(10):576-580

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值