开发不只快更要安全,Lyft安全工程师谈DevOps安全性

企业在追求应用程序快速部署而导入DevOps,但同时安全性议题也不容被轻忽。叫车服务公司Lyft安全团队在部落格发表文章,讲述Lyft在DevOps环境如何兼顾应用程序安全性,不只是DevOps,而且是DevSecOps。
前维基百科安全工程师,现任的Lyft安全工程师Chris Steipp表示,Lyft开发程序是极度DevOps的环境。不同的团队负责不同的产品,每个团队都须达到各自的服务等级协定(Service-Level Agreement,SLA)以及回应时间等要求。每个团队也都拥有完全控制自己产品的自由,包括决定产品建立以及执行的方式,甚至是产品更新的频率,不少团队选择一天部署产品数次已增加新功能,不过在这个自由背后,随之而来的责任是,这些团队也必须为产品的安全性负责,像是确保安全性议题在时间内修补等工作。
Chris Steipp提到,在这样的情况下,要在既有开发流程中,增加AppSec计划是极度劳力密集的工作,不只要重新思考团队如何互相配合,还要开发自动化整合安全工具,来整合现行的开发流。他认为,Lyft的AppSec计划的成功,有三点值得拿出来分享,第一、每一件都需要被测量,第二、在对的时间发讯息给开发者,并尊重开发者的时间,第三、整个开发过程需持续性的回馈循环。
工具跟程序都需要可被测量,不仅仅是为了收集数据的目的,而是要让团队随时注意指标,部分指标由AppSec团队监控,但更有效率的方法则是由开发团队自己监控,并对上面的数值负责。现在Lyft中每个开发团队,都有一个以上的仪表板,上面显示著错误率、回应时间,或是符合SLA服务的百分比等数据。AppSec团队的角色只在于提供仪表板服务,以及追踪过期却未被修补的程序。
在AppSec计划中,成功要素之二,在对的时间发讯息给开发者,并尊重开发者的时间。Chris Steipp指出,开发者每天都会收到来自各部门重要且有用的讯息,因此安全相关的讯息很容易被过滤掉,或是跟着其他讯息一样,沉入待处理的工作堆中,直到前面工作被消耗完才会被注意到。
Chris Steipp也同意,作为有效率的开发者,的确需要设定许多讯息过滤条件以提高工作效率,但当AppSec团队明确的告诉开发团队本月是网络安全月,开发者就不应将XSS或是钓鱼关键词,作为讯息过滤条件。AppSec也应在适当的时机发出警告,像是在工程师开发新前端程式时,提醒他们要注意跨站脚本攻击,或是他们在阅读可疑邮件时,提醒他们网络钓鱼攻击。
在要求开发者重视安全性的同时,也必须尊重他们的时间,在不少时候,安全性工具在开发流程中可能造成讯息误报,而导致后续作业受到阻碍。Chris Steipp说,曾经他们在GitHub上Pull Request前的统计分析系统,由于不精确的讯息回馈,造成工程师在合并程式码时浪费许多时间,AppSec团队收到反应后,为此开发了一套系统每30秒回馈系统状态,大幅将每次程式码合并的时间从1小时降到了7分钟。尊重工程师的时间,AppSec团队的安全性工作也才会被尊重。
第三点,整个开发过程需持续性的回馈循环。即使他们的AppSec团队不大,但他们仍可以在开发流程中的13个时间点与开发者互动,这要归功于高度自动化的工具,而且在实作自动化系统时,尽量让上一个工具的输出成为下一个工具的输入。
像是他们让开发团队使用自动化评估问卷,以记录团队正在储存资料的种类,以及储存的地方,基于开发团队自己的答案,如此在适当的时机提供反馈避免开发上的错误外,还能根据某些特征,方便AppSec团队进行稽核,并且将这些数据结果绘成数据图,作为审查或外部安全评估之用。
