web安全之世界观安全1

互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了。

1.安全的本质

** 安全问题的本质是信任的问题。**
  一切的安全方案设计的基础,都是建立在信任关系上的。我们必须相信一些东西,必须有一些最基本的假设,安全方案才能得以建立;如果我们否定一切,安全方案就会如无源之水,无根之木,无法设计,也无法完成。
  在现实生活中,我们很少设想最极端的前提条件,因为极端的条件往往意味者小概率以及高成本,因此在成本有限的情况下,我们往往会根据成本来设计安全方案,并将一些可能性较大的条件作为决策的主要依据。
  或者说,一旦我们作为决策依据的条件被打破、被绕过,那么就会导致安全假设的前提条件不再可靠,变成一个伪命题。因此,把握住信任条件的度,使其恰到好处,正是设计安全方案的难点所在,也是安全这门学问的艺术魅力所在。

2. 安全问题不可能是一劳永逸的

** 在解决安全问题的过程中,不可能一劳永逸,也就是说“没有银弹”。 **
  一般来说,人们都会讨厌麻烦的事情,在潜意识里希望能够让麻烦越远越好。而安全,正是一件麻烦的事情,而且是无法逃避的麻烦。任何人想要一劳永逸地解决安全问题,都属于一相情愿,是“自己骗自己”,是不现实的。
 安全是一个持续的过程。
  自从互联网有了安全问题以来,攻击和防御技术就在不断碰撞和对抗的过程中得到发展。从微观上来说,在某一时期可能某一方占了上风;但是从宏观上来看,某一时期的攻击或防御技术,都不可能永远有效,永远用下去。这是因为防御技术在发展的同时,攻击技术也在不断发展,两者是互相促进的辩证关系。以不变的防御手段对抗不断发展的攻击技术,就犯了刻舟求剑的错误。在安全的领域中,没有银弹。

3. 安全三要素

** 安全三要素是安全的基本组成元素,分别是机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)。**
  机密性要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。
比如在前文的例子中,如果文件不是放在抽屉里,而是放在一个透明的玻璃盒子里,那么虽然外人无法直接取得文件,但因为玻璃盒子是透明的,文件内容可能还是会被人看到,所以不符合机密性要求。但是如果给文件增加一个封面,掩盖了文件内容,那么也就起到了隐藏的效果,从而满足了机密性要求。可见,我们在选择安全方案时,需要灵活变通,因地制宜,没有一成不变的方案。
  完整性则要求保护数据内容是完整、没有被篡改,常见的保证一致性的技术手段是数字签名。
传说清朝康熙皇帝的遗诏,写的是“传位十四子”,被当时还是四阿哥的胤禛篡改了遗诏,变成了“传位于四子”。姑且不论传说的真实性,在故事中,对这份遗诏的保护显然没有达到完整性要求。如果在当时有数字签名等技术,遗诏就很难被篡改。从这个故事中也可以看出数据的完整性、一致性的重要意义。

  • 可用性要求保护资源是“随需而得”。
    假设一个停车场里有100个车位,在正常情况下,可以停100辆车。但是在某一天,有个坏人搬了100块大石头,把每个车位都占用了,停车场无法再提供正常服务。在安全领域中这种攻击叫做拒绝服务攻击,简称DoS(Denial of Service)。拒绝服务攻击破坏的是安全的可用性。
  • 在安全领域中,最基本的要素就是这三个,后来还有人想扩充这些要素,增加了诸如可审计性、不可抵赖性等,但最最重要的还是以上三个要素。在设计安全方案时,也要以这三个要素为基本的出发点,去全面地思考所面对的问题。

4. 实施安全评估

** 一个安全评估的过程,可以简单地分为4个阶段:资产等级划分、威胁分析、风险分析、确认解决方案。**


8de74264e5334312ed4f443665619c82.jpg

4.1 资产等级划分

  资产等级划分是所有工作的基础,这项工作能够帮助我们明确目标是什么,要保护什么。
  在互联网的基础设施已经比较完善的今天,互联网的核心其实是由用户数据驱动的——用户产生业务,业务产生数据。互联网公司除了拥有一些固定资产,如服务器等死物外,最核心的价值就是其拥有的用户数据,所以——
互联网安全的核心问题,是数据安全的问题。
  对互联网公司拥有的资产进行等级划分,就是对数据做等级划分。有的公司最关心的是客户数据,有的公司最关心的是员工资料信息,根据各自业务的不同,侧重点也不同。做资产等级划分的过程,需要与各个业务部门的负责人一一沟通,了解公司最重要的资产是什么,他们最看重的数据是什么。通过访谈的形式,安全部门才能熟悉、了解公司的业务,公司所拥有的数据,以及不同数据的重要程度,为后续的安全评估过程指明方向。
  当完成资产等级划分后,对要保护的目标已经有了一个大概的了解,接下来就是要划分信任域和信任边界了。通常我们用一种最简单的划分方式,就是从网络逻辑上来划分。比如最重要的数据放在数据库里,那么把数据库的服务器圈起来;Web应用可以从数据库中读/写数据,并对外提供服务,那再把Web服务器圈起来;最外面是不可信任的Internet。


2071c9e437cf2b6a449fcc3cc950c893.jpg
  • 这是最简单的例子,在实际中会遇到比这复杂许多的情况。比如同样是两个应用,互相之间存在数据交互业务,那么就要考虑这里的数据交互对于各自应用来说是否是可信的,是否应该在两个应用之间划一个边界,然后对流经边界的数据做安全检查。

    4.2威胁分析

  在安全领域里,我们把可能造成危害的来源称为威胁(Threat),而把可能会出现的损失称为风险(Risk)。风险一定是和损失联系在一起的,很多专业的安全工程师也经常把这两个概念弄混,在写文档时张冠李戴。现在把这两个概念区分好,有助于我们接下来要提到的“威胁建模”和“风险分析”两个阶段,这两个阶段的联系是很紧密的。
  什么是威胁分析?
威胁分析就是把所有的威胁都找出来。一般是采用头脑风暴法。当然,也有一些比较科学的方法,比如使用一个模型,帮助我们去想,在哪些方面有可能会存在威胁,这个过程能够避免遗漏,这就是威胁建模。

4.3 风险分析

风险由以下因素组成:
Risk = Probability * Damage Potential

  影响风险高低的因素,除了造成损失的大小外,还需要考虑到发生的可能性。地震的危害很大,但是地震、火山活动一般是在大陆板块边缘频繁出现,比如日本、印尼就处于这些地理位置,因此地震频发;而在大陆板块中心,若是地质结构以整块的岩石为主,则不太容易发生地震,因此地震的风险就要小很多。我们在考虑安全问题时,要结合具体情况,权衡事件发生的可能性,才能正确地判断出风险。

4.4 设计安全方案

  安全评估的产出物,就是安全解决方案。解决方案一定要有针对性,这种针对性是由资产等级划分、威胁分析、风险分析等阶段的结果给出的。
  设计解决方案不难,难的是如何设计一个好的解决方案。设计一个好的解决方案,是真正考验安全工程师水平的时候。
  很多人认为,安全和业务是冲突的,因为往往为了安全,要牺牲业务的一些易用性或者性能,笔者不太赞同这种观点。从产品的角度来说,安全也应该是产品的一种属性。一个从未考虑过安全的产品,至少是不完整的。比如,我们要评价一个杯子是否好用,除了它能装水,能装多少水外,还要思考这个杯子内壁的材料是否会溶解在水里,是否会有毒,在高温时会不会熔化,在低温时是否易碎,这些问题都直接影响用户使用杯子的安全性。
  对于互联网来说,安全是要为产品的发展与成长保驾护航的。我们不能使用“粗暴”的安全方案去阻碍产品的正常发展,所以应该形成这样一种观点:没有不安全的业务,只有不安全的实现方式。产品需求,尤其是商业需求,是用户真正想要的东西,是业务的意义所在,在设计安全方案时应该尽可能地不要改变商业需求的初衷。
  作为安全工程师,要想的就是如何通过简单而有效的方案,解决遇到的安全问题。安全方案必须能够有效抵抗威胁,但同时不能过多干涉正常的业务流程,在性能上也不能拖后腿。
  最终,一个优秀的安全方案应该具备以下特点:

  • ○ 能够有效解决问题;
  • ○ 用户体验好;
  • ○ 高性能;
  • ○ 低耦合;
  • ○ 易于扩展与升级。

  摘自:《白帽子讲Web安全》 — 吴翰清

你可能感兴趣的:(web安全之世界观安全1)