诸子笔会2022 | 孙瑜:安全开发实践总结
自2022年5月起,“诸子笔会第二季”正式拉开帷幕。经过对首届活动复盘,我们在坚持大原则、大框架、主体规则基础上,优化赛制特别是奖项设置和评奖方式。13位专家作者组成首批“笔友”,自拟每月主题,在诸子云知识星球做主题相关每日打卡,完成每月一篇原创。除了共同赢取10万元高额奖金,我们更要聚焦甲方关注,发掘最佳实践,弘扬分享精神,实现名利双收。本期发文,即诸子笔会月度主题来稿之一。
安全开发实践总结
文 | 孙瑜
【孙瑜】
某互联网公司安全工程部,现负责研发安全,擅长软件设计和编码安全,STRIDE威胁分析。
2022年又到了尾声,这一年走得很不容易,历时三年的疫情还没有结束,甚至随着国家政策的优化调整变得更加肆虐。不得不承认,人类在天灾面前是如此渺小。有人说病毒是生命工程进化过程中出现的漏洞,那么新冠病毒这个超级漏洞的CVSS评分一定是10分。
“一切皆可编程”导致漏洞无处不在,我们能做的就是尽可能早地发现漏洞,因为越早发现漏洞,修复的代价越小。有人曾经对不同阶段修复漏洞的成本做过统计,结果显示后期是前期修复成本的几百倍。
今年我的主要工作是开发安全S-SDLC,至此也来做个复盘。“一个中心”是领导的支持,“两个基本点”是制定具有指导意义的安全标准和可视化的呈现结果,“一项长期坚持的方针”是持续优化代码自动化检测工具。
SDLC的全称是软件安全开发全生命周期管理,既然是全生命周期就不仅仅是几个安全人员能完成的,而是需要全体研发人员的共同参与,在研发的所有流程中执行安全实践活动。没有研发人员的积极配合根本无法顺利推行,难以达到预期的效果。所以这个过程一定要有领导的支持,从上而下得推行。安全上的投入不会看到立竿见影的产出收益,其成效是隐形的,回馈是长期的。
领导层有长远的安全意识,能够持续投入,才能在产品的安全性上稳定迭代优化。实施SDLC成功的企业无一不是从上而下推行,例如微软是由比尔盖茨亲自发邮件,要求员工停下手上所有工作来实施SDLC;华为则是由CEO担任全球网络安全委员会主任来推行实施。没有领导层的大力支持,只凭安全部门的人推行,SDLC就如同空中楼阁,华而不实。
安全是产品的属性,和可用性、可靠性、可扩展性一样,属于产品质量属性。质量管理可以采用质量成熟度模型来衡量,例如麦肯锡质量模型、ISO9004成熟度模型、IQMM国际质量成熟度模型等,安全的成熟度模型有CMMI V2.0模型、OWASP SAMM模型、数据安全能力成熟度模型DSMM等,但是针对软件安全技术缺乏统一的指导标准。
很多企业的安全性由安全部门把关,而不是质量部门,那如何衡量产品的安全性呢?虽然威胁建模可以将识别威胁的过程标准化和结构化,但只是粗粒度的风险。例如人员仿冒风险可以采用身份认证的手段来防范,具体到使用哪种认证方式?口令认证还是人脸识别?口令认证是否需要验证码?口令长度设置多少位?这些就很难回答。再比如信息泄露风险通过本地数据存储加密,具体该采用哪种加密算法(DES,3DES,AES,TEA 等)?加密密钥应该采用多少位?分组密码采用哪种模式?这些问题没有标准答案,根据不同应用场景、不同数据(敏感个人数据和一般个人数据)采取的加密方式都不一样。因此,对于企业来说,制定符合自身的具有指导意义的安全标准就非常重要。
有人说安全最大的成果就是不出事,但领导会认为不出事是应该的,看不到安全团队为此付出的努力,如何将安全的结果以可视化的方式呈现出来就尤为重要。
SDLC需要全体研发人员的投入,领导看不到效果,很难保证后续的支持和持续的投入。微软实施SDLC多年好像也并没有很好的呈现效果的方式,漏洞是一种衡量标准,但通过漏洞的数量并不能充分体现产品的安全性,还要结合漏洞的高危程度和利用难易等。
构建安全质量看板体现研发流程中的安全活动质量,如威胁分析质量、代码静态扫描告警、人工代码审计结果、人工渗透测试等。
代码安全质量活动主要包括人工审计和自动化检测,自动化代码检测也称为源代码分析,包括静态代码分析SAST和动态代码分析DAST。静态代码分析就是在程序没有运行的时候,分析程序可能的运行结果从而发现存在的质量问题;动态代码分析就是在程序运行起来之后发现安全质量问题,一般需要人工参与。本文主要关注静态代码分析。
静态代码分析工具很多,如SonarQube、Coverity、Fortify、Veracode等,静态代码分析工具通过分析代码结构,跟踪程序执行控制流和数据流,自动识别代码中存在的风险。然而,现实中代码逻辑和程序构成不是一成不变的,即便是同样的场景,写法也千变万化。通过规则描述的一种或者几种特定的格式很难覆盖所有代码,这就造成了误报和漏报,这也是静态代码分析工具的通病。
误报和漏报需要人工排查和报备审批,如果处理漏报和误报投入过高,不仅没有提升工作效率,反而增加了维护成本,不禁让人怀疑使用工具的初衷了。和其他安全设备一样,静态代码扫描工具也需要对扫描规则持续优化,根据企业自身的业务特点有针对性地开发自定义规则,屏蔽工具自带规则,可能要经历较长时间的优化才能使静态代码扫描工具处于稳定良性的运作状态。
最后,如果把产品比做一栋建筑,需求就是地基,设计就是框架结构,而代码则是砖体和混凝土等建筑材料。地基决定了这栋建筑的高度,框架决定了这栋建筑的稳固性,建筑材料决定了建筑的舒适和美观,任何一个环节如果发生安全问题都会导致整个建筑的倾覆。前期打地基出了问题,后期浇筑框架结构和填充建筑材料时就很难弥补。
由此可见,安全风险早发现早修复是成本最低的选择,SDLC将安全实践活动标准化和流程化,为我们提供了很多最佳实践,但每个企业又都有自己独特的路走,路漫漫其修远兮!
【12月主题:回顾与展望,无题】
【11月主题:考场,战场与职场】
孙瑜 王忠惠 朱文义 陈圣 回顾【10月主题:过与不及】
【9月主题:查漏补缺】
【8月主题:红与蓝】
刘志诚 张永宏 王忠惠 孙琦
肖文棣 孙瑜 杨文斌 陈圣 回顾
【7月主题:误区与陷阱】
刘志诚 张永宏 孙瑜 王忠惠 肖文棣
朱文义 杨文斌 孙琦 陈圣 回顾
【6月主题:远程办公与安全】
王忠惠 于闽东 刘志诚 孙琦 朱文义
张增斌 肖文棣 杨文斌 张永宏 孙瑜 陈圣 回顾
【5月主题:安全之变】
王忠惠 张永宏 朱文义 于闽东 刘志诚 杨文斌
孙琦 孙瑜 半藏咸鱼 肖文棣 王振东 陈圣 回顾
2021首届诸子笔会
齐心抗疫 与你同在