seegongsik
安全

怎么工作 安全原则 有哪些

一说到安全,人们很容易想到某一项厉害的加密技术。可锁再结实,门大敞着也没用。真正安全的房子,不是靠一把锁造出来的。给谁哪把钥匙,一层被突破后靠什么挡住,陌生客人是先放进来还是先拦住,结构是简单还是复杂,这些设计上的约定合在一起,才造出安全。前面几课学的加密、认证、防火墙和人的习惯,也只有放在这些约定之上,才能发挥全部力量。而且,这些约定就算技术变了,也能长久地活下来。

01

只给需要的:最小权限

在讲操作系统的那几课里,我们看过按程序和用户分配权限、再把权限收回的情形。把这个想法扩展到安全设计上:给别人权限时,只给他手头的工作真正需要的那一份。只需要看一眼的人,没有理由连修改的权限也给他。
工作一结束,就把权限收回来。权限越少,就算那个账号被盗或出了差错,损害能蔓延的范围也越小。平时用普通账号,只在需要时才拿出管理员权限,这条建议也出自同一个道理。就像公司不会把整栋楼的万能钥匙发给每一位访客。

所负责的事: 只需短暂看一下内容
风险范围
选给这个人的权限

选一选给这个人什么权限。只给需要的,风险范围就小;给多了,可能失去的就大。

只给需要的那一份时最干净利落。多给的权限平时看着方便,可一旦出了岔子,就会把损害放大。最小权限不只适用于人,对程序和机器也一样:这个部件只做这件事,这个程序只看这个文件夹,把权限的篱笆扎得紧紧的。
不过,权限分得再好,那一层也总有被突破的一天。所以需要下一条原则。

02

一层破了还有下一层:纵深防御

没有哪种防御敢保证永远不被突破。所以不把一切押在一层上,而是把好几层防线叠在一起。外门开了还有内门,内门开了还有保险柜。
一层失守,后面那层还能撑住。攻击的一方本来只要突破一处就行,现在得把每一层都突破,层数越多,走到底就越难。这个领域里看到的也是这样:密码上面有第二道认证,前面有防火墙,来往的内容有加密,最前面还有会核实的人的习惯。

1外门挡着
2内门
3保险柜
所保护的
就算一层开了,下一层还挡着。

一层一层地去突破。一层开了,下一层还会挡住,要走到底就得穿过所有的层。

打开一层并没有结束,下一层又挡住了去路。设好几层的时候有个窍门:让每一层的性质不一样。要是每一层都是同一种锁,打开一把的办法就成了打开所有锁的办法。
所以层的种类越不同,就越牢靠。不过,要设好几层,就得把放进到哪里、从哪里开始拦的标准定清楚。这个标准的起点,就是下一条原则。

03

不认识的就拦:默认拒绝

设计一道门时,起点可以有两种:一种是先全放进来、只拦坏的;另一种是先全拦住、只放允许的。就像防火墙那一课讲的,两者之中先拦住的更安全。
先全放进来的话,得把世上所有坏东西一个不漏地都知道才拦得住,可这样的清单根本列不出来,没想到的危险就直接进来了。反过来先拦住的话,只有你明确允许的才能通过,不认识的自动被拦。名单上没有,就进不来。

选默认方针
选默认方针

比一比两种起点。全放进来只拦坏的,不认识的危险会漏进来;全拦住只放允许的,不认识的就会自动被拦下。

从全放进来那边,没想到的客人悄悄溜了进来;从先拦住那边,不认识的全被挡住了。把默认设成拦截,就算放行名单里漏写了什么,也会偏向安全的一边,而不是危险的一边。
照着出错时损失最小的方向去设计,有人把这叫作“失效安全”,就像坏了反而会锁死的保险柜门。可是,为了守住每一条原则不停地往上加装置,设计就会越来越复杂,而这本身又成了另一种危险。最后一条原则就是来把握这个平衡的。

04

越复杂漏洞越多,越简单越安全

要是为了守好原则,无休止地往上加装置,会怎么样?结构越复杂,藏在里面的漏洞也跟着越多。部件一多、连接一乱,哪里薄弱就没法一眼看出来。在人查不过来的结构里,没查到的那个地方就成了漏洞。
所以好的设计会守住简单。只留真正需要的,可有可无的就去掉。就像对称加密那一课讲的,好的密码之所以可信,不是因为方法藏着,而是因为方法公开了,经得起很多人反复推敲。设计越简单、越公开,就越容易这样推敲。

1
零件数: 1没检查到的缝隙: 0
简单。什么挡什么一眼就看得清。

给结构加一个部件,或者减一个部件。越复杂,没查到的漏洞越多;越简单,越能一眼看清。

减掉部件,要查的地方就少了;越往上加,漏洞就悄悄变多。简单不是偷懒,而是把什么才真正需要想到底的结果。
四条原则不是各干各的,而是咬合在一起转动:用最小权限缩小损害能蔓延的范围,用多层相互支撑,默认设成拦截,同时让整体保持简单。下面把四条原则放到一起。

05

小结

归纳起来是这样:好的安全不是来自某一项技术,而是来自设计原则。最小权限,就是只给需要的,工作结束就收回。纵深防御,就是一层被突破了,后面还有种类不同的一层撑着。默认拒绝,就是除了允许的,一律先拦住。简单,就是减少没查到的漏洞。
四条原则咬合在一起共同起作用,而且比任何一项具体技术都长久。所以碰到新技术时,先用这些原则衡量一下,心里就有底。

1最小权限
2多层防御
3默认拦截
4越简单越安全

依次点四条原则回顾一下:最小权限、纵深防御、默认拒绝、越简单越安全。

现在你手里有了设计安全的四条原则。以后碰到别的安全话题,这些原则就是指路的路标。只要问问:这是不是只给了需要的,是只有一层还是好几层,是放陌生的进来还是拦住,是简单还是平白复杂?
可是,把原则推到极致,就会有不方便的时候。层数越多,登录越麻烦;默认拒绝会让你每做一件新事都得先申请许可。下一课是这个领域的最后一课,来看看在安全和方便之间,该怎样权衡取舍。

一句话总结好的安全不是来自某一项技术,而是来自设计原则。第一,最小权限:不管是人还是程序,只给手头工作需要的权限,工作结束就收回。权限越少,被盗或出错时失去的也越少。第二,纵深防御:不只相信一层,而是设好几层种类不同的防线。一层被突破,下一层还能撑住。第三,默认拒绝:除了明确允许的,一律先拦住,这样就算出错,也会偏向安全的一边。第四,越简单越安全:结构越复杂,没看到的漏洞越多;设计越简单、越公开,就越容易检查和推敲。这些原则就算具体技术变了也能长久适用,所以学新技术时,先用原则衡量一下,就不会迷路。
← 安全
如果有帮助,请支持我们