白帽子讲web安全-1.安全世界观 摘记

一些词汇

exploit: 黑客使用的漏洞利用代码。

黑客精神: open, free, share .

安全世界观

黑帽子、白帽子

白帽子: 指那些精通安全技术,工作在反黑客领域的专家们。
黑帽子: 指利用黑客技术造成破坏,甚至进行网络犯罪的群体。

对于黑帽子,只要找到系统的一个弱点,就可以达到入侵系统的目的;对于白帽子来说,必须找到系统的所有弱点,不能有遗漏,才能保证系统不会出现问题。

从对待问题的角度,黑帽子为了完成一次入侵,需要利用各种不同漏洞的组合来达到目的,是在不断组合问题;而白帽子在设计解决方案时,如果只看到各种问题组合后产生的效果,就会把事情变复杂,难以细致入微地解决根本问题,所以白帽子必然是在不断地分解问题,再对分解后的问题逐个予以解决。

安全的本质

被划分出来的具有不同信任级别的区域,称之为信任域,划分两个不同信任域之间的边界,称为信任边界。

数据从高等级的信任域流向低等级的信任域,是不需要经过安全检查的;数据从低等级的信任域流向高等级的信任域,则需要经过信任边界的安全检查。

安全问题的本质是信任的问题。

一切的安全方案设计的基础,都是建立在信任关系上的。 我们必须相信一些东西,必须有一些最基本的假设,安全方案才能得以建立;如果我们否定一切,安全方案就会如无源之水,无根之本,也无法完成。

一旦我们作为决策依据的条件被打破、被绕过,那么就会导致安全假设的前提条件不再可靠,变成一个伪命题。
把握住信任条件的度,使其恰到好处,正是设计安全方案的难点所在,也是安全这门学问的艺术魅力所在。

破除迷信,没有银弹

安全是一个持续的过程。

安全三要素

安全三要素是安全的基本组成要素,分别是机密性(Confidentiality )、完整性(Integrity)、可用性(Availability )。

  • 机密性要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。
  • 完整性要求保护数据内容是完整、没有被篡改的。常见的保证一致性的技术手段是数字签名。
  • 可用性要求保护资源是“随需而得”。

如何实施安全评估

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

资产等级划分

资产等级划分是所有工作的基础,这项工作能够帮助我们明确目标是什么,要保护什么。

互联网安全的核心问题,是数据安全的问题
对互联网公司拥有的资产进行等级划分,就是对数据做等级划分。

当完成资产等级划分后,对要保护的目标已经有了一个大概的了解,接下来就是要划分信任域和信任边界。
最简单的划分方式,就是从网络逻辑上来划分。

威胁分析

在安全领域,把可能造成危害的来源称为威胁(threat),而把可能会出现的损失称为风险(Risk)。风险一定是和损失联系在一起的。

威胁分析就是要把所有的威胁都找出来。一般是采用头脑风暴法。

微软提出STRIDE模型:


威胁                                        定义                              对应的安全属性

Spoofing(伪装)                            冒充他人的身份                    认证

Tampering (篡改)                          修改数据或代码                    完整性

Repudiation (抵赖)                        否认做过的事情                    不可抵赖性

InformationDisclosure(信息泄露)           机密信息泄露                      机密性

Denial of Service(拒绝服务攻击)           拒绝服务                          可用性

Elevation of Privilege(提升权限)          未经授权许可                      授权

威胁分析是非常重要的一件事情,很多时候还需要经常回顾和更新现有的模型。

风险分析

Risk = Proabality * Damage Potential

微软的DREAD模型:


等级                    高(3)                            中(2)                                          低(1)

Damage Protential       获取完全验证权限;                 敏感信息泄露                                     泄露其他信息
                        执行管理员操作;非法上传文件                     

Reproducibility         攻击者可以随意再次攻击             攻击者可以重复估计,但有时间限制                 攻击者很难重复估计

Exploitability          初学者在短期内能掌握估计方法       熟练的攻击者才能完成这次估计                     漏洞利用条件非常苛刻

Affected users          所有用户,默认配置,关键用户       部分用户,非默认配置                             极少用户,匿名用户

Discoverability         漏洞很显眼,估计条件很容易获得     在私有区域,部分人能看到,需要深入挖掘漏洞        发现该漏洞极其困难

设计安全方案

解决方案一定要有针对性,这种针对性是由资产等级划分、威胁划分、风险分析等阶段的结果给出的。

没有不安全的业务,只有不安全的实现方式。

好的解决方案对用户应该是透明的,尽可能不要改变用户的使用习惯。

一个好的安全解决方案应该具备以下特点:

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

白帽子兵法

Secure By Default 原则

在设计安全方案时,最基本也最重要的原则就是“Secure By Default ”。一个方案设计得是否足够安全,与有没有应用这个原则有很大的关系。“Secure By Default ”原则也可以归纳为白名单、黑名单的思想。如果更多地使用白名单,那么系统会更安全。

黑名单、白名单

黑名单:列出一个清单,在这个清单上的都是不允许的,在清单以外的都是允许的。
白名单:列出一个清单,在这个清单上的都是允许的,在清单以外的都是不允许的。

当出现新威胁时,黑名单一般不能应付。而白名单默认是不允许新事物,所以更安全点。
当然,还得确保白名单上的本身是安全的。

最小权限原则

Secure By Default 的另一层含义就是“最小权限原则”。最小权限原则也是安全设计的基本原则之一。

最小权限原则要求系统只授予主题必要的权限,而不要多度授权,这样能有效地减少系统、网络、应用、数据库出错的机会。

纵深防御原则

Defense in Depth

纵深防御包含两层含义:

  • 要在各个不同层面、不同方面实施安全方案,避免出现漏洞,不同安全方案之间需要互相配合,构成一个整体。
  • 要在正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的安全方案。

设计安全方案时最怕出现短板。

数据与代码分离原则

这个原则广泛适用于各种由于“注入”而引发安全问题的场景。

在web安全中,由“注入”引起的问题比比皆是,如XSS、SQL Injection、 CRLF Injection 、X-Path Injection 等。此类问题均可以根据“数据与代码分离原则”设计出真正安全的解决方案,因为这个原则抓住了漏洞形成的本质原因。

不可预测性原则

即使无法修复code,但是如果能够使得攻击的方法无效,那么也算是成功的防御。

不可预测性(Unpredictable),能够有效地对抗基于篡改、伪造的攻击。

不可预测性的实现往往需要用到加密算法、随机数算法、哈希算法,好好使用这条原则,在设计安全方案时往往会事半功倍。

小结

Secure By Default ,是时刻要牢记的总则;纵深防御,是要更全面、更正确地看待问题;数据与代码分离,是从漏洞成因上看问题;不可预测性则是从客服攻击方法的角度看问题。

安全是一门朴素的学问,也是一门平衡的艺术。


欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据