跳转至内容部分

IT 术语解析

什么是安全设计?

在网络安全领域,“安全设计”已成为一项重要理念,旨在确保强大的安全性成为软件开发每个阶段的核心关注点。产品将安全作为基础要素来实施,而不是事后补救;安全策略和最佳实践会在每一步中得到集成和测试,以确保系统尽可能减少漏洞并抵御攻击。

安全设计意味着什么

安全设计远远超越此前提出的行业标准,其明确目标是:在产品进入市场之前尽可能减少可被利用的缺陷,从而保护客户和公众。采用这些原则的公司注重测试、身份验证防护措施以及遵循最佳编程实践,以打造稳健且具备韧性的软件和硬件解决方案。

在已签署美国网络安全和基础设施安全局(CISA)安全设计承诺的组织带动下,行业领导者正在优先采用安全设计原则,使网络安全更加主动、更有效,从而实现更安全的基础设施和应用程序。这不仅满足监管要求,还能建立用户信任,为所有人营造更安全的数字环境。

相关内容:安全设计承诺:致力于创造更安全的数字未来

多个行业机构和政府部门已经发布了促进安全软件开发方法的指南和最佳实践。这些指南和实践通常强调与安全设计理念一致的原则。

最近最相关的例子是,2023 年 4 月,美国国家标准与技术研究院(NIST)及其他美国机构发布了一份联合指导文件,题为“转变网络安全风险的平衡:安全设计软件的原则与方法”,重点阐述了安全设计原则在软件开发中日益增长的重要性。

虽然对于大多数美国企业而言,安全设计属于自愿实践,但联邦承包商或其他国家/地区的公司通常必须遵守网络安全指南,以确保产品支持关键基础设施安全。此类法规和指南也有助于国际合作伙伴之间开展协调行动,共同创建更安全的全球网络环境。

安全设计承诺

该承诺是由 CISA 发起的一项自愿承诺,旨在鼓励软件制造商在其软件产品和服务的整个开发生命周期中强调安全性。其关键方面包括:

目标受众

该承诺面向创建企业软件的公司,包括本地部署、云服务和 SaaS 产品。虽然未直接提及,但制造物理产品(如 IoT 设备)的公司也被鼓励展示其对安全设计原则的承诺。

聚焦可衡量的行动

该承诺鼓励签署方承诺采取与安全设计原则一致的具体、可衡量行动,并在签署后一年内实施。

核心目标

该承诺概述了软件制造商可展示其对安全设计承诺的七个核心领域:

  • 在其产品中提高多重身份验证(MFA)的使用率。
  • 减少对默认密码的依赖,并推广强密码管理实践。
  • 实施策略,尽可能减少软件中的整类漏洞。
  • 鼓励客户及时安装安全补丁。
  • 建立清晰、全面的漏洞披露政策。
  • 提供有关已识别漏洞(CVE)的详细信息,以促进修复。
  • 实施机制,用于检测并响应软件中潜在的安全事件。

透明度与进展报告

签署方应公开分享其目标进展,从而提升行业透明度和责任担当。

安全设计原则

这些安全设计原则旨在为希望增强安全性的软件提供商提供清晰指导。

最小权限

该原则确保用户和系统仅拥有其角色所需的访问权限,通过减少攻击面并最大限度降低未经授权的数据访问风险,限制威胁或错误造成的损害。实施该原则需要严格的访问控制,并根据角色定期更新权限,从而增强抵御网络威胁的安全性。

职责分离

将职责分配给多个参与方或系统,防止单一实体控制关键流程,从而降低欺诈、错误和权限滥用的可能性。

在安全开发生命周期中,开发、测试和部署等角色由不同团队分担,确保任何单个个人都无法在不被发现的情况下更改系统。此外,还会加入自动化防护措施以维持这一原则。

纵深防御

这种方法使用多层安全防护来保护资产,并承认任何单一防御都无法做到完全万无一失。它在硬件、软件和流程层面纳入防火墙、入侵检测系统和定期安全审计等多种防护措施。

通过应对不同类型的威胁并为入侵者设置多重障碍,这种方法可显著降低漏洞风险,并强化组织的安全框架。

参与安全设计的优势

决定参与安全设计承诺的软件提供商可获得以下优势:

  • 展示对安全的承诺: 公开签署该承诺表明公司致力于安全软件开发实践。这有助于提升品牌声誉,并与潜在客户建立信任。
  • 聚焦可衡量的安全性: 该承诺鼓励采用以结果为导向的安全方法,推动具体行动,以可验证的方式改善软件产品的安全态势。
  • 协作与知识共享: 该承诺可促进行业参与者之间的协作和知识共享,推动安全软件开发实践的整体提升。

客户和用户同样受益。当软件提供商交付遵循安全设计原则的解决方案和平台时,最重要的优势体现在客户实际体验中:

  • 提升防护能力: 从一开始就将安全功能融入软件,可使软件更强大、更不易受攻击,并确保其运行所在网络同样安全,从而进一步提升网络安全性。
  • 增强 DEX: 在开发过程中更加重视安全和测试,有助于打造更优化、更稳定且更能抵御中断的产品,从而提升员工体验。
  • 提高 ROI: 更安全的产品可减少停机时间和补丁修复需求,帮助用户保持高效工作。
  • 简化合规: 借助安全设计软件,更容易遵守严格的数据隐私和安全法规,减少合规检查所需的时间和资源,并避免处罚。
  • 提升声誉: 优先重视安全的公司通常被认为更值得信赖,从而增强客户信心和忠诚度。

在软件产品中实施安全设计

从一开始就将安全融入软件开发,代表着软件创建方式的根本性转变。过去,软件通常采用“附加式安全”设计,即在产品开发完成后再添加安全功能。

但这意味着安全并不是解决方案的内在组成部分。核心产品与附加组件之间的任何连接点,都可能成为攻击者可利用的漏洞点。

安全设计强调,在整个软件开发生命周期(SDLC)中,安全措施都应始终处于优先考虑位置。

将安全设计原则贯穿整个流程,而不是等到代码编写完成后才处理,可确保安全从规划和设计阶段起就成为优先事项。这种方法需要及早识别潜在威胁,并将防御措施直接融入软件架构。

安全编码实践对于开发能够预先应对安全漏洞的软件至关重要。遵循来自开放全球应用安全项目等组织的指南,并执行代码审查和静态分析,有助于及早发现安全问题。关键实践包括输入验证、避免硬编码密钥以及选择安全库。利用持续漏洞扫描和威胁建模工具,可进一步确保软件抵御网络威胁的安全性。

在开发的每个阶段进行全面的安全测试,可确保及早发现并解决漏洞,避免其演变为终端用户面临的问题。这可以防止在 SDLC 后期处理这些问题所带来的费用和复杂性,更能避免在产品发布后再处理所带来的更大问题。

提供商应在其代码集中执行 SAS(静态应用程序安全测试)和 DAS(动态应用程序安全测试),并在整个 SDLC 中开展单元测试和集成测试,而不是将威胁建模或测试推迟到流程末尾。

为遵循安全设计原则,软件中应内置的关键功能包括:

  • 身份验证,以及结合用户已知(密码)、拥有(智能手机)或固有(生物识别)的因素。通过基于角色的访问控制(RBAC)和基于策略的访问控制(PBAC)进行授权,可确保用户仅获得必要访问权限,从而降低风险。
  • 加密和数据保护。加密使用 AES(高级加密标准)和 RSA(以 MIT 科学家 Rivest、Shamir 和 Adleman 命名)等算法,保护静态和传输中的敏感数据。正确的加密需要安全的密钥管理,包括将密钥与数据分开存储,并使用硬件安全模块(HSM)。定期更新和审计协议可提升安全性。

安全设计面临的挑战

组织在落实安全设计时会面临一些挑战,应制定计划予以应对:

  • 转变开发文化: 从注重特性和功能的开发流程,转向从一开始就集成安全的流程,需要开发团队内部进行重大文化转变。安全应被视为产品的关键方面,而不是单纯的附加内容。
  • 平衡安全性与可用性: 强大的安全措施不能以牺牲友好的用户体验为代价。在安全性与可用性之间找到适当平衡,对于确保用户采用并获得积极的软件整体体验至关重要。
  • 遗留基础设施和代码: 许多组织现有的软件产品构建在较旧的代码库之上,这些代码库在设计时可能并未考虑安全性。将安全设计原则改造并融入这些遗留系统可能既复杂又耗时。
  • 持续变化的威胁格局: 网络安全格局不断演变,新的威胁层出不穷。安全设计并非一次性修复方案;它要求组织持续关注最新威胁,并相应调整安全实践。
  • 熟练人才短缺: 有效实施安全设计需要具备专业安全知识的团队。然而,全球范围内网络安全专业人才短缺,这可能使组织难以找到全面采用安全设计原则所需的合格人员。
  • 让用户参与: 提供商应让终端用户参与设计流程,收集反馈以创建易于使用的安全功能。持续开展安全最佳实践教育也至关重要,可在不增加用户负担的情况下减少人为错误。

安全设计术语

以下说明安全设计原则与已熟悉的网络安全术语之间的关系:

  • 攻击面 网络攻击者可利用来访问系统或数据的所有潜在入口点的总和。安全设计旨在通过减少漏洞来缩小攻击面。
  • 黑盒测试: 一种安全测试方法,测试人员不了解系统的内部工作机制。安全设计鼓励采用安全编码实践,以最大限度减少可通过黑盒测试发现的漏洞。
  • 组件安全: 确保从库到框架的所有单个软件组件在构建时都考虑安全性的原则。安全设计强调第三方组件的安全选择和集成。
  • 数据最小化: 仅为特定目的收集、存储和处理所需最少量数据的实践。安全设计鼓励数据最小化,以降低数据泄露的潜在影响。
  • 加密: 将数据转换为只有使用解密密钥才能访问的加扰格式的过程。安全设计倡导使用强加密算法来保护敏感数据。
  • 固件安全: 保护控制硬件设备的底层代码的实践。安全设计鼓励对固件采用安全编码实践并定期更新。
  • 灰盒测试: 一种安全测试方法,测试人员对系统内部工作机制有部分了解。安全设计鼓励编写在灰盒和黑盒测试场景中都表现良好的代码。
  • 事件响应计划 一份书面计划,概述组织将如何响应安全事件。安全设计鼓励针对潜在安全泄露进行主动规划。
  • 输入验证: 对用户输入进行验证和清理,以防止恶意代码注入攻击的过程。安全设计强调稳健的输入验证实践。
  • 即时访问: 仅在绝对必要时,并且仅在必要时长内授予对资源的访问权限。安全设计鼓励最小化权限并使用 JIT 访问控制。
  • 已知漏洞: 攻击者可利用的已记录软件弱点。安全设计强调及时了解已知漏洞并迅速修补系统的重要性。
  • 最小权限: 仅向用户授予完成其工作所需最低级别访问权限的原则。安全设计倡导最小权限概念,以尽可能降低账户被攻陷造成的潜在损害。
  • 多重身份验证: 一种额外安全层,在访问系统时要求提供密码之外的第二个验证因素。安全设计强调 MFA 是一项关键安全控制。
  • 渗透测试 一种安全测试方法,由道德黑客尝试利用系统中的漏洞。安全设计鼓励定期进行渗透测试,以识别并解决安全弱点。
  • 开源安全: 确保基于开源组件构建的软件具备安全性的实践。安全设计鼓励谨慎选择和管理开源库,并重点关注已知漏洞。
  • 补丁管理 识别、获取和部署安全补丁以修复软件漏洞的过程。安全设计强调以主动方式进行补丁管理。
  • 质量保证: 确保软件满足指定要求和标准(包括安全要求)的过程。安全设计将安全考量融入 QA 流程的所有阶段。
  • 风险管理 识别、评估和缓解安全风险。安全设计鼓励采用基于风险的安全方法,重点关注最关键的威胁。
  • 安全编码实践: 在软件开发过程中最大限度减少漏洞引入的编码技术。安全设计强调对开发人员进行安全编码实践培训。
  • 威胁建模: 识别和分析系统潜在威胁的过程。安全设计鼓励在开发流程早期进行威胁建模,以主动解决安全问题。

相关内容:Ivanti 在实现安全设计目标方面的进展