1、驾驶攻击

  随着在城域网中普及无线高保真(WiFi)网络,黑客们可以驾驶车子,带着笔记本,在城市的街道上兜圈子,可以搜索到未受保护的无线网络,这种技术是“驾驶攻击”。

  2、了解动机

  作为软件测试员很重要的一点是要了解为什么有人要攻击你的软件。

  了解动机能帮助软件测试员考虑到测试的软件中有哪些安全方面的漏洞。

  安全产品:是指产品在系统的所有者或管理员的控制下,保护用户信息的保密性、完整性、可获得性,以及处理资源的完整性和可获得性。

  安全漏洞:是指使产品不可行的缺陷??即使是正确地使用产品时??来防止攻击者窃取系统的用户权限、调节操作、破坏数据,或建立未授权的信任。

  黑客:精通计算机编程和使用的人,电脑玩家。使用编程技能来获得对计算机网络或文件的非法访问的人。

  黑客想获得系统访问权限的5个动机是:

  (1)挑战/成名

  (2)好奇

  (3)使用/借用

  (4)恶意破坏

  (5)偷窃

  3、威胁模式分析(threat modeling)

  威胁模式分析目的是由评审小组查找产品特性设置方面可能会引起安全漏洞的地方。

  根据这些信息,小组可以选择对产品做修改,花更多的努力设计特定的功能,或者集中精力测试潜在的故障点。

  终,这样理解会使产品更加安全。

  注意:除非产品开发小组的每个人??包括项目经理、程序员、测试员、技术文档写作员、市场人员、产品支持??都理解和认同可能存在的安全威胁,否则小组不可能开发出安全的产品来。

  执行威胁模式分析并非软件测试员的责任。

  这个责任应该落到项目经理的任务清单上,并非项目小组每个成员都要参与。

  一个复杂的系统要求全面的威胁模型分析来确认安全漏洞。

  (1)构建威胁模型分析小组

  对于小组来说,重要的一点是了解他们的初目标不是解决安全问题,而是确定安全问题。

  在后期可以举行一些小规模的特定团队参加的会议,以隔离安全威胁,设计解决方案。

  (2)确认价值

  考虑系统所有的东西对于一个入侵者来说价值有多大。

  (3)创建一个体系结构总体图

  要确认计划用在软件中的以及如何实现互联的技术。

  小的威胁模型分析小组会创建一个体系结构图表示出主要的技术模块和它们之间如何通信。

  (4)分解应用程序

  这是一个格式化的过程,用来确认数据所在位置以及如何通过系统。

  (5)确认威胁

  一旦完全理解了所有的部分(价值、体系结构、数据),威胁模型分析小组可以转向确认威胁。

  每一个部分都应该考虑成为威胁目标,并且应假设它们会受到攻击。

  (6)记录威胁

  每个威胁都必须用文档记录,并且应进行跟踪以确保其被解决。

  文档是一种简单方式,用于描述威胁、目标、攻击可能采用的方式、系统用于防御攻击有哪些反制手段。

  (7)威胁等级评定

  理解并非所有的威胁生来平等这一点很重要。

  4、恐怖公式(DREAD Formula):

  (1)潜在的危害

  (2)可反复性

  (3)可利用性

  (4)受影响的用户

  (5)可发现性

  5、软件安全是一项功能吗?软件漏洞是一个缺陷吗?

  软件安全可以简单地看做是软件产品或系统的另外一项功能。

  软件测试员可能会负责测试软件的整个安全性,或者可能仅仅负责测试被分配测试的功能是安全的。

  软件测试员不需要拿到一份清楚明白地定义软件安全性是如何实现的产品说明书。

  软件测试员也不能假设威胁模型分析是完全和准确的。

  技巧:测试安全缺陷是失效性测试行为,也常常覆盖产品中没有被完全理解和说明的部分。

  6、了解缓冲区溢出

  任何软件产品中都有一个安全问题??缓冲区溢出。

  数据引用错误??既使用没有被正确申明和初始化的变量、常数、数组、字符串或记录引起的缺陷。

  缓冲区溢出是这种缺陷。

  由于字符串的不正确处理引起的缓冲区溢出是目前为止为常见的一种代码编写错误,其结果是导致安全漏洞。

  7、使用安全的字符串函数

  通用C和C++函数中容易引起缓冲区溢出的编码错误。这些函数自身并不差,但是要安全的使用它们,需要在程序员这边进行更为深入的错误检测。如果忽略了这种错误检测,代码会有安全漏洞。

  衡量一下这种疏忽带来的风险,好还是开发或改进一组新的函数,即用强壮、完全测试通过的、文档齐全的新函数集替代这些容易引起问题的函数集。

  这些新的函数,叫做安全字符串函数(Safe String Functions),在windowsXP的SP1版本、新的windows DDK和平台SDK中已经具有。常用的操作系统、编译器,处理器也具有其它很多实现了安全字符串的商用的或免费的库。

  使用新函数的好处(部分):

  (1)每个函数接收目标缓冲的长度作为输入。这样函数能确保在写入时不会超过缓冲区的长度。

  (2)函数空字符中止所有的输出字符串,即使操作截断了预计的后果。

  (3)所有函数返回一个NTSTATUS值,该值只有一个可能成功的代码。调用函数能轻易地确定函数的执行是否成功。

  (4)每个都提供版本。一个支持单字节的ASCII字符,另一个支持双字节的Unicode字符。

  7、计算机取证

  注意:用户变更时未被删除的保留数据叫做潜在数据。潜在数据时潜在的安全漏洞,需要在小组采用的任何威胁模型分析中进行讨论。也许这些数据不会被看成是产品的问题,也许会被看成是一个大问题。

  潜在数据的更复杂的例子是由计算机安全专家用来发现可以用做犯罪调查的证据。

  8、总结

  没有计算机系统是安全的。为帮助设计一个安全的系统,在产品设计的开始必须注意安全的问题。

  测试员仅能测试软件的安全性,软件安全必须先计划、评审、设计,然后才是测试。