论文部分内容阅读
C语言是目前应用最广的编程语言,在广泛使用的同时也出现了很多代码安全漏洞。如果对这些安全漏洞不予以重视,往往会造成许多意想不到的后果和损失。所以对C代码的安全漏洞检测显得尤为重要。在所有安全漏洞中,内存方面的安全漏洞所产生的不良后果和损失最为巨大。因此对内存安全漏洞的检测变得极具意义。本文的工作就是为一款C代码静态分析检测工具实现对内存相关安全漏洞的检测,做到可以发现实际代码中常见的内存安全漏洞,并进行报错。因此设计并实现有效的方法来完成对内存安全漏洞的检测是本文的研究重点和难点。本文首先对常见的内存安全漏洞进行分类,并对该检测工具关于内存安全漏洞方面的检测需求进行了详细的分析。根据分析的结果,完成内存安全漏洞检测的总体设计,构建了内存安全规则模型和静态整型值估计模型来实现内存相关的检测。然后根据总体设计,本文对内存安全规则模型进行了设计和实现。由于在实际的代码检测中,不同用户会有不同的内存检测需求,所以需要可修改的配置检查项。本模型首先根据内存安全漏洞的检测要求定义了多种内存安全规则,并且实现了可配置功能。同时本文实现了内存安全规则从前端到后端的规则传递和解析,把用户配置的安全规则保存在设计好的数据结构中供后续使用。然后在后端对各个安全子规则进行了详细的功能实现,并完成了内存安全规则在后端遍历框架中的嵌入,保证后端在调用安全规则进行漏洞检测时的有效性和正确性。最后本文利用内存安全规则为常见的内存安全漏洞分别设计了检查方法和步骤。而后某些内存漏洞的检测需要整型值信息,因此本文设计实现了静态整型值估计模型。该模型主要作用就是在进行静态代码分析时,对函数中整型值进行估算和收集,保证在后续漏洞检测中相关整型值的检查使用。为了实现该模型,需要对原有的抽象语法树遍历框架进行改进。本文首先为遍历文法中每个树节点添加了返回参数,使得整型值的值集信息可以在遍历时得以传递和收集。然后就是在遍历文法中整型值相关的所有树节点上嵌入整型值估计的语义动作,完成值集的计算和更新。本文利用静态整型值估计对检查过程中需要特定整型值信息的内存安全漏洞设计了检查方案。最后本文使用设计好的安全工具对几种常见的内存安全漏洞进行了分类测试。测试的结果表明本文构建出的内存安全规则模型和静态整型值估计模型达到了预期的效果,实现了本安全工具对C代码内存安全漏洞的检测要求。