白帽子讲Web安全(纪念版)笔记

白帽子讲Web安全(纪念版)

只是笔记,详情请查阅吴翰清老师的《白帽子讲Web安全》

前言

安全工程师的核心竞争力不在于他能拥有多少个0day,掌握多少中安全技术,而是在于他对安全理解的深度,以及由此引申的看待安全问题的角度和高度。
在此书中最可贵的不是那一个个工业化的解决方案,而是在解决这些问题时,背后的思考过程。我们不是要做一个能解决问题的方案,而是要做一个能够“漂亮的”解决问题的方案这是每一名优秀的安全工程师应有的追求。

第一篇 世界观安全

安全问题的本质是信任问题
因为信任关系被破坏,从而产生了安全问题。我们可以通过信任域的划分、信任边界的确定,来发现问题是在何处产生的。

安全三要素

安全三要素是安全的基本组成元素,分别是机密性(Confidentiality)、完整性(Integrity)、可用性(Availability)
机密性要求保护数据内容不能泄漏,加密是实现机密性的常见手段。
我们在选择方案时,需要灵活变通,因地制宜,没有一成不变的方案。
完整性则要求保护数据内容是完整的、没有被篡改的。常见的保证一致性的技术手段是数字签名。
可用性要求保护资源是“随需而得”。
拒绝服务攻击破坏的是安全的可用性。

如何实施安全评估

资产等级划分

互联网安全的核心问题,是数据的安全问题。
在安全领域里,我们把可能造成危害的来源称为威胁(Threat),而把可能会出现的损失称为风险(Risk)。

威胁分析

威胁分析就是把所有的威胁都找出来。
STRIDE是6个单词的首字母缩写,我们在分析威胁时,可以从以下6个方面去考虑。
白帽子讲Web安全(纪念版)笔记_第1张图片

在进行威胁分析时,要尽可能地不遗漏威胁,头脑风暴的过程可以确定攻击面。

风险分析
风险由以下因素组成:
R i s k = P r o b a b i l i t y ∗ D a m a g e P o t e n t i a l Risk = Probability * Damage Potential Risk=ProbabilityDamagePotential

影响风险高低的因素,除了造成损失的大小外,还需要考虑到发生的可能性。
DREAD也是几个单词的首字母缩写,它指导我们应该从哪些方面去判断一个威胁的风险程度。
白帽子讲Web安全(纪念版)笔记_第2张图片

风险高低定义如下:

高危:12~15        中危:8~11        低危:0~7

设计安全方案

安全评估的产出物,就是安全解决方案。
没有不安全的业务,只有不安全的实现方式。
一个优秀的安全方案应该具备以下特点:

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

白帽子兵法

Secure By Default原则

在设计安全方案时,最基本最重要的原则就是“Secure By Default”。实际上,“Secure By Default”原则也可以归纳为白名单、黑名单思想。
最小权限原则
Secure By Default的另一层含义就是“最小权限原则”。最小权限原则也是安全设计的基本原则之一。最小权限原则要求系统只授予主体必要的权限,而不要过度授权,这样能有效减少系统、网络、应用、数据库出错的机会。

纵深防御(Defense in Depth)原则

纵深防御包含两层含义:首先,要在各不同层面、不同方面实施安全方案,避免出现疏漏,不同方案之间需要互相配合,构成一个整体;其次,要在正确的地方做正确的事情,即:在解决根本问题的地方实施针对性的安全方案。
在常见的入侵案例中,大多数是利用Web应用漏洞,攻击者先获得一个低权限的webshell,然后通过低权限的webshell上传更多的文件,并尝试执行更高权限的系统命令,尝试在服务器上提升权限为root;接下来攻击者再进一步尝试渗透内网,比如数据库服务器所在网段。
就入侵的防御来说,我们需要考虑的可能有Web应用安全、OS系统安全、数据库安全、网络环境安全等。这些不同层面的安全方案,将共同组成整个防御体系,这也就是纵深防御的思想。

数据与代码分离原则

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

不可预测性原则

Secure By Default,是时刻要牢记的总则;纵深防御,是要更全面、更正确的看待问题;数据与代码分离,是从漏洞成因上看问题;不可预见性,是从克服攻击方法的角度看问题。
不可预测性,能有效的对抗基于篡改、伪造的攻击。
不可预见性的实现往往需要用到加密算法。

第二篇 客户端脚本安全

第2章 浏览器安全

2.1同源策略

同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能。可以说web是构建在同源策略的基础之上的,浏览器只是针对同源策略的一种实现。

浏览器的同源策略,限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性。

对于当前页面来说,页面内存放的JavaScript文件的域并不重要,重要的是加载JavaScript页面所在的域是什么。
在浏览器中,

你可能感兴趣的:(学习笔记)