摘要:软件安全性是一个广泛而复杂的主题,要避免因安全性缺陷问题受各种可能类型的攻击是不切实际的。
本文从软件
安全测试需要考虑的问题,来探讨软件安全测试原则,通过遵循这些原则避免许多常见的
安全性测试问题出现。
软件安全性是一个广泛而复杂的主题,每一个新的软件总可能有完全不符合所有已知模式的新型安全性缺
陷出现。要避免 因安全性缺陷问题受各种可能类型的攻击是不切实际的。在软件安全测试时,运用一组好的
原则来避免不安全的软件上市、避免不安全软件受攻击,就显得十分重要。
一、软件安全性测试基本概念
软件安全性测试包括程序、网络、数据库安全性测试。根据系统安全指标不同测试策略也不同。
1.用户程序安全的测试要考虑问题包括:
1)明确区分系统中不同用户权限;
2)系统中会不会出现用户冲突;
3)系统会不会因用户的权限的改变造成混乱;
4)用户登录密码是否是可见、可复制;
5)是否可以通过绝对途径登录系统(拷贝用户登陆后的链接直接进入系统);
6)用户推出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入统;
2.系统网络安全的测试要考虑问题包括:
1)测试采取的防护措施是否正确装配好,有关系统的补丁是否打上;
2)模拟非授权攻击,看防护系统是否坚固;
3)采用成熟的网络漏洞检查工具检查系统相关漏洞;
4)采用各种木马检查工具检查系统木马情况;
5)采用各种防外挂工具检查系统各组程序的客外挂漏洞。
3.数据库安全问题考虑
1)系统数据是否机密(比如对银行系统,这一点特别重要,一般的网站就没有太高要求);
2)系统数据的完整性;
3)系统数据的可管理性;
4)系统数据的独立性;
5)系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整);
二、根据软件安全测试需要考虑的问题
1.保护了最薄弱的环节
攻击者往往设法攻击最易攻击的环节,这对于您来说可能并不奇怪。即便他们在您系统各部
分上花费相同的精力,他们也更可能在系统最需要改进的部分中发现问题。这一直觉是广泛适用
的,因此我们的安全性测试应侧重于测试最薄弱的部分。
该软件的原始版本十分“天真”,完全没有使用加密。现在该软件想修正这一问题,但已建
立了广大的用户基础。此外,该软件 已部署了许多或许在长时间内都不会升级的服务器。更
新更聪明的客户机和服务器需要同未使用新协议更新的较旧的客户机进行互操作。该软件希望
强迫老用户升 级,没有指望老用户会占用户基础中如此大的一部分,以致于无论如何这将真
的很麻烦。怎么办呢?让客户机和服务器检查它从对方收到的第一条消息,然后从中确 定发生
了什么事情。如果我们在同一段旧的软件“交谈”,那么我们就不执行加密。
遗憾的是,老谋深算的黑客可以在数据经过网络时,通过篡改数据来迫使两台新客户机都
认为对方是旧客户机。更糟的是,在有了支持完全(双向)向后兼容性的同时仍无法消除该问题
题。对 这一问题的一种较好解决方案是从开始就采用强制升级方案进行设计;使客户机检测到
服务器不再支持它。如果客户机可以安全地检索到补丁,它就升级。否则,它 告诉用户他们
必须手工获得一个新的副本。但是从一开始就应准备使用这一解决方案,就会得罪早期用户。
测试采取的防护措施是否正确装配好,有关系统的补丁是否打上就十分的重要。
4.最小特权
最小特权原则规定:确定只授予执行操作所必需的最少访问权,并且对于该访问权只准许
使用所需的最少时间。
当 软件给出了某些部分的访问权时,一般会出现滥用与那个访问权相关的特权的风险。
例如,我们假设您出去度假并把您家的钥匙给了您的朋友,好让他来喂养您的宠 物、收集邮
件等等。尽管您可能信任那位朋友,但总是存在这样的可能:您的朋友未经您同意就在您的房
子里开派对或发生其它您不喜欢的事情。
一位程序员可能希望访问某种数据对象,但只需要从该对象上进行读。不过,不管出于什
么原因,通常该程序员实际需要的不仅是必需的特权。通常,该程序员是在试图使编程更容易
一些。
如果软件设置的访问权结构不是“完全访问或根本不准访问”,那么最小特权原则会非常有
效。
5.分隔
分隔背后的基本思想是如果我们将系统分成尽可能多的独立单元,那么我们可以将对系统
可能造成损害的量降到最低。
通常,如果攻击者利用了代码中的缓冲区溢出,对磁盘进行原始写并胡乱修改内核所在内
存中的任何数据。没有保护机制能阻止他这样做。因此,系统进行适度的分隔显得十分重要,
软件要能直接支持本地磁盘上永远不能被擦去的日志文件,这意味着直到攻击者闯入时,才不
能保持精确的审计信息。
适度使用的分隔,将利于系统的管理,但是对每一个功能都进行分隔,那么系统将很难管理。
三、安全性测试的主要目的是查找软件自身程序设计中存在的安全隐患,并检查应用对非法侵入的
防范能力,根据安全指标不同测试策略也不同,如果遵循相同的原则,去证明软件的安全性,将有
利于软件测试安全测试的工作规范的进行,有利于软件安全测试工作的发展。
安全测试检查系统对非法侵入的防范能力。安全测试期间,测试人员假扮非法入侵者,采
用各种办法试图突破防线。
例如:
1)想方设法截取或破译口令;
2)专门定做软件破坏系统的保护机制;
3)故意导致系统失败,企图趁恢复之机非法进入;
4)试图通过浏览非保密数据,推到所需信息,等等。
理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则
是,使非法入侵的代价超过被保护信息的价值。此时非法入侵者已无利可图。
安全测试用来验证集成在系统内的保护机制是否能够在实际中保护系统不收到非法入侵。