再谈安全开发

2021-03-16 00:07:05 +08:00
 hxndg

提到安全开发头头是道,真到开发的时候抓瞎了。身为一个从预研到开发的程序工程师,我来简单说说我所认识到的安全开发。由于我是单纯从开发干起,很多东西都是(我自己总结的)从开发的角度来谈的,因此难免有局限性。这个我本来是 append 到了 TLS 自动机研发, 但是想了想也可以摘出来,所以又发了一次。

1.1 安全开发流程初期

安全开发名字高大上,但是实际上是个苦差事,因为安全并不是水桶,而是一个气球:哪里扎破一个洞,立刻整个就崩了。因此初期把握好安全开发就很重要,我比较喜欢从下面几个方面来分析:

上面几个问题实际上是安全开发当中大的目标,分析好上面几个问题之后,最大的问题就来了,怎么落地?说起来也不难:

  1. 第一步 培训:培训的目的包含三个方面:使得每个参与者(不限于开发者,测试者,经理,审计....)了解产品提供的安全属性,安全准则和具体功能,尤其是要对产品经理培训使得其明白安全不是个绝对概念,是有选择倾向的,总要做出抉择;对每个参与进来的开发者培训,使得其清楚常见的安全知识,比方说对称加密的安全性由秘钥保证,hash 不是加密,什么方法提供认证功能等基础知识;对核心开发者明确产品的核心逻辑和模块的设计(不一定是高速开发者,而是让核心开发者设计),必须达成对功能和安全的共识!我们在做 TLS 自动机的时候核心就三个人,每个人都可以相互替换对面的功能,TLS1.3 新功能 REUSE 和 0-RTT 的核心逻辑也是我设计完了,争论了几次才确定的,我们的测试完全参与不到我们的培训里,因为听不懂。。。
  2. 第二步 需求和功能划分:确定需求是个很有趣,却不困难的工作。因为核心逻辑是围绕关键信息的,所以基本确定了敏感信息和核心逻辑之后,需求划分就比较简单了。但功能划分是个很麻烦的事情,一方面核心逻辑可能并不复杂,但是边界错误和细枝末节可能会出现大量问题,因此每个细微的工程都需要有人把关;另一方面,安全开发产品有很强的连续性,安全经常是成环的,因此要确保具体的代码开发者是了解开发的模块的输入 /输出 /隐喻 /保障的,因此需要保证开发者是真的懂怎么回事,而不是似是而非模棱两可。这里注意,划分功能意味着划分责任,有的开发爱甩锅,有的 QA 爱甩锅,这时候就看 project leader 的功力了。
  3. 第三步 颁发安全准则:培训了,需求确定了,功能划分了,到了写代码的时候新的问题就来了,怎么保证代码是安全的呢?针对 TLS 可以看我写过 TLS 三理念,更具体的一般是:第三方安全性,很多安全问题是由第三方安全保证的,开发工程师精力不够,找 QA 啊;函数安全;工具安全。

多赘述一点东西:安全属性不是隔离的,端到端加密是很多功能的保证,但是奥卡姆的剃刀原则务必不要忘记,如无必要勿增实体,不要把其他层的东西放到本层来做!

1.2 安全开发流程中

安全开发流程中期实际上是个工程师埋头干活,抬头开会报进度的流程,这阶段的关注点在于 project leader 上。project leader 不但要对项目进度做好把握还要把握好需求变更的问题。project leader 还需要检查行为变化,细化安全规范。这就需要 project leader 能够明确安全的行为,并且能够根据具体的功能黑盒灵活的改变行为。

坦白讲,做 TLS 自动机研发的时候,虽然复用和 0-RTT 是我负责,但是关于排期这事我没咋催,主力是我,小功能分出去的时候我会提前培训开发的同事;每天问问进度和问题;明确行为规范。所以没啥排期的变更,行为这块一开始三个核心争了很久,也很确定,所以没遇到啥大问题。

1.3 安全开发流程后期

安全开发流程后期实际上主要的关注点不再开发工程师上了,在于 QA 和运营人员:运营人员要执行静态检测和动态监测; QA 要执行模糊测试,输入测试等多种功能,这都不是问题。问题在于:project leader 和开发者要在开发前期和开发后期以高度透明的角度,参与 QA 的测试 CASE 制定!换言之 QA 和开发必须都审核过测试 CASE,从而避免出现什么“现实不可能发生,测试不全面”的扯皮。

此外,需要记录开发过程当中遇到的实际问题和 BUG,并且将这些问题归类,加入到安全规范中。一方面能够给工程师提供具体的案例分析,另一方面能够很明确的细化规范和经验。实际上关于 0-RTT 的 DDOS 攻击我在分析 OPENSSL 的时候虽然想到了但是没明确,是后来 QA 参与进来我们才定性规定这是个问题的。

最后,最蛋疼的收尾工作来了:

1.4 遇到的安全开发中的问题

简单说说我们在开发过程当中遇到的一些实际问题:

结尾

实际上,从某种意义来说,安全开发是个文档>开发的过程,惊不惊喜,意不意外?

950 次点击
所在节点    程序员
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/761919

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX