$30 off During Our Annual Pro Sale. View Details »

SameSite Cookie

SameSite Cookie

SameSite cookieについて話をしました。
CookieにSameSiteを付けることでCSRFを防ぐことができます。Chrome 80からはSameSite=Laxがデフォルトになります。

以下の記事を参考にしました。

Cookie の性質を利用した攻撃と Same Site Cookie の効果 | blog.jxck.io
( https://blog.jxck.io/entries/2018-10-26/same-site-cookie.html )

Cookie の SameSite=Lax をデフォルトにする提案仕様 - ASnoKaze blog( https://asnokaze.hatenablog.com/entry/2019/05/09/005513 )

SameSite Updates - The Chromium Projects ( https://www.chromium.org/updates/same-site )

※たまたま見つけたのがよく利用するはてなのサービスでしたが、はてなのサービスに対する問題点の指摘をする意図などはございません。
いちユーザーとしてはてなのサービスは好きです。

Masashi Hirano

October 18, 2019
Tweet

More Decks by Masashi Hirano

Other Decks in Programming

Transcript

  1. SameSite
    Cookie
    Cybozu Frontend Expert
    Masashi Hirano @shisama

    View Slide

  2. ฏ໺ ণ࢜ / Masashi Hirano
    @shisama_
    shisama
    Node.js Core Collaborator
    ؔ੢NodeֶԂOrganizer

    View Slide

  3. Agenda
    • CSRF
    • SameSite Cookie
    • Cookies default to SameSite=Lax

    View Slide

  4. CSRF

    View Slide

  5. ᶃ some-site.com ϩάΠϯ
    ᶄ Set-Cookie
    ᶅ ଞυϝΠϯ(CDN, Ad…) with

    Request
    Response

    View Slide

  6. ᶄ ✉
    ᶅ evil.com
    Request
    Response
    ᶆ ߈ܸऀʹૹۚ͢ΔϑΥʔϜ
    ᶇ ෇͖ͰᶆΛPOST

    action="https://bank.com">
    name="to" value="attacker"
    />
    name="amount"
    value="10000000" />

    <br/>pay.submit()<br/>
    ᶃ bank.com΁͸

    ɹϩάΠϯࡁ
    bank.com

    View Slide

  7. CSRF (ΫϩεαΠτϦΫΤετϑΥʔδΣϦ)
    1. ԿΒ͔ͷํ๏Ͱѱҙͷ͋ΔαΠτʹ༠ಋͤ͞Δ
    2. ϩάΠϯࡁͷϢʔβʔʹѱҙͷ͋ΔϑΥʔϜΛPOSTͤ͞Δ
    3. αʔόʔ͸Cookieʹ͋ΔϩάΠϯηογϣϯID͕Ұக͢ΔͷͰϦΫΤ
    ετΛड͚ೖΕΔ
    4. ѱҙͷ͋ΔPOST͕ॲཧ͞Εͯ߈ܸऀͷૢ࡞͕੒ޭ͢Δ

    ※ࠓճͷྫͰ͸RefererͷνΣοΫͳͲSameSite cookieҎ֎ͷରࡦ͸͋Γ·͢ɻ

    View Slide

  8. SameSite cookie

    View Slide

  9. Cookie
    • ηογϣϯIDͳͲΛอ࣋͢ΔͨΊʹ࢖ΘΕΔ͜ͱ͕ଟ͍
    • αʔόʔଆ͕Set-Cookieͱ͍͏ϨεϙϯεϔομʔΛ෇༩

    e.g. Set-Cookie: sid=dfj3oia4jfkl1ered4fafdarq path=/
    • ϒϥ΢βଆͰSet-Cookieͷ௨ΓΫοΩʔΛੜ੒͢Δ
    ${key}=${value} Cookieଐੑ

    View Slide

  10. CookieʹઃఆͰ͖Δଐੑ
    &YQJSFT ΫοΩʔͷ༗ޮظݶɻ೔࣌λΠϜελϯϓͰࢦఆ
    .BY"HF ΫοΩʔͷظݶ·Ͱͷඵ਺ɻ&YQJSFTΑΓ༏ઌ͞ΕΔ
    %PNBJO ΫοΩʔͷૹ৴ઌΛࢦఆ
    1BUI ΫοΩʔΛཁٻ͢Δ63-Λࢦఆ
    4FDVSF 44-ͱ)5514Λ࢖ͬͨϦΫΤετͷͱ͖ͷΈΫοΩʔૹ৴
    )UUQ0OMZ EPDVNFOUDPPLJF΍YIS͔ΒΞΫηεͰ͖ͳ͍ɻ944ͷܰݮʹ༗ޮ

    View Slide

  11. SameSite Cookie
    • CookieʹઃఆͰ͖Δ৽͍͠ଐੑ
    • RFC͸·ͩυϥϑτ(RFC6265bis)
    • ΫϩεαΠτ΁ͷCookieͷૹ৴Λ੍ݶ͢Δ͜ͱ͕Ͱ͖Δ

    લड़ͷྫͩͱbank.comͷΫοΩʔΛevil.com͔Βૹ৴Ͱ͖ͳ͍Α͏ʹ੍ޚՄೳ
    • Set-Cookie: SID=1234567890abcdefg; Path=/; Domain=example.com;
    SameSite=Lax

    View Slide

  12. SameSite=?
    • Strict:

    ɾଞͷυϝΠϯʹΫοΩʔΛૹΒͳ͍
    • Lax:

    ɾΞυϨεόʔʹදࣔ͞Ε͍ͯΔURL͕มΘΔΑ͏ͳը໘ભҠɺ͔ͭGETͰ͋Ε͹ଞ
    ͷυϝΠϯͰ΋ΫοΩʔΛૹΔ

    ɾɺɺXHRͳͲʹΑΔଞͷυϝΠϯ΁ͷGETϦΫΤετ͸ΫοΩʔ
    ΛૹΒͳ͍
    • None: υϝΠϯʹؔ܎ͳ͘ΫοΩʔΛૹΔ

    View Slide

  13. SameSite=Strict
    • ผͷαΠτ͔ΒϦϯΫͰભҠͨ͠৔߹Cookie͕ૹ৴͞Εͳ͍
    • ϩάΠϯࡁͰ΋ผυϝΠϯͷαΠτ͔ΒભҠ͢Δͱ΋͏Ұ౓ϩά
    Πϯ͢Δඞཁ͕͋Δ

    ᶅ ϝʔϧ͔ΒSite A΁ͷϦϯΫΛΫϦοΫ
    Site A

    ᶃ ϩάΠϯ

    View Slide

  14. SameSite=Lax
    • ผαΠτ͔ΒͷભҠͰ΋ϩάΠϯঢ়ଶ͸ҡ࣋Ͱ͖Δ
    • POSTͰ͸ΫοΩʔ͸ૹΒΕͳ͍ͨΊલड़ͷCSRFͷରࡦʹͳΔ

    ᶅ ϝʔϧ͔ΒSite A΁ͷϦϯΫΛΫϦοΫ
    Site A

    ᶃ ϩάΠϯ
    ̋

    View Slide

  15. https://caniuse.com/#feat=same-site-cookie-attribute

    View Slide

  16. Cookies default to SameSite=Lax

    View Slide

  17. https://www.chromestatus.com/feature/5088147346030592

    View Slide

  18. SameSite=Lax͕σϑΥϧτʹ
    • ݱࡏ͸SameSiteΛࢦఆ͍ͯ͠ͳ͍ͱNoneͱಉ͡
    • Chrome 80͔ΒSameSiteͷࢦఆ͕ͳ͍৔߹ɺCookie͸Laxͱಉ
    ͡Α͏ʹѻ͏༧ఆ
    • SameSite=NoneΛࢦఆ͢Δͱࠓ·Ͱͱಉ͡

    View Slide

  19. chrome://flags/#same-site-by-default-cookies
    #same-site-by-default-cookies
    ݱࡏͰ΋ϑϥάΛ༗ޮʹ͢Δ͜ͱͰ4BNF4JUF-BYΛσ
    ϑΥϧτʹ͢Δ͜ͱ͕Ͱ͖Δ

    View Slide

  20. https://www.hatena.ne.jp/
    SameSite=Lax by defaultʹΑΔӨڹ
    ϩάΠϯ͍ͯ͠Δঢ়ଶ

    View Slide

  21. https://www.hatena.ne.jp/
    ϩάΠϯ͞Ε͍ͯͳ͍ͱ൑அ͞Ε͍ͯΔ
    ˞࣮ࡍ͸ϩάΠϯ͍ͯ͠Δ

    View Slide

  22. http://hatenablog.com/
    αʔυύʔςΟ$PPLJF͕ແޮͷܯࠂ͕දࣔɻ
    ϩάΠϯ͞Ε͍ͯͳ͍ͱ൑அ͞Ε͍ͯΔ
    ˞࣮ࡍ͸ϩάΠϯ͍ͯ͠Δ

    View Slide

  23. • ݱߦ௨Γͷڍಈʹ͢ΔͳΒSameSite=Noneʹ͢Δඞཁ͕͋Δ
    αʔϏε͕͋Δ
    • ޿ࠂͳͲ΋ಉ༷ʹ͏·͘ಈ࡞͠ͳ͘ͳΔՄೳੑ͕͋Δ
    SameSite=LaxʹΑΔӨڹ

    View Slide

  24. https://www.chromestatus.com/feature/5633521622188032
    4FDVSFଐੑͷແ͍4BNF4JUF/POFͰ͸ΫοΩʔ͸ૹ৴͞Εͳ͍

    View Slide

  25. ※ͨ·ͨ·ݟ͚ͭͨͷ͕Α͘ར༻͢Δ͸ͯͳͷαʔϏε
    Ͱ͕ͨ͠ɺ͸ͯͳͷαʔϏεʹର͢Δ໰୊఺ͷࢦఠΛ͢
    ΔҙਤͳͲ͸͍͟͝·ͤΜɻ
    ͍ͪϢʔβʔͱͯ͠͸ͯͳͷαʔϏε͸޷͖Ͱ͢ɻ

    View Slide

  26. ·ͱΊ
    • SameSite cookie͸CSRFରࡦʹ༗ޮ
    • Chrome 80͔ΒSameSiteΛࢦఆ͍ͯ͠ͳ͍ͱLax૬౰ʹͳΔ
    • SameSite=Lax ରԠ͠ͳ͍ͱ͍͚ͳ͍͔΋…

    View Slide

  27. https://2019.kfug.jp
    ϑϩϯτΤϯυΧϯϑΝϨϯεͰηΩϡϦςΟͷ࿩Λ͠·͢

    View Slide

  28. Thanks.
    @shisama_
    shisama

    View Slide