其他分享
首页 > 其他分享> > 软件开发必读——如何利用容器通过连续测试快速实现安全性

软件开发必读——如何利用容器通过连续测试快速实现安全性

作者:互联网

  连续测试提供了一个框架,可以在生命周期的早期阶段进行测试。可以简化测试并使其在敏捷和连续过程中更少地成为抑制剂。需要做些什么?正确的自动化应用程序,并通过使用容器进行安全的软件开发,将精力集中在应用程序的最高风险领域。

  

  这个神奇且行之有效的白盒测试方法你居然不知道?赶紧看过来!

  容器在左移测试中扮演重要角色。并成功地进行了持续测试和DevSecOps一般。随着容器化的开发和测试环境提供与部署一样的好处,它们也对开发有所帮助。这里有一些:

  一致、可重复的开发工具配置“随处工作”部署正确的工具版本控制

  容器在现代DevSecOps开发中扮演着重要角色,因为容器可以帮助软件开发中的安全流程向左移动。

  带有容器和持续测试的加速DevSecOps白皮书详细介绍了利用容器进行安全软件开发以实现快速安全性的方法。这篇文章着眼于白皮书中讨论的以下关键领域,以更好地将容器集成到软件开发的开发和测试阶段:

  容器化安全实践。删除DevSecOps管道中的约束。在每个开发人员的桌面上对安全开发进行容器化。

  目标是实现更好的安全性,同时最大程度地减少对日常工作流程的影响。

  通过利用容器提供的一致性和可重用性,当团队中的每个开发人员和测试人员都使用相同的配置进行工作时,连续的安全性测试最有效。将工具和相关的配置移动到容器中可确保一致的使用,任何更改均会立即传播。更智能的DevSecOps工作流程意味着从一开始就将“安全性”纳入其中。

  安全要求为开发人员增加了额外的工作量。您的管理方式使准时安全的产品与较晚且不安全的产品有所不同。至关重要的要求是将安全性集成到现有的开发过程中,从而减轻负担,减少部分质量和整个工作流程。

  

  图1:DevSecOps工作流程,其中包含安全控制和流程的容器化实现。

  工作流程

  工作流程始于安全的编码策略。架构师或负责人创建一个配置(可能基于由诸如UL-2900或PCI DSS之类的标准驱动的CERT,CWE,OWASP等编码准则),以便团队的其他成员直接在其IDE中使用。这使开发人员能够在提交到源代码管理之前在其计算机上本地检查代码。他们可以在何时何地更便宜、更容易地发现并修复安全违规行为。

  组态

  通过容器映像复制相同的配置,以提供一致性,然后通过在构建过程中执行的分析来利用相同的配置。这项全面的分析超出了开发人员本地修改的代码的范围,并提供了一个安全网来控制交付管道,以确保不安全的代码不会被提升到后续阶段。

  分析

  最后,分析结果通过集中的报告和分析仪表板发送回开发人员的IDE。在这里,您可以跟踪进度,进行课程更正并实时生成审核报告。

  经理和安全负责人可以基于中央仪表板中的CWE Top 25,OWASP Top 10或SEI CERT等安全标准评估项目。这些仪表板可以显示趋势信息并回答以下问题:

  该项目正在改善还是越来越差?哪些代码区引起最多的问题?哪些问题具有最大的风险和影响?

  能够回答这些和其他问题并采取行动,将开发团队从具有一定安全性的DevOps转变为DevSecOps。

  尽管渴望提高安全性和质量,但敏捷和持续的流程在早期采用和日常运营中遇到了障碍。减慢敏捷过程的罪魁祸首通常是测试。之所以出现问题,是因为团队不完全了解每次迭代期间要测试的内容。他们要么尝试测试所有内容,要么测试不足,要么只是猜测。这三个结果都是不可接受的,特别是从安全角度来看。智能测试执行可进一步帮助团队集中精力进行测试,真正实现连续测试。

  测试金字塔

  测试金字塔定义了在项目上投入时间和精力的最佳位置。在理想的金字塔中,您将宝贵的时间和精力投入到金字塔基础上的一套全面的单元测试套件中,并由API和服务测试提供支持。金字塔顶端是较少数量的基于系统和GUI的测试。这些测试需要人工干预,例如UX测试。

  

  图2:理想的测试金字塔是建立在单元测试基础之上的。重叠的倒金字塔反映了许多组织当前的工作。

  该金字塔经常被倒置成蛋卷冰淇淋形状。团队花费大量时间和精力进行脆弱和复杂的系统级GUI测试,这些测试需要实现和集成完整的功能。结果是测试团队无法在SDLC的早期阶段连续执行。

  这在安全性方面尤其成问题。将安全测试留到开发的后期阶段既昂贵又冒险。成功进行连续测试的关键是融化冰淇淋蛋筒。专注于为功能和安全性创建自动化的单元和API测试,这些测试可以在开发人员实施新功能时连续执行。

  测试最佳做法

  使测试金字塔正面朝上的最佳方法(与DevSecOps所需的最佳实践很好地吻合)是采用以下测试最佳实践:

  尽早使用SAST来发现代码中隐藏的深层可靠性和安全性问题。这些问题通常被人为检查或单元测试所忽略。尽早引入单元测试,以确保代码功能正常,设计合理并符合要求(包括安全要求)。适当地专注于通过容器在虚拟或生产环境中部署的API测试。

  API级测试提供了以更高的可重用性和更少的UI级更改对系统功能进行测试的功能。这意味着自动化过程会生成大量数据。为了支持决策,必须将这些数据汇总到集中的质量视图中。图形化的仪表板提供了测试进度的顶级视图。您可以基于对数据的检查,发现的缺陷和其他问题来创建其他工作项。

  通过智能测试执行来提高安全性

  上面列出的最佳实践缺少集中测试的方法。它对以下问题提出了答案:“要测试什么?”将测试重点放在开发人员在每次代码更改后需要检查的内容上,对于加速测试,启用连续测试和加快DevSecOps管道至关重要。

  为了加快敏捷或连续流水线中的测试速度,团队需要在每个构建基础上执行智能测试。它减少了团队需要执行以解决每次新迭代引入的风险所需的测试集。测试影响分析提供的分析对于将测试仅集中在您绝对需要测试的内容而不是the弹枪方法上至关重要。

  只有通过智能,基于数据的决策才能实现连续测试。使开发团队专注于最少的测试集以确保每次迭代都覆盖适当的范围,这是将敏捷性重新带回敏捷开发方法的关键。

  

  图3:Parasoft DTP提供的示例高级图表,显示通过、失败、不完整和需要重新测试的测试分布。

  用户可以单击饼图以查看更多详细信息。

  智能测试执行使用测试影响分析来跟踪针对应用程序的手动测试的执行情况,以及与这些测试相关的捕获的代码覆盖率信息。自动化测试使用类似的技术。该分析指出需要执行哪些手动测试才能访问每个新版本交付的已更改功能。因此,在他们的本地IDE的开发人员和测试人员级别,智能测试执行至关重要。它使他们能够集中精力进行测试,消除猜测工作和其他“以防万一”的工作。

  为了实现有效的DevSecOps管道,开发人员需要获得自动化功能,从而消除了他们日常工作中的繁琐工作。成功的安全性以及质量和安全性开发需要来自单元测试、API测试、UI测试和SAST结果的快速反馈。另外,根据安全团队的最新发现对安全控制进行微调。

  容器对开发团队的好处扩展到了开发人员的桌面。容器在开发人员、构建、集成和部署环境中提供了一致且可重用的工具链(包括测试/SAST配置)。它们消除了每次更新配置时都更新本地工作站的需要。在基于容器的开发中,仅需要更新容器映像。整个团队受益。

  基于团队的工具部署

  基于团队的工具部署可以使用容器来托管存储库,不同的工具链(对于嵌入式软件开发尤其重要)、SAST和测试工具。下面显示了可能的容器化开发环境的说明性示例。

  

  图4:容器为开发人员提供了一种有效的方式,使其拥有一致的开发和测试环境。

  开发人员真正开始加速安全开发的地方是通过本地“工作站”采用智能测试执行。在代码修改之间以及将任何更改提交到源代码管理系统之前,都要加强良好的安全性和工程实践(以在本地进行并经常进行安全性分析和测试执行)。此过程大大减少了对修改后的代码的安全性和质量的反馈循环。通常,它可以加快“编码、测试、提交”工作流程。

  消除不必要的测试

  开发团队可以使用连续的测试工作流程来帮助集中测试工作,并确保他们仅执行必要的测试。此外,使用SAST工具持续监控代码安全性对于确保团队遵守编码标准以及棘手的漏洞不会逃避安全测试至关重要。

  对SAST和测试结果的快速反馈和分析减少了连续测试中的摩擦。基于容器的开发环境提供的一致性意味着整个团队的结果是相同的。当结果不匹配时,它减少了“调试”不同开发环境的需要。将智能测试执行功能带到开发人员的桌面上,可真正加快安全软件开发的速度。

  容器是一种行之有效的执行和部署方法。它们还支持版本控制和集中控制,从而在不同主机环境之间实现快速部署和可移植性。CI/CD对于DevSecOps管道中的安全开发也很重要,因为它可以提供带有内置安全控制的可重现应用程序环境。

  连续测试提供了一个框架,可以在生命周期的早期阶段进行测试。有了正确的自动化应用程序并专注于应用程序中最高风险的领域,就可以简化测试,从而减少敏捷和连续过程中的抑制剂。通过提供一致的工具链、测试/SAST配置、开发和(本地)部署以及测试环境,使用容器进行安全的软件开发可将版本控制和可重用性的优势扩展到开发人员桌面。

标签:容器,必读,软件开发,开发人员,测试,团队,安全性,DevSecOps
来源: https://blog.csdn.net/linjingyg/article/details/122821743