Fork me on GitHub

读《白帽子讲Web安全》——客户端脚本安全

​ 最近在学习网络安全相关的知识,于是先从业内一本系统讲Web安全的书系统学习Web安全的相关知识。在此整理书中的知识层次,不求详尽,只求自己对整个Web安全梗概有所了解,另外记录下来以便以后温习。

​ 本书总共分为四篇,作者的安全世界观,客户端脚本的安全、服务端应用的安全以及互联网公司安全运营。这一篇博客记录的是客户端脚本安全的知识,包括安全世界观、浏览器安全、XSS跨站脚本攻击、跨站点请求劫持CSRF、点击劫持和HTML5安全

​ ps:阅读本书时,发现作者是年西安交通大学少年班出身,在大学期间就成立了“幻影”,后成为中国安全圈内极具影响力的组织 。算来还是学长,在此对学长的书以及学长在中国网络安全界的影响,膜一波。

世界观安全

  • 安全三要素 CIA

    • 机密性 Confidentiality
    • 完整性 Integrity
    • 可用性 Availability
  • 安全评估

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

  • 互联网的核心是由用户数据驱动的

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

  • 威胁建模 STRIDE

    伪装,篡改,抵赖,信息泄露,拒绝服务,提升权限

  • 风险模型 DREAD

  • 白帽子兵法

    • Secure By Default 原则(黑白名单)
    • 最小权限原则
    • 纵深防御原则(1.多层面,多方面 2.正确的地方做正确的事)
    • 数据与代码分离原则
    • 不可预测性原则

浏览器安全

  • 同源策略 Same Origin Policy

    浏览器为了不让浏览器的页面行为形成干扰,提出“源”。

    影响源的因素有:host、子域名、端口、协议

    对于当前页面来说,重要在加载JS的域

    在浏览器中 script、 img 、iframe 、link、 标签跨域加载资源,实际发起一次GET请求,但不能读写返回的内容

    XMLHttpRequest受到同源策略影响

  • 浏览器沙箱

    挂马 在网页中插入恶意代码,利用浏览器漏洞执行任意代码

    sandbox 资源隔离类模块,将不受信任的代码隔离在访问区之外,通过严格合法检验的API进行访问,各个模块分隔开

    多进程浏览器 浏览器多进程,防止单页面崩溃导致全局崩溃

  • 恶意网址拦截

    浏览器周期性从服务器端获得一份最新的恶意网址黑名单

    分类 1. 挂马网站 2. 钓鱼网站

    PhishTank提供恶意网址黑名单

    EVSSL证书(兼容X509标准)浏览器特别对待

  • 高速发展的浏览器安全

    Firefox 第一个支持CSP(Content Security Policy)的浏览器,插入一个http返回头

跨站脚本攻击 (XSS)

  • 简介

    XSS: Cross Site Script

    黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

    分类

    • 反射型XSS : 将用户输入的数据“反射”给浏览器 非持久性XSS
    • 储存型XSS : 将用户输入的数据储存在服务端
    • DOM Based XSS : 通过修改页面的DOM节点形成的XSS
  • XSS攻击进阶

    XSS Payload : JS或者其他富客户端的脚本

    常见:读取cookie对象,发起cookie劫持。(插入一张看不见的图片,将cookie发给远程服务器)

    HttpOnly可以防止cookie劫持

    强大的XSS Payload

    • 构造GET和POST请求 1.构造form表单 2.XMLHttpRequest 发送POST请求
    • XSS钓鱼 与用户进行交互,eg:伪造出登录框,将密码发送至服务器
    • 识别用户浏览器 UserAgent对象,用JS脚本实现
    • 识别用户安装的软件 ActiveX控件,很多第三方软件也会泄露电脑软件信息
    • CSS History Hack 通过CSS发现用户曾经访问过的网站
    • 获取用户真实IP地址 通过第三方软件完成,eg:JAVA的Java Applet接口

    常见XSS攻击平台 Attack API,BeEF, XSS-Proxy

    XSS worm Samy Worm 通过CSS构造出XSS

    ​ 百度空间蠕虫

    XSS构造技巧

    • 利用字符编码
    • 绕过长度限制(1将恶意代码隐藏起来 eg:location.hash不会发送 2.利用注释符绕过两个文本框从而增加长度)
    • 使用base标签:设定紧接其后的相对路径的host
    • window.name 由于window对象很多时候不受同源策略的影响

    变废为宝 碟中谍 Mission impossible

    • Apache Expect Header XSS :JS控制的浏览器环境无法控制http头,但是利用flash发起请求可以自定义大多数HTTP头
    • Anehta的回旋镖:将要利用的反射型XSS嵌入一个储存型XSS中

    Flash XSS 在Flash中可以嵌入ActionScript脚本 ,如果一定要用Flash,要求转码为flv静态文件,或者配置参数

    JS 框架的XSS漏洞 信任了用户传入的参数,用户可能上传恶意代码

  • XSS的防御

    • 四两拨千斤HttpOnly:禁止JS访问带有HttpOnly属性的Cookie
    • 输入检查 : 客户端服务端同时检查 XSS Filter
    • 输出检查 : 编码或者转义 JavaScriptEncode() HtmlEncode() ,大部分XSS漏洞可以再模板系统中解决
    • 正确地防御XSS , XSS 实质上是一种 HTML注入,用户数据被当成HTML代码来执行,所以要在所有XSS可能出现的场景一一解决
      • 构造script标签,执行脚本——使用HtmlEncode,以及JavaScriptEncode
      • CSS,style中出现漏洞——使用encodeForCSS()函数
      • 地址栏中——URLencode
    • 处理富文本,富文本是完整的HTML代码——使用白名单
    • 防御DOM Based XSS

跨站点请求伪造(CSRF)

  • CSRF简介

    攻击者利用用户的身份,进行http请求,从而造成破坏,不需要获得cookie直接利用用户

  • CSRF进阶

    • 浏览器的Cookie策略

      cookie分为 Session Cookie临时cookie 和Third-party cookie 本地cookie ,IE,Safari默认拦截本地cookie的发送

    • P3P头的副作用 允许iframe,script等标签就不会拦截第三方cookie的发送

    • GET/POST的漏洞,php的$_REQUEST 和POST,创建隐形的iframe让用户发起POST请求

    • Flash CSRF (已经不能发送本地cookie)

    • CSRF Worm

  • CSRF防御

    • 验证码,强制让用户与应用进行 交互才能发起合法的网络请求
    • Referer Check 用于检查请求是否来自合法的源
    • Anti CSRF Token
      • CSRF能够成功的原因是攻击者可以猜到重要操作的所有参数
      • 增加Token在Session或者Cookie中,提交时,需要验证表单中的Token
      • Token使用原则(根据不可预测性原则):1.足够随机生成 2.可以考虑生成多个有效的Token解决多页面共存的问题 3.Token的保密性
      • 防止Token泄露:1.Token放在表单中 2.敏感操作由GET换为POST 3.以form表单或者AJAX的形式提交

点击劫持(Clickjacking)

  • 什么是点击劫持

    视觉上的欺骗手段。攻击者通过使用一个透明的、不可见的iframe覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe的位置,可以诱使用户恰好点击iframe页面的一些功能按钮。

  • Flash点击劫持

    在Flash游戏上覆盖一个iframe最终可以在用户不知情的情况下达到目的。

  • 图片覆盖攻击

    在可信的网站上,通过覆盖图片 XSIO 方式,让用户进入钓鱼网站或者利用用户完成某些操作。

  • 拖拽劫持与数据窃取

    浏览器拖拽事件,利用隐形的iframe来诱导用户完成需要的操作。

  • Clickjacking3.0触屏劫持

    手机OS系统浏览器中很多时候会隐藏地址栏,从而攻击者伪造出一个iframe来欺骗用户。

  • Clickjacking防御

    通过禁止跨域的iframe来防范。

    • frame busting 防止iframe的嵌套
    • X-Frame-Options (Http头)可以选择性决定是否加载或者是否加载不同源的iframe,属性值有DENY, SAMEORIGIN, ALLOW-FORM origin

HTML5安全

  • HTML5新标签

    • 新标签的XSS :
    • iframe的sandbox: iframe新属性sandbox能够将iframe标签加载的内容视作一个独立的源,禁止执行脚本,表单禁止提交,插件禁止被加载,指向其他浏览对象的链接也会被禁止
    • Link Types:noreferrer 浏览器请求该标签不再发送Referer,需要开发者手动添加
    • Canvas的妙用:使用Canvas在线破解验证码
  • 其他安全问题

    • Cross-Origin Resource Sharing:jsonp,iframe合法跨域,发起请求的时候必须带上一个Origin Header(判断请求是否来自一个合法的源),服务器返回一个HTTPHeader
    • postMessage——跨窗口传递:允许每一个window向其他窗口发送文本消息,从而实现跨窗口的消息传递,不受同源策略的影响。1.在接受窗口验证Domain甚至URL 2.对消息进行检查,防止XSS攻击
    • Web Storage: 受到同源策略影响。但是当储存有敏感信息时,也有可能成为被攻击的目标。