软件工程方法:
方法:抽象化、建模、设计、算法、协议
过程:过程的质量、进度、成本、配置
工具:程序设计语言、编译、配置工具
瀑布模型
迭代模型
增量模型
原型
螺旋模型
净室模型---范围小,逻辑明确,等级高的项目,军工项目
软件安全漏洞问题-软件缺陷密度
千行代码缺陷路KLOC---普通软件4-40,高管理软件2-4,美国NAS软件0.1
例,1000行代码1个缺陷,缺陷率为1。1000行代码10个缺陷,缺陷率为10。
漏洞数量
软件安全目标:可信赖性,可预见性,可遵循性
软件安全思想:风险管理,全生命周期思想,提前介入
软件安全开发模型:SDL,CMMI,SAMM,BSIMM,CLASP
SDL---阶段和活动
软安全开发生命阶段:开发7阶段,安全措施17项必需的安全活动
CMMI---能力成熟度模型
Capability Maturity Model Integration--五级
SAMM---软件保证成熟度模型
Software Assurance Maturity Mode 开放框架,基于V字模型
治理、构造、验证、部署;通用性比较强
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控制、管理手册、使用手册、安全手册
运行维护:安全管理体系、安全措施、安全测量、应急响应、连续性、灾备
安全验收:
正式验收流程
制定软件验收标准
安全纳入到验收考虑中
安全部署:
提供软件文档
软件部署工具
软件补丁加固
软件配置维护