与内存访问相关的软件缺陷典型案例剖析

2016-10-18 22:03孟宏伟
电脑知识与技术 2016年21期
关键词:软件缺陷软件可靠性

孟宏伟

"

摘要:内存访问异常能够导致严重的软件缺陷。详细介绍了与内存访问相关的软件缺陷典型案例,深入剖析了这些缺陷产生的原因、带来的影响,并针对性地给出了解决方法和预防措施。对提升软件可靠性具有实际意义。

关键词:软件可靠性;软件缺陷;案例剖析

中图分类号:TP311.55 文献标识码:A 文章编号:1009-3044(2016)21-0076-05

Abstract: Memory access exceptions can cause serious software defects. Typical case of software defects related to memory access is introduced in detail. The causes and effects of these defects are analyzed, and the targeted solutions and preventive measures are given. Has practical significance to improve the reliability of software.

Key words: software reliability; software defect; case analysis

随着软件规模和复杂性的快速增长,软件开发难度也在增大,导致在开发过程中存在某些不确定性的错误或缺陷。正是在开发过程中不可避免地存在缺陷,造成软件在使用中给用户带来不少损失,因此软件的可靠性和软件质量越来越受到重视[1]。软件测试是软件生命周期模型中的重要阶段,是保证软件质量和提高软件可靠性的重要途径[2]。系统对软件质量和可靠性的要求越来越高,给软件测试行业带来巨大挑战。

C/C++是广泛用于系统和应用软件开发的语言,也是使用最为广泛的编程语言[3]。同时C/C++也是易学难用的语言,程序中指针和数组的灵活性在于它能让程序员方便地对内存进行操作,但这种灵活性也容易成为问题的所在。因此C/C++开发的系统往往更容易产生严重的生产事故,一旦出现事故,定位问题根源也比较困难。

本文将根据实际工程经验,总结出软件测试过程中遇到的与内存访问相关的典型问题,并通过对这些问题的阐述和分析,提出了预防此类问题发生的解决方法。在每个案例中,先给出错误代码示例,然后分析缺陷的现象、原因和后果,最后给出解决方案和建议。

本文案例有助于提升软件测试人员分析和审查代码的能力,从而快速发现并准确定位软件问题;对于开发人员,有利于助其绕过Bug构建稳定可靠的生产系统、编写出健壮可靠的代码,从而达到提高软件质量,减少生产故障,提高工作效率的目的。

1 与内存访问越界相关的缺陷案例分析及解决方案

在严重威胁软件系统可靠性和安全性的多类软件缺陷中,内存访问越界属于危害性很强且广泛存在的一类缺陷[4]。内存越界多数情况下,系统内存检查机制也不能立即给出出错信息,它们隐藏在程序中,随时会引起系统崩溃,而且定位非常困难。许多经定位、抽象之后看似简单的问题,在规模较大且逻辑复杂的情况下往往容易被忽略。

1.1 计算得到错误的下标导致数组越界

1.1.1 问题描述

int i, arr[10];

i = num_a – num_b ;

arr[i] = i;

1.1.2 机理分析

当num_a – num_b的值小于0或大于等于10时,将造成对数组arr的越界写入,带来难以预测的风险,可能导致段错误。

1.1.3 风险控制方法

当数组下标由计算得出时,使用前应检查其合法性。避免出现可导致程序出错的非整数下标和负下标等。

1.2 函数返回错误的下标导致数组越界

1.2.1 问题描述

int i, arr[10];

i = getIndex();

arr[i] = i;

1.2.2 机理分析

当getIndex函数返回的值小于0或大于等于10时,将造成对数组arr的越界写入,带来难以预测的风险。

1.2.3 风险控制方法

当数组下标由函数返回得到时,使用前应检查其合法性。

1.3 循环次数错误导致数组越界

1.3.1 问题描述

int i, arr[10], num;

for(i = 0; i <= num; i++)

{

arr[i] = 0;

}

1.3.2 机理分析

整型数num经过一系列运算后,作为循环控制变量决定着循环次数,未经判断的情况下,当num大于等于10时,将会导致死循环,甚至更严重的后果。原因在于循环越界,访问了arr[10]的位置,即赋值arr[10] = 0,而根据局部变量在栈中的分布方式,arr[10]的位置即为变量i的位置,此时i被赋值为0,导致循环条件依然成立,陷入死循环;当num大于10时,将越界覆盖更多内存,带来严重的隐患。

1.3.3 风险控制方法

当数组下标由循环变量控制时,使用前应检查其合法性。C/C++语言中数组下标越界,编译器是不会检查出错误的,但一旦出错后果会很严重,可能会导致程序崩溃等。因此当使用变量作为数组下标访问数组元素时,检查数组下标的合理性是一个良好的编程习惯。

1.4 由strcpy函数造成的数组访问越界

2 网络安全管理实施对策

2.1 在全网部署硬件防火墙

根据内部网络的需求,在内网和外网之间架设硬件防火墙,隔离外网与内网之间的访问。在防火墙中打开IP和端口控制,设立DMZ区,打开所需的常用网络服务如HTTP、FTP等,这样就可防范外部对内部用户的攻击;及时查看防火墙的日志文件,对防火墙的管理可以指定独立的管理IP。通过对防火墙规则的设置,使用户需要的应用协议才能通过,让内部网络变得更安全。

2.2 利用专用服务器安装网络版杀毒软件

采用网络版杀毒软件,可以对整个内部网络采取全面的病毒防护。现在的网络版杀毒软件有瑞星和江民。他们都能对整个内部网络进行防病毒统一管理,制作一定的防病毒策略,定时对全网系统进行自动查、杀病毒。网络防病毒策略一般包括:升级和修补,及时更新病毒程序包和杀毒软件版本;备份,定时备份所需的重要数据以便在出现故障时进行恢复;安装软件时使用经过确认的软件包;一旦某台机器感染病毒,找到感染源并彻底清除;任何客户端都不能自行卸载杀毒软件,设立卸载密码。

2.3 网络安全漏洞修补

定期采用专用的漏洞扫描软件对内部网络的专用服务器如WWW服务器、视频会议服务器、数据库服务器、FTP服务器等进行漏洞扫描、分析和评估,并生成扫描报告。根据评估的安全风险,及时修补漏洞及下载系统更新补丁,还要对重要数据进行备份,以达到增强网络的安全性的目的。

2.4 用户级访问控制

对所有用户采用专用的用户口令和访问规则及权限,以确保只有合法用户才能访问合法资源。网络管理员应该对不同的设备设置不同的口令,而且设置的口令最好是大小写字母、数字加特殊字符等,最好是8位以上的密码,还需要定期更改密码并将密码记录下来。

2.5 内部网络计算机认证访问

我们都知道,计算机的MAC地址在全球是唯一的,在网络中对所有计算机进行IP地址和MAC地址进行绑定,就能够标识每台计算机的使用人,只有经过绑定的计算机的IP才能够访问网络。这种绑定可以使用具有三层功能的核心交换来做,也可以使用软件在专用服务器上做。利用这种绑定不但可以控制网内用户随意更换IP的问题,还可以很容易找到某些存在问题的计算机。

2.6 网络机房安全管理

网络安全管理不仅仅要从计算机硬件、软件和人员使用上管理到位,而且对机房也要纳入安全管理范围,并建立各种安全管理制度,如机房管理制度、设备管理制度、安全系统管理制度、病毒防范制度、操作安全管理制度、安全事件应急制度、各服务器检查备份制度等,建立相应的各种检查记录文件,定期修订不安全的因素,最终采取切实有效的措施保证制度的执行。

通过以上对各种网络安全技术的分析,我们给出了相应的解决问题的对策,从技术和制度管理上保证了疗养院信息网络安全的运行。我相信,随着网络安全管理人员的进一步学习和实践,并积极参加国内外的各种网络安全培训,必将会进一步提高我们信息网络管理的安全,使网络安全正常的运行。

参考文献:

[1] Anne Carasik-Henmi. 防火墙核心技术精解[M]. 北京: 中国水利水电出版社, 2005:10-14.

[2] 戴浩, 杨林. 端端通信系统安全体系结构[J]. 计算机安全, 2004(2).

[3] 谭兵, 吴宗文, 黄伟. 网络入侵检测技术综述[J]. 电脑编程技巧与维护, 2010(2).

猜你喜欢
软件缺陷软件可靠性
基于源文件可疑度的静态软件缺陷检测方法研究
软件可靠性工程综合应用建模技术研究
基于NPE-SVM的软件缺陷预测模型
开源程序的软件缺陷分布特征的量化分析研究
软件可靠性设计技术应用研究
数控系统软件可靠性设计与故障分析技术
软件缺陷管理方案分析
简谈使用BoundsChecker进行计算机联锁系统人机界面软件可靠性测试
ABDOM的参数规范化与离散化改进
IEEE软件可靠性系列标准分析*