白帽子讲Web安全-读书笔记

No Patch For Stupid!

在有人参与的情况下,再好的程序都有可能出现各种各样不可预知的情况。在安全领域也普遍认为,最大的漏洞是人!比如管理员的密码可能泄漏等,安全问题往往发生在一些意想不到的地方。

安全是什么?

安全问题的本质是信任的问题。把握信任条件的度,使其恰到好处,是设计安全方案的难点所在。

安全是一个持续的过程

防御技术和攻击技术都在不断发展,两者是相互促进的辩证关系。安全检查应该贯穿于整个软件生命周期中。

安全三要素

安全三要素分别是机密性(Confidentiality)、完整性(Integrity)和可用性(Availability)。

机密性要求包含数据内容不能泄漏,加密是实现机密性要求的常见手段。

完整性要求保护数据内容是完整、没有被篡改的。常见的技术手段是数字签名。

可用性要求保护资源是“随需而得”的。比如拒绝服务攻击(DoS)破坏的就是安全的可用性。

安全评估过程

资产等级划分--威胁分析--风险分析--确认解决方案

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

资产等级划分就是对数据做等级划分。需要和业务负责人沟通了解最看重的数据是什么。

接下来要划分信任域和信任边界。最简单的例子是,简单网站信任模型,其中最重要的数据放在数据库里,其次是Web服务器(可以读写数据库,并对外提供服务),最外面是不可信任的Internet。

信任域划好后,就需要把所有的威胁找出来。一般采用头脑风暴法,也可以使用威胁建模的方法来避免遗漏。威胁建模的方法,又叫做STRIDE模型,STRIDE是以下6个单词的首字母缩写

Spoofing伪装

Tampering篡改

Repudiation抵赖

InformationDisclosure信息泄漏

Denial of Service拒绝服务

Elevation of Privilege提升权限

风险分析

影响风险高低的因素,除了造成损失的大小外,还需要考虑到发生的可能性。微软提出了一个DREAD模型,它可以更科学得指导我们从哪些方面去判断一个威胁的风险。

设计安全方案

安全评估的产出物是安全解决方案。解决方案要有针对性,基于上述的资产等级划分、威胁分析、风险分析的结果给出的。优秀的安全方案应该具备以下特点:

1)能够有效解决问题

2)用户体验好

3)高性能

4)低耦合

5)易于扩展和升级

设计安全方案的方法

Secure By Default原则

该原则是最基本也是最重要的原则,也可归纳为白名单、黑名单的思想。

在使用白名单时,应避免出现通配符的问题。

最小权限原则

该原则要求系统只授予主体必要的权限,而不过度授权,从而有效减少系统、网络、应用、数据库出错的机会。在使用最小权限原则时,需要认真梳理业务所需要的权限,在了解业务时,多设置一些反问句,来确定业务的最小权限。

纵深防御原则

Defense in Depth(纵深防御)包含两层含义:

1)要在不同层面、不同方面实施安全方案,不同安全方案之间互相配合,构成一个整体;

2)在正确的地方做正确的事情,即在解决根本问题的地方实施针对性的安全方案。

数据与代码分离原则

这一原则广泛适用于各种由于“注入”而引发安全问题的场景。比如XSS,SQL注入、CRLF注入等。

不可预测性原则

让可能被攻击的对象具有一定的随机性,能有效对抗基于篡改、伪造的攻击。不可预测性的实现往往需要用到加密算法、随机数算法、哈希算法,利用好这条原则,往往事半功倍。

相关推荐