基于软件安全技术的期末知识点整理
前言
第一次写,难免生疏,求谅解。
一、软件安全概述
1.1软件安全的重要性
1.1.1软件的定义
-
软件=程序+文档+数据
-
程序=数据结构+算法
-
对于软件安全,目前没有统一 的定义与标准。在国家标准中GB/T 30998—2014中给出的定义是:软件工程与软件保障的一个方面,他提供一种系统的方法来标识、分析和追踪对危害及具有危害性功能的软件缓解措施与控制。
在早期的定义中,著名安全专家加里.麦劳格提出的定义是:“在面零蓄意威胁 其可靠性的事件的情形下依然能够提供所需功能的能力”
在现代定义中,软件安全性被定义为“软件产品在指定适用范围环境下达到对人类、业务、财产或环境造成的损害的可接受的风险级别”。强调了软件安全与数据保密的密切联系,指出了软件安全问题的根源在于软件的设计缺陷。
1.2用信息安全基本要素解读软件安全
1)CIA三要素 -
保密性
-
完整性
-
可用性
2)其他安全属性 -
可认证性
-
授权
-
可审计性或可查性
-
抗抵赖性
-
可控性:指对信息安全风险的控制能力
-
可存活性:在面对攻击或灾难时能继续提供核心服务,解决方法时系统容侵、灾备与恢复
1. 3、软件安全面临的威胁
1)软件漏洞
内存泄漏,运行时消耗过大直至系统崩溃
多线程设计不周全致使系统因资源不足而锁死或死机
明文存储用户口令
登录安全验证强度太低
对用户没有输入限制,能被利用后执行系统命令等。
…
2)恶意代码
恶意代码指再未授权的情况下,以破坏计算机软硬件设备、窃取用户信息、干扰正常使用等为目的编写的软件或代码片段。
恶意代码包括 计算机病毒、蠕虫、特洛伊木马、后门、内核嵌套、间谍软件、恶意广告、流氓软件、逻辑炸弹、网络钓鱼、恶意脚本等。
3)软件侵权
计算机软件侵权行为主要有:
(1) 未经软件著作权人的同意而发表或者登记其软件作品。
(2) 将他人开发的软件当作自己的作品发表或者登记。
(3) 未经合作者酌同意将与他人合作开发的软件当作自己独立完成的作品发表或者登记。
(4) 在他人开发的软件上署名或者更改他人开发的软件上的署名。
(5) 未经软件著作权人或者其合法受让者的许可,修改、翻译其软件作品。
(6) 未经软件著作权人或其合法受让者的许可,复制或部分复制其软件作品。
(7) 未经软件著作权人及其合法受让者同意,向公众发行、出租其软件的复制品。
Q:什么是零日漏洞?什么是零日攻击?漏洞的生命周期指? -
A: - 零日漏洞又被叫做零时差攻击,是指被发现后立即被恶意利用的安全漏洞。通俗地说,即在安全补丁和缺陷暴露在同一天,就会出现相关的恶意程序。这种攻击往往具有很大的突发性与破坏性。
书上p25页:漏洞生命周期图(重点) -
这个详细,看这个:
A8_糖醋小排顾 -
漏洞、bug、恶意代码、可能会考各自的区别,这里就不列举了,大家自己下来看做了解就够了。
栈溢出(实验报告详细过一遍)
基于vc6.0探讨栈溢出
Q: 什么是缓冲区溢出漏洞? -
A:缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据覆盖在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患,操作系统所使用的缓冲区,又被称为"堆栈"。在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。
Q: 程序运行时的内存布局是怎样的? -
A:简单的回答就是:栈区,堆区,代码区,数据区。
详细请看: 程序内存布局
Q:在程序运行时,用来动态申请分配数据和对象的内存区域形式称? -
A:堆
Q:window的5种典型保护机制? -
A:GS,DEP,ASLR,SAFESEH,EMET
sql注入(描述详细的注入步骤,字符型和数字型,书上P81) -
sql注入实验()
Q:什么是sql盲注?它与一般的sql 注入有什么区别? -
A:盲注区别
xss跨站脚本攻击(结合实验报告) -
直接看书,P93-104,清晰明了,把饭喂嘴里。
-
详细请看:XSS攻击
CSRF跨站请求伪造漏洞(了解) -
CSRF
Q:常用的WEB三层架构是怎样的? -
A:用户视图层,业务逻辑层,数据访问层(P75)
Q:当在浏览器的地址栏中输入一个完整的QRL,再按ENTER直至页面加载完成,整个过程发生了什么? -
A:1)域名解析:浏览器会依次查询浏览器的DNS缓存、系统缓存、路由器缓存,如果没有找到,则一直查询到根域名服务器缓存,找到域名所对应的的IP地址。
2)TCP连接: 通过IP地址找到IP对应的服务器后,要求建立TCP连接。
3)HTTP连接:TCP连接成功后,浏览器开始向这个服务器发送一个HTTP请求。服务器接收到请求后开始进行处理,处理结束,返回一个响应包。
4)浏览器接收和处理:浏览器接收到来自服务器的响应后,开始解析和渲染接收到的内容并呈现给用户。
5)TCP断开连接:最后客户端 断开与服务器的TCP连接。
Q:简述CSRF原理和与XSS的不同(P104) -
A:P104
5.软件安全开发模型
软件生命周期 -
可行性研究:(是否做?)
-
需求分析:(做什么?)
-
概要设计:(怎么做?大概)
-
详细设计:(怎么做?详细)
-
编码:(开始做。)
-
测试:(检查。)
-
运行维护(售后服务)
典型软件开发模型
常见几种开发模型
额外一种(他说要考的):极限编程和敏捷开发p115页
SDL(了解) -
SDL
Q:SD3+C原则是SDL 模型实施的基本原则,试简述其内容? -
A:安全设计( Security by Design)。 软件的设计和实现需考虑如何保护其本身(和存储的信息)抵御外部攻击。
-
安全配置( Security by Default)。软件的缺省配置运行环境应考虑如何降低安全风险。重要的一个假设是软件自身代码总存在安全漏洞。那么,如何减少这些安全漏洞的危害?例如,是否可以运行于普通用户权限,而不需要管理员权限?是否可以缺省关闭某些高风险的代码模块?
-
安全部署( Security by Deployment)。软件需要提供相应的文档和工具,以帮助最终用户或管理员安全地使用。此外,更新应该易于部署。
-
沟通(Communication)。 软件开发人员应为产品漏洞的发现准备响应方案,并与系统应用的各类人员不断沟通,以帮助他们采取保护措施(如打补丁或部署变通办法)。
Q:微软的SDL模型与传统的瀑布模型的关系是怎样的? -
A:SDL模型由瀑布模型发展而来,在瀑布模型的各个阶段添加了安全活动和业务活动目标。
Q: 什么是敏捷SDL?敏捷SDL和经典SDL的主要区别是什么? -
A:敏捷软件开发生命周期(Agile Software Development Life Cycle,简称Agile SDL)是一种迭代式的软件开发生命周期,是以研发敏捷软件为主要目标的软件开发模式。它强调开发者和客户的密切沟通和连结,采用快速反馈的方法不断优化开发进度,并且以每次迭代的成果检验原型验证的方法获取客户反馈,从而进行产品进步和优化。
-
与经典SDL不同,敏捷SDL强调与客户的双向沟通,采用灵活的迭代节点来提供给客户定期反馈,以便更快调整软件研发流程。此外,敏捷SDL更多地侧重敏捷软件开发理念,尤其强调研发者和客户之间的即时交流。
软件安全需求分析
Q:软件安全需求分析的主要工作是什么?它和软件需求分析有什么区别与联系?P138 -
主要工作:
识别、确定、追踪和协调软件项目中涉及安全相关的功能性需求。 -
区别:
1、软件安全需求分析需要更多的安全知识,软件需求分析则不需要;
2、软件安全需求分析的过程中要考虑不同的安全攻击和防御,而软件需求分析可以忽略此类要素;
3、软件安全需求分析的核心是安全需求,而软件需求分析的核心是功能性需求。 -
联系:
1、软件安全需求分析是软件需求分析的一个衍生;
2、软件安全需求分析应以功能性需求分析为基础,以更严格的标准审视安全功能性方面的问题;
3、软件安全需求分析可以帮助从安全角度考虑性地确定系统需求,为软件系统更好地提供保护。
Q:软件设计和软件安全设计的联系和区别? -
A:联系:
- 软件设计和软件安全设计都是软件开发的重要环节,都需要经过系统化的规划、设计和实现。
- 软件设计和软件安全设计都需要考虑软件的可靠性、可维护性和可扩展性等方面的问题。
- 软件设计和软件安全设计都需要考虑用户需求和系统需求,以满足用户和系统的要求。
- 区别:
- 软件设计主要关注软件的功能实现和用户体验,而软件安全设计主要关注软件的安全性和防御能力。
- 软件设计主要关注软件的功能模块和数据结构的设计,而软件安全设计主要关注软件的漏洞和安全性问题的预防和处理。
- 软件设计主要关注软件的可扩展性和可维护性,而软件安全设计主要关注软件的安全性和防御能力的持续性。
Q:7-12 什么是威胁建模?试简述威胁建模的过程。
-
A:软件威胁建模是指,通过抽象的概念模型对影响软件系统的威胁进行系统的识别和评价。
Q: 软件安全设计阶段的主要工作是什么? -
A:1. 分析安全需求:从客户和市场的角度确定对系统的安全性要求,并根据安全性需求,分析系统的功能和性能等属性;
2.系统功能设计:确定(或者编辑)系统的安全逻辑功能,并根据系统安全性需求确定安全策略;
3.安全架构设计:对系统架构(包括硬件架构和软件架构)进行设计;
4.安全功能实现:编写实现安全功能的代码;
5.系统测试:对系统进行安全性测试,包括安全功能测试和安全弱点检测;
6.安全文档编写:编写安全文档,包括安全规约,安全方案,分析报告等。
Q: 软件受攻击面是指什么?举例说明软件设计时可以采取哪些策略来降低受攻击面。 -
A:软件受攻击面是指用户或其他程序及潜在攻击者能访问到的所有功能和代码的总合。
指的是攻击者有可能攻击软件时受到影响的潜在可以被攻击的部分。举例来说,攻击者可能会尝试绕过登录验证或在客户机传输数据时篡改数据,这些就是软件受攻击面所指的内容。
-
可以采取以下策略:
1.分离数据和代码:将数据和代码分离,减少攻击者对数据的篡改可能性。
2.监督权限:在软件的权限管理上应实施严格的监督,以防攻击者试图绕过登录验证。
3.事务一致性:实施事务一致性检查,以防止攻击者在客户机传输数据时篡改数据。
4.加密传输:在客户机间传输数据时,加密处理,防止攻击者通过篡改数据造成安全问题。
5.弱点扫描:定期对软件提供弱点扫描,以及及时修补系统漏洞,减少攻击者攻击软件时的可能性。
最小授权原则,权限分离原则(了解)
攻击树 -
攻击树是一种用于描述和分析攻击路径的图形化工具。它可以帮助安全专家识别和评估可能的攻击路径,并制定相应的防御策略。
-
攻击树通常由根节点、叶节点和中间节点组成。根节点表示攻击的目标,叶节点表示攻击者需要执行的具体攻击步骤,中间节点表示攻击者可能采取的不同攻击路径。
绘制攻击树的一般步骤包括:
-
确定攻击目标和攻击者的角色。
列出攻击者可能采取的不同攻击路径。
将每个攻击路径表示为一个节点,并将它们与其他节点连接起来形成树形结构。
为每个节点添加标签和描述信息,以便更好地理解攻击路径。
对攻击树进行分析和评估,确定可能的攻击路径和相应的防御策略
风险评估和STRIDE威胁的标准缓解措施列举 -
书本P186-187(重点)
Q:试列举几条安全编码原则,并举例说明这些原则的重要意义。
Q: Java提供的沙箱安全机制的核心思想是什么? -
A:本地环境中的代码能够访问系统中的关键资源,而从远程下载的程序则只能访问“沙箱“内的有限资源。
OPENSSL实验(应该不考,了解一下)
Q:软件测试与软件安全测试的区别? -
A:(书上P217)
Q:软件安全测试的方法
A:(书上P217图示)
代码分析
静态代码分析和动态代码分析
模糊测试
渗透测试
这一块搜到的都比较散乱,还是看书比较好。 -
定义和概念
-
方法
-
优缺点
-
过程
-
测试工具
DOCKER(自己看吧) -
DOCKER
Q: 试解释以下与恶意代码程序相关的计算机系统概念,以及各概念之间的联系与区别:进程、线程、动态链接库、服务、注册表。 -
A:进程是操作系统对一个正在运行的程序的一种抽象。它是一个动态的实体,它有生命周期。它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤销。反映了一个程序在一定的数据集上运行的全部动态过程。
线程是系统分配处理器时间资源的基本单元,或者说是进程内独立执行的一个单元执行流。
一个进程至少有一个线程,一个线程只能在一个进程的地址空间内活动。进程为线程提供了生存空间和线程所需要的其他资源
动态链接库DLL是共享函数库的可执行文件,它不能独立运行,只能通过其他运行的程序加载到内存中执行。同一个动态链接库可以同时被多个进程加载到内存中,并且执行DLL中的功能。
服务是windows系统在后台完成系统任务的程序,它与系统的核心相关并拥有各种权限。
注册表是windows中使用的中央分层数据库,用于存储一个或多个用户、应用程序和硬件设备配置系统所必须的信息。
Q:从危害、传播、激活和隐藏4个主要方面分析计算机病毒、蠕虫、木马、后门、Rootkit及勒索软件这几类恶意代码类型的工作原理。
Q:我国对于软件的知识产权有哪些法律保护途径?
-
A:《计算机软件保护条例》《中华人民共和国专利法》《商业秘密所有权保护法》
《中华人民共和国商标法》《互联网著作权行政保护办法》《信息网络传播权保护条例》
《移动互联网应用程序信息服务管理规定》