2.8 安全代码审查的技术
安全代码审查针对不同被审查的应用程序可能不同。它们可能会强调一些新的漏洞或某个应用程序在开发过程中所使用的特定代码,如执行流的不安全终止、同步错误等。这些漏洞只有当我们理解应用程序的代码流和它的逻辑时才会被发现。因此,安全代码审查不只是通过代码扫描发现未知的不安全代码模式,还是理解应用程序的代码实现方式,并枚举有关应用程序的漏洞。
审查的应用程序可能设计了一些安全控制措施,如集中式黑名单、输入验证等。这些安全控制措施必须仔细研究才能确定它们是否是极其坚固的。根据实现控制的方式,必须分析那些可以绕过控制的攻击或攻击向量的属性。枚举现有安全控制措施的弱点是安全代码审查的另一个重要方面。
在应用程序中表露安全漏洞有多种原因,如缺乏输入验证或参数处理不当。在安全代码审查的流程中,产生漏洞的根本原因被发现,且完整的数据流被追溯。“源汇分析”一词意味着确定应用程序(源)可能的所有输入,以及它们是被如何处理的(接收端)。接收端可能是一个不安全的代码模式,如一段动态 SQL 查询语句、一个日志编写器或一条客户端设备的响应。
考虑这样一个场景:源是用户输入的信息。它流过了应用程序中的不同类或组件,最终进入一段串联的 SQL 查询语句(接收端),且在路径中没有得到恰当的验证。在这种情况下,应用程序将容易受到SQL注入攻击,并通过“源汇分析”识别。这种分析有助于理解哪种脆弱的输入可能会导致应用程序带有漏洞。
一旦漏洞被识别,审查人员必须枚举当前应用程序中所有可能的实例。这不是由于代码变更而引起的安全代码审查,而是由管理团队基于发现的漏洞和已投入的资源而发起的代码扫描,以发现产品的其他部分是否也存在该漏洞。例如,一个应用程序由于在其多个方法(如脚本“response.write”方法)中使用了未验证的输入,而易受XSS漏洞的攻击。