了解最新技术文章
大大小小的公司都需要全面的软件安全测试,但人们对其实际含义存在很多困惑。组织如何进行软件安全测试?您应该运行什么类型的测试?你怎么知道你已经做得足够多了?
开源安全测试方法手册是一个很好的资源,它解释了安全测试的全部内容。OSSTMM 涵盖的范围远不止测试软件,它应该存在于任何安全测试人员的库中。
安全测试有多种类型。了解何时进行每种类型的安全测试(何时不进行)可以使您的应用程序更加安全,并减少为此花费的资源。在本文中,我们将介绍五种主要的安全测试类型,并建议何时最有效地使用它们。
因为我们专注于软件安全测试,所以让我们将测试建议与软件开发生命周期 (SDLC) 的阶段保持一致:
规划:帮助组织软件开发任务的项目管理活动
需求和分析:收集业务需求并将其转化为技术需求的过程
设计和原型设计:此阶段包括定义技术要求的实施方式、生成软件规范
编码和开发:应用程序开发人员编写代码来实现上一阶段创建的规范
测试:一旦开发阶段产生可以执行的软件,该阶段包括运行指定的测试以确保软件满足规范
部署:一旦软件通过测试阶段,软件就会被放置在生产平台上并可供用户使用
维护:最后阶段包括监视和更新配置设置,以优化软件的可用性并对软件中发现的任何缺陷做出响应
将安全性集成到软件中必须从 SDLC 流程的一开始就开始。
过去,软件开发组织试图将安全实施推迟到部署阶段。我们的想法是,过早地将安全性强加到流程中会浪费时间和资源。但他们错了。从一开始就将安全性设计到软件中比稍后尝试添加安全性要有效得多。
与 SDLC 的各个阶段相对应,每个计划应包括以下五种类型的安全测试:
风险评估:对已知漏洞、风险、威胁以及威胁发生的概率进行结构化分析。收集到的所有信息使评估人员能够对威胁进行排名并确定哪些最需要关注
安全审核:将观察到的工件与策略或要求进行比较的过程。在软件开发的背景下,这通常包括审查源代码是否符合开发标准
漏洞扫描:一系列测试以确定测试环境中是否存在任何已知漏洞。许多漏洞扫描都是自动化的,可以识别软件或软件运行环境中是否存在各种漏洞
安全扫描:虽然这看起来与漏洞扫描类似,但安全扫描扩展了测试范围,包括支持应用程序软件的计算环境的所有方面,包括网络和物理计算组件
渗透测试:安全专业人员尝试“闯入”软件以识别现有漏洞的活动。这种类型的测试也称为“道德黑客”
每种类型的安全测试都会测试软件环境的不同方面。这些测试有时会相互重叠,但它们可以很好地协同工作,以识别多个级别的安全漏洞——它们本身都无法提供完整的保护。
虽然运行软件安全测试没有错误的时间,但通过执行与 SDLC 当前阶段相对应的安全测试,您将获得最佳结果。由于许多软件开发组织使用敏捷或其他快速开发方法,开发阶段可能不是很明确。
以下是上述五种类型的测试如何映射到 SDLC 阶段:
软件安全测试 | SDLC 阶段 | 评论 |
---|---|---|
风险评估 | 规划、需求、设计 | 尽早进行风险评估。您必须了解所面临的风险,才能做好开发能够抵御最重要风险的软件的工作。 |
安全审计 | 编码、单元测试 | 当您编写应用程序的组件时,确保安全性的最佳方法之一是遵守安全编码标准。代码审核可以帮助揭示编码标准的差距和违规行为。 |
漏洞扫描 | 集成测试、系统测试 | 一旦您有了一个可以运行的应用程序,您就可以在用户开始使用它之前查看它抵御已知漏洞的能力。 |
安全扫描 | 部署 | 部署软件后,退一步评估整个环境的整体安全性非常重要。 |
渗透测试 | 维护 | 无论您多么积极地追求安全软件,一些漏洞只有在软件进入实际环境后才会出现。熟练的渗透测试人员通常可以找到方法来破坏在部署之前难以预见的软件。 |
了解您的环境和开发方法可能会导致以不同的顺序进行测试。例如,您可能需要首先运行漏洞评估,以便为风险评估提供输入。没关系。您的测试方案应该适合您的组织。
重点是让你的软件更安全,而不仅仅是说你运行了安全测试。每个测试都应该提供您可以使用的结果。如果没有,你最好把时间投入到其他事情上。
主要要点是软件的安全测试不仅仅是在单元测试中检查身份验证。虽然单元测试期间的安全性测试很重要,但这只是软件开发项目中安全性测试的一小部分。
提前计划并在流程的早期将安全测试构建到每个软件开发项目中。您最终将节省时间和金钱,并且您将生产出安全漏洞更少的软件。
上一篇:区块链应用程序真的安全吗?
下一篇:敏捷环境中的安全软件开发