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

Webアプリケーションテストを用いたSQLクエリのホワイトリスト自動作成手法 / Automatic whitelist generation for SQL queries using web application tests

Webアプリケーションテストを用いたSQLクエリのホワイトリスト自動作成手法 / Automatic whitelist generation for SQL queries using web application tests

IOT46 第46回インターネットと運用技術研究会

Komei Nomura

June 14, 2019
Tweet

More Decks by Komei Nomura

Other Decks in Research

Transcript

  1. ໺ଜ޸໋(ϖύϘݚڀॴ), ྗ෢݈࣍(ྗ෢݈ٕ࣍ज़࢜ࣄ຿ॴ, ϖύϘݚڀॴ), দຊ྄հ(͘͞ΒΠϯλʔωοτגࣜձࣾ)
    2019.06.14 IOT46 ୈ46ճΠϯλʔωοτͱӡ༻ٕज़ݚڀձ
    WebΞϓϦέʔγϣϯςετΛ༻͍ͨ

    SQLΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏

    View Slide

  2. 1. ݚڀͷഎܠͱ໨త
    2. ैདྷͷϗϫΠτϦετࣗಈ࡞੒ख๏
    3. ఏҊख๏
    4. ࣮؀ڥͰͷ࣮ݧ
    5. ·ͱΊͱࠓޙͷ՝୊
    2
    ໨࣍

    View Slide

  3. 1.
    ݚڀͷഎܠͱ໨త

    View Slide

  4. • WebαʔϏεʹ͓͍ͯσʔλϕʔε্ͷػີ৘ใͷอޢ͸ॏཁ
    • ߈ܸऀ͸WebΞϓϦέʔγϣϯͷ੬ऑੑΛ͸͡Ίͱ༷ͯ͠ʑͳखஈͰػີ৘
    ใΛ઄औ
    • ߈ܸͷྫɿSQLΠϯδΣΫγϣϯɼOSίϚϯυΠϯδΣΫγϣϯͳͲ
    • σʔλϕʔε΁ͷ߈ܸ͸։ൃऀͷ૝ఆ֎ͷΫΤϦʢෆਖ਼ΫΤϦʣΛσʔλϕʔ
    εʹൃߦ͢Δ͜ͱͰ࣮ࢪ
    • σʔλϕʔεʹൃߦ͞ΕΔΫΤϦΛ؂ࢹ͠ෆਖ਼ΫΤϦΛݕ஌͢Δ࢓૊Έ͕ඞཁ
    4
    ݚڀͷഎܠ

    View Slide

  5. • ϒϥοΫϦετํࣜ
    • ෆਖ਼ͳΫΤϦύλʔϯΛϦετʹఆٛ͠ɼύλʔϯͱ߹க͢Δ΋ͷΛݕ஌͢Δ
    • ϗϫΠτϦετํࣜ
    • ਖ਼ৗͳΫΤϦύλʔϯΛϦετʹఆٛ͠ɼύλʔϯͱ߹க͠ͳ͍΋ͷΛݕ஌͢Δ
    ϒϥοΫϦετͷΈར༻Ͱ͸ط஌ͷύλʔϯ͔͠ݕ஌Ͱ͖ͳ͍͕ɼෆਖ਼ΫΤϦʹ͸ະ
    ஌ͷύλʔϯ΋͋ΓಘΔ
    ະ஌ͷύλʔϯͷݕ஌ʹ͸ϗϫΠτϦετ͕ඞཁͱͳΔ
    5
    ෆਖ਼ΫΤϦͷݕ஌ํ๏

    View Slide

  6. • WebΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦΛखಈͰϗϫΠτϦετʹొ࿥
    • େن໛ͳWebΞϓϦέʔγϣϯͰ͸ൃߦΫΤϦ͕๲େ
    → શͯͷΫΤϦΛϗϫΠτϦετʹొ࿥͢Δ͜ͱ͕ࠔ೉
    • WebΞϓϦέʔγϣϯͷվमʹΑͬͯൃߦΫΤϦ͸มԽ
    → ϗϫΠτϦετͷߋ৽͕ඞཁ
    6
    ϗϫΠτϦετ࡞੒ͱͦͷ՝୊
    ӡ༻ऀ΁ͷෛՙ͕ߴ͍

    View Slide

  7. • ։ൃӡ༻ऀ͕ϗϫΠτϦετͷ࡞੒Λҙࣝ͢Δ͜ͱͳ࣮͘ߦͰ͖ɼϗϫΠτϦ
    ετΛ༻͍ͯෆਖ਼ΫΤϦΛݕ஌͢Δ࢓૊Έͷ࣮ݱ
    • ϗϫΠτϦετ͸WebΞϓϦέʔγϣϯͷൃߦΫΤϦͷมߋʹ௥ै͠ͳ͕
    ΒࣗಈͰ࡞੒͢Δඞཁ͕͋Δ
    7
    ݚڀͷ໨త

    View Slide

  8. 2.
    ैདྷͷϗϫΠτϦετࣗಈ࡞੒ख๏

    View Slide

  9. • WebΞϓϦέʔγϣϯՔಈதʹൃߦ͞ΕͨΫΤϦ͔ΒϗϫΠτϦετΛ࡞੒
    • ൃߦ͞ΕͨΫΤϦΛར༻͢ΔͷͰɼWebΞϓϦέʔγϣϯͷ࣮૷ʹґଘ͠ͳ͍
    • ࣮૷ݴޠɼϑϨʔϜϫʔΫͳͲ
    9
    WebΞϓϦέʔγϣϯՔಈதͷΫΤϦΛ༻͍ͨख๏
    σʔλϕʔε
    8FCΞϓϦέʔγϣϯ
    ΫΤϦ
    ϗϫΠτϦετ
    8FCΞϓϦέʔγϣϯՔಇத
    )551ϦΫΤετ

    View Slide

  10. • WebΞϓϦέʔγϣϯՔಇޙɼଈ࠲ʹෆਖ਼ΫΤϦΛݕ஌Ͱ͖ͳ͍
    • ϗϫΠτϦετΛ࡞੒͢ΔͨΊʹɼՔಇதʹΫΤϦΛऩू͢Δظ͕ؒඞཁ
    • ΫΤϦͷऩूظؒத͸ෆਖ਼ΫΤϦͷݕ஌Λߦ͑ͳ͍
    • ෆਖ਼ΫΤϦΛݕ஌Ͱ͖ͳ͍ظ͕ؒଟൃ͢Δ
    • WebαʔϏεͷվमස౓͸ߴ͍ͨΊɼൃߦΫΤϦ͸සൟʹมԽ͢Δ
    10
    WebΞϓϦέʔγϣϯՔಈதͷΫΤϦΛ༻͍ͨख๏
    ϗϫΠτϦετͷ࡞੒͸8FCΞϓϦέʔγϣϯՔಈલʹߦ͏ඞཁ͕͋Δ

    View Slide

  11. • WebΞϓϦέʔγϣϯͷSQLจΛ૊ΈཱͯΔॲཧΛղੳ͠ɼൃߦ͞ΕΔΫΤ
    ϦͷύλʔϯΛྻڍ͢Δ
    • ιʔείʔυΛೖྗͱ͢Δ͜ͱͰɼWebΞϓϦέʔγϣϯՔಈલͷϗϫΠτ
    Ϧετ࡞੒ΛՄೳʹ͢Δ
    11
    ιʔείʔυղੳΛ༻͍ͨख๏
    ղੳث
    ιʔείʔυ
    ϗϫΠτϦετ
    8FCΞϓϦέʔγϣϯՔಈલ

    View Slide

  12. • ෳ਺ͷ࣮૷͕ҟͳΔWebΞϓϦέʔγϣϯͰ൚༻తʹར༻Ͱ͖ͳ͍
    • ιʔείʔυͷղੳ͕WebΞϓϦέʔγϣϯͷ࣮૷ݴޠ΍ϑϨʔϜϫʔΫʹ
    ґଘ͢Δ
    • WebαʔϏε͕༷ʑͳݴޠ΍ϑϨʔϜϫʔΫͰߏ੒͞Ε͍ͯΔ৔߹ɼͦΕͧΕ
    ʹରͯ͠ղੳثΛ࣮૷͢Δ͜ͱ͸ɼ࣮૷ͷ޻਺͕ଟ͍
    12
    ιʔείʔυղੳΛ༻͍ͨख๏
    8FCΞϓϦέʔγϣϯͷ࣮૷ʹґଘͤͣɼ౷Ұతʹ࣮ࢪͰ͖Δํ๏͕ඞཁ

    View Slide

  13. 3.
    ఏҊख๏

    View Slide

  14. 1. ϗϫΠτϦετͷ࡞੒ΛWebΞϓϦέʔγϣϯՔಈલʹߦ͏
    • Քಈޙʹଈ࣌ʹݕ஌Λߦ͏ͨΊ
    2. WebΞϓϦέʔγϣϯͷ࣮૷ʹґଘͤͣ౷Ұతʹ࣮ࢪͰ͖Δ
    • ద༻͢ΔWebΞϓϦέʔγϣϯ͝ͱͷ࣮૷ͷ޻਺Λ࡟ݮ͢ΔͨΊ
    14
    ఏҊख๏ͷཁ݅

    View Slide

  15. • WebΞϓϦέʔγϣϯͷςετ࣌ʹൃߦ͞ΕͨΫΤϦ͔ΒϗϫΠτϦετΛ
    ࡞੒͢Δ
    • ࣗಈςετΛ༻͍ͨ։ൃϓϩηεʹϗϫΠτϦετ࡞੒Λ૊ΈࠐΉ
    • ΫΤϦͷऩू͸σʔλϕʔεϓϩΩγͰߦ͏
    15
    ఏҊख๏ͷ֓ཁ

    View Slide

  16. 16
    ࣗಈςετΛ༻͍ͨ։ൃϓϩηε
    w ৽ػೳͷ௥Ճ
    w طଘػೳͷमਖ਼
    w 8FCΞϓϦέʔγϣϯͷಈ࡞खॱͱಈ࡞ͷ݁ՌΛهड़
    w ςετίʔυΛݩʹࣗಈͰςετΛ࣮ߦ
    w 8FCΞϓϦέʔγϣϯͷಈ࡞͕࢓༷௨Γ͔Λ֬ೝ
    w ςετࣦഊɿ8FCΞϓϦέʔγϣϯͷιʔείʔυ΋
    ͘͠͸ςετίʔυʹ໰୊͋Γ
    w ςετ੒ޭɿ8FCΞϓϦέʔγϣϯ͕࢓༷௨Γʹಈ࡞
    w 8FCΞϓϦέʔγϣϯͷιʔείʔυΛαʔόʹ഑ஔ
    w 8FCΞϓϦέʔγϣϯΛՔಇ

    ։ൃ

    ςετίʔυͷهड़

    αʔόʔʹ഑ஔ

    ࣗಈςετ࣮ߦ
    /P
    :FT

    ΞϓϦέʔγϣϯՔಇ
    ςετ੒ޭʁ

    View Slide

  17. 17
    w ςετ࣌ʹൃߦ͞ΕͨΫΤϦ͔ΒϗϫΠτϦετΛ

    ࡞੒
    w ҎԼΛͦΕͧΕαʔόʹ഑ஔ
    w 8FCΞϓϦέʔγϣϯͷιʔείʔυ
    w ϗϫΠτϦετ
    ։ൃϓϩηεʹ͓͚ΔఏҊख๏ͷҐஔ෇͚
    w 8FCΞϓϦέʔγϣϯͷมߋʹ௥ैͯ͠ςετίʔυ
    ΋มߋ
    ˠൃߦΫΤϦͷมԽʹ௥ैͯ͠ϗϫΠτϦετΛߋ৽
    w 8FCΞϓϦέʔγϣϯՔಈલʹϗϫΠτϦετ࡞੒
    ˠՔಈޙɼଈ࠲ʹෆਖ਼ΫΤϦΛݕ஌Մೳ

    ։ൃ

    ςετίʔυͷهड़

    αʔόʔʹ഑ஔ
    /P
    :FT

    ΞϓϦέʔγϣϯՔಇ
    ςετ੒ޭʁ
    ΫΤϦͷऩू

    `ࣗಈςετ࣮ߦ
    ϗϫΠτϦετ࡞੒

    View Slide

  18. 18
    ఏҊख๏ͷઃܭɿϗϫΠτϦετ࡞੒
    • σʔλϕʔεϓϩΩγΛ഑ஔ͠ɼςετ࣮ߦதʹൃߦ͞ΕͨΫΤϦΛऩू
    • ऩूͨ͠ΫΤϦͷϦςϥϧ஋ΛϓϨʔεϗϧμʔʹஔ͖׵͑ͨΫΤϦߏ଄ʹม׵͠ɼϗ
    ϫΠτϦετʹొ࿥
    • ΫΤϦ͔ΒϗϫΠτϦετΛ࡞Δ͜ͱͰɼWebΞϓϦέʔγϣϯͷ࣮૷ʹґଘͤͣɼϗ
    ϫΠτϦετΛ࡞੒Մೳ
    σʔλϕʔε
    8FCΞϓϦέʔγϣϯ σʔλϕʔεϓϩΩγ
    ϗϫΠτϦετ
    ΫΤϦͷऩूͱ
    ΫΤϦߏ଄΁ͷม׵
    ΫΤϦ ΫΤϦ
    4&-&$5'30.VTFST8)&3&JE
    4&-&$5'30.VTFST8)&3&JE
    ΫΤϦߏ଄΁ͷม׵ͷྫ

    View Slide

  19. 19
    ఏҊख๏ͷઃܭɿՔಇ࣌ͷݕ஌
    • ൃߦΫΤϦΛΫΤϦߏ଄ʹม׵͠ϗϫΠτϦετͱর߹͢Δ͜ͱͰɼෆਖ਼ΫΤϦ
    Λݕ஌
    σʔλϕʔε
    8FCΞϓϦέʔγϣϯ
    σʔλϕʔεϓϩΩγ
    8FCΞϓϦέʔγϣϯՔಇத
    ΫΤϦ ΫΤϦ
    ൃߦΫΤϦΛΫΤϦߏ଄ʹม׵͠
    ϗϫΠτϦετͱর߹
    ෆਖ਼ΫΤϦ
    ग़ྗ
    ϗϫΠτϦετ

    View Slide

  20. 4.
    ࣮؀ڥͰͷ࣮ݧ

    View Slide

  21. • ఏҊख๏ͷݕ஌ਫ਼౓ΛධՁ͢ΔͨΊʹɼҎԼͷ2ͭͷධՁࢦඪΛఆٛ͢Δ
    • False positive: ਖ਼ৗͳΫΤϦΛޡͬͯෆਖ਼ͱ൑அ͢Δ͜ͱ
    • ਖ਼ৗͳΫΤϦͱ͸ɼ։ൃऀ͕૝ఆ͢ΔೖྗʹΑͬͯWebΞϓϦέʔγϣ
    ϯ͕ൃߦ͢ΔΫΤϦ
    • False negative: ෆਖ਼ΫΤϦΛޡͬͯਖ਼ৗͱ൑அ͢Δ͜ͱ
    • ෆਖ਼ΫΤϦͱ͸ɼ߈ܸʹΑͬͯൃߦ͞ΕΔ։ൃऀͷ૝ఆ֎ͷΫΤϦ
    21
    ධՁࢦඪ

    View Slide

  22. • ఏҊख๏͸ςετ࣌ͷΫΤϦ͔ΒϗϫΠτϦετΛ࡞੒͢ΔͷͰɼςετ࣌ͱՔಇ࣌ͷΫΤϦ
    ͷؔ܎͕ݕ஌ਫ਼౓ʹӨڹΛ༩͑Δ
    22
    False positive / negativeͷཁҼͱͳΔΫΤϦ
    Քಇ࣌ʹൃߦ͞ΕΔΫΤϦ
    ςετ࣌ʹൃߦ͞ΕΔΫΤϦ
    • ςετ࣌ʹ͔͠ൃߦ͞Εͳ͍ཧ༝
    • ςετσʔλͷొ࿥ɼҰׅ࡟আ
    ͳͲͷૢ࡞Λߦ͏ΫΤϦ͕͋Δ
    • Քಇ࣌ʹ͔͠ൃߦ͞Εͳ͍ཧ༝
    • ςετέʔε͸Քಇ࣌ͷ࣮ߦύ
    λʔϯͷҰ෦ͳͷͰɼՔಇ࣌ͷ
    ΫΤϦΛ໢ཏͰ͖ͳ͍
    'BMTFOFHBUJWFͷཁҼ 'BMTFQPTJUJWFͷཁҼ

    View Slide

  23. • False positive / negativeͷཁҼͱͳΔΫΤϦ͕࣮؀ڥʹ͓͍ͯͲͷఔ౓ؚ·
    ΕΔ͔Λ֬ೝ͢Δ࣮ݧΛߦͬͨ
    • ࣮؀ڥͷΫΤϦϩά͸ٳ೔ͷ3೔෼Λऔಘͨ͠
    • ٳ೔ͷΫΤϦϩάΛऔಘͨ͠ͷ͸ɼWebΞϓϦέʔγϣϯͷߋ৽ʹΑΔ
    ൃߦΫΤϦͷมԽΛഉআ͢ΔͨΊ
    • ςετ࣌ͷΫΤϦ͸ΫΤϦϩάͷظؒʹՔಇ͍ͯͨ͠WebΞϓϦέʔγϣ
    ϯΛར༻ͯ͠औಘͨ͠
    23
    ࣮؀ڥͰͷ࣮ݧ

    View Slide

  24. • ΫΤϦΛΫΤϦߏ଄ʹม׵ͯ͠ूܭ
    24
    ࣮؀ڥͰͷ࣮ݧ݁Ռ
    ࣮؀ڥͰൃߦ͞ΕͨΫΤϦߏ଄ʢΫΤϦϩάʣ
    ςετ࣌ʹൃߦ͞ΕͨΫΤϦߏ଄


    ςετ࣌ͱ࣮؀ڥͰൃߦ͞ΕͨΫΤϦߏ଄ͷ૯਺ɿ
    'BMTFQPTJUJWFͷཁҼͱͳΔ
    ΫΤϦ
    'BMTFOFHBUJWFͷཁҼͱ
    ͳΔΫΤϦ

    View Slide

  25. • શͯਖ਼ৗͳॲཧʹΑͬͯൃߦ͞Εͨ΋ͷ
    • ςετ࣌ʹൃߦ͞Εͳ͔ͬͨཧ༝ɿ
    ɹ ςετέʔεͷܽ೗ɼDB΁ͷΞΫηεলུ
    • ࠜຊతʹରॲ͢ΔͨΊʹ͸ɼ͜ΕΒͷΫΤϦΛϗϫΠτϦετ
    ʹิ͏ํ๏͕ඞཁ
    • ఏҊख๏Λద༻͢ΔςʔϒϧΛݶఆͯ͠ݕ஌ର৅ͷΫΤϦ਺Λ
    ݮΒ͢
    • ػີ৘ใ͕อ؅͞Εͨςʔϒϧͷૢ࡞Λߦ͏ΫΤϦΛݕ஌
    ର৅ͱ͢Δ
    25
    False positiveͷཁҼͱͳΔΫΤϦͷߟ࡯


    ࣮؀ڥͰൃߦ͞ΕͨΫΤϦߏ଄ʢΫΤϦϩάʣ
    ςετ࣌ʹൃߦ͞ΕͨΫΤϦߏ଄

    View Slide

  26. • ͜ͷྖҬʹ͸2छྨͷΫΤϦؚ͕·Ε͍ͯͨ
    1. ࣮؀ڥͰൃߦ͞ΕΔ͕ΫΤϦϩάͷظؒͰ͸ൃߦ͞Εͳ
    ͔ͬͨΫΤϦ
    2. ςετͰͷΈൃߦ͞ΕΔΫΤϦ
    • 2.ͷΫΤϦʹ͸ɼػີ৘ใ͕อ؅͞Εͨςʔϒϧͷશ࡟আͳͲͷ
    ૢ࡞Λߦ͏΋ͷ͕͋ͬͨ
    • ϒϥοΫϦετͱϗϫΠτϦετΛ૊Έ߹Θͤͯଟ૚తʹ๷͙
    • Өڹൣғ͕େ͖͍ʢσʔλͷҰׅ࡟আͳͲʣΫΤϦ͸༧Ίϒ
    ϥοΫϦετʹఆ͓ٛͯ͘͠
    26
    False negativeͷཁҼͱͳΔΫΤϦͷߟ࡯


    ࣮؀ڥͰൃߦ͞ΕͨΫΤϦߏ଄ʢΫΤϦϩάʣ
    ςετ࣌ʹൃߦ͞ΕͨΫΤϦߏ଄

    View Slide

  27. 5.
    ·ͱΊͱࠓޙͷ՝୊

    View Slide

  28. • ϗϫΠτϦετ࡞੒ͷෛՙΛܰݮ͢ΔͨΊʹɼςετ࣌ʹൃߦ͞ΕΔΫΤϦΛ
    ༻͍ͯϗϫΠτϦετΛ࡞੒͢Δख๏ΛఏҊͨ͠
    • WebΞϓϦέʔγϣϯͷ࣮૷ʹґଘͤͣɼՔಇޙɼଈ࠲ʹෆਖ਼ΫΤϦΛݕ
    ஌Ͱ͖Δ
    • ࣮؀ڥͰͷ࣮ݧʹΑΓɼFalse positive / negativeཁҼͱͳΔΫΤϦ͕͋Δ͜
    ͱ͕֬ೝ͞Εͨ
    28
    ·ͱΊ

    View Slide

  29. • False positiveͷཁҼͱͳΔΫΤϦ΁ͷରॲ๏ͷݕ౼
    • ख๏ͷద༻Λςʔϒϧ୯ҐͰ੍ݶͨ͠৔߹ͷFalse positiveΛධՁ
    • ϗϫΠτϦετʹෆ଍͍ͯ͠ΔΫΤϦΛิ׬͢Δํ๏ͷௐࠪ
    • False negativeͷཁҼͱͳΔΫΤϦ΁ͷରॲ๏ͷݕ౼
    • ϒϥοΫϦετͱϗϫΠτϦετΛซ༻ͨ͠৔߹ͷFalse negativeΛධՁ
    29
    ࠓޙͷ՝୊

    View Slide