0%

软件安全——第12章

Chapter 12 构建安全的软件

12.1 软件开发生命周期

  1. 分析阶段:软件需求分析。通过研讨或调查研究,对用户的需求进行收集,最后把它用标准的软件工程开发语言(需求规格说明书)表达出来。即建立软件的逻辑模型、编写需求规格说明书文档
  2. 设计阶段:概要设计和详细设计两个阶段。将软件分解成一个个模块并将模块内部的结构设计出来。
    • 结构化分析方法、数据流程图和数据字典等方法设计建 立相应的软件系统的体系结构
    • 模块设计,给出软件的模块结构,将整个系统分解成若干个子 系统或模块
    • 设计模块的程序流程、算法和数据结构,设计数据库
    • 编写软件概要设计和详细设计说明书,数据库或数据结构设计说明书
  3. 编码阶段:把软件设计转换成计算机可以接受的程序
    • 基于软件产品的开发质量的要求,充分了解软件开发语言、工具的特性和编程风格
    • 编码并提供源程序清单
  4. 测试阶段:
    • 白盒测试:依据的是程序内部的的逻辑结构来发现软件的编程错误、结构错误和数据错误,以较少的用例覆盖尽可能多的内部程序逻辑结果
    • 黑盒测试:依据的是软件的功能或软件行为描述,发现软件的接口、功能和结构错误,以较少的用例覆盖模块输出和输入接口
  5. 维护阶段:根据软件运行的情况,对软件进行适当修改,成本较高

12.2 软件设计阶段威胁建模

  • 在项目组中成立一个小组专门研究安全问题
  • 分解系统需求,按照需求规格说明书和设计文档中的内容,站在安全角度,分析系统在安全方面的需求
  • 确定系统可能面临哪些威胁
  • 画出威胁树,对软件可能收到的威胁进行表达。
    威胁树一般画3层:
    • 第一层写受到的攻击种类
    • 第二层写被攻击的原因
    • 第三层写具体攻击的处理方式
  • 选择应付威胁或者缓和威胁的方法:告知用户、排查与修复问题等
  • 确定最终技术:将最终选用的技术,直接在威胁树中描述或者用图表画出来

12.3 安全代码的编写

在编写代码的过程中考虑安全问题。如内存安全、线程安全、处理异常等

12.4 软件安全性测试

  • 确保软件不会去完成没有预先设计的功能
  • 确保软件能够完成预先设计的功能

进行安全测试,需要精湛的系统分析技术和反攻击技术。其特点是:

  • 非常灵活,测试用例没有太多的预见性
  • 没有固定的步骤可以遵循
  • 工作量大,并且不能保证完全地加以解决

12.5 漏洞响应和产品的维护

在发现漏洞时,要确保能够迅速确认、响应、修复漏洞,在发现漏洞后的第一时间采取措施

漏洞相应常规阶段:

  • 发现漏洞通知厂商
  • 确认漏洞和风险评估
  • 修复漏洞
  • 发布补丁及安全简报对外公布安全补丁

练习题
1. 某公司收到安全人员的报告,发现有一种恶意代码利用该公司编写的一款软件(需要网络连接)进行网络蠕虫传播,试画出威胁树进行分析。

解题技巧: 威胁树不同层级常用术语汇总
第一层:受到的攻击种类

  • 网络相关:SQL注入攻击、跨站脚本攻击、木马攻击、蠕虫攻击、DDoS攻击等
  • 非网络相关:缓冲区溢出等二进制漏洞攻击,病毒攻击等

第二层:受到攻击的原因

  • 存在零日漏洞(万能句)、安全测试覆盖面不足、软件设计缺陷、内部人员不当操作(如被社工)、工程师缺乏安全意识、没有及时安装补丁等

第三层:解决方案

  • 及时上报安全漏洞并做出应对措施、重新进行安全测试、重新审视软件设计方案,必要时需要停服解决设计缺陷、安装最新补丁,更新软件、进行流量捕获与分析,完善服务器相关代码等