软件环境

部署:软件环境 (SE)

软件环境实践涉及操作系统和平台补丁(包括在云端)、Web 应用程序防火墙、安装和配置文档、容器化、编排、应用程序监控、变更管理以及代码签名。

1 级软件环境

[SE1.1: 58] 使用应用程序输入监控。

组织监控其运行的软件接受的输入,以便发现攻击。对于 Web 代码,Web 应用程序防火墙 (WAF) 可以完成这项工作;其他类型的软件可能需要其他方法。SSG 可能负责系统的维护和反馈,但此项活动不包括事件响应。禁用的 WAF 如果编写了日志文件,则对于定期检查日志的人员非常实用。未受监控的 WAF 在应用程序闯入时不会发出声音。

[SE1.2: 104] 确保具备主机和网络安全基础条件。

该组织通过确保具备主机和网络安全基础条件提供坚实的软件基础。操作安全团队通常负责修补操作系统、维护防火墙以及正确配置云服务等职责,但是先执行软件安全再执行网络安全则是颠倒先后的做法。  

2 级软件环境

[SE2.2: 39] 发布安装指南。

SSDL 需要创建安装指南或清晰描述的配置(如容器),以帮助部署团队和操作人员安全地安装和配置软件。如果需要采取特殊步骤确保部署安全,则可以在安装指南中概述这些步骤,或者在部署自动化中明确指出这些步骤。指南还应当包含关于 COTS 组件的探讨。有时会向购买软件的客户分发安装指南。确保所有部署自动化都能为智慧人类所理解,而非仅为机器所理解。尽管 DevOps 不断发展和团队结构日益有机整合,但我们仍然需要人类可读的指南。当然,默认的安全永远是为上策。

[SE2.4: 31] 使用代码签名。

组织为跨越信任边界发布的软件使用代码签名。代码签名对于保护离开组织控制的软件(例如缩包的应用程序或胖客户端)的完整性特别有用。尽管一些移动平台需要应用程序代码签署,但这并不表示他们正式使用了代码签名。

3 级软件环境

[SE3.2: 17] 使用代码保护。

为了保护知识产权并加大利用开发力度,组织设置了逆转工程的障碍。这对广泛分布的移动应用程序尤其重要。可以在产品构建和发布流程使用混淆技术。采用数据执行保护 (DEP)、安全结构化错误处理 (SafeSEH) 和地址空间布局随机化 (ASLR) 等专门针对平台的控制措施可能会使利用开发变得更加困难。

[SE3.3: 4] 使用应用程序行为监控和诊断。

该组织监视产品软件的行为,寻找不当行为和攻击迹象。这项活动超出主机和网络监控范围,寻找软件特定的问题,例如恶意行为的迹象。应用程序级别的入侵检测和异常检测系统可能关注应用程序与操作系统(通过系统调用),或与应用程序消耗、发起和操纵的数据类型产生的交互。

[SE3.4: 11] 使用应用程序容器。

该组织使用应用程序容器支持实现软件安全目标。使用容器的主要动力包括易于部署、应用程序与依赖关系更紧密地结合,以及无需在虚拟机上部署完整操作系统的开销即可实现隔离。容器为安全控制提供了实现稳定应用和更新的便利场所。在开发或测试环境中使用的容器没有参考安全性,不计算在内。

[SE3.5: 0] 容器和虚拟环境的编排。

该组织采用规范的方式自动扩展容器和虚拟机部署。编排流程利用内置和附加安全控制确保每个已部署的容器和虚拟机满足预先确定的安全要求。集中设置安全行为可以在需要时进行快速更改。当然,编排平台本身就是软件,反而也需要安全修补和配置。如果使用 Kubernetes,请确保修补 Kubernetes。

[SE3.6: 0] 采用操作物料清单加强应用盘点。

生产环境中的应用及其位置清单是任何经营良好的企业的关键信息(参见 [CMVM2.3 编制应用的操作清单])。此外,为所有生产软件详细说明组件、依赖关系、配置、外部服务等的清单能够帮助组织保护所有内容。也就是说,随着攻击者和攻击持续发展,符合性要求不断变化,而且要打补丁的项目数变得非常大,要灵活作出应对。了解运行软件中的所有组件(无论是在专用数据中心、云端还是作为现货产品销售),都可以在发生不幸事件时及时响应。

[SE3.7: 0] 确保云安全的基础功能。

您当然已经执行了 [SE1.2 确保主机和网络安全基础功能就绪],对吧? 还必须有人确保达到云部署的基本要求。在这个日益依赖软件的世界,您必须明确地实现安全功能和控件(其中一些可能内置),至少要和使用电缆和物理硬件构建的安全功能和控件一样好。没有什么比看起来更自动化。