快捷搜索:  网络  后门  扫描  渗透  CVE  木马  黑客  as

源码审计之空指针引用漏洞

*

媒介

近来在网上加入了一个安全团队,内里有人问我怎么样做代码审计。只能说先能看得懂代码,了解种种漏洞的形成缘故起因。然后多进行审计以及调试演习。 这是刚学习源码审计时写的一遍考核过程, 希翼人人做个参考。(php的文章很多,来一篇C说话的)

1、空指针漏洞缘故起因

Null Pointer空指针的引用,对于空指针的错误引用往往是由于在引用之前没有对空指针做判定,就直接使用空指针,还有可能把空指针作为一个对象来使用,间接使用对象中的属性或是要领,而引启程序崩溃。

二、空指针漏洞难以发现的缘故起因  

空指针(NullPointer)引用导致的错误,依赖代码审计工具很难发现其中的错误,因为空指针的引用一般不会发生在出现空指针然后直接使用空指针情形。往往是由于代码逻辑比较复杂空指针引用的地位会比较遥,黑客工具,不容易发现;并且在正常情形下不会触发,只有在某一个特定输入前提下才会诱发空指针引用。对于排查此类错误也就愈加难题。

3、白盒阐发是空指针引用

3.1  三个前提

图片.png

3.2.rats软件先容

RATS是一个代码安全审计工具,可扫描 C、C++、Perl、PHP 以及 Python 源码,检查出一些常见的安全问题,例如缓冲区溢出以及 TOCTOU (Time Of Check, Time Of Use) 。 rats软件版本v2.3。

3.3.sourceinsight查找阐发

(1)由于软件本身是代码审计工具,所以缓冲区之类的溢出就不检查了。直接查找空指针NULL是否存在。

图片.png

剔除出掉指针初始化赋值。

首要针对数据赋值。

找到了一下几处。

可疑点1:

图片.png

可疑点2:

图片.png

可疑点3:

图片.png

可疑点4:

图片.png

可疑点5:

图片.png

可疑点6:

图片.png

(2)可疑点是否有调用

可疑点1查看其调用点发现所有的都针对NULL做了判定,所以不存在空指针引用。排除。

图片.png

可疑点2:

所有文件中查找后发现就赋值了一次。再也没使用过此字段。排除.

图片.png

可疑点3:

所有文件中查找就只有一处使用,而且做了判定。故排除。

图片.png

可疑点4:

所有文件中查找就一处使用,别的做赋值,使用部分做了判定,故排除。

图片.png

可疑点5以及可疑点6一块儿阐发。

图片.png

下面的引用还有未做是否为空的判定。

图片.png

进一步阐发可疑点5:函数名为staticbuffer,有引用,所以可疑点5有可能性。

图片.png

进一步阐发可疑点6,函数名phpbacktick,没有对data的引用,所以可以排除可疑点6.

图片.png

(3)对触发前提进行阐发梳理。   

第一步:赋空值的前提

倒推出StaticGlobalBuffer为前提。可以看到下图中的数据。

图片.png

2.调用的前提:

经过查找发现

build_html_vulnerability(vulnerability_t*ptr)

report_vulnerability(vulnerability_t*ptr)

存在引用data。

所以可以得知。

一个C或Cpp文件中有char类型的全局缓冲区变量(char数组),就可以触发这个异常。

4、验证漏洞

1.根据白盒可得知以下文件即可诱发漏洞,1.c文件里只有

char a[10]; 一句代码。 

图片.png

2.生成文件验证。

gdb rats

set args --html  1.c

可以得到以下效果。

图片.png

发现并没有诱发异常。

所以build_html_vulnerability函数的调用栈。

图片.png

前面有一个前提,要是告警不等于默认和小于2类。就忽略掉。

然则全局字符的告警为low,不等于默认然则小于2类,忽略。

图片.png

所以需要前提来使告警不被忽略,所以要改变warning_level的值,查找

warning_level的引用。发现以下图
图片.png

当输入参数小于1时为1,只需warning_level为1时,(low=1)<1不成立,则忽略可以不被忽略即可。所以只需optarg大于等于3即可达到前提。

重新配置参数 set args –w4 –html  1.c,发现已经出现错误了。

图片.png

图片.png

由于xml格式显示也是如许的。所以重新配置参数 set args –w4 –xml  1.c   输出也同样。

图片.png

图片.png

5、总结

本次使用到的工具,rats-2.3(源码自行下载),sourceinsight,gdb,peda。学习的时辰写一个一片过程总结,今天发表出来。   希翼人人做个参考。

*

您可能还会对下面的文章感兴趣: