跳转至

02 安全原则:我们应该如何上手解决安全问题?

你好,我是何为舟。

上一讲,我们一起拆解学习了CIA三元组,也就是机密性、完整性和可用性。它们分别代表了数据的“不可见”“不可改”和“可读”。简单来说,以购买极客时间专栏为例,机密性就是未付费用户无法学习这个专栏,完整性就是这个专栏的内容不会变成别的其他方向的内容,可用性就是你作为付费用户,能够随时学习这个专栏。

理解了CIA,上一节最后面试官问的“安全是什么”的问题,你现在一定可以回答出来了。面试官点点头,接着说道:“你觉得该怎么去解决安全问题呢?”

毫无疑问,不同的应用、不同的模块会受到不同的安全威胁,当然,我们面对这些威胁也会有不同的解决方案。万变不离其宗。正如安全威胁都是针对CIA三元组产生的攻击一样,安全解决方案在根本思路上也都是相通的。

今天,我就从方法原则这个层面上,来给你讲讲安全解决方案的主要思路。这块内容看起来比较偏理论,我尽量多从实践角度来给你讲我的理解,但是你一定要耐心看完,这样可以确保你对后面实践的内容能够理解得更加深入。

什么是“黄金法则”?

对于安全解决方案来说,不同的教材会有不同的解释。就我个人而言,我比较喜欢“黄金法则”这种理解方式。下面我就用这种方式来具体给你讲讲。

黄金法则主要包含三部分:认证(Authentication)、授权(Authorization)、审计(Audit)。为什么称它为“黄金”呢?一方面是因为,它包含的这三部分重要且通用;另一方面是因为,这三个单词的前两个字母都是Au,而Au在元素周期表中代表着“金”。

有的教材中,会给黄金法则加上问责(Accounting)这一部分,组成“4A法则”;还有的会加上身份识别(Identification),组成“IAAAA法则”。不管被划分为几个部分,这些法则的中心内容都是相似的,都是围绕着识别、认证、授权、审计、问责这五个部分展开的。因此,黄金法则其实就是IAAAA法则更高一层的概括,它将识别和认证、审计和问责归纳到了一起,更加强调了这两两之间的协同性质。

搞清楚了“黄金法则”的概念,我们现在来看它的三个部分(认证、授权、审计)。这三部分其实是一种串联的关系,它描述的其实是用户在使用应用过程中的生命周期:先进行登录、再进行操作、最后留下记录

下面,我们就一一来看这三个部分。

1.身份识别和认证

首先,我们先来了解一下黄金法则的第一个部分:认证。认证其实包括两个部分:身份识别和认证。身份识别其实就是在问“你是谁”,你会回答“你是你”。身份认证则会问“你是你吗”,那你要证明“你是你”这个回答是合法的。

身份识别和认证通常是同时出现的一个过程。身份识别强调的是主体如何声明自己的身份,而身份认证强调的是,主体如何证明自己所声明的身份是合法的。比如说,当你在使用用户名和密码登录的过程中,用户名起到身份识别的作用,而密码起到身份认证的作用;当你用指纹、人脸或者门卡等进行登入的过程中,这些过程其实同时包含了身份识别和认证。

通常来说,不管你以什么形式进行登入,在身份识别的过程中,这些形式最终都需要落地成唯一的身份id。在你后续的操作中,身份id都会始终跟随会话,记录在日志中。这也是后续授权、审计和问责的基础。身份识别的过程并不关注合法性,因此,认证是这个部分中最为关键的一环。

依据具体的认证场景,对安全等级、易用性等的综合考量,认证形式可以大致分为三种。按照认证强度由弱到强排序,分别是:

  • 你知道什么(密码、密保问题等);
  • 你拥有什么(门禁卡、安全令牌等);
  • 你是什么(生物特征,指纹、人脸、虹膜等)。

我们通过将多种类型的认证进行组合,可以形成多因素认证机制,进一步加强认证强度。常见的,在登录过程中,很多应用会在输入完账号密码后,让你进行手机验证,这其实就是结合了“你知道什么”和“你拥有什么”的双因素认证。

可信的身份认证是建立安全保障体系的第一步。如果身份认证被破解,则后续的保护或者补救机制都无法起到太多的效果。因此,很多时候,通过衡量一个应用的认证安全等级,我们就能看出它整体的安全水平。那么怎样才能做好身份认证这个环节呢?这就需要进行系统分析了,这个问题我们在后续的课程中会详细讲解。

2.授权

在确认完“你是你”之后,下一个需要明确的问题就是“你能做什么”。毫无疑问,在系统或者应用中,我们的操作都会受到一定的限制。比如,某些文件不可读,某些数据不可修改。这就是授权机制。除了对“你能做什么”进行限制,授权机制还会对“你能做多少”进行限制。比如,手机流量授权了你能够使用多少的移动网络数据。

最原始和最安全的授权机制,一定是你的每一次操作,都经过了管理人员的审批和确认。比如我们申请签证的过程,其实就是一次申请授权的过程。当部分国家的签证策略比较严格时(如美国),那么我们每次出入境都需要重新申请签证,这也就意味着,会有很多的操作需要进行授权审批,其效率肯定是无法保证的(可以想想美国大使馆门前的长队)。

因此,很多时候,我们会定义自动化的授权机制来进行更快速的响应。比如,某些国家会制定免签或者落地签政策,只要符合一定的条件(如拥有中国护照),就能够直接出入境。这就相当于将“是否拥有中国护照”当成了一种授权的规则。同样地,安全领域中也有很多成熟的授权策略,如:自主访问控制、强制访问控制等。关于这些策略,在后续的课程中,我们也会进行详细地讲解。

3.审计和问责

当你在授权下完成操作后,安全需要检查一下“你做了什么”,这个检查的过程就是审计。当发现你做了某些异常操作时,安全还会提供你做了这些操作的“证据”,让你无法抵赖,这个过程就是问责

举一个生活中的例子,当你去银行办理业务时,工作人员会让你对一些单据签字。这些单据就是审计的信息来源,而签字则保证了你确认这是你进行的操作,这就是问责的体现。

审计和问责通常也是共同出现的一个过程,因为它们都需要共同的基础:日志。很容易理解,所谓审计,就是去通过日志还原出用户的操作历史,从而判断是否出现违规的操作。而问责则是通过日志的完整性,来确保日志还原出来的操作是可信的。想象一下,如果一份日志可以被人任意地篡改,那我们基于这份日志去进行审计,即使发现违规操作,也无法证明违规操作确实发生了,只能是白费功夫。

可能你会产生疑问,你已经获得了授权,理论上这些操作都应该是合法的,那为什么还需要审计呢?当然,如果授权机制能够达到“完美”,那么审计的意义确实不大。然而,我们一直都强调,安全不存在“银弹”,不可能达到100%的安全。即使是1%的漏洞,也可能造成100%的损伤。

在授权中,我们需要平衡可用性和安全性,很多时候都会选择牺牲部分的安全保障,来降低使用成本。而审计是事后的策略,它做的任何操作,理论上都不会直接影响用户,因此,能够做到更全面更严格,也能发现更多的问题。所以,审计这一环节,对于发现安全问题、回溯产生的攻击、完善安全保护体系来说,非常重要。

而问责,是对审计结果的一个保障,有的时候我们也称之为“不可否认性”。一方面,它保证了黑客无法通过篡改日志或者仿造身份,来隐藏自己的行为;另一方面它也保证了,当审计中发现了恶意的行为,需要寻求法律保护时,我们能够提供充分的证据。

从法律上来说,一个企业和应用在遭受攻击时,只能进行被动防御。如果想要主动出击,打击黑客的话,必须通过法律的途径。因此,建立完善的问责机制,能够为企业提供“法律保护”,大大提高企业安全的自信力。

这里你注意一下,一定不要狭义地去理解黄金法则的每个模块。认证不仅是帐密登录,也可以是生物特征识别或者证书等形式;授权不只是基于简单规则的访问控制,基于内容或者会话的检测等也是授权的一部分;审计也不只是简单的翻日志,很多机器学习、异常检测的算法,也都能运用到审计中来。针对不同的数据,不同的访问形式,我们能够采用的认证、授权、审计技术都不尽相同。

换一种方式来概括的话,你可以这么理解:大部分情况下,事前防御属于认证,事中防御属于授权,事后防御属于审计

企业安全建设管理

通过学习“黄金法则”,我们可以看到,安全是一个很浩大的工程,涉及各个方面的投入建设。对于任何一个公司来说,建立安全体系都是一个长期过程,因此,我们需要一个有效的管理方案来进行推动。

通过这么些年的实践,我觉得安全问题需要自上而下的方式去进行管理和推动。这也是为什么,大部分安全负责人加入企业做的第一件事就是向上教育,只有企业高层理解了安全,才有可能有效推动安全的发展。

正如,我们在开发一款应用时,需要评估功能的优先级,先以有限的资源实现1.0版本,然后再逐步进行迭代,不断完善。在做企业安全建设时,我们也需要对发展阶段进行划分,进行合理管理。通常来说,我们会根据周期的不同,制定三种安全规划,在这里,我举个简单的例子,比方说,可以制定5年左右的战略计划、1年左右的战术计划、3个月左右的操作计划。

  • 战略计划是一个较长期的安全目标,它和企业的长期发展目标相结合,保证安全的发展能够符合企业的长期发展方向。
  • 战术计划会基于长期的安全目标,拆解出详细的任务计划,比如:项目列表、安全预算、人员扩张等。
  • 操作计划则是对战术计划的具体实现,包括人员的分配、资源的投入、进度的安排等。

和产品研发一样,当建立好不同的计划后,我们就能够给予企业的安全建设一个明确的方向,大大降低投入的成本,提高效率。因此,挖掘安全问题,明确安全计划,对于企业建立安全体系来说,至关重要。

总结

好了,今天的内容差不多了,下面我来带你总结回顾一下,你要掌握的重点内容。

黄金法则描述的是,在用户操作的各个环节中,我们所需要采取的安全策略。黄金法则的核心内容包括三部分:认证、授权、审计。大部分情况下,事前防御属于认证,事中防御属于授权,事后防御属于审计

毫不夸张地说,所有的安全保护措施或者工具,都是在黄金法则的一个或者多个模块中进行工作的。安全是严格遵从“木桶原理”的领域,只专注于某一个方向必然无法产出最优的结果。因此,我们一定要积极寻找短板,全面发展。

最后,我想说,安全没有“银弹”。只有当可用性接近0时,我们才有可能接近100%的安全。比如,将电脑关闭电源并深埋地下。所以,在实际进行安全防御的时候,不要过分追求完美,先有基本的保障就可以了。

思考题

最后,给你留两道课后思考题,你可以选择其中一道来回答。

1.通过今天的学习,你可以尝试分析一下,你负责的系统和应用中,在认证、授权和审计方面,分别做了哪些工作?又起到了怎样的保护效果?

2.我在前面说了,安全问题需要自上而下的方式去进行管理和推动,这只是我个人的观点。结合你们公司的实际情况,站在你的角度,你觉得你们公司应该如何去推动安全建设呢?

欢迎留言和我分享你的思考和疑惑,也欢迎你把文章分享给你的朋友。我们下一讲再见!

精选留言(15)
  • ZeroIce 👍(22) 💬(6)

    老师,可否问个问题:一般登陆验证采用的是oauth2的验证码模式。但是在发送表单(登陆信息)的时候虽然是post,但是依然可以通过抓包获取,查看密码。请问一般怎样处理,即使被捕获了,密码还是看不到?前端那边加密的话,别人一看源码就知道了怎样加密或者获取密钥了。此问题比较困惑我,望老师解答一下。

    2019-12-23

  • 小老鼠 👍(7) 💬(1)

    IAAAA与CIA有无对应关系?另外安全性与易用性永远是一对矛盾体吗?

    2019-12-25

  • niuniu 👍(6) 💬(1)

    为什么说“我知道什么”是强度最弱的认证手段?有些书认为这是最强的认证手段,而“我是什么”是最弱的。我觉得还是有道理的,因为“我是什么”是无法改变的,而我知道什么是变化莫测的,只要有共产党员钢铁般的意志,即使是严刑拷打也无法得到他知道的。

    2019-12-17

  • fgdgtz 👍(5) 💬(7)

    你好老师,关于APP与服务器沟通安全我有个问题,望老师能解答。 api请求认证或加密一般都有key等,硬编码在APP,而APP有被反编译的风险,放c++ 编译成SO库,虽加大了安全系数,但黑客可直接用这SO库即可,而调用的逻辑,反编译代码里也有,如何安全存储?

    2019-12-15

  • 攻城狮Ra 👍(5) 💬(2)

    目前公司主要是通过加密服务器进行进行认证和授权,通过企业微信在网上办公,工作文档也都是上锁的,由于职务限制审计目前还没接触到,可以说句题外话,公司今天正好停电了,发电机发电之后服务器还是一直连接不上,运维修了半小时才好,可能是服务器老式。 我觉得应该由部门BOSS跟上级反应,最好跟员工再简单培训下,公司现在纯IT的其实就2-3人,我实习进来的希望可以好好补补这方面知识

    2019-12-11

  • link 👍(4) 💬(4)

    银弹效应:妄图创造某种便捷的开发技术,从而使某个项目的实施提高效率。又或者指摆脱该项目的本质或核心,而达到超乎想象的成功。银弹在现实生活中是指能够解决棘手项目或者一件不可能的事情的方法或者技术手段。

    2019-12-10

  • 星亦辰 👍(2) 💬(1)

    大佬解释下,双因子认证是什么意思 ?解决的是什么问题。 认证,授权,审计除了依靠日志还有没有别的办法?

    2019-12-09

  • JianXu 👍(1) 💬(2)

    老师,你怎么看谷歌BeyondCorp 项目,国内有公司搞零信任网络吗?如果不搞,那原因是什么呢?我很想知道哪里有类似于这样的分析:渗透类型1, 用A 这类方法做防御;渗透类型2, 用B这类方法做防御... 而现在我能看到的是 我们公司做了password less 的应用(这个我能理解)正在做IAM IDM 去apply 所有的应用,现在副总再说要做micro segmentation , 问题是我看到了一堆堆的工作,却不知道具体怎么来防治渗透。就跟让一个没有坏人道行高的人去抓坏人。

    2020-08-27

  • 吕作晶 👍(1) 💬(1)

    3A或者IAAAA原则是流程维度的东西,而CIA是目标维度的东西~两者是相互垂直的两个维度,相辅相成。而我现在所在的公司其实已经投入了大量的人力物力在做安全这块,每个季度都有培训和考试,每个月都有安全xxx的邮件提醒,所以感觉后续要做的事情不是如果让领导觉得我们需要做安全,而是让员工觉得这么多安全相关的动作是值得的。而不是疲于应付。目前其实没有很好的思路,因为感觉大家基本上都还是怕出事,那么跟着内部流程和标准来。而这样子的话,相当于把所有的事情都压给了安全人员,安全人员表示压力非常的大~

    2020-04-11

  • 二马 👍(1) 💬(1)

    安全遵循“木桶理论”,这个在实践中有时候会被误解,安全涉及的领域很多,是无法做到每个场景都要把短板提高,有些做到基本防护已经可以解决安全问题。所以,安全加固,先做好安全威胁建模,把影响最大,最可能被利用的威胁降低,即把这些威胁的安全防护之板做到极致,而不是纠结于短板不够好。

    2019-12-18

  • 追风筝的人 👍(1) 💬(2)

    SSL VPN用户在访问虚拟站点的时候会被radius服务器进行AAA认证 授权 审计。radius认证方式有2种 PAP认证即用户名密码认证,用户名是明文保存的,密码是MD5加密的,第2种是challenge认证 会有2次认证第一次用户名密码认证,第2次challenge动态密码认证。2次认证的比只有1次的radius认证安全级别高。1812端口负责认证授权,1813端口负责审计,radius客户端充当NAS网络接入服务器和radius Server交互 对用户行为做出响应的响应 响应有Access-accept,Access-reject 等。 有个问题是radius服务器关键有2个核心配置文件clients.conf(保存客户端配置文件 有client IP,sharesecret:testing123支持自定义修改 还可以设置ACL), users保存用户信息。 老师问题关于这2个配置文件有最简单的配置方法没,我看虚拟机里的配置文件里信息很多 还有本地配置的radius Server进行radtest测试返回了Access accept但是把radius Server IP配置在web UI虚拟站点认证没生效 但是1812端口是开启的,远程北京radius Server环境是可以的。看了配置本地环境没有数据库,远程环境有MySQL和其他一些配置环境。是不是raddb目录下配置文件不全导致web端认证没生效但测试radtest 返回的响应确实Access accept 为什么呢 本地环境参考博客radtest后accept 但是web端认证相同的user 认证不通过

    2019-12-10

  • 小晏子 👍(1) 💬(1)

    对于安全建设的问题的一些考虑: 1,首先保证公司基础设施的安全性,做白名单访问机制,密码认证等 2,其次是对公司成员的权限做细化,分出权限等级,比如哪个group的用户可以做添加删除操作,哪些group只有访问权限等 3,对于所有的web访问强制使用https 4,记录访问用户的行为,甚至可以使用大数据和ML算法对登录用户的行为进行风险分析,并定期给出分析报告. 5,对于用户登陆密码有限制,可以强制使用高的难度密码,如必须包含大小写字母,数字,符号等。 6,定期扫描互联网上是否有公司源代码泄露的情况。 7,监控所有公司电脑, 不允许安装非法软件等。

    2019-12-10

  • 海格 👍(0) 💬(1)

    企业办公安全 随着企业的发展,有那些对应的解决方案呢

    2020-06-18

  • 008 👍(0) 💬(1)

    我们产品因为是专网应用,部署在不同的客户环境中,我们经常忽略基本的安全问题,比如我们会使用简单的默认密码访问数据库、登录管理员账号、访问文件,甚至一些数据权限的限制为了方便是在客户端层面做的显示控制,其实数据已经请求到了客户端。无论是认证还是授权几乎都是仅仅考虑了“可用性”,无视“机密性”和“完整性”。 对于审计,虽然我们做了操作记录,但是并未详细记录修改内容为何,这个在真正需要时是否具有法律效应呢(先忽略这记录可能被篡改)

    2020-03-14

  • 树洞先生 👍(0) 💬(1)

    只有授权过的应用能访问接口,这个也属于安全中的授权吗

    2020-01-05