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

脆弱性のあるJavaScriptライブラリの使用を防ぐには / #sec_kansai 14

脆弱性のあるJavaScriptライブラリの使用を防ぐには / #sec_kansai 14

総関西サイバーセキュリティLT大会(第14回) ( https://sec-kansai.connpass.com/event/122914/ ) でJavaScriptライブラリの脆弱性に関する発表を行いました。

Masashi Hirano

April 10, 2019
Tweet

More Decks by Masashi Hirano

Other Decks in Programming

Transcript

  1. ੬ऑੑͷ͋ΔJavaScriptϥΠϒϥϦ
    ͷ࢖༻Λ๷͙ʹ͸
    ૯ؔ੢αΠόʔηΩϡϦςΟ̡̩େձʢୈ14ճʣ
    ฏ໺ ণ࢜(@shisama)

    View Slide

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

    View Slide

  3. એ఻
    https://nodejs.connpass.com/event/126358/

    View Slide

  4. Agenda
    • JavaScriptϥΠϒϥϦͷ੬ऑੑࣄ৘
    • ੬ऑੑͷ͋ΔϥΠϒϥϦͷ࢖༻Λ๷͙ʹ͸

    View Slide

  5. JavaScriptϥΠϒϥϦͷ੬ऑੑࣄ৘

    View Slide

  6. JavaScriptͷϥΠϒϥϦࣄ৘
    • Node.js / npmͷొ৔ʹΑΓJavaScriptͷϥΠϒϥϦ͕രൃతʹ
    ૿͑ͨ
    • Node.js΍ϑϩϯτΤϯυͳͲJSͷ։ൃͰ͸ଟ͘ͷϥΠϒϥϦ͕
    ࢖ΘΕ͍ͯΔ

    View Slide

  7. npmʹొ࿥͞Ε͍ͯΔϥΠϒϥϦ͕
    ѹ౗తͳ਺ʹͳ͍ͬͯΔ
    http://www.modulecounts.com/

    View Slide

  8. npmʹొ࿥͞Ε͍ͯΔϥΠϒϥϦ͕
    ҟৗͳ਺ʹͳ͍ͬͯΔ
    http://www.modulecounts.com/
    ਺͕ଟ͍෼ɺ
    ੬ऑੑͷ͋ΔϥΠϒϥϦ΋ଟ͍

    View Slide

  9. JavaScriptϥΠϒϥϦͷ੬ऑੑࣄ৘
    • ਓؾϥΠϒϥϦʹѱҙͷ͋Δίʔυ͕ૠೖ͞ΕΔࣄ݅
    • ESLint (JavaScriptͷ࠷΋ϙϐϡϥʔͳ੩తղੳπʔϧ)ʹѱҙ
    ͷ͋Δίʔυ͕ૠೖ͞Ε͍ͯͨ(2018೥7݄)
    • 1िؒʹ200ສDLͷϥΠϒϥϦevent-streamʹԾ૝௨՟΢Υ
    Ϩοτ͔Β҉߸伴Λ౪Έग़͢ػೳ͕ૠೖ͞ΕΔ(2018೥11݄)

    View Slide

  10. JavaScriptϥΠϒϥϦͷ੬ऑੑࣄ৘
    • ੈքͷτοϓ75,000ͷWebαΠτ(Alexaௐ΂)ͷ্Ґ37%͕Կ͔͠Βͷ
    ੬ऑੑͷ͋ΔJSϥΠϒϥϦΛ࢖༻
    • ϊʔεΠʔελϯେֶͷݚڀνʔϜʹΑΔௐࠪ݁Ռ(2017೥)
    • ݹ͍ϥΠϒϥϦΛ࢖༻͍ͯ͠Δ
    • ޿ࠂ΍τϥοΩϯάɺιʔγϟϧϝσΟΞͷ΢ΟδΣοτʹຒΊࠐ·
    Ε͍ͯΔ͜ͱ͕ଟ͍

    View Slide

  11. ੬ऑੑͷ͋ΔϥΠϒϥϦͷ࢖༻Λ๷͙ʹ͸

    View Slide

  12. npmͷηΩϡϦςΟ΁ͷऔΓ૊Έ
    • npmjs.comʹ֤ͯϥΠϒϥϦͷ੬ऑੑใࠂ͕Ͱ͖ΔΑ͏ʹͳ͍ͬͯΔ
    • npm v6͔Βnpm auditίϚϯυ͕௥Ճ͞Ε͍ͯΔ
    • ϓϩδΣΫτ಺ʹΠϯετʔϧͨ͠ϥΠϒϥϦͷ੬ऑੑΛνΣοΫ
    • ϥΠϒϥϦͷΠϯετʔϧ࣌ʹ΋࣮ߦ͞ΕΔ

    View Slide

  13. https://www.npmjs.com/package/typescript
    ֤ϥΠϒϥϦͰ੬ऑੑΛใࠂՄೳ

    View Slide

  14. npm auditΛ࣮ߦ͢ΔͱΠϯετʔϧͨ͠
    ϥΠϒϥϦͷ੬ऑੑΛݕग़ͯ͘͠ΕΔ

    View Slide

  15. npm auditΛ࢖͏
    • CIͰ࣮ߦ͢Δ͜ͱͰ੬ऑੑͷ͋ΔϥΠϒϥϦͷσϓϩΠΛ๷͙
    • IBM/audit-ciͱ͍͏ϥΠϒϥϦΛ࢖͑͹੬ऑੑͷϨϕϧʹԠ͡
    ͨݕग़Λߦ͑Δ
    • npm audit fixίϚϯυͰ੬ऑੑͷ͋ΔϥΠϒϥϦΛࣗಈमਖ਼

    View Slide

  16. npm audit fixΛ࣮ߦ͢Δͱ੬ऑੑ͕मਖ਼͞Εͨ
    όʔδϣϯͷϥΠϒϥϦΛΠϯετʔϧ͢Δ

    View Slide

  17. npm auditͰ͸
    node security projectʹใࠂ͞Ε͍ͯͳ͍
    ੬ऑੑ͸ݕग़Ͱ͖ͳ͍

    View Slide

  18. https://retirejs.github.io/retire.js/

    View Slide

  19. Retire.jsΛ࢖͏
    • CVE΍HackerOne΁ͷใࠂΛجʹ੬ऑੑΛݕग़͢Δπʔϧ
    • ίϚϯυϥΠϯ͚ͩͰͳ͘ɺChrome΍Firefoxͷ֦ுػೳ΋͋Δ
    • unpkg.comͳͲCDN͔ΒಡΈࠐΜͰ͍ΔϥΠϒϥϦ΋֬ೝ͢
    Δ͜ͱ͕Ͱ͖Δ
    • ͋ΒΏΔWebϖʔδͷ੬ऑੑΛ֬ೝ͢Δ͜ͱ͕Ͱ͖Δ

    View Slide

  20. Retire.jsͷChrome ExtensionͰ
    WikipediaΛνΣοΫ
    (աڈͷΩϟϓνϟͰࠓ͸طʹमਖ਼ࡁ)

    View Slide

  21. https://snyk.io/

    View Slide

  22. SnykΛ࢖͏
    • CVEͷσʔλΛجʹ੬ऑੑͷ͋ΔϥΠϒϥϦΛνΣοΫ͢Δαʔ
    Ϗε
    • ༷ʑͳݴޠʹରԠ͍ͯ͠Δ
    • ੬ऑੑΛमਖ਼͢ΔPull RequestΛࣗಈੜ੒
    • OSS͸ແྉͰ࢖͑Δ

    View Slide

  23. https://snyk.io/vuln

    View Slide

  24. ·ͱΊ
    • JavaScript͸ϥΠϒϥϦ͕๛෋͕ͩ੬ऑੑͷ͋ΔϥΠϒϥϦ΋ଟ
    ͍
    • ੬ऑੑͷݕग़΍म෮͸πʔϧͰߦ͑Δ

    View Slide

  25. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide