IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Security+ 学习笔记10 软件质量保证 -> 正文阅读

[开发测试]Security+ 学习笔记10 软件质量保证

一、代码审查(Code review)

软件代码是安全漏洞的最常见来源之一。开发人员每年要编写数百万行的代码,在这些复杂的代码中埋藏着成千上万的安全问题,正等待着被发现。手工代码审查是发现这些漏洞的最重要的软件测试技术之一。在代码审查过程中,开发人员让其他开发人员审查他们的工作,他们检查代码以确保它不包含明显或微小的安全问题。这个过程可能是完全非正式的,完全正式的,或介于两者之间。最正式的代码审查过程被称为Fagan检查。Fagan检查遵循一个六步流程:
在这里插入图片描述

  1. 计划(planning): 开发人员执行所需的前期工作,使代码审查开始。这包括准备审查所需的材料,确定参与者,并安排审查本身。
  2. 概述(overview): 审查的领导者将角色分配给不同的参与者,并向团队提供正在审查的软件的概述。
  3. 准备(preparation): 参与者自己审查代码和任何支持材料,为审查会议做好准备。他们寻找任何潜在的问题,并做笔记,以便以后可以参考。
  4. 会议(meeting): 在会议上,开发人员提出他们在准备阶段发现的任何问题,并与团队讨论。在这个会议上,团队正式确定了软件中需要修正的任何缺陷。
  5. 返工(rework): 检查会议结束后,创建代码的开发人员在返工阶段纠正审查中发现的任何缺陷。如果没有缺陷,开发人员就可以进入下一个阶段。如果缺陷很严重,这个过程就会返回到计划阶段,进行另一次审查。
  6. 后续(Follow-up): 一旦代码不再需要返工,Fagan检查就以后续阶段结束。在这个阶段,审查的领导者确认所有的缺陷都被成功地纠正了,并完成审查的文件。

Fagan检查模型是一个高度正规化的代码审查过程,由于其繁琐的性质,它不常被遵循。然而,大多数软件开发组织确实在进行某种类型的手工代码审查,而且很容易看到Fagan检查过程的修改版本。无论组织以哪种方式进行代码审查,它们对软件开发的安全性都是至关重要的。

二、软件测试

在这里插入图片描述

1.模型确认(Verification)和验证(Validation):
在整个软件开发过程中,开发人员和产品经理必须经常进行测试,以确保最终产品能够正常运行并满足业务需求。在软件测试过程中,有两个主要的活动,即模型确认和验证

软件模型确认(verification):发生在整个开发过程中,它包括测试,以验证软件功能是否正常。目的是回答我们是否正在构建正确的产品这个问题,也就是检查规格是否被系统正确执行。

软件模型验证(validation):确保由开发工作产生的软件满足最初的业务需求。软件模型验证回答了这样一个问题:我们构建的产品是否正确,也就是用户的需求是否被满足。

2.压力测试(Stress Test):
当开发人员准备将代码发布到生产中时,他们必须确保他们的代码能够在真实的生产负载下工作。这是通过一个被称为压力测试或负载测试的过程来完成的。在负载测试期间,开发人员使用自动化脚本,无论是内部还是通过第三方负载测试服务,来模拟系统上的真实活动。这些测试应验证系统能够处理它将经历的最大预期负荷。他们还经常继续增加负载,直到系统实际失效,以确定系统的最大容量。

3.用户验收测试(User Aacceptance Testing):
用户验收测试,或称UAT,通常是软件测试的最后阶段。一旦开发人员确信软件是正确的并准备好投入生产,他们就会把它交给最终用户,让他们在真实世界的环境下进行评估。这通常是在一个测试环境中进行的,用户被要求模拟真实世界的交易,而不实际改变生产数据。用户验收测试的目标是关注可用性,确保软件对终端用户是直观的。许多组织在提到用户验收测试时,都会使用beta测试这个术语。

4.回归测试(Regression Testing):
在发布代码后,开发人员经常对代码进行小的和大的修复,以修复发布后发现的错误,并为系统添加新功能。在发布这些修复之前,他们会进行回归测试,以验证这些对代码的修改不会产生意想不到的副作用。回归测试的过程使用了几组输入,并将它们提供给原始系统和修改后的代码。然后,测试包验证软件在修改前后的行为是否相同,当然,作为软件修改的一部分的变化除外。

三、代码安全测试

代码安全测试超越了对功能需求的测试,检查代码是否有安全缺陷(security flaws)。虽然代码审查在软件安全方面发挥着重要作用,但它们涉及到开发人员检查代码和检查它的缺陷。代码测试(tests)超越了代码审查(reviews),它们使用技术来协助代码检查过程。对于组织来说,在同一个软件上同时使用代码安全测试和代码审查是很常见的,以获得对软件质量的不同观点。
在这里插入图片描述

有两种主要的代码测试类型,静态(Static)测试动态(Dynamic)测试

  1. 在静态代码测试中,开发人员使用专门的测试软件来检查代码中的常见缺陷。代码实际上并没有被执行,但它被检查出常见的错误,这些错误被报告为需要纠正的缺陷。我们可以把静态代码测试看作是代码审查的自动等价物。
  2. 在动态测试中,测试软件实际执行代码,向它提供输入,并读取输出以验证它是否正常运行。这是最接近真实世界操作的测试,它是准备将代码转移到生产中的一个有价值的步骤,为开发者和管理者提供了软件正常运行的信心。Synthetic transactions是动态代码测试的一个重要部分,其实是一组脚本化的输入和指令,测试人员知道代码对每个输入应该产生什么输出。测试软件可以自动循环这些Synthetic transactions,进行回归测试,以验证代码在各种测试中是否正常运行。

重要的是要认识到这不是一个测试比另一个更好的情况。静态测试经常识别出动态测试所使用的合成事务中没有包括的缺陷。动态测试经常会发现静态测试无法预见的缺陷和功能。

四、模糊测试(Fuzz testing)

模糊测试是一种非常重要的软件测试技术。模糊测试向软件提供许多不同类型的有效和无效输入,试图使该软件进入不可预测的状态,或披露机密信息。 模糊测试的工作原理是自动生成输入值(可以来自不同输入源),并将其输入到软件包中。

运行测试的开发者可以提供一个长或短的输入值列表,或者他们可以写一个脚本来生成这些输入值。模糊测试包(fuzz testing package)也可以随机生成输入值,也可以使用称为 "生成模糊(generation fuzzing)"的技术从规范中生成输入值。或者模糊测试包可以分析真实的输入,然后用一种被称为突变模糊(mutation fuzzing)的方法修改这些真实的数值。

我们可以使用Zed Application Proxy或ZAP作为测试工具,可以从开放网络应用安全项目(OWASP)免费获得。
在这里插入图片描述
具体步骤可以参考:https://www.bilibili.com/video/BV1HD4y1d7KC?p=9

需要注意的是,模糊测试是一种潜在的危险工具,可以被看作是一种进攻性的黑客技术。我们应该只在得到应用程序所有者的许可时才进行模糊测试。

五、代码仓库(Code repositories)


代码仓库在现代软件开发中发挥着重要的作用,它既能为代码提供安全存储,又能进行版本控制(Version control)。代码库的主要目的是将软件开发中使用的源文件存储在一个集中的位置,以便于安全存储,并在多个开发人员之间协调更改。代码库还可以进行版本控制,允许跟踪变化,并在需要时将代码回滚到早期版本。基本上,代码库执行软件开发的内务工作,使许多人有可能以有组织的方式在一个大型软件项目上分享工作。代码库也满足了安全和审计专家的需求,他们希望确保软件开发包括自动审计和记录的变化。通过将代码暴露给组织中的所有开发人员,代码库也促进了代码的重复使用。开发人员在寻找执行特定功能的代码时,可以在代码库中搜索现有的代码,然后重新使用这些代码,而不是从头开始。代码库也有助于避免死代码的问题,即代码在组织中被使用,但没有人负责维护这些代码。也许甚至没有人知道那些原始的源文件在哪里。

Git是最流行的版本控制机制之一,可以与代码仓库结合使用,例如(Github,Gitlab等)。Git的操作可以参考如下的链接:
https://www.runoob.com/git/git-basic-operations.html
在这里插入图片描述

确保代码仓库的安全是软件开发人员和网络安全专家工作的一个重要部分。代码库是应用安全的一个重要部分,但它只是代码管理的一个方面。网络安全团队还应该与开发人员和运营团队合作,确保通过组织批准的发布管理流程,以安全的方式提供和取消应用程序。该流程应包括代码完整性测量。代码完整性测量使用加密的哈希函数来验证正在发布到生产中的代码是否与先前批准的代码一致。哈希值的任何偏差都表明代码被有意或无意地修改过,需要在发布前做进一步调查。

六、应用软件控制

1.应用管理策略
防范恶意软件的最好方法之一是用一种叫做应用控制的技术防止用户运行不需要的应用程序。应用控制将系统上运行的软件限制在符合组织安全策略的程序上。有两种主要的应用控制方法,白名单(whitelisting)黑名单(blacklisting)。在白名单方法中,管理员创建一个用户可以在其系统上运行的所有应用程序的列表。这在一个非常严格控制的环境中效果很好,但如果组织中有许多不同的应用程序和角色,它就很难管理。黑名单的方法为用户提供了更大的灵活性。管理员不是列出允许用户运行的应用程序,而是列出禁止的应用程序。这对用户来说要容易得多,但它确实降低了应用控制的有效性。
在这里插入图片描述
Windows提供了AppLocker功能来实现应用控制。通过创建一个组策略对象来建立一个AppLocker应用程序控制策略,编写黑白名单,放行或者组织访问某个文件夹或者程序。

2.应用更新
我们可能能操作系统打安全补丁以防止新的漏洞的重要性。给应用程序打补丁也很重要,因为它们也可能有安全漏洞。不同的软件供应商提供不同的补丁机制。让我们来看看其中的一个。
在这里插入图片描述
我们将看看Adobe用来更新其Acrobat Reader产品的过程。如果我们继续前进并打开Acrobat Reader,在帮助菜单下,我们看到一个检查更新的选项。当我们点击该选项时,Adobe Acrobat会联系其更新服务器,并寻找是否有任何更新可用。我们可以看到在这种情况下,我们使用的版本是最新的,不需要更新。现在,这种更新机制是手动的,需要用户的干预。这并不是我们想在我们的组织中应用安全控制的真正方式,因此,我们使用自动化流程来管理整个组织中使用的所有软件的更新是非常重要的。

最后,应用控制技术,无论使用白名单还是黑名单,都能为网络安全分析人员提供重要的信息。因此,我们应该把应用控制日志连接到安全信息和事件管理系统或你的其他中央日志存储库。一旦把这些日志放在一个安全的、集中的位置,我们就可以观察它们是否有恶意活动的迹象。

七、第三方代码(Third-party code)

软件开发人员经常依赖别人创建的代码来提高他们的效率。除了在组织内部重复使用代码外,开发人员还经常利用第三方的代码。第三方软件库(Libraries)是开发人员之间共享代码的一种非常常见的方式。库由执行相关功能的共享代码对象组成。例如,一个软件库可能包含一系列与生物学研究、金融分析或社交媒体有关的功能。

为了让开发者更容易获得库,相关组织经常发布软件开发工具包(Software Development kits)SDK。SDK是我们的软件库集合,与文档、示例和其他资源相结合,旨在帮助程序员在开发环境中快速启动和运行。SDK还经常包括专门的实用程序,旨在帮助开发人员设计和测试代码。例如,这里是Facebook为iOS开发者提供的软件开发工具包。它提供了不同的组件,使开发者能够通过iOS应用程序处理分析、广告、身份和访问管理、Facebook图和Facebook平台的其他元素。
在这里插入图片描述

应用编程接口(Application Programming Interfaces),或API,是组织向开发者提供服务的另一种方式。API不是提供开发者自己运行的代码,而是通过互联网向开发者提供在其他地方运行的服务。例如,Twitter提供了一个API,允许开发者与Twitter服务互动,阅读、发布和执行其他Twitter动作。当组织将代码开发外包给其他组织时,也可能将第三方代码引入他们的环境。
在这里插入图片描述

安全团队应确保外包代码接受与内部开发的代码相同水平的测试。安全专家应该熟悉第三方代码在其组织中的各种使用方式,以及其组织向他人提供服务的方式。在共享代码中出现安全缺陷是相当常见的,因此了解这些依赖关系并对安全更新保持警惕是极其重要的。

参考资料来源:
https://www.linkedin.com/learning/paths/become-a-comptia-security-plus-certified-security-professional-sy0-601

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:58:32  更:2021-09-22 14:58:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:21:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码