第一章——软件安全概述
零日漏洞(了解):
未被公开披露的软件漏洞,没有给软件的作者或厂商以时间去为漏洞打补丁或是给出解决方案建议【零日漏洞并不是指软件发布后被立刻发现的漏洞】
零日攻击:
利用零日漏洞开发工具进行的攻击
软件(P2):
是程序、数据和文档的集合体
软件安全重要性(P2)(为什么要关注软件安全):
- 软件无处不在;
- 软件规模日益庞大;
- 软件漏洞普遍存在,零日漏洞成为主要安全威胁;
- 软件安全成为国家的一项竞争优势。
信息安全三大基本属性(CIA):
保密性(Confidentialiy)、完整性(Integrity)、可用性(Availability)
第二章——软件漏洞概述
软件漏洞定义(P25)
是软件生命周期中与安全相关的设计错误、编码缺陷及运行故障
软件漏洞如何分级分类管理?
分类:
a) 从对操作系统研究的角度提出的漏洞分类方法
b) 从软件错误角度的漏洞分类方法
c) 多维度分类方法
d) 广义漏洞分类方法
e) 抽象分类方法
分级:
a) 按照漏洞严重等级
b) 利用漏洞评分系统(CVSS)
第三章——Windows系统典型漏洞分析
内存结构及缓冲区溢出
内存结构:代码区、数据区、堆区、栈区。
缓冲区漏洞:在向缓冲区写入数据时,由于没有做边界检查,导致缓冲区数据超过预先分匹配的边界,使溢出的数据覆盖在合法数据上引起系统异常的一种现象。
格式化字符串:产生于数据输出函数中对输出格式解析的缺陷。P212 第五题
第四章——web漏洞分析
一次web访问过程:
DNS域名解析,TCP连接、HTTP请求、处理请求返回HTTP响应、页面渲染和关闭连接。
敏感数据泄露(如何防范):
指对敏感数据未进行加密或加密强度不够,或者没有安全的存储加密数据,导致攻击者获得敏感信息。
开发人员防范的基本方法如下。
对所有重要信息进行加密。使用足够强度的加密算法, 如AES、RSA等。存储密码时,用SHA-256等健壮哈希算法进行处理。
产生的密钥不应与加密信息一起存放。
严格控制对加密存储的访问等。
禁用自动完成以防止敏感数据收集,禁用包含敏感数据的缓存页面。
SQL注入漏洞(原理):
攻击者能够利用web应用程序,将恶意的数据插入SQL查询中,提交到后台数据库引擎执行非授权操作。
SQL注入风险高于其他漏洞的原因(P81):
- SQL注入具有广泛性。2. 相较于其他漏洞,SQL注入漏洞的防范更加困难。
第五章——软件开发模型
软件安全开发模型(P116)
- 微软的软件安全开发生命周期模型(Secure Development Lifecycle ,SDL)和 敏捷SDL
- McGraw的内建安全模型(Building Security In, BSI)和 BSI成熟度模型 BSIMM
- NIST的安全开发生命周期模型
- OWASP提出的综合的轻量级应用安全过程(CLASP)
SDL基本原则:
安全设计,安全配置,安全部署,沟通
敏捷SDL与典型SDL的差别主要有两点。
1)敏捷SDL不采用传统的瀑布模型,而是采用无阶段的迭代开发模型,以实现软件版本的快速更新和发布。如果开发团队采用瀑布式开发流程(具有明确定义的设计、实现、验证和发布阶段),那么更适合采用典型的SDL模型,而并不适合敏捷SDL。
2)在敏捷SDL中,并不是每个发布版本(或每次“突击发布”)都需要达到所有的要求,这也是敏捷SDL与传统SDL之间最大的差别。
敏捷SDL框架定义的3种频率的需求(P122):
- 突击发布:
这些需求是在每一个开发迭代中必须达到的要求。
- 板载型需求:
使产品团队必须在项目开始阶段一次性完成这些要求,之后就不再需要进一步的处理。
- 存储桶型需求:
团队至少每年完成一次全部存储桶型需求。
内建安全BSI模型的核心思想(P123)
对软件全生命周期各个阶段产品的安全性进行评估、测试、验证及操作控制。
BSI模型的软件安全三根支柱(P124)
风险管理、软件安全接触点、安全知识。
NIST的软件安全开发生命周期模型的主要内容(P126):
启动、开发/采购、实施/评估、操作/维护、部署(5阶段)
第六章——软件安全需求分析
软件安全需求(P140):
- 外部安全需求:
指法律法规等遵从性需求
- 内部安全需求:
一指组织内部需要遵守的政策、标准、指南和实践模式 二使与软件业务功能相关的安全需求
软件安全政策需求和标准(P141):
信息系统安全评测国际标准、信息安全管理国际标准、信息系统安全工程国际标准、我国的信息安全标准。
我国为什么要实行网络安全等级保护制度?网络安全保护能力划分为哪些等级?具体每个等级有什么要求?(课后题6)
- 对信息安全分级保护是客观需求,等级化保护是信息安全发展规律,等级保护是国家法律和政策要求。(P145)
- 等级(P146):
A:公民、法人和其他组织的合法权益 B:社会秩序和社会公共利益 C:国家安全
程度:危害、严重危害、特别严重危害。
- 第一级:一般网络,受到破坏会对A造成损害。2. 第二级:一般网络,受到破坏会对A造成严重损害,或者对B造成危害。3. 第三级:重要网络,受到破坏会对A造成特别严重损害,对B造成严重危害,对C造成危害。4. 第四级:特别重要网络,受到破坏会对B造成特别严重危害,对C造成严重危害。5. 第五级:极其重要网络,受到破坏网络会对C造成特别严重损害。
第七章——软件安全设计
软件安全设计的主要工作(P161):
软件架构安全性设计、软件架构安全性分析、软件安全功能设计
了解安全设计原则,问一个具体实例体现了什么安全设计原则。
安全设计原则 :
减小受攻击面原则:去除、禁止一切不需要使用的模块、协议和服务,目的是减少攻击可利用的漏洞 举例——重要性低的功能可取消,重用那些经过测试、已经证明安全的现有库和通用组件
最小授权原则:系统仅授予实体完成规定任务所必需的最小权限
权限分离原则:将软件功能设计为需要在两个以上条件下才能实现
纵深防御原则:在软件设计中加入层次化安全控制和风险缓解/防御方法。 强调不依赖于单一的安全解决方案,有助于减少系统的单一失效点
完全控制原则:要求每一次访问受保护对象的行为都要尽可能进行细粒度检查
威胁建模:通过抽象的概念模型对影响软件系统的威胁进行系统的识别和评价。
威胁建模过程(了解):
1.确定安全目标 2.创建应用程序概况图 3.分解应用程序 4.确定威胁 5.为威胁评估 6. 确定威胁缓解计划或策略 7.验证威胁 8.验证建档
第八章——软件安全编码
为什么要避免使用C语言中原有的字符串函数?所谓的安全字符串函数解决了原有C字符串函数的什么安全漏洞?(P212 第五题)
因为它们不安全,可能导致缓冲区溢出漏洞。
解决了字符串溢出漏洞。
(C语言中原有的字符串函数由于安全性的问题,有可能破坏接受字符串的缓冲区,导致程序出错或者数据丢失。安全字符串函数就是为了解决这个漏洞而设计的,它们会检查字符串的长度,通过将空格截断字符串,或扩充缓冲区的大小来保护数据的完整性。)
第九章——软件安全测试
软件安全测试的内容(P216):
软件安全功能测试、软件安全漏洞测试
软件测试方法(P217):
白盒测试
- 源码分析:静态分析、动态分析
黑盒测试
- 模糊测试2. 渗透测试
模糊测试(P226)
属于黑盒测试,是一种基于缺陷注入的软件安全测试技术。
核心思想是通过监视非预期输入可能产生的异常结果来发现软件问题。
渗透测试(P231)
核心思想:模仿黑客的特定攻击行为,也就是尽可能完整地模拟黑客使用的发现技术和攻击手段,对目标的安全性做深入的探测。
方法:黑盒渗透、白盒渗透。
第十章——软件安全部署
软件部署的主要活动(P241):
打包、安装、更新、激活、钝化、卸载。
第十一章——恶意代码分析基础
计算机初始化启动过程(P249):
主板供电、BIOS自检、BIOS选择启动盘。
根据程序的生成和运行过程,程序大致可分为两类:编译型程序和解释型程序。
1)编译型程序。程序在执行前编译成机器语言代码,运行时直接供机器执行。该类程序执行效率高,依赖编译器,跨平台性差,如用C/C++、Delphi等语言编写的程序。
2)解释型程序。程序在用编程语言编写后,不需要编译,以文本方式存储原始代码。在运行时,通过对应的解释器解释成机器码后再运行,如用JavaScript、Basic语言编写的程序,执行时逐条读取解释每条语句,然后再执行。由此可见解释型程序每执行一句就要翻译一次,效率比较低,但是相比较编译型程序来说,优势在于跨平台性好。
PE文件(了解P259)
windows环境下可执行文件的标准格式是PE文件。
软件逆向分析的方法(P282)
- 动态分析:OllyDbg
- 静态分析:IDA Pro,把二进制代码翻译成汇编语言,能精确地描绘程序的轮廓,从而轻易定位感兴趣部分重点分析
- 动静结合分析:复杂、难以实现。
软件逆向分析的一般过程(P284)
文件装载、指令解码、语义映射、相关图构造、过程分析、类型分析、结果输出。
第十二章——恶意代码防治
恶意代码(P305):
计算机病毒、蠕虫、木马、后门、
Rootkit、勒索软件
- 计算机病毒:一种计算机程序。
- 蠕虫:不需要计算机使用者干预即可运行的攻击程序或代码
- 木马:一个表面上有用的程序或命令过程,但实际上包含一段隐藏的、激活时会运行某种有害功能的代码
- 后门:绕过安全控制而获取对程序或系统访问权的方法。后门仅仅是一个通道,本身不具有直接攻击行为
恶意代码涉及的法律问题强调了下列两点(P321):
- 制作并传播恶意代码是一种违法犯罪行为
- 疏于防治恶意代码也是一种违法犯罪行为
影响软件可信的因素包括(P332):
软件危机、软件缺陷、软件错误、软件故障、软件失效、恶意代码的威胁等
可信验证从以下4个方面进行(P332):
软件特征可信、软件身份可信、软件能力可信、软件环境可信
第十三章——开源软件及其安全性
区分免费软件、共享软件、自由软件(P344)
- 免费软件,指不需要金钱购买而免费得到或使用的软件
- 共享软件,也称为试用软件,先使用后付费,是商业软件的一种特定形式。
- 自由软件,不受限制地自由使用、复制、研究、修改和分发地软件。有版权,但可以免费获得。、
开源软件与自由软件的区别(P349)
- 概念不同:自由软件比开源软件更严格,所有自由软件都是开源软件,但是所有开源软件并不都是自由软件。
- 价值观不同:自由软件始终以自由作为道德标准,开源软件更注重软件的发展。
开源软件的主要权益:著作权、专利权、商标权
开源软件的授权模式(P353)(了解):
- 要求公开源代码,并授予被许可人使用、修改及再发布开源软件的权力。
- 不提供担保。
- 要求软件发布者以恰当方式明显标注有关信息。如著作权声明、软件的功能、对软件的修改日期。
GPL(P354)
GPL是所有开源软件许可证中最严格的一种,对软件发布者限制最大,自由软件倡导的自由,分享与合作的精神理念都集中体现在了GPL中。
第十四章——软件知识产权保护
软件的知识产权问题主要表现在5个方面:版权(著作权)、专利权、商标权、商业秘密、反不正当竞争
版权归原作者 cqupy 所有, 如有侵权,请联系我们删除。