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

Webアプリケーションテストを用いたSQLクエリのホワイトリスト自動作成手法

Komei Nomura
September 19, 2018

 Webアプリケーションテストを用いたSQLクエリのホワイトリスト自動作成手法

FIT2018 第17回技術科学技術フォーラム

Komei Nomura

September 19, 2018
Tweet

More Decks by Komei Nomura

Other Decks in Research

Transcript

  1. ໺ଜ޸໋, ྗ෢݈࣍*, দຊ྄հ / ϖύϘݚڀॴ / *ྗ෢݈ٕ࣍ज़࢜ࣄ຿ॴ
    2018.09.19 FIT2018 ୈ17ճ৘ใՊֶٕज़ϑΥʔϥϜ
    WebΞϓϦέʔγϣϯςετΛ༻͍ͨ

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

    View Slide

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

    View Slide

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

    View Slide

  4. • WebΞϓϦέʔγϣϯʢWebΞϓϦʣͷ੬ऑੑΛར༻ͨ͠߈ܸ͕ޙΛઈͨͳ͍
    • WebαʔϏε͕อ༗͢Δػີ৘ใ͕࿙Ӯ͢Δඃ֐͕ൃੜ
    • WebΞϓϦ͕ར༻͢Δσʔλϕʔεʹෆਖ਼ΫΤϦΛൃߦͯ͠ߦΘΕΔ
    • ෆਖ਼ΫΤϦͱ͸ɼ੬ऑੑ߈ܸʹΑͬͯੜ͡Δ։ൃऀͷ૝ఆ֎ͷΫΤϦ
    • ෆਖ਼ΫΤϦΛݕ஌͢Δରࡦ͕ඞཁ
    4
    ݚڀͷഎܠ

    View Slide

  5. • WebΞϓϦ͕ൃߦ͢ΔΫΤϦͷϗϫΠτϦετΛखಈͰ࡞੒ͯ͠ݕ஌
    • େن໛ͳWebΞϓϦͰ͸ൃߦ͞ΕΔΫΤϦ͕๲େͰɼશͯͷΫΤϦΛ೺Ѳ
    ͸ࠔ೉
    • WebΞϓϦͷվमʹΑͬͯൃߦ͞ΕΔΫΤϦ͕มԽ͠ɼϗϫΠτϦετͷ
    ߋ৽͕ඞཁ
    • ӡ༻ऀ΁ͷෛ୲͕େ͖͍
    5
    ैདྷͷෆਖ਼ΫΤϦݕ஌ํ๏

    View Slide

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

    View Slide

  7. • ҎԼͷཁ݅Λຬͨ͢ෆਖ਼ΫΤϦରࡦ
    • WebΞϓϦՔಈޙɼଈ࣌ʹෆਖ਼ΫΤϦΛݕ஌Ͱ͖Δ
    • WebΞϓϦͷ࣮૷ʹґଘ͠ͳ͍
    • ෆਖ਼ΫΤϦରࡦಋೖ࣌ͷ։ൃ΍ӡ༻΁ͷӨڹ͕খ͍͞
    7
    ݚڀͷ໨త

    View Slide

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

    View Slide

  9. • WebΞϓϦՔಈதʹൃߦ͞ΕͨΫΤϦΛऩू͠ɼΫΤϦߏ଄ʹͯ͠ొ࿥
    • ΫΤϦߏ଄ͱ͸ΫΤϦͷϦςϥϧ஋ΛϓϨʔεϗϧμʔʹஔ͖׵͑ͨ΋ͷ
    9
    WebΞϓϦՔಈதʹൃߦ͞ΕͨΫΤϦΛ༻͍ͨख๏
    σʔλϕʔε
    8FCΞϓϦ
    ΫΤϦ
    ϗϫΠτϦετ
    8FCΞϓϦՔಇ࣌
    4&-&$5'30.VTFST8)&3&JE
    4&-&$5'30.VTFST8)&3&JE
    Ϧςϥϧ
    ΫΤϦߏ଄ͷྫ

    View Slide

  10. • ϝϦοτ
    • WebΞϓϦͷ࣮૷ʹґଘͤͣϗϫΠτϦετΛ࡞੒Մೳ
    • σϝϦοτ
    • ΫΤϦΛऩू͢Δظ͕ؒඞཁͱͳΓɼظؒத͸ෆਖ਼ΫΤϦΛݕ஌Ͱ͖ͳ͍
    • WebαʔϏεͷվमස౓͸ߴ͘ɼݕ஌Ͱ͖ͳ͍ظ͕ؒଟൃ
    • ϗϫΠτϦετͷ࡞੒͸WebΞϓϦՔಈલʹߦ͏ඞཁ͕͋Δ
    10
    WebΞϓϦՔಈதʹൃߦ͞ΕͨΫΤϦΛ༻͍ͨख๏

    View Slide

  11. • ιʔείʔυதͷSQLΛ૊ΈཱͯΔॲཧΛղੳ͠ɼൃߦ͞ΕΔΫΤϦύλʔϯ
    Λྻڍ
    • ྻڍ͞ΕͨΫΤϦύλʔϯΛϗϫΠτϦετʹొ࿥
    11
    ιʔείʔυղੳΛ༻͍ͨख๏
    ղੳث
    ιʔείʔυ
    ϗϫΠτϦετ
    8FCΞϓϦՔಈલ

    View Slide

  12. • ϝϦοτ
    • WebΞϓϦՔಈޙɼଈ࣌ʹෆਖ਼ΫΤϦͷݕ஌͕Մೳ
    • σϝϦοτ
    • ࣮૷ґଘͳํ๏ͷͨΊɼෳ਺ͷWebΞϓϦͰ൚༻తʹར༻ෆՄ
    • WebΞϓϦͷ࣮૷ʹ༷ʑͳݴޠ΍ORM*͕ར༻͞ΕΔ৔߹ɼղੳثͷ

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

    View Slide

  13. 3.
    ఏҊख๏

    View Slide

  14. • WebΞϓϦέʔγϣϯςετΛ༻͍ͨΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏
    • ࣗಈςετΛ༻͍ͨ։ൃϓϩηεʹϗϫΠτϦετ࡞੒Λ૊ΈࠐΉ
    • ։ൃϓϩηεͷมߋͤͣɼWebΞϓϦՔಈલʹϗϫΠτϦετ࡞੒Մೳ
    • σʔλϕʔεϓϩΩγͰΫΤϦΛऩू͠ɼϗϫΠτϦετ࡞੒
    • WebΞϓϦͷ࣮૷ʹґଘ͠ͳ͍
    14
    ఏҊख๏֓ཁ

    View Slide

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

    View Slide

  16. 16
    ։ൃ
    ςετίʔυهड़
    αʔόʹ഑ஔ
    ࣗಈςετ
    ʴ
    ϗϫΠτϦετ࡞੒
    /P
    :FT
    ӡ༻։࢝
    ςετ੒ޭ
    w ςετ࣌ʹൃߦ͞ΕͨΫΤϦ͔ΒϗϫΠτϦετΛࣗ
    ಈ࡞੒
    w ҎԼΛͦΕͧΕαʔόʹ഑ஔ
    w ৽͍͠8FCΞϓϦͷιʔείʔυ
    w ৽͍͠8FCΞϓϦͷΫΤϦͷϗϫΠτϦετ
    ։ൃϓϩηεʹ͓͚ΔఏҊख๏ͷҐஔ෇͚
    w ։ൃϓϩηεͷมߋ͕ͳ͍
    w ӡ༻։࢝࣌ʹ͸ෆਖ਼ΫΤϦΛݕ஌Ͱ͖Δঢ়ଶ

    View Slide

  17. • ΫΤϦͷϦςϥϧΛϓϨʔεϗϧμʹஔ͖׵͑ͨΫΤϦߏ଄Λొ࿥
    • ΫΤϦߏ଄͕ҟͳΔ΋ͷΛݕ஌Ͱ͖Δ
    17
    ϗϫΠτϦετͷొ࿥಺༰
    4&-&$5'30.VTFST8)&3&JE
    4&-&$5'30.VTFST8)&3&JE ϗϫΠτϦετ
    ςετ࣌ʹൃߦ͞ΕͨΫΤϦɿ
    ΫΤϦߏ଄ɿ

    View Slide

  18. 18
    ϗϫΠτϦετͷݕ஌ಛੑ
    ςετ࣌ʹൃ
    ߦ͞Εͳ͍

    ΫΤϦ
    શͯͷΫΤϦ
    ςετ࣌ʹൃߦ͞ΕΔ

    ΫΤϦ
    ʢϗϫΠτϦετʹొ࿥ʣ
    8FCΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦ
    ςετ࣌ͷΈൃߦ͞ΕΔ
    ΫΤϦ
    ʢϗϫΠτϦετʹొ࿥ʣ
    ෆਖ਼ΫΤϦ
    • ఏҊख๏͸ςετ࣌ʹൃߦ͞ΕͨΫΤϦΛϗϫΠτϦετʹొ࿥
    • ςετ࣌ʹൃߦ͞Εͳ͍ΫΤϦͱෆਖ਼ΫΤϦΛݕ஌
    • ͨͩ͠ɼෆਖ਼ΫΤϦͷ಺ɼςετ࣌ͷΈൃߦ͞ΕΔΫΤϦ͸ݕ஌͞Εͳ͍
    ΫΤϦͷ಺แؔ܎ਤ

    View Slide

  19. 19
    ςετ௥ՃʹΑΔݕ஌ྖҬͷมԽ
    ςετΛ௥Ճ͢Δ͜ͱʹΑͬͯɼςετ͞Ε͍ͯΔΫΤϦྖҬΛ֦େͰ͖ɼ
    8FCΞϓϦ͕ൃߦ͢ΔΫΤϦͷޡݕ஌Λ௿ݮͰ͖Δ
    ςετ
    ࣌ʹൃ
    ߦ͞Ε
    ͳ͍Ϋ
    ΤϦ
    શͯͷΫΤϦ
    ςετ࣌ʹൃߦ͞ΕΔ

    ΫΤϦ
    ʢϗϫΠτϦετʹొ࿥ʣ
    8FCΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦ
    ςετ࣌ͷΈൃߦ͞ΕΔ
    ΫΤϦ
    ʢϗϫΠτϦετʹొ࿥ʣ
    ෆਖ਼ΫΤϦ
    ςετ࣌ʹൃߦ
    ͞Εͳ͍

    ΫΤϦ
    શͯͷΫΤϦ
    ςετ࣌ʹൃߦ͞ΕΔ

    ΫΤϦ
    ʢϗϫΠτϦετʹొ࿥ʣ
    8FCΞϓϦέʔγϣϯ͕ൃߦ͢ΔΫΤϦ
    ςετ࣌ͷΈൃߦ͞ΕΔ
    ΫΤϦ
    ʢϗϫΠτϦετʹొ࿥ʣ
    ෆਖ਼ΫΤϦ
    ֦େ

    View Slide

  20. 20
    ఏҊख๏ͷઃܭ
    σʔλϕʔε
    σʔλϕʔε

    ϓϩΩγ
    8FCΞϓϦ
    ϗϫΠτϦετ
    • σʔλϕʔεͷલஈʹσʔλϕʔεϓϩΩγΛ഑ஔ
    • ςετ࣮ߦத͸ΫΤϦΛऩूͯ͠ϗϫΠτϦετ࡞੒
    • WebΞϓϦՔಈத͸ൃߦ͞ΕͨΫΤϦͱϗϫΠτϦετͷর߹͠ɼ

    ෆਖ਼ΫΤϦΛݕ஌

    View Slide

  21. 4.
    ࣮ݧ

    View Slide

  22. 22
    ࣮ݧ؀ڥ
    "QQ 1SPYZ42- .Z42-
    w BSUJDMFςʔϒϧͷૢ࡞Λߦ͏ϝιουΛ࣮૷
    w ͦΕͧΕͷϝιουͷςετΛهड़
    )551 63- ૢ࡞಺༰
    (&5 BSUJDMFT શͯͷBSUJDMFΛදࣔ
    (&5 BSUJDMFT UJUMFlz
    UJUMFͰݕࡧͯ͠BSUJDMFΛදࣔ
    ʢ42-ΠϯδΣΫγϣϯͷ੬ऑੑ͋Γʣ
    1045 BSUJDMFT BSUJDMFΛͭ࡞੒
    (&5 BSUJDMFTJE ಛఆͷBSUJDMFΛදࣔ
    1"5$) BSUJDMFTJE BSUJDMFΛߋ৽
    %&-&5& BSUJDMFTJE BSUJDMFΛ࡟আ
    BSUJDMF
    w UJUMF
    w DPOUFOU
    w BSUJDMFςʔϒϧʹUJUMFͱDPOUFOU

    View Slide

  23. 23
    ࣮ݧ؀ڥ
    "QQ 1SPYZ42- .Z42-
    ProxySQL: https://proxysql.com/
    • σʔλϕʔεϓϩΩγʹ͸ProxySQLΛ࠾༻
    • ProxySQL͸App͕ൃߦͨ͠ΫΤϦΛऩू͠ɼΫΤϦߏ଄ʹม׵͠อଘ
    • ςετதʹProxySQLͰऩूͨ͠ΫΤϦߏ଄͔ΒϗϫΠτϦετΛ࡞੒

    View Slide

  24. • ਖ਼ৗͳΫΤϦΛෆਖ਼ͱ൑அׂͨ͠߹ʢFalse positiveʣΛܭଌ
    • WebΞϓϦʹϒϥ΢β͔ΒखಈͰHTTPϦΫΤετΛૹΓɼͦͷաఔͰൃߦ
    ͞ΕͨΫΤϦΛऔಘʢΫΤϦछྨ਺ɿ17ʣ
    • ෆਖ਼ͳΫΤϦΛෆਖ਼ͱ൑அͰ͖ͳׂ͔ͬͨ߹ʢFalse negativeʣΛܭଌ
    • sqlmapΛ༻͍ͯSQLΠϯδΣΫγϣϯ߈ܸΛWebΞϓϦͷݕࡧϑΥʔϜʹ
    ߦ͍ɼͦͷաఔͰൃߦ͞ΕͨΫΤϦΛऔಘʢΫΤϦछྨ਺ɿ265ʣ
    24
    ࣮ݧ಺༰
    Sqlmap: http://sqlmap.org/

    View Slide

  25. • False positiveɿ17.65%ɼFalse negativeɿ0%
    • SQLΠϯδΣΫγϣϯ߈ܸʹΑΓൃੜͨ͠ෆਖ਼ΫΤϦΛશͯݕ஌
    • ਖ਼ৗͳΫΤϦͷҰ෦Λޡݕ஌
    25
    ࣮ݧ݁Ռ

    View Slide

  26. • શͯͷ࣮૷ϝιουʹରͯ͠ςετΛهड़͕ͨ͠ɼFalse positive͸ൃੜ
    • ςετέʔεʹΑͬͯ͸ൃߦ͞Εͳ͍ΫΤϦ͕ଘࡏ͠ɼϗϫΠτϦετʹ

    ࿙Ε͕ੜ͡Δ
    • େن໛ͳWebΞϓϦͰ͸࣮૷ϝιου͕૿͑ɼޡݕ஌͞ΕΔΫΤϦ਺΋૿େ
    • ϗϫΠτϦετʹෆ଍͍ͯ͠ΔΫΤϦΛิ׬͢Δํ๏͕ඞཁ
    26
    False postiveͷߟ࡯

    View Slide

  27. • SQLΠϯδΣΫγϣϯ߈ܸʹΑͬͯൃੜͨ͠શͯͷෆਖ਼ΫΤϦΛݕ஌Ͱ͖ͨɹɹɹɹ
    • ϗϫΠτϦετʹ͸ςετ࣌ͷΈൃߦ͞ΕΔΫΤϦؚ͕·ΕɼFalse negative
    ͕ൃੜ͢ΔՄೳੑ͕͋Δ
    • SQLΠϯδΣΫγϣϯ͸ɼWebΞϓϦ͕ൃߦ͢ΔΫΤϦʹ೚ҙͷSQLจΛ

    ஫ೖ͢Δ
    • ߈ܸʹΑͬͯੜ͡ΔΫΤϦͱςετ࣌ͷΈൃߦ͞ΕΔΫΤϦͷߏ଄͕Ұக͢
    Δ͜ͱ͸গͳ͍
    27
    False negativeͷߟ࡯

    View Slide

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

    View Slide

  29. • WebΞϓϦέʔγϣϯςετΛ༻͍ͨΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏
    ΛఏҊ
    • ఏҊख๏͸։ൃϓϩηεͷมߋͳ͘ɼWebΞϓϦՔಈલʹϗϫΠτϦετ
    ࡞੒Մೳ
    • ࣮ݧ݁Ռ͔ΒɼSQLΠϯδΣΫγϣϯ߈ܸʹΑͬͯൃߦ͞ΕΔෆਖ਼ΫΤϦΛ

    ݕ஌Ͱ͖Δ͜ͱΛ֬ೝ
    • WebΞϓϦ͕ൃߦ͢ΔΫΤϦͷҰ෦Λޡݕ஌͢Δ͜ͱΛ֬ೝ
    29
    ·ͱΊ

    View Slide

  30. • ϗϫΠτϦετʹෆ଍͍ͯ͠ΔΫΤϦΛิ׬͢Δํ๏ͷݕ౼
    • False positiveͷܰݮ
    • ϗϫΠτϦετʹؚ·ΕΔςετ࣌ͷΈൃߦ͞ΕΔΫΤϦ΁ͷରॲํ๏ͷݕ౼
    • False negativeͷՄೳੑΛഉআ
    30
    ࠓޙͷ՝୊

    View Slide