Webアプリケーションテストを用いた
SQLクエリのホワイトリスト自動作成手法 / Automatic Whitelist Generation for SQL Queries Using Web Application Test

Webアプリケーションテストを用いた
SQLクエリのホワイトリスト自動作成手法 / Automatic Whitelist Generation for SQL Queries Using Web Application Test

野村孔命, 力武健次*, 松本亮介 / ペパボ研究所 / *力武健次技術士事務所
2018.05.18 第41回 情報処理学会 インターネットと運用技術研究会

Ec3fcf78fa2ad21dcc48478df80e0dc4?s=128

Komei Nomura

May 18, 2018
Tweet

Transcript

  1. ໺ଜ޸໋, ྗ෢݈࣍*, দຊ྄հ / ϖύϘݚڀॴ / *ྗ෢݈ٕ࣍ज़࢜ࣄ຿ॴ 2018.05.18 ୈ41ճ ৘ใॲཧֶձ

    Πϯλʔωοτͱӡ༻ٕज़ݚڀձ WebΞϓϦέʔγϣϯςετΛ༻͍ͨ
 SQLΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏
  2. 1. ݚڀͷഎܠͱ՝୊ 2. ैདྷͷෆਖ਼ΫΤϦݕ஌ͷ՝୊ 3. ఏҊख๏ 4. ·ͱΊͱࠓޙͷ՝୊ 2 ໨࣍

  3. 1. ݚڀͷഎܠͱ՝୊

  4. • WebΞϓϦέʔγϣϯʢWebΞϓϦʣͷ੬ऑੑΛར༻ͨ͠߈ܸ͸ޙΛઈͨͳ͍ • WebαʔϏε͕อ༗͢Δൿີ৘ใ͕࿙Ӯ͢Δඃ֐͕ൃੜ • WebΞϓϦ͕ར༻͢Δσʔλϕʔεʹෆਖ਼ΫΤϦΛൃߦͯ͠ߦΘΕΔ • 1ͭͷෆਖ਼ΫΤϦ͕େن໛ͳ৘ใ࿙ӮΛҾ͖ى͜͢͜ͱ΋͋Δ • ෆਖ਼ΫΤϦΛݕ஌͠σʔλϕʔεͰͷ࣮ߦΛఀࢭ͢Δରࡦ͕ඞཁ

    4 ݚڀͷഎܠ
  5. • WebΞϓϦ͕ൃߦ͢ΔΫΤϦͷϗϫΠτϦετΛखಈͰ࡞੒ͯ͠ݕ஌ • େن໛ͰෳࡶͳWebΞϓϦͰ͸ϗϫΠτϦετͷ࡞੒͕ࠔ೉ • WebΞϓϦͷվमʹΑΔϗϫΠτϦετͷ؅ཧ͕ࠔ೉ • ӡ༻ऀ΁ͷෛ୲͕େ͖͍ • ղܾࡦͱͯ͠ϗϫΠτϦετΛࣗಈͰ࡞੒͢Δख๏͕ఏҊ

    5 ैདྷͷෆਖ਼ΫΤϦݕ஌ํ๏
  6. • WebΞϓϦՔಇ࣌ʹൃߦ͞ΕΔΫΤϦΛ༻͍ͯ࡞੒͢Δख๏ • WebΞϓϦՔಇޙɼଈ࣌ʹෆਖ਼ΫΤϦΛݕ஌Ͱ͖ͳ͍ • WebΞϓϦͷιʔείʔυΛղੳͯ͠࡞੒͢Δख๏ • WebΞϓϦͷ࣮૷ґଘͷͨΊɼ൚༻తʹར༻Ͱ͖ͳ͍ 6 ैདྷͷϗϫΠτϦετࣗಈ࡞੒ख๏

  7. • WebΞϓϦέʔγϣϯςετΛ༻͍ͨΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏ • WebΞϓϦՔಈલʹϗϫΠτϦετ࡞੒ɹ→ɹଈ࣌ʹෆਖ਼ΫΤϦΛݕ஌ • WebΞϓϦͷ࣮૷ʹґଘ͠ͳ͍ɹ→ ෳ਺ͷWebΞϓϦͰ൚༻తʹར༻Մೳ • ಋೖ࣌ͷ։ൃϓϩηε΁ͷӨڹ͕গͳ͍ɹ→ɹ։ൃऀͷӨڹΛܰݮ 7

    ఏҊख๏
  8. 2. ैདྷͷෆਖ਼ΫΤϦݕ஌ͷ՝୊

  9. • WebΞϓϦ͕ൃߦ͢ΔΫΤϦͷϗϫΠτϦετΛखಈͰ࡞੒ͯ͠ݕ஌ • WebαʔϏεͷ։ൃ͕ਐΉʹ൐͍ɼWebΞϓϦ͕େن໛ԽɾෳࡶԽ • WebΞϓϦ͕ൃߦ͢ΔΫΤϦ͕૿େɹ • WebαʔϏε͸࢓༷มߋʹΑΓWebΞϓϦ͕ൃߦ͢ΔΫΤϦ͕มԽ • ൃߦ͢ΔΫΤϦͱϗϫΠτϦετͷ੔߹ੑΛऔΔඞཁ͋Γ

    • WebαʔϏεӡ༻ऀͷෛ୲͕૿େ͠ӡ༻͕ࠔ೉Խ 9 ैདྷͷෆਖ਼ΫΤϦݕ஌ํ๏ͱ՝୊
  10. • WebΞϓϦ͕ൃߦ͢ΔΫΤϦ͸࣮ࡍʹൃߦ͞ΕͨΫΤϦ΍ιʔείʔυ͔Β ݶఆͰ͖Δ • ϗϫΠτϦετΛࣗಈͰ࡞੒͢Δख๏͕ఏҊ͞Ε͍ͯΔ • WebΞϓϦՔಇ࣌ʹൃߦ͞ΕͨΫΤϦΛ༻͍ͯ࡞੒ • WebΞϓϦͷιʔείʔυΛղੳͯ͠࡞੒ 10

    ෆਖ਼ΫΤϦݕ஌ͷ՝୊ʹର͢Δैདྷख๏
  11. • WebΞϓϦՔಇ࣌ʹൃߦ͞ΕͨΫΤϦΛ༻͍ͯϗϫΠτϦετΛ࡞੒ • ൃߦ͞ΕͨΫΤϦΛߏจղੳͯ͠ɼΫΤϦߏ଄ʹͯ͠ొ࿥ • ΫΤϦߏ଄͸ΫΤϦͷϦςϥϧ஋ΛϓϨʔεϗϧμʔʹஔ͖׵͑ͨ΋ͷ 11 ൃߦ͞ΕͨΫΤϦΛ༻͍ͨख๏ σʔλϕʔε 8FCΞϓϦ

    ΫΤϦ ϗϫΠτϦετ 8FCΞϓϦՔಇ࣌ 4&-&$5 '30.VTFST8)&3&JE 4&-&$5 '30.VTFST8)&3&JE Ϧςϥϧ ΫΤϦߏ଄ͷྫ
  12. • ϝϦοτ • WebΞϓϦͷ࣮૷ʹґଘͤͣϗϫΠτϦετΛ࡞੒Մೳ • σϝϦοτ • ϗϫΠτϦετ࡞੒த͸ෆਖ਼ΫΤϦͷݕ஌͕Ͱ͖ͳ͍ • WebΞϓϦՔಇ࣌ʹϗϫΠτϦετ࡞੒ͱෆਖ਼ΫΤϦݕ஌͕ࠞࡏ

    • WebαʔϏεͷվमස౓͕ߴ͍͜ͱ͔Βݕ஌Ͱ͖ͳ͍λΠϛϯά͕ଟൃ • ϗϫΠτϦετͷ࡞੒͸WebΞϓϦՔಈલʹߦ͏ඞཁ͕͋Δ 12 ൃߦ͞ΕͨΫΤϦΛ༻͍ͨख๏ͷϝϦοτɾσϝϦοτ
  13. • WebΞϓϦͷιʔείʔυΛղੳͯ͠ϗϫΠτϦετΛ࡞੒ • ιʔείʔυதͷSQLΛ૊Έཱ͍ͯͯΔ෦෼ͷจࣈྻॲཧΛղੳͯ͠
 ൃߦ͞Ε͏ΔΫΤϦύλʔϯΛྻڍ • WebΞϓϦͷՔಈલʹϗϫΠτϦετ࡞੒ 13 ιʔείʔυղੳΛ༻͍ͨख๏ ղੳث

    ιʔείʔυ ϗϫΠτϦετ 8FCΞϓϦՔಈલ
  14. • ϝϦοτ • WebΞϓϦՔಈޙɼଈ࣌ʹෆਖ਼ΫΤϦݕ஌͕Մೳ • σϝϦοτ • ιʔείʔυղੳ͕WebΞϓϦͷ࣮૷ʹґଘ͢ΔͨΊ൚༻తʹར༻ෆՄ • WebαʔϏε͸࣮૷ʹ༷ʑͳݴޠ΍ORM*Λར༻

    • WebΞϓϦͷ࣮૷ʹґଘ͠ͳ͍ํ๏͕ඞཁ 14 ιʔείʔυղੳΛ༻͍ͨख๏ͷϝϦοτɾσϝϦοτ *Scott W. Ambler, Mapping objects to relational databases What you need to know and why Ronin International, July 2000
  15. 3. ఏҊख๏

  16. • ैདྷख๏ͷ՝୊͔ΒఏҊख๏͸ҎԼͷཁ݅Λຬͨ͢ඞཁ͕͋Δ • WebΞϓϦՔಈલʹϗϫΠτϦετ࡞੒ɹ→ɹଈ࣌ʹෆਖ਼ΫΤϦΛݕ஌ • WebΞϓϦͷ࣮૷ʹґଘ͠ͳ͍ɹ→ ෳ਺ͷWebΞϓϦͰ൚༻తʹར༻Մೳ • ಋೖ࣌ͷ։ൃϓϩηε΁ͷӨڹ͕গͳ͍ɹ→ɹ։ൃऀͷӨڹΛܰݮ 16

    ఏҊख๏ͷཁ݅
  17. • WebΞϓϦέʔγϣϯςετΛ༻͍ͨΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏ • ։ൃϓϩηεʹࣗಈςετ͕૊Έࠐ·Ε͍ͯΔલఏ • ςετ࣌ʹϗϫΠτϦετΛࣗಈͰ࡞੒͢ΔॲཧΛ௥Ճ • ։ൃϓϩηεͷӨڹܰݮɼWebΞϓϦՔಈલʹϗϫΠτϦετ࡞੒ • ςετ࣌ʹൃߦ͞ΕͨΫΤϦΛ༻͍ͯϗϫΠτϦετΛ࡞੒

    • WebΞϓϦͷ࣮૷ʹґଘ͠ͳ͍ 17 ఏҊख๏֓ཁ
  18. 18 લఏͱ͢ΔࣗಈςετΛ༻͍ͨ։ൃϓϩηε ։ൃ ςετίʔυهड़ αʔόʹ഑ஔ ࣗಈςετ /P :FT ӡ༻։࢝ ςετ੒ޭ

    w ৽ػೳͷ௥Ճ w طଘػೳͷमਖ਼ w 8FCΞϓϦΛಈ࡞ͤ͞Δखॱͱಈ࡞ͷ݁ՌΛهड़ w ςετίʔυΛݩʹࣗಈͰςετΛ࣮ߦ w 8FCΞϓϦͷಈ࡞͕࢓༷௨Γ͔Λ֬ೝ w ςετࣦഊɿ8FCΞϓϦͷιʔείʔυ΋͘͠͸ ςετίʔυʹ໰୊͋Γ w ςετ੒ޭɿ8FCΞϓϦ͕࢓༷௨Γʹಈ࡞ w ৽͍͠8FCΞϓϦͷιʔείʔυΛαʔόʹ഑ஔ w ৽͍͠8FCΞϓϦͷӡ༻Λ։࢝
  19. 19 ։ൃ ςετίʔυهड़ αʔόʹ഑ஔ ࣗಈςετ ʴ ϗϫΠτϦετ࡞੒ /P :FT ӡ༻։࢝

    ςετ੒ޭ w ࣗಈςετ࣌ʹൃߦ͞ΕͨΫΤϦ͔ΒϗϫΠτϦετ Λࣗಈ࡞੒ w ҎԼΛͦΕͧΕαʔόʹ഑ஔ w ৽͍͠8FCΞϓϦͷιʔείʔυ w ৽͍͠8FCΞϓϦͷΫΤϦͷϗϫΠτϦετ ։ൃϓϩηεʹ͓͚ΔఏҊख๏ͷҐஔ෇͚ w ։ൃϓϩηε΁ͷӨڹ͕খ͍͞ w ӡ༻։࢝࣌ʹ͸ෆਖ਼ΫΤϦΛݕ஌Ͱ͖Δঢ়ଶ w ϗϫΠτϦετͷ໢ཏੑ͸ςετ࣌ʹൃߦ͞ΕͨΫ ΤϦʹґଘ w ߴ͍ςετΧόϨοδ͕ඞཁ
  20. • ఏҊख๏͸ςετ࣌ʹൃߦ͞ΕͨΫΤϦΛ༻͍ͯϗϫΠτϦετΛ࡞੒ • ఏҊख๏Ͱݕ஌Ͱ͖ΔΫΤϦ͸ςετ࣌ʹൃߦ͞Ε͍ͯͳ͍ΫΤϦ • ςετ͞Ε͍ͯͳ͍ΫΤϦɿςετίʔυ͕هड़͞Ε͓ͯΒͣݕ஌͞Εͨ΋ͷ • ෆਖ਼ΫΤϦɿWebΞϓϦ͕ൃߦ͠ͳ͍΋ͷ 20 ఏҊख๏Ͱݕ஌Ͱ͖ΔΫΤϦͷߟ࡯

  21. 21 ΫΤϦͷ಺แؔ܎ શͯͷΫΤϦ ςετ͞Ε͍ͯΔΫΤϦྖҬ ʢϗϫΠτϦετʹొ࿥ʣ 8FCΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦྖҬ ɿςετ͞Ε͍ͯΔΫΤϦྖҬ ɿෆਖ਼ΫΤϦྖҬ ɿςετ͞Ε͍ͯͳ͍ΫΤϦྖҬ

  22. 22 ςετΧόϨοδʹΑΔྖҬͷมԽ શͯͷΫΤϦ ςετ͞Ε͍ͯΔΫΤϦྖҬ ʢϗϫΠτϦετʹొ࿥ʣ 8FCΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦྖҬ શͯͷΫΤϦ 8FCΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦྖҬ ςετ͞Ε͍ͯΔΫΤϦྖҬ ʢϗϫΠτϦετʹొ࿥ʣ

    ςετΧόϨοδΛ޲্ͤ͞Δ͜ͱͰςετ͞Ε͍ͯΔΫΤϦྖҬΛ֦େ ˠɹϗϫΠτϦετͷ໢ཏੑ͕޲্ ɿςετ͞Ε͍ͯΔΫΤϦྖҬ ɿෆਖ਼ΫΤϦྖҬ ɿςετ͞Ε͍ͯͳ͍ΫΤϦྖҬ
  23. • ςετΧόϨοδͷ޲্ʹΑΓϗϫΠτϦετͷ໢ཏੑ͕޲্ • ϗϫΠτϦετͷ໢ཏੑ޲্ͷͨΊʹ༨෼ͳςετΛ௥Ճͨ͘͠ͳ͍ • ςετ؅ཧΛࠔ೉Խ͠ɼ։ൃऀͷෛ୲ͱͳΔ͜ͱΛආ͚͍ͨ • ఏҊख๏͸ݱ։ൃ࣌఺ͰͷϗϫΠτϦετͷϕʔεΛఏڙ • ໨ඪͱ͢ΔςετΧόϨοδ·Ͱ͸ఏҊख๏ͰϗϫΠτϦετΛ࡞੒

    • ϗϫΠτϦετʹෆ଍͍ͯ͠Δཁૉͷิ׬ʹ͸ผͷํ๏͕ඞཁ 23 ςετΧόϨοδͱϗϫΠτϦετͷ໢ཏੑ
  24. • WebΞϓϦ͕ൃߦ͢ΔΫΤϦ͸ϢʔβೖྗʹΑͬͯมԽ • ΫΤϦύλʔϯ͸๲େͱͳΔͨΊ͢΂ͯΛొ࿥͢Δͷ͸ࠔ೉ • ΫΤϦͷϦςϥϧΛϓϨʔεϗϧμʹஔ͖׵͑ͨΫΤϦߏ଄Λొ࿥ • ΫΤϦߏ଄͕ҟͳΔ΋ͷΛݕ஌Ͱ͖Δ 24 ϗϫΠτϦετͷొ࿥಺༰

    4&-&$5 '30.VTFST8)&3&OBNFb5BJDIJ` 4&-&$5 '30.VTFST
 8)&3&JE ϗϫΠτϦετ 4&-&$5 '30.VTFST8)&3&JE র߹ র߹݁Ռ
  25. • ΫΤϦߏ଄͕ಉҰͱͳΔ΋ͷ͸ݕ஌Ͱ͖ͳ͍ 25 ఏҊख๏Ͱݕ஌Ͱ͖ͳ͍ΫΤϦ ௨ৗɿSELECT * FROM users LIMIT 30

    ҟৗɿSELECT * FROM users LIMIT 1000 SELECT * FROM users LIMIT ?
  26. 26 ఏҊख๏ͷઃܭ σʔλϕʔε σʔλϕʔε
 ϓϩΩγ 8FCΞϓϦ ϗϫΠτϦετ • σʔλϕʔεͷલஈʹσʔλϕʔεϓϩΩγΛ഑ஔ •

    ςετ࣌ʹ͸ൃߦ͞ΕΔΫΤϦΛσʔλϕʔεϓϩΩγͰऩूͯ͠ϗϫΠτϦε τΛ࡞੒ɹˠɹWebΞϓϦͷ࣮૷ݴޠʹґଘ͠ͳ͍ • WebΞϓϦՔಇ࣌ͷෆਖ਼ΫΤϦݕ஌΋ಉ͡ߏ੒
  27. 27 ςετ࣌ͷϗϫΠτϦετ࡞੒ϑϩʔ σʔλϕʔε σʔλϕʔε
 ϓϩΩγ 8FCΞϓϦ ϗϫΠτϦετ 4&-&$5 '30. VTFST

    8)&3&JE 4&-&$5 '30. VTFST 8)&3&JE 4&-&$5 '30. VTFST 8)&3&JEʁ ΫΤϦΛൃߦ ΫΤϦ͸ͦͷ··σʔλϕʔε΁ ςετऴྃޙΫΤϦߏ଄ʹม׵ ΫΤϦߏ଄ΛϗϫΠτϦετʹొ࿥ ΫΤϦΛऩू
  28. 28 WebΞϓϦՔಇ࣌ͷෆਖ਼ΫΤϦݕ஌ϑϩʔ σʔλϕʔε σʔλϕʔε
 ϓϩΩγ 8FCΞϓϦ ϗϫΠτϦετ 4&-&$5 '30. VTFST

    8)&3&JE 4&-&$5 '30. VTFST 8)&3&JE 4&-&$5 '30. VTFST 8)&3&JEʁ ΫΤϦߏ଄ʹม׵ ϗϫΠτϦετͱೖྗ͞ΕͨΫΤϦߏ଄Λর߹ ΫΤϦΛൃߦ ΫΤϦΛड͚औΔ র߹݁ՌΛฦ٫ র߹݁Ռ͔ΒΫΤϦΛ࣮ߦ͢Δ͔Λܾఆ
  29. 4. ·ͱΊͱࠓޙͷ՝୊

  30. • WebΞϓϦέʔγϣϯςετΛ༻͍ͨΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏ ͷௐࠪɾݕ౼Λߦͬͨ • ఏҊख๏͸ҎԼͷཁ݅ΛຬͨͤΔͱߟ͑ΒΕΔ • WebΞϓϦՔಈલʹϗϫΠτϦετΛ࡞੒Ͱ͖Δ • WebΞϓϦͷ࣮૷ʹґଘͤͣϗϫΠτϦετΛ࡞੒Ͱ͖Δ •

    ಋೖ࣌ͷ։ൃϓϩηε΁ͷӨڹ͕খ͍͞ 30 ·ͱΊ
  31. • ఏҊख๏ͷ࣮૷ • ςετΧόϨοδʹର͢Δෆਖ਼ΫΤϦͷݕ஌ਫ਼౓ͷݕূ • ϗϫΠτϦετͷ଍Γͳ͍ཁૉΛิ׬͢Δํ๏ͷݕ౼ • ΫΤϦͷϦςϥϧͷෆਖ਼Λݕ஌͢Δํ๏ͷݕ౼ 31 ࠓޙͷ՝୊