软件定义是:计算机程序、规则和可能相关的文档。
软件是程序、数据和文档的集合体。
零日漏洞、零日攻击
-
零日漏洞是指未被公开披露的软件漏洞,没有给软件的作者或厂商以时间去为漏洞打补丁或是给出建议解决方案,从而攻击者能够利用这种漏洞破坏计算机程序、数据及设备
-
利用零日漏洞开发攻击工具进行的攻击称为零日攻击。
软件面临哪些安全威胁?
1)软件漏洞
软件漏洞通常被认为是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障等。
2)恶意代码
恶意代码(Malicious Software,Malware)是在未被授权的情况下,以破坏软硬件设备、窃取用户信息、干扰用户正常使用、扰乱用户心理为目的而编制的软件或代码片段。
3)软件侵权
主要指侵犯版权(著作权)
用信息安全的基本属性理解软件安全
保密性(Confidentiality)
信息安全中的保密性,也称为机密性,是指信息仅被合法的实体(如用户、进程等)访问,而不被泄漏给未授权实体的特性。
保密性还包括保护数据的存在性,有时候存在性比数据本身更能暴露信息。
软件产品保护信息和数据的能力,以使未授权人员或系统不能阅读或修改这些信息和数据,而不拒绝授权人员或系统对它们的访问
对系统各项的保护,使其免于受到偶然的或恶意的访问、使用、更改、破坏及泄露。
实现保密性的方法一般是通过物理隔离,信息加密,或是访问控制
完整性(Integrity)
信息安全中的完整性是指,信息在存储、传输或处理等过程中不被未授权、未预期或无意地篡改、销毁等破坏的特性。
不仅仅要考虑数据的完整性,还要考虑操作系统的完整性,即保证系统以无害的方式按照预定的功能运行,不被有意的或者意外的非法操作所破坏。
可以将软件完整性理解为软件产品能够按照预期的功能运行,不受任何有意的或者无意的非法错误所破坏的软件安全属性。
实现完整性的方法一般分为预防和检测两种机制。 预防机制通过阻止任何未经授权的方法来改写数据的企图,如加密、访问控制,以确保数据的完整性。
检测机制并不试图阻止完整性的破坏,而是通过分析数据本身或是用户、系统的行为来发现数据的完整性是否遭受破坏,如数字签名、哈希(Hash)值计算等。
可用性(Availability)
信息安全中的可用性是指,信息、信息系统资源和系统服务可被合法实体访问并按要求使用的特性。 例如,对信息资源和系统服务的拒绝服务攻击就属于对可用性的破坏。
为了实现可用性可以采取备份与灾难恢复、应急响应、系统容侵等许多安全措施。
PDRR 模型
人、技术和操作是3个核心因素,包括了主机、网络、系统边界和支撑性基础设施等多个网络环节之中,如何实现保护(Protection)、检测(Detection)、响应(Reaction)和恢复(Restore)有机结合的动态技术体系,这就是所谓的PDRR(或称PDR2)模型
软件安全防护的基本方法
漏洞是引发信息安全事件产生的根源,软件漏洞尤其如此。恶意代码通常也是针对漏洞而编写出来的,软件侵权的成功往往跟软件漏洞也有密切的关系。因此,软件安全防护围绕漏洞消除展开。 将安全保障措施置于软件发布运行之时:采用多种检测、分析、挖掘技术对安全错误或是安全漏洞进行发现、分析、评价,然后采取多种安全控制措施进行错误修复和风险控制,如传统的打补丁、防病毒、防火墙、入侵检测、应急响应等。 该方法在时间和经济上投入产出比低,信息系统的安全状况很难得到有效改善。
分析软件安全错误发生的原因,将安全错误的修正嵌入到软件开发生命周期的整个阶段。通过对需求分析、设计、实现、测试、发布,以及运维等各阶段相关的软件安全错误的分析与控制,以期大大减少软件产品的漏洞数量,使软件产品的安全性得到有效提高。 该方法是将安全保障的实施开始于软件发布之前,尤其强调从软件生命周期的早期阶段开始安全考虑,从而减少软件生命周期的后期系统运行过程中安全运维的工作量,提高安全保障效果。 从系统开发需求阶段就引入安全要素要比在系统维护阶段才考虑安全问题所花费的错误修复成本要低很多。
软件安全防护的主要技术
1)软件安全属性的认知
2)系统安全工程
运用系统工程的思想和方法,系统地分析信息系统存在的安全漏洞、风险、事件、损失、控制方法以及效果之间复杂的对应关系,对信息系统的安全性进行分析与评价,以期建立一个有效的安全防御体系,而不是简单的安全产品堆砌。 系统安全工程可以在系统生命周期的不同阶段对安全问题提供指导,例如,对于已经发布运行的软件,可以采用系统测试、风险评估与控制等方法构建安全防御体系;而对于尚待开发的系统,也可以应用系统安全工程的思想方法来提高目标系统的安全性。这是一项具有挑战性的工作,也是本书的出发点
3)软件安全开发
软件安全开发关注的是如何运用系统安全工程的思想,以软件的安全性为核心,将安全要素嵌入软件开发生命周期的全过程,有效减少软件产品潜在的漏洞数量或控制在一个风险可接受的水平内,提高软件系统的整体安全性。