实例原理
相信“ 文件” 输入参数,没做检查直接用作memcpy 的参数。PNG漏洞,不同的模式逻辑问题1:
EEYE PNG (Portable Network Graphics) Deflate Heap Corruption Vulnerability
原因:对 Length 码 #286 and #287没有做正确的处理,导致解压程序认为长度是0
do { *dest = *src; ++dest; ++src; } while (--len);
逻辑问题2:libPNG 1.2.5 堆栈溢出
代码:
if (!(png_ptr-mode & PNG_HAVE_PLTE)) {
/* Should be an error, but we can cope with it */
g_warning(png_ptr, "Missing PLTE before tRNS"); }
else if (length (png_uint_32)png_ptr-num_palette) {
g_warning(png_ptr, "Incorrect tRNS chunk length");
g_crc_finish(png_ptr, length);
return;
}
分析:代码编写的逻辑错误,错误的使用了else if.
相似漏洞:MSN png 漏洞,Media player png 漏洞
逻辑问题的总结
非常容易出现在复杂的文件格式处理中
容易出现在压缩,解压代码中:需要处理很多长度,大小相关的参数。
这种漏洞不一定是缓冲区溢出,也可能是越界访问等等
想象漏洞
发现漏洞有时候是一种想象的过程
例子1:
Venustech ADLab:Microsoft windows Kernel ANI File Parsing Crash Vulnerability
介绍:ANI是WINDOWS 支持的动画光标格式,在ANI是由多个普通的光标文件组成一个动画,其中ANI文件的头处会标记是几个图标frame,WINDOWS 的内核在显示光标的时候并未对该值进行检查,如果将这个数字设置为0,会导致受影响的windows系统计算出错误的光标的地址并加以访问,触发了内核的蓝屏崩溃。不仅仅是应用使用ANI文件时会触发,只要在EXPLORER下打开ANI文件存在的目录就会触发。攻击者也可以发送光标的文件,引诱用户访问含有恶意光标显示的页面,以及发送嵌入光标的HTML邮件,导致被攻击者系统蓝屏崩溃。
原理:在计算frame地址的时候失败。
例子2:
Venustech ADLab:Microsoft windows Kernel ANI File Parsing DOS Vulnerability
介绍:ANI是WINDOWS 2000支持的动画光标格式,在ANI是由多个普通的光标件组成一个动画,其中ANI文件的头处会标记每FRAME切换的频率,该值越小切换的速度越快,WINDOWS 的内核在切换光标FRAME的时候并未对该值进行检查,如果将这个数字设置为0,受影响的windows的内核会陷入内核的死锁,不再响应任何用户界面的操作。该漏洞触发必须要在使用ANI文件的应用中才能触发,攻击者引诱用户访问含有恶意光标显示的页面,以及发送嵌入光标的HTML邮件,导致被攻击者系统内核死琐。
原因:没有考虑刷新频率是0的情况。
总结
下溢:Size参数小于自身所占大小
上溢:Size加上一个正整数值产生上溢
直接作为参数输入memcpy类函数
非法参数导致地址访问越界
多种逻辑上的错误
充分发挥想象:刷新率?
总结
安全提示:
文件格式是攻击者的另一种输入渠道,同样不要信任从文件读取的数据
解析文件格式时应该对参数进行充分的检查
同样需要想象力,需要考虑到每种可能的情况
细节:同样存在一个size参数这次是它本身的大小是4字节,所以当size值为0-3时就会发生整数溢出