You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

106 lines
13 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 02 | 安全原则:我们应该如何上手解决安全问题?
你好,我是何为舟。
上一讲我们一起拆解学习了CIA三元组也就是机密性、完整性和可用性。它们分别代表了数据的“不可见”“不可改”和“可读”。简单来说以购买极客时间专栏为例机密性就是未付费用户无法学习这个专栏完整性就是这个专栏的内容不会变成别的其他方向的内容可用性就是你作为付费用户能够随时学习这个专栏。
理解了CIA上一节最后面试官问的“安全是什么”的问题你现在一定可以回答出来了。面试官点点头接着说道“你觉得该怎么去解决安全问题呢
毫无疑问不同的应用、不同的模块会受到不同的安全威胁当然我们面对这些威胁也会有不同的解决方案。万变不离其宗。正如安全威胁都是针对CIA三元组产生的攻击一样安全解决方案在根本思路上也都是相通的。
今天,我就从方法原则这个层面上,来给你讲讲安全解决方案的主要思路。这块内容看起来比较偏理论,我尽量多从实践角度来给你讲我的理解,但是你一定要耐心看完,这样可以确保你对后面实践的内容能够理解得更加深入。
## 什么是“黄金法则”?
对于安全解决方案来说,不同的教材会有不同的解释。就我个人而言,我比较喜欢“黄金法则”这种理解方式。下面我就用这种方式来具体给你讲讲。
黄金法则主要包含三部分认证Authentication、授权Authorization、审计Audit。为什么称它为“黄金”呢一方面是因为它包含的这三部分重要且通用另一方面是因为这三个单词的前两个字母都是Au而Au在元素周期表中代表着“金”。
有的教材中会给黄金法则加上问责Accounting这一部分组成“4A法则”还有的会加上身份识别Identification组成“IAAAA法则”。不管被划分为几个部分这些法则的中心内容都是相似的都是围绕着**识别、认证、授权、审计、问责**这五个部分展开的。因此黄金法则其实就是IAAAA法则更高一层的概括它将识别和认证、审计和问责归纳到了一起更加强调了这两两之间的协同性质。
搞清楚了“黄金法则”的概念,我们现在来看它的三个部分(认证、授权、审计)。这三部分其实是一种串联的关系,它描述的其实是用户在使用应用过程中的生命周期:**先进行登录、再进行操作、最后留下记录**。
![](https://static001.geekbang.org/resource/image/b3/2a/b3205158ad6c90897f5afaf2e095ef2a.jpeg)
下面,我们就一一来看这三个部分。
### 1.身份识别和认证
首先,我们先来了解一下黄金法则的第一个部分:认证。认证其实包括两个部分:身份识别和认证。身份识别其实就是在问“你是谁”,你会回答“你是你”。身份认证则会问“你是你吗”,那你要证明“你是你”这个回答是合法的。
身份识别和认证通常是同时出现的一个过程。身份识别强调的是主体如何声明自己的身份,而身份认证强调的是,主体如何证明自己所声明的身份是合法的。比如说,当你在使用用户名和密码登录的过程中,用户名起到身份识别的作用,而密码起到身份认证的作用;当你用指纹、人脸或者门卡等进行登入的过程中,这些过程其实同时包含了身份识别和认证。
通常来说不管你以什么形式进行登入在身份识别的过程中这些形式最终都需要落地成唯一的身份id。在你后续的操作中身份id都会始终跟随会话记录在日志中。这也是后续授权、审计和问责的基础。身份识别的过程并不关注合法性因此认证是这个部分中最为关键的一环。
依据具体的认证场景,对安全等级、易用性等的综合考量,认证形式可以大致分为三种。按照认证强度由弱到强排序,分别是:
* 你知道什么(密码、密保问题等);
* 你拥有什么(门禁卡、安全令牌等);
* 你是什么(生物特征,指纹、人脸、虹膜等)。
我们通过将多种类型的认证进行组合,可以形成多因素认证机制,进一步加强认证强度。常见的,在登录过程中,很多应用会在输入完账号密码后,让你进行手机验证,这其实就是结合了“你知道什么”和“你拥有什么”的双因素认证。
**可信的身份认证是建立安全保障体系的第一步**。如果身份认证被破解,则后续的保护或者补救机制都无法起到太多的效果。因此,很多时候,通过衡量一个应用的认证安全等级,我们就能看出它整体的安全水平。那么怎样才能做好身份认证这个环节呢?这就需要进行系统分析了,这个问题我们在后续的课程中会详细讲解。
### 2.授权
在确认完“你是你”之后,下一个需要明确的问题就是“你能做什么”。毫无疑问,在系统或者应用中,我们的操作都会受到一定的限制。比如,某些文件不可读,某些数据不可修改。这就是**授权机制**。除了对“你能做什么”进行限制,授权机制还会对“你能做多少”进行限制。比如,手机流量授权了你能够使用多少的移动网络数据。
最原始和最安全的授权机制,一定是你的每一次操作,都经过了管理人员的审批和确认。比如我们申请签证的过程,其实就是一次申请授权的过程。当部分国家的签证策略比较严格时(如美国),那么我们每次出入境都需要重新申请签证,这也就意味着,会有很多的操作需要进行授权审批,其效率肯定是无法保证的(可以想想美国大使馆门前的长队)。
因此,很多时候,我们会定义自动化的授权机制来进行更快速的响应。比如,某些国家会制定免签或者落地签政策,只要符合一定的条件(如拥有中国护照),就能够直接出入境。这就相当于将“是否拥有中国护照”当成了一种授权的规则。同样地,安全领域中也有很多成熟的授权策略,如:自主访问控制、强制访问控制等。关于这些策略,在后续的课程中,我们也会进行详细地讲解。
### 3.审计和问责
当你在授权下完成操作后,安全需要检查一下“你做了什么”,这个检查的过程就是**审计**。当发现你做了某些异常操作时,安全还会提供你做了这些操作的“证据”,让你无法抵赖,这个过程就是**问责**。
举一个生活中的例子,当你去银行办理业务时,工作人员会让你对一些单据签字。这些单据就是审计的信息来源,而签字则保证了你确认这是你进行的操作,这就是问责的体现。
审计和问责通常也是共同出现的一个过程,因为它们都需要共同的基础:**日志**。很容易理解,所谓审计,就是去通过日志还原出用户的操作历史,从而判断是否出现违规的操作。而问责则是通过日志的完整性,来确保日志还原出来的操作是可信的。想象一下,如果一份日志可以被人任意地篡改,那我们基于这份日志去进行审计,即使发现违规操作,也无法证明违规操作确实发生了,只能是白费功夫。
可能你会产生疑问你已经获得了授权理论上这些操作都应该是合法的那为什么还需要审计呢当然如果授权机制能够达到“完美”那么审计的意义确实不大。然而我们一直都强调安全不存在“银弹”不可能达到100%的安全。即使是1%的漏洞也可能造成100%的损伤。
在授权中,我们需要平衡可用性和安全性,很多时候都会选择牺牲部分的安全保障,来降低使用成本。而审计是事后的策略,它做的任何操作,理论上都不会直接影响用户,因此,能够做到更全面更严格,也能发现更多的问题。所以,审计这一环节,对于发现安全问题、回溯产生的攻击、完善安全保护体系来说,非常重要。
而问责,是对审计结果的一个保障,有的时候我们也称之为“不可否认性”。一方面,它保证了黑客无法通过篡改日志或者仿造身份,来隐藏自己的行为;另一方面它也保证了,当审计中发现了恶意的行为,需要寻求法律保护时,我们能够提供充分的证据。
从法律上来说,一个企业和应用在遭受攻击时,只能进行被动防御。如果想要主动出击,打击黑客的话,必须通过法律的途径。因此,建立完善的问责机制,能够为企业提供“法律保护”,大大提高企业安全的自信力。
这里你注意一下,一定不要狭义地去理解黄金法则的每个模块。认证不仅是帐密登录,也可以是生物特征识别或者证书等形式;授权不只是基于简单规则的访问控制,基于内容或者会话的检测等也是授权的一部分;审计也不只是简单的翻日志,很多机器学习、异常检测的算法,也都能运用到审计中来。针对不同的数据,不同的访问形式,我们能够采用的认证、授权、审计技术都不尽相同。
换一种方式来概括的话,你可以这么理解:**大部分情况下,事前防御属于认证,事中防御属于授权,事后防御属于审计**。
## 企业安全建设管理
通过学习“黄金法则”,我们可以看到,安全是一个很浩大的工程,涉及各个方面的投入建设。对于任何一个公司来说,建立安全体系都是一个长期过程,因此,我们需要一个有效的管理方案来进行推动。
通过这么些年的实践,我觉得**安全问题需要自上而下的方式去进行管理和推动**。这也是为什么,大部分安全负责人加入企业做的第一件事就是向上教育,只有企业高层理解了安全,才有可能有效推动安全的发展。
正如我们在开发一款应用时需要评估功能的优先级先以有限的资源实现1.0版本然后再逐步进行迭代不断完善。在做企业安全建设时我们也需要对发展阶段进行划分进行合理管理。通常来说我们会根据周期的不同制定三种安全规划在这里我举个简单的例子比方说可以制定5年左右的战略计划、1年左右的战术计划、3个月左右的操作计划。
* 战略计划是一个较长期的安全目标,它和企业的长期发展目标相结合,保证安全的发展能够符合企业的长期发展方向。
* 战术计划会基于长期的安全目标,拆解出详细的任务计划,比如:项目列表、安全预算、人员扩张等。
* 操作计划则是对战术计划的具体实现,包括人员的分配、资源的投入、进度的安排等。
和产品研发一样,当建立好不同的计划后,我们就能够给予企业的安全建设一个明确的方向,大大降低投入的成本,提高效率。因此,挖掘安全问题,明确安全计划,对于企业建立安全体系来说,至关重要。
## 总结
好了,今天的内容差不多了,下面我来带你总结回顾一下,你要掌握的重点内容。
黄金法则描述的是,在用户操作的各个环节中,我们所需要采取的安全策略。黄金法则的核心内容包括三部分:认证、授权、审计。**大部分情况下,事前防御属于认证,事中防御属于授权,事后防御属于审计**。
毫不夸张地说,所有的安全保护措施或者工具,都是在黄金法则的一个或者多个模块中进行工作的。安全是严格遵从“木桶原理”的领域,只专注于某一个方向必然无法产出最优的结果。因此,我们一定要积极寻找短板,全面发展。
最后我想说安全没有“银弹”。只有当可用性接近0时我们才有可能接近100%的安全。比如,将电脑关闭电源并深埋地下。所以,在实际进行安全防御的时候,不要过分追求完美,先有基本的保障就可以了。
## 思考题
最后,给你留两道课后思考题,你可以选择其中一道来回答。
1.通过今天的学习,你可以尝试分析一下,你负责的系统和应用中,在认证、授权和审计方面,分别做了哪些工作?又起到了怎样的保护效果?
2.我在前面说了,安全问题需要自上而下的方式去进行管理和推动,这只是我个人的观点。结合你们公司的实际情况,站在你的角度,你觉得你们公司应该如何去推动安全建设呢?
欢迎留言和我分享你的思考和疑惑,也欢迎你把文章分享给你的朋友。我们下一讲再见!