0530-3433334

网站建设 APP开发 小程序

知识

分享你我感悟

您当前位置>首页 >> 知识 >> 软件开发

如何做好安全测试、软件组成分析SCA和渗透测试

发表时间:2023-10-17 19:04:41

文章来源:炫佑科技

浏览次数:169

菏泽炫佑科技

如何做好安全测试、软件组成分析SCA和渗透测试

本文分享自华为云PaaS助手华为云社区《研发安全实践-测试》。

前言

随着 的发展,企业应用迭代的速度得到了极大的提升。 但同时,如果安全跟不上如何做好安全测试、软件组成分析SCA和渗透测试,不仅会抵消变革带来的改进、拖慢企业数字化转型进程,还会带来漏洞和风险。 因此,安全能力在全球范围内越来越受到重视,软件开发固有的安全性已成为评价企业成熟度的重要指标。 2012年提出将安全防护流程有机融入传统流程的理念,为研发安全提供有力保障,安全工具支撑研发阶段安全要求的落实。

安全测试的重要性

软件测试是软件开发生命周期的重要组成部分和重要组成部分。 测试有多种形式。 按照测试类型可以分为接口测试、功能测试、性能测试、文档测试等。传统的功能测试和非功能测试可以通过某种形式隐式地发现程序中的某些漏洞,例如密码格式验证,但这些测试并不是专门寻找安全漏洞,也不够全面,无法确保应用程序或服务已经通过全面的安全漏洞测试。 安全测试可以测试软件如何应对未经授权的内部或外部用户的攻击/恶意破坏,确保软件和数据的安全。

2020年发布的调查报告《The State Of, 2020》统计显示,在全球480家企业已确认的外部攻击中,Web应用排名**,占比39%。 针对Web应用程序的攻击主要是指基于编程式SQL注入、跨站脚本攻击或远程文件包含攻击。 针对软件漏洞的攻击占30%,主要指利用安全漏洞的攻击。

安全测试是实践的关键部分,软件程序通过多种方式进行测试以确保质量。 安全测试不应只涉及软件程序,还应重点关注端到端管道、实时生产系统、软件基础设施、数据库和中间件,以降低任何环节的安全攻击风险。 安全测试是一个专门的领域,拥有自己的一套工具和实践,旨在暴露这些漏洞。

如何进行安全测试

如何做好安全测试,我们将重点关注三个方面:应用安全测试AST、软件构成分析SCA和渗透测试。

应用程序安全测试 AST

从之前的攻击目标统计可以看出,应用程序仍然是主要的攻击目标。 应用程序是客户和核心业务功能之间的网关。 客户使用应用程序访问企业提供的服务或购买产品,因此给企业及其客户带来了*大的安全风险。 同时,随着全球疫情的存在以及远程办公的兴起,企业对应用的依赖程度更高,因此应用的安全至关重要。 在安全测试中,应用安全测试也是首当其冲。 目前业界常用的技术主要分为三类:静态应用安全测试SAST、动态应用安全测试DAST、交互式应用安全测试IAST。

静态应用程序安全测试 SAST

静态应用程序安全测试( test)是通过检查应用程序的源代码来检测程序代码中的安全漏洞的测试方法。 有些工具还会依赖编译过程甚至二进制文件,通过抽象语法树、控制流分析、污点跟踪等技术手段来提高检测覆盖率和准确性。 SAST是一种白盒测试方法。 常用工具包括 、 、 、 和 。

SAST工具具有出色的代码覆盖率,可以发现代码中更多、更全的漏洞类型。 使用SAST可以低成本防御一些隐藏在源代码中的常见安全缺陷和公开漏洞,例如OWASP TOP10。 同时可以将问题点​​定位到具体代码行,方便修复。 然而,在使用SAST时,你无法逃避误报率的问题。 误报会降低该工具的实用性。 工程师可能需要花费更多时间来清除误报而不是漏洞。 幸运的是,大多数 SAST 工具都为工程师提供了配置扫描功能。 减少误报报告数量的措施。

动态应用程序安全测试 DAST

动态应用安全测试( Test)是在不需要系统源代码的情况下,模拟攻击者的行为构造对应用程序的特定输入,并分析应用程序的行为和反应,以确定应用程序是否存在某类安全漏洞。 常见的工具包括用于Web应用程序的商业和开源AWVS,还有一些针对计算机或终端。

DAST 从攻击者的角度复制了真实的攻击。 如果成功,则证明该漏洞在应用程序中的可利用性。 因此,误报数量比 SAST 低得多,并且准确率非常高。 工程师可以专注于修复真正的攻击。 漏洞,而不是花时间去验证它们。 DAST是一种非常可靠的漏洞检测技术,可以发现大量真实的安全漏洞。 DAST使用攻击特征库来发现和验证漏洞,可以发现大多数高危问题。 因此,它是业界非常常见的Web安全测试解决方案。

DAST 是黑盒测试的一种形式。 在DAST测试过程中,主要是功能性的。 无需具备编程技能或了解应用程序的内部逻辑结构。 模糊测试是DAST测试中常用的方法。 通过故意将格式不正确或随机的数据引入应用程序可能会导致程序故障。 模糊测试策略的开发基于应用程序的预期用途以及应用程序的功能和设计规范。

除了扫描应用程序本身之外,DAST还可以扫描和发现第三方开源组件和第三方框架中的漏洞。 许多DAST工具可以跨多种语言和框架工作,提供比SAST工具更大的应用程序覆盖范围。 但这是有代价的:当发现漏洞时,通常很难准确地确定源代码中应用修复程序的位置。

配置 DAST 需要高级安全知识,才能根据目标应用程序的潜在攻击面正确设置测试。 工程师必须能够配置动态测试工具以获得*准确的结果。 他们还需要在运行时将其集成到应用程序中,并且它更适合可以执行运行时分析的 CI/CD 管道。 强烈推荐 DAST 作为自动化测试工具。 如果使用正确,其低误报输出和接近手动渗透测试的操作可以产生出色的结果。

交互式应用程序安全测试 IAST

交互式应用程序安全测试( )由该公司于2012年提出,是一种运行时检测工具,依赖于应用程序在被监控时的活动。 它可以监控流经应用程序的流量,以确定底层源代码是否容易被利用。 IAST 监视正在运行的应用程序的数据流,以确定是否存在安全控制来保护数据。 例如,它检测字符串是否通过验证方法,或者密码是否在源处加密并在退出正在运行的应用程序之前保持加密状态。 由于 IAST 观察运行时数据的行为,而不是假设各个组件如何在本地管理数据,因此 IAST 很少出现误报。 同时,IAST 工具可以读取和理解底层源代码,因此可以定位并报告程序员应重点关注的代码行,以修复扫描发现的漏洞。

尽管 IAST 使用简单,但它具有与 DAST 相同的限制 - 它需要正在运行的应用程序来执行测试,这意味着它*好集成到 CI/CD 流程中。 而如果测试时进行的功能测试没有100%覆盖底层源代码,那么安全测试代码覆盖率也将低于100%。

自动化应用程序安全测试的三种方法:静态、动态和交互式都在成功的框架中发挥着作用,决定将哪种方法集成到价值流中取决于许多因素。 SAST *有可能发现源代码中的缺陷 - 但由于缺乏上下文,它会产生大量误报。 用 DAST 或 IAST(或两者)补充 SAST 是一个好方法。

软件构成分析SCA

应用程序已成为外部攻击的主要目标。 原因之一是开源软件的使用越来越多。 为了加快开发速度,开发人员会复用大量成熟的组件、库等代码。 组织使用开源和第三方组件。 ,从而暴露更多的API。 该组织的代码库包含不是由开发人员编写的代码。 不知道它是否经过安全测试,或者是否包含恶意代码或恶意软件。 更糟糕的是,许多开源库依赖其他开源库来提供更多功能。 这意味着组织的应用程序中存在对OSS的依赖链。 据统计,开源占应用程序代码库的 70%,这意味着一个组织的大部分应用程序都不是由该组织的工程师编写的。 挑战在于了解这些依赖项是否安全,如果不安全,如何确保它们安全。 。

尽管应用程序安全测试可以识别相关代码中的一些漏洞,但不可能识别与其相关的所有问题。 已知的漏洞可能会记录在常见的漏洞数据库中,一些开源提供商也维护自己的漏洞数据库。 必须根据这些数据库检查应用程序依赖性,并且必须解决与易受攻击的组件相关的任何风险。 有许多软件组合分析工具可用于执行此任务,每种工具都有自己的优点和缺点。 在基本层面上,它们都提供了漏洞的详细信息以及减轻风险的建议,例如升级到组件的安全版本或完全使用不同的组件。

SCA通常在安全测试阶段执行两次,**次在软件开发的早期阶段执行。 因为在开发期间更新第三方库比在生产中更新更便宜,而生产中的修复成本更高。

渗透测试

上面提到的AST应用测试和SCA软件组件分析在开发和安全过程中都是以自动化的形式进行的。 尽管价值流中有很多层自动化测试,但它不可能100%安全,并且作为自动化测试是有效的。 此外,不需要手动安全测试,并且在一些受监管的行业领域,组织的在线产品或服务的渗透测试必须由经过认可的第三方执行。 通常,这些渗透测试是在预生产环境中进行的,但也可以在实时系统上进行。

国家网络安全中心(NCSC)将渗透测试定义为“旨在发现安全漏洞的计算机网络或系统的授权测试”。 渗透测试是一种有效的测试方法。 是安全人员模拟黑客进入系统的一种测试方法。 它对执行测试的人有很高的要求。 强大的测试人员无需强大的技能即可发现有价值的安全漏洞。 具有攻击能力的测试人员无法有效发现系统中的安全漏洞,因此难以大规模使用。 渗透测试的过程是不可重复的(它主要依靠测试人员的经验,类似于调试),因此脚本化、自动化渗透测试的想法并不可行。 全自动工具通常只能发现那些可以使用标准方法发现的东西。 特定的安全漏洞,例如简单的 SQL 注入。 在渗透测试过程中,授权测试人员尝试使用与攻击者相同的技术和工具,利用公开已知的漏洞和常见的错误配置,对系统架构、应用程序和网络级漏洞进行渗透测试。 根据行业特点和业务场景,渗透测试应覆盖重要安全风险点和重要业务系统,并有明确的渗透测试计划和管理机制。

在 中,一天可能会有多个版本。 因此,在系统部署之前进行手动测试是不可行的。 相反,手动渗透测试是作为年度审查的一部分进行的,以满足监管要求,并作为验证过程来突出自动化安全测试过程中的弱点。

华为云安全开发实践

华为云主要从规范、方法、工具三个方面保障验证阶段的安全。

• 标准化制定各语言的安全编码规范、测试设计规范、指南和测试指南; 安全编译选项的技术规范和模糊安全测试指南;

• 方法上遵循安全编译选项、静态分析、SCA、TMBT安全测试设计、Web安全测试技术、通用组件安全测试、虚拟化安全测试方法、物联网安全测试、病毒扫描、模糊测试等。

• 工具方面,华为云以客户安全需求和行业标准为检查项目,开发了自有的专有工具平台、安全编码检查服务、安全测试服务,可以检查主流操作系统和数据库的安全配置情况。行业。

华为云所有云服务在发布前都需要经过多轮安全测试。 Alpha阶段将进行鉴权、鉴权、会话安全等微服务级功能和接口安全测试; Beta阶段,将通过API和协议的测试来验证服务集成; 在Gamma阶段自动化软件开发,将进行数据库安全等专项安全测试。 测试用例将涵盖安全设计阶段确定的安全需求以及从攻击者角度进行的渗透测试用例。

后记

在安全测试方面,它不同于传统的手工测试方法,尽可能采用自动化是其核心要求。 通过持续集成管道中的安全测试自动化,工程师可以以*小的安全风险快速交付功能。 自动化测试的反馈循环使工程师能够在功能出现在生产中之前识别并修复它们。 当与有效的教育政策和良好的设计原则相结合时,安全测试自动化可以通过这些反馈循环增强持续学习,并提供一个环境,其中安全性是软件交付的核心,而不是对流程和客户结果产生负面影响。

参考附录

1.《华为云安全白皮书》。 华为技术有限公司

2.《研发运营安全白皮书》。 云计算开源产业联盟。

3.《领袖指南》格伦·威尔逊(GLENN)

4、每天扫描超过300亿行代码,在华为的实施和实践

5. 2021 年的状况:关键

点击关注,**时间了解华为云新技术~

炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等

相关案例查看更多