Save 37% off PRO during our Black Friday Sale! »

『プロフェッショナルSSL/TLS』読書会 第7章後半資料

404139d782ec666acea93dffc86e089f?s=47 sylph01
December 08, 2017

『プロフェッショナルSSL/TLS』読書会 第7章後半資料

404139d782ec666acea93dffc86e089f?s=128

sylph01

December 08, 2017
Tweet

Transcript

  1. (7) ϓϩτίϧʹର͢Δ ߈ܸ: 7.4-7.8 @ʰϓϩϑΣογϣφϧSSL/TLSʱಡ ॻձ Ryo Kajiwara (@s01), 12/8/2017

  2. None
  3. લճͷ಺༰͸ લͷΠϕϯτϖʔδ ͔ΒͲ͏ͧ

  4. 7.4 Lucky 13 ҉߸ར༻Ϟʔυ͕CBCϞʔυͰ͋Δͱ͖ʹʮฏจͷখ͞ͳҰ෦ ෼ʯΛղಡͰ͖Δ߈ܸɻ ࠜຊݪҼ͸CBCϞʔυͰ࢖ΘΕΔύσΟϯά͕TLSͷ׬શੑݕূͷ ࢓૊ΈͰอޢ͞Εͳ͍͜ͱʹΑͬͯύσΟϯάΦϥΫϧ߈ܸ͕੒ ཱͯ͠͠·͏͜ͱɻ ฏจ1όΠτΛղಡ͢Δͷʹ8192ճͷHTTPϦΫΤετΛ࢖͏ɻ

  5. ύσΟϯά DESɺAESͳͲͷϒϩοΫ҉߸Ͱ͸ೖྗΛϒϩοΫ௕ʹἧ͑ΔͨΊ ʹฏจʹύσΟϯάΛ෇Ճ͢Δɻ PKCS#7 padding: ຤ඌʹ෇༩͢ΔόΠτ਺ͷ਺ʹ౳͍͠஋ͷίʔυ ϙΠϯτͷจࣈΛ෇Ճ͢Δɻ 2จࣈ଍Γͳ͍৔߹: 0x02 0x02

    4จࣈ଍Γͳ͍৔߹: 0x04 0x04 0x04 0x04 ͽͬͨΓͷ৔߹͸1ϒϩοΫ·Δ͝ͱύσΟϯάΛ෇Ճɻ
  6. ύσΟϯάΦϥΫϧ ʮ෮߸ͨ݁͠ՌύσΟϯά͕ؒҧ͍͑ͯ·ͨ͠ʯ͕ʮ෮߸ͨ݁͠ Ռσʔλͷ׬શੑνΣοΫΛ௨Γ·ͤΜͰͨ͠ʯͱҧ͏ΤϥʔΛ ฦ͢৔߹ʹ߈ܸ͕ՄೳʹͳΔɻ TLS 1.0Ͱ͸ • ύσΟϯάΤϥʔ: decryption_failed •

    MACͷΤϥʔ: bad_record_mac →۠ผͰ͖ͯ͠·͏͜ͱͰʮύσΟϯάΦϥΫϧʯ͕Ͱ͖Δʂ
  7. λΠϛϯάΦϥΫϧ TLS 1.0ͷΑ͏ʹҧͬͨΤϥʔͰڭ͑ͯ͘Εͳͯ͘΋ɺύσΟϯά ͕ਖ਼͍͠৔߹ͱؒҧ͍ͬͯΔ৔߹Ͱʮ࣮ߦ࣌ؒʯ͕ҟͳΔ͜ͱΛ ࢖ͬͯύσΟϯάΦϥΫϧ͕Ͱ͖ͯ͠·͏ɻ decrypted = decrypt_cbc(ciphertext) if !padding_correct?(decrypted)

    return false else check_mac(decrypted, mac) # this takes additional time! end
  8. ύσΟϯάΦϥΫϧ߈ܸ ࠷ऴతͳಈ࡞ͷ༷ࢠ͸٭஫62൪ͷγϛϡϨʔλ https:/ / erlend.oftedal.no/blog/poet/ ͕ඇৗʹΑ͘Ͱ͖͍ͯΔͷͰճͯ͠Έ ΔͱΑ͍ɻ

  9. None
  10. None
  11. ύσΟϯάΦϥΫϧ߈ܸ ղಡର৅ͷϒϩοΫͷલͷϒϩοΫΛૢ࡞͢ΔͷͰɺ͜ΕΛԾʹ ͱ͓͘ɻਖ਼͍͠લͷϒϩοΫͷ஋͸ ͱ͓͘ɻ ʢલͷਤࢀরʣ ͜͜Ͱɺ ʢ҉߸ԽॲཧͷఆٛΑΓʣͳͷͰɺ

  12. ύσΟϯάΦϥΫϧ߈ܸ ͜͜Ͱɺ ͸ط஌ɺ·ͨύσΟϯάΦϥΫϧଘࡏ࣌ʹ͸ Λ ૢ࡞ͯ͠ ͕ύσΟϯάͱͯ͠༗ޮͳ஋Λ͍࣋ͬͯΔ͔Ͳ͏͔Θ ͔ΔͷͰɺ݁Ռͱͯ͠ ͷ஋͕Θ͔Δʢͨͩ͠1όΠτͣͭʣɻ

  13. TLSʹର͢Δ߈ܸ TLS 1.0Ͱ͸ύσΟϯάΤϥʔͱMACΤϥʔ͕ҟͳΔΤϥʔΛฦ͠ ͕ͨɺ௨৴͕҉߸Խ͞Ε͍ͯΔͷͰωοτϫʔΫ্͔Β߈ܸ͢Δ ͷ͸ࠔ೉ͩͬͨɻ͔͠͠OpenSSLʹ͸λΠϛϯάΦϥΫϧ͕ଘࡏ ͨͨ͠Ί࣮࣭ύσΟϯάΦϥΫϧ߈ܸ͕Մೳͩͬͨɻ 2003೥ͷCanvelΒʹΑΔ߈ܸ: OpenSSL + IMAPΛ߈ܸɻී௨ύσΟ

    ϯάͷਪଌʹࣦഊͨ͠৔߹TLSηογϣϯ͕੾Εͯ͠·͏͕ɺ IMAP͸ࣦഊͨ͠৔߹ʹࣗಈͰ࠶ࢼߦ͢ΔͨΊ౎߹͕Α͔ͬͨɻ
  14. TLSʹର͢Δ߈ܸ Lucky 13߈ܸ(2013, AlFardan and Paterson): TLS 1.1Ͱ decryption_failed௨஌͕ඇਪ঑ʹͳΓɺMACͷܭࢉ͸ύσΟϯ ά͕ؒҧ͍ͬͯͨ৔߹Ͱ΋ߦ͏͜ͱͱ͕ͨ͠ɺMACͷύϑΥʔϚ

    ϯε͕σʔλϑϥάϝϯτͷ௕͞ʹґଘͯ͠͠·͏͜ͱΛར༻͠ ͨαΠυνϟωϧΛ࢖ͬͯ߈ܸʹ੒ޭͨ͠ɻ
  15. Өڹ • ฏจશ෦Λ߈ܸ͢Δʹ͸ඇৗʹ͕͔͔࣌ؒΔͨΊɺ௨৴ճ෮ػ ߏΛඋ͍͑ͯΔࣗ཯తͳγεςϜΛର৅ʹ͢Δ͜ͱ͕ଟ͍ • Ұ෦ͷฏจ͕൑໌͍ͯ͠Δ৔߹ʹ͸ΑΓগͳ͍ࢼߦճ਺ͰࡁΉ ʢͱ͸͍֤͑όΠτ͋ͨΓ65536ճʣ • JavaScriptϚϧ΢ΣΞΛ࢖ͬͨ߈ܸ •

    Cookieͷจࣈछ੍ݶʹΑΓճ਺͕ݮΔ • ਪଌʹࣦഊͯ͠΋௨৴ࣦഊ͕ϢʔβʔʹόϨͳ͍ʂ
  16. ؇࿨ࡦ ݁࿦ͱͯ͠͸TLSʹ͓͚ΔCBCʹ໰୊͕͋Δɻ݁ՌTLS 1.3Ͱ͸CBC ϞʔυશഇɺAEADݶఆͱͳΔ༧ఆɻ ετϦʔϜ҉߸Λ࢖͑͹ύσΟϯά͕ཁΒͳ͍͕ɺগͳ͘ͱ΋౰ ࣌1TLSʹଘࡏͨ͠།ҰͷετϦʔϜ҉߸͸RC4ͰɺͦΕ͸ͦΕͰ໰ ୊͕͋ͬͨɻ ೝূ͖ͭ҉߸(AEAD; GCMϞʔυͳͲ)Λ࢖͑͹MACʹΑΔλΠϛϯ ά໰୊΋ղܾ͢Δ͕͜Εʹ͸TLS

    1.2͕ඞཁɻ 1 TLS 1.3Ͱ͸ChaCha20/Poly1305͕࢖͑ΔΑ͏ʹͳΔϋζ
  17. None
  18. 7.5 RC4ͷऑ఺ TL;DR: ݱ୅తʹ͸RC4࢖͏ཧ༝ͳ͍ͷͰ࢖͏ͳɻ

  19. 伴εέδϡʔϦϯάͷऑ఺ 伴εέδϡʔϦϯά = ୹͍จࣈྻ͔Β伴ετϦʔϜΛग़ྗ͢ΔΞ ϧΰϦζϜͷ͜ͱɻ ͘͝Ұ෦෼͕Θ͔Ε͹ॳظग़ྗͷଟ͘ΛܾఆͰ͖ͯ͠·͏Α͏ͳ 伴͕ଟ͍ʢऑ伴ͷଘࡏʣɺ伴ͷ࠶ར༻͕͋Δ͚ͩͰ伴ετϦʔϜ ͷҰ෦ΛಛఆͰ͖ͯ͠·͏ɺͱ͍͏໰୊͕஌ΒΕ͍͕ͯͨ… 2011೥ BEAST߈ܸൃදˠRC4͕TLS

    1.0ҎલͰ།Ұ҆શͳ҉߸Ξϧ ΰϦζϜʹʂ
  20. ୯ҰόΠτͷภΓ ಛʹॏཁͳͷ͕ɺ伴ετϦʔϜͷ2όΠτ໨͕௨ৗͷ2ഒͷ֬཰Ͱ0 ʹͳΔɺͱ͍͏ੑ࣭ɻ 0ʹͳΔͱ͍͏͜ͱ͸XORΛऔͬͯ΋0ɻ →ͨ͘͞Μͷ઀ଓΛੜ੒͠ɺ࠷΋සൟʹ2όΠτ໨ʹݱΕΔ஋͕ฏ จͱҰகɺͱݟͯ΋ؒҧ͍ͳͦ͞͏

  21. ઌ಄256όΠτʹ͓͚ΔภΓ 2013, AlFardanΒ: ઌ಄256όΠτͷ֤όΠτͷதͰಛఆͷ஋ʹภΔ ܏޲͕͋Δ͜ͱΛൃݟɻ →256όΠτΛղಡ͢ΔͨΊʹඞཁͳσʔλαϯϓϧ਺͕ ɺจ ࣈ͕ݶΒΕΔ৔߹ʹ͸ ʹͳͬͨɻRC4͕௨ৗอূ͢Δͷ͸ ɻ

  22. ઌ಄256όΠτʹ͓͚ΔภΓ ͱ͸͍͑ɺ࣮ࡍͷ߈ܸ͸ࠔ೉: • 2^28ݸͷαϯϓϧΛಘΔΑ͏ͳ઀ଓΛൃੜͤ͞Δ͜ͱ͕೉͍͠ • BEAST߈ܸͰߦΘΕͨΑ͏ʹJavaScriptϚϧ΢ΣΞΛ࢖ͬͯ઀ ଓΛ੍ޚ͢Δͷ͕ཧ૝త͔ʁ • डಈతʹ߈ܸ͢Δͷ͸ࠔ೉ɻMITM߈ܸ͕΄͍͠ɻ •

    ͦΕͰ΋ઌ಄256όΠτ͔͠Θ͔Βͳ͍ɻ
  23. ͦͷޙ • ೋॏόΠτ߈ܸ: ࿈ଓͨ͠όΠτʹภΓ͕͋Δͱ͍͏ੑ࣭ͷར ༻ɻҰఆͷִؒͰग़ྗʹݱΕΔɻ • αϯϓϧऔಘʹҟͳΔRC4伴Λඞཁͱ͠ͳ͍ɻඞཁͳ઀ଓ਺ ͕ݮΔ • डಈత߈ܸ͸ෆՄೳ

  24. ͦͷޙ • HTTPηογϣϯ༻Cookieͷ಺༰औಘ͕2^34 -> 2^26ͰࡁΉɺͱ ͍͏ൃݟ • Invariance Weakness: ෆద੾ͳ伴͕ͱ͖Ͳ͖ੜ੒͞ΕΔ͜ͱΛར

    ༻ɻ2^24ճʹ1ճTLS઀ଓ͕ഁΒΕΔ • Cookie߈ܸʹ͔͔Δ࣌ؒͷ୹ॖɻBEASTಉ༷ͷJavaScriptϚϧ΢ ΣΞΛ࢖͏ɻͱ͸͍͑75͔͔࣌ؒΔɻ
  25. ؇࿨ࡦ 2015/2, RFC 7465Ͱ TLSͰͷࠓޙͷRC4ར༻͸ېࢭʂ ΍ͬͨͶʂʂ

  26. None
  27. 7.6 τϦϓϧϋϯυγΣΠΫ߈ܸ 7.1ͷରࡦͱͯ͠ಋೖ͞Εͨʮ҆શͳ࠶ωΰγΤʔγϣϯʯʹର͢ Δ࠶߈ܸɻ ໨త͸ʢ࠶ωΰγΤʔγϣϯ͕ඞཁͳέʔεͰ͋ΔʣΫϥΠΞϯ τূ໌ॻ͕ඞཁͳΞΫηεͷ৐ͬऔΓɻ

  28. ࠶ωΰγΤʔγϣϯʹ͓͚Δ҆શੑ֬ อ ࠶ωΰγΤʔγϣϯ࣌ʹ͸ɺҎલͷϋϯυγΣΠΫʹ͓͚Δ Finishedʹؚ·ΕΔverify_dataͷ஋Λ࠶ૹ৴͢Δ͜ͱͰɺαʔ όʔ͸࠶ωΰγΤʔγϣϯΛٻΊ͍ͯΔΫϥΠΞϯτ͕Ҏલ઀ଓ ͨ͜͠ͱͰ͋Δ΋ͷͰ͋Δ͜ͱͷ֬ূΛಘΔɻ →߈ܸऀ͸͜ͷ߈ܸͰ͜ͷൿີͷ஋Λ๫͘͜ͱΛ໨ඪͱ͢Δɻ

  29. (1) ະ஌ͷ伴͕ڞ༗͞ΕΔऑ఺ RSA伴ަ׵ͷऑ఺Λѱ༻͢Δɻຊདྷதؒऀʹ͸෮߸Ͱ͖ͳ͍Pre- Master SecretΛຊདྷͷड͚खͰ͋Δαʔόʔʹ෮߸ͤ͞Δɺͱ͍ ͏͜ͱΛ͢Δɻ ަ׵͕׬ྃ͢Δͱɺ઀ଓʹ࢖͏ύϥϝʔλ(Pre-Master Secret, random)͕ಉҰͰ͋ΔʹϚελʔ伴΋ಉҰͳ2ͭͷ઀ଓ͕Ͱ͖Δɻ (DH伴ަ׵Ͱ΋͜Ε͕Մೳɻѱҙͷ͋Δαʔόʔ͕؆୯ʹഁΕΔ

    DHύϥϝʔλΛબ΂͹Α͍ɻECDHEͰ͸໊લ෇͖ۂઢΛ࢖͏ͷͰ ͜Ε͕ෆՄೳ)
  30. ຊจͷਤ7.8

  31. (2) ׬શಉظ ͜ΕͰ͸·ͩ verify_data ͕ͦΕͧΕผͷΫϥΠΞϯτ͔Βདྷͯ ͍Δʢˡূ໌ॻ͕ҧ͏ʣͷͰ࠶ωΰγΤʔγϣϯ߈ܸ͕ෆՄೳɻ ͜͜ͰηογϣϯϦβϯϓγϣϯͰ͸ϋϯυγΣΠΫ͕লུ͞Ε ΔʢϚελʔ伴͕Θ͔͍ͬͯΕ͹े෼Ͱ͋Δʣ͜ͱΛར༻͢Δɻ →1ͭ໨ͷ઀ଓͰ͸ҟͳ͍ͬͯͨূ໌ॻ͕ཁٻ͞Εͳ͘ͳΓɺηο γϣϯ࠶։ޙͷFinishedϝοηʔδ΋ಉҰʂ

  32. ຊจͷਤ7.9

  33. (3) ͳΓ͢·͠ ߈ܸऀ͸٘ਜ਼ऀͷΫϥΠΞϯτূ໌ॻΛ࢖͍͍ͨͷͰ࠶ωΰγΤ ʔγϣϯΛڧ੍ͤ͞Δɻ ઀ଓ੒ཱޙ͸τϥϑΟοΫ͸ݟΕͳ͘ͳΔ͜ͱʹ஫ҙɻ

  34. ຊจͷਤ7.10

  35. Өڹ ߈ܸΛड͚ΔՄೳੑ͕͋Δͷ͸ɺ7.1ͱಉ༷ɺ߈ܸऀͱΫϥΠΞϯ τ͕۠ผͰ͖͍ͯͳ͍αʔόɻ ΑΓةݥͳϕΫλͱͯ͠ɺ߈ܸऀ͸࠶ωΰγΤʔγϣϯલʹ೚ҙ ͷσʔλΛ૒ํͷ઀ଓʹૹΕΔ͜ͱ͕͋Δɻ ࠶ωΰγΤʔγϣϯʹΑΓΫϥΠΞϯτূ໌ॻೝূΛಥഁͨ͠ޙ ͸ɺJavaScriptϚϧ΢ΣΞΛྲྀ͠ࠐΜͰ͓͘͜ͱͰೝূ͞Εͨঢ়ଶ ͰϦΫΤετΛൃߦ͠·͘Δ͜ͱ͕Ͱ͖Δɻ

  36. ੒ཱཁ݅ ͱ͸͍͑߈ܸ͸༰қͰͳ͍ɻ • ΤϯτϦʔϙΠϯτͱରԠ͢ΔϖΠϩʔυͷߏங • ࠶ωΰγΤʔγϣϯޙ͸τϥϑΟοΫ͕ݟ͑ͳ͘ͳΔ ͞ΒʹɺҎԼͷଆ໘΋ຬͨ͢ඞཁ͕͋Δ: • ΫϥΠΞϯτূ໌ॻΛ࢖͍ͬͯΔαΠτͷΈର৅ʹͰ͖Δ •

    ѱҙͷ͋ΔαΠτʹݺͼࠐΉඞཁ͕͋Δ
  37. ؇࿨ࡦ • ͢΂ͯͷΞΫηεʹΫϥΠΞϯτূ໌ॻΛཁٻ • ͦ͏͢Δͱ࠷ॳͷ઀ଓʹ߈ܸऀͷূ໌ॻ͕ཁٻ͞ΕΔ • ࠶ωΰγΤʔγϣϯΛແޮʹ͢Δ • ECDHEͷΈΛ༗ޮʹ͢Δ •

    RSAͱDHEͷ伴ަ׵ͷ໰୊ʹґଘ͍ͯ͠ΔͨΊ
  38. None
  39. 7.7 POODLE 2014/10, Google Security TeamʹΑΔɻ Lucky 13߈ܸͱಉ༷ͷύσΟϯάΦϥΫϧ߈ܸʹϓϩτίϧμ΢ϯ άϨʔυ߈ܸΛ૊Έ߹Θͤͨ΋ͷɻ

  40. ύσΟϯάํࣜͷҧ͍ ຊจͷਤ7.11

  41. ύσΟϯάํࣜͷҧ͍ POODLEͷѱ༻ʹ͸ʮ࠷ޙඌͷ҉߸ԽϒϩοΫશମ͕ύσΟϯάͩ ͚ʹͳΔΑ͏ʹ͢Δʯඞཁ͕͋Δɻ →߈ܸऀʹΞΫηεͰ͖Δͷ͸҉߸Խ͞Εͨঢ়ଶͷΈͳͷͰύσ ΟϯάΛ௚઀͍͡Εͳ͍ɻ࠷ޙඌͷϒϩοΫͷΈ͕ύσΟϯάͰ ͋Ε͹MACݕূʹҾ͔͔ͬΒͣʹ޷͖ͳΑ͏ʹมߋΛՃ͑ΒΕ Δɻ ࠷ޙඌͷ҉߸ԽϒϩοΫશମ͕ύσΟϯά͚ͩʹͳͬͨ৔߹ɺ෮ ߸Խޙͷ࠷ऴόΠτͷ஋͸(AESͷ৔߹)15ɻ

  42. ࣮ࡍͲ͏΍ͬͯ߈ܸ͢Δͷ ͜ͷํ๏Ͱ͸҉߸จͷ຤ඌ1όΠτ͔͠ղಡ͢Δ͜ͱ͕Ͱ͖ͳ͍ɻ ͳͷͰɺJavaScriptΛ࢖ͬͯPOSTͷૹ৴URLͱϦΫΤετϘσΟΛ ੍ޚ͠ɺղಡ͍ͨ͠஋(CookieͳͲ)ؚ͕·ΕΔ෦෼Λ࠷ऴϒϩοΫ ʹ࣋ͬͯ͘ΔΑ͏ʹૢ࡞Λ͢Δɻ

  43. ࣮ࡍͲ͏΍ͬͯ߈ܸ͢Δͷ • ௕͍URLͱ࠷খݶͷϦΫΤετϘσΟ͔ΒਪଌΛ։࢝ • URLΛ1όΠτͣͭ୹ͯ͘͠ύσΟϯάͷ௕͞Λ֬ఆ • 1όΠτΛղಡ͢ΔͷʹඞཁͳਪଌϦΫΤετΛૹ৴ • ࢒ΓͷόΠτʹରͯ͠Ҏ্܁Γฦ͠ 1όΠτ͋ͨΓ256ճͰे෼ʹඞཁͳόΠτ਺͕200จࣈલޙͰ΋

    ࠓ·ͰΑΓང͔ʹޮ཰͕ྑ͍ʂ
  44. TLS 1.0Ҏ߱Ͱ΋POODLE͕Ͱ͖Δέʔ ε͕͋Δ SSLv3 -> TLS΁ͷϚΠάϨʔγϣϯͷࡍʹҰ෦ͷϕϯμʔͷύσΟ ϯάͷ࣮૷͕ద੾Ͱͳ͔ͬͨͨΊɻ

  45. ؇࿨ࡦ • ϒϥ΢βɿSSL 3.0΁ͷϑΥʔϧόοΫΛແޮʹͨ͠ɻ • SSLv3ͷແޮԽ • PCI DSS 3.2Ͱ͸2018

    6/30·ͰʹSSLv3, Early TLS(TLS 1.0)Λແ ޮԽͯ͠όʔδϣϯΞοϓ͠Ζɺͱ໌ݴ͞Ε͍ͯ·͢
  46. None
  47. 7.8 Bullrun …ͱ͍͏͔Dual EC DRBGͷ໰୊ɻඪ४ͱͯ͠ఏএ͞Εٖͨࣅཚ਺ੜ ੒ثʹNSAͷόοΫυΞ͕ೖͬͯͨΑɺͱ͍͏࿩ɻ NSA͸ʮ঎༻ͷൿີ伴ٕज़ͷͨΊͷϙϦγʔɺඪ४ɺ͓Αͼ࢓༷ ʹରͯ͠ӨڹΛٴ΅͢ʯ׆ಈʹ೥ؒ2ԯ5ઍສυϧΛ࢖͍ͬͯΔͦ ͏Ͱ͢ɻӳࠃGCHQͰ΋ಉ༷ͷ׆ಈ͕͋Δͱ͔ɻ