软件环境

部署:软件环境 (SE)

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

1 级软件环境

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

组织监控其运行的软件接受的输入,以便发现攻击。对于 Web 代码,Web 应用程序防火墙 (WAF) 可以完成这项工作;而其他类型的软件可能需要其他方法。SSG 可能负责监控系统的维护和反馈,但此项活动不包括事件响应。对于 Web 应用,WAF 如果编写了日志文件,则对于定期检查日志并采取措施的人员非常实用。其他软件和技术栈(如移动和 IoT)可能需要自己的输入监控解决方案。无服务器和容器化软件可能需要与供应商软件交互才能获得适当的日志和监控数据。云部署和平台即服务使用可能会增加监控、收集和聚合方法的难度。

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

该组织通过确保数据中心和网络具备主机和网络安全基础条件提供坚实的软件基础。不断发展的网络周边、增加的连接和数据共享以及供应商不断提高的相互依赖性(例如,内容交付、负载均衡和内容检查服务)甚至使得确保基础条件合适都更加困难。先实现软件安全,再实现主机和网络安全,就如同先穿鞋后穿袜。

2 级软件环境

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

SSDL 需要创建安装指南或清晰描述的配置(如容器),以帮助部署团队和操作人员安全地安装和配置软件。如果需要采取特殊步骤确保部署安全,则可以在指南中概述这些步骤,或者在部署自动化中明确指出这些步骤;指南中还应探讨 COTS 和供应商组件。有时会向购买软件的客户分发安装指南。所有部署自动化均应为人类所能理解,而非为机器所能理解。这意味着基础架构脚本(例如,Terraform、Helm、Ansible 和 Chef)会逐渐成为安装指南。

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

组织使用跨越信任边界发布的软件代码签名,这对于保护离开组织控制的软件(例如缩包的应用程序或胖客户端)的完整性特别有用。在云环境中,在通过供应商注册表或内部托管注册表打包和分发移动应用程序、容器和计算机映像时,利用代码签名就可能非常重要。一些移动平台需要应用程序代码签署,但这并不表示他们正式使用了代码签名。

3 级软件环境

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

为了保护知识产权并增加漏洞的利用开发难度,组织为其软件的逆向工程设置了障碍(例如,防篡改、调试保护、反盗版功能、运行时完整性)。这对广泛分布的移动应用程序尤其重要。有些软件可以在产品构建和发布流程使用混淆技术。在其他情况下,在部署后动态重新生成应用程序时,可以在软件定义的网络或软件编排层应用保护。在一些平台上,采用数据执行保护 (DEP)、安全结构化错误处理 (SafeSEH) 和地址空间布局随机化 (ASLR) 等措施,可能会使利用开发变得更加困难。

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

该组织监视产品软件,寻找不当行为或攻击迹象。这项活动超出主机和网络监控范围,寻找软件特定的问题,例如恶意行为的迹象。应用程序级别的入侵检测和异常检测系统可能关注应用程序与操作系统(通过系统调用),或与应用程序消耗、发起和操纵的数据类型产生的交互。在任何情况下,应用程序没有按预期运行的迹象都会根据特定的软件及其环境的不同而存在差异,因此一刀切的解决方案可能无法产生令人满意的结果。在一些类型的环境中(例如,PaaS),某些这类数据及相关的预测分析可能由供应商提供。

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

组织使用应用程序容器来帮助实现其软件安全目标,可能具有易于部署、应用程序与其依赖关系的紧密结合、不变性、完整性(参见 [SE2.4 使用代码签名])以及一定的隔离优势,而无需在虚拟机上部署完整的操作系统所产生的开销。容器为安全控制提供了实现稳定应用和更新的便利场所。虽然容器在开发和测试环境中很有用,但生产使用才具有真正的优势。

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

组织采用规范的方式自动扩展服务、容器和虚拟机部署。编排流程利用内置和附加安全控制确保每个已部署的工作负载满足预先确定的安全要求。集中设置安全行为可以在需要时进行快速更改。编排平台本身就是纳入生产环境的软件,因而又需要安全补丁和配置;换句话说,如果使用 Kubernetes,就务必要为 Kubernetes 打补丁。

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

生产环境中的应用及其位置清单是任何经营良好的企业的关键信息(参见 [CMVM2.3 编制应用的操作清单])。此外,一份详细说明所有生产软件的组件、依赖关系、配置、外部服务等的清单有助于组织加强其安全状态,即随着攻击者和攻击的发展、合规性要求的变化以及补丁项目数量极其庞大时,能够灵活应对。了解运行软件中的所有有效组件(无论是在专用数据中心、云端还是作为现货产品销售),都可以在发生不幸事件时及时响应。如果处理得当,容器安全解决方案的正式使用可以使库存工作变得更加简单。

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

组织应该已经确保其主机和网络安全基础功能到位,但还必须确保在云环境中满足基本要求。当然,基于云的虚拟资产通常具有面向公众的服务,进而形成了与专用数据中心不同的攻击面(例如,基于云的存储),因此这些资产需要定制的安全配置和管理。在日益依靠软件定义的环境中,SSG 必须帮助每个人明确实施基于云的安全功能和控制(其中一些可以构建在云提供商管理控制台中),而这些功能和控制堪比使用网线和实体硬件在专用数据中心构建的功能和控制。始终都需要掌握关于云提供商共担责任安全模型的知识。