1. 蓝箭律师网首页
  2. 法律综合

软件保护和软件授权的概念(想要做好软件测试,可以先了解AST、SCA和渗透测试)

一.软件保护软件保护的概念是站在开发商的角度出发的,它强调的是利用以加密为主的技术手段保护软件不被破解。从理论上说,只要拥有足够的资源和时间,所有的软件保护技术...

一.软件保护软件保护的概念是站在开发商的角度出发的,它强调的是利用以加密为主的技术手段保护软件不被破解。从理论上说,只要...更多软件保护和软件授权的概念的这个问题,以及大家所关心的的内容,我们小编一一为大家详细解答,欢迎浏览。

软件保护和软件授权的概念(想要做好软件测试,可以先了解AST、SCA和渗透测试)

一.软件保护

软件保护的概念是站在开发商的角度出发的,它强调的是利用以加密为主的技术手段保护软件不被破解。从理论上说,只要拥有足够的资源和时间,所有的软件保护技术都可以被破解。但是,如果一种保护技术的安全强度达到了让破解者付出比购买软件还要高的成本,这种保护技术就是成功的,值得使用。

常用的软件保护方式一般分为软加密和硬加密两种。软加密一般采用与计算机硬件特征绑定的电子许可证形式。硬加密主要是指加密狗或加密锁。传统的使用电子许可证和加密锁保护软件的方案一般并不包括授权和用户管理的功能,软件开发商往往需要自行开发初始化工具和用户管理工具。单纯的软件保护功能无法满足互联网时代的软件电子化发行以及按需销售的要求。

二.软件授权

软件授权是软件保护概念的延伸和发展。其目标对象同时涵盖了开发商和最终用户两个方面。其目是在保护软件不被盗版的同时,为开发商创造更方便、更灵活的销售模式。

软件授权在实现软件保护技术的基础上,能够提供从软件授权的设计、开发集成、调试,到软件授权的生成、分发、管理一整套完善的解决方案。从传统的软件保护过渡到软件授权,不仅是软件保护在互联网时代发展的必然结果,也是开发商降低软件的保护和发行成本,更快响应用户需求和市场的变化的强烈愿望。

三.为什么需要软件授权

越来越多的开发商都不再满足于现有的功能单一的软件保护产品,都希望市场上多一些结合有互联网技术的、授权管理功能丰富的软件保护产品,这是因为:

1.互联网的逐渐普及和日新月异的发展极大地改变了我们工作和生活的方式,软件的保护和授权也应该与互联网技术相结合,以达到及时通讯、方便管理和节省成本的目的。

2.软件的功能及模块越来越多,用户的需求也越来越个性化,而市场的变化更是令人难以预测。这些都要求软件开发商不断创造新的按需销售模式,以获得更多的利润。

3.软件的授权管理最好能与软件开发商现有的ERP/CRM等管理系统集成,做到架构上可扩展、功能上智能化和自动化,以进一步提升企业的管理水平和竞争力。

四.软件授权的要素

既然软件授权是软件保护概念的延伸和发展,那么软件授权在实现软件保护这个基本要素的同时,也应具备自身的一些特点。具体来说,软件授权至少要包含以下三个要素:

软件加密:软件授权依然需要使用加密算法作为主要的保护软件的技术手段。与软件保护不同的是,软件授权所需要的加密方案要更灵活,能够满足不同授权需求和业务模式的需要。

授权管理:授权必然要涉及到管理。为每个软件用户提供不同的授权方案并根据需要进行升级,需要一个完整的系统,包括授权的设计、发放、升级、管理和统计等功能。如果说软件保护主要是一个软件应用的客户端的技术,授权管理则是一个系统架构。

中央服务:软件授权要求建立中央授权服务系统,以用于授权的设计和发放,并为授权用户提供方便快捷的服务。所有的软件保护和授权工作都要以中央授权系统为核心,以互联网技术为纽带,实现软件保护和授权的统一化、智能化、自动化。

五.软件授权的主要模式

根据授权文件是存在本机还是服务器上——云端,软件授权主要分本地授权和云授权两大类。

5.1.本地授权

本地授权是指软件的使用许可在客户端,主要为传统的软件保护模式所使用。最常用的两种本地授权形式是前面提到的硬件加密锁和电子许可证。硬件加密锁的优点是授权发放简单、可移动。但是随着互联网的使用越来越普及,也暴露出不少缺点:

1.适用于传统的一次性永久授权,无法实现试用版本和按需购买。

2.硬件的存在带来额外的生产、初始化、物流、安装和维护的成本。

3.安装驱动和客户端组件以及额外的硬件设备影响了客户的使用体验。

4.无法实现基于互联网的电子化发行。

5.难以进行升级、跟踪及售后管理。

电子许可证是在获得了机器的硬件特征后,以某种机制将授权与该机器硬件特征绑定后发给客户使用。结合了服务器验证的“双因素”电子授权的安全机制,在整体架构的安全性和安全效果上相比加密锁具有更多的优势。

电子许可证在客户端没有硬件,也无需安装驱动和客户端组件,可靠性兼容性好,可实现软件的电子化发行,为开发商节省大量的软件保护和发行成本。但它从本质上仍然属于本地授权方式,不具有下面介绍的“云授权”方式实时授权、云存储、可移动以及超高安全性的特点。

5.2.云授权

云授权是一种SaaS模式的授权。开发商的软件还是在本地运行,但授权许可始终保存在授权服务器——“云端”。云授权要求客户端软件具备连网条件,可以根据具体的情况要求时刻连网或每隔一个固定的时间连一次网,以便跟踪和管理授权。相比本地授权,云授权的安全级别要更高,这是因为授权的核心机制只存在于服务器上,而服务器与应用软件之间采用了高安全性通讯协议。

云授权的突出优点是:

1.保护开发商对当前产品的投资和技术积累,实现已有的产品和技术向未来的云计算模式的平滑过渡。

2.超高安全性。

3.客户端可移动,不与计算机或加密锁绑定。

4.实时用户管理和授权管理。

5.软件配置和用户配置的云存储。


软件保护和软件授权的概念拓展阅读

软件保护和软件授权的概念(想要做好软件测试,可以先了解AST、SCA和渗透测试)

想要做好软件测试,可以先了解AST、SCA和渗透测试

摘要:如何做好安全测试,我们重点从应用程序安全测试AST、软件组成分析SCA和渗透测试三个方面来看一下。

本文分享自华为云社区《DevSecOps研发安全实践——测试篇-云社区-华为云》,作者:华为云PaaS小助手 。

前言

随着DevOps的发展,DevOps大幅提升了企业应用迭代的速度。但同时,安全如果不能跟上步伐,不仅会抵消DevOps变革带来的提升,拖慢企业数字化转型进程,还会导致漏洞与风险不约而至。所以安全能力在全球范围内受到的重视越来越高,软件开发内生的安全性成为评价企业DevOps成熟度水平的重要指标。2012年,Gartner提出了DevSecOps的理念,将安全防护流程有机地融入传统的 DevOps 流程中,为研发安全提供强有力保证,安全工具支撑研发阶段安全要求落地。

安全测试的重要性

软件测试是软件开发生命周期必不可少的一环,是重要的组成部分。测试有多种形式,按照测试类型,可以分为界面类测试、功能测试、性能测试、文档测试等。传统的功能测试和非功能测试能够通过某种形式隐式发现程序中的某些漏洞,如密码格式验证,但是这些测试并不是专门寻找安全缺陷的,也不够全面,无法保证应用程序或服务已经通过了全面的安全漏洞测试。安全测试可以测试软件在遭到没有授权的内部或者外部用户的攻击/恶意破坏时如何进行处理,能够保证软件和数据的安全。

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

软件保护和软件授权的概念(想要做好软件测试,可以先了解AST、SCA和渗透测试)

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

如何做好安全测试

如何做好安全测试,我们重点从应用程序安全测试AST、软件组成分析SCA和渗透测试三个方面来看一下。

应用程序安全测试AST

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

静态应用程序安全测试SAST

静态应用程序安全测试(Static Application Security Testing),是通过检查应用程序的源代码来发现程序代码存在安全漏洞的测试方法。有些工具也会依赖于编译过程甚至是二进制文件,通过一些抽象语法树、控制流分析及污点追踪等技术手段来提升检测覆盖度和准确度。SAST是一种白盒测试方式,常见的工具有Coverity、Checkmarx、FindBugs、 CodeQL和ShiftLeft inspect。

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

动态应用程序安全测试DAST

动态应用程序安全测试(Dynamic Application Security Testing),是在不需要系统源码的情况下,通过模拟攻击者的行为构造特定的输入给到应用程序,分析应用程序的行为和反应,从而确定该应用是否存在某些类型的安全漏洞。常见的工具如针对Web应用商业和开源的AWVS,还有一些针对电脑或终端AppScan等。

DAST是从攻击者视角出发,复制了真实的攻击,如果成功,证明了应用程序中漏洞的可利用性,因此误报的数量远低于SAST,准确性非常高,工程师可以专注于修复真正的漏洞,而不是花时间验证它们。DAST是非常可靠的漏洞检测技术,可以发现大量的真实安全漏洞。DAST采用攻击特征库来做漏洞发现与验证,能发现大部分的高风险问题,因此是业界Web安全测试使用非常普遍的一种安全测试方案。

DAST是一种黑盒测试形式,在DAST测试过程中,主要以功能为主,不需要具备编程能力,不用了解应用程序的内部逻辑结构,模糊测试是DAST测试中常用的一种方式,通过故意向应用程序引入不正确格式或随机数据诱发程序故障。模糊测试策略的制定,以应用程序的预期用途,以及应用程序的功能和设计规范为基础。

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

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

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

交互式应用程序安全测试(Interactive Application Security Testing),由Gartner公司在2012年提出,是一种运行时检测工具,依赖于应用程序在被监控时的活动,可监控流经应用程序的流量,以确定底层源代码是否容易被利用。IAST监控正在运行的应用程序的数据流以确定是否存在保护数据的安全控制。例如,它会检测一个字符串是否通过了验证方法,或者密码是否在源头加密并保持加密,直到它退出正在运行的应用程序。因为它是在运行时观察数据的行为,而不是对单个组件如何在本地管理数据进行假设,所以IAST 很少误报。同时IAST 工具能够读取和理解底层源代码,因此它们可以定位和报告程序员应该关注的代码行,以修复扫描识别出的漏洞。

尽管 IAST 使用起来简单,但它也有与 DAST 相同的限制--它需要一个正在运行的应用程序来执行测试,这意味着最好将它集成到 CI/CD流。并且如果在测试期间执行的功能测试未覆盖100%的底层源代码,则安全测试代码覆盖率也将低于100%。

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

软件组成分析SCA

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

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

通常安全测试阶段进行二次SCA,首次则在软件开发的早期阶段。因为在开发过程中更新第三方库比在生产环境中更新成本更低,在生产环境中,修复成本更高。

渗透测试

上面讲到的AST应用程序测试和SCA软件组件分析,在研发安全时间过程中都是以自动化形式存在,尽管价值流中有很多层自动化测试,但它不可能 100% 安全,作为自动化测试的有效补充,手工安全测试不必可少,在一些受监管的行业部门中,必须由经认可的第三方对组织的在线产品或服务进行渗透测试。通常,这些渗透测试是在预生产环境中进行的,它们也可以在实时系统上进行。

国家网络安全中心(NCSC)将渗透测试定义为“对计算机网络或系统的授权测试,旨在寻找安全漏洞”。渗透测试是一种有效的测试方法,是安全人员模拟黑客进入系统的测试方法,他对执行测试的人要求很高,能力强的测试者能够发现有价值的安全性漏洞,而不具备很强攻击能力的测试者就无法有效发现系统中的安全性漏洞,因此很难被大规模使用。

渗透测试的过程不具有可重复的特点(主要依赖于测试者的经验,类似调试),所以脚本化、自动化的渗透测试想法不可行,完全自动化的工具通常只能发现那些可以被用标准方式发现的特定安全漏洞,如简单的SQL注入。在渗透测试期间,授权测试人员尝试使用攻击者使用的相同技术和工具,利用公开已知的漏洞和常见的错误配置,针对系统架构、应用程序、网络层面漏洞进行渗透测试,根据行业特点与业务场景实施渗透测试,范围应覆盖重要安全风险点与重要业务系统,有明确的渗透测试计划与管理机制。

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

华为云安全开发实践

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

• 规范上制定各语言安全编码规范、各测试设计规范、指南和测试指导;安全编译选项技术规范、Fuzz安全测试指导;

• 方法上,遵循安全编译选项、静态分析、SCA ,TMBT安全测试设计、Web安全测试技术、通用组件安全测试、虚拟化安全测试方法、IoT安全测试、病毒扫描、Fuzz;

• 工具上,华为云将客户安全需求和业界标准作为检查项,研发了自己专有的工具平台,SecSolar安全编码检查服务、SecGuard安全测试服务、SecFuzz,SecureCat 可以对业界主流的 OS 和 DB 的安全配置进行检查。

华为云的所有云服务在发布前都需要经过多轮的安全测试。在Alpha 阶段会进行认证、鉴权、 会话安全等微服务级功能和接口安全测试;Beta 阶段通过对 API 和协议的 fuzzing 测试验证服务集成;Gamma 阶段进行数据库安全等安全专项测试。在测试用例上,会覆盖安全设计阶段识别出的安全需求和攻击者视角的渗透测试用例等。

后记

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

参考附录

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

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

3.《DevSecOps领导者指南》格伦·威尔逊(GLENN WILSON)

4. 每天扫描超300亿行 代码,DevSecOps在华为的落地与实践_DevOps

5. Forrester’s State Of Application Security Report, 2021: Key Takeaways

点击下方,第一时间了解华为云新鲜技术~

华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云


以上就是关于软件保护和软件授权的概念(想要做好软件测试,可以先了解AST、SCA和渗透测试)的所有内容,希望对你有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人,并不代表蓝箭律师网立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容(包括不限于图片和视频等),请邮件至379184938@qq.com 举报,一经查实,本站将立刻删除。

联系我们

在线咨询:点击这里给我发消息

微信号:CHWK6868

工作日:9:30-18:30,节假日休息