读《白帽子讲web安全》的思考和整理【updating】

读《白帽子讲Web安全》的思考[updating]

安全基础与理论

安全三要素

  • 机密性(Confidentiality)
  • 完整性(Integrity)
  • 可用性(Availability)

安全评估过程

1. 资产等级划分

明确目标是什么,需要保护什么

2. 威胁分析

  • 威胁(Threat):表示可能的危害来源
    • 对比,风险(Risk):表示可能造成的损失
  • 威胁建模
    • e.g. 微软的STRIDE模型
      • Spoofing
      • Tampering
      • Repudiation
      • Information Disclosure
      • Denial of Service
      • Elevation of Privilege

3. 风险分析

Risk = Probability * Damage Potential

  • 风险模型
    • e.g. 微软的DREAD模型
      • Damage Potential
      • Reproducibility(再现性)
      • Exploitability(可利用性)
      • Affected Users
      • Discoverability(可发现性)

白帽兵法(安全原则)

最小权限原则

只授予主体必要的权限,而不要过度授权

纵深防御原则

深入,分层设计;有针对性

数据与代码分离原则

  • 一个互联网应用场景里涉及到的数据,宽泛地来讲,可以分为:用户数据 和 程序代码。而用户数据里有可分为普通数据和恶意数据。

  • 该原则就是要求用户数据与程序代码分离,隔断恶意用户数据与程序代码的交互,进而保护这个应用场景。

  • 对很对Web安全问题都可以采用该原则进行改进,比如XSS, SQL Injection, CRLF Injection, X-Path Injection

不可预测原则

  • 针对基于篡改、伪造的攻击很有效。

  • 前三个原则是从漏洞形成的角度出发,该原则从对抗攻击方法的角度出发(我知道我的程序代码有问题,但我不修复,我让你的攻击无效)

  • 比如,让攻击者不能完整地知道所要篡改的、伪造的数据。在CSRF(跨站请求伪造)防御时,开发者使得请求中带有一部分无法或者很难预测、猜解的token(一串数值),并且这个token在每个客户端上都不相同,服务端也会进行验证。这样,攻击者伪造可信用户的请求难度就大大增加了。

浏览器安全

同源策略

  • 首先要明确,同源策略保护的主体是浏览器(也是客户端);所限制的主体是当前访问的网站;所保护的内容是其它源的资源(e.g. JS脚本、CSS等)

  • 一句话,加载的资源所在的源必须是同一个源

    • 比如,用户访问的网页是a网站,http://a.com加载的资源是一张a网站页面的一张图片,来自b网站 <img src=http://b.com/pic.png>
    • 在加载该图片时,显示在的页面是a网站的,而不是b网站的
    • 虽然进行了跨域资源访问,但浏览器限制了a网站,使其不能读写b图片。虽然在客户端加载,但网站本身无法读写该资源
  • 浏览器需要判断加载的资源是否可信,根据最小权限原则分析,在使用Web服务时,主体自然就是该网站,网站使用的源(host,域名或IP、子域名、端口、协议)来确定唯一身份。最小权限原则要求授予主体必要的权限,而不授予主体过度的权限。

  • 那么对于该网站,浏览器不在意资源文件所在的域是什么,重要的是加载资源文件页面所在的域是什么

    • 比如图片资源,存放在OSS中,图片链接的源与当前页面的源不同。但浏览器请求图片资源,跨域调用图片,图片加载时所在的源还是当前页面。并且由于该策略,网站不能读、不能写不同源的资源。加载是在浏览器/客户端完成的。

    • 简单地说,设想一个场景,如果网站可以读、写不同源的资源,那么一个恶意网站,就可以调用你支付宝网页登入界面,并且在你输入账号密码时进行读取。

      注意这里最重要的两个特征:

      • 跨域访问资源,加载资源的页面不是同源的
      • 浏览器放任不同源的网页互相读写数据

      这样就造成了危害,因此反向思考,这两个特征的否定就是同源策略所作的事情