3.1.2 软件安全接触点
软件安全接触点(Software Security Touchpoints)是Gary McGraw[1]提出的软件安全开发模型,其基本思想是从7个接触点入手,使安全成为软件开发生命周期的组成部分。McGraw认为安全问题是整个系统级的问题,包括安全机制、设计安全、编码安全等很多方面,有时这些方面还会相互重叠。另一方面,安全问题是一个连续不断出现的问题。在软件开发生命周期的每一个阶段,以及选择的工具、实现技术、数据库等都可能引入安全问题。这也就是为什么安全问题是贯穿整个软件开发生命周期的原因。所以要想解决安全问题,必须从原来的被动救火方式转换到主动的防御方式[28]。
1.软件安全三支柱
McGraw将软件安全归纳为应用风险管理、软件安全接触点和知识三个支柱[29],如图3-2所示。
图3-2 软件安全三支柱[29]
(1)应用风险管理 是在软件安全中采用风险管理方法,在体系结构级上明确进行风险分析。实施完整的软件开发生命周期风险管理方法是支撑所有软件安全工作的基本方法。
(2)软件安全接触点 即一套最优方法,说明了软件开发人员应该如何在软件开发过程中加入安全管理活动,即安全接触点。
(3)软件安全知识 可以归为七种:原则、方针、规则、弱点、攻击程序、攻击模式和历史风险;同时也可以划分为三个知识类:说明性知识、诊断性知识和历史知识。
2.软件安全接触点模型
McGraw认为软件安全不是安全的软件,安全功能本身不能使软件安全。软件安全接触点方法要求在整个软件开发生命周期都必须考虑安全,这也意味着必须认识和理解一般风险,做出基于安全的设计,并对软件进行完整客观的风险分析和测试。同时,要保证软件安全,须在整个软件生命周期中都应用接触点,不断地实施安全保证。此外McGraw认为外部分析即由设计团队之外的人员来进行分析通常也是必须的,最好是由与系统的原始设计和实现无关的人员来应用所有的软件安全接触点。
软件安全接触点模型指出了如何在需求、设计、编码、测试和维护中采用安全方法,并按照有效性分为代码审核、体系结构风险分析、渗透测试、基于风险的安全测试、滥用案例、安全需求、安全操作共7个接触点[30],如图3-3所示。
图3-3 7个接触点在软件开发生命周期的分布图[51]
(1)代码审核(工具) 接触点:代码。所有软件都会至少产生一种代码。在代码中应关注的焦点是代码缺陷。通过源代码安全审核(漏洞扫描)能发现一般的代码缺陷,是实现安全软件的必要方法。
(2)体系结构风险分析 接触点:设计说明书。设计人员、架构人员和分析人员用文档清晰记录各种前提假设,并确定可能的攻击。在基于说明书的体系结构阶段和类层次的设计阶段,必须进行体系结构风险分析。安全分析人员揭示体系结构瑕疵、评级,并进行降低风险的活动。
(3)渗透测试 接触点:处于环境中的系统。便于理解处于真实运行环境中的实际部署软件的安全情况。
(4)基于风险的安全测试 接触点:单元和系统。安全测试应包含两种策略:用标准功能测试技术来进行的安全功能性测试;以攻击模式、风险分析结果和滥用案例为基础的基于风险的安全测试。
(5)滥用案例 接触点:需求和使用案例。建造滥用案例是深入了解攻击者心理的好办法。
(6)安全需求 接触点:需求中加入的安全考量。好的安全需求应包括明显的功能安全(例如:使用加密方法)和突然出现的特性。
(7)安全操作 接触点:实际部署的软件。应记录审计日志以追踪某个已知的问题或攻击者[52]。