在你对目标有了一个深入的理解之后,你必须从攻击者的角度思考如何利用这些特定的特征。作为一名软件适用性测试人员,必须了解一位残障用户是如何理解软件并与软件交互的,你需要考虑一个恶意用户是如何利用被测试软件的各种不同特征。从攻击者的角度进行思考不是绝大多数人习惯做的事情,但它却是成为一个成功的安全测试人员的关键。攻击者会对软件的功能进行恶意思考。因此,为了在攻击者之前找到安全性方面的漏洞,你必须也要从攻击者的角度对软件进行思考。如何利用对应用工作机制的理解和一个攻击者的心态去识别安全问题,我们以下面几个例子进行详细说明。
 
回叫验证
    在互联网广泛普及之前,人们利用电子布告栏系统(BBS)来交换信息(通常仅仅与同一BBS系统中的其他用户)、传输文件和玩相当简单的游戏(通常是基于文本的)。BBS系统是一台设置用来接收呼叫的计算机,BBS用户利用调制解调器经电话线进行连接。很多人在他们的个人计算机上设置BBS,这样呼叫者就能创建新的有限的账户。系统拥有者,也称为系统管理员(Sysops),希望人们使用他们的BBS,但通常还需要一些有效的用户联系信息,因为他们需要跟踪恶意用户(电话公司还不提供呼叫者ID服务,后来当呼叫者ID可得到时,它对身份验证不再有好处,因为它能够被呼叫者欺骗;关于欺骗的内容请参见第6章“欺骗”部分的内容)。一些系统管理员通过给注册账户的电话号码打电话来人工验证新用户。
    其他的一些BBS系统通过利用一种称为回叫验证(CBV)的特征自动地验证新用户。在注册过程中,当用户的电话响起需要验证时,新用户被指导在他们的终端窗口中输入ATA。ATA指令使得用户的调制解调器去应答该电话呼叫。CBV特征然后会切断新用户的会话,并迅速地回拨新用户所注册的电话号码。一旦BBS回叫了新用户并重新建立了连接,CBV特征就能够提示新用户输入用户名和密码。如果这些都是正确的,新用户就能确保可访问该BBS系统。
    从实现一个功能的观点,该CBV特征有效工作了,但是,现在你需要从攻击者的角度对其进行思考。你能够想出办法恶意地利用这个特征或绕过它吗?CBV特征会回拨用户输入的任何号码。恶意用户迅速地认识到了CBV特征的全部潜能。例如,它能够以这样一种方式被滥用——让警察在恶意用户选择的任何时间到达系统管理员的家;在美国,恶意拨号者能够呼叫BBS系统并输入911作为回叫电话号码的头三位数字。当CBV特征用提供的号码呼叫调制解调器时,它实际上拨的是911应急中心,然后警察就被派遣到呼叫911的地方,即BBS系统运行的地方!
    很明显,CBV特征的设计人员或开发人员从来没有想到用户会利用这个特征去强迫BBS系统呼叫911。但不管怎样,一旦理解了这种滥用潜能,CBV程序就被改进为包含了一个系统禁止呼叫的电话号码列表。安全测试人员的工作就是要从攻击者的角度思考产品的设计。如果有人在该CBV特征发布前就预料到了这个设计,那么多数BBS系统的管理员将会避免很多混乱。
 
零售店商品退货
    本书概述了各种已知的攻击。掌握已知的攻击能够帮助你在测试中使用它们,以及帮助你建立一个针对软件的攻击者心态。为发现针对新技术或现有技术的新攻击,需要具有一个攻击者的心态和对技术知识的深入理解。
    擅长寻找软件安全缺陷的人也经常能够从攻击者的角度思考每天遇到的事情,因为他们已经逐渐发展形成了一个攻击者的心态。CBV的例子是一个计算机相关的例子,但寻找安全缺陷经常包括独立于任何技术的恶意思考。
    最近,我们从销售未装配家具的本地商店购买了一张餐桌。我们把箱子拿回家,打开一看,发现桌子的颜色错了,就回到商店退货。当我们到达顾客服务处时,店员询问了包装箱包含的桌子板块和销售收据,接着检查了收据,在销售软件上标注了退货,然后退还了我们货款。
    这可能是一个相当典型的退货经历。但不管怎样,如果你仔细地、恶意地思考这个情形,那就会发现店员犯了一个错误,即有人能够利用这个环节去偷窃商店的货物。店员检查了收据,并收下了我们退还的商品,对吗?可能是的,因为店员仅仅检查了收据,并看了一下包含原来商品的包装箱。店员并没有查看包装箱里面。我们能够轻易地用与餐桌重量大致相等的东西放进包装箱里,退还回去得到退款,同时新的桌子仍在。当然,我们不会尝试这样做!因为从商店中偷窃桌子是违法的、不道德的,但你能够看到,只要有一点点想法,普通的行为就能用来执行一次攻击行为。
    与这个例子所不同的,软件通常遭受大量的匿名攻击,这使得对一些人来说很容易就忘记或忽略了对其行为的合法性与道德要求。当人们到商店退货时,商店的安全录音带会予以证明并确定退货,绝大多数退货需要一个ID号或者电话号码加上签名(当然,这些能够伪造)。
    对安全测试人员来说,最重要的一个观念是记住软件会经常像上述例子中的店员那样运行,盲目地相信未经确认的数据。有时候,这个确认过程是不完善的。
 
软件退货
    为防止盗版行为,如果包装已被打开,绝大多数软件商店将不会给你退货。商店判断包装是否被打开的通用方法是查看热压缩包装是否损坏。他们相信如果热压缩包装仍然完好无损,那么软件就没有被打开。这也是一个不完善的验证,因为顾客能够揭开热压缩包装,拿走软件,然后再重新封上热压缩包装。尽管一般人都没有热压缩包装的设备,但有人会有,如果目标软件非常有价值,那就值得花时间与经费去获取这样的设备。这个热压缩包装的例子指出了另一件重要的事情:如果完成一种攻击对一般人来说存在可能性但同时又有难度,假如目标又足够有价值,那么攻击者将会动用资源(例如时间、金钱等)去执行这种攻击。
 
本文节选自电子工业出版社2008年10月出版的《安全漏洞追踪》