安全设计原则
系统开发的每个阶段都应该考虑安全问题。编程人员、开发人员、工程师等应该致力于为自己开发的每个应用构建完备的安全体系,并且关键应用和处理敏感信息的应用应该得到强度更高的安全保护。
如果从开发项目早期阶段就周密考虑安全的影响,比起整改已经运行的系统要容易得多。开发人员应该根据安全设计原则研究、实施和管理工程进程。
客体和主体
对安全系统中任何资源的访问控制都涉及两个实体。
主体 (subject): 发出资源访问请求的主动实体。主体通常是一个用户,但也可能是一个进程、程序、计算机或机构。
客体 (object): 客体是主体想要访问的被动实体。客体通常是一个资源,例如一份文件或一台打印机,但也可能是一个用户、进程、程序、计算机或机构。
访问是主体与客体之间的一种关系,它可能包括读、写、更改、删 除、打印、移动、备份以及许多其他操作或活动。
客体和主体并不是一层不变的。在一次访问事件中充当客体的实体,到了另一次访问事件中可能会变成主体。例如,进程A向进程B请求数据。为了满足进程A的请求,进程B必须向进程C请求数据。在这个例子中,进程B是第一个请求的客体,同时是第二个请求的主体。
信任传递(transitive trust): 如果A信任B且B信任C, 那么A通过传递属性继承C的信任。
信任传递的安全问题:可能导致绕过限制。假设一家机构为提高员工工作效率而拦截其对YouTube的访问,因此员工无法直接访问YouTube。但是,如果运行员工访问web代理、VPN服务,就会导致绕过网络限制。
封闭系统与开放系统
系统是根据两种不同的理念设计和构建的。
封闭系统 (closed system):只与小范围的其他系统协作,这些系统通常来自同一家制造商。封闭系统的标准一般是专有的,且通常不会公开。
开放系统(open system):使用公认的行业标准,开放系统更容易与来自支持相同标准或使用兼容应用编程接口的不同厂商的系统集成。
应用编程接口(application programming interface, API):API是软件组件之间通信的机制。API定义了组件之间的交互方式,包括组件的输入、输出、功能和错误处理。
安全性:攻击封闭系统比攻击开放系统更难,开放系统的开放性使它们面对攻击时更脆弱。
默认安全配置
默认安全配置往往考虑的方便首次安装,而不会过多考虑安全性,比如大多数设备的默认口令可能会让攻击者不费吹灰之力就发现并恶意利用设备。
永远都不要假设任何产品的默认安全配置是安全的。在任何情况下都要安排系统管理员和/或公司安全人员依照本机构的安全策略更改产品的默认设定。
失效安全
系统故障可由多种原因引起。故障管理包括编程错误处理(即异常处理)和输入清理。
软失效: 指允许系统在一个组件发生故障后继续运行。该方案不会导致整个系统失效。
整体故障:如果产品没有做软失效设计,它发生的故障就是整体故障。
在产品发生故障时,根据产品的特性需要设计故障模式:
- 失效打开:当产品发生故障时,允许继续保持连接或通信。
- 失效关闭/失效安全/失效保障:产品发生故障时,必须切断连接或通信。
如果是物理世界,还要考虑人的因素
状态 | 物理 | 数字 |
---|---|---|
失效打开 | 保护人员 | 保护可用性 |
失效保障 | 保护人员 | 保护保密性和完整性 |
失效关闭 | 保护人员 | 保护保密性和完整性 |
失效安全 | 保护人员 | 保护保密性和完整性 |
保持简单
在安全领域,保持简单原则是鼓励开发人员避免把环境、机构或产品设计得过于复杂。
保持简单相关概念:
- 不自我重复(DRY):不在多处重复相同的代码,避免更改代码的时候增加难度
- 计算极简主义:尽可能少用使件和软件资源
- 最低耗能规则:最低耗能编程语言
- 更坏的就是更好的(也叫新泽西风格):软件的质量不一定随着能力和功能的提高而提升; 比较差的软件状态(即功能较少)往往反而是更好的选项(即更合意的可能更安全)。
- 你不需要它(YAGNI):在真正需要的时候添加能力和功能
零信任
零信任 (zero trust)这一安全概念是指不对机构内部的任何东西自动予以信任。
零信任模型基于“假设违规”和微分网段。
零信任被用千各种不同的安全解决方案,包括内部分段防火墙 (ISFW)、多因子身份认证 (MFA)、身份和访问管理(IAM)以及下一代端点安全。只有执行了持续验证和监控用户活动的措施,安全管理的零信任方法才能取得成功。
通过设计保护隐私
通过设计保护隐私(Privacy by Design, PhD)是指这样一条指导原则:在产品的早期设计阶段就把隐私保护机制集成到产品之中。
信任但要验证
信任但要验证是指自动信任公司安全边界内的主体和设备的一种传统安全保护方法。这种安全保护方法不仅使组织容易遭受内部人员攻击,而且会使入侵者能在内部系统之间轻松横向移动。
用于确保保密性、完整性和可用性的技术
限定、界限和隔离
限定制约进程对某些内存位置的读和写。界限是进程在读或写时不能超过的内存限制范围。隔离是通过内存界限把进程限定在限制范围内运行的一种模式。
访问控制
访问控制通过访问规则限制主体对客体的访问。
信任与保证
可信任的系统是指所有保护机制协同工作,为多种类型用户处理敏感数据,同时使计算环境保持稳定和安全的系统。换句话说,信任是安全机制或能力的体现。 保证是满足安全需求的可信程度。也就是说,保证表明了安全机制在提供安全保护方面究竟有多可靠。
理解安全模型的基本概念
安全模型(security model)是将抽象的安全需求或概念转化为具体的、可实现的硬件和软件规范的方法。
可信计算基
可信计算基(trusted computing base, TCB)是硬件、软件和控制的组合,它们为安全策略的执行构成了一个可信基础。
TCB是完整信息系统的子集,在安全策略的遵守和执行方面, TCB是系统中唯一一个可以信任的部分。
安全边界(security perimeter): 安全边界是一个假想的边界,可将TCB与系统的其余部分分隔开来。这个边界确保TCB不与计算机系统其余部分发生不安全通信或交互。TCB若要与系统的其余部分通信,则必须创建安全信道,也叫可信路径 (trusted path)。
在系统中负责访问控制的部分在安全模型中被称为参考监视器,TCB中被称为安全内核(security kernel)。
状态机模型
状态机模型 (state machine model)描述了一个无论处于什么状态都始终安全的系统。
根据状态机模型,状态 (state)是特定时刻的系统快照。如果一个状态的所有方面都达到安全策略的要求,则可认为这个状态是安全的。
状态总会转换,如果每个可能的状态转换都产生了另一个安全状态,则这个系统可被称为安全状态机(secure state machine)
信息流模型
信息流模型((information flow model),基于状态机模型,专注于控制信息的流动。
信息流模型允许所有得到授权的信息通过,同时阻止所有未经授权的信息流。
无干扰模型
无干扰模型防止一个主体的动作影响另一主体的系统状态或动作。
获取-授予模型
获取-授予模型(take-grant model):规定应该怎样把权限从一个主体传递给另一个主体或者从一个主体传递给一个客体。 获取-授予模型基本上有4条规则。
- 获取规则:允许主体获取客体的权限。
- 授予规则:允许主体向客体授予权限。
- 创建规则:允许主体创建新权限。
- 移除规则:允许卞体移除自己拥有的权限。
访问控制矩阵
访问控制矩阵(access control matrix)是一个由主体和客体组成的表格,标明了每个主体可对每个客体执行的操作或功能。
Bell-LaPadula 模型
美国国防部于20世纪70年代根据其多级安全政策开发了Bell-LaPadula模型。多级安全政策规定,具有任何级别许可权的主体可以访问该许可权级别或低于该级别的资源。然而在许可权级别内,也只能按因需可知 (need-to-know)原则授予对分隔开的客体的访问权。
Bell-LaPadula模型建立在状态机概念和信息流模型之上,主要针对保密性。
三个基本属性:
- 简单安全属性(Simple Security Property)规定主体不可读取更高敏感度级别的信息(不 可向七读)。
- *安全属性(*Security Property)规定主体不可把信息写进较低敏感度级别的客体(不可 向下写)。这也被称为限定属性(Confinement Property)。
- 自主安全属性(DiscretionarySecurity Property)规定系统通过一个访问矩阵执行自主访问 控制。
Bel-LaPadula模型有一个例外规定一”可信主体”不受*安全属性约束。可信主体是指是指“保证即便可能,也不会违反安全规则传输信息的主体”。这意味着允许可信主体违反*安全属性执行向下写操作; 当需要给有效客体移除安全分类或重新定密时,这个机制是必要的。
Biba模型
Biba模型是在Bell-LaPadula模型之后被设计出来的,但它侧重的是完整性问题。
Biba模型是一个反向Bell-LaPadula模型。
以下是Biba模型的属性:
- 简单完整性属性(Simple Integrity Property)规定主体不能读取较低完整性级别的客体 (不可向下读)。
- *完整性属性(*Integrity Property)规定主体不能修改较高完整性级别的对象(不可向上写)。
Biba 模型在设计上解决了三个完整性问题:
- 防止未经授权的主体修改客体。
- 防止授权主体对客体进行未经授权的修改。
- 保护内部和外部客体的一致性。
Biba模型受到的批评揭示了它的几个缺点:
- 它只解决了完整性问题,而不涉及保密性或可用性。
- 它专注于使客体免受外部威胁侵扰,但是假定内部威胁会以程序化方式被处理。
- 它没有涉及访问控制管理,也没有提供分配或更改客体或主体定密级别的方式。
- 它不能阻止隐蔽信道。
Clark-Wilson模型
Clark-Wilson模型通过一种涉及诸多方面的方法实现数据的完整性。 Clark-Wilson模型定义了每个数据项只允许通过一个受限或受控中间程序或接口进行修改。
Clark-Wilson模型采用一个名为三元组或访问控制三元组 (access control triplet)的主体/程序/客体(或主体/交易/客体)的三方关系。
主体无法直接访问客体,只能通过程序访问客体。 Clark-Wilson模型借助组织完善的事务和职责分离两项原则提供了保护完整性的有效手段。
Clark-Wilson 模型定义了以下数据项和规程:
- 受约束数据项 (constraineddata item, CDI)指完整性受安全模型保护的任何数据项。
- 无约束数据项(unconstraineddataitem, UDI)指不受安全模型控制的任何数据项。任何 输入但未经验证的数据或任何输出,都属于无约束数据项。
- 完整性验证规程(integrityverification procedme, IVP)指扫描数据项并确认其完整性的 规程。
- 转换规程(transformationprocedure, TP)指被允许修改CDI的唯一规程。通过TP限制 对CDI的访问,这一方法构成了Clark-Wilson完整性模型的支柱。
Brewer and Nash 模型
创建 Brewer and Nash 模型是为了让访问控制可以根据用户先前的活动动态地作出改变。这个模型适用于单个集成的数据库,它寻求创建对利益冲突概念敏感的安全域。
Goguen-Meseguer 模型
Goguen-Meseguer 模型是一个完整性模型,只允许主体对预定客体执行预定操作。
Sutherland 模型
Sutherland 模型是一个完整性模型,对一组系统状态、初始状态和状态转换给出明确定义。该模型通过只使用这些被预先定义的安全状态来保持完整性和阻止干扰。
Graham-Denning 模型
Graham-Delllling 模型专注于主体和客体的安全创建与删除。
Harrison-Ruzzo-Ullman 模型
Harrison-Ruzzo-Ulhnan(HRU)模型专注于给主体分配客体的访问权限以及这些被分配权限的韧性。是 Graham-Denning 模型的扩展。
根据系统安全要求挑选控制
通用准则(ISO/IEC 15408)
是一种主观性安全功能评估工具,可根据保护轮廓(PP)和安全目标(ST)分配评估保证级别 (EAL)。
“通用准则 ”(Common Criteria, CC)定义了测试和确认系统安全能力的各种级别,级别上标注的数字表示执行了哪种测试和确认。
1998年,来自加拿大、法国、德国、英国和美国的政府机构代表签署了 “IT安全领域通用准则证书认可协议”,使“通用准则”成为一个国际标准。自那以后,又有23个国家签署了这份协议。原始协议文件已被正式采纳为一个标准,作为 ISO/IEC 15408-1、 -2、 -3 发布, 主标签为“信息技术一信息安全—IT安全评估准则”。
操作授权(来自RMF)
就许多环境而言,必须得到正式批准才能将有安全保障的设备用于IT操作目的。这常常被称为操作授权(Authorization To Operate, ATO)。
操作授权的有效期通常为5年, 一旦出现以下任意一种情况,就必须重新申请:
- 操作授权的时间期限到期。
- 系统遭遇严重安全事件。
- 统发生重大安全变化。
授权官员可以作出4种授权决定:
- 操作授权: 当组织对风险的管理达到可接受水平时,授权官员可作出这种决定。
- 通用控制授权: 当安全控制继承自另外一家供应商,而且与通用控制相关的风险处千可接受水平并已从同一位授权官员处得到了操作授权时,授权官员可作出这种决定。
- 使用授权: 当一家第三方供应商(如云服务提供商)提供的IT/IS服务器被认为达到可接受风险水平时,授权官员可作出这种决定;这一决定还可以用来接受另一授权官员的操作授权。
- 拒绝授权: 当风险不可接受时,授权官员可作出这种决定。
理解信息系统的安全能力
信息系统的安全能力包括内存保护、虚拟化、可信平台模块(TPM)、加密/解密、接口和容错。必须认真评价基础设施的各个方面,以确保基础设施充分支撑安全性。
内存保护
无沦系统中运行了什么程序,都必须执行内存保护,否则有可能出现系统不稳定、破坏完整性、拒绝服务、数据泄露等诸多情况。
虚拟化
虚拟化技术用千在一台主机的内存中运行一个或多个操作系统,或运行与主机操作系统不兼容的应用程序。
可信平台模块
可信平台模块(Trusted Platform Module, TPM)既是主板上密码处理器芯片的规范,也是此规范执行方案的称谓。 TPM 可用于执行涉及范围很广的基于密码的安全保护机制。 TPM 芯片通常用于为硬件支持的或操作系统执行的本地有储设备加密系统存储和处理密码密钥。 硬件安全模块(HSM)就是 TPM 的一个例子。 HSM 是一种密码处理器,用于管理/存储数字加密密钥,提升密码运算的速度,支待速度更快的数字签名以及改进身份认证。 HSM可以是主板上的一块芯片,也可以是一张扩展卡(插在路由器、防火墙或机架式刀片服务器上使用)。 HSM包含防篡改保护机制,即便HSM被攻击者物理访问,也不可能被他们滥用。
接口
受约束或受限制接口 (constrainedor restricted interface)在应用程序内执行,旨在使用户只能按自己的权限执行操作或查看数据。
容错
容错 (faulttolerance)是指系统虽然发生故障,但仍能继续运行的能力。
加密/解密
加密是指把明文转换成密文的过程,而解密是加密过程的反向过程。