软件安全技术复习内容

软件安全技术

  • 边复习边写的,有错误及时指正
    • 第一章 软件安全概述
      • 零日漏洞
      • 安全威胁分类
      • CIA安全基本属性
      • PDRR模型
      • 软件安全的主要方法和技术
        • 基本方法
        • 主要技术
    • 第二章 软件漏洞概述
      • 概念
      • 软件漏洞成因分析
      • 软件漏洞分类
        • 基于漏洞成因的分类
        • 基于漏洞利用位置的分类
        • 基于威胁类型的分类
      • 软件漏洞的分级
    • 第三章 典型漏洞分析
      • 函数的栈帧
      • 栈溢出攻击
      • 堆溢出漏洞及利用
      • 格式化串漏洞
      • 栈溢出检测选项 /GS
      • 数据执行保护DEP
      • **地址空间布局随机化**ASLR
      • **安全结构化异常处理**SafeSEH
      • 增强缓解体验工具包EMET
    • 第四章没写,看看PPT哇
    • 第五章 软件安全开发模型
      • 软件安全问题产生
      • 软件安全开发模型
        • SDL
        • BSI
        • NIST
        • CLASP
        • SAMM
    • 第六章 软件安全需求分析
      • 软件安全遵从性需求
      • 等级保护要求
      • 等级保护内容
      • 等级保护流程
      • 软件安全需求获取方法
    • 第七章 软件安全设计
      • 软件安全设计的主要工作
      • 软件安全设计原则
      • 基于安全模式的软件安全设计方法
      • 威胁建模
      • STRIDE威胁分类
    • 第八章 软件安全编码
      • C语言安全编码
      • Java语言安全编码
    • 第九章 软件安全测试
      • 软件安全测试的内容
      • 软件安全测试的原则
      • 模糊测试

边复习边写的,有错误及时指正

第一章 软件安全概述

零日漏洞

零日漏洞是指未被公开披露的软件漏洞

利用零日漏洞开发攻击工具进行的攻击称为零日攻击

软件安全体系的建立是以漏洞为核心展开的,对漏洞的掌控能力是衡量一个国家信息安全水平的重要因素

安全威胁分类

软件漏洞:通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等

恶意代码:是在未被授权的情况下,以破坏软硬件设备、窃取用户信息、干扰用户正常使用、扰乱用户心理为目的而编制的软件或代码片段。包括:计算机病毒,蠕虫,特洛伊木马,后门,内核套件,间谍软件,恶意脚本,恶意广告,僵尸网络,网络钓鱼,勒索软件

软件侵权:侵犯著作权

在这里插入图片描述

CIA安全基本属性

  • 保密性:信息仅被合法的实体(如用户、进程等)访问,而不被泄漏给未授权实体的特性。

  • 完整性:信息在存储、传输或处理等过程中不被未授权、未预期或无意地篡改、销毁等破坏的特性。

  • 可用性:信息、信息系统资源和系统服务可被合法实体访问并按要求使用的特性。

  • 可认证性:能够对信息的发送实体和接收实体的真实身份,以及信息的内容进行鉴别的特性。

  • 授权:访问主体只能在权限范围内合法访问客体。

  • 可审计性:确保一个实体的行为可以被唯一地区别、跟踪和记录

  • 抗抵赖性:信息的发送者无法否认已发出的信息或信息的部分内容,信息的接收者无法否认已经接收的信息或信息的部分内容。

  • 可控性:对于信息安全风险的控制能力

  • 可存活性:计算机系统在面对各种攻击或错误的情况下继续提供核心的服务,而且能够及时地恢复全部服务的能力。

PDRR模型

人、技术和操作是3个核心因素,包括了主机、网络、系统边界和支撑性基础设施等多个网络环节之中,如何实现保护、检测、响应和恢复有机结合的动态技术体系,这就是所谓的PDRR(或称PDR2)模型。

在这里插入图片描述

软件安全的主要方法和技术

基本方法

采用多种检测、分析及挖掘技术对安全错误或是安全漏洞进行发现,分析与评价,然后采取多种安全控制措施进行错误修复和风险控制。这是在软件发布运行之时的方法

分析软件安全错误发送的原因,将软件错误的修正嵌入到软件开发生命周期的整个阶段。这是在软件发布之前的方法

主要技术

  • 软件安全属性的认知
  • 系统安全工程
  • 软件安全开发

第二章 软件漏洞概述

概念

软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等。

软件错误:软件开发过程中出现的不符合期望或不可接受的人为差错。

软件缺陷:人为差错或其他客观原因,导致软件隐含能导致其在运行过程中出现不希望或不可接受的偏差

软件故障:软件出现可感知的功能不正常,死机,数据丢失或非正常中断等现象

软件失效:软件丧失完成规定功能的能力的事件。

软件漏洞成因分析

  • 计算机系统解构
  • 软件趋向大型化,第三方扩展增多
  • 新技术,新应用产生之初缺乏安全性考虑
  • 软件使用场景更具威胁
  • 开发者缺乏安全知识

软件漏洞分类

基于漏洞成因的分类

  • 内存破坏类
  • 逻辑错误类
  • 输入验证类
  • 设计错误类
  • 配置错误类

基于漏洞利用位置的分类

  • 本地漏洞
  • 远程漏洞

基于威胁类型的分类

  • 获取控制
  • 获取信息
  • 拒绝服务

软件漏洞的分级

中国国家信息安全漏洞库 CNNVD

第三章 典型漏洞分析

函数的栈帧

ESP :扩展栈指针寄存器,其存放的指针指向当前栈帧的栈顶

EBP:扩展基址指针寄存器,其存放的指针指向当前栈帧的栈底

EIP:扩展指令指针寄存器,存放指向下一条将要执行的指令。

在这里插入图片描述

栈溢出攻击

JMP ESP覆盖方法是覆盖函数返回地址的一种攻击方式。

SEH覆盖方法就是覆盖异常处理程序地址的一种攻击方式。

堆溢出漏洞及利用

DWORD Shoot 用精心构造的数据去溢出覆盖下一个堆块的块首,使其改写块首中的前向指针(flink)和后向指针(blink),然后在分配、释放、合并等操作发生时伺机获得一次向内存任意地址写入任意数据的机会。

Heap Spray栈溢出和堆溢出相结合的一种技术。首先将shellcode放置到堆中,然后在栈溢出时,控制函数执行流程,跳转到堆中执行shellcode*

格式化串漏洞

**产生源于数据输出函数中对输出格式解析的缺陷,**其根源也是C语言中不对数组边界进行检查的缓冲区错误

通过改变格式化串中输出参数的个数实现修改指定地址的值:可以修改填充字符串长度实现;也可以通过改变输出的宽度实现,如%8d

通过改变格式化串中格式符的个数,调整格式符对应参数在栈中位置,从而实现对栈中特定位置数据的修改。

栈溢出检测选项 /GS

/GS保护机制:调用函数时,将一个随机生成的秘密值存放在栈上,当函数返回时,检查这个堆栈检测仪的值是否被修改,以此判断是否发送了栈溢出

对抗/GS保护:1)猜测这个随机值 2)同时覆盖栈中的Cookie和cookie副本 3)覆盖SEH绕过Cookie检查 4) 覆盖父函数的栈数据绕过Cookie检查

数据执行保护DEP

通过使可写内存不可执行或使可执行内存不可写来消除类似的威胁。

对抗数据执行保护DEP

  • 利用ret-to-libc执行命令或进行API调用,如调用WinExec实现执行程序。
  • 将包含Shellcode的内存页面标记为可执行,然后再跳过去执行。
  • 通过分配可执行内存,再将Shellcode复制到内存区域,然后跳过去执行。
  • 先尝试关闭当前进程的DEP保护,然后再运行Shellcode。

地址空间布局随机化ASLR

通过对堆、栈、共享库映射等线性区域布局的随机化增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止漏洞利用的目的。

ASLR机制的缺陷和绕过方法

  • 对本地攻击者无能为力
  • 造成内存碎片的增多
  • 利用没有采用/DYNAMICBASE选项保护的模块做跳板

安全结构化异常处理SafeSEH

防止覆盖和使用存储栈上的SEH结构。

原理:把所有合法的异常处理函数的地址解析出来制成一张安全的SEH表,保存在程序的IMAGE数据块里面,当程序调用异常处理函数时会将函数地址与安全SEH表中的地址进行匹配,检查调用的异常处理函数是否位于该表中。

对抗SafeSEH机制的方法

  • 利用未启用SafeSEH的模块作为跳板进行绕过
  • 利用加载模块之外的地址进行绕过

增强缓解体验工具包EMET

  • 增强型DEP
  • SafeSEH的升级版——SEHOP
  • 强制性ASLR
  • HeapSpray防护

第四章没写,看看PPT哇

第五章 软件安全开发模型

软件安全问题产生

  • 开发者缺乏安全开发的动机
  • 开发者缺乏相关知识
  • 缺乏安全开发工具

软件安全开发模型

SDL

SDL模型是由软件工程的瀑布模型发展而来的,是在瀑布模型的各个阶段添加了安全活动和业务活动目标

必需的安全活动:安全培训,安全需求分析,安全设计,安全实施,安全验证,安全发布和安全响应。

四个基本原则:安全设计,安全配置,安全部署,沟通。

SDL体系较为完善,和其他安全开发流程相比,它的实施要求严格,适合于大型机构使用。

BSI

核心思想:对软件全声明周期各个阶段产品的安全性进行评估,测试,验证及操作控制,实现面向过程的全生命周期安全质量控制方法。强调对各阶段产生的软件工件的安全性进行分析与检测

三根支柱:风险管理,软件安全接触点,安全知识。

NIST

特点主要体现在两个方面

  • 明确提出了软件安全控制的经济性问题
  • 明确提出了软件开发控制门的概念

CLASP

是一个用于构建安全软件的轻量级过程。强调安全活动与角色相关联,强调安全开发过程中各角色的职责。安全活动基于角色安排。

SAMM

SAMM以灵活的方式进行定义,可以被应用于大,中,小型组织任何类型的软件开发项目中。强调建立一种迭代的安全保证计划

四个核心业务职能:治理,构造,验证,部署。

对安全知识的要求更低,更适用于非安全专家使用

第六章 软件安全需求分析

目的 描述为了实现信息安全目标,软件系统应该做什么,才能有效地提高软件产品的安全质量,减少进而消减软件安全漏洞

一个缺少安全需求分析的软件开发项目,将威胁到信息的保密新,完整性和可用性,以及其他一些重要安全属性。

主要工作 在软件开发生命周期的需求分析阶段,首先确定目标系统的业务运行环境,规则环境及技术环境,然后再了解各类软件安全需求内容的基础上,通过一定的安全需求获取过程,对软件应该包含的安全需求进行分析。

来源

外部安全需求:通常指法律,法规等遵从性需求

内部安全需求:组织内部需要遵守的政策,标准,指南等,以及与软件业务功能相关的安全需求

软件安全遵从性需求

软件安全需求更多地来自于对组织内部和外部的一些安全政策和标准的遵从。安全需求分析人员对这些政策需求和标准进行深入理解,并将它们转化为软件安全属性需求,是安全需求分析阶段要完成的艰巨任务。

等级保护要求

对信息安全分级保护是客观需求。

等级化保护是信息安全发展规律。

等级保护是国家法律和政策要求。

等级保护内容

  • 对网络实施分等级保护,分级监管
  • 对网络中使用的网络安全产品实行按等级管理
  • 对网络中发送的安全事件分等级响应,处置

等级保护流程

  1. 定级
  2. 备案
  3. 等级测评
  4. 安全建设整改
  5. 监督检查

软件安全需求获取方法

头脑风暴,问卷调查和访谈,策略分解,数据分类,主/客体关系矩阵,使用用例和滥用案例建模,软件安全需求跟踪矩阵。

第七章 软件安全设计

软件安全设计的主要工作

目的是将安全属性设计到软件架构中,以实现软件产品本质的安全性。有着举足轻重的作用

软件安全设计就是将软件的安全需求转化为软件的功能解构的过程。
主要工作

  • 软件安全架构安全性设计
  • 软件架构安全性分析
  • 软件安全功能设计

软件安全设计原则

1、减少软件受攻击面原则:软件受攻击面是指:用户或其他程序及潜在的攻击者能够访问到的所有功能和代码的总和,它是一个混合体,不仅包括代码,接口和服务,也包括对所有用户提欧共服务的协议。

2、最小授权原则:系统仅授予(用户,管理员,进程,应用和系统等)完成规定任务所必需的最小权限,并且该权限的额持续时间也尽可能短。

3、权限分离原则:在软件设计中是指,将软件功能设计为需要在两个或更多条件下才能实现,以防止一旦出现问题,整个软件都可能面临风险。

4、纵深防御原则:在软件设计中加入层次化安全控制和风险缓解防御方法。

5、完全控制原则:要求每一次访问受保护对象的行为都应当进行尽可能细粒度地检查。

6、默认安全配置原则:为系统提供默认的安全措施,包括默认权限、默认策略等,尽可能让用户不需要额外配置就可以安全地应用。

7、开放设计原则:软件设计本身应该是开放的,安全防御机制的实现应该不依赖于设计本身。

8、保护最弱一环原则:保护软件系统中的最弱组件。

9、最少共用机制原则:尽量减少依赖于一个以上用户甚至于所有用户的通用机制。

10、安全机制的经济性原则:以较低的开发成本和资源消耗获得具有较高安全质量的软件产品和系统保障。

11、安全机制心理可接受原则:安全保护机制设计得要简单,要让用户易用,要确保用户对资源的可访问,以及安全机制对用户透明,用户才会使用这些保护机制。

12、平衡安全设计原则

基于安全模式的软件安全设计方法

风险确定阶段:识别风险和评估风险

系统安全架构阶段:浏览模式库,选择相应的安全模式,评估安全模式,建立系统高层架构

系统设计细化阶段:构建业务类图,实例化安全模式,整合系统并适当重构。

威胁建模

是什么:即将开发完成的软件系统会面临哪些安全威胁,由此可在接下来的软件设计和软件实现等环节中来防范每一个安全威胁。

为什么:

  • 一项在软件设计阶段不应忽视的系统的、可迭代的和结构化的安全技术。
  • 在当前超过70%的漏洞来自于应用软件的情况下,解决软件安全问题应该首先明确应用软件面临的威胁,建立威胁模型,然后才能考虑软件的安全设计和编码实现。
  • 采用威胁建模方法,可以系统性地分析其架构、软件体系和程序部署,分析网络和信息系统可能面临的潜在威胁,确认有哪些攻击面,之后提出有针对性的安全防范措施,这才是有效解决网络安全对抗的良策。

威胁建模有着重要的存在价值,包括早期发现安全缺陷理解安全需求设计和交付更安全的产品,解决其他技术无法解决的问题

步骤

在这里插入图片描述

STRIDE威胁分类

威胁涉及安全属性威胁描述
假冒认证性攻击者能够伪装成另一个用户或身份
篡改完整性在传输,存储或归档过程中能够修改数据
否认不可否认性攻击者能够否认攻击
信息泄露机密性信息能够泄露给未授权的用户
拒绝服务可用性对于合法的用户拒绝提供服务
特权提升授权性攻击者能够跨越最小的权限限制,而以更高级别特权或者管理员权限运行软件

第八章 软件安全编码

C语言安全编码

注意的几点

  • 对内存访问错误的检测和修改
  • 指针引用最灵活,最核心,最复杂,最容易出错
  • 随机数的选取和使用问题
  • C语言没有听异常处理机制

C语言针对缓冲区溢出的主要解决措施

  • 使用安全字符串函数
  • 若无法避免使用不安全函数 :三个原则:1)应要求代码传递缓冲区的长度 2)探测内存 3)正确使用函数参数
  • 开启编译器的安全编译选项 /GS

Java语言安全编码

内置安全模型—沙箱,核心思想:本地环境中的代码都能搞访问系统中的关键资源,而远程下载的程序则只能访问“沙箱“ 内有限的资源。

语言层安全:1)通过关键字private,public等 2)通过类型规则确保程序运行时变量的值始终与声明的类型一致

字节码层安全:类加载器JVM中执行的所有代码均有加载器从JVM外部的类文件中加载进来

​ 字节码验证器:静态验证:JVM运行字节码前做检测。 动态验证:JVM运行字节码期间所做的检查。

应用层安全 :一旦类加载器加载了一个类并由字节码验证器验证了它,Java平台的第三种安全机制:安全管理器就开始运行

第九章 软件安全测试

软件安全测试的内容

软件安全功能测试和软件安全漏洞测试

软件安全测试的原则

  • 应尽早进行软件安全测试,越晚发现漏洞,修复的成本越高
  • 在有限的时间和资源下进行测试
  • 软件安全没有银弹。测试只能说明软件存在错误而不能证明软件没哟错误
  • 程序员应避免检查自己的程序
  • 尽量避免测试的随意性

软件安全测试是从攻击者的角度出发 发现漏洞并修复,保证软件不被恶意攻击者破坏。安全测试更多的是考虑反向数据

白盒测试黑盒测试
安全功能测试源码分析漏洞扫描模糊测试渗透测试
保密性 可认证性静态分析脆弱点扫描基于生成的模糊测试黑盒渗透测试
完整性 授权动态分析威胁内容扫描基于变异的模糊测试白盒渗透测试
可用性 审计隐私保证扫描

模糊测试

核心思想:通过监视非预期输入可能产生的异常结果来发现软件问题。

方法

  • 预生产测试用例
  • 随机生成输入
  • 手工协议变异测试
  • 变异或强制性测试
  • 自动协议生成测试

优点

  • 模糊测试的测试目标是二进制可执行代码,比基于源代码的白盒测试适用范围广
  • 模糊测试是动态执行的,不存在静态分析技术中存在的大量误报问题
  • 模糊测试的原理简单
  • 模糊测试自动化程度高,不需要逆向工程中大量的人工参与

局限性

  • 访问控制漏洞的发现能力有限
  • 设计逻辑缺陷的发现能力有限
  • 多阶段安全漏洞的发现能力有限
  • 多点触发漏洞的发现能力有限
  • 模糊测试技术不能保证畸形输入数据能够覆盖到所有的分支

过程

在这里插入图片描述

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

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

相关文章

【工作记录】基于CSS+JS可拖拽改变大小、可吸附到边界的DIV

记录一段实现可拖拽、可自动吸附到边界的代码。 <!DOCTYPE html> <html lang"en"> <head><style>body {overflow: hidden;}#pane {position: absolute;width: 45%;height: 45%;top: 20%;left: 20%;margin: 0;padding: 0;z-index: 99;border…

Google禁止自动更新

前言&#xff1a; 为了使用selenium&#xff0c;必须要禁止google自动更新&#xff0c;要不然辛苦下的驱动&#xff0c;随着更新还得再下一遍。 解决&#xff1a; 1.打开服务 2.禁用google更新服务 然后就可以了

单片机学习12-串口通信

目录 串口通信实验 通信的基本概念 串行通信与并行通信 异步通信与同步通信 单工、半双工与全双工通信 通信速率&#xff08;比特率&#xff09; 单片机串口介绍 串口通信简介 串口相关寄存器 串口工作方式 方式 0 方式 1 方式 2 和方式 3 串口的使用方法 硬件设计…

vtk创建x,y,z轴

创建三维空间中的xyz轴 引言示例开发环境示例代码运行结果总结 引言 本文的示例实际上是vtk官网中的示例&#xff0c;只是稍做了一点改动。 示例 开发环境 使用QtCreator4.11.2来开发&#xff0c;基于Qt5.14.2。使用的vtk9.2。创建空项目。 示例代码 由于是空项目&#x…

开源大型语言模型(llm)总结

大型语言模型&#xff08;LLM&#xff09;是人工智能领域中的一个重要研究方向&#xff0c;在ChatGPT之后&#xff0c;它经历了快速的发展。这些发展主要涉及以下几个方面&#xff1a; 模型规模的增长&#xff1a;LLM的规模越来越大&#xff0c;参数数量显著增加。这种扩展使得…

抖音seo矩阵系统源码|需求文档编译说明(一)

抖音seo矩阵系统文章目录技术囊括 ①产品原型 ②需求文档 ③产品流程图 ④部署方式说明 ⑤完整源码 ⑥源码编译方式说明 ⑦三方框架和SDK使用情况说明和代码位置 ⑧平台操作文档 ⑨程序架构文档 短视频矩阵系统源码开发锦囊囊括前言一、短视频账号矩阵系统开发者必备能力语言&…

计算机视觉 + Self-Supervised Learning 五种算法原理解析

计算机视觉领域下自监督学习方法原理 导语为什么在计算机视觉领域中进行自我监督学习&#xff1f; 自监督学习方法Generative methodsBEiT 架构 Predictive methodsContrastive methodsBootstraping methodsSimply Extra Regularization methods 导语 自监督学习是一种机器学习…

【React】React Hooks解析

React Hooks解析 React 16.8 认识和体验Hooks 为什么需要Hook? Hook是 React 16.8 的新增特性&#xff0c;它可以让我们在不编写class的情况下使用state以及其他的React特性&#xff08;比如生命周期&#xff09; 我们先来思考一下class组件相对于函数式组件有什么优势&…

期末复习【计算机网络】

期末复习【计算机网络】 前言推荐期末复习如何快速阅读电子书重点第1章 概述1.6 计算机网络的性能1.6.2 计算机网络的性能指标√ 1.7 计算机网络体系结构1.7.3 具有五层协议的体系结构√ 第2章 物理层2.3 物理层下面的传输媒体 *2.4 信道复用技术2.4.1 频分复用、时分复用和统计…

node笔记_读写excel

文章目录 ⭐前言⭐安装依赖⭐读取excel&#x1f496; 按行读取&#x1f496; 按列读取 ⭐写入excel⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于node读取excel内容 往期文章 node_windows环境变量配置 node_npm发布包 linux_配置node node_nvm安装配置…

vivo 自研鲁班分布式 ID 服务实践

作者&#xff1a;vivo IT 平台团队- An Peng 本文介绍了什么是分布式ID&#xff0c;分布式ID的业务场景以及9种分布式ID的实现方式&#xff0c;同时基于vivo内部IT的业务场景&#xff0c;介绍了自研鲁班分布式ID服务的实践。 一、方案背景 1.1 分布式ID应用的场景 随着系统的…

【CV】EfficientNet相比resnet有哪些优点,什么是深度可分离卷积

目录 前言使用深度可分离卷积普通卷积的计算参数量深度可分离卷积分为两个步骤&#xff1a;深度卷积和逐点卷积 使用多个缩放因子使用 Swish 激活函数 前言 高效的神经网络主要通过&#xff1a;1. 减少参数数量&#xff1b;2. 量化参数&#xff0c;减少每个参数占用内存 目前的…