安全的本质 |
安全是什么?什么样的情况下会产生安全问题?我们要如何看待安全问题?只有搞明白了这些最基本的问题,才能明白一切防御技术的出发点,才能明白为什么我们要这样做,要那样做。
在武侠小说中,一个真正的高手,对武功有着最透彻、最本质的理解,达到了返璞归真的境界。在安全领域,我认为搞明白了安全的本质,就好比学会了 “独孤九剑”,天下武功万变不离其宗,遇到任何复杂的情况都可以轻松应对,设计任何的安全方案也都可以信手拈来了。 那么,一个安全问题是如何产生的呢?我们不妨先从现实世界入手。火车站、机场里,在 乘客们开始正式旅程之前,都有一个必要的程序:安全检查。机场的安全检查,会扫描乘客的行李箱,检查乘客身上是否携带了打火机、可燃液体等危险物品。抽象地说,这种安全检查, 就是过滤掉有害的、危险的东西。因为在飞行的过程中,飞机远离地面,如果发生危险,将会直接危害到乘客们的生命安全。因此,飞机是一个高度敏感和重要的区域,任何有危害的物品都不应该进入这一区域。为达到这一目标,登机前的安全检查就是一个非常有必要的步骤。 👩👔🖥🤳 从安全的角度来看,我们将不同重要程度的区域划分出来: 👏🎠🍚™🦄 安全检査的过程按照需要进行过滤通过一个安全检查(过滤、净化)的过程,可以梳理未知的人或物,使其变得可信任。被划分出来的具有不同信任级别的区域,我们称为信任域,划分两个不同信任域之间的边界,我们称为信任边界。 数据从高等级的信任域流向低等级的信任域,是不需要经过安全检查的;数据从低等级的信任域流向高等级的信任域,则需要经过信任边界的安全检查。 👦💍📀🤩👂 我们在机场通过安检后,想要从候机厅出来,是不需要做检查的;但是想要再回到候机厅, 则需要再做一次安全检查,就是这个道理。 我认为,安全问題的本质是信任的问題。 ✊🪐🍌🉑🐂 一切的安全方案设计的基础,都是建立在信任关系上的。我们必须相信一些东西,必须有一些最基本的假设,安全方案才能得以建立;如果我们否定一切,安全方案就会如无源之水, 无根之木,无法设计,也无法完成。 举例来说,假设我们有份很重要的文件要好好保管起来,能想到的一个方案是把文件“锁”? 到抽屉里。这里就包含了几个基本的假设,首先,制作这把锁的工匠是可以信任的,他没有私自藏一把钥匙;其次,制作抽屉的工匠没有私自给抽屉装一个后门;最后,钥匙还必须要保管在一个不会出问题的地方,或者交给值得信任的人保管。反之,如果我们一切都不信任,那么也就不可能认为文件放在抽屉里是安全的。 当制锁的工匠无法打开锁时,文件才是安全的,这是我们的假设前提之一。但是如果那个工匠私自藏有一把钥匙,那么这份文件也就不再安全了。这个威胁存在的可能性,依赖于对工匠的信任程度。如果我们信任工匠,那么在这个假设前提下,我们就能确定文件的安全性。这 种对条件的信任程度,是确定对象是否安全的基础。 🧑⚕️📥😀💪 在现实生活中,我们很少设想最极端的前提条件,因为极端的条件往往意味者小概率以及高成本,因此在成本有限的情况下,我们往往会根据成本来设计安全方案,并将一些可能性较 大的条件作为决策的主要依据。 比如在设计物理安全时,根据不同的地理位置、不同的政治环境等,需要考虑台风、地震、 战争等因素。但在考虑、设计这些安全方案时,根据其发生的可能性,需要有不同的侧重点。 比如在大陆深处,考虑台风的因素则显得不太实际;同样的道理,在大陆板块稳定的地区,考虑地震的因素也会带来较高的成本。而极端的情况比如“彗星撞击地球后如何保证机房不受影 响”的问题,一般都不在考虑之中,因为发生的可能性太小。 🥷👒🔌🤩👎 从另一个角度来说,一旦我们作为决策依据的条件被打破、被绕过,那么就会导致安全假设的前提条件不再可靠,变成一个伪命题。因此,把握住信任条件的度,使其恰到好处,正是设计安全方案的难点所在,也是安全这门学问的艺术魅力所在。 破除迷信,没有银弹 在解决安全问题的过程中,不可能一劳永逸,也就是说“没有银弹”。 👳👗🖥🤑💪 一般来说,人们都会讨厌麻烦的事情,在潜意识里希望能够让麻烦越远越好。而安全,正是一件麻烦的事情,而且是无法逃避的麻烦。任何人想要一劳永逸地解决安全问题,都属于一 相情愿,是“自己骗自己”,是不现实的。 安全是一个持续的过程 🥷💄🪗😈🤛 自从互联网有了安全问题以来,攻击和防御技术就在不断碰撞和对抗的过程中得到发展。 从微观上来说,在某一时期可能某一方占了上风;但是从宏观上来看,某一时期的攻击或防御技术,都不可能永远有效,永远用下去。这是因为防御技术在发展的同时,攻击技术也在不断发展,两者是互相促进的辩证关系。以不变的防御手段对抗不断发展的攻击技术,就犯了刻舟求剑的错误。 很多安全厂商在推销自己产品时,会向用户展示一些很美好的蓝图,似乎他们的产品无所不能,购买之后用户就可以睡得安稳了。但实际上,安全产品本身也需要不断地升级,也需要有人来运营。产品本身也需要一个新陈代谢的过程,否则就会被淘汰。在现代的互联网产品中, 自动升级功能已经成为一个标准配置,一个有活力的产品总是会不断地改进自身。 记得微软在发布Vista时,曾信誓旦旦地保证这是有史以来最安全的操作系统。我们看到了微软的努力,在Vista下的安全问题确实比它的前辈( Windows XP、Windows 2000、Windows 2003 等)少了许多,尤其是高危的漏洞。但即便如此,在2008年的Pwn2own竞赛上,Vista也被黑客们攻击成功。Pwn2own竞赛是每年举行的让黑客们任意攻击操作系统的一次盛会,一般黑客们都会提前准备好Oday漏洞的攻击程序,以求在Pwn2own上一举夺魁。 💅🗺🍊®🐂 黑客们在不断地研究和寻找新的攻击技术,作为防御的一方,没有理由不持续跟进。微软近几年在产品的安全中做得越来越好,其所推崇的安全开发流程,将安全检查贯穿于整个软件生命周期中,经过实践检验,证明这是一条可行的道路。对每一个产品,都要持续地实施严格的安全检查,这是微软通过自身的教训传授给业界的宝贵经验。而安全检查本身也需要不断更新,增加针对新型攻击方式的检测与防御方案。 安全三要素 🧑💻🧦💰🤮🤛 既然安全方案的设计与实施过程中没有银弹,注定是一个持续进行的过程,那么我们该如何开始呢?其实安全方案的设计也有着一定的思路与方法可循,借助这些方法,能够理清我们的思路,帮助我们设计出合理、优秀的解决方案。 因为信任关系被破坏,从而产生了安全问题。我们可以通过信任域的划分、信任边界的确定,来发现问题是在何处产生的。这个过程可以让我们明确目标,那接下来该怎么做呢? 在设计安全方案之前,要正确、全面地看待安全问题👨🎨🕶🪜😛👈 要全面地认识一个安全问题,我们有很多种办法,但首先要理解安全问题的组成属性。前人通过无数实践,最后将安全的属性总结为安全三要素,简称CIA安全三要素是安全的基本组成元素,分别是机密性(Confidentiality)、完整性(Integrity)、 可用性(Availability)。 机密性要求保护数据内容不能泄露,加密是实现机密性要求的常见手段 👆🚐🌶®🦄 比如在前文的例子中,如果文件不是放在抽屉里,而是放在一个透明的玻璃盒子里,那么虽然外人无法直接取得文件,但因为玻璃盒子是透明的,文件内容可能还是会被人看到,所以不符合机密性要求。但是如果给文件增加一个封面,掩盖了文件内容,那么也就起到了隐藏的效果,从而满足了机密性要求。可见,我们在选择安全方案时,需要灵活变通,因地制宜,没有一成不变的方案。 完整性则要求保护数据内容是完整、没有被篡改的。常见的保证一致性的技术手段是数字签名 👆🗼🍖❎🕊 传说清朝康熙皇帝的遗诏,写的是“传位十四子”,被当时还是四阿哥的胤稹篡改了遗诏, 变成了“传位于四子”。姑且不论传说的真实性,在故事中,对这份遗诏的保护显然没有达到 完整性要求。如果在当时有数字签名等技术,遗诏就很难被篡改。从这个故事中也可以看出数据的完整性、一致性的重要意义。 可用性要求保护资源是“随需而得” 💪🔥🌰☯🪶 假设一个停车场里有100个车位,在正常情况下,可以停100辆车。但是在某一天,有个坏人搬了 100 块大石头,把每个车位都占用了,停车场无法再提供正常服务。在安全领域中这种攻击叫做拒绝服务攻击,简称DoS (Denial of Service)。拒绝服务攻击破坏的是安全的可用性。在安全领域中,最基本的要素就是这三个,后来还有人想扩充这些要素,增加了诸如可审计性、不可抵赖性等,但最最重要的还是以上三个要素。在设计安全方案时,也要以这三个要素为基本的出发点,去全面地思考所面对的问题。
帖子热度 1.3万 ℃
|
|