13.0 前言
本章重点包括:
- 为什么有人想攻击计算机
- 哪些类型的攻击是常见的
- 如何与开发小组协作确认安全问题
- 为什么软件安全问题与软件缺陷是同一回事情
- 软件测试员在发现安全漏洞方面可以做哪些事情
- 作为新的领域的计算机取证与软件安全性测试有何关系
13.1 战争游戏——电影
13.2 了解动机
作为软件测试员很重要的一点是要了解为什么有人要攻击你的软件。了解动机能帮助软件测试员考虑到测试的软件中有哪些安全方面的漏洞。
安全产品是指产品在系统的所有者或者管理员的控制下,保护用户信息的保密性、完整性、可获得性,以及处理资源的完整性和可获得性。
安全漏洞是指使产品不可行的缺陷——即使是正确地使用产品——防止攻击者窃取系统的用户权限、调节操作、破坏数据,或建立未授权的信任。
黑客是指精通计算机编程和使用的人、电脑玩家,使用编程技能来获得对计算机网络或文件的非法访问的人。
黑客想获得系统访问权限的5个动机是:
-
挑战/成名。
-
好奇。在这种心理下,黑客不会停止在仅仅获得访问权限上。一旦进入后,他会进一步去看里面有什么。
-
使用/借用。黑客为自己的目的会尝试使用系统。
-
恶意破坏。一想到恶意破坏,请记住三个D:丑化(Defacing)、破坏(Destruction)、和拒绝服务(Denial of Service)。丑化是改变网站的外观来展示黑客的意见和想法。破坏以删除或修改存储在系统上的数据为表现形式。拒绝服务是阻止或妨碍被黑的系统执行正常的操作。
-
偷窃。其动机是找出可以可以使用和出卖的有价值的东西。
13.3 威胁模式分析
威胁模式分析用于评估软件系统的安全问题。在这个过程中,目的是由评审小组查找产品特性设置方面可能会引起安全漏洞的地方。根据这些信息,小组可以选择对产品做修改,花更多的努力设计特定的功能,或者集中精力测试潜在的故障点。最终,这些做法会使产品更加安全。
执行威胁模式分析并非软件测试员的责任。这个责任应该落到项目经理的任务清单上,并且项目小组的每个成员都要参与。
威胁模型分析过程的步骤如下:
-
构建威胁模型分析小组。除了标准的小组成员外,小组中加入一个具有深厚的软件安全背景的人至关重要。对于小组来说,重要的一点是了解他们的最初目标不是解决安全问题,而是确定安全问题。在后期可以举行一些由小规模的特定团队参加的会议(例如,由几个程序员和测试员参加的会议),以隔离安全威胁,设计解决方案。
-
确认价值。考虑系统所有的东西对于一个入侵者说价值有多大。系统是否有客户的个人信息?是否有信用卡号码?系统计算能力如何?是否有人想偷偷利用你的系统来向你的客户发送商业信息?如果你的公司网站被黑掉,不管是丑化还是替换,是否会带来业务的损失?
-
创建一个体系结构总体图。在这个步骤中要确认计划用在软件中以及如何实现互连的技术。小的威胁模型分析小组会创建一个体系结构图表示出主要的技术模块和它们之间如何通信。创建体系结构图的另一个重要的方面是,确认在不同技术和其证明之间的信任边界以及为了访问数据必须进行的授权。
-
分解应用程序。这是一个格式化的过程,用来确认数据所在位置以及如何通过系统。想想作为容器的数据以及哪些使容器安全。进入容器来查看数据的手段是什么?数据加密了吗?口令保护了吗?
-
确认威胁。每一个部分都应该考虑为威胁目标,并且应假设它们会受到攻击。想想是否每一部分都可能被不正确地看待。每一部分是否能被修改?黑客是否能阻止授权用户使用系统?是否有人能获得系统的访问权限并控制系统?
-
记录威胁。每个威胁都必须用文档记录,并且应进行跟踪以确保其被解决。
-
威胁等级评定。一个简单的办法是使用msdn.microsoft.com/library上“提高Web应用安全”那一章中定义的恐怖公式(DREAD)。DREAD表示:
-
潜在的损害——如果这部分被黑了,损害有多大?
-
可反复性——黑客不间断利用漏洞的容易度如何?
-
可利用性——获得对系统或数据访问的技术难度有多大?是可以通过互联网用电子邮件发送,或用几行简单的BASIC写的宏代码,还是需要具有专业编程技能的人员来实现?
-
受影响的用户——如果黑客成功入侵,有多少用户会受到影响?
-
可发现性——黑客发现漏洞的可能性有多大?
13.4 软件安全是一项功能吗?软件漏洞是一个缺陷吗
软件测试员需要带上“失效性测试”的帽子,像黑客一样攻击被测试的软件——假定每一项功能都有一个安全漏洞,并且作为测试员,这是你的工作是发现并利用它。
13.5 了解缓冲区溢出
在任何软件产品中都有一个安全问题——缓冲区溢出。
缓冲区溢出攻击
13.6 使用安全的字符串函数
下表显示了不安全函数及其替代函数的清单。
项目小组在进行代码评审或者白盒测试时,注意关注不安全的函数及其使用。显然,小组程序员应该使用安全版本的函数。但是如果没有使用,代码评审就要更加严格地进行,以确保任何可能的安全漏洞都被发现并解决。
13.7 计算机取证
用户变更时未被删除的保留数据叫做潜在数据。潜在数据是潜在的安全漏洞,需要在小组采用的任何威胁模型分析中进行讨论。也许这些数据不会被看成是产品的问题,而被看成是一个大问题。
13.8 小结
从本章中得到的一个体会应该是:没有计算机系统时安全的。我们应该假定计算机系统一直处于受攻击的状态,攻击者或者想控制计算机,或者想访问上面的数据。为帮助设计一个安全的系统,在产品设计的开始就必须注意安全的问题。测试员仅能测试软件的安全性,软件安全必须先计划、评审、设计,然后才是测试。使用具有反复性的软件开发过程,例如螺旋模式,可以确保在整个开发过程中安全的问题被再次提到。
跟踪最新的计算机安全问题的最有参考价值的网站是www.securifocus.com。如果在负责软件安全的测试,或者甚至没有,定期浏览该网站是个好办法,看看黑客们在干什么,以及他们是如何破坏大大小小的系统的。