软件安全2024 期末复习

考试形式

一共十道简答题,书本——《软件安全技术(陈波)(Z-Library)》上的十章的课后题中每章选一题。

2024期末试卷回忆

  1. 什么是零日(0 day)漏洞?什么是零日(0 day)攻击?
  2. 试述软件漏洞的概念,谈谈软件漏洞与软件错误、软件缺陷、软件Bug的区别与联系。
  3. 分析攻击事件中XSS漏洞的原理。
  4. 什么是敏捷SDL?敏捷SDL和经典SDL的主要区别是什么?
  5. 软件安全需求的获取方法中的策略分解是指什么?
  6. 什么是最小授权原则?试举例说明软件设计时哪些措施是采用了最小授权原则。
  7. 安全编译是指在代码编译阶段采取的哪些安全措施?
  8. 什么是Rootkit?它与木马和后门有什么区别与联系?
  9. 所开发的软件中使用了带GPL许可证的开源软件,那么这个软件是不是就要开源?
  10. 试述软件版权的概念。针对软件的版权,有哪些侵权行为?有哪些保护措施?

第一章

  1. 零日漏洞、零日攻击:
  • 零日漏洞是指未被公开披露的软件漏洞,软件作者或厂商没来得及为漏洞打补丁或是给出建议解决方案,从而攻击者能够利用这种漏洞破坏计算机程序、数据及设备
  • 零日攻击是指利用零日漏洞开发攻击工具进行的攻击。
  1. 为什么必须对软件安全给予强烈关注?
  • 背景:1️⃣软件无处不在,信息化时代软件涉及即时通信、电子邮件、移动商务、智能家居等方面;2️⃣软件规模日益庞大,操作系统从百万行增长至亿行。
  • 问题:软件漏洞普遍存在,特别是零日漏洞以及不安全的软件配置等问题。
  • 结论:引起重视,有利于社会、经济和国防建设,国家竞争力。
  1. 零日漏洞反映了软件系统存在什么问题?
  • 零日漏洞是指未被公开披露的软件漏洞,软件作者或厂商来不及为漏洞打补丁或是给出建议解决方案。
  • 因此,零日攻击成功率高,后果严重,可见软件系统的脆弱性漏洞的隐秘性修复的滞后性
  1. 软件安全威胁可以分为哪几类?
  • 软件自身的安全(软件漏洞):软件生命周期中与安全相关的设计错误、编码缺陷及运行故障;
  • 恶意代码:在未被授权的情况下,以破坏软硬件设备、窃取用户信息、干扰用户正常使用、扰乱用户心理为目的而编制的软件或代码片段;
  • 软件侵权:计算机软件产品开发完成后复制成本低、复制效率高,所以往往成为版权侵犯的对象;
  1. 试谈谈对软件漏洞的认识,软件漏洞造成危害举例。
  • 软件漏洞是 软件生命周期中 与安全相关的 设计错误、编码缺陷及运行故障等。
  • 一方面,造成软件运行错误或崩溃 (内部):
    • 操作系统启动没有驱动而蓝屏
    • 内存泄漏导致内存消耗变大,直至崩溃;
    • 用户并发过高,程序运行错误;
    • 多线程资源死锁,死机;
  • 另一方面,被黑客利用,造成信息泄露和被攻击 (外部):
    • 明文存储口令,通过数据库获取;
    • 缓冲区溢出,被获取权限;
    • 安全验证不强,被冒充;
    • 输入检查不严格,被执行系统删除命令rm-rf;
  • 震网病毒,U盘|局域网,伊朗等核设施,我国500多万网民受攻击。
  1. 什么是恶意代码?有哪些恶意代码类型(除了计算机病毒)?
  • 恶意代码是未被授权情况下,破坏软硬件,窃取信息,干扰使用 的 软件或代码;
  • 举例:蠕虫、特洛伊木马、backdoor(柯南)、rookit、流氓软件、勒索软件等;
  1. 哪些行为侵犯软件版权(主体:软件著作权人)?
  • 未经许可,发表、发行、修改、翻译、出租、传播;
  • 复制;
  • 合作 -> 单独;
  • 转让权;
  1. 软件安全概念解释
  • 软件工程软件保障的一个方面,提供一种系统的方法来分析和追踪 对危害及具有危害性功能的软件缓解措施与控制。
  • 三大基本属性(CIA):保密性Confidentiality、完整性Integrity、可用性Availability。
  • 其他属性:可认证性、授权、可审计性等。
  1. 软件和软件工程概念解释
  • 软件:计算机程序、数据、文档;
  • 软件工程:用工程概念和方法开发维护软件,把好的管理技术和技术方法结合,经济地开发出高质量软件并有效维护。
  1. 软件安全工程较软件工程添加了哪些任务?
  • 开发安全的代码(C):开发
  • 安全环境(E):运行
  • 安全测试(T):测试
  • 网络安全(W):上线
  • 安全维护(M):定期
  • 通过安全标准(S)
  • 安全审计(A):评估
  1. 谈谈软件安全与软件危机、软件质量和软件质量保障、软件保障、软件可靠性、应用软件系统安全、可信软件和软件定义安全等概念的区别和联系。
  • 软件危机:软件开发维护中遇到的严重问题
  • 软件质量:软件与明确的和隐含的定义需求相一致的程度
  • 软件质量保证:建立一套规范方法,向管理层保证这套标准能被所有项目采用。
  • 软件保障:提供一个合理的确信级别,保证软件按预期执行,保证不被攻击。
  • 软件可靠性:规定时间内软件不引起系统失效的概率
  • 应用软件系统安全:应用系统在信息系统上层,其余部分安全首先要确保应用系统安全。
  • 可信软件:具有可信性的软件,可信指行为及结果可以预期,目标与实际相符。
  • 联系:以上都是为了确保软件可靠、可信,保证软件安全。
  1. 确保软件安全的基本思路是什么?软件安全技术涉哪些方面?
  • 思路1:事后挖掘漏洞,分析后修复,例如补丁、防火墙等。性价比低,差。
  • 思路2:事先分析可能原因,开发中避免。成本低,好。
  • 涉及哪些方面:
    • 加密和解密技术
    • 访问控制技术
    • 漏洞扫描修复技术
    • 入侵检测和防御技术
    • 安全审计技术

第二章

  1. 软件漏洞的概念,软件漏洞与软件错误、软件缺陷、软件bug的区别和联系。
  • 漏洞:存在于信息系统、系统安全过程、实现过程中的 容易被攻击 的弱点,往往是软件生命周期中 与安全相关的 设计错误和编码缺陷等。
  • 区别:
    • 软件错误:软件开发中,人为导致的,包括需求说明错误、设计错误、编码错误、测试错误、配置错误、文档错误等。
    • 软件缺陷/Bug:软件产品中,人为/客观。静态,激活会影响正常功能。
    • 软件漏洞隐蔽,体现软件脆弱性
  • 联系
    • 都是软件功能、行为 异常/错误,损害了可用性。
  1. 安全缺陷为什么需要考虑具体环境、具体对象?
  • 安全性功能是软件系统中的安全性需求,是否将安全性功能加入到项目需求中,还需要根据项目的具体情况考虑,如项目经费等。(例如是否使用HTTPS协议)
  1. 软件漏洞成因
  • 计算机体系结构导致必然性
  • 软件趋向大型化,复杂度⬆️软件漏洞⬆️;
  • 新设计没考虑安全性;
  • 使用场景更具威胁,网络;
  • 缺乏重视和知识;
  1. 软件漏洞如何分类分级管理?
  • 分类
    • 成因:内存破坏类、逻辑错误类、输入验证类等;
    • 位置:本地、远程;
    • 威胁类型:获取控制、获取信息、拒绝服务;
  • 分级
    • 严重、重要、中等、低;
    • 通用漏洞评分系统(CVSS),基本度量B、时间度量T、环境度量E 打分;
  1. 软件漏洞管理遵循的标准
  • CVE、CWE、CPE
  • CVSS、CWSS
  • OVAL
  1. 软件漏洞买卖合法吗?软件漏洞如何管控?
  • 不合法;
  • 如何管控:
    • 认清漏洞危害,加以重视;
    • 加强法律建设,完善漏洞管理规范;
    • 限制“白帽”行为;
  1. 漏洞发布的标准过程:
  • 识别漏洞:专家、第三方;
  • 评估漏洞:漏洞是咋样的?
  • 修复漏洞:补丁、热更新;
  • 发布信息:跟用户讲;

第四章

  1. 常用的Web三层架构是怎样的?
  • 用户视图层(View)
  • 业务逻辑层(Control)
  • 数据访问层(Model)
  1. 当在浏览器输入完整URL,再按Enter直至页面加载完成,发生了什么?
  • DNS解析,TCP连接,HTTP请求,处理请求返回HTTP响应,页面渲染,关闭连接。
  1. 根据OWASP2013发布的Web安全十大威胁报告,web漏洞分为哪几大类型?
  • 注入

  • 跨站脚本(XSS);

  • 跨站请求伪造(CSRF);

  • 失效的身份认证与会话管理;

  • 不安全的直接对象引用;

  • 错误的安全配置;

  • 敏感数据泄漏;

  • 缺失功能级访问控制;

  • 使用有漏洞组件;

  • 未验证的重定向和转发;

  1. 试将Web典型漏洞根据客户端和服务器端来划分,并根据漏洞原理阐述这样划分的理由。
  • Web客户端
    • XSS(跨站脚本攻击):Web页面插入恶意js代码,浏览网页的时候执行攻击;
    • CSRF(跨站请求伪造):获取用户信息(cookie)伪造请求,利用身份攻击;
  • Web服务端
    • Sql注入:恶意数据插入sql查询,提交后进行非授权操作;
    • 弱口令:文件上传中,没有验证后缀,上传恶意文件后远程控制服务器;
    • 未加密:用户名密码等字段不加密,被窃听截获;
  1. 简述SQL注入漏洞的原理?为什么SQL注入漏洞多年来一直名列Web安全漏洞榜首?
  • 原理:利用Web应用程序,恶意数据插入SQL查询,提交到后台数据库执行非授权操作。
  • 危害:
    • 广泛性,基于SQL的数据库软件和相连的程序;
    • 原理简单,教程多;
    • 防范困难;
  1. 防范SQL注入漏洞的基本方法有哪些?重点谈谈在代码开发层面的安全措施。

    • 使用强类型语言,java,C#;
    • 避免使用拼接动态SQL语句,采用参数化查询接口;
    • 服务端验证输入,过滤错误输入
  2. 什么是SQL盲注?与一般的SQL注入有什么区别?

  • 盲注:在sql注入过程中,sql执行完的数据不返回前端,此时要利用特定方法判断。
  • 一般SQL注入,攻击者看到执行结果;盲注,攻击者无法显式看到,甚至不知道是否执行。
  1. 简述XSS跨站脚本漏洞的原理。
  • Web页面插入恶意js代码,浏览网页的时候执行攻击。
  1. 简述CSRF跨站请求伪造漏洞的原理,并比较其与XSS漏洞的不同。
  • 获取用户信息(cookie)伪造请求,利用身份攻击应用程序;
  • XSS目的是在客户端执行脚本,CSRF目的是在web应用中执行操作;
  1. 什么是命令执行漏洞?什么是文件包含漏洞?什么是文件上传漏洞?
  • 命令执行漏洞:将恶意代码提交给服务器,执行系统命令;
  • 文件包含漏洞:注入一段脚本或代码,让服务器执行;
  • 文件上传漏洞:用户上传可执行脚本文件,获得服务器执行能力;

第五章

  1. 什么是软件生命周期?包含哪几个阶段?
  • 软件的设计、开发、实施、维护等一系列过程;
  • 软件需求分析、软件设计、软件编码、软件测试、软件部署、维护等阶段;
  1. 典型的软件开发模型?有什么区别与联系?
  • 瀑布模型、螺旋模型、敏捷模型;
  • 联系:都是软件开发模型;
  • 区别:迭代次数与时机不同,开发时间要求不同;
  1. SDL+C原则是SDL模型实施的基本原则,试简述其内容。
  • 安全设计(Security by Design):软件设计需考虑保护自己不受攻击;
  • 安全配置(Security by Default):软件配置应该考虑降低安全风险;
  • 安全部署(Security by Deployment):需提供文档和工具帮助用户安全使用;
  • 沟通(Communication)软件开发人员应与各类人员进行沟通;
  1. 微软的SDL模型与传统的瀑布模型的关系是怎样的?
  • SDL模型由瀑布模型发展而来,在瀑布模型的各个阶段添加了安全活动和业务活动目标。

第六章

  1. 为什么要进行安全需求分析?通常对软件系统有哪些安全需求?
  • 目的:为了实现信息安全目标,软件系统应该做什么,才能有效提高软件产品的安全质量,减少漏洞。
  • 外部安全需求:法律法规等遵从性需求。
  • 内部安全需求:组织内部需要遵守的规则;与软件业务功能相关的安全需求。
  1. 软件安全需求分析的主要工作是什么?它和软件需求分析有什么区别和联系?
  • 主要工作:识别、确定、追踪和协调软件项目中涉及安全相关的功能性需求。
  • 区别:
    • 需要安全知识;
    • 要考虑不同的安全攻击和防御;
    • 核心是安全需求|核心是功能性需求;
  • 联系:
    • 是软件需求分析的衍生;
    • 以功能性需求分析为基础,重点关注安全方面;
    • 安全角度考虑系统需求,提供更好保护;
  1. 网络安全等级保护制度分为哪些等级?每级都有什么要求?
  • 第一级,属于一般网络,一旦遭受破坏,公民,法人和其他组织。
  • 第二级,属于一般网络,一旦遭受破坏,公法组,社会秩序和公共利益。
  • 第三级,属于重要网络,一旦遭受破坏,公法组,社会,国家安全。
  • 第四级,属于特别重要网络,一旦遭受破坏,社会!,国安!
  • 第五级,属于极其重要网络,一旦遭受破坏,国安!!!
  1. 软件安全需求的获取方式有哪些?
  • 头脑风暴:无限制的自由联想和讨论;
  • 问卷调查和访谈;
  • 政策分解:将组织需要遵守的内部和外部政策分解成详细的安全需求;
  • 数据分类:根据数据重要性分类,也就是敏感级别;
  • 主/客体关系矩阵:角色和组件的二维表示;

第七章

  1. 软件设计阶段的主要工作是什么?
  • 定义数据结构、算法确定、架构设计、接口设计、模块分解、数据库设计等。
  1. 软件安全设计阶段的主要工作是什么?
  • 分析安全需求
  • 系统功能设计
  • 安全架构设计
  • 安全功能实现
  • 系统测试
  • 安全文档编写
  1. 什么是最小授权原则?试举例说明软件设计时哪些措施是采用了最小授权原则。
  • 最小授权原则:系统仅授予实体完成规定任务所必需的最小权限,持续时间也尽量短。最小授权原则可使无意识的、不需要的、不正确的特权使用可能性降到最低,保证安全
  • 实例:将超级用户的权限划分为一组细粒度权限,分别授予不同的系统操作员/管理员。
  1. 什么是权限分离原则?试举例说明软件设计时哪些措施是采用了权限分离原则。
  • 权限分离原则:功能设计为需要两个或以上条件才能实现,防止出问题。是最小权限原则的体现。
  • 实例:导弹发射要由至少两个人发出正确指令才能发射,不允许程序员检查自己的代码。

第八章

  1. 软件安全编码阶段的主要工作有哪些?
  • 选择安全的编程语言、版本(配置)管理、代码检测、安全编译
  1. 什么是类型安全语言?哪些程序开发语言是类型安全的?
  • 提供类型安全保障机制的语言是类型安全语言,本质上是不允许对未授权的内存区域访问。
  • Java,C#。
  1. 试列举几条安全编码原则,并举例说明这些原则的重要意义。
  • 验证输入:对于不可信任的数据源输入进行验证;
  • 留意编译器警告:不仅解决代码中错误,也解决所有警告;
  • 安全策略的架构和设计:创建一个软件架构来实现和增强安全策略;
  • 保持简单性:程序越复杂,越容易出错;
  • 默认拒绝:访问权限默认拒绝,除非被允许;
  • 坚持最小权限原则;
  1. 为什么要避免使用C语言中原有的字符串函数?所谓的安全字符串函数解决了原有C字符串函数的什么安全漏洞?
  • C语言原有的字符串函数有可能破坏接受字符串的缓冲区,导致程序出错或者数据丢失。
  • 会检查字符串的长度,用空格截断字符串,或扩充缓冲区大小,保证数据完整性。
  1. Java沙箱安全机制的核心思想是什么?
  • 控制访问权限,远程下载的程序只能访问“沙箱”中有限的资源。
  1. 试谈谈Java提供的安全机制。
  • 语言层安全(关键字、类型规则);
  • 字节码层安全(类加载器,字节码验证器);
  • 应用层安全(安全管理器);

第十二章

  1. 从危害、传播、激活和隐藏4个主要方面分析计算机病毒、蠕虫、木马、后门、Rookit及勒索软件这几类恶意代码类型的工作原理。
  • 病毒 蠕虫 木马 后门 Rookit 勒索软件
    危害 破坏系统机密性、完整性、可用性 网络堵塞;降低性能;反复性 非法用户进入、控制、破坏系统 一个访问系统或控制系统的通道 攻击者获得访问权限 劫持用户资产或资源并勒索
    传播 移动存储/网络 自我复制/局域网 诱骗用户上当,植入 垃圾邮件、漏洞、社交网络等
    激活 满足特定条件 自动化,利用系统漏洞 用户操作 用户操作 开发者调试
    隐藏 寄生在别的有用的程序或文档上 实体隐藏模块 难以确定具体位置 修改操作系统软件
    例子 区块链病毒 熊猫烧香 灰鸽子 硅晶后门 震网病毒 ILOVEYOU爱虫病毒
  1. 病毒程序与蠕虫程序的主要区别有哪些?
  • 漏洞利用型蠕虫与病毒根本区别在于其是否需要人为干预来触发传播,而在很多其他方面,例如个体独立性、破坏性、隐藏性等,二者区别并不大。
  • 计算机病毒的关键技术是伪装,通过诱导、欺骗用户的手段引导用户的误操作从而实现感染,用户的行为直接决定病毒的感染是否成功。
  • 蠕虫在其感染过程中并不需要用户的主动行为,其感染过程是一种自动化、智能化的过程。
  • 蠕虫的重要特征:对用户的非依赖性。而实现这一功能的基础便是系统漏洞
  1. 恶意代码防范的基本措施包括哪些?
  • 加强法制宣传;
  • 健全管理制度;
  • 开展面向恶意代码检测的软件可信验证;

第十三章

  1. 试从软件的权益处置角度,谈谈对商业软件、免费软件、共享软件(或试用软件)、闭源软件、自由软件以及开源软件概念的理解。

    • 商业软件:商业软件是作为商品进行销售获得收益的软件;
    • 免费软件:不需要以金钱购买而免费得到或试用的软件;
    • 共享软件(试用软件):以“先试用后付费”的方式销售的享有版权的软件;
    • 闭源软件(专有软件):源代码在获取、使用和修改上收到特定限制的软件,简单地说就是封闭源代码的软件;
    • 自由软件:自由软件是一类可以不受限制地自由使用、复制、研究、修改和分发的软件;
    • 开源软件:开放源代码、且许可证符合OSI对开源软件的定义并通过OSI认证的软件;
  2. 自由软件赋予软件使用者哪些“自由”?

    1. 不论目的如何,有运行(Run)该软件的自由;
    2. 有研究(Study)该软件的自由,以及按需改写该软件的自由;
    3. 有重新发布(Redistribute)该软件的自由;
    4. 有改进(Improve)该软件的自由,以及向公众发布(Release)改写版的自由;
  3. 简述开源软件与自由软件的联系与区别。

    • 概念不同:自由软件是一个比开源软件更严格的概念,因此所有自由软件都是开放源代码的,但不是所有的开源软件都能被称为自由软件。
    • 价值观不同:在追求自由、分享精神的过程中,自由软件始终将自由作为道德标准,而开源软件则更加注重软件的发展。自由软件从许可证即法律角度保证了自由软件在演化过程中将始终保持其“自由性”,从而保证其任何版本都可以为任何人使用、学习和改进,开源软件则更加注重与软件产业的结合,对商业化更加友好。
  4. 列举常见的开源软件,查找并了解这些开源软件的许可证内容。

    • Linux内核
      • 许可证: GPL v2
      • 概述: 任何基于Linux内核的修改或衍生作品必须开源且免费,并且继续保持GPL v2许可证。
    • Apache HTTP Server
      • 许可证: Apache License 2.0
      • 概述: 允许用户自由使用、修改、分发代码,无需公开源代码,包括专利许可,需要注明修改内容。
    • Vue.js
      • 许可证MIT License
      • 概述:允许几乎任何行为,只需保留原始的版权声明和许可证。没有明确的专利许可。
  5. 所开发的软件中使用了带GPL许可证的开源软件,那么这个软件是不是就要开源?

    • 不是。GPL规定只要在一个软件中使用了GPL许可证产品,则该软件产品必须也采用GPL许可证,即必须也是开源和免费的。但是,如果用户(包括企业用户)对于GPL软件不再发布,就不受此约束。

第十四章

  • 根据我国法律,软件著作权人有哪些权利?在日常学习和生活中,有哪些违反软件著作权的行为?

    • 权利:
      • 发表权,署名权,修改权,保护作品完整权,复制权;
    • 侵权行为:
      • 剽窃,非法复制,擅自使用,擅自许可他人使用,擅自转让,合作=>自己;
  • 试述软件版权的概念。针对软件的版权,有哪些侵权行为?有哪些保护措施?

    • 概念:软件版权是软件知识产权的一部分,指软件著作权;
    • 侵权行为:软件盗版;逆向工程;信息泄露;
    • 保护措施:
      • 基于硬件:软件狗,对发行介质进行保护;
      • 基于软件:软件水印,注册验证,软件加壳,虚拟机保护;
  • 软件版权保护的目标有哪些?它与软件保护的目标有什么联系与区别?

    • 目标:
      • 防软件盗版;
      • 防逆向工程;
      • 防信息泄露;
    • 区别与联系:
      • 软件版权保护目标是软件保护目标的子集
      • 软件版权保护的许多措施同样可以用于软件保护。

参考

  • 本期末复习转自 Chipsy 和 Effy 。