- 讲师:刘萍萍 / 谢楠
- 课时:160h
- 价格 4580 元
特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关
配套通关班送国网在线题库一套
一、前言
因为最近几年一直都在跟踪网络安全领域的新漏洞,所以特别强烈的感觉到出现的系统漏洞有越来越难利用的趋势。以IIS的溢出漏洞为例,从前几年的.htr映射的溢出漏洞、.printer映射的溢出以及后来的.ida/idq溢出,一直到去年的.asp溢出,真的是一次比一次难以利用了,攻击成功的概率越来越小。究其原因,就是因为软件厂商的安全意识越来越强,像用strcpy直接拷贝buffer造成溢出的这种低级漏洞几乎是再也不可能出现了 即使是这样,也并不意味着以后再也不会出现漏洞了,因为攻击技术也是在不断发展的。像最近整型溢出又是比较热门的东西,因为最近一些比较严重的漏洞都是由于整型溢出造成的,例如IIS ASP溢出、Apache分块编码溢出、openssh响应机制溢出等等。虽然这种溢出本身并没有什么高深之处,但是也有必要进行总结,因为今后在这方面很可能会产生相当多的漏洞。
二、整型溢出与传统溢出的共性和区别
首先应该明确所谓"溢出"的概念,根据我的理解,应该是程序外部的数据大小超出了原数据类型所能表达的范围,造成某些错误的操作。这里所提到的数据类型不仅仅是字符串类型,也包括整型、无符号整型甚至布尔类型等一切由程序外部所提供的数据。从这个角度来说,格式化字符串漏洞应该不属于溢出的范围。
传统的溢出一般都是发生在字符串类型数据上面,用户提交的数据超出程序分配的字符串大小,造成覆盖系统数据结构,最终导致程序流程改变。而整型溢出顾名思义,就是由用户提交的整型数据超出程序内部对整型数的安全要求,造成违反原来的程序限制,导致其他类型的溢出。一般来说,整型溢出并不能直接导致改变程序流程,它是由整型溢出造成字符串类型的溢出,从而导致覆盖系统数据结构,改变程序流程 值得注意的就是程序内部对整型数的安全数据范围要求,而不是仅仅字符串数据范围的要求,这是整型溢出的根本原因,下面将详细介绍。
三、什么是整型数溢出
1.计算机中的整数概念
在计算机中,整型的概念就是一个特定的变量类型。在不同的CPU系统上被编译处理后,整型和指针的尺寸一般是相同的。例如,在32位的系统中,比如x86,一个整数是32位;而在64位的系统中,比如SPARC,一个整数是64位长。本文中所谈到的例子是在32位的系统环境和32位的整数,并且用10进制来表示它 但是仅仅是这样还不够,因为这样还无法表示负数,所以就需要一种机制仅仅用位来代表负数,通过一个变量的最高位来决定正负。如果最高位置1,这个变量就被解释为负数;如果置0,这个变量就解释为正整数。因此通常的高级语言中都有有符号整型(int)和无符号整型(unsigned int)之分,下面我们就要讨论这两种整型数所带来的安全问题。
2.对整型数的安全要求
一般程序员写程序,对于整型数仅仅考虑使用范围,而不考虑它的安全要求。对于不同用途的整型数,其安全要求也不相同。例如最容易出问题的是由用户提交的用作长度变量的整型数,对其他部分数据的安全要求往往集中在上面。用作长度的变量一般要求使用无符号整型数。在32位系统中,无符号整型数(unsigned int)的范围是从0-0xffffffff。不仅要保证用户提交的数据在此范围内,还要保证对用户数据进行运算并存储后仍然在此范围内。
四、整型数溢出的成因分类
整型数溢出从造成溢出原因的角度来说可以分为三大类:存储溢出、计算溢出和符号问题。下面就分别来谈谈他们之间的共性和区别
1.存储溢出
存储溢出是最简单的一类,也很容易理解。简单说就是使用不同的数据类型来存储整型数造成的。例如下面程序所示:
short len2 = len1;
看到这里读者可能会想,只要不把长类型的变量赋给短类型变量就行了。其实并不是那么简单,把短类型变量赋给长类型变量同样存在问题,例如如下代码:
int len1 = len2;
责编:罗莉
上一篇:改进的移动IPv6协议分析
下一篇:网络工程师指导:降低网络复杂性
课程专业名称 |
讲师 |
课时 |
查看课程 |
---|
课程专业名称 |
讲师 |
课时 |
查看课程 |
---|
点击加载更多评论>>