软件安全技术

  • 边复习边写的,有错误及时指正
    • 第一章 软件安全概述
      • 零日漏洞
      • 安全威胁分类
      • 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平台的第三种安全机制:安全管理器就开始运行

第九章 软件安全测试

软件安全测试的内容

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

软件安全测试的原则

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

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

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

模糊测试

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

方法

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

优点

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

局限性

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

过程

软件安全技术复习内容相关推荐

  1. 《计算机组成原理》期末习题讲解和重点复习内容

    文章目录 计算机组成原理重点复习内容 一.I/O部分 1.中断系统流程图与结构图 2.DMA系统的流程图与结构图 二.CPU的数据通路 1.基础知识部分 2.大题部分 三.Cache的映射问题 四.磁 ...

  2. 设计模式与软件体系结构复习资料——设计模式

    考试题型:选择.简答.设计 目录 软件设计模式 第一章 面向对象设计概述 1. 面向对象设计的表示方法 2. 优秀软件系统特性 3. 面向对象设计原则 3.1 ==单一职责原则== 3.2 ==开闭原 ...

  3. 【软件安全:软件安全技术课后习题及答案】

    第一章 1-1 零日漏洞.零日攻击 零日漏洞是指未被公开披露的软件漏洞,没有给软件的作者或厂商以时间去为漏洞打补丁或是给出建议解决方案,从而攻击者能够利用这种漏洞破坏计算机程序.数据及设备. 利用零日 ...

  4. 【XJTUSE软件项目管理复习笔记】 第二章 软件项目整体管理

    仅供学习参考,禁止商用与转载 文章目录 软件项目管理复习笔记 第二章 软件项目整体管理 什么是项目整体管理 战略计划和项目选择 项目选择 项目的财务分析 净现值分析(重点) 投资收益率(ROI)分析法 ...

  5. 全国软考中级软件设计师 复习大纲概览

    本专栏记录学习复习软考中级软件设计师的内容,官方网站上有中级设计师的考试大纲和指导用书,官网链接:https://www.ruankao.org.cn 考试的难度总体来讲不是很大,但是设计的知识面非常 ...

  6. 《软件需求分析 复习 的参考资料》

    软件需求分析 复习 的参考资料 内容如下: 一.选择类 1.UML 的 ( B )模型图由类图.对象图.包图.构件图和配置图组成. A. 用例 B. 静态 C. 动态 D. 系统 2.UML的 ( C ...

  7. 数字化设计与制造 复习内容全

    数字化设计与制造复习内容 第一章:引言部分 1.制造方式大致经历四个发展阶段P33 手工生产.大规模生产.大批量定制.个性化生产. 2.什么是制造P36 制造是人类从事生产和生活的基本活动,它与人们的 ...

  8. 软件设计师复习点/错题总结:适合考前复习

    软件设计师复习点/错题总结:适合考前复习 1.寄存器分类 程序寄存器(PC):下一条指令的地址(存放在控制器)程序员可以访问(MOV-) 指令寄存器(IR):正在运行的指令(存在在控制器中)对用户完全 ...

  9. 智能制造技术基础复习内容全

    智能制造技术基础复习内容 第一章.概论 1.智能制造,人工智能P1 制造业是国民经济的主体,是立国之本.兴国之器.强国之基. 智能制造(IM):智能制造通常泛指智能制造技术和智能制造系统,它是现代制造 ...

最新文章

  1. 自然语言推理:使用注意力机制
  2. git push 时不用每次都输入密码的方法
  3. 超级队长VR线下体验店落地上海,让娱乐突破想象
  4. 高压发生器的输出电压波形
  5. JVM中锁优化,偏向锁、自旋锁、锁消除、锁膨胀
  6. ajax delete 传递参数,springMVC使用PUT、DELETE方法传递参数解决方案
  7. Kubernetes 部署 Mysql 8.0 数据库(单节点)
  8. idea编辑区光标问题
  9. 操作系统—吸烟者问题
  10. Spring学习总结(2)- AOP
  11. C#连接mysql实例
  12. Linux的环境变量总结
  13. 最新苹果CMS对接千月版本-畅视影视(V9.3开源)已搭建测试版
  14. html显示当前脚本错误,访问网页总是提示当前网页脚本发生错误怎么办?
  15. 通过js实现图片爆炸特效
  16. PostScript语言里的珠玑
  17. 现汇买入价/现钞买入价/卖出价/基准价/中行折算价的概念
  18. left函数未定义_access中LEFT函数未定义的解决方案\表达式中'left'函数未定义。
  19. ACL的rule中的deny/permit在各个业务模块里的场景是怎样的
  20. HOOK 几种实现方式区别

热门文章

  1. 焊接行业有哪些新工艺、新技术?
  2. SpringSession系统对接CAS遇到的反序列化问题
  3. 字符集和数据库的维护
  4. 区块链倪老师:《区块链思维》第一章
  5. 文本翻译(中文翻译英文,英文翻译中文)
  6. 用通俗易懂的语言描述java,如何用通俗易懂的话来形容各种不同的编程语言?...
  7. php数组的21个操作合并,拆分,删除,排序…
  8. uni-app图片加水印;小程序图片添加水印;使用canvas上传图片加水印
  9. LTE:LTE双连接技术简介
  10. drawText文字绘制知识