导图社区 OSG9第二十章 软件开发安全
CISSP(Certification for Information System Security Professional)即信息系统安全专业认证,这一证书代表国际信息系统安全从业人员的权威认证
编辑于2023-07-31 14:58:01 广东关于GBT 35273—2020个人信息安全规范的思维导图,本标准规定了开展收集、存储、使用、共享、转让、公开披露、删除等个人信息处理活动应遵循的原则和安全要求。
CISSP(Certification for Information System Security Professional)即信息系统安全专业认证,这一证书代表国际信息系统安全从业人员的权威认证
CISSP(Certification for Information System Security Professional)即信息系统安全专业认证,这一证书代表国际信息系统安全从业人员的权威认证
社区模板帮助中心,点此进入>>
关于GBT 35273—2020个人信息安全规范的思维导图,本标准规定了开展收集、存储、使用、共享、转让、公开披露、删除等个人信息处理活动应遵循的原则和安全要求。
CISSP(Certification for Information System Security Professional)即信息系统安全专业认证,这一证书代表国际信息系统安全从业人员的权威认证
CISSP(Certification for Information System Security Professional)即信息系统安全专业认证,这一证书代表国际信息系统安全从业人员的权威认证
第二十章 软件开发安全
20.1 系统开发控制概述
为实现独特的业务目标,很多公司使用定制开发的软件
为防范这些漏洞,有必要在系统开发生命周期内引入安全控制
20.1.1 软件开发
程序员应该力求在开发的应用程序中构建安全性,并为关键应用程序和处理敏感信息的应用程序提供更高的安全级别,初期就考虑其安全性。
1. 编程语言
汇编语言:是一种使用助记符来表示 CPU 基本指令的高级语言,但仍然要求人们了解硬件专用的、相对晦涩的汇编指令
高级编程语言:例如Python、 C++、 Ruby、 R、 Java 和 Visual Basic
编译型语言:编程人员使用称为编译器的工具将高级语言的源码转换成在特定操作系统中使用的可执行文件(例如 C、 Java 和 FORTRAN)是编译型语言
解释型语言:使用这些语言时,编程人员会分发源代码,源代码中包含用高级语言编写的指令(例如 Python、 R、 JavaScript 和 VBScript)
库:开发人员通常依赖于包含可重用代码的共亨软件库
开发工具集:开发人员使用各种工具来帮助他们工作,其中最赋要的是集成开发环境(IDE)
2. 面向对象编程
许多现代编程语言(例如 C++、 Java 和.NET 语言)都支持面向对象编程(Object-Oriented Programming,OOP) 的概念
OOP 更适用于建模或模拟现实生活。例如,某个银行业务程序可能有三个对象类,这三个对象类分别对应于账户、开户人和员工
在 OOP 模型中,每个对象都有对应其特定操作的方法。例如,账户对象可以有增加资金、扣除资金、关闲账户和转移所有权的方法。
对象也可以是其他对象的子类,并且继承父类的方法。例如,账户对象可能有相关特定 账户类型的子类,如储蓄、检查、抵押和汽车贷款
为提供面向对象系统要求的特性,对象会被封装(独立的),因而只能通过特定消息(即输入)访问它
面向对象编程术语
消息:是对象的通信或输入。
方法:是定义对象执行响应消息操作的内部代码。
行为:由对象呈现的结果或输出是一种行为。行为是通过方法处理消息的结果。
类:定义对象行为的一组对象的公共方法的集合就是类。
实例:对象是包含对象方法的类的实例或例子。
继承:某个类(父类或超类)的方法被另一个子类继承时就会出现继承性。
委托:是指某个对象将请求转发给另一个对象或委托对象。如果某个对象没有处理特定消息的方法,就需要委托
多态性:是对象的特性,当外部条件变化时,多态性允许对象以不同的行为响应相同的消息或方法。
内聚:描述相同类中各方法的目的之间关系的强度,高内聚性,这是促进良好软件设计原则的理想条件
耦合:是对象之间的交互级别。低耦合意味着较少的交互,因为对象更独立,所以低耦合提供了更优的软件设计,低耦合更易于检测故障和更新
3. 保证
保证程序:是在系统生命周期内构建信任的正规过程。通用标准(Common Criteria for Information Technology Security Evaluation 信息技术安全性评估准则,CC)提供了一种用于政府环境的标准化保证方法
4. 避免和抑制系统故障
输入验证
输入验证:当用户与软件交互时,他们通常以输入形式向应用程序提供信息
例如,如果程序员要求用户输入月份,程序期望看到的是 1~12 的某个整数
身份认证与会话管理
身份认证与会话管理:许多应用程序,特别是 Web 应用程序,要求用户在访问敏感信息 或修改应用程序数据前验证身份
应用程序所需的身份认证级别应直接与该应用程序的敏感程度联系起来
错误处理
错误处理 :开发人员喜欢详细的错误信
错误中返回的详细信息对于调试代码非常重要,使技术人员更容易诊断用户遇到的问题。
然而,错误消息也可能将敏感的内部信息暴露给攻击者,包括数据库的表结构、内部胀务器的 IP 地址和其他可能在攻击前的侦察工作中有用的数据
记录
虽然把详细错误消息展现给用户的做法可能带来安全威胁,但这些消息所包含的 信息不仅对开发人员有用,对网络安全分析人员也很有用
开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)
输入验证失败
身份认证尝试,尤其是失败的
访问控制失败
篡改尝试
使用无效或过期的会话令牌
操作系统或应用程序引发的异常
管理特权的使用
传输层安全(TLS)故障
加密错误
失效打开和失效关闭
某些状况会导致出现故障。因为故障是不可预测的,所以编程人员应当在代码中设计如何响应和处理故障。
系统故障做计划时有两个基本选项
失效关闭(fail-secure):状态将系统置入高级别安全状态(甚至可能完全禁用它),直至管 理员诊断问题并将系统还原至正常操作状态。失效关闭是恰当的故障状态
失效打开(fail-open):状态允许用户绕过失败的安全控制,但此时用户获得的特权过高。
Windows 操作系统中出现的蓝屏就是这种故障响应方式的一个例子,表明发生了 STOP错误,触发作为失效关闭响应的 STOP 错误。
维护安全性常需要权衡用户友好性与功能性
20.1.2 系统开发生命周期
通常,项目管理使用生命周期模型进行组织,以指导开发过程。使用正规化的生命周期模型,有助于确保良好的编程实践以及在产品开发的每个阶段都嵌入安全性。
1. 概念定义
系统开发的概念定义阶段涉及为系统创建基本的概念声明。
该阶段制订的安全要求通常非常高,将在控制规范制订阶段进行完善
这个阶段输出的是功能需求文档,它们列出具体的系统需求
2. 功能需求确定
在这个阶段,应列出具体的系统功能,开发人员开始考虑系统的组成部分应当如何互相协作,以便满足功能需求
能需求的三个主要特征:
输入:提供给函数的数据
行为: 描述系统应该采取什么行动以响应不同输入的业务逻辑
输出: 函数提供的数据
创建概念声明时一样,在进入下一阶段前,务必确保所有利益相关方都同意功能需求文档
3. 控制规范的制订
在生命周期模型中,通常应当有控制规范的制订阶段
首先,必须在每个系统中设计足够的访问控制,确保只有授权用户能访问系统,并且不允许他们超出授权级别
其次,系统必须通过使用正确的加密和数据保护技术保护关键数据的保密性
再次,系统不仅应当提供审计踪迹来强制实施个人问责制,还应当提供对非法活动的检韵机制
最后,根据系统的重要程度,必须解决可用性和容错问题。
4. 设计审查
一旦完成了功能需求的确定和控制规范的制订,系统设计人员就可以开始工作了
设计人员要确定系统的不同部分如何交互操作以及如何布置模块化的系统结构
设计团队完成正式的设计文档后应当与利益相关方召开审查会议,确保所有人都一致认 为此过程进展正常,以成功开发具有预期功能的系统
5. 编码
一旦参与方赞同该软件设计,软件开发人员就可以开始编写代码了
开发人员应使用本章中讨论的安全软件编码原则来编写符合设计并满足用户需求的代码
6. 代码审查演练
在编码过程的不同重要阶段,项目经理应该安排几次代码审查演练会
根据特定模块的代码副本进行演练,寻找逻辑流问题或其他设计/ 安全性缺陷。这些会议有助于确保不同的开发团队都依据规范开发代码
7. 系统测试审查
在经过多次代码审查和漫长的时间之后,将会到达代码编写完成阶段
最初,大多数组织使用开发人员执行初始系统测试,从而找出明显的错误
随着测试的进行,开发人员和实际用户根据预定义的场景验证系统,这些场景模拟常见和不常见的用户活动
回归测试:将使该验证过程正式化。这些测试过程应包括验证软件是否正常工作的功能测试和验证是否有未解决的重大安全问题的安全测试
一旦开发人员认为代码正常工作,将进入用户验收测试(UAT)阶段,在该测试中,用户 验证代码是否满足他们的需求,并正式接受它,准备好把它投入生产使用。
一旦这个阶段完成,代码可能会转到部署阶段
8. 维护和变更管理
一旦系统可操作,面对不断变化的操作、数据处理、存储和环境等需求,为确保持续运 作,有必要进行多样的维护工作
20.1.3 生命周期模型
在 20 世纪 70 年代和 80 年代, Winston Royce 和 Barry Boehm 等先驱者提出软件开发生命周期(SDLC)模型来帮助指导软件开发实践走向正规化过程。
1. 瀑布模型
瀑布桢型最初由 Winston Royce 于 1970 年开发,旨在将系统开发生命周期视为一系列连 续活动
传统的瀑布模型有 7 个发展阶段。随若每个阶段的完成,项目进入下一阶段。
迭代瀑布模型允许开发返回前一阶段,以纠正后续阶段中发现的缺陷。这通常被称为瀑布模型的反馈回路特性。
这个模型受到的一个主要批评是:只允许开发人员在软件开发过程中后退一个阶段。瀑布模型并没有规定如何处理在开发周期后期发现的错误。
2 螺旋模型
1988 年, TRW 的 Barry Boehm 提出了一种替代的生命周期模型,允许瀑布型的处理过 程多次反复,也被称为元模型或“模型的模型”。
3. 敏捷软件开发
《敏捷软件开发宣言》
个体与交互重于过程和工具
可工作的软件重于全面的文档
客户合作重于合同谈判
响应变更重于遵循计划
基本理念的 12 条原则
我们的首要目标,是通过持续不断地及早交付有价值的软件来使客户满意。
欢迎变更需求,即使在开发后期也一样。为了客户的竞争优势,敏捷过程将利用变化。
经常交付可工作的软件,相隔几星期或一两个月,倾向于采用较短的周期。
项目中业务人员和开发人员必须每天合作。
以积极的人员为核心搭建项目。提供所需的环境和支援,相信他们能达成目标。
在团队内外,传递信息最高效的方式是面对面交谈。
可工作的软件是度量进度的首要标准。
敏捷过程倡导可持续开发。出资方、开发人员和用户耍待续保持步调的稳定。
坚持不懈地追求卓越技术和良好设计,以增强敏捷性。
以简洁为本,极力减少不必要的工作量。
好的架构、需求和设计出自自组团队。
团队定期反思如何提高成效,并依此调整其行为。
定义了实施这些原则的具体过程。其中包括 Scrum、看板、快速应用程序开发(RAD)、敏捷统一过程(AUP)、动态系统开发模型(DSDM)和极限编程(XP) 。
Scrum 方法最受欢迎。 Scrum 的名字来源于日常团队会议,称为 Scrum,
4. 能力成熟度模型
Carnegie Mellon 大学的软件工程学院(SEI) 提出的软件能力成熟度模型(Software Capability Maturity Model, 缩写为 SW-CMM、 CMM 或 SCMM)
SW-CMM 具有下列阶段
第 1 阶段:初始级 :在这个阶段,常可发现很多努力工作的人以一种杂乱无章的方式向 前冲。通常,这个阶段几乎或完全没有定义软件开发过程。
第 2 阶段:可重复级 :在这个阶段,引入基本的生命周期管理过程。
第 3 阶段:定义级:在这个阶段,软件开发人员依照一系列正式的、文档化的软件开发 过程进行操作
第 4 阶段:管理级: 在这个阶段,软件过程的管理进入下一级别。使用定量方法来详细 了解开发过程。 SEI 将适用于这个级别的关键过程域定义为:定量过程管理和软件质量管理。
第 5 阶段:优化级 :优化级的组织会采用一个持续改进的过程。成熟的软件开发过程已 经确立,可以确保为了改善未来的结果而将一个阶段的反馈返回给前一个阶段。
软件保证成熟度模型(SAMM)
软件保证成熟度模型(SAMM)是一个由开放式Web 应用程序安全项目(OWASP)维护的开源项目
它试图提供一个框架,将安全活动集成到软件开发和维护过程中,并为组织提供评估其成熟度的能力。
SAMM 将软件开发过程划分为以下五个业务功能
治理: 组织为管理其软件开发过程而进行的活动。此功能包括战略、指标、策略、合规、教育和指导实践。
设计: 组织用于定义软件需求和创建软件的过程。此功能包括威胁建模、威胁评估、安全需求和安全架构的实践。
实施: 构建和部署软件组件以及管理这些组件中的缺陷的过程。此功能包括安全构建、安全部署和缺陷管理实践。
验证: 组织为确认代码满足业务和安全要求而进行的一系列活动。此功能包括架构分 析、需求-驱动测试和安全测试。
运营: 在代码发布后,组织为在整个软件生命周期中维护安全性而采取的行动。该功能包括事件管理、环境管理和运营管理。
5. IDEAL 模型
软件工程协会(SEI)还为软件开发确立了 IDEAL 模型,这种模型实现了多个 SW-C:MM 属性
IDEAL 模型包括下列 5 个阶段
(1) 启动:在IDEAL 模型的启动阶段,概述更改的业务原因,为启动提供支持,并准备好恰当的基础设施
(2) 诊断:在诊断阶段,工程师分析组织的当前状态,并给出一般性变更建议。
(3) 建立: 在建立阶段,组织采用诊断阶段的一般建议,并且开发帮助实现这些变更的具体行动计划
(4) 行动:在行动阶段,停止“讨论”,开妎“执行“。组织制订解决方案,随后测试、改进和实施解决方案
(5) 学习: 与任何质量改进过程一样,组织必须不断分析其努力的结果,从而确定是否已实现期望的目标,必要时建议采取新的行动,使组织重返正轨
20.1.4 甘特图与 PERT
甘特图是一种显示项目和调度之间随时间变化的相互关系的条形图,提供了帮助计划、 协调和跟踪项目中特定任务调度的图表说明
计划评审技术(PERT):是一种项目调度工具,这种工具用于在开发中判断软件产品的规模并为风险评估计算标准偏差(standard deviation, SD) 。
20.1.5 变更和配置管理
正像组织开发软件的严密过程一样,同样必须以有组织的方式管理所要求的变更
变更管理流程有 3 个基本组件
请求控制: 请求控制过程提供了一个有组织的框架,在这个框架内,用户可以请求变更,管理者可以进行成本/效益分析,而开发人员可以优化任务。
变更控制: 开发人员使用变更控制过程来重建用户遭遇的特定情况并分析能进行弥补 的适当变更
发布控制: 一旦完成变更,它们就必须通过发布控制过程进行发布
正式跟踪和控制对软件配置的变更,过程组件
配置标识: 在配置标识过程中,管理员记录整个组织范围内的软件产品的配置。
配置控制: 配置控制确保对软件版本的变更与变更控制和配置管理策略一致
配置状态统计: 用于跟踪发生的所有授权变更的正规过程。
配置审计: 定期的配置审计能够确保实际的生产环境与统计记录一致,并确保没有发生未授权的配置变更
20.1.6 DevOps 方法
DevOps 方法通过将这三种职能集中在一个运营模型中来解决这些问题。DevOps 这个词是Development(开发)和 Operations(运营)的组
一些组织甚至努力实现持续集成/持续交付(CI/CD) 的目标,每天部署几十甚至多达几百次
20.1.7 应用编程接口
为使这些跨站点功能正常工作,网站必须彼此交互。许多组织为了这个目标而提供应用编程接口(Application Programming Interface,API) 。
curl 通常用于 API 测试,也用于攻击者潜在的 API 攻击
20.1.8 软件测试
软件开发过程中,组织在内部分发(或向市场发布)软件前应当对其进行彻底的测试。
白盒测试 :白盒测试检查程序的内部逻辑结构并逐行执行代码,从而分析程序是否存在 潜在的错误
黑盒测试: 通过提供广泛的输入场景并查看输出,黑盒测试从用户的角度检查程序。
灰盒测试: 灰盒测试将上述两种测试方式组合起来,是一种流行的软件验证方式
20.1.9 代码仓库
代码仓库提供了支持这些协作的几个重要功能。首先,它们充当开发人员存放源代码的中心存储点。此外,代码仓库(如 GitHub、 Bitbucket 和 SourceForge)还提供版本控制、错误跟踪、 Web 托管、发布管理和可支持软件开发的通信功能
仓库所有者必须仔细设计访问控制,仅授予用户适当的读取和I或写入权限
开发人员必须注意,不要把敏感信息放入公共代码仓库中,尤其是 API 密钥之类的信息。
20.1.10 服务水平协议
服务水平协议(Service Level Agreement,SLA):变得越来越流行,它是服务提供商和供应商都认同的确保组织向内部和I或外部客户提供的服务保持适当水平的一种方法
SLA常涉及以下问题
统正常运行时间(如总运行时间的百分比)
大连续停机时间(以秒、分钟等为单位)
高峰负荷
平均负荷
责任诊断
灾切换时间(若冗余到位)
服务水平协议通常还包括财务和其他的合约性补偿措施。如果合约双方不能维持协议, 这些补偿措施就生效
例如,如果关键电路停机超过 15 分钟,服务提供商可能被要求免收该电路一周的费用
20.1.11 第三方软件采购
企业使用的大多数软件都不是自已开发的,而是从第三方供应商那里采购的
商用现货(COTS)软件
社区的开源软件(OSS)项目
20.2 创建数据库和数据仓储
20.2.1 数据库管理系统的体系结构
数据库管理系统(DBMS)
层次式数据库
层次式数据模型将关联的记录和字段组合为一个逻辑树结构。这会形成一个“一对多”的数据模型,其中的节点可能没有子节点,也可能有一个或多个子节点,但每个节点都只有一个父节点
每名员工有一名直属上司,但一名管理者可有一名或多名下属
分布式数据库
分布式数据模型将数据存储在多个数据库中,不过这些数据库是逻辑连接的
每个字段都具有许多子字段和父字段。因此,分布式数据库的数据映射关系是“多对多”的
关系数据库
关系数据库是由行和列纠成的平面二维表
行列结构提供“一对一“数据映射关系
系数据库的主要构件是表(也被称为关系)。
关系中行的数量被视为基数(cardinality) ,列的数量被视为度(degree) 。属性的域(domain)是属性可用的一组允许值
候选键 :可用于唯一标识表中记录的属性子集
主键: 从表的候选键中选出的用来唯一标识表中记录的键被称为主键,Company ID 就是主键。
备用键 :任何未被选择为主键的候选键被称为备用键
外键 :外键用于强制在两个表之间建立关系(也称为参照完整性)
所有关系数据库都使用一种标准语言,即结构化查询语言(Structured Query Language,SQL) ,从而为用户存储、检索和更改数据以及管理控制 DBMS 提供了一致的接口
SQL 为管理员、开发人员和终端用户提供了与数据库交互必需的功能
20.2.2 数据库事务
作为一组 SQL 指令,要么执行成功,要么失败。事务的一部分成功而另一部分失败的情况不可能出现
以银行内两个账户之间的转账为例
使用下面的 SQL 代码,可以先在账户 1001 中增加 250 美元,然后在账户 2002 中减少 250 美元
一个事务成功完成后才提交给数据库,并且不能取消
如果必须中止事务,可显式地使用 ROLLBACK 命令进行回滚;如果硬件或软件出现故障,也可能引起隐式回滚
当一个事务被回滚时,数据库将把自身还原至这个事务开始前的状态。
4 个必需的特征这些属性合称为 ACID 模型
原子性:数据库事务必须是原子的,也就是说,必须是“要么全有,要么全无"的事务。如果事务的任何一部分失败,整个事务都会被回滚,就像什么也没发生一样。
一致性:所有事务都必须在与数据库所有规则(如所有记录都具有唯一的主键)一致的环境中开始操作。事务结束时,无论处理事务期间是否违反了数据库的规则,数据库都必须再次与这些规则保持一致。其他任何事务都不能利用某个事务执行期间可能产生的任何不一致的数据
隔离性: 隔离性原则要求事务之间彼此独立操作。如果数据库接收到两个更改同一数据的 SQL 事务,那么在允许一个事务更改数据前,另一个事务必须完全结束,隔离性能够防止一个事务处理另一个事务中途生成的无效数据
待久性:数据库事务必须是持久的,也就是说,一旦提交给数据库,就会被保留下来。 数据库通过使用备份机制(如事务日志)确保持久性。
20.2.3 多级数据库的安全性
分类级别不同和/或“因需可知“要求不同的数据混合在一起的情况被称为数据库污染,这是一个重大的安全挑战
在数据库中实现多级安全性的另一种途径是使用数据库视图。视图只是将数据提供给用 户的 SQL 语句,好像视图就是数据表一样
1. 并发性
并发性:或编辑控制是一种预防性安全机制,它努力确保存储在数据库中的信息总是正确的,或者至少保护其完整性和可用性
未能正确实现并发性的数据库可能遇到以下问题:
丢失更新: 当两个不同的进程更新数据库时,如果不知道对方的活动,就会丢失更新。
脏读取 :当进程从没有成功提交的事务中读取记录时,会出现脏读取
并发性使用“锁定“功能允许已授权用户更改数据,同时拒绝其他用户查看或更改数据。 更改完成后,"解锁“功能才允许其他用户访问所需的数据
聚合
聚合: SQL 提供了许多函数,利用这些SQL函数,可以组合来自一个或多个表的记录,以生成潜在有用的信息,这个过程称为聚合
聚合攻击:用于收集大量低级别安全项目或低价值项目,并将它们组合起来以创建更高安全级别或价值的内容。
例如:严格保密的军事机密,但低级别的记录员可以通过使用聚合函数来处理大量未分类记录,从而推断出这些级别
将深度防御、因需可知和最小特权原则结合起来,有助于防止访问聚合攻击。
推理
推理攻击涉及组合多个非敏感信息,以生成应在更高级别才能访问的信息
然而,推理利用了人类思维的演绎能力,而不是数据库平台的原始数学能力。
举一个经常被引用的推理攻击的例子。一家大公司的会计被允许检索公司在工资上花费 的总额,以用于高层报告,但不能访问单个员工的工资
针对推理攻击的最佳防御措施是对授予单个用户的权限保持持续警惕
2. 其他安全机制
管理员可能通过时间和日期标记来维护数据的完整性和可用性
DBMS 的另一个安全特性是能在数据库内细粒度地控制对象,这也改善了安全控制
管理员可使用数据库分区技术来防止聚合和推理漏村
最后,管理员可在 DBMS 中插入错误的或误导性的数据,从而重定向或阻止信息保密性攻击。这一概念被称为噪声和扰动,确保插入数据库中的噪声不会影响业务运营
20.2.4 开放数据库互连
开放数据库互连(open database connectivity, ODBC):是一种数据库特性,在不必分别针对交互的每种数据库类型直接进行编程的情况下,允许应用程序与不同类型的数据库通信。
ODBC 扮演了应用程序和后端数据库驱动程序之间代理的角色,使应用程序编程人员能够更加自由地创建解决方案,而不必考虑后端具体的数据库系统
20.2.5 NoSQL
NoSQL 数据库是使用关系模型以外的模型来存储数据的一类数据库。
健/值存储:可能是最简单的数据库形式
图数据库:存储图形格式的数据,其中用节点表示对象,用边缘表示关系
文档存储:类似于键/值存储,因为它们使用键存储信息,但是它们存储的信息类型通常比键/值存储的信息更复杂,并以文档形式存在
20.3 存储器威胁
安全专业人员必须记住, DBMS 安全性只适用于追过传统的“前门”来访问信息的渠道
此外,数据在处理时还会经过计算机的存储资源(内存和物理介质),为了确保这些基本资源免受安全漏洞的威胁,必须采取预防措施
隐蔽通道攻击:隐蔽存储通道准许通过直接或间接地操纵共享存储介质,在两个分类级别之间传输敏感数据。
20.4 理解基于知识的系统
接下来研究两类以知识为基础的人工智能系统:专家系统和神经网络
20.4.1 专家系统
专家系统试图把人类在某个特殊学科累积的知识具体化,并以一致的方式将它们应用于 未来的决策
知识库:包含专家系统已知的规则。知识库试图以一系列 if/then 语旬对人类专家的知识进 行编码
在实际的专家系统中,知识库将包含成百上千个如上所示的断言。
如果是在腿风季节末期,那么隄风在到达海岸时会变得更强。
专家系统的另一个主要组件是推理引擎,它对知识库中的信息进行分析,从而得到正确的决策
20.4.2 机器学习
机器学习(machine learning, ML):技术使用分析能力从数据集中发现知识,而不直接应用人类洞察力
机器学习技术分为两大类:
监督学习技术使用标记数据进行训练。
无监督学习技术使用未标记的数据进行训练。
20.4.3 神经网络
在神经网络中,计算单元链用于尝试模仿人脑的生物学推理过程