《白帽子讲Web安全》笔记
4步:资产等级划分->威胁分析->风险分析->确认解决方案
一、资产等级划分
为什么要划分?
- 资产等级划分是所有工作的基础,这项工作能够帮助我们明确目标是什么,要保护什么。
什么是资产?
- 在互联网的基础设施已经比较完善的今天,互联网的核心其实是由用户数据驱动的——用户产生业务,业务产生数据。互联网公司除了拥有一些固定资产,如服务器等死物外,最核心的价值就是其拥有的用户数据。互联网安全的核心问题,是数据安全的问题。
如何实施?
- 每个公司因为业务不同对数据的侧重也不同。做资产等级划分的过程,需要与各个业务部门的负责人一一沟通,了解公司最重要的资产是什么,他们最看重的数据是什么。通过访谈的形式,安全部门才能熟悉、了解公司的业务,公司所拥有的数据,以及不同数据的重要程度,为后续的安全评估过程指明方向。
划分信任域和信任边界
- 最简单的划分方式,就是从网络逻辑上来划分。比如最重要的数据放在数据库里,那么把数据库的服务器圈起来;Web 应用可以从数据库中读/写数据,并对外提供服务,那再把 Web 服务器圈起来;最外面是不可信任的 Internet
二、威胁分析
- 造成危害的来源称为威胁(Threat),而把可能会出现的损失称为风险(Risk)。两者紧密联系
什么是威胁分析?
-
威胁分析就是把所有的威胁都找出来。怎么找?一般是采用头脑风暴法。当然,也有一些比较科学的方法,比如使用一个模型,帮助我们去想,在哪些方面有可能会存在威胁,这个过程能够避免遗漏,这就是威胁建模。
-
一种威胁建模的方法,它最早是由微软提出的,叫做 STRIDE 模型。
-
STRIDE 是 6 个单词的首字母缩写,我们在分析威胁时,可以从以下 6 个方面去考虑。
威 胁 定 义 对应的安全属性 Spoofing(伪装) 冒充他人身份 认证 Tampering(篡改) 修改数据或代码 完整性 Repudiation(抵赖) 否认做过的事情 不可抵赖性 InformationDisclosure(信息泄露) 机密信息泄露 机密性 Denial of Service(拒绝服务) 拒绝服务 可用性 Elevation of Privilege(提升权限) 未经授权获得许可 授权 -
在进行威胁分析时,要尽可能地不遗漏威胁,头脑风暴的过程可以确定攻击面(Attack
Surface)。 -
在维护系统安全时,最让安全工程师沮丧的事情就是花费很多的时间与精力实施安全方
案,但是攻击者却利用了事先完全没有想到的漏洞(漏洞的定义:系统中可能被威胁利用以造
成危害的地方。)完成入侵。这往往就是由于在确定攻击面时,想的不够全面而导致的。
三、风险分析
-
风险由以下因素组成:
Risk = Probability * Damage Potential (风险=概率*潜在损害) -
科学地衡量风险
DREAD 模型,它也是由微软提出的等 级 高(3) 中(2) 低(1) Damage Potential 获取完全验证权限;执行管理员操作;非法上传文件 泄露敏感信息 泄露敏感信息 Reproducibility 攻击者可以随意再次攻击 攻击者可以重复攻击,但有时间限制 攻击者很难重复攻击过程 Exploitability 初学者在短期内能掌握攻击方法 熟练的攻击者才能完成这次攻击 漏洞利用条件非常苛刻 Affected users 所有用户,默认配置,关键用户 部分用户,非默认配置 极少数用户,匿名用户 Discoverability 漏洞很显眼,攻击条件很容易获得 在私有区域,部分人能看到,需要深入挖掘漏洞 发现该漏洞极其困难 -
风险分析例子
以《智取华山》为例,如果国民党在威胁建模后发现存在两个主要威胁:第一个威胁是从
正面入口强攻,第二个威胁是从后山小路爬悬崖上来。那么,这两个威胁对应的风险分别计算
如下:
走正面的入口:
Risk = D(3) + R(3) + E(3) + A(3) + D(3) = 3+3+3+3+3=15
走后山小路:
Risk = D(3) + R(1) + E(1) + A(3) + D(1) = 3+1+1+3+1=9
如果我们把风险高低定义如下:
高危:12~15分 中危:8~11分 低危:0~7分
那么,正面入口是最高危的,必然要派重兵把守;而后山小路竟然是中危的,因此也不能
忽视。之所以会被这个模型判断为中危的原因,就在于一旦被突破,造成的损失太大,失败不
起,所以会相应地提高该风险值。 -
在任何时候都应该记住——模型是死的,人是活的,再好的模型也是需要人来使用的,在
确定攻击面,以及判断风险高低时,都需要有一定的经验,这也是安全工程师的价值所在。
四、设计安全方案
- 安全评估的产出物,就是安全解决方案。解决方案一定要有针对性,这种针对性是由资产
等级划分、威胁分析、风险分析等阶段的结果给出的。 - 设计解决方案不难,难的是如何设计一个好的解决方案。设计一个好的解决方案,是真正
考验安全工程师水平的时候。 - 很多人认为,安全和业务是冲突的,因为往往为了安全,要牺牲业务的一些易用性或者性
能,笔者不太赞同这种观点。从产品的角度来说,安全也应该是产品的一种属性。一个从未考
虑过安全的产品,至少是不完整的。 - 作为安全工程师,要想的就是如何通过简单而有效的方案,解决遇到的安全问题。安全方
案必须能够有效抵抗威胁,但同时不能过多干涉正常的业务流程,在性能上也不能拖后腿。 -
最终,一个优秀的安全方案应该具备以下特点:
能够有效解决问题;
用户体验好;
高性能;
低耦合;
易于扩展与升级。