Pro Yearly is on sale from $80 to $50! »

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回インターネットと運用技術研究会

Ec3fcf78fa2ad21dcc48478df80e0dc4?s=128

Komei Nomura

June 14, 2019
Tweet

Transcript

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

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

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

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

    • σʔλϕʔεʹൃߦ͞ΕΔΫΤϦΛ؂ࢹ͠ෆਖ਼ΫΤϦΛݕ஌͢Δ࢓૊Έ͕ඞཁ 4 ݚڀͷഎܠ
  5. • ϒϥοΫϦετํࣜ • ෆਖ਼ͳΫΤϦύλʔϯΛϦετʹఆٛ͠ɼύλʔϯͱ߹க͢Δ΋ͷΛݕ஌͢Δ • ϗϫΠτϦετํࣜ • ਖ਼ৗͳΫΤϦύλʔϯΛϦετʹఆٛ͠ɼύλʔϯͱ߹க͠ͳ͍΋ͷΛݕ஌͢Δ ϒϥοΫϦετͷΈར༻Ͱ͸ط஌ͷύλʔϯ͔͠ݕ஌Ͱ͖ͳ͍͕ɼෆਖ਼ΫΤϦʹ͸ະ ஌ͷύλʔϯ΋͋ΓಘΔ

    ະ஌ͷύλʔϯͷݕ஌ʹ͸ϗϫΠτϦετ͕ඞཁͱͳΔ 5 ෆਖ਼ΫΤϦͷݕ஌ํ๏
  6. • WebΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦΛखಈͰϗϫΠτϦετʹొ࿥ • େن໛ͳWebΞϓϦέʔγϣϯͰ͸ൃߦΫΤϦ͕๲େ → શͯͷΫΤϦΛϗϫΠτϦετʹొ࿥͢Δ͜ͱ͕ࠔ೉ • WebΞϓϦέʔγϣϯͷվमʹΑͬͯൃߦΫΤϦ͸มԽ → ϗϫΠτϦετͷߋ৽͕ඞཁ

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

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

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

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

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

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

    8FCΞϓϦέʔγϣϯͷ࣮૷ʹґଘͤͣɼ౷Ұతʹ࣮ࢪͰ͖Δํ๏͕ඞཁ
  13. 3. ఏҊख๏

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

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

  16. 16 ࣗಈςετΛ༻͍ͨ։ൃϓϩηε w ৽ػೳͷ௥Ճ w طଘػೳͷमਖ਼ w 8FCΞϓϦέʔγϣϯͷಈ࡞खॱͱಈ࡞ͷ݁ՌΛهड़ w ςετίʔυΛݩʹࣗಈͰςετΛ࣮ߦ

    w 8FCΞϓϦέʔγϣϯͷಈ࡞͕࢓༷௨Γ͔Λ֬ೝ w ςετࣦഊɿ8FCΞϓϦέʔγϣϯͷιʔείʔυ΋ ͘͠͸ςετίʔυʹ໰୊͋Γ w ςετ੒ޭɿ8FCΞϓϦέʔγϣϯ͕࢓༷௨Γʹಈ࡞ w 8FCΞϓϦέʔγϣϯͷιʔείʔυΛαʔόʹ഑ஔ w 8FCΞϓϦέʔγϣϯΛՔಇ  ։ൃ  ςετίʔυͷهड़  αʔόʔʹ഑ஔ  ࣗಈςετ࣮ߦ /P :FT  ΞϓϦέʔγϣϯՔಇ ςετ੒ޭʁ
  17. 17 w ςετ࣌ʹൃߦ͞ΕͨΫΤϦ͔ΒϗϫΠτϦετΛ
 ࡞੒ w ҎԼΛͦΕͧΕαʔόʹ഑ஔ w 8FCΞϓϦέʔγϣϯͷιʔείʔυ w ϗϫΠτϦετ

    ։ൃϓϩηεʹ͓͚ΔఏҊख๏ͷҐஔ෇͚ w 8FCΞϓϦέʔγϣϯͷมߋʹ௥ैͯ͠ςετίʔυ ΋มߋ ˠൃߦΫΤϦͷมԽʹ௥ैͯ͠ϗϫΠτϦετΛߋ৽ w 8FCΞϓϦέʔγϣϯՔಈલʹϗϫΠτϦετ࡞੒ ˠՔಈޙɼଈ࠲ʹෆਖ਼ΫΤϦΛݕ஌Մೳ  ։ൃ  ςετίʔυͷهड़  αʔόʔʹ഑ஔ /P :FT  ΞϓϦέʔγϣϯՔಇ ςετ੒ޭʁ ΫΤϦͷऩू  `ࣗಈςετ࣮ߦ ϗϫΠτϦετ࡞੒
  18. 18 ఏҊख๏ͷઃܭɿϗϫΠτϦετ࡞੒ • σʔλϕʔεϓϩΩγΛ഑ஔ͠ɼςετ࣮ߦதʹൃߦ͞ΕͨΫΤϦΛऩू • ऩूͨ͠ΫΤϦͷϦςϥϧ஋ΛϓϨʔεϗϧμʔʹஔ͖׵͑ͨΫΤϦߏ଄ʹม׵͠ɼϗ ϫΠτϦετʹొ࿥ • ΫΤϦ͔ΒϗϫΠτϦετΛ࡞Δ͜ͱͰɼWebΞϓϦέʔγϣϯͷ࣮૷ʹґଘͤͣɼϗ ϫΠτϦετΛ࡞੒Մೳ

    σʔλϕʔε 8FCΞϓϦέʔγϣϯ σʔλϕʔεϓϩΩγ ϗϫΠτϦετ ΫΤϦͷऩूͱ ΫΤϦߏ଄΁ͷม׵ ΫΤϦ ΫΤϦ 4&-&$5 '30.VTFST8)&3&JE 4&-&$5 '30.VTFST8)&3&JE ΫΤϦߏ଄΁ͷม׵ͷྫ
  19. 19 ఏҊख๏ͷઃܭɿՔಇ࣌ͷݕ஌ • ൃߦΫΤϦΛΫΤϦߏ଄ʹม׵͠ϗϫΠτϦετͱর߹͢Δ͜ͱͰɼෆਖ਼ΫΤϦ Λݕ஌ σʔλϕʔε 8FCΞϓϦέʔγϣϯ σʔλϕʔεϓϩΩγ 8FCΞϓϦέʔγϣϯՔಇத ΫΤϦ

    ΫΤϦ ൃߦΫΤϦΛΫΤϦߏ଄ʹม׵͠ ϗϫΠτϦετͱর߹ ෆਖ਼ΫΤϦ ग़ྗ ϗϫΠτϦετ
  20. 4. ࣮؀ڥͰͷ࣮ݧ

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

    False negative: ෆਖ਼ΫΤϦΛޡͬͯਖ਼ৗͱ൑அ͢Δ͜ͱ • ෆਖ਼ΫΤϦͱ͸ɼ߈ܸʹΑͬͯൃߦ͞ΕΔ։ൃऀͷ૝ఆ֎ͷΫΤϦ 21 ධՁࢦඪ
  22. • ఏҊख๏͸ςετ࣌ͷΫΤϦ͔ΒϗϫΠτϦετΛ࡞੒͢ΔͷͰɼςετ࣌ͱՔಇ࣌ͷΫΤϦ ͷؔ܎͕ݕ஌ਫ਼౓ʹӨڹΛ༩͑Δ 22 False positive / negativeͷཁҼͱͳΔΫΤϦ Քಇ࣌ʹൃߦ͞ΕΔΫΤϦ ςετ࣌ʹൃߦ͞ΕΔΫΤϦ

    • ςετ࣌ʹ͔͠ൃߦ͞Εͳ͍ཧ༝ • ςετσʔλͷొ࿥ɼҰׅ࡟আ ͳͲͷૢ࡞Λߦ͏ΫΤϦ͕͋Δ • Քಇ࣌ʹ͔͠ൃߦ͞Εͳ͍ཧ༝ • ςετέʔε͸Քಇ࣌ͷ࣮ߦύ λʔϯͷҰ෦ͳͷͰɼՔಇ࣌ͷ ΫΤϦΛ໢ཏͰ͖ͳ͍ 'BMTFOFHBUJWFͷཁҼ 'BMTFQPTJUJWFͷཁҼ
  23. • False positive / negativeͷཁҼͱͳΔΫΤϦ͕࣮؀ڥʹ͓͍ͯͲͷఔ౓ؚ· ΕΔ͔Λ֬ೝ͢Δ࣮ݧΛߦͬͨ • ࣮؀ڥͷΫΤϦϩά͸ٳ೔ͷ3೔෼Λऔಘͨ͠ • ٳ೔ͷΫΤϦϩάΛऔಘͨ͠ͷ͸ɼWebΞϓϦέʔγϣϯͷߋ৽ʹΑΔ

    ൃߦΫΤϦͷมԽΛഉআ͢ΔͨΊ • ςετ࣌ͷΫΤϦ͸ΫΤϦϩάͷظؒʹՔಇ͍ͯͨ͠WebΞϓϦέʔγϣ ϯΛར༻ͯ͠औಘͨ͠ 23 ࣮؀ڥͰͷ࣮ݧ
  24. • ΫΤϦΛΫΤϦߏ଄ʹม׵ͯ͠ूܭ 24 ࣮؀ڥͰͷ࣮ݧ݁Ռ ࣮؀ڥͰൃߦ͞ΕͨΫΤϦߏ଄ʢΫΤϦϩάʣ ςετ࣌ʹൃߦ͞ΕͨΫΤϦߏ଄    ςετ࣌ͱ࣮؀ڥͰൃߦ͞ΕͨΫΤϦߏ଄ͷ૯਺ɿ

    'BMTFQPTJUJWFͷཁҼͱͳΔ ΫΤϦ 'BMTFOFHBUJWFͷཁҼͱ ͳΔΫΤϦ
  25. • શͯਖ਼ৗͳॲཧʹΑͬͯൃߦ͞Εͨ΋ͷ • ςετ࣌ʹൃߦ͞Εͳ͔ͬͨཧ༝ɿ ɹ ςετέʔεͷܽ೗ɼDB΁ͷΞΫηεলུ • ࠜຊతʹରॲ͢ΔͨΊʹ͸ɼ͜ΕΒͷΫΤϦΛϗϫΠτϦετ ʹิ͏ํ๏͕ඞཁ •

    ఏҊख๏Λద༻͢ΔςʔϒϧΛݶఆͯ͠ݕ஌ର৅ͷΫΤϦ਺Λ ݮΒ͢ • ػີ৘ใ͕อ؅͞Εͨςʔϒϧͷૢ࡞Λߦ͏ΫΤϦΛݕ஌ ର৅ͱ͢Δ 25 False positiveͷཁҼͱͳΔΫΤϦͷߟ࡯    ࣮؀ڥͰൃߦ͞ΕͨΫΤϦߏ଄ʢΫΤϦϩάʣ ςετ࣌ʹൃߦ͞ΕͨΫΤϦߏ଄
  26. • ͜ͷྖҬʹ͸2छྨͷΫΤϦؚ͕·Ε͍ͯͨ 1. ࣮؀ڥͰൃߦ͞ΕΔ͕ΫΤϦϩάͷظؒͰ͸ൃߦ͞Εͳ ͔ͬͨΫΤϦ 2. ςετͰͷΈൃߦ͞ΕΔΫΤϦ • 2.ͷΫΤϦʹ͸ɼػີ৘ใ͕อ؅͞Εͨςʔϒϧͷશ࡟আͳͲͷ ૢ࡞Λߦ͏΋ͷ͕͋ͬͨ

    • ϒϥοΫϦετͱϗϫΠτϦετΛ૊Έ߹Θͤͯଟ૚తʹ๷͙ • Өڹൣғ͕େ͖͍ʢσʔλͷҰׅ࡟আͳͲʣΫΤϦ͸༧Ίϒ ϥοΫϦετʹఆ͓ٛͯ͘͠ 26 False negativeͷཁҼͱͳΔΫΤϦͷߟ࡯    ࣮؀ڥͰൃߦ͞ΕͨΫΤϦߏ଄ʢΫΤϦϩάʣ ςετ࣌ʹൃߦ͞ΕͨΫΤϦߏ଄
  27. 5. ·ͱΊͱࠓޙͷ՝୊

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

    negativeཁҼͱͳΔΫΤϦ͕͋Δ͜ ͱ͕֬ೝ͞Εͨ 28 ·ͱΊ
  29. • False positiveͷཁҼͱͳΔΫΤϦ΁ͷରॲ๏ͷݕ౼ • ख๏ͷద༻Λςʔϒϧ୯ҐͰ੍ݶͨ͠৔߹ͷFalse positiveΛධՁ • ϗϫΠτϦετʹෆ଍͍ͯ͠ΔΫΤϦΛิ׬͢Δํ๏ͷௐࠪ • False

    negativeͷཁҼͱͳΔΫΤϦ΁ͷରॲ๏ͷݕ౼ • ϒϥοΫϦετͱϗϫΠτϦετΛซ༻ͨ͠৔߹ͷFalse negativeΛධՁ 29 ࠓޙͷ՝୊