SlideShare a Scribd company logo
1 of 49
Download to read offline
HTTP协议相关的若干安
全问题
LI Daobing <lidaobing@gmail.com>
https://github.com/lidaobing
Tuesday, 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_243
Tuesday, May 14, 13
2002年2月?日
http://en.wikipedia.org/wiki/SQL_injection
Tuesday, May 14, 13
问题
你现在在过桥的时候会担心这个问题么?
(因为桥的建筑设计师都是有证的?)
你现在在坐飞机的时候会担心这个问题么?
(因为飞机的设计师都是有证的?)
Tuesday, May 14, 13
问题
你上网站的时候担心你的密码/身份安全么?
我还担心,原因
这个漏洞出现的时间还不够长?
你懂的,开发网站的都是无证程序员
普遍不在意安全问题
Tuesday, May 14, 13
HTTP协议相关的若干安
全问题
什么是 HTTP 协议
GET 型 CSRF
POST 型 CSRF
串号问题
SSL
Same Origin Policy 与 跨域通信
HTTP Headers
Tuesday, May 14, 13
不讲什么
DDoS 和 DoS: 前者耍流氓, 后者耍无赖
软件漏洞: 紧盯 CVE 和发行版的安全通告
XSS: 其实这个才是大头
SQL Inject: 这都2013年了, 你要反省
HTTP Cache: 细节太多,还算安全
社会工程学: 确实不懂
Tuesday, May 14, 13
访问一个网页
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.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
telnet 模拟 HTTP 请求
Tuesday, May 14, 13
CSRF 是什么?
Cross-site request forgery (跨站请求伪造)
用户期望一个行为(比如转账,投票,关闭
bug, ...)是在对应的网站上发生,但在访问一
个不相关的网站时却触发了该行为
比如我在逛煎蛋,看看无聊图,结果触发了我
在 17startup 上给某个网站投了5星
Tuesday, May 14, 13
GET 型 CSRF
Tuesday, May 14, 13
GET 型 CSRF
17startup 的投票请求: http://17startup.com/
startup/vote/9439/5
攻击手法1: 直接发送url给受害人,如果受害
人已经登录 17startup 并且点击了 url, 就能
帮你完成投票
Tuesday, May 14, 13
伪装成图片
http://is.gd/eGsWc7.jpg
然后发到哪些支持外链的论坛, 受害人如果已经
登录过 17startup, 那么访问这个论坛时就可以
帮你投票
更好的伪装: 把攻击图片放在几张正常图片中间
Tuesday, May 14, 13
防御 GET 型 CSRF
凡是需要更改服务器状态的请求,不得使用
GET, 可以使用 POST, PUT, DELETE
Tuesday, May 14, 13
技术时间: Request Method
安全 幂等
HEAD √ √
GET √ √
POST × ×
PUT × √
DELETE × √
PATCH × ×
TRACE, OPTIONS, CONNECT (TRACK, DEBUG)
Tuesday, May 14, 13
POST 型 CSRF
Tuesday, May 14, 13
POST 型的 CSRF
Tuesday, 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
CSRF 攻击。
Tuesday, May 14, 13
串号问题
这问题上我犯过错误
EverBox 项目内测时出过串号问题
Tuesday, May 14, 13
串号原理
sinatra 框架缺省使用 rack-session
rack-session 使用 Kernel.rand 来生成 session
id
memcache session storage 没有做 session id
是否存在的检验
unicorn 使用 fork 来生成多个进程(减少启动时
间, 减少内存占用), 但在 fork 后没有重置
Kernel.rand
Tuesday, May 14, 13
技术时间: Session 保存问题
优点 缺点
Cookie
Session
降低服务端压力和复杂性
数据泄露, 大小限制, 浪费流
量,无法强制登出
Memcache
Session
不依赖于数据库
用户修改密码后登出用户麻
烦,清理 cache 时会导致用
户登出
Database
Session
功能强大 消耗数据库资源
Tuesday, May 14, 13
Session 劫持防御
Session Id 永远不要出现在 HTML 中
Session Id 的 Cookie 永远要 HttpOnly
记录浏览器很少变化的 HTTP 头
User Agent
Accept Encoding
Accept Language
IP(?)
Tuesday, May 14, 13
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 1.2(RFC 5246, 6176), 2008年8月
Tuesday, May 14, 13
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
SSL 2.0 存在的问题
1. 长度扩展攻击(Length extension attack)
MAC = MD5(secret + content)
MAC2 = MD5(secret + content+
attack_suffix)
Tuesday, May 14, 13
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 连接(且客户端不
会意识到被攻击)
Tuesday, May 14, 13
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, May 14, 13
CRIME 攻击
假定你的 session id 为 a1b2c3d4
那么如果请求参数含有 a1b 或者 1b2 或者
b2c 时,整个请求的压缩率可以提高(SSL 或
者 SPDY 会启用压缩)
用 sniffer 监听每个请求的长度,找到压缩
率偏高的包,在根据片段重新拼凑出 cookie
Tuesday, May 14, 13
Same Origin Policy 与 跨
域通信
Same Origin Policy 对不同域限制:
frame 之间不能互相访问
发起的 GET 请求无法获取内容
无法发起 POST 型 AJAX 请求(但可以直接
POST FORM)
无法使用字体/Flash/Java Applet
。。。
Tuesday, May 14, 13
解决方案1
JSONP
只能是 GET 请求
无法上传文件
破坏语义/CSRF攻击
长度限制
只能使用 JSON 通信
Tuesday, May 14, 13
解决方案2
CORS (Cross-origin resource sharing)
Access-Control-Allow-Origin: *
使用 AJAX 上传文件 (比如 S3 就支持)
允许跨站引用 font, swf(?)
小型应用
建议使用独立域名,避免被攻击
Tuesday, May 14, 13
解决方案3
Cross-document messaging
window.postMessage(‘hello’, ‘http://
example.com`)
IE支持不太好: IE8 以前不支持, IE8 部分支
持(只支持iframe), IE10 全部支持
Tuesday, May 14, 13
HTTP Headers
Cookie
HttpOnly: 避免 session id 被窃
Secure: 避免 session id 被窃听
Strict-Transport-Security: max-age=16070400;
includeSubDomains
Clickjacking
X-Frame-Options: deny
X-Frame-Options: sameorigin
Tuesday, May 14, 13
HTTP Headers
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
P3P: ...
Tuesday, May 14, 13
Sponsored by
Tuesday, May 14, 13
Q & A
Thanks for your attention
Tuesday, May 14, 13
Tuesday, May 14, 13
Tuesday, May 14, 13
Tuesday, May 14, 13

More Related Content

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

議題二:Web應用程式安全防護
議題二:Web應用程式安全防護議題二:Web應用程式安全防護
議題二:Web應用程式安全防護Nicolas su
 
网络安全经验分享
网络安全经验分享网络安全经验分享
网络安全经验分享zola zhou
 
互联网公司web安全挑战与防护思路浅谈
互联网公司web安全挑战与防护思路浅谈 互联网公司web安全挑战与防护思路浅谈
互联网公司web安全挑战与防护思路浅谈 zhiyanhui
 
用戶端攻擊與防禦
用戶端攻擊與防禦用戶端攻擊與防禦
用戶端攻擊與防禦Taien Wang
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型裕波 周
 
雲端入侵 – 郵件攻擊與密碼竊取
雲端入侵 – 郵件攻擊與密碼竊取雲端入侵 – 郵件攻擊與密碼竊取
雲端入侵 – 郵件攻擊與密碼竊取OFMKT
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础xki
 
Web安全解决方案V1.0
Web安全解决方案V1.0Web安全解决方案V1.0
Web安全解决方案V1.0xuanliang
 
[xKungFoo2012]Web Service Hack
[xKungFoo2012]Web Service Hack[xKungFoo2012]Web Service Hack
[xKungFoo2012]Web Service Hackpnig0s pnig0s
 
安博士Asec 2010年1月安全报告
安博士Asec 2010年1月安全报告安博士Asec 2010年1月安全报告
安博士Asec 2010年1月安全报告ahnlabchina
 
安博士Asec 2010年1月安全报告
安博士Asec 2010年1月安全报告安博士Asec 2010年1月安全报告
安博士Asec 2010年1月安全报告ahnlabchina
 
OAuth: How And Why?
OAuth: How And Why?OAuth: How And Why?
OAuth: How And Why?LI Daobing
 
雲端入侵:郵件攻擊與密碼竊取
雲端入侵:郵件攻擊與密碼竊取雲端入侵:郵件攻擊與密碼竊取
雲端入侵:郵件攻擊與密碼竊取openblue
 
安博士Asec 2010年9月安全报告
安博士Asec 2010年9月安全报告安博士Asec 2010年9月安全报告
安博士Asec 2010年9月安全报告ahnlabchina
 
twMVC#03 | ASP.NET MVC內建驗證活用與擴充
twMVC#03 | ASP.NET MVC內建驗證活用與擴充twMVC#03 | ASP.NET MVC內建驗證活用與擴充
twMVC#03 | ASP.NET MVC內建驗證活用與擴充twMVC
 
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3twMVC
 
Hiiir 資安講座 III 用戶端攻擊與防禦
Hiiir 資安講座 III 用戶端攻擊與防禦Hiiir 資安講座 III 用戶端攻擊與防禦
Hiiir 資安講座 III 用戶端攻擊與防禦Hiiir Lab
 
安全漏洞概念及分类
安全漏洞概念及分类安全漏洞概念及分类
安全漏洞概念及分类komunling
 

Similar to HTTP协议相关的若干安全问题 (19)

議題二:Web應用程式安全防護
議題二:Web應用程式安全防護議題二:Web應用程式安全防護
議題二:Web應用程式安全防護
 
网络安全经验分享
网络安全经验分享网络安全经验分享
网络安全经验分享
 
互联网公司web安全挑战与防护思路浅谈
互联网公司web安全挑战与防护思路浅谈 互联网公司web安全挑战与防护思路浅谈
互联网公司web安全挑战与防护思路浅谈
 
用戶端攻擊與防禦
用戶端攻擊與防禦用戶端攻擊與防禦
用戶端攻擊與防禦
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
雲端入侵 – 郵件攻擊與密碼竊取
雲端入侵 – 郵件攻擊與密碼竊取雲端入侵 – 郵件攻擊與密碼竊取
雲端入侵 – 郵件攻擊與密碼竊取
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础
 
Web安全解决方案V1.0
Web安全解决方案V1.0Web安全解决方案V1.0
Web安全解决方案V1.0
 
[xKungFoo2012]Web Service Hack
[xKungFoo2012]Web Service Hack[xKungFoo2012]Web Service Hack
[xKungFoo2012]Web Service Hack
 
安博士Asec 2010年1月安全报告
安博士Asec 2010年1月安全报告安博士Asec 2010年1月安全报告
安博士Asec 2010年1月安全报告
 
安博士Asec 2010年1月安全报告
安博士Asec 2010年1月安全报告安博士Asec 2010年1月安全报告
安博士Asec 2010年1月安全报告
 
OAuth: How And Why?
OAuth: How And Why?OAuth: How And Why?
OAuth: How And Why?
 
雲端入侵:郵件攻擊與密碼竊取
雲端入侵:郵件攻擊與密碼竊取雲端入侵:郵件攻擊與密碼竊取
雲端入侵:郵件攻擊與密碼竊取
 
安博士Asec 2010年9月安全报告
安博士Asec 2010年9月安全报告安博士Asec 2010年9月安全报告
安博士Asec 2010年9月安全报告
 
twMVC#03 | ASP.NET MVC內建驗證活用與擴充
twMVC#03 | ASP.NET MVC內建驗證活用與擴充twMVC#03 | ASP.NET MVC內建驗證活用與擴充
twMVC#03 | ASP.NET MVC內建驗證活用與擴充
 
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
ASP.NET MVC 內建驗證擴充與活用技巧 -twMVC#3
 
Session1.pdf
Session1.pdfSession1.pdf
Session1.pdf
 
Hiiir 資安講座 III 用戶端攻擊與防禦
Hiiir 資安講座 III 用戶端攻擊與防禦Hiiir 資安講座 III 用戶端攻擊與防禦
Hiiir 資安講座 III 用戶端攻擊與防禦
 
安全漏洞概念及分类
安全漏洞概念及分类安全漏洞概念及分类
安全漏洞概念及分类
 

More from LI Daobing

好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的LI Daobing
 
云存储: 三分开发,七分运维
云存储: 三分开发,七分运维云存储: 三分开发,七分运维
云存储: 三分开发,七分运维LI Daobing
 
分布式存储的元数据设计
分布式存储的元数据设计分布式存储的元数据设计
分布式存储的元数据设计LI Daobing
 
高可用和可伸缩架构
高可用和可伸缩架构高可用和可伸缩架构
高可用和可伸缩架构LI Daobing
 
短视频和云存储
短视频和云存储短视频和云存储
短视频和云存储LI Daobing
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜LI Daobing
 
重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务LI Daobing
 
从开发到上线-实战持续交付
从开发到上线-实战持续交付从开发到上线-实战持续交付
从开发到上线-实战持续交付LI Daobing
 
Debian & Packaging
Debian & PackagingDebian & Packaging
Debian & PackagingLI Daobing
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash ShellLI Daobing
 
glusterfs 文件系统
glusterfs 文件系统glusterfs 文件系统
glusterfs 文件系统LI Daobing
 

More from LI Daobing (12)

好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的好东西是聪明人下苦功夫做出来的
好东西是聪明人下苦功夫做出来的
 
云存储: 三分开发,七分运维
云存储: 三分开发,七分运维云存储: 三分开发,七分运维
云存储: 三分开发,七分运维
 
分布式存储的元数据设计
分布式存储的元数据设计分布式存储的元数据设计
分布式存储的元数据设计
 
高可用和可伸缩架构
高可用和可伸缩架构高可用和可伸缩架构
高可用和可伸缩架构
 
短视频和云存储
短视频和云存储短视频和云存储
短视频和云存储
 
出了问题不要靠猜
出了问题不要靠猜出了问题不要靠猜
出了问题不要靠猜
 
重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务
 
从开发到上线-实战持续交付
从开发到上线-实战持续交付从开发到上线-实战持续交付
从开发到上线-实战持续交付
 
Debian & Packaging
Debian & PackagingDebian & Packaging
Debian & Packaging
 
Git 简介
Git 简介Git 简介
Git 简介
 
如何学习Bash Shell
如何学习Bash Shell如何学习Bash Shell
如何学习Bash Shell
 
glusterfs 文件系统
glusterfs 文件系统glusterfs 文件系统
glusterfs 文件系统
 

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