软件漏洞分析(一)

姓名:陈宇辉;

学号:17180120024;

学院:网络与信息安全学院;

【嵌牛导读】在软件不运行的时候对其进行分析就是代码静态分析,其分析内容一般是可执行代码和源代码。静态分析能够非常具体地根据执行路径的提示来找出安全漏洞。

【嵌牛提问】软件漏洞如何进行架构分析和静态分析

【嵌牛正文】

前言

软件架构分析

研究表明,软件中有二分之一到四分之三的问题都发生在设计时期,发现的时间越晚,就需要投入更多的资金对其进行修复,所以对设计时期的软件架构进行分析显得至关重要:

在分析软件架构时,要先对架构建模,检查其模型能否符合相关的安全要求,对于不满足要求的架构需要按照要求重新设计。一般情况下会使用一样的规范来构造软件架构和安全需求,以便更加快速地通过检查。

国内外对于软件架构的分析原理研究主要总结出形式化和工程化两个类别,形式化分析根据形式化的技术来分析安全规范和软件架构,这种方法可以实现自动化的分析结果且比较精确,但是没有一定的实用性;而工程化分析站在攻击者的视角来分析软件的各种风险,比较实用但是不能完全自动化。

静态分析

通过模型构造、根据软件和漏洞来进行的模式匹配以及模式提取等模块构成了代码静态分析的全部内容。经过长时间的研究和探索,各种静态分析方法都有了非常大的发展。

其中,词法分析的方法可以非常迅速和精准地找到软件里面的危险函数,但是因为其不分析语义层面的内容,所以最终不能很好地发现更多复杂的安全漏洞;数据流分析的方法可以用来分析像常数传播和存访问越界这类操作相对单一的问题,而对于一些操作复杂的问题则显得不太实用;

符号执行的方法可以找出软件中难以发现的逻辑问题,相对其他静态漏洞分析技术来说更加有效率,但是执行程序的路径也会因为程序的规模大而随之增加,一定程度上会造成空间爆炸的现象,同时,符号执行的方法虽然能够发现问题,但是没有解决问题的能力,需要借助相应的求解工具来对其进行解决;

模型检查的方法可以自动并精准地分析出软件的状态和路径,但是因为详细地罗列了所有或许会出现的状态,在数据密集度比较大的情况下也增加了分析的工作量;定理证明的方法因为采用了非常严密的推理来控制整个分析过程,所以在以上静态分析方法中是效率最高的方法,但是定理证明方法的自动化能力还需要进一步提高,执行过程中需要浪费大量的人力,同时对于各种漏洞没有一定的延展性,所以往比较大型的软件程序中不适合采用此种方法;污点传播方法可以把攻击的全部过程完整地模拟和展现出来,但是它只能用在输入验证类的漏洞分析之中。

在静态分析方法的具体应用中,《一种基于一阶逻辑的软件代码安全性缺陷静态检测技术》中提出并实现了一种基于命题逻辑和谓词逻辑的形式化检测方法——模式路径制导方法, 具备对内存释放后操作错误、指针误用、资源泄露、格式串溢出、不安全系统调用、竞争条件、整数溢出、资源保护不当和数组越界等软件代码安全性缺陷的检测能力,并有效缓解了已有检测方法的时间复杂度爆炸性增长问题。这是一种典型的静态分析技术。

你可能感兴趣的:(软件漏洞分析(一))