软件保证

软件保证SWA )是软件开发中的关键过程,可确保软件产品的可靠性,安全性和安全性。它涉及各种活动,包括需求分析,设计审查,代码检查,测试和正式验证。软件保证的一个关键组成部分是安全的编码实践,遵循行业所接受的标准和最佳实践,例如软件工程研究所(SEI)在其CERT安全编码标准(SCS)中概述的标准和最佳实践。

软件保证的另一个重要方面是测试,该测试应在软件开发过程的各个阶段进行,并且可以包括功能测试性能测试安全性测试。测试有助于在发布之前识别软件产品中的任何缺陷或漏洞。此外,软件保证涉及风险管理和质量管理等组织和管理实践,以确保软件产品满足利益相关者的需求和期望。

软件保证旨在确保软件没有预期的漏洞和功能,并符合管理软件开发过程的所有要求和标准。 [3]此外,软件保证旨在生产更安全的软件密集型系统。为此,需要对潜在漏洞进行预防性动态和静态分析,并建议对整体,系统级别的理解。建筑风险分析在任何软件安全计划中都起着至关重要的作用,因为设计缺陷占安全性问题的50%,并且无法单独盯着代码来找到它们。

通过遵循行业接受的标准和最佳实践,结合测试和管理实践以及进行建筑风险分析,软件保证可以最大程度地减少系统故障和安全漏洞的风险,从而使其成为软件开发的关键方面。

倡议

软件保证计划是旨在确保软件系统质量,可靠性和安全性的计划和活动。这些举措很重要,因为从业务运营到关键基础架构,软件都用于广泛的应用程序中,并且软件中的缺陷或漏洞可能会带来严重的后果。

有几种类型的软件保证计划,包括:

  • 认证和认证:这些计划为软件开发制定标准和准则,并验证软件产品是否符合这些标准。认证和认证可以帮助确保软件产品可靠,安全并符合法规和行业标准。
  • 培训和教育:这些举措为软件开发人员提供了创建高质量,安全软件所需的知识和技能。培训和教育可以包括有关软件测试,安全编码实践以及行业标准和最佳实践的课程。
  • 代码分析和测试:这些举措使用工具和技术来分析软件代码并确定缺陷或漏洞。代码分析和测试可以包括静态分析,动态分析和模糊测试以及其他技术。
  • 威胁建模和风险评估:这些举措评估对软件系统的潜在风险和威胁,并确定减轻这些风险的策略。威胁建模和风险评估可以帮助确保软件系统设计为弹性和其他威胁。 [21]

为什么软件保证很重要?

在当今的数字世界中,软件用于控制各种设备和系统,包括汽车医疗设备金融系统军事设备。因此,确保软件产品的可靠性,安全性和安全性至关重要。如果没有适当的测试和验证,软件可以包含可能导致系统故障,安全漏洞和其他严重问题的缺陷和漏洞,对个人,企业和整个社会产生负面影响。

美国国家标准技术研究所(NIST)将软件保证定义为“软件没有漏洞的信心水平,要幺是故意在软件中设计到该软件中的漏洞,要幺在其生命周期内的任何时候意外插入,并且该软件在该软件中的工作预期的方式” [22] 。组织可以通过确保软件保证来降低昂贵的系统故障,数据泄露和其他负面结果的风险。

除了与软件缺陷和漏洞相关的潜在风险外,还有与软件保证有关的法律和法规要求。不遵守这些法规可能会导致法律和经济罚款。例如,为某些行业开发软件的组织可能会受到要求他们确保其产品安全和保障的法规。

许多关键功能,例如国防,银行业,医疗保健,电信,航空和对危险材料的控制,都取决于软件的正确和可预测的操作。如果支持这些活动的软件密集型系统可能会严重破坏它们。因此,组织要实施软件测试和验证技术和工具,以减少系统故障和安全漏洞的风险。

执行

软件保证是通过一系列活动来执行的,旨在确保软件产品的可靠性,安全性和安全性。这些活动包括需求分析,设计审查,代码检查,测试和正式验证。 [1]

  • 需求分析涉及识别和定义软件产品的功能和非功能要求。这包括了解软件的目的,其预期用户以及必须满足的任何相关标准或法规。
  • 设计评论涉及评估软件设计,以确保其满足要求并可以实施。这包括检查可能影响软件的可靠性,安全性或安全性的设计缺陷,错误或遗漏。 [24]
  • 代码检查涉及审查代码,以确保其符合行业所接受的标准和最佳实践。这包括检查代码质量,可读性和可维护性,以及确定潜在的漏洞或安全问题。 [2]
  • 测试涉及执行软件以识别可能影响其可靠性,安全性或安全性的缺陷或漏洞。这包括功能测试,性能测试和安全测试以及其他类型的测试。 [3]
  • 正式验证涉及使用数学或逻辑方法来证明该软件的行为是按预期的,并且不包含任何缺陷或漏洞。这包括诸如模型检查,定理证明和静态分析之类的技术。 [1]

技术

软件测试和验证是用于识别和解决软件代码中的缺陷和漏洞的技术。测试和验证技术有几种类型,包括功能测试,性能测试和安全测试。 [3]

  • 机器学习越来越多地用于软件保证来检测软件问题。通过分析大量数据的能力,机器学习可以识别可能不会被人类注意的模式和异常。机器学习的使用最终可以提高软件的质量和安全性。
  • 功能测试用于确保软件执行打算执行的功能。这种类型的测试涉及运行软件并测试其功能和功能,以确保其按预期工作。 [4]
  • 性能测试用于测量软件的速度,响应性和稳定性。这种类型的测试涉及模拟现实世界方案,以确保软件可以处理负载并在各种条件下运行良好。 [4]
  • 安全测试用于识别软件中攻击者可能利用的漏洞和弱点。这种类型的测试涉及使用各种技术试图违反软件的安全性,例如渗透测试和脆弱性扫描。 [3]
  • 除了测试外,还使用验证技术来确保软件代码正确并且没有缺陷。这包括诸如代码审查,正式验证和静态分析之类的技术。 [1]
  • 代码审查涉及检查代码,以确保其符合行业所接受的标准和最佳实践。这包括检查代码质量,可读性和可维护性,以及确定潜在的漏洞或安全问题。 [2]
  • 正式验证涉及使用数学或逻辑方法来证明该软件的行为是按预期的,并且不包含任何缺陷或漏洞。这包括诸如模型检查,定理证明和静态分析之类的技术。 [1]
  • 静态分析涉及分析软件代码而无需执行软件代码,以识别潜在的缺陷或漏洞。这包括诸如代码分析工具和代码检查之类的技术。 [2]

工具

软件测试和验证工具用于识别和解决软件代码中的缺陷和漏洞。有几种类型的测试和验证工具,包括:

  • 人工智能(AI)越来越多地用于软件保证中,以识别和解决软件代码中的缺陷和漏洞。 AI技术(例如机器学习和自然语言处理)可用于自动化测试和验证过程,从而使其更快,更有效。
  • 静态分析工具:这些工具分析了软件应用程序的源代码而无需执行它,以识别潜在的缺陷或漏洞。静态分析工具可用于检测与代码质量,安全性和符合编码标准有关的问题。
  • 动态分析工具:这些工具分析了软件应用程序在运行时的行为,以识别源代码中可能不明显的缺陷或漏洞。动态分析工具可用于检测与性能,内存使用和安全性有关的问题。 [25]
  • 模糊测试工具:这些工具会生成软件应用程序的随机输入,以测试其对意外或畸形数据的弹性。模糊测试工具可用于检测与输入验证,内存管理和安全性有关的问题。 [25]
  • 渗透测试工具:这些工具模拟了对软件应用程序的攻击,以确定攻击者可以利用的漏洞。渗透测试工具可用于检测与安全性有关的问题,例如SQL注入,跨站点脚本和缓冲区溢出。
  • 测试管理工具:这些工具用于管理软件测试过程,包括测试案例创建,执行和报告。测试管理工具可以帮助确保进行所有必需的测试,并跟踪和解决缺陷。 [24]

替代定义

美国国土安全部(DHS)

根据DHS ,软件保证地址:

  • 值得信赖 - 不存在恶意或无意中插入的可剥削脆弱性;
  • 可预测的执行 - 当执行时,该软件按预期发挥作用;
  • 一致性 - 计划的和系统的多学科活动,以确保软件流程和产品符合要求,标准/程序。

贡献SWA学科,在知识和核心竞争力体内表达:软件工程,系统工程,信息系统安全工程,信息保证,测试和评估,安全,安全,项目管理和软件获取。

软件保证是美国国土安全部(DHS)的一项战略计划,以促进软件中的完整性,安全性和可靠性。 SWA计划基于确保网络空间的国家战略 - 行动/建议2-14:

“国土安全部将促进全国性的公私努力,以颁布促进软件代码开发的完整性,安全性和可靠性的最佳实践和方法,包括降低错误代码,恶意代码或陷阱门的可能性的过程和程序在开发过程中引入。”有用于软件保证的开源软件工具可以帮助识别潜在的安全漏洞。

美国国防部(国防部)

对于国防部而言,SWA被定义为“在整个生命周期中,软件仅按预期发挥作用并且无意或无意地设计或插入或插入或插入的漏洞。由JFAC资助的两份最新出版物与软件工程学院(SEI)和军事服务部和NSA中的专家从业人员一起展示的系统工程实践。计划经理的SWA指南显示了如何计划,资源和管理SWA,同时进行管理和管理。开发人员的SWA指南建议在整个生命周期中都可以量身定制技术实践。这两个文件都是其中的第一个文件,也是授予的。国防部SWA SWA功能的两个企业规模组织都是联合联邦保证中心(JFAC)和DOD SWA的实践社区已作为季度大学论坛连续32个聚会运作。两者都向美国政府的其他地区开放。 JFAC宪章可在其网站上找到。为了提高对商业上SWA工具家庭的更广泛的情境意识,JFAC资助了国防分析研究所(IDA),以产生最先进的资源(SOAR)。在整个生命周期中,“工程中” SWA的最新创新是将选定的NIST 800-53控制耦合到工程任务,以便工程结果定义了风险管理框架(RMF)并推动运营权的权力(ATO)。包括数据项描述(DIDS),机器可读性漏洞报告格式以及该技术的简要概述应用程序的软件包,可在JFAC网站上获得。其他破坏性创新正在进行中。

软件保证指标和工具评估(Samate)项目

根据NIST Samate项目,软件保证是“计划和系统的活动集,可确保软件流程和产品符合要求,标准和程序的帮助:

  • 可信赖性 - 恶意或无意的起源都不存在可剥削的脆弱性,并且
  • 可预测的执行 - 当执行时,该软件按预期发挥作用。”

国家航空航天管理局(NASA)

根据美国宇航局的说法,软件保证是一项计划的,系统的活动集,可确保软件处理和产品符合要求,标准和程序。它包括质量保证,质量工程,验证和验证,不合格报告和纠正性报告的学科在软件生命周期中的行动,安全保证和安全保证及其应用。” NASA软件保证标准还指出:“在软件开发生命周期中,这些学科的应用称为软件保证。”

对像管理组(OMG)

根据OMG的说法,软件保证“实现既定业务和安全目标方面是合理的可信赖性”。

OMG的SWA特别兴趣小组(SIG)与OMG外部的平台和域工作队以及其他软件行业实体和组合作,以协调建立一个共同的框架,以通过促进开发与软件可信度有关的分析和交换与软件可信度相关的信息软件保证框架的规范,该框架将:

  • 建立一个可以用来表示任何/所有软件类别的软件属性的常见框架,以便软件供应商和收购方可以分别表示其主张和参数(分别)以及相应的证据,并采用了自动化工具(解决规模)
  • 验证产品在产品采集之前是否足够满足这些特征
  • 使行业能够提高其软件开发过程中软件保证当前状态的可见性
  • 使行业能够开发自动化工具来支持通用框架。

软件保证代码卓越论坛(SAFECODE)

根据Safecode的说法,软件保证是“信心,软件,硬件和服务没有故意和无意的漏洞,并且该软件按预期运行。”

也可以看看