作者: susan, 出处:IT专家网, 责任编辑: 罗丽艳, 2010-02-09 09:07
在任何一门开发语言或者任何一个开发平台中,性能与安全往往是一对矛盾体,在大部分情况下两者不能够兼得。作为开发人员,所需要做的就是在两者之间取得一个均衡。
【IT专家网独家撰稿】在任何一门开发语言或者任何一个开发平台中,性能与安全往往是一对矛盾体,在大部分情况下两者不能够兼得。作为开发人员,所需要做的就是在两者之间取得一个均衡。笔者现在就以C++为例,谈谈在Visual Studio中如何提高其安全性。
一、缓冲区安全检查避免缓冲区漏洞。
有过程序开发经验的人都知道,缓冲区溢出是程序开发中比较常见的错误,也是一个比较大的安全隐患。利用缓冲区溢出这个漏洞进行攻击,也是黑客常用的手段。一个合格的应用程序,不能够犯这种问题。在Visual Studio平台中,提供了一种叫做GS缓冲区安全检查的机制。其主要的工作原理就是将溢出检测代码插入到面临被利用风险的函数中。当这个代码检测到缓冲区溢出时,将会停止相关代码的执行。换一句话说,其是一个动态监测的过程。【IT专家网独家撰稿】
默认情况下(也是笔记所推荐的),这个缓冲区安全检查是打开的。缓冲区安全检查主要的任务是检测试图进入返回地址的直线缓冲区溢出。通过调用约定将函数调用的返回地址保存到堆栈上,从而辨别应用程序是否有缓冲区溢出的漏洞。如果这个机制认为某些函数可能容易出现缓冲区溢出的漏洞,则编辑器会在堆栈上返回地址之前分配空间。在调用这个函数的时候,系统会用安全Cookie加载分配的空间。在调用完毕退出这个函数的时候,则会调用helper函数,以确保这个Cookie值能够保持不变。通过这种安全措施,就不怕黑客利用缓冲区溢出的漏洞进行攻击。【IT专家网独家撰稿】
GS缓冲区检查出了保护函数之外,还可以保护向函数传入易受攻击的参数。在调用函数的时候,往往需要向函数提供相关的参数,如SQL语言等等。但是这些参数也容易被攻击者修改,换成一些恶意的代码进行攻击。通常情况下,如下这些参数容易被攻击者利用。如SQL语言、指针、C++引用、字符串缓冲区等等。这些参数有一个特点,其往往是在Cookie和局部变量之前分配。如此的话,缓冲区溢出可以覆盖这些参数的值。使得使用这些参数的函数中的代码可能在函数返回之前就受到攻击。攻击者之所以需要这么大费周章,主要还是为了避开其他的一些安全检查机制。为了避免这个攻击,其方法也比较简单。即通过GS缓冲区检查机制,让编译器在函数prolog期间复制易受攻击的参数(并不是全部参数),并将他们存储在所有缓冲区域的下方。【IT专家网独家撰稿】
那么在Visual Studio平台中,如何设置这个安全选项呢?通常情况下,用户可以通过如下步骤来进行设置。一是依次打开“属性页”对话框、单击C/C++文件夹、单击代码生成属性页。二是在打开的对话框中找到“缓冲区安全检查”这个选项,然后可以修改相关的属性。如选择是打开还是关闭这个检查。笔者建议,如果没有充分的原因,最好还是打开这个安全检查机制。其虽然不能够百分之百的避免缓冲区溢出,但是其有效性还是能够达到95%以上。故在应用程序开发中推荐使用。【IT专家网独家撰稿】
二、企业代码分析帮助发现潜在的安全问题。
其实应用程序的很多漏洞,都是开发人员不良习惯所造成的。如没有初始化内存、Null指针取消引用、内存泄漏等等。为了避免这些不良的做法对应用程序造成的潜在威胁,系统提供了一个企业代码分析的工具。通过这个工具可以帮助程序开发人员发现如上的一些潜在的安全问题。不过这个代码分析会影响到应用程序的性能。为此系统默认情况下是将其禁用的。笔者认为,对于不怎么专业或者刚进入这个领域的开发人员来说,这个工具是必不可少的。在这个工具的帮助下,可以改正其许多不良的开发习惯。
要启用这个工具的话,可以按如下的步骤做。第一步是打开某个项目的“属性页”对话框,展开“配置属性”节点,打开“代码分析节点”。第二步选择“常规”属性页,在打开的属性页上可以看到“代码分析”属性。根据需要打开或者关闭这个选项。【IT专家网独家撰稿】
打开这个选项后,系统会自动进行检测。如果发现一些潜在的问题之后,系统就会提出警告。如警告C6066:传递了非指针参数;警告C6029表示对函数的调用中可能会发生缓冲区溢出,使用了未经检查的值等等。这些警告信息对于提高应用程序的安全是很有帮助的。
三、安全异常处理程序保障异常处理程序的安全。
在应用程序开发过程中往往会加入很多的异常代码。如在四则运算中,遇到除数为0的情况。如在ERP系统或者财务系统中,遇到会计期间关闭的情况等等。异常处理程序可以保证在遇到一些不符合逻辑运算或者判断的条件下,后续的代码不会被执行。从而企业最终结果不会对用户产生误导。【IT专家网独家撰稿】 |
|