安全团队如何更高效赋能软件工程团队协作
作为科技公司的CISO,我的职责包括赋能软件工程团队维护产品的安全态势。尽管安全的重要性已成共识,但安全团队与工程团队的不同激励机制往往使协作变得困难。基于我作为安全负责人(现任Axonius)和产品经理(前任职位)的经验,以下是一些将安全融入软件开发周期的建议。
理解团队动机
要与软件团队协作,首先需要理解他们的世界观。什么在激励他们?公司为本季度、本年度及长期工作设定了哪些激励措施?他们认为哪些因素有助于职业成功?安全团队需要围绕这些目标来构建我们的工作框架。
产品团队主要受业务目标驱动,例如交付需求功能、获取客户和实现业务收入。在这些动机下,安全可能被降级处理,尤其是在发布截止日期临近时。与此形成对比的是安全团队的思维模式,他们专注于降低风险、确保合规、响应事件和赢得客户信任。
理解工程团队的动机有助于安全专业人员保持冷静,例如当他们不明白为什么安全关切没有立即得到解决时。这也使得以正确方式和在适当时机提供安全指导变得更加容易。
平衡彼此责任
由于角色和目标不同,工程和安全团队通常从非常不同的视角看待同一目标。这是好事,因为这使得每个团队能够相互制衡。
例如,在支持公司用户群扩张时,工程和产品管理团队可能会问:“我们应该开发哪些新功能来吸引更多用户?”安全团队则会思考:“新功能将如何扩大我们的攻击面?”
尽管所有团队的工作最终都支持公司的业务目标或使命,但我们扮演着不同的角色。我们应该平衡彼此的努力,以避免过度安全(可能拖慢业务)或过度草率的工程(可能使公司面临不可接受的风险水平)。
支持性施压
因此,安全团队对安全编码原则和风险缓解的关注应该与产品和工程团队的软件及收入目标相平衡。安全团队可以通过向其他团队施加压力来帮助公司平衡这些目标。这包括强调超出风险承受阈值的实践、提供指导,并让团队对其安全责任负责。
要以建设性的方式施加压力,安全专业人员需要理解产品经理和软件工程师的世界。这意味着不仅要了解他们的术语,还要审查相关的路线图计划和冲刺细节。这也涉及被邀请并参加确定优先级和架构决策的讨论。
安全团队通常负责识别或报告自研代码或第三方依赖中的漏洞。在这方面的支持性实践包括尽可能早在开发过程中发现此类问题——越早提出问题(例如在代码提交和构建期间),工程师解决它的成本或干扰就越小。
施加安全压力通常意味着对漏洞进行优先级排序,并影响工程团队及时解决它们。这意味着要注意不要用无关紧要或不准确的发现和排名压垮开发人员。在确定此类问题的优先级时,我们不仅应考虑漏洞的严重性(例如基于自动扫描的结果),还应考虑可利用性和业务关键性等因素。我们应在分析中包含上下文,并进行更细致的风险分析,以了解哪些安全缺陷应优先于其他缺陷进行修复。
我们应该认识到,产品的代码库将始终存在一些漏洞并承担一定水平的风险。在决定可接受的残余风险水平时要务实。与开发人员合作建立SLA,使他们能够按时交付,同时在发布后的合理时间范围内修复最高风险的问题。在多个发布周期中逐步实现安全改进通常比在每个版本中追求完美更可持续。
持续学习软件安全实践
想了解更多关于产品安全的想法,请观看我与Nir Valtman和Simon A. Wenet录制的Seeding AppSec播客节目。本文内容借鉴了我们的讨论。
更新于2023年10月5日 Lenny Zeltser