安全世界观
讲安全,需要关注攻击的技术原理,也需要关注防御的思路和实现的技术。
安全是什么?什么情况下才会产生安全问题?如何看待安全问题?这些是安全的基本问题,需要搞清楚,才能明白一切防御技术的出发点。这也是一个道跟术的问题。
安全的本质是信任问题。安全方案的设计是建立在信任关系上,比如说要保管重要的文件,我们可以把它锁在抽屉里物理的一把锁,要保证锁的 工匠,品牌是值得信任的,没有私自保留额外的钥匙,没有给锁留后门。且锁的钥匙也要在一个不会出问题的地方,或者钥匙交给值得信任的人来保管。如果工匠,品牌不可信任或者钥匙的保管不够安全。我们的决策依据被打破,安全的前提就不再存在。
安全是一个持续的过程,不能一劳永逸地解决安全问题。任何一种防御技术都不可能永远有效。防御技术在不断的发展,攻击的技术也在动态的发展,二者是相互促进的辩证关系。黑客在不断地研究寻找新的攻击技术,作为防御这也需要不断地跟进,增加对于新的攻击方式的检测与防御方案。
设计安全方案
安全三要素(作为设计安全方案的出发点)
- 机密性。保护数据不能泄露。常见的手段是加密。比如放在加了锁的抽屉里。
- 完整性。保护数据内容完整,没有被篡改。常见的技术手段是数字签名,比如 github 可以对每个 commit 进行签名。
- 可用性。保护资源在需要的时候都能获得。 典型的破获可用性的例子是 DDOS,服务端拒绝攻击,把可用的端口都占满了,导致无法再提供服务。
安全评估
-
目标是什么,要保护什么
-
核心问题是数据安全问题。根据业务内容不同,划分的侧重点也不同,有的公司关心员工的资料信息,有的公司关注客户数据,设计安全方案,需要了解最重要的数据是什么,以及不同数据的重要程度。
最简单的划分信任域和信任边界,从网络逻辑上进行划分。
威胁分析
要把所有的威胁都找出来,一般比较难找,可以采取头脑风暴的形式。也可以采用比较科学的方法,比如使用一个模型帮助我们去想到底有哪些方面可能存在威胁。
微软提出的威胁建模的方法,我们可以从六个方面去考虑。当然可能存在的威胁有很多,一个威胁到底能造成多大的危害,该怎么衡量,则需要进行风险分析。
风险 = 发生的可能性 * 破坏潜力(造成的损失大小)
可以根据风险衡量模型来计算一个威胁的具体风险大小。
白帽子兵法(防御思路)
-
黑名单,白名单原则
白名单比黑名单安全。但白名单也不是一定安全的。基于白名单的安全方案,也是信任白名单是好的,是安全的,若信任基础不存在,也就谈不上安全。比如浏览器在加载跨域资源的时候,设计的跨域资源共享机制就是通过白名单的思想。设置允许访问的域,允许的请求方法等。
-
最小权限原则。
只授予必要的权限,而不要过度授权,可以有效减少出错的机会。比如在 Linux 系统中,比较好的操作习惯是用 普通用户操作,只在必要的时候使用 sudo 命令而不是一开始就使用 root 账户,可以最大化降低误操作的风险,在账户被盗用时,造成的影响也会比较低。
-
纵深防御原则
需要全面防御。在不同的层面,不同的角度对系统做整体的解决方案,将风险分散到系统的各个方面。