当今竞争激烈的商业环境要求企业快速行动并保持创新。因此,80%或更多的企业采用了敏捷开发方法。不幸的是,这种更高的开发速度为网络犯罪分子带来了几个利用的机会,特别是在软件生命周期过程不安全的情况下。
那么,企业如何使敏捷开发实践更具安全性呢?以下是信息安全论坛推荐的10条原则:
负责指导敏捷项目的高级领导必须明确定义安全活动的角色和责任,这包括建立正式和非正式的报告渠道,以及项目管理行动,如上报协议、强制性会议和向安保团队报告项目状态。这将有助于将安全嵌入到灵活的应用程序开发中,同时促进承诺、责任以及业务IT和安全代表之间的建设性关系。
安全是一项团队职责,每个开发人员都需要在确保代码没有安全漏洞方面发挥自己的作用。开发人员通常缺乏对安全问题的知识和理解,他们倾向于将软件交付置于安全问题之上。为了增强开发人员的能力,企业必须在指导和提高技能方面投入资源,这包括安全培训和认知课程、高级开发人员的指导、专门的敏捷安全培训活动,以及访问免费可用的资源,如OWASP、CWE、BSIMM(构建成熟模型中的安全)、SAFECode和CERT。
从一开始就确保安全措施成本更低,效率更高,而不是事后事项。领导层必须建立有助于在整个开发生命周期中管理信息风险的流程。
这包括从安全角度商定高级别应用程序架构、确定“安全关键”应用程序和功能的列表、执行业务影响评估、在早期阶段进行信息风险和脆弱性评估,以及报告新确定的风险的流程。领导层应该就谁拥有信息风险提供指导,定义审查风险的流程,并确定如何做出风险管理决策。
使用开发人员的格式(用户故事、软件需求规范、故事映射、线框、角色和用例)来阐明安全需求,以便开发人员能够更好地理解、定义和实现安全规范。
这使得安全需求可以被视为产品待办事项中的功能需求,并将其转换为任务(也称为分解),将它们合并到需求管理工具中,并将它们包括在项目的生产力度量中。
定期进行威胁建模练习,以了解应用程序的安全环境,发现设计中不安全的方面,识别、分析威胁并确定威胁的优先顺序,发现用于攻击应用程序的最常见技术和方法(欺骗、篡改、拒绝服务、权限提升),确定哪些威胁需要额外的安全测试,最重要的是,制定策略和解决方案以主动缓解每个威胁。
要求开发人员利用已建立的安全编程技术,例如重构、持续改进/持续开发(CI/CD)、同行评审、安全迭代和测试驱动开发。
这改进了应用程序代码的非功能质量,并有助于消除允许利用安全漏洞的编程缺陷。安全编程技术还有助于指导在安全方法方面缺乏经验的开发人员,使用AI或低代码/无代码等新技术,开发复杂应用程序的一个方面,集成第三方应用程序,或满足合规性要求。
让独立的审查者执行静态代码分析(审阅源代码,以分析应用程序代码中的错误、错误和漏洞)和动态分析(检查执行期间的应用程序行为,以确定异常或意外行为)。这为利益相关者提供了应用程序满足安全要求且不包含任何安全漏洞的保证。
对于安全团队来说,手动测试和评估每个敏捷迭代通常是不可行的,这就是有必要采用某种类型的自动化来持续检查应用程序代码的安全性以发现缺陷和漏洞的原因,确保安全相关任务一致且有条不紊地完成,分析安全事件,并减轻安全团队和开发人员的负担。然而,一切都不可能是自动化的,自动化也不能完全取代人工测试,例如,一个人需要手动检查以确定逻辑缺陷。
创建、沟通和维护一套标准的安全验收标准,以确认已经执行了对应用程序代码的独立审查,已经完成了安全测试,合并到应用程序中的代码部分是可维护的、可跟踪的,并且来自经过验证的、信誉良好的来源,已经成功地满足了迭代积压的要求,已经解决了所有缺陷,包括安全漏洞,并且已经识别和批准了任何可能影响安全性的设计变更。
这有助于减少技术债务,向利益相关者提供保证,并在应用程序代码交付之前验证安全验收标准已完全满足。
敏捷项目通常包括有限的安全性能评估,这使得企业很难确定其应用程序的安全性是否符合业务要求。因此,企业必须根据一组商定的KPI来监控和评估适当的安全指标。
安全指标可以包括安全漏洞的类型、数量和严重程度、独立测试的结果、已批准和未批准的安全策略偏差的数量、未违反安全措施的时间长度以及其他缺陷消除指标。
如果你的开发是敏捷的,那么信息安全就必须效仿,这就是建议所有企业遵循上述安全原则和最佳做法的原因。安全的成功取决于各方(开发人员、项目经理、执行团队等)之间的协作和承诺程度。如果安全流程可以像编码一样进行快速迭代和改进,那么只有这样才能在当地提供更好的应用程序安全性和有效的更改。