一种C/C++代码安全静态检测模型
作者:网络转载 发布时间:[ 2013/12/24 13:14:55 ] 推荐标签:C C++ 代码 静态检测
(6)normal
normal类的函数是多的,这类函数的特点是没有固定和活性参数,所以我们不能通过判断其参数来对其进行进一步的处理,对于这类函数的出现,我们将按照规定的危险等级直接进行报警。
(7)sprintf类和strncpy类函数
如strncpy(dst,src,n)中,n为活性参数,如果n为sizeof(dst)-1或strlen(src)+1的话是不会产生漏洞的,如果n为sizeof(dst)的话则有可能产生漏洞,有可能不产生漏洞,这依赖于src和下一行代码的情况,如果下一行代码能见到dst[sizeof(dst)-1]=’’样的表达形式,或者src为字符串的话(“src”),则不会产生漏洞,否则可以判定函数使用会出现漏洞。
二、分析算法模块
首先看一个使用文件资源的代码段为示例:
void fun ( ) { 1: File f = fopen ( “c:\test.txt”,rw) ; 2: fclose (f) ; } |
人工分析的过程:
a)若是需要检查文件资源泄露,需要定位到文件句柄的打开部分,锁定风险API:fopen。
b)记录下该API返回的文件句柄,变量f。以便跟踪该句柄的使用情况。
c)发现在行号2,f作为参数,被API fclose引用,而fclose恰好是与fopen对应的API操作,表示文件句柄的关闭。
在此,对于这个文件资源的检测完毕。结论: 没有资源泄露
根据以上分析,只需要定位关键API,并跟踪相应的变量使用即可。进一步,考虑下面这段带有条件分支的代码段:
void fun ( ) { 1: File f = fopen ( ” c:\test.txt”, rw ) ; 2: if (fRet) { 3: return; } 4: fclose ( f) ; } |
若是根据之前的原则分析,依然得出没有错误的结论,然而可以看到,在行号3处,有一个return语句,这将直接导致函数退出。在这个退出分支中,打开的文件句柄没有得到关闭,必然造成资源泄露。
反思一下分析过程,显然忽略了这么一个事实: fopen的操作是顺次必然执行的, 但其对应的fclose 操作则是受到if( fRet)语句控制,在其后的false控制分支中执行。对于open操作,并不是所有的退出分支都有close操作,所以导致了文件资源的泄露。
将对控制条件的处理引入分析:
a)定位关键API fopen。
b)跟踪返回的句柄,变量f。
c)定位关键API fclose对变量f的引用。
d)比较fopen与fclose是否处在同一逻辑分支。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11