第一章(12) #
1.什么是零日(0day)漏洞?什么是零日(0day)攻击?
零日漏洞是指未被公开披露的软件漏洞,没有给软件的作者或厂商以时间去为漏洞打补丁或是给出解决方案建议,从而使攻击者能够利用这种漏洞破坏计算机程序、数据及设备。注意,零日漏洞并不是指软件发布后被立刻发现的漏洞。
利用零日漏洞开发攻击工具进行的攻击称为零日攻击。零日攻击所针对的漏洞由于软件厂商还没有发现或是还未提供相应的补丁,所以零日攻击的成功率高,造成的破坏大。
2.为什么说面对当前的全球网络空间安全威胁,必须对软件安全给予强烈关注?
当前,软件已融入人们日常生活的方方面面,已经成为国家和社会关键基础设施的重要组成部分,因此,软件的安全关乎信息系统的安全,关乎关键基础设施的安全,关乎个人安全乃至社会和国家的安全。
软件已经渗透到社会、经济与国防建设的方方面面,是信息时代所依赖的重要技术与手段,其安全直接关系到国计民生与国家安全,因此,软件安全关乎国家竞争力。
3.当前,黑客为了能够有效达到窃取数据、破坏系统的目的,常常通过挖掘或是购买零日漏洞,开发针对零日漏洞的攻击工具,零日漏洞威胁实际上反映了软件系统存在的一个什么问题?
软件漏洞普遍存在,零日漏洞成为主要安全威胁。
现在大多数的网络攻击利用了软件(尤其是应用软件)的漏洞。根据统计分析,绝大多数成功的攻击都是针对和利用已知的、未打补丁的软件漏洞和不安全的软件配置,而这些软件安全问题都是在软件设计和开发过程中产生的。
4.根据本书的介绍,软件安全威胁可以分为哪几类?
软件自身的安全(软件漏洞)、恶意代码及软件侵权
5.试谈谈对软件漏洞的认识,举出软件漏洞造成危害的事件例子。
软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等。
一方面,软件漏洞可能会造成软件在运行过程中出现错误结果或运行不稳定、崩遗等现象,甚至引起死机等情况,举例如下:
- 操作系统启动时发现未能驱动的硬件而导致蓝屏。
- 应用软件由于存在内存泄露,运行时系统内存消耗越来越大,直至最后崩溃。
- 网络软件由于对用户并发数考虑不周,导致用户数量超出预计,程序运行错误。
- 多线程软件对线程同步考虑不周,导致系统因资源死锁而死机。
另一方面,软件漏洞会被黑客发现和利用,进而实施窃取隐私信息、甚至破坏系统等攻击行为,举例如下:
- 软件使用明文存储用户口令,黑客通过数据库漏洞直接获取口令明文。
- 软件存在缓冲区溢出漏洞,黑客利用溢出攻击而获得远程用户权限。
- 软件对用户登录的安全验证强度太低,黑客假冒合法用户登录。
- 软件对用户的输入没有严限制,被黑客利用后执行系统删除命令,从而导致系统被破坏。
6.什么是恶意代码?除了传统的计算机病毒,还有哪些恶意代码类型?
恶意代码(Malicious Sofiware, Malware)是在未被授权的情况下,以破坏软硬件设备、窃取用户信息、干扰用户正常使用、扰乱用户心理为目的而编制的软件或代码片段。
恶意代码包括计算机病毒(Computer Vinus)、蠕虫(Worm)、特洛伊木马(TrojanHorse)、后门 (Back Door)、内核套件(Rootkit)、间谍软件(Spyware)、恶意广告(Dishonest Adware)、流软件(Crimeware)、逻辑炸弹(Logic Bomb)、僵尸网络(Botnet)、网络钓鱼(Phishing)、恶意脚本(Malice Script)及垃圾信息(Spam)等恶意的或令人讨厌的软件及代码片段。近几年危害甚广的勒索软件(Ransomware)也屈于恶意代码范畴。
7.针对软件的版权,有哪些侵权行为?
- 未经软件著作权人许可,发表、登记、修改或翻译其软件。
- 将他人软件作为自己的软件发表或者登记,在他人软件上署名或者更改他人软件上的署名。
- 未经合作者许可,将与他人合作开发的软件作为自己单独完成的软件发表或者登记。
- 复制或者部分复制著作权人的软件。
- 向公众发行、出租或通过信息网络传播著作权人的软件。
- 故意避开或者破坏著作权人为保护其软件著作权而采取的技术措施。
- 故意删除或者改变软件权利管理电子信息。
- 转让或者许可他人行使著作权人的软件著作权。
本题类似14章第2、3题,在其中选几条记住即可
8.谈谈对软件安全概念的理解。
(软件安全是)软件工程与软件保障的一个方面,它提供一种系统的方法来标识、分析和追踪对危害以及具有危害性的功能(例如数据和命令)的软件缓解措施与控制。
软件的安全性是软件产品在指定使用环境下达到对人类、业务、软件、财产或环境造成损害的可接受的风险级别的能力。这里的风险常常由软件内部和外部质量组成中的功能性、可靠性、易用性或维护性中的缺陷所致。
9.简述软件和软件工程的概念。
- 计算机程序、规则和可能相关的文档。
- 软件工程是指,采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,从而经济地开发出高质量的软件并有效地进行维护。概括地说,软件工程是指导计算机软件开发和维护的一门工程学科,是技术与管理紧密结合形成的工程学科。
10.对照一般软件工程的概念,软件安全工程主要增添了哪些任务?
- 一般软件工程中的软件生命周期包括需求分析、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级、废弃等多个阶段,每个阶段都要定义、审查并形成文档以供交流或备查。
- 软件安全工程增添了软件安全开发、软件安全检测及软件版权保护等任务,关注的是如何运用系统安全工程的思想,以软件的安全性为核心,将安全要素嵌入软件开发生命周期的全过程,软件安全开发方法抛弃了传统的先构建系统,再将安全手段应用于系统的构建模式,而是保留了采用风险管理、身份认证、访问控制、数据加密保护和入侵检测等传统安全方法,将安全作为功能需求的必要组成部分,在系统开发的需求阶段就引入安全要素,同时对软件开发全过程的每一个阶段实施风险管理。
根据软件开发生命周期的阶段划分,软件安全开发涉及以下几个方面的内容:
- 软件安全需求分析
- 软件安全设计
- 软件安全编码
- 软件安全测试
- 软件安全部署
11.谈谈软件安全与软件危机、软件质量和软件质量保证、软件保障、软件可靠性、应用软件系统安全、可信软件和软件定义安全等概念的区别和联系
-
软件危机,也称为软件萧条或软件困扰,是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件存在安全漏洞、恶意软件泛滥及软件版权保护等安全问题还只是软件危机的冰山一角。
-
概括地说,软件质量就是软件与明确的和隐含的定义的需求相一致的程度。具体地说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准,以及所有专业开发的软件都应具有的和隐含特征相一致的程度。使用质量的属性分类为4个特性:有效性、生产率、安全性和满意度。由此可见,安全性是软件质量的一个重要属性。
- 软件质量保证是建立一套有计划、有系统的方法,向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。
-
通常软件保障包括软件质量、软件安全性、软件可靠性、软件验证与确认,以及独立验证与确认等学科领域。软件保障,也有译为软件确保,是用于提高软件质量的实践、技术和工具。软件保障目前包括4个核心服务,即软件的安全性、保险性、可靠性和生存性。
-
软件可靠性定义如下:
- 在规定条件下,在规定的时间内软件不引起系统失效的概率。该概率是系统输入和系统使用的函数,也是软件中存在的缺陷的函数。系统输入将确定是否会遇到已存在的缺陷(如果缺陷存在的话)。
- 在规定的时间周期内所述条件下程序执行所要求的功能的能力。
- 由上述定义可知,软件可靠性不但与软件存在的缺陷和/或差错有关,而且与系统输入和系统使用有关。提高软件可靠性就是要减少软件中的缺陷或错误,提高软件系统的健壮性。因此,软件可靠性通常涉及软件安全性的要求,但是软件可靠性要求不能完全取代软件安全性的要求。
-
应用软件系统位于信息系统的上层,是在信息系统的硬件系统、操作系统、网络系统和数据库管理系统的支持下运行的,是构成信息系统的最重要部分,是信息系统中直接为用户提供服务的部分。
-
可信性是在正确性、可靠性、安全性、时效性、完整性、可用性、可预测性、生存性及可控性等众多概念的基础上发展起来的一个新概念,是客观对象的诸多属性在人们心目中的一个综合反映。
-
SDS(软件定义安全)是适应SDN复杂网络的安全防护新思想,基本原理是将物理及虚拟的网络安全设备预期接入模式、部署方式和实现功能进行解耦,底层抽象为安全资源池里的资源,顶层统一通过软件编程的方式进行智能化、自动化的业务编排和管理,以完成相应的安全功能,从而实现一种灵活的安全防护。SDS可以分解为软件定义流量、软件定义资源和软件定义威胁模型,三个举措环环相扣,形成一个动态、闭环的工作模型。
-
确保软件安全的基本思路是什么?软件安全涉及的技术主要有哪些方面?
①软件安全开发关注的是如何运用系统安全工程的思想,以软件的安全性为核心,将安全要素嵌入软件开发生命周期的全过程,有效减少软件产品潜在的漏洞数量或控制在一个风险可接受的水平内,提高软件系统的整体安全性。
②软件安全开发方法抛弃了传统的先构建系统,再将安全手段应用于系统的构建模式,而是保留了采用风险管理、身份认证、访问控制、数据加密保护和入侵检测等传统安全方法,将安全作为功能需求的必要组成部分,在系统开发的需求阶段就引入安全要素,同时对软件开发全过程的每一个阶段实施风险管理,以期减少每一个开发步骤中可能出现的安全问题,最终提高软件产品的本质安全性。
第二章(7) #
1.试述软件漏洞的概念,谈谈软件漏洞与软件错误、软件缺陷、软件Bug的区别与联系
软件错误(Eror)是指在软件开发过程中出现的不符合期望或不可接受的人为差错,其结果将可能导致软件敏陷的产生。在软件开发过程中,人是主体,难免会犯错误。软件错误主要是一种人为错误,相对于软件本身而言,是一种外部行为。
软件缺陷(Bug/Defect)是指由于人为差错或其他客观原因,导致软件隐含能导致其在运行过程中出现不希望或不可接受的偏差,例如软件需求定义,以及设计、实现等错误。在这种意义下,软件缺陷和较件错误有着相近的含义。当软件运行于某一特定的环境条件时出现故障,这时称软件缺陷被激活。软件缺陷存在于软件内部,是一种静态形式
软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等。漏洞是贯穿软件生命周期各环节的。
-
软件错误:在软件开发过程中 人为差错 可能会导致软件缺陷的产生。人为错误 外部行为
-
软件缺陷:由于人为差错和各种其他客观原因,导致软件隐含(存在)在运行过程中出现…的偏差。存在于软件内部 静态形式
软件Bug=软件缺陷
2.为什么说安全缺陷或者说Bug是一个需要考虑具体环境、具体对象的概念?
需要说明的是,安全缺陷或者说 Bug 是一个需要考虑具体环境、具体对象的概念。举例来说,一般的 Web 应用程序没有使用 HTTPS 协议(超文本传输安全协议)来加密传输的状态并不能算作是 Bug,而对于网上银行或电子商务等应用,不采用HTTPS协议进行加密传输就应当算作一个 Bug。如同使用 HTTPS 来对传输内容进行加密那样,积极主动地加强安全性的措施,也就是增加安全性功能,可以尽可能地消除Bug。安全性功能实际为软件系统的一种需求,所以也被称为安全性需求。是否将安全性功能加入到项目需求中,还需要根据项目的具体情况考虑,如项目经费等。
3.试分析软件漏洞的成因。
- 计算机系统结构决定了漏洞的必然性
- 软件趋向大型化,第三方扩展增多
- 新技术、新应用产生之初即缺乏安全性考虑
- 软件使用场景更具威胁
- 对软件安全开发重视不够,软件开发者缺乏安全知识
4.软件漏洞如何分类分级管理?
1)软件漏洞分类
通常可以从漏洞利用的成因、利用的位置、和对系统造成的直接威胁进行分类。
- 基于漏洞成因的分类:内存破坏类、逻辑错误类、输入验证类、设计错误类和配置错误类。
- 基于漏洞利用位置的分类
- 本地漏洞。即需要操作系统级的有效帐号登录到本地才能利用的漏洞,主要构成为权限提升类漏洞,即把自身的执行权限从普通用户级别提升到管理员级别。
- 远程漏洞。即无需系统级的帐号验证即可通过网络访问目标进行利用的漏洞。
- 基于威胁类型的分类
- 获取控制。即可以导致劫持程序执行流程,转向执行攻击者指定的任意指令或命令,控制应用系统或操作系统。威胁最大,同时影响系统的机密性、完整性,甚至在需要的时候可以影响可用性。主要来源:内存破坏类。
- 获取信息。即可以导致劫持程序访问预期外的资源并泄露给攻击者,影响系统的机密性。主要来源:输入验证类、配置错误类漏洞。
- 拒绝服务。即可以导致目标应用或系统暂时或永远性地失去响应正常服务的能力,影响系统的可用性。主要来源:内存破坏类、意外处理错误类漏洞。
2)软件漏洞分级
对漏洞进行分级有助于人们对数目众多的安全漏洞给予不同程度的关注并采取不同级别的措施。
-
按照漏洞严重等级进行分级
-
利用通用漏洞评分系统(CVSS)进行分级,使用三种度量评价标准对一个已知的安全漏洞危害程度进行打分。
- 基本度量:用于描述漏洞的固有基本特性,这些特性不随时间和用户环境的变化而改变。
- 时间度量:用于描述漏洞随时间而改变的特性,这些特性不随用户环境的变化而改变。
- 环境度量:用于描述漏洞与特殊用户环境相关的特性。
6.软件漏洞买卖合法吗?软件漏洞应当如何管控?
不合法
不管是讲道义还是讲法律,对漏洞的有效管控已经是势在必行。漏洞的发现和报告机制、潺洞的交易、漏洞的利用都应该有着法律的界限,相应的管理也带要与时俱进。
国外政府高度重视对漏洞资源的管控,通过建立完善的国象漏洞管理体系,将漏洞资源纳人国家管控机制。我国政府也高度重视对信息安全漏洞的管控,通过政策法规和专业机构,形成了一套管控体系。
为了应对日益增加的漏洞,增加自身产品和服务的安全性,许多厂商纷纷成立安全应急响应部门(SRC),向社会收录旗下相关产品及业务的安全漏洞和威胁信息,并在第一时间进行处置,及时消除安全隐患。各厂商应急响应部门的迅速建立和发展,打通了厂商与"白帽"之间的正规渠道,相应的奖励也使得更多的"白帽"关注并协助厂商发现漏洞与风险,很大程度上提高了厂商的信息安全程度。
7.厂商发布漏洞信息的标准过程是怎样的?
根据安全漏洞生命周期中漏洞所处的发现、利用、修复和公开4个阶段,该标准将漏洞管理行为分为预防、收集、消减和发布等实施活动。
- 在漏洞预防阶段,厂商应采取相应手段来提高产品安全水平;用户应对使用的计算机系统进行安全加固、安装安全防护产品和开启相应的安全配置。
- 在漏洞收集阶段,漏洞管理组织与漏洞管理中涉及的各方进行沟通与协调,广泛收集并及时处置漏洞;厂商应提供接收漏洞信息的渠道,确认所提交漏洞的真实存在性,并回复报告方。
- 在漏洞消减阶段,厂商依据消减处理策略在规定时间内修复漏洞,依据漏洞类型和危害程度,优先开发高危漏洞的修复措施。同时,厂商应保证补丁的有效性和安全性,并进行兼容性测试;用户应及时跟踪公布的漏洞信息和相关厂商的安全公告,进行及时修复。
- 在漏洞发布阶段,漏洞管理组织应在规定时间内发布漏洞及修复措施等信息(參见《信息安全技术 安全漏洞标识与描述规范(CB/T 28458—2012)》);厂商应建立发布渠道,发布漏洞信息及修复措施,并迪知用户。
第三章(6) #
1.程序运行时的内存布局是怎样的?
2.在程序运行时,用来动态申请分配数据和对象的内存区域形式称为什么?
堆区
3.什么是缓冲区溢出漏洞?
缓冲区溢出漏洞就是在向缓冲区写入数据时,由于没有做边界检查,导致写入缓冲区的数据超过预先分配的边界,从而使溢出数据覆盖在合法数据上而引起系统异常的一种现象。
4.简述Windows安全漏洞保护的基本技术及其存在的问题。
(1)栈溢出检测选项/GS
调用函数时将一个随机生成的秘密值(安全Cookie)存放在栈上,当函数返回时,检查这个堆栈检测仪的值是否被修改,以此判断是否发生了栈溢出。
对抗/GS保护:围绕Cookie值展开的。猜测Cookie值、通过同时替换栈中的Cookie和Cookie副本、覆盖SEH绕过Cookie检查、覆盖父函数的栈数据绕过Cookie检查。
(2)数据执行保护DEP(Data Execution Prevention)
通过使可写内存不可执行或使可执行内存不可写来消除类似的威胁。
对抗方法:
- 利用ret-to-libc执行命令或进行API调用,如调用WinExec实现执行程序。
- 将包含Shellcode的内存页面标记为可执行,然后再跳过去执行。
- 通过分配可执行内存,再将Shellcode复制到内存区域,然后跳过去执行。
- 先尝试关闭当前进程的DEP保护,然后再运行Shellcode。
(3)地址空间布局随机化ASLR
通过对堆、栈、共享库映射等线性区域布局的随机化,增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止漏洞利用的目的。
ASLR机制的缺陷和绕过方法:
- 对本地攻击者无能为力
- 造成内存碎片的增多`
- 利用没有采用/DYNAMICBASE选项保护的模块做跳板
(4)安全结构化异常处理SafeSEH
SafeSEH保护机制的作用是防止覆盖和使用存储栈上的SEH结构。
其实现原理是,编译器在链接生成二进制IMAGE时,把所有合法的异常处理函数的地址解析出来制成一张安全的SEH表,保存在程序的IMAGE数据块里面,当程序调用异常处理函数时会将函数地址与安全SEH表中的地址进行匹配,检查调用的异常处理函数是否位于该表中。
对抗SafeSEH机制的方法:
利用未启用SafeSEH的模块作为跳板进行绕过;
利用加载模块之外的地址进行绕过。
(5)增强缓解体验工具包EMET
EMET的基本保护功能介绍如下。
增强型DEP;SafeSEH的升级版——SEHOP;强制性ASLR;HeapSpray防护。
5.本章介绍了Windows的5种典型保护机制,但是每一种保护机制仍然面临着缺陷和许多对抗的方法,这说明了什么问题?应当如何应对这一问题?
这些问题表明,安全是一个动态的过程,而不是一次性的解决方案。应对这些问题的方法包括:
- 定期更新系统: 及时应用操作系统和应用程序的安全更新,以修补已知漏洞。
- 使用最新的安全技术: 持续关注和采用最新的安全技术,以提高系统的抵御能力。
- 网络安全意识培训: 提高用户和管理员的网络安全意识,以减少社会工程学攻击的成功率。
- 监控和响应: 实施有效的监控和响应机制,及时检测异常活动并采取措施应对。
- 多层次的安全防御: 组合使用多个安全解决方案,如防火墙、入侵检测系统、终端保护软件等,以提高整体安全性。
6.可以将内存访问错误大致分成以下几类:数组越界读或写、访问未初始化内存、访问已经释放的内存和重复释放内存或释放非法内存。下面的代码集中显示了上述问题的典型例子。这个包含许多错误的程序可以编译连接,而且可以在很多平台上运行。但是这些错误就像定时炸弹,会在特殊配置下触发,造成不可预见的错误。这就是内存错误难以发现的一个主要原因。试分析以下代码中存在的安全问题
#include <iostream>
using namescpace std;
int main() {
char* str1 = "four";
char* str2 = new char[4]; //not enough space
char* str3 = str2;
cout<<str2<<endl; // UMR
strcpy(str2,str1); //ABW
cout<<str2<<endl; //ABR
delete str2;
str2[0] += 2; //FMR and FMW
delete str3; //FFM
}
- 未初始化内存读取 (UMR):
cout << str2 << endl; // UMR
str2
是一个指向字符数组的指针,但在使用之前并没有被正确地初始化。因此,cout << str2
将导致未定义行为,可能输出一些未知的值或者导致程序崩溃。
- 越界写 (ABW - Array Bounds Write):
strcpy(str2, str1); // ABW
str2
数组的长度只有 4 个字符,而 str1
的长度是 5 个字符(包括字符串结束符 ‘\0’),这将导致越界写入 str2,破坏了内存。
- 数组越界读取 (ABR - Array Bounds Read):
cout << str2 << endl; // ABR
在越界写入后,再次输出 str2
可能导致数组越界读取,因为 str2
的内存已经被破坏。
- 释放后访问 (FFM - Free Memory):
delete str2; // FFM
str2[0] += 2; // FMR (Free Memory Read) and FMW (Free Memory Write)
delete str2;
释放了 str2
指向的内存,但之后仍然尝试通过 str2[0] += 2;
来访问该已释放内存。这可能导致未定义行为,甚至程序崩溃。
- 重复释放 (Double Free):
delete str3; // Double Free
str3
指向的内存在之前已经被 delete str2;
释放,再次释放同一块内存可能导致内存错误。
为了修复这些问题,需要进行以下修改:
#include <iostream>
#include <cstring> // Include for strcpy
int main() {
const char* str1 = "four"; // Use const char* for string literals
char* str2 = new char[5]; // Allocate enough space, including '\0'
char* str3 = str2;
std::cout << str2 << std::endl; // Corrected
// Use strcpy to copy the string, and ensure proper null-termination
strcpy(str2, str1);
std::cout << str2 << std::endl; // Corrected
delete[] str2; // Corrected
// Avoid accessing the deleted memory
// str2[0] += 2; // Commented out to prevent Free Memory Read/Write
// No need to delete str3, as it points to the same memory as str2
return 0;
}
这样修改后,代码中的常见内存错误就得到了修复。不过,值得注意的是,C++ 中可以使用更安全的字符串处理函数和智能指针等工具来避免这些问题。
第四章(13) #
1. 常用的Web三层架构是怎样的?
2.当在浏览器的地址栏中输入一个完整的URL,再按Enter键直至页面加载完成,整个过程发生了什么?
- 域名解析:浏览器会依次查询浏览器的DNS缓存、系统缓存、路由器缓存,如果没有找到,则一直查询到根域名服务器缓存,找到域名所对应的的IP地址。
- TCP连接:通过IP地址找到IP对应的服务器后,要求建立TCP连接。
- HTTP连接:TCP连接成功后,浏览器开始向这个服务器发送一个HTTP请求。服务器接收到请求后开始进行处理,处理结束,返回一个响应包
- 浏览器接收和处理:浏览器接收到来自服务器的响应后,开始解析和渲染接收到的内容并呈现给用户。
- TCP断开连接:最后客户端断开与服务器的TCP连接。
3.根据OWASP在2013发布的Web安全十大威胁报告,Web漏洞分为哪几大类型?请将该报告与2017年发布的Web安全十大威胁进行对比分析,了解这几年来Web安全威胁有哪些新的变化和发展
- 删除了A8和A10项。由于更多的平台添加了CSRF防御,所以发现CSRF漏洞的应用程序不到5%,同时只在8%左右的应用程序中发现未验证的重定向和转发漏洞,因此A8和A10这两项排除在了top10之外,但仍然是需要关注的重要风险。
- A3降位。2013年排名第三的XSS在2017年只排名第七名,其中除了开发者对XSS的防范意识加强之外另一個关键的原因在于,目前有很多自动化的扫描工具,都已经内建XSS扫描,可以加快漏洞修补速度,使得整体XSS漏洞数量看起来比以往少,但XSS风险却没有因此减少。
- 新添加3项。包括XXE、不安全的反序列化和不足的日志记录和监控,而后者对于许多组织来说是个严重的问题。
4.试将Web典型漏洞根据客户端和服务器端来划分,并根据漏洞原理阐述这样划分的理由。
Web典型漏洞主要可以根据漏洞的产生和利用方式,分为客户端漏洞和服务器端漏洞。下面对这两类漏洞进行划分并阐述其原理:
客户端漏洞:
- 跨站脚本攻击 (XSS):
- 原理:攻击者通过在网页中注入恶意脚本,使用户的浏览器执行这些脚本。这可能导致窃取用户信息、会话劫持等问题。
- 划分理由:XSS是一种利用客户端浏览器执行脚本的攻击,因此属于客户端漏洞。
- 跨站请求伪造 (CSRF):
- 原理:攻击者通过诱使用户在已登录的网站上执行恶意请求,以实现未经授权的操作。
- 划分理由:CSRF的攻击原理是利用用户已经在某个站点上建立的身份验证状态,因此它也主要涉及客户端。
- 点击劫持:
- 原理:攻击者通过将网页嵌套在透明的图层下面,诱使用户在不知情的情况下点击隐藏的可信任页面上的链接或按钮。
- 划分理由:点击劫持是通过伪造用户的交互行为来实现攻击的,因此它也属于客户端漏洞。
服务器端漏洞:
- SQL注入:
- 原理:攻击者通过在输入参数中注入SQL代码,利用不当的输入验证或过滤,执行恶意的SQL查询。
- 划分理由:SQL注入涉及对服务器端数据库的直接攻击,因此它是一种服务器端漏洞。
- 跨站请求伪造 (CSRF):
- 原理:在某些情况下,CSRF也可以涉及到服务器端,尤其是在攻击者需要在用户受害者的帐户上执行某些操作时。
- 划分理由:尽管CSRF的一部分涉及到用户浏览器,但服务器端也需要实施适当的防护措施,以防止未经授权的操作。
- 文件上传漏洞:
- 原理:攻击者通过在文件上传功能中上传包含恶意代码的文件,然后执行该代码。
- 划分理由:文件上传漏洞是通过利用服务器端的文件处理功能来实现攻击的,因此它属于服务器端漏洞。
- 路径遍历漏洞:
- 原理:攻击者试图通过输入特殊字符或构造恶意请求,访问文件系统中的敏感文件。
- 划分理由:路径遍历漏洞是直接涉及服务器文件系统的漏洞,因此属于服务器端。
5.简述SQL注入漏洞的原理?为什么SQL注入漏洞多年来一直名列Web安全漏洞的榜首?
原理:攻击者能够利用现有Web应用程序,将恶意的数据插入SQL查询中,提交到后台数据库引擎执行非授权操作。
- SQL注入攻击具有广泛性。
- 相较其他漏洞对于SQL注入漏洞的防范要困难。
6.防范SQL注入漏洞的基本方法有哪些?重点谈谈在代码开发层面的安全措施。
- 采用强类型语言,如Java、C#。
- 尽可能避免使用拼接的动态SQL语句,所有的查询语句都使用数据库提供的参数化查询接口。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。
- 在服务端验证用户输入的值和类型是否符合程序的预期要求。
- 在服务器端对用户输入进行过滤。
- 避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
- 加固应用程序服务器和数据库,利用最低权限账户与数据库连接。
- Web安全开发中应当遵循安全规范,例如OWASP企业安全应用程序接口(The OWASP Enterprise Security API,OWASP ESAPI)。
7.什么是SQL盲注?它与一般的SQL注入有什么区别?
盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
普通注入是可以根据报错提示,进行sql语句注入,从而直接显示我们想要的信息,比如数据库版本、数据库名、用户名、操作系统版本等;而盲注只能通过多次猜测,从而猜解出有用信息。相对来说sql盲注更加考验安全人员的手注能力。
9.简述XSS跨站脚本漏洞的原理。
XSS漏洞是指应用程序没有对接收到的不可信数据经过适当的验证或转义就直接发给客户端浏览器。XSS是脚本代码注入的一种。因为Web浏览器可以执行HTML页面中嵌入的脚本命令,支持多种脚本语言类型,其中最主要的是JavaScript。攻击者利用XSS漏洞将恶意脚本代码注入到网页中,当用户浏览该网页时,便会触发执行恶意代码。
10.简述CSRF跨站请求伪造漏洞的原理,并比较其与XSS漏洞的不同。
CSRF跨站请求伪造攻击迫使登录用户的浏览器将伪造的HTTP请求,包括该用户的会话cookie和其他认证信息,发送给一个存在漏洞的Web应用程序,这些请求就会被应用程序认为是用户的合法请求。
- XSS利用站点内的信任用户,CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。
- 反射型XSS的目的是在客户端执行脚本,而CSRF是在WEB应用中执行操作。
11.什么是命令执行漏洞?什么是文件包含漏洞?什么是文件上传漏洞?
命令执行漏洞:PHP Web应用程序 PHP中包含很多可以执行命令的函数,如果过滤不严格就会产生此漏洞。攻击者可以将恶意代码提交给包含漏洞的Web应用服务器,从而执行一些系统命令。
文件包含漏洞:注入一段用户能控制的脚本或代码,让服务器端执行。
文件上传漏洞:用户上传一个可执行的脚本文件,通过此脚本文件获得执行服务器端命令的能力。
第五章(7) #
1.什么是软件的生命周期?软件生命周期通常包括哪几个阶段?
- 软件定义时期
- 软件定义时期的任务是,
- 确定软件开发工程必须完成的总目标;
- 确定工程的可行性;
- 导出实现工程目标应该采用的策略及系统必须完成的功能;
- 估计完成该项工程需要的资源和成本,并且制定工程进度表。
- 这个时期的工作通常又称为系统分析,由系统分析员负责完成。
- 软件定义时期通常进一步划分成3个阶段,即同题定义、可行性研究和需求分析。
- 软件定义时期的任务是,
- 软件开发时期
- 软件开发时期的任务是,设计和实现在前一个时期定义的软件,它通常由4个阶段组成:总体设计、详细设计、编码和单元测试,以及综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
- 软件维护时期:
- 软件维护时期的任务是,使软件持久地满足用户的需要。具体地说,
- 当软件在使用过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;
- 当用户有新要求时应该及时改进软件以满足用户的新需要。
- 通常对维护时期不再进一步划分阶段,但是每一次维护活动本质上都是一次压缩和简化了的定义和开发过程。
- 软件维护时期的任务是,使软件持久地满足用户的需要。具体地说,
2.什么是软件过程?什么是软件开发(过程)模型?为什么从20世纪90年代以后,人们更多使用"软件过程"来替代"传统的软件开发模型"?
所谓软件过程,是指为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
软件开发模型是跨越整个软件生存周期的系统开发、运行和维护所实施的全部工作和任务的结构框架,它给出了软件开发活动各阶段之间的关系。
进入20世纪90年代,软件工程领域提出了软件过程的概念。所谓软件过程,是指为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。1995年,国际标准化组织公布了软件开发的国际标准《ISO/IEC 12207 信息技术 软件生存期过程》,该标准将软件开发需要完成的活动概括为主要过程、支持过程和组织工程三大活动,每个大的活动又包括具体过程,共17个。我国也发布了相应的标准:《信息技术 软件生存周期过程》(CB/T 8566—2007)和《信息技术 软件生存周期过程 重用过程》(CB/T 26224—2010)。通常使用软件生命周期模型简洁地描述软件过程。软件生命周期模型规定了把生命周期划分为哪些阶段及各个阶段的执行顺序,因此,也称为软件过程模型。
3.有哪些典型的软件开发模型?这些软件开发模型有什么区别与联系?
(1) 瀑布模型(Waterfall Model)
瀑布模型是在20世纪80年代之前唯一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最为广泛的开发模型。瀑布模型的本质是一次通过,即每个活动只执行一次,最后得到软件产品,因此也称为"线性顺序模型"或者"传统生命周期"。它的优势在于它是规范的、文档驱动的方法。它的主要缺陷如下:
- 由于开发模型星线性,所以当开发成果尚未经过测试时,用户无法看到软件的效果。这样软件与用户见面的时间间隔较长,也增加了一定的风险。
- 在软件开发前期未发现的错误传到后面的开发活动中时,可能会扩散,进而可能会造成整个软件项目开发失败。
- 在软件需求分析阶段,完全确定用户的所有需求是比较困难的,也是不太可能的。
(2)快速原型模型(Rapid Prototype Model)
快速原型模型是为了克服瀑布模型的缺点而提出来的。它通过快速构建一个可在计算机上运行的原型系统,让用户试用原型并收集用户反馈意见,获取用户的真实需求。这种模型的主要问题是,快速建立起来的原型系统结构加上连续的修改可能会导致产品质量低下。
(3) 增量模型 (Incremental Model)
增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。运用增量模型的软件开发过程是递增式的过程。相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交。该模型具有可在软件开发的早期阶段使投资获得明显回报和较易维护的优点,但是,要求软件具有开放的结构是使用这种模型时固有的困难。
(4) 螺旋模型(Spiral Model)
螺旋模型的基本做法是,在瀑布模型的每一个开发阶段前引人非常严格的风险识别、风险分析和风险控制。它把软件项目分解成一个个小项目,每个小项目都标识一个或多个主要风险,直到所有的主要风险因素都被确定。通过及时对风险进行识别及分析,决定采取何种对策,进而消除或减少风险的损害。螺旋模型强调风险分析,因此特别适用于庞大、复杂并具有高风险的系统。
与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开发的所有关键决策提供方便,有助于提高目标软件的适应能力,并且为项目管理人员及时调整管理决策提供便利,从而降低软件开发风险。
螺旋模型的缺点如下:
- 采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时识别风险,势必造成重大损失。
- 过多的选代次数会增加开发成本,延迟软件提交时间。
(5)喷泉模型(Fountain Model)
喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型较好地体现了面向对象软件开发过程无缝迭代的特性,是典型的面向对象的软件过程模型之一。
(6) Rational 统一过程 (Ratiomal Unified Process, RUP)
RUP 强调采用选代和检查的方式来开发软件,整个项目开发过程由多个迭代过程组成。在每次迭代中只考虑系统的一部分需求,针对这部分需求进行分析、设计、实现、测试和部署等工作,每次选代都是在系统已完成部分的基础上进行的,每次给系统增加一些新的功能,如此循环往复地进行下去,直至完成最终项目。
(7) 极限编程和敏捷开发(eXtreme Programming & Agile Development)
极限编程 XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期,通过积极的交流、反馈及其他一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时调整开发过程。极限编程方法强调开发者与用户的沟通,让客户全面参与软件的开发设计,保证变化的需求及时得到修正。
以极限编程为代表的敏捷开发,具有对变化和不确定性的更快速、更敏捷的反应特性。敏提就是"快",因此,敏捷开发过程能够较好地适应商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束,可以作为对 RUP 的补充和完善。但是,要快就要多发挥个人的个性思维,虽然通过结队编程、代码共有或团队替补等方式可减少个人对软件的影响力,但个性思维的增多也会造成软件开发继承性的下降,因此敏捷开发是一个新的思路,但不是软件开发的终极选择。作为一种软件开发模式,敏捷开发远不如 RUP 全面和完整。
(8) 微软过程(Microsoft Process)
多年的实践经验证明,微软过程是非常成功和行之有效的。
- 一方面,可以把微软过程看作 RUP 的一个精简配置版本,整个过程包含若干个生命周期的持续递进循环,每个生命周期由5个阶段组成:规划阶段、设计阶段、开发阶段、稳定阶段和发布阶段,每个阶段精简为由一次迭代完成;
- 另一方面,可以把微软过程看作敏捷过程的一个扩充版本,它扩充了每个生命周期内的各个阶段的具体工作流程。
4.SD3+C原则是SDL模型实施的基本原则,试简述其内容。
安全设计(Secure by Design)。在架构设计和实现软件时,需要考虑保护其自身及其存储和处理的信息,并能抵御攻击。
安全配置(Secure by Default)。在现实世界中,软件达不到绝对安全,所以设计者应假定其存在安全缺陷。为了使攻击者针对这些缺陷发起攻击时造成的损失最小,软件在默认状态下应具有较高的安全性。例如,软件应在最低的所需权限下运行,非广泛需要的服务和功能在默认情况下应被禁用或仅可由少数用户访问。
安全部署(Security by Deployment)。软件需要提供相应的文档和工具,以帮助最终用户或管理员安全地使用。此外,更新应该易于部署。
沟通(Communication)。软件开发人员应为产品漏洞的发现准备响应方案,并与系统应用的各类人员不断沟通,以帮助他们采取保护措施(如打补丁或部署变通办法)。
5.微软的SDL模型与传统的瀑布模型的关系是怎样的?
SDL模型是由软件工程的瀑布模型发展而来,是在瀑布模型的各个阶段添加了安全活动和业务活动目标。
6.什么是敏捷SDL?敏捷SDL和经典SDL的主要区别是什么?
敏捷SDL与典型SDL的差别主要有两点:
敏捷SDL不采用传统的瀑布模型而是采用无阶段的迭代开发模型,以实现软件版本的快速更新和发布。
在敏捷SDL中,并不是每个发布版本(或每次"突击发布")都需要达到所有的要求。
10.试从软件各个开发阶段所进行活动的角度,对几种软件安全开发模型进行对比分析。
书中好几页太多了
第六章(14) #
1.为什么要进行需求分析?通常对软件系统有哪些需求?
为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件。
通常对软件系统有下述几个方面的综合要求:
- 功能需求:划分出系统必须完成的所有功能。
- 性能需求:指定系统必须满足的定时约束或容量约束,通常包括速度(响应时间)、信息量速率、主存容量、磁盘容量和安全性等方面的需求。
- 可靠性和可用性需求:可靠性需求定量地指定系统的可靠性。可用性与可靠性密切相关,它量化了用户可以使用系统的程度。
- 出错处理需求:说明系统对环境错误应该怎样响应。
- 接口需求:描述应用系统与它的环境通信的格式。
- 约束:描述在设计或实现应用系统时应遵守的限制条件。
- 逆向需求:说明软件系统不应该做什么。理论上有无限多个逆向需求,人们应该仅选取能澄清真实需求且可消除可能发生的误解的那些逆向需求。
- 将来可能提出的要求:明确地列出那些虽然不属于当前系统开发范畴,但是据分析将 来很可能会提出来的要求。这样做的目的是,在设计过程中对系统将来可能的扩充和修改预做准备,以便一旦确实需要时能比较容易地进行扩充和修改。
2.为什么要进行安全需求分析?通常对软件系统有哪些安全需求?138
软件安全需求分析的目的是描述为了实现信息安全目标,软件系统应该做什么,才能有效地提高软件产品的安全质量,减少进而消减软件安全漏洞。
软件运行的情境通常可以分为外部情境和内部情境,因此安全需求可以从外部需求和内部需求两个方面来分类。
- 外部安全霈求:外部安全需求通常主要指法律、法规等遵从性需求,包括相应国家和地区关于安全技术与管理的法规、标准及要求等。这些安全技术和管理的合规性要求往往是已有安全威胁的经验性对策的总结,因而遵循这些要求不仅是法规制度上的要求,也是软件安全性保障的要求。
- 内部安全需求:内部安全需求通常包括两个部分,一是组织内部需要遵守的政策、标准、指南和实践模式,二是与软件业务功能相关的安全需求。
3.软件安全需求分析的主要工作是什么?它和软件需求分析有什么区别与联系?
软件安全需求分析的主要工作:在软件开发生命周期的需求分析阶段,首先确定目标系统的业务运行环境、规则环境及技术环境,然后在了解各类软件安全需求内容的基础上,通过一定的安全需求获取过程,对软件应该包含的安全需求进行分析,而对于如何实现这些安全需求将在软件安全设计和开发部分进行讨论。
软件安全需求分析与软件需求分析的联系:软件安全需求是软件需求的一个必要组成部分。安全需求应该与业务功能需求具有同样的需求水平,并对业务功能需求具有约束力。
软件安全需求分析与软件需求分析的区别
(1)软件安全需求的客观性
软件安全需求由系统的客观属性决定。安全需求与一般需求的一个主要不同之处在于:安全需求并不是从使用者的要求和兴趣出发,而是由系统的客观展性所决定的。因此,需求分析员将承担更多软件需求的分析工作。
(2)软件安全需求的系统性
软件安全需求分析不能只从软件本身出发,必须从系统角度进行分析。这是因为,虽然软件(包括操作系统、数据库等)本身可能会由于逻辑、数据和时序等设计敏陷导致安全问题,但同时,由于软件属于逻辑产品,很多情况下并不是软件失效,而是在软件正常工作时,在某种特条件下软硬件相互作用,以及由于人的使用问题而导致不安全情况发生。因此,软件安全需求分析必须在系统安全件分析的基础上进行
(3)软件安全需求的经济性和适用性
软件安全的需求内容非常丰富,并不是所有的应用安全需求控制都要采纳和实施。组织应当根据具体业务的重要性,对安全措施进行成本控制。安全控制的成木应该与较件所有者或者管理部门要求的目标水平相当。
4.为什么说软件安全需求更多地来源于遵从性需求?
软件需求分析中,分析员和用户都起着至关重要的作用。然而,在软件安全性需求分析中,软件用户由于安全知识的缺乏,很难从专业角度提出安全需求。因此,软件安全需求更多地来自于对组织内部和外部的一些安全政策和标准的遵从。安全需求分析人员对这些政策需求和标准进行深入理解,并将它们转化为软件安全属性需求,是安全需求分析阶段要完成的艰巨任务。
5.本章中介绍的安全需求遵从性标准有哪些类别,它们之间有何联系与区别?144
- 信息系统安全测评国际标准
- 信息安全管理国际标准
- 信息系统安全工程国际标准
- 我国信息安全标准概述
- 信息安全标准从适用地域范围可以分为:国际标准、国家标准、地方标准、区域标准、行业标准和企业标准。
- 信息安全标准从涉及的内容可以分为:信息安全体系标准、信息安全机制标准、信息安全测评标准、信息安全管理标准、信息安全工程标准、信息系统等级保护标准和信息安全产品标准等类别。
6.我国为什么要实行网络安全等级保护制度?网络安全保护能力划分为哪些等级?具体每个等级有什么要求?145
等级化保护是信息安全发展规律。按组织业务应用区域,分层、分类、分级进行保护和管理,分阶段推进等级保护制度建设,这是做好国家信息安全保护必须遵循的客观规律。
等级保护是国家法律和政策要求。为了提高我国信息安全的保障能力和防护水平,维护国家安全、公共利益和社会稳定,保障和促进信息化建设的健康发展,1994年国务院颁布的《中华人民共和国计算机信息系统安全保护条例》规定:“计算机信息系统实行安全等级保护,安全等级的划分标准和安全等级保护的具体方法,由公安部会同有关部门制定”。
网络安全等级保护制度将网络划分为如下五个安全保护等级,从第一级到第五级逐级增高。
7.对网络安全等级划分通常有两种描述形式,即根据安全保护能力划分安全等级的描述,以及根据主体遭受破坏后对客体的破坏程度划分安全等级的描述这两种形式。试谈谈这两种等级划分的对应关系。
题6为根据安全保护能力划分安全等级的描述,下面为根据主体遭受破坏后对客体的破坏程度划分安全等级,应该是一对一关系。
- 第一级,属于一般网络,其一旦受到破坏,会对公民、法人和其他组织的合法权益造成损害,但不危害国家安全、社会秩序和社会公共利益。
- 第二级,属于一般网络,其一旦受到破坏,会对公民、法人和其他组织的合法权益造成严重损害,或者对社会秩序和社会公共利益造成危害,但不危害国家安全。
- 第三级,属于重要网络,其一旦受到破坏,会对公民、法人和其他组织的合法权益造成特别严重损害,或者会对社会秩序和社会公共利益造成严重危害,或者对国家安全造成危害。
- 第四级,属于特别重要网络,其一旦受到破坏,会对社会秩序和社会公共利益造成特别严重危害,或者对国家安全造成严重危害。
- 第五级,展于极其重要网络,其一旦受到破坏,会对国家安全造成特别严重危告。
网络安全等级保护是对网络进行分等级保护、分等级监管,是将信息网络、信息系统、网络上的数据和信息,按照重要性和遭受损坏后的危害性分成五个安全保护等级(从第一级到第五级,逐级增高);等级确定后,第二级(含)以上网络到公安机关备案,公安机关对备案材料和定级准确性进行审核,审核合格后颁发备紫证明;备案单位根据网络的安金等级,按照国家标准开展安全建设整改,建设安全设施、落实安全措施、落实安全责任、建立和落实安全管理制度;选择符合国家要求的测评机构开展等级测评;公安机关对第二级网络进行指导,对第三、第四级网络定期开展监督,检查。
8.简述网络等级保护与信息安全管理体系的联系和区别。
9.软件安全需求获取过程中涉及哪些相关方人员?他们各自主要的职责是什么?
10.软件安全需求的获取方法有哪些?
11.软件安全需求的获取方法中的策略分解是指什么?
策略分解是指将组织需要遵守的内部和外部政策,包括外部法律法规、隐私和遵从性命令分解成详细的安全需求。策略分解过程是一个连续的、结构化的过程。
12.软件安全需求的获取方法中的数据分类是指什么?
数据分类是指,根据数据生命周期管理(Data Lifecycle Management, DL.M)对数据的分阶段划分来决定相应的安全需求;也可以根据数据的重要性对保护级别的划分来决定相应的安全需求。
13.针对信息系统中的数据生命周期,通常应当考虑的安全需求有哪些?
- 谁可以创建数据?谁可以对数据进行访问?访问权限是什么(授权的级别)?
- 当进行数据处理时,是否需要数据泄漏保护(Data Leakage Prevention, DLP)?
- 当数据被传输时,是否需要采用传输层或网络层安全协议(如SSL/TLS 或 IPSec)来保护数据?
- 数据是以结构化还是非结构化的方式进行存储,数据存储和使用的环境(私人、公共或混合)面临哪些安全威胁?
- 从数据的可访问性和可用性角度来看,一些需要频繁访问的关键业务数据必须存储在更快的存储介质上,但是,如何应对这些存储介质的可靠性、易失性等物理安全问题?
- 当数据归档时,需要遵循企业的数据保留政策,或是当地法律法规对数据存档的要求。当数据失去其效用(即不再被业务操作或连续性所需要),且没有监管或规范要求保留时,数据是否需要通过数据逻辑删除、物理媒体破坏或存储媒体消磁等被安全地处理?
14.软件安全需求的获取方法中的主/客体关系矩阵是指什么?
采用主/客体关系矩阵来刻画一个基于使用用例的主/客体之间的操作关系。主/客体关系矩阵是角色和组件的二维表示,主体(角色)作为列,客体(对象/组件)作为行。当主/客体关系矩阵产生后,与主/客体关系矩阵所允许的对应动作相违背的事件就可以判定为威胁,在此基础之上可以确定安全需求。
第七章(14) #
1.软件设计阶段的主要工作是什么?
从技术的角度看软件设计阶段的主要工作包括:软件架构设计、界面接口设计、模块/子系统等构件设计、数据模型设计、过程/算法设计及部署设计等。
2.软件安全设计阶段的主要工作是什么?
软件安全设计的主要工作包括软件架构安全性设计、软件架构安全性分析及软件安全功能设计。
3.为什么要进行软件架构设计?软件架构设计的主要工作是什么?软件架构安全性设计的主要工作是什么?
为了达到控制软件复杂性、提高软件系统质量、支持软件开发和复用的目的,开发人员提出了软件架构的概念。
软件架构设计对于开发高质量软件具有较大作用。一般而言,软件架构的设计首先需要理清业务逻辑的功能要求,了解业务逻辑的变化性要求,包括可维护性和可扩展性,分离出概要业务逻辑层。接着,设计业务逻辑层和系统其他部分的接口与交互关系,按照职责分离原则设计包、类、方法和消息,设计业务逻辑算法。然后,使用自底向上和自顶向下相结合的方式,不断渐进地迭代架构设计。
软件架构安全设计首先需要进行系统描述,包括系统功能、安全要求、系统部署和技术需求,确定软件系统的安全级别。接着,设计软件网络、数据库等应具备的安全功能,根据软件具体安全需求的不同,设计的安全功能包括加密、完整性验证、数字签名、访问控制及安全管理等。在架构安全设计过程中,还需要解决软件安全功能的易用性、可维护性和独立性问题。
4.为什么要进行软件架构安全性分析?软件架构安全性分析的基本过程是什么?
(1)软件架构安全性分析的重要性
在软件架构安全性设计的过程中,尤其是对于大而复杂的系统,要将安全属性一次性设计到软件架构中成为架构的有机组成部分,这是一项非常具有挑战性的工作。
为此,一旦软件架构设计或是软件架构安全性设计完成,在退出设计阶段进入开发阶段之前,需要对软件(安全)架构和设计方案进行检查,以确保设计能够满足软件的安全需求。这不仅包括功能方面的设计检查,也包括安全设计检查。检查可以帮助开发人员在编码之前对安全设计要素进行验证,提供一个识别和处理任何安全漏洞的机会,减少后续阶段重新设计软件的需要。
设计检查需要考虑安全政策和软件部署的目标环境,同时也需要对应用系统进行全局检查。网络和主机水平的安全保护都需要到位,保护措施之间不会相互矛盾从而削弱保护强度。需要特别关注软件安全设计基本原则和软件核心安全属性需求的设计,以确保保密性、完整性和可用性。此外,还需要逐层对软件架构进行分析以保证纵深防御控制措施到位。攻击面评估、威胁建模和滥用案例建模、安全体系结构和设计检查等几个方面都是非常有用的,它们可以确保软件不仅能实现预期的功能,同时也不会违反任何安全策略。
(2)软件架构安全性分析的基本过程
软件架构安全性分析的基本过程如下图所示,首先进行架构建模,然后根据软件的安全需求描述或相关标准,对架构模型是否满足要求进行检查,如果不满足则需要修改设计架构,如此反复,直至满足所有安全需求和相关标准。
目前,国内外关于软件架构安全性分析的理论和应用研究还处于探索阶段。软件架构安全性分析可以分为形式化和工程化两类分析方法。
5.软件受攻击面是指什么?举例说明软件设计时可以采取哪些策略来降低受攻击面。
软件受攻击面是指,用户或其他程序及潜在的攻击者都能够访问到的所有功能和代码的总和,它是一个混合体,不仅包括代码、接口和服务,也包括对所有用户提供服务的协议,尤其是那些未被验证的或远程用户都可以访问到的协议。一个软件的攻击面越大,安全风险就越大。减少软件受攻击面就是去除、禁止一切不需要使用的模块、协议和服务,其目的是减少攻击可以利用的漏洞。
采取减少软件受攻击面原则的实例如下:
- 重要性低的功能可取消;重要等级为中的功能可设置为非默认开启,需要用户配置后才予以开启;重要性高的功能则关闭或增加一些安全措施进行限制。
- 重用那些经过测试、已证明安全的现有库和通用组件,而不是用户自己开发的共享库。
6.什么是最小授权原则?试举例说明软件设计时哪些措施是采用了最小授权原则。
最小授权原则是指,系统仅授予实体(用户、管理员、进程、应用和系统等)完成规定任务所必需的最小权限,并且该权限的持续时间也尽可能短。最小授权原则可使无意识的、不需要的、不正确的特权使用的可能性降到最低,从而确保系统安全。
软件设计中采用最小授权原则的实例如下:
- 将超级用户的权限划分为一组细粒度的权限,分别授予不同的系统操作员/管理员。对管理员账户分配安全资源的访问权限也要设置为受限访问,而不是超级用户权限。
- 采用高内聚、低耦合的模块化编程方法,也就是模块之间的依赖关系是弱链接(低耦合),每一个模块只负责执行一个独立的功能(高内聚)。
7.什么是权限分离原则?试举例说明软件设计时哪些措施是采用了权限分离原则。
权限分离原则在教件设计中是指,将软件功能设计为需要在两个或更多条件下才能实现,以防止一旦出现问题,整个软件都可能面临风险。实际上这一原则也是最小权限原则的一种体现。
软件设计中采用权限分离原则的实例如下:
- 清晰的模块划分,将风险分散到各个模块中去。这样,如果出现问题就可以快速定位到模块,以便进行修复;其次,还可以对单个模块进行测试,保证各个模块的正确性;还可以重复使用已经开发的模块,并且可以在已有模块上增加和替换模块,同时不影响原有模块的功能。
- 不允许程序员检查自己编写的代码。
8.针对第6章介绍的核心安全需求,软件安全功能设计通常有哪些内容?
设计模式是对软件设计中普遍存在、反复出现的各种问题,根据多次处理的经验,提出的一套能够快速、准确响应此类问题的解决方案。设计模式描述在各种不同情况下,应解决共性问题。
应用安全设计
- 应用安全功能设计:1)身份认证;2)授权;3)输入和输出验证;4)配置管理;5)会话管理;6)参数操作;7)异常管理;8)审核与日志
- 应用交互安全设计:1)明确交互系统;2)接口方式安全设计
数据安全设计
- 机密性要求:1)数据传输应确保保密性;2)数据使用应确保保密性;3)数据删除应确保保密性
- 完整性要求:1)数据传输应确保完整性;2)数据使用应确保完整性;3)敏感数据的使用应在应用程序中进行检错和校验操作,保证原始数据的正确性和完整性
- 可用性要求:1)数据采集应确保可用性,验证的方式包括数据格式验证、数据长度验证和数据类型验证等;2)数据传输应确保可用性;3)数据处理应确保可用性;4)数据使用应确保可用性,验证的方式包括数据格式验证、数据长度验证和数据类型验证等
9.什么是软件设计模式?有哪些软件设计模式?
设计模式是对软件设计中普遍存在、反复出现的各种问题,根据多次处理的经验,提出的一套能够快速、准确响应此类问题的解决方案。设计模式描述在各种不同情况下,应解决共性问题。
常见的有23种模式,下面只列举6种
- 抽象工厂横式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
- 适配器模式(Adaptor):将一个类的授口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
- 桥梁模式(Bridge):将抽象部分与已的实现部分分离,使它们都可以独立地查化。
- 建造模式(Builder):将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。
- 责任链模式(Chain of Responsibity):为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
- 命令横式(Command):将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。
- …
10.什么是安全模式?为什么说能够利用安全模式来快速、准确地进行软件安全设计?
安全模式是在给定的场景中,为控制、阻止或消减一组特定的威胁而采取的通用解决方案。该解决方案需要应对一系列的问题,并且可以使用UML类图、时序图、状态图和活动图等进行表述。
安全模式封装了反复出现的系统问题的解决方案,同时精确地表述了系统要求和解决方案。采用模式的系统架构描述比较容易让人看懂,也为设计和分析提供了指南,还定义了使架构更安全的方法。安全模式使得不具备专业安全知识的应用开发人员也可以使用安全措施。还可以通过分析现有系统看它们是否包含特定的模式,进而评估它们的安全性。此外,可以在改造旧有系统时,利用模式来添加系统中缺失的安全特性。
安全模式与威胁直接相关,特定的威胁可能是由一个或多个漏洞引起的。在软件设计阶段应用安全模式来控制、阻止或削弱威胁,可以从根本上消减软件安全漏洞。
11.试给出一种利用安全模式进行软件安全设计的方法。
一种基于安全模式的软件安全设计方法过程可以分为3个阶段:风险确定阶段、系统安全架构阶段和系统设计细化阶段。在每一个阶段,需要进行一系列相应的实践活动,通过实行这些实践活动,完成每一个阶段的任务,最终实现系统的安全架构。
- 风险确定阶段:该阶段主要有两个工作:识别风险和评估风险。该阶段通过对业务需求、用户需求及安全需求等的分析,利用历史威胁记录及经验,识别并评估系统面临的风险。
- 系统安全架构阶段:该阶段对风险进行消解,并对解决方案进行评估,在此基础上构建系统的高层架构图。主要工作包括浏览模式库、选择安全模式、评估安全模式和建立系统高层架构。
- 系统设计细化阶段:该阶段的主要工作包括 构建业务类图、实例化安全模式,以及整合系统并适当重构。在该阶段,在前一阶段选定的安全模式集和系统高层架构图的基础上,细化业务分析和实例化安全模式,并将它们整合到一起形成系统的完整设计类图。
12.什么是威胁建模?试简述威胁建模的过程。
虽然威胁建模还没有一个标准的定义,本书试图给出这样的一个解释,软件威胁建模是指,通过抽象的概念模型对影响软件系统的威胁进行系统的识别和评价。
13.为什么说组织自身的威胁建模能力水平对提升组织的整体安全保障能力起到至关重要的作用?
采用威胁建模方法,可以系统性地分析其架构、软件体系和程序部署,分析网络和信息系统可能面临的潜在威胁,确认有哪些攻击面,之后提出有针对性的安全防范措施,这才是有效解决网络安全对抗的良策。组织自身的威胁建模能力水平对提升组织的整体安全保障能力将起到至关重要的作用。
威胁建模具有重要的存在价值,包括早期发现安全缺陷,理解安全需求,设计和交付更安全的产品,解决其他技术无法解决的问题等作用。
事实上,尽管威胁模型在系统设计甚至于需求分析阶段就应该完成,但它的作用可以跨越整个软件生命周期。一个完整的威胁模型是设计、开发、测试、部署和运营团队的代表性输入项。在设计阶段,应该由软件架构团队来识别威胁进而建立威胁模型;开发团队可以使用威胁模型来实现安全控制和编写安全的代码;测试人员不仅可以使用威胁模型生成安全测试用例,还需要验证威胁模型中已识别威胁的控制措施的有效性;最后,操作人员可以使用威胁模型配置软件安全设置,保证所有入口点和出口点都有必要的保护控制措施。
14.在威胁排序的几种计算方法中,为什么说相比Delphi法和平均排序法,P×I排序方法更科学?
相比 Delphi 法和平均排序法,PxI排序方法更科学。PxI排序考虑业务影响(潜在损失和受影响的用户)和发生概率(可再现性、可利用性和可发现性)。PxI排序法对事件发生概率、业务影响及它们合并的影响进行深入分析,使得设计团队能够灵活地掌握如何降低事件发生的概率、减小业务影响或二者同时降低;此外,PxI排序方法还给出了更精确的风险图谱。
第八章(8) #
- 软件安全编码阶段的主要工作有哪些?
- 选择安全的编程语言,所谓安全的编程语言,是指那些具有对缓冲区、指针和内存进行管理能力而避免发生软件安全问题的语言。类型安全语言就属于安全的编程语言。
- 版本(配置)管理,软件版本管理或控制不仅能够保证开发团队正在使用的程序版本是正确的,同时在必要的情况下也能提供回退到上一个版本的功能;另外,软件版本管理还提供了跟踪所有权和程序代码变化的能力。
- 代码检测,这里的代码主要是指源代码。代码检测是指对代码质量进行检查,以发现是否存在可利用漏洞的过程。根据代码检测时代码所处的状态,可以将代码分析分为两种类型:代码静态检测和代码动态检测。
- 安全编译,编译是指将程序员编写的源代码转换为计算机可以理解的目标代码的过程。
2.什么是类型安全语言?哪些程序开发语言是类型安全的?
类型安全简单来说就是访问可以被授权访问的内存位置,类型安全的代码不会试图访问自己未被授权的内存区域。提供类型安全的保障机制的编程语言是类型安全语言;
Java和C#属于类型安全语言。
3.安全编译是指在代码编译阶段采取的哪些安全措施?
- 采用最新的集成编译环境,并选择使用这些编译环境提供的安全编译选项和安全编译机制来保护软件代码的安全性。
- 代码编译需要在一个安全的环境中进行。编译环境的完整性对于保证最终目标代码的正确性是很重要的。可以采用以下一些保证措施:
- 在物理环境上,对代码编译系统实施安全访问控制,防止人为地破坏和篡改。
- 在逻辑上,使用访问控制列表防止未授权用户的访问。
- 使用软件版本控制方法,保证代码编译版本的正确性。
- 尽量使用自动化编译工具和脚本,保证目标代码的安全性。
- 对应用环境的真实模拟也是软件编译需要考虑的问题。很多软件在开发和测试环境中运行得很好,而到了生产环境中就会出现很多问题,主要原因就是开发和测试环境与实际开发环境不匹配。由于应用环境比较复杂,因此要开发出能够适应所有环境的应用软件并不是一件简单的工作,对环境的适配也是反映软件应用弹性的一个重要指标。
- 多样化编译技术作为一种提高软件安全性的方法已经得到了应用。
4. 试列举几条安全编码原则,并举例说明这些原则的重要意义。
- 验证输入。对于不可信任数据源的输入应当进行验证。正确的输入验证能减少大量软件漏洞。这些数据源包括命令行参数、网络接口、环境变量,以及用户文件。
- 留意编译器警告。应采用实现了安全特性的编译器,并启用编译器的警告和错误提示功能。不仅要处理和解决代码中的错误,而且也应处理和解决所有的警告,确保不将任何一个警告带入到程序的最终编译版本中。
- 默认拒绝。默认的访问权限是拒绝,除非明确是允许的。
- 坚持最小权限原则。每个进程拥有完成工作所需的最小权限,任何权限的拥有时间要尽可能短,以阻止攻击者利用权限提升执行任意代码的机会。
- 最少反馈。最少反馈是指在程序内部处理时,尽量将最少的信息反馈到运行界面,即避免给不可靠用户过多的可利用信息,防止其据此猜测软件程序的运行处理过程。最少反馈可以用在成功执行的流程中,也可以用在发生错误执行的流程中。典型的例子如用户名和口令认证程序,不管是用户名输入错误还是口令输入错误,认证端都只反馈统一的"用户名/口令错误",而不是分别告知"用户名错误"或"口令错误",这样可以避免攻击者根据输入正确的用户名或口令来猜测未知口令或用户名。
5.为什么要避免使用C语言中原有的字符串函数?所谓的安全字符串函数解决了原有C字符串函数的什么安全漏洞?
- 因为c语言没用提供字符串类型,字符串以字符数组形式存储,是以
\0
结尾的一段内存,并且c语言对缓冲区溢出不做检查,因此c语言原有的字符串函数在使用时有内存泄漏,缓冲区溢出的隐患。 - 安全字符串函数要求程序员在参数中给出目标缓冲区的大小,以此避免缓冲区溢出。
6.Java提供的沙箱安全机制的核心思想是什么?
“沙箱"模型的核心思想是:本地环境中的代码能够访问系统中的关键资源(如文件系统等),而从远程下载的程序则只能访问"沙箱"内的有限资源。该模型的目的是在可靠环境中运行可疑程序。
7.试谈谈Java提供的安全机制。
- 语言层安全,语言层安全是通过编译器的编译来实现,即编译成功则说明达到了语言层安全性。Java在语言层提供如下安全机制:
- 通过某些关键字(如private、protected)定义代码的可见性范围(即权限)。
- 通过类型规则确保程序运行时变量的值始终与声明的类型一致,在函数或方法调用时形参与实参的类型匹配。
- Java还采用自动内存管理、垃圾收集站、字符串和数组的范围检查等方法,来确保Java语言的安全性。
- 字节码层安全,在字节码层次,Java提供两种保障安全的机制:
- 类加载器,类加载器主要分为四类:启动类加载器、标准扩展类加载器、路径类加载器和网络类加载器。
- 字节码验证器,验证分成静态和动态两个阶段。
- 应用层安全,一旦类加载器加载了一个类并由字节码验证器验证了它,Java平台的第3种安全机制,即安全管理器就开始运行:
- 安全管理器是一个由Java API提供的类,即:java.lang. SecurityManager类,它的作用是说明一个安全策略以及实施这个安全策略。
- 安全策略描述了哪些代码允许做哪些操作。由安全管理器对象定义的安全检查方法构成了当前系统的安全策略。当这些检查方法被调用时,安全策略就得以实施。
第十二章(7) #
1.试解释以下与恶意代码程序相关的计算机系统概念,以及各概念之间的联系与区别:
进程、线程、动态链接库、服务、注册表。
线程是执行任务、完成功能的基本单位,而进程则为线程提供了生存空间和线程所需要的其他资源;
动态链接库(DLL)是共享函数库的可执行文件。动态链接库提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。同一个动态链接库可以同时被多个进程加载到内存中,并且执行DLL中的功能。计算机病毒通常将病毒代码写到一个DLL文件中,然后想尽一切办法将此病毒代码加载到系统的某个进程中,如Explorer.exe桌面进程,这样Explorer.exe就会运行病毒代码了。这也是通常所说的病毒注入技术。
windows 系统的许多功能都是通过服务来实现的。简单来讲可以将服务理解为在后台完成系统任务的程序,比如自动获取更新或者管理打印服务等。
注册表指在Windows中使用的中央分层数据库,用于存储一个或多个用户、应用程序和硬件设备配置系统所必须的信息。注册表包含Windows在运行期间不断引用的信息,例如,每个用户的配置文件、计算机上安装的应用程序可以创建的文档类型、正在使用哪些端口以及包含了有关计算机如何运行的信息。
2.从危害、传播、激活和隐藏4个主要方面分析计算机病毒、蠕虫、木马、后门、Rootkit及勒索软件这几类恶意代码类型的工作原理。
计算机病毒
- 危害:病毒侵入系统的目的就是要破坏系统的机密性、完整性和可用性等。计算机病毒编制者的目的和所入侵系统的环境决定了破坏程度,较轻者可能只是显示一些无聊的画面文字、发出点声音,稍重一点的可能是消耗系统资源,严重者可以窃取或损坏用户数据,甚至是瘫痪系统、毁坏硬件。
- 传播:传染模块完成病毒的传播和感染。传染过程通常包括以下3个步骤。
- 寻找目标文件。病毒的传染有其针对性,或针对不同的系统,或针对同种系统的不同环境。
- 检测目标文件。感染模块检查寻找到的潜在目标文件是否带有感染标记或设定的感染条件是否满足。
- 实施感染。如果潜在目标文件没有感染标记或满足感染条件,感染模块就实施感染,将病毒代码和感染标记放入宿主程序。
- 激活:计算机病毒的触发条件多种多样,常见的有日期触发、时间触发、键盘触发、感染触发、启动触发、访问磁盘次数触发和调用中断功能触发等。多数病毒采用的是组合触发条件,而且通常先基于时间,再辅以访问磁盘、击键操作等其他条件实现触发。 0 隐藏:病毒程序为了隐藏自己,一般不独立存在,而是寄生在别的有用的程序或文档之上。同时,计算机病毒还采取隐藏窗口、隐藏进程、隐藏文件,以及远程DLL注入、远程代码注入和远程进程(线程)注入等方式来隐藏执行。
蠕虫
- 危害:蠕虫的功能结构框架中包含宿主破坏模块,用于摧毁或破坏被感染主机,破坏网络正常运行,在被感染主机上留下后门等。蠕虫病毒入侵并完全控制一台计算机之后,就会把这台机器作为宿主,进而扫描并感染其他计算机。
- 传播:它会主动扫描和攻击网络上存在系统漏洞的结点主机,通过局域网或者因特网从一个结点传播到另外一个结点。
- 激活:网络蠕虫可以进行对主机的漏洞检测,从而决定采用何种攻击类型。
- 隐藏:蠕虫的功能结构框架中包含实体隐藏模块,包括对蠕虫各个实体组成部分的隐藏、变形、加密及进程的隐藏,主要用于提高蠕虫的生存能力。
木马
- 危害:木马的主要攻击类型分为三种:控制类、信息窃取类和下载者类,分别进行控制目标机器、窃取信息和下载恶意软件的操作。
- 传播:木马一般需要诱骗用户上当后进行传播。
- 激活:当用户将木马的被控端安装在机器上后,木马会运行dropper组件,进行木马植入,成功植入后木马完成激活。
- 隐藏:在木马植入过程中dropper模块会根据系统环境、杀毒软件等影响因素判断是否进行植入,植入完成后使用rootkit技术隐藏木马的主要组件模块。
后门
- 危害:后门能够绕过安全控制获取程序或系统的访问权。
- 隐藏:普通用户一般无从得知后门的存在。
rootkit
- 危害:rootkit属于木马的范畴,通过修改现有的操作系统软件,使攻击者获得访问权限并隐藏在计算机中,它能够修改代码、数据和程序逻辑,破坏系统内核数据结构和更改指令执行流程,从而达到隐匿自身及相关行为痕迹的目的。
勒索软件
- 危害:勒索软件可以用来劫持用户资产或资源,以此为条件向用户勒索钱财,一般会将用户的某些文件进行加密等操作使之不可用,然后发出勒索通知。
- 传播:垃圾邮件传播、漏洞传播、捆绑传播、可移动存储介质或驱动器传播和社交网络传播。
3.病毒程序与蠕虫程序的主要区别有哪些?
病毒的传播需要人为干预,而蠕虫则无需用户干预而自动传播,传统病毒主要感染计算机文件系统,蠕虫主要影响计算机系统和网络性能。
4.什么是Rootkit?它与木马和后门有什么区别与联系?
最初,内核套件Rootkit是攻击者用来修改UNIX操作系统和保持根(Root)权限且不被发现的工具,正是由于它是用来获得root后门访问的 kit工具包,所以被命名为"root”+“kit”。目前通常所说的Rootkit是指:一类木马后门工具,通过修改现有的操作系统软件,使攻击者获得访问权限并隐藏在计算机中。
Rootkit与木马、后门等既有联系又有区别。首先,Rootkit属于木马的范畴,它用恶意的版本替换修改现有操作系统软件来伪装自己,从而掩盖其真实的恶意的目的,而这种伪装和隐藏机制正是木马的特性。此外,Rootkit还作为后门行使其职能,各种Rootkit通过后门口令、远程Shell或其他可能的后门途径,为攻击者提供绕过检查机制的后门访问通道,这是后门工具的又一特性。Rootkit 强调的是强大的隐藏功能、伪造和欺骗功能,而木马、后门强调的是窃取功能、远程侵入功能。两者的侧重点不一样,两者结合起来则可以使得攻击者的攻击手段更加隐蔽、强大。
5.什么是勒索软件?为什么勒索软件成为近年来数量增长最快的恶意代码类型?
勒索软件是黑客用来劫持用户资产或资源,并以此为条件向用户勒索钱财的一种恶意软件。勒索软件通常会将用户系统中的文档、邮件、数据库、源代码及图片等多种文件进行某种形式的加密操作,使之不可用,或者通过修改系统配置文件,干扰用户正常使用系统的方法,使系统的可用性降低,然后通过弹出窗口、对话框或生成文本文件等方式向用户发出勒索通知,要求用户向指定账户汇款来获得解密文件的密码或者获得恢复系统正常运行的方法。
勒索软件是近年数量增长最快的恶意代码类型,主要原因有以下几个:
-
加密手段有效,解密成本高。勒索软件都采用成熟的密码学算法,使用高强度的对称和非对称加密算法对文件进行加密。除非在实现上有漏洞或密钥泄密,否则在没有私钥的情况下几乎没有可能解密。当受害者数据非常重要又没有备份的情况下,除了支付赎金没有别的方法去恢复数据,正是因为这点勒索者能源源不断地获取高额收益,推动了勒索软件的快速增长。
-
使用电子货币支付赎金,变现快,追踪困难。几乎所有勒索软件支付赎金的手段都是采用比特币来进行的。比特币因为匿名、变现快、追踪困难,再加上大众比较熟知比特币,支付起来困难不是很大而被攻击者大量使用。可以说比特币帮助勒索软件解决了支付赎金的问题,进一步推动了勒索软件的发展。
-
勒索软件即服务(Ransomware-as-a-server)的出现,降低了攻击的技术门槛。勒索软件服务化,开发者提供整套勒索软件的解决方案,从勒索软件的开发、传播到赎金的收取都提供完整的服务。攻击者不需要任何知识,只要支付少量的租金即可租赁他们的服务,从而开展勒索软件的非法勾当。这大大降低了使用勒索软件的技术门槛,推动了勒索软件的大规模爆发。
6.恶意代码防范的基本措施包括哪些?
安装维护防病毒软件、谨慎使用链接和附件、阻止弹出式广告、使用权限有限的账户、禁用外部媒体自动运行和自动播放功能、更改密码、保持软件更新、资料备份、安装或启用防火墙、使用反间谍软件工具、监控账户、避免使用公共 Wi-Fi等。
7.试为所在学院或单位拟定恶意代码防治管理制度。
- 关于计算机防毒软件的安装、使用和维护管理
- 连网计算机、重要系统的关键计算机要安装防计算机病毒软件,使用计算机时必须启动防计算机病毒软件,并定期或及时(随时)更新(升级)计算机病毒防范产品的版本。要使用国家规定的、具有计算机使用系统安全专用产品销售许可证的计算机防病毒产品。·重要计算机要定期进行计算机病毒检查,系统中的程序要定期进行比较测试和检查。
- 能用硬盘启动的,尽量不要使用U盘或光盘启动计算机。
- 使用光盘、U盘等移动存储设备,运行外来的系统和软件,下载软件时,要先进行计算机病毒检查,确认无计算机病毒后才可以使用,严禁使用未经清查的、来历不明的优盘、U盘等。
- 对新购进的计算机及设备,为预防计算机病毒的侵害,要组织专业人员检查后方可投入运行。
- 严禁使用盗版软件,特别是盗版的杀毒软件,严禁在工作计算机上安装和运行各类游戏软件。
- 随时关注软件提供商的安全漏洞公示,及时为系统安装最新的漏洞补丁。
- 关于网络接口的管理
- 本单位的计算机信息系统,如内部网与局域网,要与因特网隔离,如要使用因特网时,应断开本系统的内网连接,同时必须启动计算机病毒防火墙。
- 对获准上因特网的计算机,要设卡建档,责任到人。
- 单位内部的业务网(如生产过程控制系统等)要与本单位的办公计算机网分开,内网的电子邮件系统要与因特网的电子邮件系统分开。
- 在接入因特网时,严格控制软件下载,谨慎接收电子邮件;在接收电子邮件时,严禁打开来历不明的邮件附件,对邮件附件要先查毒再打开。
- 对服务器,特别是邮件服务器,要采用可靠的网络防计算机病毒软件,并对经过服务器的信息进行监控,防止计算机病毒通过邮件服务器扩散和传播。
- 关键服务器要尽量做到专机专用,特别是具有读写权限、身份确认功能的认证服务器一定要专用。
- 对共享的网络文件服务器,应特别加以维护,控制读写权限,尽量不在服务器上运行软件程序。
- 关于数据备份
- 系统的重要数据资源要采取措施加以保护。
- 关键数据要经常备份,或自动异地备份。
- 备份介质要由专人保管,并有检索标记。
- 关于恶意代码防范预报预警机制的建立
- 跟踪恶意代码发展的最新动态,特别是有严重破坏力的恶意代码的爆发日期或爆发条件。
- 将恶意代码爆发的情况、查杀的措施及时通知单位的所有部门及相关用户,进行有效防范。
- 关于计算机病毒防范的日常管理
- 随时注意计算机的各种异常现象,一旦发现异常应该立即用查毒软件仔细检查。
- 经常更新与升级防杀计算机病毒软件的版本。
- 对重点岗位的计算机要定点、定时、定人做查毒、杀毒巡检。
- 经常关心防杀计算机病毒厂商公布的计算机病毒情报,及时了解新产生的、传播面广的计算机病毒,并知道它们的发作特征和存在形态,及时分析计算机系统出现的异常是否与新的计算机病毒有关。
- 制定关于计算机病毒防范工作人员的培训要求。·制定关于计算机病毒防范工作的激励与奖惩。·制定关于计算机信息安全保密方面的要求条款等。
- 发现或受到恶意代码攻击时的管理措施
- 当出现恶意代码传染迹象时,立即隔离被感染的系统和网络,并进行处理,不应带毒继续运行。
- 发现恶意代码后,一般应利用杀毒软件清除文件中的计算机病毒;杀毒完成后,重启计算机,再次用防杀计算机病毒软件检查系统中是否还存在计算机病毒,并确定被感染破坏的数据是否确实完全恢复。
- 如果破坏程度比较严重,或感染的是重要数据文件,则自己不要盲目修复,而要请计算机病毒防范的专业人员来处理。
- 对于杀毒软件无法杀除的计算机病毒,应将计算机病毒样本送交有关部门,以供详细分析。
- 一旦发生计算机病毒疫情,要启动应急计划,采取应急措施,将损失降到最小。
- 恶意代码防治管理制度的实施与检查
- 要明确本单位恶意代码防范的责任体系,明确主管部门与责任人,主管部门与其他部门之间的关系,以及主要责任人的职责与权利等。
- 要建立检查监管小组,以定期常规检查与特别日期专项检查、集中检查与分散检查相结合的方式,对本单位的恶意代码防治管理制度的实施情况进行检查。
- 要接受各级政府及公安机关有关部门的监督、检查和指导。
- 要建立重大事故报告制度。对因恶意代码引起的计算机信息系统瘫痪、程序和数据严重破坏等重大事故,以及发生的计算机犯罪案件,应保护现场并及时向上级主管部门,以及各级公安机关有关监察部门和管理计算机病毒防范工作的政府职能部门报告。
第十四章(4) #
- 我国对于软件的知识产权有哪些法律保护途径?
- 《计算机软件保护条例》
- 《中华人民共和国专利法》
- 商业秘密所有权保护
- 《中华人民共和国商标法》
- 《互联网著作权行政保护办法》
- 《信息网络传播权保护条例》
- 《移动互联网应用程序信息服务管理规定》
2.根据我国法律,软件著作权人有哪些权利?在日常学习和生活中,有哪些违反软件著作权的行为?
软件著作权人享有如下权利:
- 发表权,即决定软件是否公之于众的权利;
- 署名权,即表明开发者身份,在软件上署名的权利;
- 修改权,即对软件进行增补、删节,或者改变指令、语句顺序的权利;
- 复制权,即将软件制作一份或者多份的权利;
- 发行权,即以出售或者赠与方式向公众提供软件的原件或者复制件的权利;
- 出租权,即有偿许可他人临时使用软件的权利,但是软件不是出租的主要标的的除外;
- 信息网络传播权,即以有线或者无线方式向公众提供软件,使公众可以在其个人选定的时间和地点获 得软件的权利;
- 翻译权,即将原软件从一种自然语言文字转换成另一种自然语言文字的权利;
- 应当由软件著作权人享有的其他权利。
软件著作权人可以许可他人行使其软件著作权,并有权获得报酬。
软件著作权人可以全部或者部分转让其软件著作权,并有权获得报酬。
以下行为是违反软件著作权的行为:
- 未经软件著作权人许可,发表、登记、修改或翻译其软件。
- 将他人软件作为自己的软件发表或者登记,在他人软件上署名或者更改他人软件上的署名。
- 未经合作者许可,将与他人合作开发的软件作为自己单独完成的软件发表或者登记。
- 复制或者部分复制著作权人的软件。
- 向公众发行、出租或通过信息网络传播著作权人的软件。
- 故意避开或者破坏著作权人为保护其软件著作权而采取的技术措施。
- 故意删除或者改变软件权利管理电子信息。
- 转让或者许可他人行使著作权人的软件著作权。
3.试述软件版权的概念。针对软件的版权,有哪些侵权行为?有哪些保护措施?
软件版权属于知识产权的著作权范畴,具有知识产权的特征,即时间性,专有性和地域性。软件版权在法律上称为"计算机软件著作权"。属于著作权(知识产权)的一种。
有以下侵权行为:
- 软件盗版,对软件进行非法复制和使用。
- 逆向工程,即软件被非法修改或剽窃软件设计思想等。
- 信息泄露,即对软件载体及涉及数据的泄露。
有以下保护措施:
-
基于硬件的保护技术如:对发行介质的保护、软件狗、可信计算芯片
-
基于软件的保护技术如:注册验证、软件水印、代码混淆、软件加壳、虚拟机保护
-
云环境下的云授权保护模型
-
软件版权保护的目标有哪些?它与软件保护的目标有什么联系与区别?
软件版权保护的目标有如下几点:
- 防软件盗版,即对软件进行防非法复制和使用的保护。
- 防逆向工程,即防止软件被非法修改或剽窃软件设计思想等。
- 防信息泄露,即对软件载体及涉及数据的保护,如加密硬件、加密算法的密钥等。
与软件保护的联系与区别如下:
- 软件版权保护的目标是软件保护目标的一个子集。软件保护除了确保软件版权不受侵害以外,还要防范针对软件的恶意代码感染、渗透、篡改和执行等侵害。
- 软件版权保护的许多措施同样可以应用于软件保护。