[笔记]白帽子讲web安全

作者:frank 发表日期:2016-07-15 19:47:11 更新日期:2016-07-15 19:47:11 分类:猿文色

摘要

白帽子讲web安全读书笔记。

正文

威胁分析

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

风险分析

  • 风险是和损失关联起来的

浏览器安全

  • 在浏览器中,script,img, iframe, link标签都可以跨域加载资源,而不受同源策略的限制。但是,通过src加载的资源,浏览器限制了Javascript的权限,使其不能读写返回的内容。

XSS跨站脚本攻击(Cross Site Script)

  • 黑客通过HTML注入篡改了网页,插入了恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种行为。发展到今天,是否跨站已经不再重要。
  • 反射性XSS,存储型XSS,DOM based XSS。
  • cookie劫持(设置httponly)。
  • 构造get或post请求(输入验证码)。
  • XSS钓鱼,伪造登录框获取密码。
  • 识别用户浏览器(鸭子模型检测浏览器),使用特定浏览器的漏洞或者插件漏洞进行攻击。
  • CSS history back,检测链接的style中的visited属性来查看那些链接是访问过的。
  • 获取用户的真实IP(借助第三方软件完成)。
  • XSS蠕虫。

XSS构造技巧:

  • 利用字符编码。
  • 绕过长度限制(使用location.hash,利用注释)。
  • 使用base标签劫持页面中的相对路径。
  • window.name(可以用来跨域)。

XSS防御

  • 设置Httponly(cookie劫持)。
  • 输入检查(过滤掉敏感字符)。
  • 输出检查(innerHtml等)。

跨站点请求伪造(Cross Site Request Forgery)

  • 浏览器的cookie策略:分为session cookie和第三方cookie(本地coolik),浏览器在img, iframe, script, link标签中禁止发送第三方cookie,但是可以发送session cookie,firefox默认允许发送第三方cookie。
  • HTTP头P3P允许跨域访问隐私数据,允许浏览器发送第三方cookie。
  • b.com中的iframe请求了a.com中的链接,此链接可以设置cookie,是否可以设置成功??
  • CSRF发生的本质原因是重要操作的所有参数都可以被攻击者猜测到。

CSRF的防御:

  • 验证码。
  • referer check(只能限制)。
  • Anti CSRF Token。

CSRF Token的使用原则:

  • 足够随机。
  • Token可以存在一个有效期,而不是每个请求都生成。
  • 尽量将Token放到表单中,将敏感操作改为POST,避免Token泄露。
  • 如果页面存在XSS漏洞,Token就会失效,XSRF(XSS + CSRF)。

点击劫持

视觉上的欺骗手段,攻击者使用一个不透明不可见的iframe覆盖在一个网页上,诱使用户在网页上操作。

  • iframe。
  • flash。
  • 图片覆盖攻击(XSIO: CROSS SITE IMG OVERLAYING)。
  • 拖拽劫持和数据窃取(拖拽可以在不同的窗口之间进行,不受同源策略的限制,iframe)。
  • 触屏劫持。

点击劫持防御:

  • frame busting(禁止ifame的嵌套)。
  • 使用HTTP头,X-Frame-Options。

HTML5的安全

  • 新增的video和audio可远程加载资源,用于XSS攻击。
  • iframe增加了sandbox属性。
  • link新增了noreferer属性。
  • canvas可以用来破解验证码。
  • CORS。
  • postMessage。
  • Web Storage。

认证与会话管理

  • 认证的目的是认出用户是谁,授权的目的是决定用户能做什么!!!认证是一个验证凭证的过程(单因素认证,多因素认证)。
  • 密码必须以不可逆的加密算法或者是单向散列函数算法,加密后存储在数据库中。
  • 目前黑客们广泛使用的一种破解MD5后的密码的方法是彩虹表(服务端增加一个Salt)。
  • 单点登录系统(SSO),业务需要登录的时候跳转到SSO,SSO使用用户名和密码登录成功后(带着authcode)跳转后业务的认证接口,业务认证接口通过(authcode)在SSO拿到token。

权限控制(访问控制)

主体需要对客体实施某种操作,而系统对这种操作的限制就是权限控制。最小权限原则!!!

  • 垂直权限管理(基于角色的访问控制RBAC,role based access control),用户~角色~权限。
  • 水平权限管理(基于数据的访问控制)。
  • OAuth认证:在不提供用户名和密码的情况下,授权第三方应用访问Web资源的安全协议。

加密算法与随机数

  • 加密算法:分组加密(分组数据加密,DES, 3-DES, BLOWFISH, IDEA, AES)和流加密(异或进行加密,RC4, ORYX, SEAL)。
  • 流密码加密:最常见的错误是使用同一个密钥进行多次加解密 E(A) xor E(B) = A xor B(Reused key attack)。知道一个明文很容易破解出其他明文,最好加一个随机向量,使得每次加密的密钥都不相同。另一种攻击方式是Bit-flipping Attack,A xor E(A) xor B = E(B) , 通过猜测明文来提交密文的方式,解决方法是密文中增加带MAC(Message Authentication Code)。
  • WEP破解。
  • 分组加密算法:常见的加密模式有ECB, CBC, CFB, OFB, CTR机,如果加密模式被攻击,即使密钥再长都可能不再安全。ECB,电码簿模式,每个分组加密,而且相互独立。CBC,链式加密模式,前一个分组的密文会作为下个分组的密钥。当加密的明文多于一个分组长度时,避免使用ECB。
  • Padding Oracle Attack:分组加密算法中,如果最后一个分组没有达到Block的大小,则需要填充一些字节,称之为padding。攻击的关键在于攻击者能够获知解密的结果是否符合padding。
  • 密码学的基本原则:密码系统的安全性应该依赖于密钥的复杂性,而不是算法的保密性。

拒绝服务攻击DDOS(Distributed Denial of Service)

利用合理的请求造成资源过载,导致服务不可用。

  • SYNC flood。网络层,发生在TCP三次握手的阶段。
  • 应用层DDOS。针对每个客户端做一个请求频率的限制。使用memcache或者redis。使用负载均衡。使用验证码(全自动区分计算机和人类的图灵测试)。让客户端解析一段代码并给出正确的运行结果。 拒绝服务攻击本质上是对有限资源的无限滥用。
  • ReDOS正则导致的拒绝服务攻击。

互联网公司的安全

  • 好的安全方案:不但要解决安全问题,而且要有良好的用户体验和优秀的性能。
  • 只有一些安全要求非常高的账户,或者系统本身就极其敏感的地方,才使用双因素认证方案。
  • 密码复杂度安全要求本质:如何对抗暴力破解,如何防止密码中包含个人信息。
  • 威胁分析是设计安全方案的基础。培养用户的安全习惯,将用户往最安全的行为上引导。
  • 密码取回流程:修改密码时一定要提供旧密码。取回密码:安全问题,安全邮箱,安全手机,当前三种都不太可靠时,使用用户在网站留下过的一些私有信息,与用户逐一核对,以验证用户。