软件安全2022版期末考试重点(CQUPT)

第1章 软件安全概述

1.1 软件安全的重要性

:国家标准GB/T 11457—2006《信息技术 软件工程术语》给出的软件定义是:计算机程序规则可能相关的文档

以上两个标准文档都认为,软件是、和的集合体。
程序 :是完成特定功能和满足性能要求的指令序列;
数据:是程序运行的基础和操作的对象;
文档:是与程序开发、维护和使用有关的图文资料。

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

1.2 软件安全面临的威胁

本书将软件面临的安全威胁分为3大类:、以及。

(1)软件漏洞
软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等。一方面,软件漏洞可能会造成软件在运行过程中出现错误结果或运行不稳定、崩溃等现象,甚至引起死机等情况。另一方面,软件漏洞会被黑客发现、利用,进而实施窃取隐私信息、甚至破坏系统等攻击行为。

?

依据对3种度量评价标准来对一个已知的安全漏洞危害程度进行打分。

  • 基本度量用于描述漏洞的固有基本特性,这些特性不随时间和用户环境的变化而改变。
  • 时间度量用于描述漏洞随时间而改变的特性,这些特性不随用户环境的变化而改变。
  • 环境度量用于描述漏洞与特殊用户环境相关的特性。

一般情况下,用于评价基本度量和时间度量的度量标准由漏洞公告分析师、安全产品厂商或应用程序提供商指定,而用于评价环境度量的度量标准由用户指定。

2.2 CVSS 关于软件漏洞的评价

定义的评估过程将、和所得到的结果综合起来,得到一个最终的分数。

第3章 典型软件漏洞分析

3.1 什么是栈溢出漏洞

? 在函数的栈帧中,局部变量是顺序排列的,局部变量下面紧跟着的是前栈帧EBP以及函数返回地址RET。
如果这些局部变量为数组,由于存在越界的漏洞,那么越界的数组元素将会覆盖相邻的局部变量,甚至覆盖前栈帧EBP以及函数返回地址RET,从而造成程序的异常。

? 1)栈溢出修改相邻变量

? 由于C语言中没有数组越界检查,因此,当用户输入的口令超过2个字节时,将会覆盖紧邻的password数组。

? 2)栈溢出后修改返回地址RET
? 栈溢出后修改相邻变量这种漏洞利用对代码环境的要求比较苛刻。更常用的栈溢出修改的目标往往不是某个变量,而是栈帧中的EBP和函数返回地址RET等值。

3.2 什么是堆溢出漏洞

? 堆管理系统的3类操作:堆块分配、堆块释放和堆块合并,即对空链表的修改。分配就是将堆块从空表中“卸下”;释放就是把堆块“链入”空表;合并可以看成是把若干块先从空表中“卸下”,修改块首信息,然后把更新后的块“链入”空表。如果能够修改链表节点的指针,在“卸下”和“链入”的过程中就有可能获得一次读写内存的机会。

? 1)DWORD Shoot
堆溢出利用的精髓就是用精心构造的数据去溢出覆盖下一个堆块的块首,使其改写块首中的前向指针(flink)和后向指针(blink),然后在分配、释放、合并等操作发生时伺机获得一次向内存任意地址写入任意数据的机会。
攻击者可以进而劫持进程,运行shellcode。

(2)McGraw 的软件内建安全开发模型

? 模型核心思想:对软件全生命周期各个阶段产品(工件)的安全性进行评估、测试、验证以及操作控制,实现面向过程的全生命周期安全质量控制方法。
? 该模型引用了工业生产领域“工件”的概念,非常形象地描述了软件开发各阶段所产生的中间产品,并将其作为评测的对象,体现了BSI模型面向全过程产品评测与控制的特点。

(3)NIST 的软件安全开发生命周期模型

? 模型主要内容是将系统开发的生命周期划分为启动、开发/采购、实施/评估、操作/维护,以及部署处理5个阶段,除此以外还增加了其他几个方面的安全考虑

(4)OWASP的软件安全开发模型

? 2009年,OWASP针对Web的安全开发提出了综合的轻量级应用安全过程,该模型更适用于小型Web开发组织。

5.3 敏捷 SDL 和 典型 SDL 的差别(P122)

① 敏捷 SDL 不采用传统的瀑布模型,而是采用无阶段的迭代开发模型,以实现软件版本的速度更新和发布。如果开发团队采用瀑布式开发流程(具有明确定义的设计、实现、验证和发布阶段),那么更适合采用典型的 SDL 模型,不适和敏捷 SDL。

② 在敏捷 SDL 中,并不是每个发布版本(或没次突击发布)都需要达到所有的要求,这也是敏捷 SDL 与传统 SDL 最大的区别。

第6章 软件安全需求分析

6.1 软件安全需求的获取方法

(1)头脑风暴((Brain-storming)
又称智力激励法、自由思考法,是指无限制的自由联想和讨论,其目的在于产生新观念或激发创新设想。
头脑风暴应当只是在应用程序需要快速实现的情况下使用,因为它有两个明显的缺点。在需要初步确定安全需求的情况下是可以接受的,但必须有更多系统化、结构化的方法来全面地决定安全需求。

(2)问卷调查和访谈
可以直接用于生成安全需求。有效性取决于如何向被调查对象提出合适的问题。调查的问题应当覆盖软件安全设计原则和安全配置文件的内容,应当考虑业务风险、过程(或项目)风险和技术(或产品)风险。在整个调查过程中,调查人和被调查人之间的协作和沟通是很重要的。

(3)策略分解
策略分解指的是将组织需要遵守的内部和外部政策,包括外部法律法规、隐私和遵从性命令分解成为详细的安全需求。策略分解过程是一个连续的和结构化的过程。
在分解过程中往往会出现很多歧义。因此,需要关注策略定义范围并谨慎实施分解过程,以确保分解过程是客观的、符合安全策略的,而不是某个人主观上的意见。

(4)数据分类
在数据生成(即创建)和使用(即加工)、传输、存储和存档这一生命周期中,都需要采取适当的保护机制。根据数据的重要性来进行分类,实际上也就是根据数据的敏感级,同时根据对数据泄露、变更或破坏的影响,有意识地为数据资产分配标签,以此来确定保护数据资产的不同安全保护需求和控制方法。根据数据的重要度分级保护,可以降低数据保护的成本,使数据保护的投资—回 率最大化。

(5)主/客体关系矩阵
采用主/客体关系矩阵来刻画一个基于使用用例的主/客体之间的操作关系。主/客体关系矩阵是角色和组件的二维表示,主体(角色)作为列,客体(对象/组件)作为行。当主/客体关系矩阵产生后,与主/客体关系矩阵所允许的对应动作相违背的事件就可以判定为威胁,在此基础之上可以确定安全需求。这一方法在确定软件安全认证性、授权需求的时候最为有用。

(6)使用用例和滥用案例建模
一个使用用例模型可以描述软件或系统的预期行为,而预期行为描述了完成业务功能所需要的行为和事件的顺序。通过清楚地描述什么时间和在什么条件下会发生某些行为,可以有效地确定业务需求,包括安全需求。从使用用例出发,可以开发滥用案例。滥用案例可以通过对负面场景进行建模来帮助确定安全需求。

第7章 软件安全设计

7.1 软件设计阶段的主要工作

? 目前采用的很多软件开发方法,例如面向对象方法,其设计过程从概念模型逐步精化到实现模型,并且不断进行迭代,设计过程很难用总体设计和详细设计进行明确的区分。

? 从技术的角度来看软件设计阶段的主要工作包括:、、、、等。

7.2 软件安全设计阶段的主要工作

(1)软件安全设计的目的与作用
软件安全设计的目的在于将安全属性设计到软件架构中去,以实现软件产品本质的安全性。
软件安全设计对于软件安全有着举足轻重的作用,大多数软件安全问题都是由于软件设计上的安全性考虑不足或不完整导致的。

(2)软件设计与软件安全设计的关系
简单的说,软件安全设计就是将软件的安全需求转化为软件的功能结构 的过程。软件设计通常包括架构设计、接口设计、算法设计等,这意味着软件安全设计也不仅要考虑系统架构及相关安全问题,同时还要考虑如何将安全需求嵌入到开发架构中去与软件融为一个整体,高效的提供安全服务。

(3)软件架构的安全性设计
软件的架构通常分为以下三种:

  • 逻辑架构:描述软件系统中组件的关系,如用户界面、数据库和外部接口等。
  • 物理架构:描述软件组件在硬件上的部署模式。
  • 系统架构:说明系统的功能性特征,若可拓展性、可靠性、灵活性等。

7.3 软件安全设计原则

第8章 软件安全编码

8.1 什么叫做类型安全语言哪些是类型安全语言

(1)类型安全语言的定义:

? 所谓安全的编程语言,是指那些具有对缓冲区、指针和内存进行管理能力而避免发生软件安全问题的语言。类型安全语言就属于安全的编程语言。

(2)类型安全的分类:

? ①C# ②Java

第9章 软件安全测试

9.1 什么是渗透测试么是模糊测试有什么优点

(1)渗透测试的概念:

? 模仿黑客的特定攻击行为,也就是尽可能完整地模拟黑客使用的漏洞发现技术和攻击手段,对目标的安全性作深入的探测,发现系统最脆弱环节的过程。

(2)模糊测试的概念:

? 模糊测试主要属于黑盒测试和白盒测试领域,是一种基于缺陷注入的软件安全测试技术。模糊测试技术的核心思想是通过监视非预期输入可能产生的异常结果来发现软件问题。

(3)模糊测试的优点
①模糊测试的测试目标是二进制可执行代码,比基于源代码的白盒测试适用范围更广。
②模糊测试是动态实际执行的,不存在静态分析技术中存在的大量误 问题。
③模糊测试的原理简单,没有大量的理论推导和公式计算,不存在符 执行技术中的路径状态爆炸问题。
④模糊测试自动化程度高,不需要逆向工程中大量的人工参与。

(4)渗透测试的优点:

? 渗透测试可以帮助确定一个系统是否容易受到攻击,如果防御足够,以及测试是否打败了哪些防御。渗透测试发现的安全问题应该 告给系统所有者。

9.2 模糊测试过程

11.3 PE文件(填空题)–P259

==PE 文件格式:==DOS头、PE头、节表、节、其他信息

第13章 开源软件及其安全性

13.1 开源软件与自由软件的区别

(1)概念不同

? 自由软件是一个比开源软件更严格的概念,因此所有自由软件都是开放源代码的,但不是所有开源软件都能够被称为自由软件。只有遵守 GPL 和 BSD 许可证的开源软件才符合自由软件的定义。

(2)价值观不同

? 在追求自由、分享精神的过程中,自由软件始终将自由作为道德标准,而开源软件则更加注重软件的发展。自由软件最重要的特点是,从许可证即法律角度保证了自由软件在演化过程中始终保持其“自由性”,从而保证了其任何版本都可以为任何人使用、学习和改进。开源软件则更加注重与软件产业的结合,对商业化更加友好,希望用各种方式来发展软件本身。

第14章 软件知识产权保护

14.1 软件版权的技术保护目标及基本原则

(1)软件版权的技术保护目标

  • ,即对软件进行防非法复制和使用的保护。
  • ,即防止软件被非法修改或剽窃软件设计思想等。
  • ,即对软件载体及涉及数据的保护,如加密硬件、加密算法的密钥等。

(2)软件版权保护的基本原则
1)。对软件的合法用户来说,不能在用户使用和安装软件过程中加入太多的验证需求,打断或影响用户的使用,甚至要求改变用户计算机的硬件结构,除非是软件功能上的需求,或知识特定用户群的强制性要求。
2)。要允许软件在用户的设备上被重新安装使用。
3)。要允许用户在一定范围内进行软件的交流分享。不能交流分享的软件是没有活力的,也是难以推广的。当然这种交流分享并不是大范围的、无限制的。

?

?

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月8日
下一篇 2022年6月8日

相关推荐