读软件开发安全之道:概念、设计与实施15安全测试

1. 安全测试

1.1. 测试是开发可靠、安全代码中的关键一环

1.2. 测试安全漏洞的目的是主动检测

1.3. 模糊测试是一种强大的补充技术,可以帮助我们找到更深层次的问题

1.4. 针对当前漏洞创建的安全回归测试,目的是确保我们不会再犯相同的错误

1.5. 大多数测试都是由执行代码组成的,其目的是校验软件是否能够按照设计目的工作

1.6. 安全测试则正好相反,其目的是保证不允许执行的操作无法执行

  • 1.6.1. 安全测试必不可少,因为安全测试可以确保缓解措施发挥了应有的作用

  • 1.6.2. 编写代码的人只专注于让目标功能在常规使用场景中能够正常工作,而那些出乎意料的攻击则很难进行预测

  • 1.6.3. 安全测试可以预期到这类情况并且确保代码拥有必要的保护机制,从而提升代码的安全性

  • 1.6.4. 对于那些安全性至关重要的代码,推荐对它们进行彻底的安全测试,以确保代码的质量尽可能高

  • 1.6.5. 安全测试恐怕是我们能够迅速提升应用安全的最理想方式,而且执行安全测试一点也不困难

  • 1.6.6. 在软件行业,并没有任何公开数据可以反映安全测试的普及程度,但是从相同漏洞总是反复出现这一点来看,安全测试显然没有得到足够的重视

1.7. 整数溢出

  • 1.7.1. 建立允许值的范围,同时确保检测并拒绝超出这个范围的值

1.8. 内存管理问题

  • 1.8.1. 测试代码是否正确处理了超大的数据值,并且在数据值太大时拒绝这个值

1.9. 不可靠输入

  • 1.9.1. 测试各类无效输入信息,以确保这些数值要么被拒绝,要么被转换为能够安全处理的有效输入形式

1.10. Web安全

1.11. 异常处理缺陷

  • 1.11.1. 强制代码通过各类异常处理路径来检查其是否能合理地恢复

1.12. 它们都偏离了代码正常使用的范围,因此这些用法都很容易被人们忽视

1.13. 所有这些攻击方法都已经非常成熟,所以进行彻底的测试一定会产生明显的效果

2. 功能测试

2.1. 功能测试的目的是验证代码是否按照人们预期的方式运行

2.2. 更加彻底的功能测试还可能包含一些其他的测试用例

  • 2.2.1. 对失败的校验(即非0的返回码)进行检查

3. 安全测试的限制

3.1. 安全测试的目标是在代码中检测出失败的潜在主要原因,但安全测试无法涵盖代码出错的所有情形

3.2. 有可能出现一类漏洞正好是我们编写的测试无法检测出来的,不过这种情况在不经意间出现的概率不高

3.3. 除非测试覆盖的范围非常完整,否则还是有可能存在通过编写bug来躲避测试的

3.4. 原则

  • 3.4.1. 安全测试对那些强调安全性的代码来说尤为重要

  • 3.4.2. 最重要的安全测试往往会对某些行为进行校验

    • 3.4.2.1. 如拒绝访问、拒绝输入或者执行失败(而不是成功)​
  • 3.4.3. 安全测试用例应该确保每一个关键步骤都能正确执行

4. 安全测试用例

4.1. 安全测试用例可以确保某一种特定的安全失败不会发生

4.2. 渗透测试是指好人在软件中寻找漏洞,其目的是在坏人发现漏洞之前对其进行修复,渗透测试不会尝试找出所有可能的漏洞

4.3. 安全测试也和渗透测试有所不同,因为安全测试还会对被发现的漏洞提供保护

4.4. 安全测试用例会校验主动机制是否正常工作,因此往往会涉及对无效输入和不允许执行的操作的拒绝

4.5. 应该在编写其他单元测试的时候创建安全测试用例,而不是在发现漏洞的时候才撰写安全测试用例

4.6. 安全系统会通过阻塞不合理的行为、拒绝恶意的输入、拒绝访问等方式来对宝贵的资源进行保护

  • 4.6.1. 只要存在这类安全机制,我们就应该创建安全测试用例来确保那些未经授权的操作一定会以失败告终

4.7. 常见的安全测试用例包括测试使用错误密码登录的尝试失败、从用户空间对内核资源发起未经授权的尝试失败,以及无效或伪造的数字证书永远都会被拒绝

4.8. 阅读代码是编写优质安全测试用例的理想方法

4.9. 测试输入验证

4.10. 测试XSS漏洞

5. 模糊测试

5.1. 模糊测试是一种自动创建测试用例的方式,其目的是通过测试输入来“轰炸”目标代码

5.2. 模糊测试可以帮助我们判断某个输入是否有可能导致代码出现问题,或者导致流程崩溃

5.3. 模糊测试这种分散的方法也可以相当有效地发现更大范围的错误,其中一些错误就是软件的漏洞,在这一点上,模糊测试完全不同于为特定目的而编写的安全测试

5.4. 典型的方法是“模糊”那些不可靠的输入(即尝试各种不同的值)​,然后查找异常的结果或者崩溃的情形

5.5. 很多库都提供了各式各样的模糊功能,从随机模糊到基于特定格式(如 HTML、XML 和JSON)的知识所生成的变体

6. 安全回归测试

6.1. 安全漏洞一经发现和修复,就没人希望再被相同的漏洞袭扰

6.2. 在对新发现的安全漏洞进行响应时,有一项重要的最佳实践,那就是创建一个安全回归测试来检测潜在的错误

6.3. 安全回归测试的作用是对漏洞进行简单重现(重现错误)​,以确认我们的修复工作在事实上消除了漏洞

6.4. 一些安全漏洞回归的情况比新的漏洞还要糟糕得多

  • 6.4.1. 苹果在2019年发布iOS 12.4的时候,这个版本重新引入了在iOS 12.3中已经发现并且修复的错误,这无异于推开了一扇本应该已经牢牢关闭的大门

6.5. 一个理想的安全回归测试应该尝试多种测试用例,而不是针对某一种已知攻击建立测试用例

6.6. 除了解决新发现的漏洞之外,通过调查也可能会在系统的其他地方发现类似漏洞,这些漏洞同样可以被攻击者利用

  • 6.6.1. 我们可以利用自己对系统内部的了解和对源代码的熟悉,在同对手的竞争中占据先机

  • 6.6.2. 攻击者很可能也是按照相同的思路来思考,而发布修复程序无异于是在给攻击者提供如何攻击自己的系统的线索

7. 可用性测试

7.1. DoS攻击表示一种特殊类型的威胁,因为系统能够承受的负载上限是很难加以归类的

7.2. 负载(load)这个词包含多重含义,包括处理能力、内存占用、操作系统资源、网络带宽、磁盘容量以及其他可能存在的瓶颈

7.3. 安全测试还可以避免故意利用性能漏洞的攻击方式

7.4. 安全测试应该有能力判断出性能有可能呈非线性下降的代码

7.5. 资源消耗

  • 7.5.1. 对于那些我们深知有可能受到可用性攻击威胁的功能,我们应该增加安全测试用例(对资源)​,并且确定输入的合理限制以防止负载过高

  • 7.5.2. 一种简单的方法可以防止代码变更导致内存消耗急剧增加,那就是人为制造资源受限的条件并允许测试

  • 7.5.3. 单元测试应该在内存非常受限的条件下运行

  • 7.5.4. 更大规模的集成测试则要求测试时使用的资源与生产中的可用资源相仿,如果使用与生产中几乎完全相同的资源来运行测试,测试就可以起到警示作用

7.6. 冒烟测试、负载测试和兼容性测试

7.7. 阈值测试

  • 7.7.1. 一种保护系统可用性的重要方式很容易被人们忽视,那就是在达到基本限制之前建立一个警告标志

    • 7.7.1.1. 如果对计数器值进行监测并且在数值接近上限(如0.99*INT_MAX)时发出警告,灾难原本可以避免
  • 7.7.2. 对阈值进行告警的工作往往被看作运维人员的职责,而不是安全测试团队的工作

  • 7.7.3. 存储容量是另一个我们希望获得预先告警的重要数据

    • 7.7.3.1. 针对存储容量,我们可以把告警值设置为限制值的99%,而不是某个任意的阈值

    • 7.7.3.2. 一种更加有用的计算方法是计算一个时间序列(也就是存储容量随时间变化的一组测量值)​,并且推断到达限制值所需的时间

  • 7.7.4. 时间限制也绝对不能忽视

    • 7.7.4.1. 数字证书的过期时间很容易被人们忽视

7.8. 分布式拒绝服务攻击

  • 7.8.1. 拒绝服务(Denial of Service,DoS)攻击是一种单独的行为,旨在给可用性造成负面影响

  • 7.8.2. 分布式拒绝服务(Distributed Denial of Service,DDoS)攻击则通过多项协同行为的累积效应来完成攻击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/414446.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

省略号(一行多行)vue3

组件 <template><div ref"tooltipParentRef" class"moreTipText"><el-tooltip:placement"props.placement"effect"dark":enterable"true":show-after"200":offset"10":popper-class&qu…

【学习笔记】卫星通信NTN 3GPP标准化进展分析(三)- 3GPP Release17 内容

一、引言&#xff1a; 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划&#xff0c;是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析&#xff08;一&#xff…

秋招突击——算法练习——8/26——图论——200-岛屿数量、994-腐烂的橘子、207-课程表、208-实现Trie

文章目录 引言正文200-岛屿数量个人实现 994、腐烂的橘子个人实现参考实现 207、课程表个人实现参考实现 208、实现Trie前缀树个人实现参考实现 总结 引言 正文 200-岛屿数量 题目链接 个人实现 我靠&#xff0c;这道题居然是腾讯一面的类似题&#xff0c;那道题是计算最…

【TNT】Target-driveN Trajectory Prediction学习笔记

这里写自定义目录标题 前言(文章的核心思想)(1阶段)(2阶段)(3阶段)(网络框架)1. 场景上下文编码2. 目标预测3. 目标条件运动估计4. 轨迹评分与选择 (模型推理)(总结)(消融研究结论)(网络)(问题厘清) TNT Framework 前言 论文: https://arxiv.org/abs/2008.08294代码: https://…

机器学习(五) -- 监督学习(8) --神经网络1

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 无监督学习&#xff08;2&#xff09; --降维2 下篇&#xff1a; 前言 tips&#xff1a;标题前有“***”的内容为补充内容&#xff0c;是给好奇心重的宝宝看的&#xff0c;可自行跳过。文章内容被…

【个人笔记】Git

Tiltle: Github 使用 &#x1f4d6; 快速使用 音标&#xff1a;[ɡɪthʌb] 0 介绍 Github是一个面向开源与私有软件项目的 托管平台&#xff0c;Git源自其内部的版本库格式.2008年上线&#xff0c;18年被微软收购&#xff1b;有很多知名的开源项目&#xff1a;jQuery、pytho…

如何在 CentOS 6 上安装 Nagios

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 Status: 已弃用 本文涵盖的 CentOS 版本已不再受支持。如果您目前正在运行 CentOS 6 服务器&#xff0c;我们强烈建议升级或迁移到受支持…

STM32H750+CubeIDE+FreeRTOS+ETH(LAN8720A)+LWIP

文章目录 STM32H750CubeIDEFreeRTOSETH(LAN8720A)LWIPCubeIDE配置RCC时钟树SYSETH串口MPUFreeRTOSLWIPGPIO然后就可以点击生成代码了&#xff01; 代码修改printf重定向补充硬件复位更改补充链接文件然后就可以编译下载ping成功了&#xff01; socket网络编程 STM32H750CubeIDE…

【计算机网络】浏览器输入访问某网址时,后台流程是什么

在访问网址时&#xff0c;后台的具体流程可以因不同的网站、服务器和应用架构而异。 实际过程中可能还涉及更多的细节和步骤&#xff0c;如缓存处理、重定向、负载均衡等。 此外&#xff0c;不同的网站和应用架构可能会有不同的实现方式和优化策略。 部分特定网站或应用&#x…

云计算第二阶段---DBA Day8-Day9

DBA Day8 该阶段的2天内容,都会和数据库中间件,集群配置有关. 什么是中间件&#xff1f; 通俗来说&#xff0c;就是在正式文件内容从客户端发送或获取请求时&#xff0c;在传播过程中地点中间商&#xff0c;负责管理请求&#xff0c;并对其进行分类。 环境准备: 准备…

AssetsBundleExtractor中文汉化版2.2

感谢-DJ小良汉化 AssetsBundleExtractor工具是一款 人类黎明游戏的assest修改工具 和MOD制作所需要的一款软件 下载地址&#xff1a;https://pan.quark.cn/s/b8104b849fbe

23种设计模式之模板模式

一.什么是模板模式 ‌‌模板模式是一种行为型设计模式&#xff0c;它定义了一个算法的骨架&#xff0c;而将一些步骤留给子类实现。‌这种模式允许子类在不改变算法结构的基础上&#xff0c;重新定义算法的某些步骤。模板模式属于行为型设计模式&#xff0c;主要用于处理那些需…

SpringBoot应用打成ZIP部署包

背景 平常开发SpringBoot应用&#xff0c;打包的时候一般都是按默认的打包方式把所有资源、源码和依赖统一打到一个jar包&#xff0c;这种打包方式方便快捷。最近开发项目遇到一个需求&#xff0c;需要把项目中的配置文件和/bin目录中的启停脚本打到SpringBoot应用jar之外&…

「bug」nvitop ERROR: Failed to initialize curses

nvitop 作为一个优秀个 Nvidia显卡查询库&#xff0c;简单易用且显示信息十分丰富&#xff0c;相比 Nvidia-smi 更方便&#xff0c;简直是每个 开发人员必备的库&#xff0c;安装也十分方便&#xff0c;直接采用 pip install nvitop 即可&#xff0c;调用的时候也是直接在 Term…

Redis:Redis性能影响因素

这里写自定义目录标题 一、CPU对Redis的影响二、磁盘对Redis的影响三、网络对Redis的影响四、Swap对Redis的影响 一、CPU对Redis的影响 二、磁盘对Redis的影响 性能建议&#xff1a; 如果是热点场景&#xff0c;建议大家关闭rdb和aof。在SATA和SAS普通盘上&#xff0c;append…

RocketMQ集群搭建,及RocketMQ-Dashboard部署(前RocketMQ-Console)

集群搭建 RocketMQ不支持单主机搭建主从结构集群&#xff0c;当从节点启动时&#xff0c;即使和主节点设置不同的监听端口&#xff0c;他也要去监听主节点端口&#xff0c;也就是说正常启动的从节点会监听四个端口。原因未知&#xff0c;现象后面会列举出来。 1. 准备JAVA环境…

c++应用网络编程之八SOCKET探究

一、socket 在目前主流的网络通信中&#xff0c;SOCKET编程其实就是网络编程的代名词。在前面反复提到socket&#xff0c;那么socket到底是什么呢&#xff1f;英文的愿意是“插座、槽”的意思。这里虽然不讲解传统的网络协议但不得不简单说明一下。 首先从宏观上看&#xff0c…

超声波模块

HCSR04超声波模块是一种常用的测距模块&#xff0c;它通过检测超声波发射后遇到障碍物所反射的回波&#xff0c;从而测量出与障碍物之间的距离。以下是对HCSR04超声波模块的详细讲解&#xff1a; 一、模块组成与工作原理 组成&#xff1a;HCSR04超声波模块主要由两个压电陶瓷超…

Python一些可能用的到的函数系列131 发送钉钉机器人消息

说明 来自顾同学的助攻 钉钉机器人可以用来发送一些重要的系统消息&#xff0c;例如磁盘将满等等。原本还可以有更强的功能&#xff0c;就是监听群里的消息&#xff0c;然后做出反应&#xff0c;不过这个好像要买企业版&#xff0c;贵的毫无意义。 钉钉发消息有几种模式&#…

Ubuntu18.04 下安装CUDA

安装步骤 1.查看是否安装了cuda # 法1 cat /usr/local/cuda/version.txt # 法2 nvcc --version 2.若没有安装&#xff0c;则查看是否有N卡驱动&#xff0c;若无N卡驱动&#xff0c;则到软件与更新 -> 附加驱动中安装驱动 3.查看N卡驱动支持的cuda版本 nvidia-smi 如下…