HTTP协议相关的若干安全问题LI Daobing <lidaobing@gmail.com>https://github.com/lidaobingTuesday, May 14, 13
1940年11月7日http://en.wikipedia.org/wiki/Tacoma_Narrows_Bridge_(1940)Tuesday, May 14, 13
1988年4月28日http://en.wikipedia.org/wiki/Aloha_Airlines_Flight_243Tuesday, May 14, 13
2002年2月?日http://en.wikipedia.org/wiki/SQL_injectionTuesday, May 14, 13
问题你现在在过桥的时候会担心这个问题么?(因为桥的建筑设计师都是有证的?)你现在在坐飞机的时候会担心这个问题么?(因为飞机的设计师都是有证的?)Tuesday, May 14, 13
问题你上网站的时候担心你的密码/身份安全么?我还担心,原因这个漏洞出现的时间还不够长?你懂的,开发网站的都是无证程序员普遍不在意安全问题Tuesday, May 14, 13
HTTP协议相关的若干安全问题什么是 HTTP 协议GET 型 CSRFPOST 型 CSRF串号问题SSLSame Origin Policy 与 跨域通信HTTP HeadersTuesday, May 14, 13
不讲什么DDoS 和 DoS: 前者耍流氓, 后者耍无赖软件漏洞: 紧盯 CVE 和发行版的安全通告XSS: 其实这个才是大头SQL Inject: 这都2013年了, 你要反省HTTP Cache: 细节太多,还算安全社会工程学: 确实不懂T...
访问一个网页Tuesday, May 14, 13
用HTTP协议做什么?下载网页下载图片下载CSS下载JS下载字体AJAX下载 swf, ...Tuesday, May 14, 13
HTTP 协议范例$ curl -v http://www.google.com.hk/> GET / HTTP/1.1> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7....
telnet 模拟 HTTP 请求Tuesday, May 14, 13
CSRF 是什么?Cross-site request forgery (跨站请求伪造)用户期望一个行为(比如转账,投票,关闭bug, ...)是在对应的网站上发生,但在访问一个不相关的网站时却触发了该行为比如我在逛煎蛋,看看无聊图,结果触发了...
GET 型 CSRFTuesday, May 14, 13
GET 型 CSRF17startup 的投票请求: http://17startup.com/startup/vote/9439/5攻击手法1: 直接发送url给受害人,如果受害人已经登录 17startup 并且点击了 url, 就能帮你完...
伪装成图片http://is.gd/eGsWc7.jpg然后发到哪些支持外链的论坛, 受害人如果已经登录过 17startup, 那么访问这个论坛时就可以帮你投票更好的伪装: 把攻击图片放在几张正常图片中间Tuesday, May 14, 13
防御 GET 型 CSRF凡是需要更改服务器状态的请求,不得使用GET, 可以使用 POST, PUT, DELETETuesday, May 14, 13
技术时间: Request Method安全 幂等HEAD √ √GET √ √POST × ×PUT × √DELETE × √PATCH × ×TRACE, OPTIONS, CONNECT (TRACK, DEBUG)Tuesday, M...
POST 型 CSRFTuesday, May 14, 13
POST 型的 CSRFTuesday, May 14, 13
具体如何操作在自己的页面设置一个iframe, iframe 里边有一个 form, 指向被攻击站点,并且用 JS 触发自动提交 (或者诱导受害人提交)引导受害人访问你的页面Tuesday, May 14, 13
注意事项iframe 完全可以是隐形的,所以受害人可能完全没有察觉到已经受到攻击了验证码对这种攻击防御效果很差,因为我可以把验证码抓过来诱导用户填写。Tuesday, May 14, 13
如何防御form 里边加CSRF TOKEN(搜索你的框架名称+CSRF就能找到大量的文档)使用不含 form 的 AJAX 时, 从 HTML 中提取CSRF TOKEN 加入你的参数。复查网站的API: 你的 API 可能会被用于 POST...
串号问题这问题上我犯过错误EverBox 项目内测时出过串号问题Tuesday, May 14, 13
串号原理sinatra 框架缺省使用 rack-sessionrack-session 使用 Kernel.rand 来生成 sessionidmemcache session storage 没有做 session id是否存在的检验unic...
技术时间: Session 保存问题优点 缺点CookieSession降低服务端压力和复杂性数据泄露, 大小限制, 浪费流量,无法强制登出MemcacheSession不依赖于数据库用户修改密码后登出用户麻烦,清理 cache 时会导致用户登...
Session 劫持防御Session Id 永远不要出现在 HTML 中Session Id 的 Cookie 永远要 HttpOnly记录浏览器很少变化的 HTTP 头User AgentAccept EncodingAccept Lang...
SSL历史与现状SSL 2.0 的安全漏洞其他攻击方式SSL 3.0 / TLS 1.0 的安全漏洞Tuesday, May 14, 13
SSL的历史SSL 1.0, Netscape 开发,未公开SSL 2.0, 1995年2月SSL 3.0, 1996年TLS 1.0(RFC2246) ≈ SSL 3.0, 1999年TLS 1.1(RFC 4346), 2006年4月TLS...
SSL 支持情况[禁用] SSL 2.0, 1995年2月[OK] SSL 3.0, 1996年[OK] TLS 1.0(RFC2246) ≈ SSL 3.0, 1999年[不支持] TLS 1.1(RFC 4346), 2006年4月[不支持...
SSL 2.0 存在的问题1. 长度扩展攻击(Length extension attack)MAC = MD5(secret + content)MAC2 = MD5(secret + content+attack_suffix)Tuesday...
SSL 2.0 存在的问题1. 长度扩展攻击(Length extension attack)2. 安全降级攻击使用明文协商通信模式,中间可以篡改通信降低加密级别Tuesday, May 14, 13
SSL 2.0 存在的问题1. 长度扩展攻击(Length extension attack)2. 安全降级攻击3. TCP 关闭攻击SSL 使用 TCP FIN 来结束,中间人可以通过发送 TCP FIN 来干扰 SSL 连接(且客户端不会意...
SSL 的其他安全问题证书问题不要使用自签名的证书不要让用户安装根证书开通公共邮箱的功能的域名上最好不要申请证书 (sohu 邮箱中过招)如何保证证书安全?Tuesday, May 14, 13
SSLStrip大部分 https 请求都来自 http 的跳转恶意中间人可以拦截请求,导致中间人与浏览器的通信为明文Tuesday, May 14, 13
SSLStrip 的防御HTTP Header: Strict-Transport-Security预置需要 https 的网站列表: chrome 支持Tuesday, May 14, 13
SSL 3.0 / TLS 1.0 的风险BEAST 攻击: 利用 CBC(Cipher-block chaining)的一个缺陷CRIME 攻击: 构造碰撞并观察压缩率RC4 攻击: 长时间使用同一个 key 导致被攻击Tuesday, Ma...
CRIME 攻击假定你的 session id 为 a1b2c3d4那么如果请求参数含有 a1b 或者 1b2 或者b2c 时,整个请求的压缩率可以提高(SSL 或者 SPDY 会启用压缩)用 sniffer 监听每个请求的长度,找到压缩率偏高...
Same Origin Policy 与 跨域通信Same Origin Policy 对不同域限制:frame 之间不能互相访问发起的 GET 请求无法获取内容无法发起 POST 型 AJAX 请求(但可以直接POST FORM)无法使用字体...
解决方案1JSONP只能是 GET 请求无法上传文件破坏语义/CSRF攻击长度限制只能使用 JSON 通信Tuesday, May 14, 13
解决方案2CORS (Cross-origin resource sharing)Access-Control-Allow-Origin: *使用 AJAX 上传文件 (比如 S3 就支持)允许跨站引用 font, swf(?)小型应用建议使用...
解决方案3Cross-document messagingwindow.postMessage(‘hello’, ‘http://example.com`)IE支持不太好: IE8 以前不支持, IE8 部分支持(只支持iframe), IE1...
HTTP HeadersCookieHttpOnly: 避免 session id 被窃Secure: 避免 session id 被窃听Strict-Transport-Security: max-age=16070400;includeSu...
HTTP HeadersX-Content-Type-Options: nosniffX-XSS-Protection: 1; mode=blockP3P: ...Tuesday, May 14, 13
Sponsored byTuesday, May 14, 13
Q & AThanks for your attentionTuesday, May 14, 13
Tuesday, May 14, 13
Tuesday, May 14, 13
Tuesday, May 14, 13
Upcoming SlideShare
Loading in …5
×

HTTP协议相关的若干安全问题

2,469 views
2,289 views

Published on

Published in: Technology
2 Comments
11 Likes
Statistics
Notes
No Downloads
Views
Total views
2,469
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
62
Comments
2
Likes
11
Embeds 0
No embeds

No notes for slide

HTTP协议相关的若干安全问题

  1. 1. HTTP协议相关的若干安全问题LI Daobing <lidaobing@gmail.com>https://github.com/lidaobingTuesday, May 14, 13
  2. 2. 1940年11月7日http://en.wikipedia.org/wiki/Tacoma_Narrows_Bridge_(1940)Tuesday, May 14, 13
  3. 3. 1988年4月28日http://en.wikipedia.org/wiki/Aloha_Airlines_Flight_243Tuesday, May 14, 13
  4. 4. 2002年2月?日http://en.wikipedia.org/wiki/SQL_injectionTuesday, May 14, 13
  5. 5. 问题你现在在过桥的时候会担心这个问题么?(因为桥的建筑设计师都是有证的?)你现在在坐飞机的时候会担心这个问题么?(因为飞机的设计师都是有证的?)Tuesday, May 14, 13
  6. 6. 问题你上网站的时候担心你的密码/身份安全么?我还担心,原因这个漏洞出现的时间还不够长?你懂的,开发网站的都是无证程序员普遍不在意安全问题Tuesday, May 14, 13
  7. 7. HTTP协议相关的若干安全问题什么是 HTTP 协议GET 型 CSRFPOST 型 CSRF串号问题SSLSame Origin Policy 与 跨域通信HTTP HeadersTuesday, May 14, 13
  8. 8. 不讲什么DDoS 和 DoS: 前者耍流氓, 后者耍无赖软件漏洞: 紧盯 CVE 和发行版的安全通告XSS: 其实这个才是大头SQL Inject: 这都2013年了, 你要反省HTTP Cache: 细节太多,还算安全社会工程学: 确实不懂Tuesday, May 14, 13
  9. 9. 访问一个网页Tuesday, May 14, 13
  10. 10. 用HTTP协议做什么?下载网页下载图片下载CSS下载JS下载字体AJAX下载 swf, ...Tuesday, May 14, 13
  11. 11. HTTP 协议范例$ curl -v http://www.google.com.hk/> GET / HTTP/1.1> User-Agent: curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 OpenSSL/0.9.8r zlib/1.2.5> Host: www.google.com.hk> Accept: */*>< HTTP/1.1 200 OK< Date: Wed, 24 Apr 2013 13:15:02 GMT< Expires: -1< Cache-Control: private, max-age=0< Content-Type: text/html; charset=Big5< Set-Cookie: PREF=ID=5dee4c0efb2fd080:FF=0:NW=1:TM=136680[snip]< Set-Cookie: NID=67=DyKygko82Qz6Xxjed6pZEZvekjy6YFHRAEh[snip]< Server: gws< X-XSS-Protection: 1; mode=block< X-Frame-Options: SAMEORIGIN< Transfer-Encoding: chunked<<!doctype html><html><head>...</head><body>...</body></html>Tuesday, May 14, 13
  12. 12. telnet 模拟 HTTP 请求Tuesday, May 14, 13
  13. 13. CSRF 是什么?Cross-site request forgery (跨站请求伪造)用户期望一个行为(比如转账,投票,关闭bug, ...)是在对应的网站上发生,但在访问一个不相关的网站时却触发了该行为比如我在逛煎蛋,看看无聊图,结果触发了我在 17startup 上给某个网站投了5星Tuesday, May 14, 13
  14. 14. GET 型 CSRFTuesday, May 14, 13
  15. 15. GET 型 CSRF17startup 的投票请求: http://17startup.com/startup/vote/9439/5攻击手法1: 直接发送url给受害人,如果受害人已经登录 17startup 并且点击了 url, 就能帮你完成投票Tuesday, May 14, 13
  16. 16. 伪装成图片http://is.gd/eGsWc7.jpg然后发到哪些支持外链的论坛, 受害人如果已经登录过 17startup, 那么访问这个论坛时就可以帮你投票更好的伪装: 把攻击图片放在几张正常图片中间Tuesday, May 14, 13
  17. 17. 防御 GET 型 CSRF凡是需要更改服务器状态的请求,不得使用GET, 可以使用 POST, PUT, DELETETuesday, May 14, 13
  18. 18. 技术时间: Request Method安全 幂等HEAD √ √GET √ √POST × ×PUT × √DELETE × √PATCH × ×TRACE, OPTIONS, CONNECT (TRACK, DEBUG)Tuesday, May 14, 13
  19. 19. POST 型 CSRFTuesday, May 14, 13
  20. 20. POST 型的 CSRFTuesday, May 14, 13
  21. 21. 具体如何操作在自己的页面设置一个iframe, iframe 里边有一个 form, 指向被攻击站点,并且用 JS 触发自动提交 (或者诱导受害人提交)引导受害人访问你的页面Tuesday, May 14, 13
  22. 22. 注意事项iframe 完全可以是隐形的,所以受害人可能完全没有察觉到已经受到攻击了验证码对这种攻击防御效果很差,因为我可以把验证码抓过来诱导用户填写。Tuesday, May 14, 13
  23. 23. 如何防御form 里边加CSRF TOKEN(搜索你的框架名称+CSRF就能找到大量的文档)使用不含 form 的 AJAX 时, 从 HTML 中提取CSRF TOKEN 加入你的参数。复查网站的API: 你的 API 可能会被用于 POSTCSRF 攻击。Tuesday, May 14, 13
  24. 24. 串号问题这问题上我犯过错误EverBox 项目内测时出过串号问题Tuesday, May 14, 13
  25. 25. 串号原理sinatra 框架缺省使用 rack-sessionrack-session 使用 Kernel.rand 来生成 sessionidmemcache session storage 没有做 session id是否存在的检验unicorn 使用 fork 来生成多个进程(减少启动时间, 减少内存占用), 但在 fork 后没有重置Kernel.randTuesday, May 14, 13
  26. 26. 技术时间: Session 保存问题优点 缺点CookieSession降低服务端压力和复杂性数据泄露, 大小限制, 浪费流量,无法强制登出MemcacheSession不依赖于数据库用户修改密码后登出用户麻烦,清理 cache 时会导致用户登出DatabaseSession功能强大 消耗数据库资源Tuesday, May 14, 13
  27. 27. Session 劫持防御Session Id 永远不要出现在 HTML 中Session Id 的 Cookie 永远要 HttpOnly记录浏览器很少变化的 HTTP 头User AgentAccept EncodingAccept LanguageIP(?)Tuesday, May 14, 13
  28. 28. SSL历史与现状SSL 2.0 的安全漏洞其他攻击方式SSL 3.0 / TLS 1.0 的安全漏洞Tuesday, May 14, 13
  29. 29. SSL的历史SSL 1.0, Netscape 开发,未公开SSL 2.0, 1995年2月SSL 3.0, 1996年TLS 1.0(RFC2246) ≈ SSL 3.0, 1999年TLS 1.1(RFC 4346), 2006年4月TLS 1.2(RFC 5246, 6176), 2008年8月Tuesday, May 14, 13
  30. 30. SSL 支持情况[禁用] SSL 2.0, 1995年2月[OK] SSL 3.0, 1996年[OK] TLS 1.0(RFC2246) ≈ SSL 3.0, 1999年[不支持] TLS 1.1(RFC 4346), 2006年4月[不支持] TLS 1.2(RFC 5246, 6176), 2008年8月Tuesday, May 14, 13
  31. 31. SSL 2.0 存在的问题1. 长度扩展攻击(Length extension attack)MAC = MD5(secret + content)MAC2 = MD5(secret + content+attack_suffix)Tuesday, May 14, 13
  32. 32. SSL 2.0 存在的问题1. 长度扩展攻击(Length extension attack)2. 安全降级攻击使用明文协商通信模式,中间可以篡改通信降低加密级别Tuesday, May 14, 13
  33. 33. SSL 2.0 存在的问题1. 长度扩展攻击(Length extension attack)2. 安全降级攻击3. TCP 关闭攻击SSL 使用 TCP FIN 来结束,中间人可以通过发送 TCP FIN 来干扰 SSL 连接(且客户端不会意识到被攻击)Tuesday, May 14, 13
  34. 34. SSL 的其他安全问题证书问题不要使用自签名的证书不要让用户安装根证书开通公共邮箱的功能的域名上最好不要申请证书 (sohu 邮箱中过招)如何保证证书安全?Tuesday, May 14, 13
  35. 35. SSLStrip大部分 https 请求都来自 http 的跳转恶意中间人可以拦截请求,导致中间人与浏览器的通信为明文Tuesday, May 14, 13
  36. 36. SSLStrip 的防御HTTP Header: Strict-Transport-Security预置需要 https 的网站列表: chrome 支持Tuesday, May 14, 13
  37. 37. SSL 3.0 / TLS 1.0 的风险BEAST 攻击: 利用 CBC(Cipher-block chaining)的一个缺陷CRIME 攻击: 构造碰撞并观察压缩率RC4 攻击: 长时间使用同一个 key 导致被攻击Tuesday, May 14, 13
  38. 38. CRIME 攻击假定你的 session id 为 a1b2c3d4那么如果请求参数含有 a1b 或者 1b2 或者b2c 时,整个请求的压缩率可以提高(SSL 或者 SPDY 会启用压缩)用 sniffer 监听每个请求的长度,找到压缩率偏高的包,在根据片段重新拼凑出 cookieTuesday, May 14, 13
  39. 39. Same Origin Policy 与 跨域通信Same Origin Policy 对不同域限制:frame 之间不能互相访问发起的 GET 请求无法获取内容无法发起 POST 型 AJAX 请求(但可以直接POST FORM)无法使用字体/Flash/Java Applet。。。Tuesday, May 14, 13
  40. 40. 解决方案1JSONP只能是 GET 请求无法上传文件破坏语义/CSRF攻击长度限制只能使用 JSON 通信Tuesday, May 14, 13
  41. 41. 解决方案2CORS (Cross-origin resource sharing)Access-Control-Allow-Origin: *使用 AJAX 上传文件 (比如 S3 就支持)允许跨站引用 font, swf(?)小型应用建议使用独立域名,避免被攻击Tuesday, May 14, 13
  42. 42. 解决方案3Cross-document messagingwindow.postMessage(‘hello’, ‘http://example.com`)IE支持不太好: IE8 以前不支持, IE8 部分支持(只支持iframe), IE10 全部支持Tuesday, May 14, 13
  43. 43. HTTP HeadersCookieHttpOnly: 避免 session id 被窃Secure: 避免 session id 被窃听Strict-Transport-Security: max-age=16070400;includeSubDomainsClickjackingX-Frame-Options: denyX-Frame-Options: sameoriginTuesday, May 14, 13
  44. 44. HTTP HeadersX-Content-Type-Options: nosniffX-XSS-Protection: 1; mode=blockP3P: ...Tuesday, May 14, 13
  45. 45. Sponsored byTuesday, May 14, 13
  46. 46. Q & AThanks for your attentionTuesday, May 14, 13
  47. 47. Tuesday, May 14, 13
  48. 48. Tuesday, May 14, 13
  49. 49. Tuesday, May 14, 13

×