第1章 软件安全概述
1.1 软件安全的重要性
软件的定义
:国家标准GB/T 11457—2006《信息技术 软件工程术语》给出的软件定义是:计算机程序、规则和可能相关的文档。
以上两个标准文档都认为,软件是程序
、数据
和文档
的集合体。
程序 :是完成特定功能和满足性能要求的指令序列;
数据:是程序运行的基础和操作的对象;
文档:是与程序开发、维护和使用有关的图文资料。
零日漏洞是指未被公开披露的软件漏洞,没有给软件的作者或厂商以时间去为漏洞打补丁或是给出建议解决方案,从而攻击者能够利用这种漏洞破坏计算机程序、数据及设备。
注意,零日漏洞并不是指软件发布后被立刻发现的漏洞。
利用零日漏洞开发攻击工具进行的攻击称为零日攻击
。
1.2 软件安全面临的威胁
本书将软件面临的安全威胁分为3大类:
软件自身的安全(软件漏洞)
、恶意代码
以及软件侵权
。
(1)软件漏洞
软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等。一方面,软件漏洞可能会造成软件在运行过程中出现错误结果或运行不稳定、崩溃等现象,甚至引起死机等情况。另一方面,软件漏洞会被黑客发现、利用,进而实施窃取隐私信息、甚至破坏系统等攻击行为。
(2)恶意代码
恶意代码(Malicious Software,Malware)是在未被授权的情况下,以破坏软硬件设备、窃取用户信息、干扰用户正常使用、扰乱用户心理为目的而编制的软件或代码片段。
定义指出,恶意代码是软件或代码片段,其实现方式可以有多种,如二进制执行文件、脚本语言代码、宏代码或是寄生在其他代码或启动扇区中的一段指令。
(3)软件侵权
主要指侵犯版权(著作权),常见软件侵权行为。
1.3 软件安全的概念
软件安全
:软件工程与软件保障的一个方面,它提供一种系统的方法来标识、分析和追踪对危害以及具有危害性的功能(例如数据和命令)的软件缓解措施与控制。
CIA 安全基本属性:
-
保密性(Confidentiality)
:信息安全中的保密性,也称为机密性,是指信息仅被合法的实体(如用户、进程等)访问,而不被泄漏给未授权实体的特性。实现保密性的方法:通过对信息加密,或是对信息化分密级并为访问者分配访问权限,系统根据用户的身份权限控制对不同密级信息的访问。
-
完整性(Integrity)
:信息安全中的完整性是指,信息在存储、传输或处理等过程中不被未授权、未预期或无意地篡改、销毁等破坏的特性。
实现完整性的方法:一般包括预防
和检测
两种机制。预防机制通过阻止任何未经授权的方法来改写数据的企图,以确保数据的完整性。检测机制并不试图阻止完整性的破坏,而是通过分析用户或系统的行为,或是数据本身来发现数据的完整性是否遭受破坏。
-
可用性(Availablility)
:信息安全中的可用性是指,信息资源可被合法实体访问并按要求使用的特性。
==实现可用性的方法:==备份与灾难恢复、应急响应、系统容侵等安全措施。
第2章 软件漏洞概述
2.1 软件漏洞的分类和评级
(1)软件漏洞分类
通常可以从漏洞利用的成因
、利用的位置
、和对系统造成的直接威胁
进行分类。
①基于漏洞成因的分类
内存破坏类、逻辑错误类、输入验证类、设计错误类和配置错误类。
②基于漏洞利用位置的分类
本地漏洞
。即需要操作系统级的有效帐号登录到本地才能利用的漏洞,主要构成为权限提升类漏洞,即把自身的执行权限从普通用户级别提升到管理员级别。
远程漏洞
。即无需系统级的帐号验证即可通过网络访问目标进行利用的漏洞。
③基于威胁类型的分类
获取控制
。即可以导致劫持程序执行流程,转向执行攻击者指定的任意指令或命令,控制应用系统或操作系统。威胁最大,同时影响系统的机密性、完整性,甚至在需要的时候可以影响可用性。主要来源:内存破坏类。
获取信息
。即可以导致劫持程序访问预期外的资源并泄露给攻击者,影响系统的机密性。主要来源:输入验证类、配置错误类漏洞。
拒绝服务
。即可以导致目标应用或系统暂时或永远性地失去响应正常服务的能力,影响系统的可用性。主要来源:内存破坏类、意外处理错误类漏洞。
(2)软件漏洞分级
对漏洞进行分级有助于人们对数目众多的安全漏洞给予不同程度的关注并采取不同级别的措施。
①按照漏洞严重等级进行分级
②利用通用漏洞评分系统(CVSS)进行分级
依据对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)Heap Spray
栈溢出和堆溢出相结合的一种技术。
首先将shellcode放置到堆中,然后在栈溢出时,控制函数执行流程,跳转到堆中执行shellcode。
3.3 什么是格式化字符串
格式化字符串
(简称格式化串)的漏洞本身并不算缓冲区溢出漏洞,这里作为一类比较典型的系统函数存在的漏洞做一介绍。格式化串漏洞的产生源于数据输出函数中对输出格式解析的缺陷,其根源也是C语言中不对数组边界进行检查的缓冲区错误。
第4章 Web漏洞分析
4.1 SQL注入漏洞原理及利用(P80)
原理
:攻击者能够利用现有 Web 应用程序,将恶意的数据插入到 SQL 查询中,提交到后台数据库引擎执行非授权操作。
利用
:
(1)注入点选择
(2)数字型和字符型注入
(3)通过web端对数据库注入和直接访问数据库注入
第5章 软件安全开发模型
软件生命周期划可分成 3 个时期 8 个阶段
5.1 软件生命周期
软件开发的时期有哪些:软件定义时期
、软件开发时期
、软件维护时期
5.2 了解主要的几种软件安全开发模型(简答题)
(1)微软的软件安全开发生命周期模型SDL
SDL模型是由软件工程的瀑布模型发展而来,是在瀑布模型的各个阶段添加了安全活动和业务活动目标。
为了实现所需安全目标,软件项目团队或安全顾问可以自行添加可选的安全活动。
(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 软件安全设计原则
7.4 威胁建模
(1)什么是威胁建模(Threat Modeling)
在实际生活中,人们常常进行着威胁建模。比如,在离家外出时会提醒自己,家中的门窗有没有关好,以免小偷光顾;家中的水电气有没有关好,以免发生意外。
在软件系统中也需要做这样的思考,也就是即将开发完成的软件系统会面临哪些安全威胁,由此可在接下来的软件设计和软件实现等环节中来防范每一个安全威胁。
本书试图给出这样的一个解释,软件威胁建模是指,通过抽象的概念模型对影响软件系统的威胁进行系统地识别和评价。
(2)为什么要威胁建模
威胁建模有着重要的存在价值,包括早期发现安全缺陷
,理解安全需求
,设计和交付更安全的产品
,解决其他技术无法解决的问题
等作用。
(3)威胁建模的一般过程
威胁建模通常分为:
- 软件为中心的威胁建模(Software Centric Threat Modeling)
- 安全为中心的威胁建模(Security Centric Threat Modeling)
- 资产和风险为中心的威胁建模(Asset or Risk Centric Threat Modeling)
本书给出威胁建模的一般过程,包括8个步骤:
第8章 软件安全编码
8.1 什么叫做类型安全语言?有哪些是类型安全语言
(1)类型安全语言的定义:
所谓安全的编程语言,是指那些具有对缓冲区、指针和内存进行管理能力而避免发生软件安全问题的语言。类型安全语言就属于安全的编程语言。
(2)类型安全的分类:
①C# ②Java
第9章 软件安全测试
9.1 什么是渗透测试?什么是模糊测试?各有什么优点
(1)渗透测试的概念:
模仿黑客的特定攻击行为,也就是尽可能完整地模拟黑客使用的漏洞发现技术和攻击手段,对目标的安全性作深入的探测,发现系统最脆弱环节的过程。
(2)模糊测试的概念:
模糊测试主要属于黑盒测试和白盒测试领域,是一种基于缺陷注入的软件安全测试技术。模糊测试技术的核心思想是通过监视非预期输入可能产生的异常结果来发现软件问题。
(3)模糊测试的优点:
①模糊测试的测试目标是二进制可执行代码,比基于源代码的白盒测试适用范围更广。
②模糊测试是动态实际执行的,不存在静态分析技术中存在的大量误报问题。
③模糊测试的原理简单,没有大量的理论推导和公式计算,不存在符号执行技术中的路径状态爆炸问题。
④模糊测试自动化程度高,不需要逆向工程中大量的人工参与。
(4)渗透测试的优点:
渗透测试可以帮助确定一个系统是否容易受到攻击,如果防御足够,以及测试是否打败了哪些防御。渗透测试发现的安全问题应该报告给系统所有者。
9.2 模糊测试过程
9.3 渗透测试过程
1)前期交互(Pre-engagement Interactions)
2)情报收集(Intelligence Gathering)
3)威胁建模(Threat Modeling)
4)漏洞分析(Vulnerability Analysis)
5)渗透攻击(Exploitation)
6)后渗透攻击(Post Exploitation)
7)报告(Reporting)
9.4 软件安全功能测试与软件安全漏洞测试的区别
软件安全功能测试主要针对需求与设计阶段的核心安全属性的实现状况进行验证,以保证软件安全设计目标的实现。软件核心安全属性包括保密性、完整性、可用性、可认证性、授权及可记账性/审计等。
软件安全漏洞测试,在漏洞被利用之前发现并修补漏洞的技术。分为对已知漏洞的检测和对未知漏洞的检测。前者主要是通过安全扫描技术,检测系统是否存在已公布的安全漏洞。后者旨在发现软件系统中可能存在但尚未发现的漏洞。
第10章 软件安全部署
10.1 软件安全部署的目的和模式
(1)软件部署的目的及主要任务
软件部署就是在特定平台上按照用户需求安装软件以满足需求的过程。
(2)软件部署的模式
- 单机软件的部署
- 基于中间件平台的部署
- 基于代理的部署
10.2 软件安全部署的时候要使用哪些安全策略
为了确保应用软件的安装配置安全,可以采用以下安全策略。
1)提供详细的安装手册。
2)可更改的软件安装目录。
3)设置默认安装模块。
4)提供安全功能。
5)启用最小权限用户身份。
6)开启应用日志审计。
7)记录部署过程。
第11章 恶意代码分析基础
11.1 什么是静态逆向分析?什么是动态逆向分析?
(1)静态逆向分析
是指不执行代码而是使用反编译、反汇编工具,把程序的二进制代码翻译成汇编语言,之后,分析者可以手工分析,也可以借助工具自动化分析。静态分析方法能够精确地描绘程序的轮廓,从而可以轻易地定位自己感兴趣的部分来重点分析。
静态逆向分析的常用工具有IDA Pro、C32Asm、Win32Dasm、VB Decompiler pro等。
(2)动态逆向分析
是一个将目标代码变换为易读形式的逆向分析过程,但是,这里不是仅仅静态阅读变换之后的程序,而是在一个调试器或调试工具中加载程序,然后一边运行程序一边对程序的行为进行观察和分析。这些调试器或调试工具包括:一些集成开发环境(Integrated Development Environment,IDE)提供的调试工具、操作系统提供的调试器以及软件厂商开发的调试工具。
11.2 逆向分析的一般过程
软件逆向分析的一般过程涉及
文件装载
、指令解码
、语义映射
、相关图构造
、过程分析
、类型分析
、结果输出
7个阶段。
11.3 PE文件(填空题)–P259
==PE 文件格式:==DOS头、PE头、节表、节、其他信息
第12章 恶意代码防治
12.1 可信验证包括什么
软件可信验证模型:
可信验证可从以下4个方面进行:
-
软件特征(Feature)可信
。 -
软件身份(Identity)可信
。 -
软件能力(Capability)可信
。 -
软件运行环境(Environment)可信
。
可信验证可从4个方面进行,建立的软件可信验证FICE模型如图所示:
第13章 开源软件及其安全性
13.1 开源软件与自由软件的区别
(1)概念不同
自由软件是一个比开源软件更严格的概念,因此所有自由软件都是开放源代码的,但不是所有开源软件都能够被称为自由软件。只有遵守 GPL 和 BSD 许可证的开源软件才符合自由软件的定义。
(2)价值观不同
在追求自由、分享精神的过程中,自由软件始终将自由作为道德标准,而开源软件则更加注重软件的发展。自由软件最重要的特点是,从许可证即法律角度保证了自由软件在演化过程中始终保持其“自由性”,从而保证了其任何版本都可以为任何人使用、学习和改进。开源软件则更加注重与软件产业的结合,对商业化更加友好,希望用各种方式来发展软件本身。
第14章 软件知识产权保护
14.1 软件版权的技术保护目标及基本原则
(1)软件版权的技术保护目标
-
防软件盗版
,即对软件进行防非法复制和使用的保护。 -
防逆向工程
,即防止软件被非法修改或剽窃软件设计思想等。 -
防信息泄露
,即对软件载体及涉及数据的保护,如加密硬件、加密算法的密钥等。
(2)软件版权保护的基本原则
1)实用和便利性
。对软件的合法用户来说,不能在用户使用和安装软件过程中加入太多的验证需求,打断或影响用户的使用,甚至要求改变用户计算机的硬件结构,除非是软件功能上的需求,或知识特定用户群的强制性要求。
2)可重复使用
。要允许软件在用户的设备上被重新安装使用。
3)有限的交流和分享
。要允许用户在一定范围内进行软件的交流分享。不能交流分享的软件是没有活力的,也是难以推广的。当然这种交流分享并不是大范围的、无限制的。
文章来源地址https://www.toymoban.com/news/detail-507792.html文章来源:https://www.toymoban.com/news/detail-507792.html
到了这里,关于软件安全2022版期末考试重点(CQUPT)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!