软件安全开发

开发背景

软件工程方法:

方法:抽象化、建模、设计、算法、协议

过程:过程的质量、进度、成本、配置

工具:程序设计语言、编译、配置工具

开发模型

瀑布模型

迭代模型

增量模型

原型

螺旋模型

净室模型---范围小,逻辑明确,等级高的项目,军工项目

软件安全漏洞问题-软件缺陷密度

千行代码缺陷路KLOC---普通软件4-40,高管理软件2-4,美国NAS软件0.1

     例,1000行代码1个缺陷,缺陷率为1。1000行代码10个缺陷,缺陷率为10。

漏洞数量

软件安全目标:可信赖性,可预见性,可遵循性

软件安全思想:风险管理,全生命周期思想,提前介入

软件安全开发模型:SDL,CMMI,SAMM,BSIMM,CLASP

软件安全开发_第1张图片

SDL---阶段和活动

        软安全开发生命阶段:开发7阶段,安全措施17项必需的安全活动

CMMI---能力成熟度模型

      Capability Maturity Model Integration--五级

     软件安全开发_第2张图片

SAMM---软件保证成熟度模型

     Software Assurance Maturity Mode 开放框架,基于V字模型

     治理、构造、验证、部署;通用性比较强

    软件安全开发_第3张图片

BSIMM--BSI成熟度模型

Building Security IN使安全成为软件开发必须的部分

软件安全三根支柱:风险管理,接触点,安全知识

BSIMM是对软件安全的活动进行量化,提出12个维度要求。

CLASP应用安全过程

Comprehensive Lightweight Application Security Process

用于构建轻量级过程,包括30个特定活动和辅助资源。

安全需求与设计

合规性是基础,人的安全是核心

考虑要全面,不能仅考虑安全方面,要求考虑刚性需求,注意悖论需求,去除伪需求

安全设计:概要设计,详细设计

设计原则:

最小特权,权限分类,最少共享,完全中立,心理可接受原则,

故障默认处理原则,经济机制原则,保护最薄弱环节,公开设计原则,隐私保护原则,

攻击面最小化原则,不信任原则,纵深防御原则,可追溯性原则。

降低攻击面

概念:取消不需要的功能,增加对功能的安全防护

步骤:分析软件功能特性及重要性,分析从哪里访问和操作,降低访问权限和增强安全措施

策略:等级低攻击面大取消功能,等级中攻击面大需要配置后才开启,等级高攻击面大关闭或限制接口增加安全保证措施或技术。

威胁建模

概念:了解安全威胁

流程:确定对象,识别威胁,评估威胁,消减威胁

威胁要素:源头,动机,方式,对象,频率

威胁分类:基于S-T-R-I-D-E的威胁建模方法。

     S-欺骗;T-篡改;R-抵赖;I-信息泄露;D-拒绝服务;E-权限提升

安全编码与测试

编码安全

程序外部输入安全

要求:所有输入数据检查、验证及过滤

原则:不信任原则

验证时间:首次,缓存过期

来源:命令行、环境变量、文件、网络

验证要素:

数据,参数,向量,地址,文件,

命令,协议,语法,长度,格式

类型,约束,语义,规则,自定义。

程序内部安全

内部接口验证

异常的安全处理---检测异常,默认故障保护机制,必要时立即拒绝不会送详细错误代码

最小化反馈

避免竞争死锁

安全调用组件

软件调用组件:操作系统,数据库,可重用的库,网络服务(WEB/DNS),其他

使用经过认可的组件

严格检查参数

正确处理返回值--错误码统一规划和设计

保护调用传递的数据--密码算法,传输协议SSH

不安全函数使用

禁止使用危险函数,比如gets,sprintf,strcat等

软件编译安全

编译环境安全

编译工具安全

程序代码审核

        方式:审核有针对性,人工审核+工具审核

       代码分析工具:安全性,多层性,可扩展性,知识性,继承性

       商业工具, 免费开源工具

软件测试

概念:测试计划,方案,用例,工具,证据,报告,覆盖,深度

测试信条:预期测试的测试结果是预先确定的;好的用例发现错误概率高;测试独立于编码,需要具备应用及软件两方面专业知识,测试人员使用不同于开发人员的工具,只检查常见的测试不行,测试文档要能够在利用。

测试方法:

过程:单元测试,集成测试,系统测试

输入信息测试:黑盒,白盒,灰盒

状态测试:静态测试,动态测试

输入条件测试:正常测试,异常测试

基于源码测试:代码评审、代码审查、代码走查

基于闭环思想:回归测试

基于项目测试:验收测试,压力测试,性能测试,基线测试

基于安全测试:模式测试(大量畸形数据),渗透测试(模拟攻击)

安全验收与交付

供应链安全-----开源问题,知识产权,自主可控,网络环境,开发人员

   策略---软件生态链的构建,加强软件开发自主可控的能力,可靠的编译软件获取方式,官方渠道发布验证

   知识产权、开发工具、编译器、开发人员、开源代码

  交付安全:数字签名、版本控制、Lisence控制、管理手册、使用手册、安全手册

  运行维护:安全管理体系、安全措施、安全测量、应急响应、连续性、灾备

安全验收:

正式验收流程

制定软件验收标准

安全纳入到验收考虑中

安全部署:

提供软件文档

软件部署工具

软件补丁加固

软件配置维护

你可能感兴趣的:(安全)