????????一个安全评估的过程,可以简单地分为4个阶段:资产等级划分、威胁分析、风险分析、确认解决方案。
????????一般来说,按照这个过程来实施安全评估,在结果上不会出现较大的问题。这个实施的过程是层层递进的,前后之间有因果关系。
????????资产等级划分是所有工作的基础,这项工作能够帮助我们明确目标是什么,要保护什么。我们前面提到安全三要素时,机密性和完整性都是与数据相关的,在可用性的定义里,笔者则用到了“资源”一词。“资源”这个概念描述的范围比数据要更加广阔,但很多时候,资源的可用性也可以理解为数据的可用性。
????????在互联网的基础设施已经比较完善的今天,互联网的核心其实是由用户数据驱动的——用户产生业务,业务产生数据。互联网公司除了拥有一些固定资产,如服务器等死物外,最核心的价值就是其拥有的用户数据,所以——互联网安全的核心问题,是数据安全的问题。、
????????当完成资产等级划分后,对要保护的目标已经有了一个大概的了解,接下来就是要划分信任域和信任边界了。通常我们用一种最简单的划分方式,就是从网络逻辑上来划分。
????????什么是威胁分析?威胁分析就是把所有的威胁都找出来。怎么找?一般是采用头脑风暴法。当然,也有一些比较科学的方法,比如使用一个模型,帮助我们去想,在哪些方面有可能会存在威胁,这个过程能够避免遗漏,这就是威胁建模。
????????在威胁建模中STRIDE模型是最早由微软提出的。
????????STRIDE是6个单词的首字母缩写,我们在分析威胁时,可以从以下6个方面去考虑。
????????在进行威胁分析时,要尽可能地不遗漏威胁,头脑风暴的过程可以确定攻击面(AttackSurface)。
????????在维护系统安全时,最让安全工程师沮丧的事情就是花费很多的时间与精力实施安全方案,但是攻击者却利用了事先完全没有想到的漏洞(漏洞的定义:系统中可能被威胁利用以造成危害的地方。)完成入侵。这往往就是由于在确定攻击面时,想的不够全面而导致的。
????????威胁分析是非常重要的一件事情,很多时候还需要经常回顾和更新现有的模型。可能存在很多威胁,但并非每个威胁都会造成难以承受的损失。一个威胁到底能够造成多大的危害,如何去衡量它?这就要考虑到风险了。我们判断风险高低的过程,就是风险分析的过程。在“风险分析”这个阶段,也有模型可以帮助我们进行科学的思考。
????????风险由以下因素组成:
Risk= Probability * Damage Potential
????????影响风险高低的因素,除了造成损失的大小外,还需要考虑到发生的可能性。地震的危害很大,但是地震、火山活动一般是在大陆板块边缘频繁出现,比如日本、印尼就处于这些地理位置,因此地震频发;而在大陆板块中心,若是地质结构以整块的岩石为主,则不太容易发生地震,因此地震的风险就要小很多。我们在考虑安全问题时,要结合具体情况,权衡事件发生的可能性,才能正确地判断出风险。
????????如何更科学地衡量风险呢?这里介绍一个DREAD模型,它也是由微软提出的。DREAD也是几个单词的首字母缩写,它指导我们应该从哪些方面去判断一个威胁的风险程度。
????????在 DREAD模型里,每一个因素都可以分为高、中、低三个等级。在上表中,高、中、低三个等级分别以3、2、1的分数代表其权重值,因此,我们可以具体计算出某一个威胁的风险值。
????????在任何时候都应该记住——模型是死的,人是活的,再好的模型也是需要人来使用的,在确定攻击面,以及判断风险高低时,都需要有一定的经验这也是安全工程师的价值所在。类似STRIDE 和 DREAD的模型可能还有很多,不同的标准会对应不同的模型,只要我们觉得这些模型是科学的,能够帮到我们,就可以使用。但模型只能起到一个辅助的作用,最终做出决策的还是人。
????????安全评估的产出物,就是安全解决方案。解决方案一定要有针对性,这种针对性是由资产等级划分、威胁分析、风险分析等阶段的结果给出的。
????????设计解决方案不难,难的是如何设计一个好的解决方案。设计一个好的解决方案,是真正考验安全工程师水平的时候。好的安全方案对用户应该是透明的,尽可能地不要改变用户的使用习惯。
????????好的安全产品或模块除了要兼顾用户体验外,还要易于持续改进。一个好的安全模块,同时也应该是一个优秀的程序,从设计上也需要做到高聚合、低耦合、易于扩展。比如Nmap的用户就可以自己根据需要写插件,实现一些更为复杂的功能,满足个性化需求。
??????? 一个优秀的安全方案应该具备以下特点: