BSI简介
“Build Security in DNA”简称BSI,是在开发过程中内置安全的软件开发实践。 顾名思义,BSI是要将各种安全措施从早期就纳入到软件开发生命周期的每个阶段; 因此,安全是内建的,而不是事后补齐的。通过早期引入这些实践并在整个开发生命周期中进行审查,团队会更早地考虑到安全性的问题并尽早收到反馈。这让团队获得了更多的时间和选项来响应和预防安全问题。
下图描绘了BSI的实现。我们将安全性作为敏捷开发过程的一部分,在每次迭代中逐步建立和完善我们的安全措施。
通过在软件开发生命周期中添加各种安全措施,安全风险的反馈渠道增加了,安全问题反馈周期缩短了,因此安全问题可以立即得到反馈且进入持续改进的闭环。通过在业务分析过程中引入威胁建模,可以在某些潜在的安全问题出现之前就主动将其避免掉,从而做到防范于未然。
项目背景
与Clinton Health Access Initiatives(CHAI)合作,我们开发了Electronic Stock Management System(ESMS),这是一个安卓平板APP,其后端对接开源医疗物流平台OpenLMIS,致力于为莫桑比克的患者提供更好的医疗服务。ESMS有两个主要目标:首先是通过提供用户友好的数字解决方案和自动计算表单来减少医疗工作者的工作量;二是及时、准确的收集药品库存信息,并生成报告,以协助卫生部门来规划、分配、运送药物给卫生站。
如果系统存在安全问题就可能影响到医疗机构运送药物的及时性,进而延缓病人的治疗; 所以确保系统安全是项目团队最重要的工作之一。
引入BSI实践
BSI可以从早期就开始提高软件的安全性,并确保安全问题能得到正确的处理。来看看我们在莫桑比克使用OpenLMIS为CHAI所做的项目的一些例子。该项目在BSI引入时已经处于第二阶段了,其大多数功能已经开发完成。基于这种情况,我们把BSI中的活动重新按优先级排了序,首要做了以下工作。
安全培训工作坊
BSI的主要思想之一是,安全性不仅仅是外部信息安全团队或安全顾问的责任,而是交付团队中的每个人都应该了解的事情。我们针对Open Web Application Security Project (OWASP)的十大安全问题举办了为期一天的工作坊。ThoughtWorks的安全顾问为项目中的各种角色:开发人员,质量分析师和业务分析师都提供了培训内容。以下是我们向与会者介绍的问题。
在工作坊期间,安全顾问为每个问题解释了定义、概念、理论、行为和预防性解决方案,然后通过实例说明了这些内容,以便与会者理解这些问题产生的后果。工作坊的内容还包括与会者现场上手实操OWASP ZAP和Burp Suite等工具,以此来体验如何排查安全问题。 这次工作坊为开发阶段引入BSI实践打下了良好的基础。
安全性功能测试
安全性功能测试应该内建在质量保证流程中。安全性功能测试涉及身份验证和授权(登录/退出、忘记密码、用户管理等)。根据工作坊介绍、讨论的概念和工具,团队成员和安全顾问一起进行了安全功能测试,涵盖用户访问控制,会话到期等方面。这些测试是手动进行的,并添加了针对这些场景的自动化测试,以确保未来的改动不会再次引入这些问题。
我们发现在一些最常用的功能中存在安全问题,例如在用户注销后会话没有关闭,或非管理员用户能够查看管理员的内容等。
根据优先级排名中的位置,团队成员修复了这些安全问题,完成了一个问题检测和消除的闭环。
渗透测试
渗透测试用于分析系统以识别弱点、技术缺陷或漏洞。从攻击者的角度检查系统,了解什么可能危及系统的安全性。安全顾问与质量分析师合作分析了所有的用例,发现了更多的问题。例如,登录功能可能会受到暴力攻击,或者可能会通过提交大量数据来攻击,导致拒绝服务。与安全功能测试活动类似,团队修复了这些发现的问题。
代码安全审查
基于安全顾问引入的安全编程原则和指导,团队进行了安全代码审查。重点放在以下几个模块上:认证/授权,日志记录,密码保护。发现的所有问题都记录在了Mingle的技术卡或缺陷卡里。然后,团队给这些卡排列了优先级,并采取适当的措施来消除或减轻了问题;例如,如果我们发现密码是使用哈希算法存储但没有加盐(salt),那么团队会建一张技术卡,并给予其高优先级,以便在下一次迭代中首要修复该问题。
结论
每一个软件项目都应该从一开始就考虑安全性问题。现在大多数企业级软件都连接到了互联网上,安全性就尤为重要。联网应用的增多是一种趋势,这就增多了可被攻击的潜在目标,安全风险也会随之而来。在开发阶段没有足够的安全保护措施将对项目的长期运行产生负面影响。
反馈周期过长
一般来说,安全问题是在渗透测试阶段显露出来的,有时甚至是应用程序上线后才发现。这样问题的发现、报告和解决要花费很多的时间。
修复成本高
如果是在软件项目的晚期阶段才发现安全问题,软件体系结构已经定型并实现了,这时修复问题就变得额外困难。
BSI可以在开发阶段提高软件的安全性。BSI的目标是在软件发布前,通过业务与技术的手段来确保安全性。
没有绝对的安全,BSI并不能保证系统是完全安全的。然而,对于会向着更大更复杂方向演进的软件系统而言,BSI的安全软件开发过程肯定可以从源头控制安全风险,大大降低黑客攻击的可能性,并显著降低软件投产后安全问题所造成的损失。