当前课程知识点:网络空间安全技术 >  第6章 网络空间安全防御应用与数据安全技术 >  6.3 软件安全技术 >  6.3 软件安全技术

返回《网络空间安全技术》慕课在线视频课程列表

6.3 软件安全技术在线视频

下一节:6.4 数据安全技术体系

返回《网络空间安全技术》慕课在线视频列表

6.3 软件安全技术课程教案、知识点、字幕

同学们,大家好

这节课我们来学习

《网络空间安全技术》第三篇

网络空间安全防御技术体系

第6章

网络空间安全防御应用与数据安全技术

第3节的内容

软件安全技术

在这一节里面

我们分四个小点

来跟大家一起讨论

首先

我们要讨论

软件安全性与软件安全的概念

第二

我们要讨论一下软件工程问题

第三

是软件安全编程有关的知识

第四

我们要进行一下思考和拓展

首先

我们来看

第一小点

软件安全性与软件安全

我们经常会听到

软件安全性与软件安全

这两个名词

那么到底什么是软件安全性

什么又是软件安全呢

我们具体来看软件安全性的定义

软件安全性

是使软件所控制的系统

始终处于

不危及人的生命财产

和生态环境的安全状态

它是软件的质量属性之一

软件安全性是软件的质量属性之一

这种属性

要求软件

同时兼有向合法用户

提供正确服务

并阻止非授权使用软件及资源的能力

从软件安全性的构成上来看

它分为两个主要部分

一个是功能安全性

也就是Safety

这种安全性是保障功能正确实现

而且不可实现非预期的功能

第二种

是信息安全性

也就是Security

它用来保障软件的信息安全要求得以实现

接下来我们分析一下

软件不安全的原因

从软件开发者的角度来看

软件不安全

它的原因在于软件研发

未严格遵守软件工程规范

编码人员未采取科学的编码方法

安全测试不到位

或者是

安全测试直接缺失

那么从软件工程自身的角度来看

软件不安全的原因来自于软件复杂性

和研发进度的冲突

软件安全问题的不可预见性

软件需求变更及其不规范性

软件组件之间交互的不可预见性

这些都是软件不安全的原因

接下来我们看一下

软件安全技术的概念

软件安全技术是为确保

应用软件系统达到确定的安全性目标的

安全技术措施中可以采取的技术

软件安全技术实现

需要采取系统化

规范化

数量化等工程方法

来指导软件系统的构建

接下来我们来

分析软件系统安全技术的要求

分为三大方面

首先是生命周期安全技术要求

包括开始阶段

获得或开发阶段

实现和评估阶段

运行和维护阶段

以及结束和处理阶段

第二是安全功能技术要求

包括用户的身份鉴别

抗抵赖、访问控制、标记、安全审计

数据完整性和保密性

可信路径

备份与故障恢复

安全性检测分析等等

第三个方面就是安全保证技术要求

包括安全子系统自身保护要求

安全子系统设计和实现要求

以及安全子系统安全管理要求

接下来我们来讨论

软件安全工程

首先我们来看一下

软件安全工程基本思想

所谓软件安全工程

它是采用系统化

规范化和数量化的工程方法

来指导构建安全的软件

它是“软件工程”+“安全工程”

二者的相互渗透

和深度融合的结果

体现了系统级、工程化的思维

我们说软件安全是系统级问题

需要从工程的角度来考虑安全机制

比如说访问控制机制等等

和基于安全的设计

比如说使攻击难以实施的

健壮设计等等

接下来我们看

软件安全工程的安全接触点

所谓软件安全的接触点

是指实现软件安全的最优方法

也就是所谓的最佳实践

那么如何来应用安全工程方法呢

如何在软件研发当中

将安全接触点应用到不同的软件工件当中

也就是如何在需求

体系结构

设计、编码、测试、确认、测量

和维护阶段当中来采用安全工程方法

接下来 我们来看具体的

软件安全工程七大接触点

第一

是代码审核

实现安全的软件的必要

而不充分的方法就是代码审核

在代码这一层级

它所关注的焦点是实现缺陷

因此这种方法

它只能够确定缺陷

第二个

接触点

是体系结构风险分析

在设计和体系结构级当中

系统必须是连贯一致的

并提供统一的安全防线

在基于说明书的体系结构阶段

和类层次的设计阶段

体系结构风险分析都是必需的

第三个接触点是渗透测试

它给出了对处于真实运行环境当中的

实际部署的软件的

很好的理解

应用程序或者是软件所面临的

渗透测试

与网络渗透测试并不相同

第四个接触点

是基于风险的安全测试

它必须包含两种策略

第一

是用标准功能测试技术来进行的

安全功能性测试

第二

是以攻击模式

风险分析结果和滥用案例为基础的

基于风险的安全测试

质量保障

是为了保证所有“好”的事情发生

而安全测试呢

则是为了保证“坏”的事情不会发生

第五个接触点是滥用案例

我们也叫做误用案例

它描述了系统在受到攻击时的行为表现

建造滥用案例要求明确地说明

应该保护什么

免受谁的攻击

以及保护多长时间

第六个接触点是安全需求

必须明确地在需求级别当中

加入安全方面的考虑

第七

是安全操作接触点

经过有效组合的安全操作

允许和鼓励安全专业人员

积极应用接触点

通过理解攻击和攻击程序

而获得的知识

应该再应用到软件开发过程当中去

接下来我们来讨论

软件安全设计的十原则

首先第一

是最小攻击面原则

比如说采取

“关闭不必要对外开放的端口”等措施

来实现最小化的攻击面

第二

是提高默认设置的安全性

系统的默认配置

容易带来安全风险

比如说系统出厂默认账号是

admin

而密码同样也是admin

这样

非常容易被猜测出来

软件安全设计

第三个原则

是权限最小化原则

也就是要求严格遵循最小特权原则

第四个原则是纵深防御原则

采取多样化

多层次

纵深防御措施

比如说

如果要防止SQL注入攻击

那么如何来实现纵深防御呢

首先第一步

采用SQL语句来进行预编译

第二

在部署WAF

在外围进行拦截

第三

将数据库当中的

敏感数据进行加密存储

从而实现层层防护

接下来我们来看一下

软件安全设计

第五个原则

失败或者是错误处理的安全问题

当异常发生时

异常处理代码如果处理不当

可能会导致意想不到的问题

比如说

权限提升

和信息泄露等等

因此要对失败或错误处理的环节

进行妥善的处理

第六个原则

是不信任第三方系统

我们在应用第三方系统的时候

应当对

第三方系统

进行安全评估

或者是相关的验证

而不是对其进行直接信任

第七个原则是业务隔离原则

将业务系统进行不同粒度的模块化分割

比如说采用

微服务模式等等

来实现分割

第八个原则是公开设计原则

这条原则呢

要求代码要适度公开

因为适度公开的代码

有利于及早暴露缺陷

经修复后可提升系统安全性

正如加密机制

算法本身公开

但加解密密钥保密的原理一样

第九个原则是简化系统设计的原则

我们说简单成就安全

简单成就效率

系统越复杂

可能的攻击面就越大

系统越不安全

因此我们需要

简化系统的设计

第十个原则是使用白名单原则

白名单

有利于管控授权用户和相应的操作

虽然白名单这种机制容易导致“误警”

但是

显然它的安全性

要优于“黑名单”的“漏警”

而且白名单的这种“误警”

是可以通过

更新白名单来解决

来补救的

这就是我们软件安全设计的十个原则

接下来我们来讨论软件安全编程

首先我们来看

国际软件安全编程指南

在国际上

比较有名的软件安全编程指南

有四个部分

首先第一个是CERT

提出的C

C++

Java

Perl

四种编程语言的安全编程指南

这个CERT是国际上非常知名的

计算机应急响应小组的英文缩写

第二大类是

国际标准化组织

和国际电工委员会

也就是

ISO和IEC

它们做的一系列有关

安全编程的标准

比如说ISO 17961

《C语言安全编程规则》

ISO/IEC TR 24772

《规避漏洞的编程语言选择和使用》等等

第三类

安全编程指南就是

非常著名的汽车工业软件可靠性协会

提出的对嵌入式软件

进行C/C++编码的相关标准

最后

还有CWE

OWASP等提出的

规避漏洞的应用软件编码的规范等等

这些都是国际上比较著名的

软件安全编程的指南

接下来我们来讨论一下

软件安全编程要求框架

为了有效地降低

所研发软件的脆弱性或者是漏洞

我们要对软件安全编程提出以下要求

第一

是程序安全

包括

安全功能的实现

代码的实现

以及资源使用三个方面

第二

是环境安全

主要是包括

安全管理配置

接下来

我们来看一下

这个就是

软件安全编程要求的框架

大家可以看到

左边是有关程序安全的内容

右边是环境安全的内容

在程序安全里面

又分三个方面

一个是安全功能技术列表

第二是代码实现安全要求

第三

是资源使用的安全要求

首先我们来看

安全功能实现

第一个是

安全功能实现之数据清洗

数据清洗分为两部分

一个是输入验证

第二是输出编码

在输入验证方面

需要验证所有的数据

在可信系统上执行输入验证

建立可信边界

检测数据类型和检测输入长度

明确所有输入的字符集

对于来自命令行

环境以及配置文件的输入进行校验等等

在输出编码方面

编码所有不安全的输出数据

在可信系统上执行输出编码

定义输出编码规则

抗接收抵赖等等

接下来我们来看一下

安全功能实现的

数据加密和保护的要求

从加密规范上来看

要使用可信的密码算法

确保密码运算过程的安全性

在可信系统上执行加密过程

安全地处理加密模块的失败操作

尽量少地共享秘密信息

规范密钥管理流程

使用安全的随机数生成器

实现密钥安全

从数据保护的角度来看

要确保用户数据的完整性

保护服务器端的源代码

加密存储敏感数据

删除用户可访问的源码当中的注释

删除不需要的应用程序和系统文档

保护缓存

或临时拷贝的敏感数据

禁止在客户端保存

敏感的数据信息

避免用户数据的彻底丢失

禁止表单当中的自动填充功能

这些就是从

加密规范和数据保护的角度

对安全功能实现做出了阐释

接下来我们来看一下

安全功能实现的访问控制方面

两个方面

一是身份鉴别

二是口令安全

在身份鉴别方面需要提供

安全的身份鉴别环境和流程

最小化角色授权

避免依赖不可靠信息进行身份鉴别

验证数字证书

避免认证被绕过

根据业务安全要求来选择身份鉴别方式

避免在处理身份鉴别的过程当中

透露多余的信息

对认证尝试的频率要进行限制

连续多次登录失败要强制进行

账户的锁定

实现用户和主体的绑定

那么从口令安全的角度来看

要确保口令不可见

使用强口令

替换默认的口令

不使用过期的口令

保护口令重置信息

安全的存储口令

在可信系统上

执行口令加密

最小化口令的保存时间

使用安全的口令传输

用户信息改变时使用单独的信道通知

以及权限管理等等

接下来我们来看一下

软件安全编程要求框架

代码实现安全里面的

面向对象

程序的安全

禁止未受信子类

对具有不变性的类

和方法进行扩展

改变基类须保存子类之间的依赖关系

声明数据成员成为私有

并提供可访问的封装器方法

代码中禁止混用

具有泛型和非泛型的原始数据的类型

为可变类提供复制功能

并通过此功能允许将实例传递给

非受信的代码

返回引用之前

防御性复制私有的可变的类成员

接下来 我们来看一下

代码实现安全里面的

并发程序安全的要求

要确保共享数据的线程安全

确保共享变量、数据的可见性

确保同步对象上的锁

按相同的顺序来获得和释放

确保导致阻塞的线程可以被终止

确保线程池安全

确保线程专有存储可被及时清理

注意共享对象的存储周期

代码实现安全里面的异常处理安全

要求要自行处理错误

保持对象状态的一致性

异常处理时要及时的释放资源

禁止忽略

捕获的异常

不在软件执行异常时

暴露敏感的信息

在日志安全方面

首先要进行日志文件的保护

在可信系统上执行所有的日志记录操作

集中日志记录

创建清晰的日志等级

在日志记录中使用时间戳

对每个重要的行为都记录日志

并避免在记录日志时发生异常

接下来我们来看一下

软件安全编程要求框架的资源使用安全

资源使用安全主要是要求

要进行有效的资源管理

每一个资源都要具有唯一的标识

而且对于重要的资源要进行初始化

限制资源的分配和使用

及时释放资源

不使用已过期

或已释放的资源

同时要检查外部资源的安全性

提供足够大的资源池

避免在记录日志的时候发生异常

接下来我们来看一下

资源使用安全的

内存管理要求

首先我们要遵从

一致的内存管理约定

要防范缓冲区的溢出

避免双重释放漏洞

禁止写入已释放内存

及时释放内存

同时要保护堆安全

避免使用已知有漏洞的函数

允许用户适当个性化的内存管理方式

这就是在

内存管理方面

应该做到的要求

接下来我们来看一下

资源使用安全里面的数据库管理

首先要禁止使用默认账户和口令

确保数据完整性

使用参数化的SQL语句和存储过程

访问数据库使用尽可能低权限

使用

行级别的访问控制

为所有变量指定类型

验证来自数据库当中的数据

及时释放数据库资源

关闭不必要的数据库功能

同时要允许用户

适当个性化的内存管理方式

这就是数据库的管理

接下来我们来看一下

资源使用安全的文件管理

首先需要采取最小权限原则

验证文件系统的所有信息

确保文件上传安全

禁止将绝对文件路径传递给用户

同时还需要使用安全的临时文件

确保应用程序文件和资源是只读的

避免文件访问竞争

确保文件系统资源会被释放

检测和处理文件相关的错误

是资源使用安全当中

文件管理的具体要求

接下来我们来看一下

资源使用安全里面

对网络传输的具体要求

要验证网络的数据包

使用加密传输

确保通信安全

同时还要实现消息完整性的验证

使用随机数和时间戳组合

来防止重放攻击

同时还要控制会话

来进行管理

接下来我们来看一下

软件安全编程要求框架里面的配置管理安全

首先是要构建安全的编译环境

及时校验版本稳定性和安全性

关闭目录自动列表功能

应用程序的安全配置信息

应当可读

同时需要

隔离开发环境和实际的运行环境

推荐使用软件变更管理系统

同时要管理控制相关会话

同学们接下来

我们就本节学习内容

提出以下几个问题

供同学们思考

在软件设计的时候

如何统筹考虑功能安全性和信息安全性

我们有几点提示

首先

大家要搞清楚

功能安全性和信息安全性

二者的本质区别是什么

那么其中一种安全性的破坏

是否会影响到

另外一种安全性

第二

二者能否统用一种更高层次的安全性

第三

在软件的设计的具体流程当中

如何对二者进行统筹考虑

这就是我们这节课

学习内容之后给大家提的思考问题

同学们

这节课我们就讲到这里

感谢观看

下次再见

网络空间安全技术课程列表:

课程总览

-课程总览

第1章 新时代网络空间及其安全概述

-1.1 网络与网络空间

--1.1 网络与网络空间

-1.2 网络安全与网络空间安全

--1.2 网络安全与网络空间安全

-1.3 网络空间安全与国家安全

--1.3.1 网络空间安全与国家安全(上)

--1.3.2 网络空间安全与国家安全(下)

-1.4 网络空间安全威胁 风险与攻防

--1.4 网络空间安全威胁 风险与攻防

-第1章 习题

--第1章 习题

第2章 网络空间安全攻防对抗体系

-2.1 安全理论 技术 与工程的关系

--2.1 安全理论 技术 与工程的关系

-2.2 网络空间信息系统安全工程

--2.2.1 网络空间信息系统安全工程(上)

--2.2.2 网络空间信息系统安全工程(中)

--2.2.3 网络空间信息系统安全工程(下)

-2.3 网络空间安全技术体系

--2.3 网络空间安全技术体系

-2.4 网络安全与攻防对抗模型

--2.4.1 网络安全与攻防对抗模型(上)

--2.4.2 网络安全与攻防对抗模型(下)

-第2章 习题

--第2章 习题

第3章 网络安全攻击技术体系

-3.1 攻击模型与攻击链

--3.1 攻击模型与攻击链

-3.2 攻击向量与攻击面

--3.2 攻击向量与攻击面

-3.3 攻击图

--3.3 攻击图

-3.4 网络安全攻击技术分类

--3.4.1 网络安全攻击技术分类(上)

--3.4.2 网络安全攻击技术分类(下)

-3.5 典型的安全攻击方法

--3.5 典型的安全攻击方法

-第3章 习题

--第3章 习题

第4章 网络空间安全防御加密与认证技术

-4.1 密码与加密概述

--4.1.1 密码与加密概述(上)

--4.1.2 密码与加密概述(下)

-4.2 对称加密技术

--4.2.1 对称加密技术(上)

--4.2.2 对称加密技术(下)

-4.3 非对称加密技术

--4.3.1 非对称加密技术(上)

--4.3.2 非对称加密技术(下)

-4.4 哈希技术

--4.4 哈希技术

-4.5 认证技术与PKI体系

--4.5 认证技术与PKI体系

-第4章 习题

--第4章 习题

第5章 网络空间安全防御系统与网络安全技术

-5.1 信任体系与零信任安全

--5.1 信任体系与零信任安全

-5.2 操作系统与终端安全

--5.2 操作系统与终端安全

-5.3 网络安全防护架构

--5.3 网络安全防护架构

-5.4 典型的网络安全技术

--5.4.1 典型的网络安全技术(上)

--5.4.2 典型的网络安全技术(下)

-第5章 习题

--第5章 习题

第6章 网络空间安全防御应用与数据安全技术

-6.1 漏洞扫描与漏洞挖掘技术

--6.1 漏洞扫描与漏洞挖掘技术

-6.2 Web安全技术

--6.2 Web安全技术

-6.3 软件安全技术

--6.3 软件安全技术

-6.4 数据安全技术体系

--6.4 数据安全技术体系

-6.5 信息隐藏技术

--6.5 信息隐藏技术

-第6章 习题

--第6章 习题

第7章 网络空间安全管控技术体系

-7.1 网络安全风险评估技术

--7.1 网络安全风险评估技术

-7.2 网络安全测评技术

--7.2 网络安全测评技术

-7.3 网络安全等级保护

--7.3.1 网络安全等级保护(上)

--7.3.2 网络安全等级保护(下)

-7.4 网络安全情报分析与态势感知技术

--7.4 网络安全情报分析与态势感知技术

-7.5 内容安全技术

--7.5 内容安全技术

-第7章 习题

--第7章 习题

第8章 网络空间安全新技术与新应用

-8.1 工业控制系统安全保障

--8.1 工业控制系统安全保障

-8.2 物联网安全保障

--8.2 物联网安全保障

-8.3 信息物理系统安全保障

--8.3 信息物理系统安全保障

-8.4 云计算安全保障

--8.4 云计算安全保障

-8.5 区块链安全保障

--8.5 区块链安全保障

-第8章 习题

--第8章 习题

6.3 软件安全技术笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。