
# 软件工程安全
软件工程安全是指在软件开发的整个生命周期中，应用一系列安全原则、实践和技术，以减少软件漏洞，提高软件抵御恶意攻击的能力，最终保障软件的机密性、完整性和可用性。它涵盖了从需求分析、设计、编码、测试到部署和维护的各个阶段。
- **安全设计**
  企业需要遵从安全及隐私设计原则和规范、法律法规要求，在安全需求分析和设计阶段根据业务场景、数据流图、组网模型进行威胁分析。威胁分析使用的引导分析威胁库、消减库、安全设计方案库来源于企业自身的安全工程经验积累和业界优秀实践。当识别出威胁后，应用架构师根据消减库、安全设计方案库制定消减措施，并完成对应的安全方案设计。所有的威胁消减措施最终都将转换为安全需求、安全功能，并根据公司的测试用例库完成安全测试用例的设计，最终保障业务系统的的安全性。
  
- **安全编码与测试**
  企业需要制定安全编码规范，要求应用系统的开发和测试人员在上岗前均需通过了对应规范的学习和考试。其次，企业需要引入了静态代码扫描工具进行每日检查，其结果数据将导入持续集成和持续部署（Continuous Integration，Continuous Deployment）工具链，通过质量门限进行控制，以评估应用系统的安全性。最后，所有应用系统在发布前均需完成静态代码扫描的告警清零，确保上线时不存在编码相关的安全问题。
  为了确保应用系统的安全性，所有云服务在发布前首先将由应用测试人员执行多轮安全测试，包括但不限于认证、鉴权、API安全、数据库安全等专项安全测试。测试用例覆盖安全设计阶段识别出的安全需求以及攻击者视角的渗透测试用例等。对于无法通过安全测试的应用系统，将禁止上线运营。
  
- **第三方软件安全管理**
  企业对引入的开源及第三方软件需要制定明确的安全要求和完善的流程控制方案，在选型分析、安全测试、代码安全、风险扫描、法务审核、软件申请、软件退出等环节，均实施严格的管控。例如在选型分析环节，增加开源软件选型阶段的网络安全评估要求，严管选型。在使用中，须将第三方软件作为应用系统的一部分开展相应活动，并重点评估开源及第三方软件和自研软件的结合点，或使用独立的第三方软件是否引入新的安全问题。
  在社区发布开源软和第三方软件的漏洞时，第一时间发现漏洞并修复，将开源及第三方软件作为应用系统的一部分开展测试，验证开源及第三方软件已知漏洞是否修复，并在应用系统的Release Notes里体现开源及第三方软件的漏洞修复列表。
  
- **配置与变更管理**
  配置和变更管理对保障应用系统的安全起着重要作用。企业需要对所有应用系统进行配置管理，包括提取配置模型(配置项类型、各类配置项属性、配置项间的关系等)，记录配置信息等。并通过专业的CMDB工具对配置项、配置项的属性和配置项之间的关系进行管理。
  应用系统的各项变更都是影响应用系统安全稳定运行的因素。生产环境中的操作系统、数据库、中间件和应用程序等的变更，包括软件更新、配置改变等，都需要通过有序的活动进行变更管理。所有的变更申请生成后，由变更经理进行变更级别判断后提交给变更委员会，通过评审后方可按计划实施变更。所有的变更在申请前，都需通过类生产环境测试、灰色发布、蓝绿部署等方式进行充分验证，确保变更委员会清晰地了解变更动作、时长、变更失败的回退动作以及所有可能的影响。
  
- **上线安全审批**
  为确保应用系统满足法律法规及企业自身的安全规范，最大程度的降低应用系统的网络安全与隐私保护合规风险，CCoE团队的云安全专家需要参与到应用系统的上线活动中，与应用团队合作，共同分析、判断其相关版本或服务是否符合所服务区域的安全隐私合规要求。
  其中，为了确保中低安全与合规风险的应用系统可以快速上线，云安全专家需要发布安全与隐私合规的自检清单，该清单包含企业需要满足的的合规要求，应用团队在开发、部署、上线过程中需利用该清单进行自检。对于中低风险的应用系统，自检通过后即可上线，自检结果也同步提交给云安全专家执行审计。对高风险的应用系统，通过更多的投入、在短时间内执行更严格的上线检测和审批，确保应用系统安全性的同时，也让应用系统及时上线。
  
 
