第 17 章 安全开发流程( SDL )
安全开发流程,能够帮助企业以最小的成本提高产品的安全性。它符合“ Secure at the Source ”的战略思想。实施好安全开发流程,对企业安全的发展来说,可以起到事半功倍的效果。
17.1 SDL 简介
SDL 的全称是 Secureity Development Lifecycle ,即:安全开发生命周期。它是由微软最早提出的,在软件工程中实施,是帮助解决软件安全问题的办法。SDL 是一个安全保证的过程,其重点是 软件开发,它在开发的所有阶段都引入了安全和隐私的原则。自 2004 年起,SDL 一直都是微软在全公司实施的强制性策略。SDL 的大致步骤如下:
SAMM 和微软 SDL 的主要区别在于,SDL 适用于软件开发商,他们以贩售软件为主要业务;而 SAMM 更适用于自主开发软件的使用者,如银行或在线服务提供商。软件开发商的软件工程往往较为成熟,有着严格的质量控制;而自主开发软件的企业组织,则更强调高效,因此在软件工程的做法也存在差异。
17.2 敏捷 SDL
就微软的 SDL 过程来看,仍然显得较为厚重。它适用于采用瀑布法进行开发的软件开发团队,而对于使用敏捷开发的团队,则难以适应。
敏捷开发往往是采用“小步快跑”的方式,但是对于安全来说,往往是一场灾难。需求无法再一开始非常明确,一些安全设计可能也会随之变化。
微软为敏捷开发专门设计了敏捷 SDL。
敏捷 SDL 的思想其实就是以变化的观点实施安全的工作。需求和功能可能一直在变化,代码可能也在发生变化,这要求在实施 SDL 时需要在每个阶段更新威胁模型和隐私策略,在必要的环节迭代模糊测试、代码安全分析等工作。
17.3 SDL 实战经验
- 与项目经理进行充分沟通,排出足够的时间。
- 规范公司的立项流程,确保所有项目都能通知到安全团队,避免遗漏。
- 将技术方案写入开发、测试的工作手册中。
- 给工程师培训安全方案。
- 记录所有的安全 bug ,激励程序员编写安全的代码。
17.4 需求分析与设计阶段
在需求阶段,安全工程师需要关心产品主要功能上的安全强度和安全体验是否足够,主要需要思考安全功能。
在安全领域中,“安全功能”与“安全的功能”是两个不同的概念。
- 安全功能:产品本身提供给用户的安全功能。
- 安全的功能:产品具体功能的实现上要做到安全,不要出现漏洞而被黑客利用。
17.5 开发阶段
开发阶段是安全工作的一个重点。依据“安全是为业务服务”这一指导思想,在需求层面,安全改变业务的地方较少,因此应当力求代码实现上的安全,也就是做到“安全的功能”。
17.5.1 提供安全的函数
在开发阶段,还可以使用的一个最佳实践就是制定出开发者的 开发规范 ,并将安全技术方案写进开发规范中,让开发者牢记开发规范。
将安全方案写入开发规范中,就真正的让安全方案落了地。 这样不仅仅是为了方便开发者写出安全的代码,同时也为代码安全审计带来了方便。
代码安全审计工具
代码的自动化审计比较困难,而半自动的代码审计仍然需要耗费大量的人力,那有没有取巧的办法呢/p>
实际上,对于甲方公司来说,完全可以根据开发规范来定制代码审计工具。其核心思想是, 并非直接检查代码是否安全,而是检查开发者是否遵守了开发规范。
这样就把复杂的“代码自动化审计” 这一难题,转化为“代码是否符合开发规范”的问题。而开发规范在编写时就可以写成易于审计的一种规范。最终,如果开发规范中的安全方案没有问题的话,当开发者严格遵守开发规范时,产出的代码就应该是安全的。
17.6 测试阶段
测试阶段是产品发布前的最后一个阶段,在此阶段需要对产品进行充分的安全测试,验证需求分析、设计阶段的安全功能是否符合预期目标,并验证在开发阶段发现的所有安全问题是否得到解决。
安全测试应该独立于代码审计而存在。“安全测试”相对于“代码审计”而言,至少有两个好处:
- 有一些代码逻辑较为复杂,通过代码审计难以发现所有问题,而通过安全测试可以将问题看得更清楚;
- 有些逻辑漏洞通过安全测试,可以更快的得到结果。
安全测试,一般分为自动化测试和手动测试两种方式。
自动化测试以覆盖性的测试为目的,可以通过“Web 安全扫描器”对项目或产品进行漏洞扫描。
目前 Web 安全扫描器针对 “ XSS ”、“ SQL Injection ”、“ Open Redirect ”、“ PHP File Include ” 等漏洞的检测技术已经比较成熟。这是因为这些漏洞的检测方法主要是检测返回结果的字符串特征。
而对于 “ CSRF ”、“越权访问”、“文件上传”等漏洞,却难以达到自动化检测的效果。这是因为这些漏洞涉及系统逻辑或业务逻辑,有时候还需要人机交互参与页面流程。因此这类漏洞的检测更多的需要依靠手动测试完成。
Web 应用的安全测试工具一般是使用 Web 安全扫描器。
安全测试完成以后,需要生成一份安全测试 告。这份 告并不是扫描器的扫描 告。扫描 告可能会存在误 与漏 ,因此扫描 告需要经过安全工程师的最终确认。确认后的扫描 告,结合手动测试的结果,最终形成一份安全测试 告。
安全测试 告中提到的问题,需要交给开发工程师进行修复。漏洞修补完成后,再迭代进行安全测试,以验证漏洞的修补情况。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92342 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!