Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Avatar for LI Daobing LI Daobing
August 09, 2013

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

Avatar for LI Daobing

LI Daobing

August 09, 2013
Tweet

More Decks by LI Daobing

Other Decks in Programming

Transcript

  1. 问题 㟬 现 ࡏࡏ 过桥 త 时 ީձ୲৺ 这 ࿽

    问题 㜮ʁ ʢҼ 为桥 తݐஜ 设计师 ౎ੋ༗ 证 తʁʣ 㟬 现 ࡏࡏ࠱ 飞 صత 时 ީձ୲৺ 这 ࿽ 问题 㜮ʁ ʢҼ 为飞 صత 设计师 ౎ੋ༗ 证 తʁʣ Friday, August 9, 13
  2. 问题 㟬্᠓᜾త 时 ީ୲৺㟬తີ 码 /਎㟨҆શ㜮ʁ զ 还 ୲৺ɼݪҼ 这

    ࿽࿙ಎग़ 现 త 时间还 ෆ䭧 长 ʁ 㟬㣛తɼ䇖 发 ᠓᜾త౎ੋᏠ 证 ఔং 员 ීวෆࡏҙ҆શ 问题 Friday, August 9, 13
  3. HTTP 协议 ૬䎔తएׯ҆ ॄ㜮ੋ HTTP 协议 GET ܕ CSRF POST

    ܕ CSRF ۲߸ 问题 SSL Same Origin Policy ༩ ލҬ௨৴ HTTP Headers Friday, August 9, 13
  4. ෆ 讲 ॄ㜮 DDoS ࿨ DoS: લऀ䳭ྲྀᔁ, ޳ऀ䳭Ꮰ 赖 软

    ݅࿙ಎ: 紧盯 CVE ࿨ 发 ߦ൛త҆શ௨ࠂ XSS: ଖ 实这 ࿽࠽ੋେ 头 SQL Inject: 这 ౎2013೥ྃ, 㟬ཁ൓ল HTTP Cache: 细节 ଠଟɼ 还 ࢉ҆શ Friday, August 9, 13
  5. ༻HTTP 协议 ၏ॄ㜮ʁ Լ 载 ᠓ 页 Լ 载图 ย

    Լ 载 CSS Լ 载 JS Լ 载 ࣈମ AJAX Լ 载 swf, ... Friday, August 9, 13
  6. 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> Friday, August 9, 13
  7. CSRF ੋॄ㜮ʁ Cross-site request forgery (ލ᜾ 请 ٻ 伪 ଄)

    ༻ 户 ظ๬Ұ࿽ߦ 为 ʢൺ೗ 转账 ɼ౤ථɼ䎔 闭 bug, ...ʣੋࡏ 对应 త᠓᜾্ 发 ੜɼୠࡏ 访问 Ұ ࿽ෆ૬䎔త᠓᜾ 时 ٫৮ 发 ྃ 该 ߦ 为 ൺ೗զࡏ䶯Ḧ୿ɼ؃؃Ꮰᡅ 图 ɼ 结 Ռ৮ 发 ྃզ ࡏ 17startup ্ 给 ๭࿽᠓᜾౤ྃ5੕ Friday, August 9, 13
  8. GET ܕ CSRF 17startup త౤ථ 请 ٻ: http:/ /17startup.com/ startup/vote/9439/5

    ߈ 击 ख๏1: ௚઀ 发 ૹurl 给 ड֐ਓɼ೗Ռड֐ ਓቮ 经 ొ 录 17startup ኂ׌఺ 击 ྃ url, बೳ 㢦㟬׬੒౤ථ Friday, August 9, 13
  9. 伪 ૷੒ 图 ย http:/ /is.gd/eGsWc7.jpg વ޳ 发 ౸䬟ࠣࢧ࣋֎ 链

    త 论坛 , ड֐ਓ೗Ռቮ 经 ొ 录过 17startup, ಹ㜮 访问这 ࿽ 论坛时 बՄҎ 㢦㟬౤ථ ߋ޷త 伪 ૷: ೺߈ 击图 ย์ࡏ႓ 张 ਖ਼ৗ 图 ยத 间 Friday, August 9, 13
  10. ๷ޚ GET ܕ CSRF ຌੋधཁߋվ෰ 务 ثঢ় 态 త 请

    ٻɼෆಘ࢖༻ GET, ՄҎ࢖༻ POST, PUT, DELETE Friday, August 9, 13
  11. ٕ 术时间 : Request Method ҆શ 幂 ౳ HEAD √

    √ GET √ √ POST × × PUT × √ DELETE × √ PATCH × × TRACE, OPTIONS, CONNECT (TRACK, DEBUG) Friday, August 9, 13
  12. ۩ମ೗Կૢ࡞ ࡏࣗݾత 页 ໘ 设 ஔҰ࿽iframe, iframe ཬ 边 ༗

    Ұ࿽ form, ࢦ޲ඃ߈ 击 ᜾఺ɼኂ׌༻ JS ৮ 发 ࣗ 动 ఏަ (҃ऀ 诱导 ड֐ਓఏަ) Ҿ 导 ड֐ਓ 访问 㟬త 页 ໘ Friday, August 9, 13
  13. ஫ҙࣄ 项 iframe ׬શՄҎੋ 隐 ܗతɼॴҎड֐ਓՄೳ׬ શ຅༗࡯ 觉 ౸ቮ 经

    ड౸߈ 击 ྃ 验证码对这 䝅߈ 击 ๷ޚᏈՌ኷ࠩɼҼ 为 զՄҎ ೺ 验证码 ፛ 过 དྷ 诱导 ༻ 户 రࣸɻ Friday, August 9, 13
  14. ೗Կ๷ޚ form ཬ 边 ՃCSRF TOKENʢ፺ࡧ㟬తᐽՍ໊শ +CSRFबೳፙ౸େྔతจᑆʣ ࢖༻ෆؚ form త

    AJAX 时 , ဓ HTML தఏऔ CSRF TOKEN Ճೖ㟬తࢀ਺ɻ 䐾 查 ᠓᜾తAPI: 㟬త API Մೳձඃ༻ဋ POST CSRF ߈ 击 ɻ Friday, August 9, 13
  15. ۲߸ݪཧ sinatra ᐽՍ᠍ল࢖༻ rack-session rack-session ࢖༻ Kernel.rand དྷੜ੒ session id

    memcache session storage ຅༗၏ session id ੋ൱ଘࡏత 检验 unicorn ࢖༻ fork དྷੜ੒ଟ࿽ 进 ఔ(䫩গ 启动时 Friday, August 9, 13
  16. ٕ 术时间 : Session อଘ 问题 优 ఺ ᠍఺ Cookie

    Session ߱௿෰ 务 ୺ 压 ྗ࿨䐾 杂 ੑ ਺ਾᔔ࿐, େখݶ੍, ࿘ 费 ྲྀ ྔɼᏠ๏㖘੍ొग़ Memcache Session ෆґ 赖 ဋ਺ਾ 库 ༻ 户 मվີ 码 ޳ొग़༻ 户 ຑ 烦 ɼਗ਼ཧ cache 时 ձ 导 க༻ 户 ొग़ Database Session ޭೳ㖘େ ফ໣਺ਾ 库资 ݯ Friday, August 9, 13
  17. Session ߷࣋๷ޚ Session Id Ӭ 远 ෆཁग़ 现 ࡏ HTML

    த Session Id త Cookie Ӭ 远 ཁ HttpOnly 记录浏览 ث኷গ 变 Խత HTTP 头 User Agent Accept Encoding Accept Language IP(?) Friday, August 9, 13
  18. SSL 历 ࢙༩ 现 ঢ় SSL 2.0 త҆શ࿙ಎ ଖଞ߈ 击

    ํࣜ SSL 3.0 / TLS 1.0 త҆શ࿙ಎ Friday, August 9, 13
  19. 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݄ Friday, August 9, 13
  20. 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݄ Friday, August 9, 13
  21. SSL 2.0 ଘࡏత 问题 1. 长 ౓ 扩 ల߈ 击

    (Length extension attack) MAC = MD5(secret + content) MAC2 = MD5(secret + content+ attack_suffix) Friday, August 9, 13
  22. SSL 2.0 ଘࡏత 问题 1. 长 ౓ 扩 ల߈ 击

    (Length extension attack) 2. ҆શ߱ 级 ߈ 击 ࢖༻໌จ 协 ঎௨৴໛ࣜɼத 间 ՄҎ 篡 վ௨৴ ߱௿Ճີ 级 䫲 Friday, August 9, 13
  23. SSL 2.0 ଘࡏత 问题 1. 长 ౓ 扩 ల߈ 击

    (Length extension attack) 2. ҆શ߱ 级 ߈ 击 3. TCP 䎔 闭 ߈ 击 SSL ࢖༻ TCP FIN དྷ 结 ଋɼத 间 ਓՄҎ௨ 过 发 ૹ TCP FIN དྷׯ 扰 SSL 连 ઀(׌٬ 户 ୺ෆ ձҙ 识 ౸ඃ߈ 击 ) Friday, August 9, 13
  24. SSL తଖଞ҆શ 问题 证书问题 ෆཁ࢖༻ࣗ 签 ໊త 证书 ෆཁ 让

    ༻ 户 ҆૷ࠜ 证书 䇖௨ެڞ 邮 ശతޭೳతҬ্໊࠷޷ෆཁਃ 请 证书 (sohu 邮 ശத 过 ট) Friday, August 9, 13
  25. SSLStrip େ෦෼ https 请 ٻ౎དྷࣗ http త௓ 转 恶 ҙத

    间 ਓՄҎ 拦 ፊ 请 ٻɼ 导 கத 间 ਓ༩ 浏览 ثత௨৴ 为 ໌จ Friday, August 9, 13
  26. SSL 3.0 / TLS 1.0 త 风险 BEAST ߈ 击

    : ར༻ CBC(Cipher-block chaining) తҰ࿽᠍᮷ CRIME ߈ 击 : 构 ଄䉰಍ኂ 观 ࡯ 压缩 ཰ RC4 ߈ 击 : 长时间 ࢖༻ಉҰ࿽ key 导 கඃ߈ 击 Friday, August 9, 13
  27. CRIME ߈ 击 ၊ఆ㟬త session id 为 a1b2c3d4 ಹ㜮೗Ռ 请

    ٻࢀ਺ؚ༗ a1b ҃ऀ 1b2 ҃ऀ b2c 时 ɼ੔࿽ 请 ٻత 压缩 ཰ՄҎఏߴ(SSL ҃ ऀ SPDY ձ 启 ༻ 压缩 ) ༻ sniffer 监 ჶ㑌࿽ 请 ٻత 长 ౓ɼፙ౸ 压缩 ཰ภߴతแɼࡏࠜਾยஈॏ৽㣥䫪ग़ cookie Friday, August 9, 13
  28. Same Origin Policy ༩ ލ Same Origin Policy 对 ෆಉҬݶ੍:

    frame ೭ 间 ෆೳޓ૬ 访问 发 ىత GET 请 ٻᏠ๏ 获 औ಺༰ Ꮰ๏ 发 ى POST ܕ AJAX 请 ٻ(ୠՄҎ௚઀ POST FORM) Ꮰ๏࢖༻ࣈମ/Flash/Java Applet ɻɻɻ Friday, August 9, 13
  29. ղႊํҊ1 JSONP ୞ೳੋ GET 请 ٻ Ꮰ๏্ 传 จ݅ ഁᆀ

    语义 /CSRF߈ 击 长 ౓ݶ੍ Friday, August 9, 13
  30. ղႊํҊ2 CORS (Cross-origin resource sharing) Access-Control-Allow-Origin: * ࢖༻ AJAX ্

    传 จ݅ (ൺ೗ S3 बࢧ࣋) Ҹ 许 ލ᜾Ҿ༻ font, swf(?) খܕ 应 ༻ ݐ 议 ࢖༻ಠཱҬ໊ɼආ໔ඃ߈ 击 Friday, August 9, 13
  31. 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 Friday, August 9, 13