周大侠啊——前端工程师

学海无涯苦作舟

Web安全学习系列之概述

一、安全的本质

其实,安全的本质就是信任问题。

举个例子,家里的保险箱。首先,制作保险箱的锁匠是可以信任的,他没有自藏一把钥匙;其实,制作保险箱的工匠没有私自给箱子装个后门;最后,钥匙还必须要一个值得信任的人保管。反之,如果我们一切都不信任,那么就不可能认为这个保险箱是安全的。

二、安全是一个持续的过程

安全问题,没有一劳永逸的事,这是个持续不断的工作,黑客们在不断地研究和寻找新的攻击技术,作为防御的一方,没有理由不持续跟进!

三、安全三要素

前人通过无数的实践,最后将安全的属性总结为安全三要素,简称CIA。分别为:

  1. 机密性 (保护数据内容不能泄露,对数据加密是常见手段)
  2. 完整性 (保护数据内容是完整、没有被篡改的,数字签名是常见手段)
  3. 可用性 (保护资源是“随需而得”,常见的DoS就是破坏了安全的可用性)

安全评估

下面就可以开始分析和解决安全问题了。一个安全评估的过程,可以简单地分为4个阶段:
1. 资产等级划分
2. 威胁分析
3. 风险分析
4. 确定解决方案

1、资产等级划分

这是所有工作的基础,明确我们的目标,要保护什么。

互联网安全的核心问题,是数据安全的问题。

因此,资产等级划分,就是对数据做等级划分。有的公司最关心的客户数据,有的公司最关心的是员工资料信息,根据各自业务的不同,侧重点也不同。

2、威胁分析

在安全领域里,我们把可能造成危害的来源称为威胁,而把可能会出现的损失称为风险。不要把这两个概念弄混。

威胁分析就是要把所有的威胁都找出来,一般采用头脑风暴,当然也有比较科学的方法,比如使用STRIDE模型,这就是威胁建模。

这是6个单词的首字母缩写:
《Web安全学习系列之概述》

3、风险分析

影响风险高低的因素,除了造成损失的大小外,还需考虑到发生的可能性。

可通过DREAD模型来判断一个威胁的风险程度。

《Web安全学习系列之概述》

4、确定解决方案

一个优秀的安全方案应该具备以下特点:
1. 能够有效解决问题;
2. 用户体验好;
3. 高性能;
4. 低耦合
5. 易于扩展与升级。

四、白帽子兵法

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

1、黑名单、白名单

例如,如果网站只提供Web服务,那么正确的做法应该是只允许网站服务器的 80 和 443 端口对外提供服务,屏蔽除此之外的其他端口。这就是“白名单”的做法。如果使用“黑名单”,比如不允许SSH端口对外开发,那么就要禁止其默认的 22 端口,但是,如果有的工程师为了偷懒或图方便,私自改变了SSH 的监听端口为 222 等。那么“黑名单”就无效了。

2、最小权限原则

比如在Linux系统中,一种良好的操作习惯是使用普通账户登录,在执行需要root权限的操作时,再通过 sudo 命令完成。这样最大化降低一些误操作导致的风险;同时普通账户被盗后,与root账户被盗所导致的后果是完全不同的。

3、纵深防御原则

纵深防御包含两层含义:首先,要在各个不同层面、不同方面实施安全方案,避免出现疏漏,不同安全方案之间需要相互配合,构成一个整体;其次,要在正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的安全方案。

4、数据与代码分离原则

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

5、不可预测性原则

不可预测性原则,能有效地对抗基于篡改、伪造的攻击。

不可预测性原则,可以巧妙地用在一些敏感数据上。比如在 CSRF 的防御技术中,通常会使用一个 token 来进行有效防御。这个 token 能防住 CSRF ,就是因为在攻击中,无法预测到 token 的值。

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

参考文档:白帽子讲Web安全

点赞

发表评论

电子邮件地址不会被公开。