龙源期刊网软件安全问题初探作者:崔丹丹张二峰来源:《商场现代化》2009年第04期[摘要]软件的安全问题是安全的软件产品在软件生命周期的各个环节都必须解决的技术问题。本文详细分析了软件开发的设计、编写代码、安全性测试和维护等各个阶段存在的安全问题,并提出了相应的解决方案。[关键词]威胁建模安全性测试漏洞响应一、软件设计阶段威胁建模安全从设计开始。软件在设计阶段达到的安全性能将是软件整个生命周期的基础,如果在设计阶段出了安全问题,那将成为致命的缺陷,所以设计要尽可能完善。在软件设计阶段应该明确安全方面有哪些目标需要达到、软件可能遇到的攻击和安全隐患等。威胁建模是在软件设计阶段加入安全因素的好办法。威胁建模除了和设计阶段的其他建模工作类似的地方外,更加关心安全问题,如在模型中应当指明安全边界、指明哪些数据是可信的、哪些输入接口应当被假设为攻击目标、列举所有潜在的攻击方式等。常见的威胁建模一般会包括以下几方面内容:1.Description:对系统的简短描述。一般要求突出数据流穿越安全边界、身份验证发生在哪里,哪些操作应当被假设为攻击等。2.DFD:数据流图描述。它关注的是数据的走向,一般需要表明系统安全边界和所有出入安全边界的数据,系统安全边界以外的所有输入都将被假设为潜在的攻击性输入,在其穿越安全边界进入系统之前应当经过严格的格式检查或身份验证。3.CheckandBalances:一般是一组表,需要列举出系统所有的输入点,并标明这些接口的数据来源是否可信等。4.Threats:这部分应该列举出系统可能遇到的所有潜在安全风险和攻击方式。二、安全代码的编写在软件的代码编写阶段,同样有许多安全问题需要注意,因为因为程序员往往会在不经意间使用一些不安全的函数。见下面一段代码:functiondemo(char*a)龙源期刊网{charb[100];…strncpy(b,a,strlen(a));…}在这一段代码中,当传入的字符串a的长度大于100字节的时候,将发生溢出。再如下面一段修改demo函数的代码:functiondemo(char*a){char*b;…intlen=strlen(a);b=malloc(len+1);strncpy(b,a,stlen(a));…}仔细考虑一下里面的安全问题,其实这并不能绝对确保程序里传入的字符a不是一个NULL指针,另外还需要考虑在哪里free堆空间,否则将会造成内存泄露。可见,做到真正安全的使用这些字符串操作函数并不是一件非常简单的事情。VisualStudio2005在编译时可以自动警告堆strcpy、strcat等不安全函数的调用,我们可以使用VS2005提供的一套新的安全字符串操作函数,如strcpy_s()、strncpy_s()、stncat_s()等。软件的代码编写阶段的安全除了要求程序员提高编程质量之外,使用GS安全编译选项也能大大提高软件的安全水平。三、软件的安全性测试龙源期刊网测试作为软件发布前重要的一步工作,肩负着软件可用性和安全性等诸多任务,所以也决定着软件的质量。而安全性测试和普通的功能性测试主要目的不同,前者是“确保软件不会去完成没有预先设计的功能”,而前者只是“确保软件能够完成预先设计的功能”。安全性测试是安全的软件生命周期中一个重要的环节。进行安全测试需要精湛的攻击技术、敏锐的黑客思维和丰富的开发经验。一次安全性测试实际上就是一轮多角度、全方位的攻击,其目的就是要抢在攻击者之前尽可能多的找到软件中的“所有”漏洞,以减少软件遭到攻击的可能性。安全性测试非常灵活,需要像黑客一样思考,有时甚至需要一点灵感,因此没有固定的步骤可以遵循。测试方案中通常使用使用畸形的文件结构、发送畸形的数据包、用户输入的验证、验证资源之间的依赖关系、伪造程序输入和输出时使用的文件、古怪的路径表达方式、异常处理、访问控制与信息泄露和对程序反汇编等方法。四、漏洞响应和产品的维护即使在设计、代码编写和测试过程中加入了安全因素,最终的软件产品仍可能存在漏洞。当漏洞被发现后,迅速确认、响应、修复漏洞是非常重要的。所以,软件的维护和跟踪要及时持续。大型的软件公司都会有自己的安全响应队伍专职处理安全事件,在发现漏洞后的第一时间采取措施,以保护客户的利益不被侵害。一般来说,正常的漏洞响应可以大致分为以下4个阶段:1.发现漏洞通知厂商:漏洞首先被报告给安全响应中心,经过初步的鉴定,安全响应队伍回想漏洞上报者确认已经收到漏洞报告,此刻正在进行分析。2.确认漏洞和风险评估:安全响应队伍会联系上报者和相关产品的开发部门,以获得更多的技术细节,有时甚至会将上报者和开发团队召集在一起进行讨论。当漏洞被成功重现后,为漏洞定一个威胁等级。3.修复漏洞:安全响应队伍和开发队伍协商决定解决方案,并确定响应工作的时间表。开发部门开始修复漏洞,补丁完成后,进行严格的测试。4.发布补丁及安全简报:对外公布安全补丁,通知所有用户patch漏洞,在网站上发布安全简报,其中会特别感谢上报漏洞和协助修复漏洞的安全研究人员。参考文献:[1]李昕陈智李俐:开源软件安全问题与对策[J].计算机安全,2008.4[2]宋吉广:软件世界[J].中国期刊全文数据库,2007.21