本文主要是介绍软件安全技术【太原理工大学】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
没有划重点,只说了一句课后题和实验中的内容都可能会出。
2022考试题型:选择20个20分,填空10个10分,名词解释4个20分,简答6个30分,分析与论述2个20分,没找到历年题。
如此看来,这门考试大概是类似于马原考试的那种,只要别太过分,重点概念掌握一下就差不多了。所以如果逃课被王老师抓到太多的话就要认真点好好背背了,因为如果考试难度不高的话大概会从平时分拉开差距(。ì _ í。)
1.零日攻击
零日攻击指未被公开披露的软件漏洞,没有给软件的作者或厂商以时间去为漏洞打补丁或是给出建议方案,从而攻击者能够给出这种漏洞破坏计算机程序、数据及设备。
利用零日漏洞开发进行的攻击称为零日攻击。零日攻击成功率高,造成后果严重。零日漏洞反映了软件系统的脆弱性,存在漏洞的隐秘性、修复的滞后性。
2.软件安全威胁分类
软件自身的安全(软件漏洞)、恶意代码、软件侵权。
3.软件漏洞
软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等。
一方面,软件漏洞可能会造成软件在运行过程中出现错误结果或运行不稳定、崩溃等现象,甚至引起死机等情况,另一方面,软件漏洞会被黑客发现和利用,进而实施窃取隐私等信息、甚至破坏系统等攻击行为。
4.恶意代码
恶意代码是在未授权情况下,以破坏硬件、窃取信息、干扰正常使用、扰乱正常使用、扰乱用户心理为目的的软件或代码片段。如 蠕虫、特洛伊木马、后门、恶意广告、流氓软件、逻辑炸弹、僵尸网络、勒索软件等。
5.软件安全
软件安全是软件工程和软件保障的一个方面,提供了一种系统的方法来标识、分析和追踪对危害及具有危害性功能的软件缓解措施和控制。
软件安全具有信息安全三大基本属性(CIA):保密性、完整性、可用性
保密性:确保信息资源仅被合法的实体(如用户、进程等)访问,使企业不泄露给未授权的实体;
完整性:信息安全中的完整性是指信息资源只能由授权的方式修改,在存储或传输过程中不被授权、未授权或无意篡改、销毁,或在篡改后能够被迅速发现;
可用性:信息安全中的可用性是指信息资源(信息、服务和IT资源等)可被合法实体并按要求特性使用。
其他属性:可认证性、授权、可审计性、可控性、可存活性等。
6.PDRR模型
保护-检测-响应-恢复
7.软件中的错误、缺陷、故障和失效在软件生命周期各个阶段的表现
错误(Error)是在软件开发过程中出现的不符合期望或不可接受的人为差错,其结果可能导致软件缺陷的产生;
缺陷(Bug/Defect)是指由于人为差错或其他客观原因,导致软件隐含能导致其运行过程中出现不希望或不可接受的偏差;
故障(Fault)是指软件出现可感知的不正常、不正确或不按规范执行的状态;
失效(Fgilure)是指软件丧失完成规定功能的能力的事件。
8.软件漏洞的成因
计算机系统结构决定了漏洞的必然性。例如,数据和指令可能发生混淆,人为因素导致编码错误等。
软件趋向大型化,第三方扩展增多,软件漏洞的增长和软件复杂度、代码行数的增长呈正比。
新技术、新应用的设计缺乏安全性考虑。
使用场景更具威胁、网络技术的引入使得软件的使用环境变得更加复杂多变。
缺乏对软件安全的重视,开发者缺乏相关知识。
9.软件漏洞的特点
持久性与时效性,广泛性与具体性,可利用性与隐蔽性
10.软件漏洞的分类
基于漏洞成因分类:内存破坏类、逻辑错误类、输入验证类、设计错误类、配置错误类;
基于漏洞利用位置分类:本地漏洞、远程漏洞;
基于威胁类型的分类:获取控制、获取信息、拒绝服务。
11.栈溢出、栈溢出漏洞及利用分析
栈溢出是指程序视图访问超出栈空间的内存区域;
栈溢出漏洞是一种常见的安全漏洞,攻击者可以通过向程序输入过多的数据来触发栈溢出,进而覆盖栈中的关键数据,以实现任意代码执行的目的;
缓冲区溢出指攻击者通过向程序输入过长的数据,超出缓冲区的大小,从而覆盖栈中的其他数据。
12.堆溢出漏洞及利用分析
堆溢出漏洞是一种常见的安全漏洞,它发生在程序动态分配内存时未能正确处理数据的情况。
13.格式化字符串漏洞及利用分析
格式化字符串漏洞是由于程序员在编程过程中错误的将用户输入作为格式化字符串传递给某些函数,而没有对用户输入进行充分的验证和过滤,导致用户可以控制格式化字符串的输出,进而引发安全问题。
14.Windows安全漏洞保护分析
栈溢出检测选项/GS问题:1.cookie值可以被猜测 2.cookie可以被修改 3.覆盖SEH绕过cookie检查 4.覆盖父函数的栈数据绕过cookie检查
数据执行保护DEP 1.最早出现在win xp sp 2.使可写数据不可执行,使执行数据不可写)问题:可以执行已经加载的模块中的指令或调用系统函数,栈上的数据作为这些函数/指令的参数
地址空间布局随机化ASLR 问题:1.对于本地攻击,DLL的地址不会重新随机化 2.造成内存碎片增多 3.有些DLL模块没有采用/DYNAMICBASE可以从这个模块发起攻击
安全结构化异常处理SafeSEH(生成一张安全的SEH表,保存在数据块里)问题:当进程中存在一个不支持SafeSEH的模块时,整个SafeSEH的机制就可能失效,
增强缓解体验工具包EMET(增强型DEP,SafeSEH升级版SEHOP,强制性ASLR,HeapSpray防护)问题:EMET不是操作系统的一部分,会给操作系统的性能,可靠性以及会给其上运行的应用程序带来严重的副作用,且未跟上windows发展的步伐
15.Web安全漏洞
注入、失效的身份认证与会话管理、跨站脚本、不安全的直接对象引用、错误的安全配置、敏感的数据泄露、缺失功能级访问控制、跨站请求伪造、使用有漏洞的组件、未验证的重定向和转发
16.SQL注入漏洞
SQL注入漏洞是指,攻击者能够利用现有Web应用程序,将恶意的数据插入SQL查询中,提交到后台数据库引擎执行非授权操作。
SQL注入具有广泛性,基于SQL语言的标准数据库软件以及与之连接的网络应用程序都面临此类攻击。SQL注入攻击原理相对简单,教程很多;相较于其他漏洞,对于SQL注入漏洞的防范要困难。
17.漏洞防护的基本措施
采用强类型语言,如Java、C#等强类型语言几乎可以完全忽略数字型注入;
尽可能避免使用拼接的动态SQL语句;
在服务器端验证用户输入的值和类型是否符合程序的预期要求;
在服务器端对用户输入进行过滤;
避免网站显示SQL错误信息,如类型错误、字段不匹配等;
加固应用程序服务器和数据库、利用最低权限账户与数据库连接;
遵守安全规范;
使用专业的漏洞扫描工具进行安全性测试。
18.软件的生命周期
软件生命周期是指从软件的设计、开发、实施、维护等一系列过程的总和。通常的生命周期包括软件需求分析、软件设计、软件编码、软件测试、软件部署、维护、改进和升级等几个阶段。
19.安全开发生命周期SDL
安全培训、安全需求分析、安全设计、安全实施、安全验证、安全发布、安全响应。
20.软件安全需求分析的目的和作用
软件安全需求分析的目的是描述为了实现信息安全目标,软件系统应该做什么,才能有效提高软件产品的安全质量,减少进而消散软件安全漏洞;
一个缺少安全需求分析的软件开发项目,将威胁到信息的保密性、完整性和可用性,以及其他一些重要安全属性。这个软件产品被攻破可能就只是一个时间早晚的问题,而不是条件的问题,这取决于攻击者对于这个软件系统价值的判断。
21.网络安全等级保护制度
网络安全等级保护制度将网络划分为五个安全保护等级,从第一级到第五级逐级增高。
第一级,属于一般网络,其一旦受到破坏,会对公民、法人和其他组织的合法权益造成损害,但不危害国家安全、社会秩序和社会公共利益。
第二级,属于一般网络,其一旦受到破坏,会对公民、法人和其他组织的合法权益造成严重损害,或者对社会秩序和社会公共利益造成危害,但不危害国家安全。
第三级,属于重要网络,其一旦受到破坏,会对公民、法人和其他组织的合法权益造成特别严重损害,或者会对社会秩序和社会公共利益造成严重危害,或者对国家安全造成危害。
第四级,属于特别重要网络,其一旦受到破坏,会对社会秩序和社会公共利益造成特别严重危害,或者对国家安全造成严重危害。
第五级,属于极其重要网络,其一旦受到破坏,会对国家安全造成特别严重危害。3)开展网络安全等级保护工作的流程。
22.等级保护工作
等级保护工作主要分为五个环节,定级、备案、等级测评、安全建设整改、监督检查。
23.软件安全设计的目的和作用
软件安全设计的目的是将安全属性设计到软件架构中,以实现软件产品本质的安全性。软件安全设计对于软件安全有着举足轻重的作用,大多数软件安全问题都是由于软件设计上的安全性考虑不足或不完整所导致的。
24.软件架构安全性设计
软件架构设计:逻辑架构、物理架构、系统架构;
软件架构安全性设计:软件架构安全设计首先需要进行系统描述,包括系统功能、安全要求、系统部署和技术需求,确定软件系统的安全级别。
25.安全设计原则
1)减少软件受攻击面原则:软件受攻击是指,用户或其他程序及潜在的攻击者都能够访问到所有的功能和代码的总和。一个软件的攻击面越大,安全风险就越大。减少软件受攻击面就是去除、禁止一切不需要使用的模块、协议和服务,其目的是减少攻击可以利用的漏洞;
2)最小授权原则:最小授权指系统仅授予实体完成规定的任务所必须的最小权限,并且改权限的持续时间也尽可能短;
3)权限分离原则:将软件功能设计为需要在两个或更多条件下才能实现,以防止一旦出现问题,整个软件都可能面临风险;
4)纵深防御原则:在软件设计中加入层次化安全控制和风险缓解/防御方法,它强调不依赖于单一的安全解决方案,使用多种互补的安全功能,即使一个安全功能失效,也不会导致整个系统遭受攻击;
5)完全控制原则:要求每一次访问受保护对象的行为都应可能进行细粒度检查;
6)默认安全配置原则:为系统提供默认的安全措施,包括默认权限、默认策略等,尽可能让用户不需要额外配置就可以安全地应用;
7)开放原则:软件设计本身应该是开放的,安全防御机制的实现应该不依赖于设计本身。通过模糊和晦涩难懂的方法固然可以给攻击者增加一些难度,或者说某种程度上提供了纵深防御的能力,但不应该是唯一的或主要的安全机制;
8)最弱保护一环原则“保护软件系统中的最弱组件。该原则类似于“木桶原理”;
9)最少共用机制原则:尽量减少依赖于一个以上用户甚至于所有用户的通用机制。设计应该根据用户角色来划分功能或隔离代码,因为这可以限制软件的暴露概率,提高安全性;
10)安全机制的经济性原则:以较低的开发成本和资源消耗获得具有较高安全质量的软件产品和系统保障;
11)安全机制心理可接受原则:安全保护机制设计得要简单,要让用户易用,要确保用户对资源的可访问,以及安全机制对用户透明,用户才会使用这些保护机制;
12)平衡安全设计原则:以上介绍的这些安全设计原则每一项都有自己的侧重点,将所有这些安全原则都设计到软件中是不可能的,因此有必要在这些安全原则间进行决策折中,即平衡安全设计原则。
26.威胁建模
威胁建模是一项在软件设计阶段不应忽视的、系统的、可迭代的、结构化的安全技术。对软件系统来说,资产包括软件流程、软件本身,以及它们处理的数据。在当前超过70%的漏洞来自于应用软件的情况下,解决软件安全问题应该首先明确应用软件面临的威胁,建立威胁模型,然后才能考虑软件的安全设计和编码实现。
27.软件安全编码的主要工作
选择安全的编程语言、版本(配置)管理、代码检测。
28.安全编译
编译是指将程序员编写的源代码转换为计算机可以理解的目标代码的过程。安全编译包括以下4个方面的含义。
1)采用最新的集成编译环境,并选择使用这些编译环境提供的安全编译选项和安全编译机制来保护软件代码的安全性。例如在VS中编译时,开启/GS选项对缓冲区的安全进行检查。
2)代码编译需要在一个安全的环境中进行。编译环境的完整性对于保证最终目标代码的正确性是很重要的。可以采用以下一些保证措施。
●在物理环境上,对代码编译系统实施安全访问控制,防止人为地破坏和篡改。
●在逻辑上,使用访问控制列表防止未授权用户的访问。
●使用软件版本控制方法,保证代码编译版本的正确性。
●尽量使用自动化编译工具和脚本,保证目标代码的安全性。
29.CERT安全编译建议
验证输入、留意编译器警告、安全策略的架构和设计、保持简单性、默认拒绝、坚持最小权限原则、清洁发送 给其他系统的数据、纵深防御、使用有效的质量保证技术、采用安全编码标准。
这篇关于软件安全技术【太原理工大学】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!