在确定产品原型与功能之后,便交由开发负责推进。然而关注点大多仅在于业务流程与功能点的实现,具体使用的技术决定于公司技术栈和个人能力,对于带着安全意识去编码这件事儿,大多都没太在意。
01
—
安全目标
通过提供公共安全组件、制定安全开发规范、提供静态代码审计系统给业务方,从基础安全服务提供者、安全规范制定者和安全质量把关者角度出发,对开发进行赋能,想办法让其按照安全开发规范进行编码,并提供一套强有力的代码安全检测系统,把控代码安全质量,从而减少或消除因编码而产生的安全漏洞。
02
—
安全活动
在代码编写阶段,安全活动主要围绕安全开发规范、安全组件接入和静态代码扫描开展。
1)安全开发规范
从隐私和安全角度两方面出发,结合当前发现的高危问题;参考业界的安全开发规范,融合公司当前的技术栈;站在开发视角,进行安全开发规范的编写。规范项不在多,关键是需要清晰、易懂、针对性强、易判断是否违规。
2)安全组件接入
分析企业中存在的常见安全漏洞,来源可能是内部安全测试结果、外部漏洞收集(SRC、第三方漏洞平台、CVND等),并结合漏洞影响、开发难易程度、加固效果,对业务部门输出统一的安全组件,快速、高效、低成本解决普遍存在的安全问题。常见的可能有:统一登录安全网关、短信安全网关、CSRF-token组件、XSS过滤器(适用于非富文本框场景)等。
3)静态代码扫描
代码的白盒测试,最好是嵌入到发布流程中。一方面对源代码起到保护作用,不用另辟蹊径存放源代码,打破源代码统一管控的好局势;另一方面可以在流程中设置卡点,形成强有力的抓手。不少人对代码分析存在恐惧,觉得是效率低并且要求高的工作,但是在代码层面找出问题对于整个SDL都是十分必要、有效的一环。市面上的代码审计工具不少,商业的包括checkmarx、fortify、coverity,开源的有check style、findbugs、cobra、Rips等,需要从语言的支持、误报率、购买以及维护成本等不同维度进行综合评估。
03
—
安全实践
1)开发安全规范
2)代码审计系统
本文中的示例,以fortify为例。(网上出现不少带license的破解版本,有兴趣的自寻查找)
3)输出公共安全组件
04
—
持续优化
安全运营的思想,也同样适合在SDL的各个阶段,即:在推行中发现问题,解决问题,优化功能。在安全开发阶段,安全开发规范需要优化,代码扫描系统也需要优化,覆盖率需要考虑,准确率也需要琢磨。简而言之,大致可以从以下三个方面进行考虑:
1)安全开发语言覆盖面
开发技术栈的多元化,带来最直接的问题便是覆盖面。安全开发规范、静态代码扫描都需要由最开始的cover主流语言,扩展到公司第二、第三…主流语言。在资源受限的情况下引入一些开源工具应对不同的语言审计,或许是个必要的选择。
2)静态代码审计系统误报
几乎所有的互联网公司都是追求“宁可漏报,不可误报”,由于发布量特别大不得不这样。然而在传统行业里,开发模式可能还是瀑布模式,对各个环节的误报要求难以媲美互联网公司,但是减少误报率也是十分必要的。对于使用商业版(破解了也算)的代码审计工具而言,其规则难以调整,故可以在扫描的结果上进行优化,比如要求开发仅解决Critical、High级别的漏洞,甚至是可以具体到两种级别中的具体漏洞类型。
3)第三方开源组件技术检测手段
使用已知漏洞的组件,在最近两次的OWASP Top 10中均上榜,由此见得其重要程度。目前在市面上还很少出现专门的检测工具,商业版的几款静态代码扫描器有所涉及,但未能试用对比。目前而言,稍微较好一点的方法可能是使用OWASP提供的Dependency-Check,有如下特点:
05
—
安全招聘
团队招人,希望有想法的小伙伴,一起共创未来。希望你是:
06
—
安全交流
近来发现SDL越来越“火”,于是产生了创建微信群、专门交流SDL的想法。