$30 off During Our Annual Pro Sale. View Details »

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

Komei Nomura
December 07, 2018

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

第11回インターネットと運用技術シンポジウム IOTS2018

Webアプリケーションの脆弱性を利用してデータベースから機密情報を窃取する攻撃が問題になっている.対策として,クエリのホワイトリストによる検知があるが,大規模なアプリケーションにおいてはクエリパターンが膨大であり,開発者によるリストの手動作成が困難なため,リストの自動作成手法が利用される.しかし,従来のホワイトリスト自動作成手法には,ユーザがWebサービスを利用することによって,発行されるクエリを収集するのに時間がかかり検知の即時性が低い課題や,アプリケーション毎に異なる実装を必要とし汎用性が低い課題がある.
本研究では,アプリケーションの動作テスト実行時の発行クエリからホワイトリストを作成する手法を提案する.提案手法はテスト時の発行クエリを使いアプリケーションの実装に依存せず作成できるため,検知の即時性や汎用性は向上する.

Komei Nomura

December 07, 2018
Tweet

More Decks by Komei Nomura

Other Decks in Research

Transcript

  1. ໺ଜ޸໋(ϖύϘݚڀॴ), Ѩ෦ ത, ੁ໺ ఩(ίίϯגࣜձࣾ, גࣜձࣾϨϐμϜ),
    ྗ෢݈࣍(ྗ෢݈ٕ࣍ज़࢜ࣄ຿ॴ), দຊ྄հ(ϖύϘݚڀॴ, ͘͞ΒΠϯλʔωοτגࣜձࣾ)
    2018.12.07 IOTS2018 ୈ11ճΠϯλʔωοτͱӡ༻ٕज़γϯϙδ΢Ϝ
    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. 1. WebΞϓϦՔಇதͷΫΤϦΛ༻͍ͨख๏
    • WebΞϓϦՔಇޙɼଈ࣌ʹෆਖ਼ΫΤϦΛݕ஌Ͱ͖ͳ͍
    2. ιʔείʔυղੳΛ༻͍ͨख๏
    • WebΞϓϦͷ࣮૷ʹґଘͨ͠ํ๏ͷͨΊɼෳ਺ͷWebΞϓϦͰ൚༻తʹ

    ར༻Ͱ͖ͳ͍
    9
    ैདྷͷϗϫΠτϦετࣗಈ࡞੒ͷ՝୊

    View Slide

  10. • WebΞϓϦՔಈதʹൃߦ͞ΕͨΫΤϦΛऩू͠ϗϫΠτϦετΛ࡞੒
    • ൃߦ͞ΕͨΫΤϦΛར༻͢ΔͷͰɼWebΞϓϦʹґଘͤͣ൚༻తʹར༻Մೳ
    10
    1. ैདྷͷWebΞϓϦՔಈதͷΫΤϦΛ༻͍ͨख๏
    σʔλϕʔε
    8FCΞϓϦ
    ΫΤϦ
    ϗϫΠτϦετ
    8FCΞϓϦՔಇத
    )551ϦΫΤετ

    View Slide

  11. • WebΞϓϦՔಇޙɼଈ࣌ʹෆਖ਼ΫΤϦΛݕ஌Ͱ͖ͳ͍
    • ΫΤϦΛऩूͯ͠ϗϫΠτϦετ͕࡞੒͞Εͨޙʹݕ஌Λߦ͏
    • ΫΤϦͷऩूظؒத͸ෆਖ਼ΫΤϦͷݕ஌Λߦ͑ͳ͍
    • WebαʔϏεͷվमස౓͸ߴ͘ɼෆਖ਼ΫΤϦΛݕ஌Ͱ͖ͳ͍ظ͕ؒଟൃ͢Δ
    • ϗϫΠτϦετͷ࡞੒͸WebΞϓϦՔಈલʹߦ͏ඞཁ͕͋Δ
    11
    1. ैདྷͷWebΞϓϦՔಈதͷΫΤϦΛ༻͍ͨख๏ͷ՝୊

    View Slide

  12. • WebΞϓϦͷιʔείʔυதͷSQLΛ૊ΈཱͯΔॲཧͷղੳΛߦ͍ɼൃߦ͞
    ΕΔΫΤϦύλʔϯΛྻڍ͠ɼϗϫΠτϦετʹొ࿥͢Δ
    • ιʔείʔυΛར༻͢ΔͷͰɼWebΞϓϦՔಇલʹϗϫΠτϦετΛ࡞੒Ͱ
    ͖Δ
    12
    2. ैདྷͷιʔείʔυղੳΛ༻͍ͨख๏
    ղੳث
    ιʔείʔυ
    ϗϫΠτϦετ
    8FCΞϓϦՔಈલ

    View Slide

  13. • ιʔείʔυͷղੳ͕࣮૷ʹґଘͨ͠ํ๏ͷͨΊɼෳ਺ͷWebΞϓϦͰ൚༻
    తʹར༻Ͱ͖ͳ͍
    • WebΞϓϦͷ࣮૷ʹ༷ʑͳݴޠ΍ORM͕ར༻͞ΕΔ৔߹ɼղੳثͷ

    ࣮૷͕ଟذʹΘͨΔ
    • WebΞϓϦͷ࣮૷ʹґଘ͠ͳ͍ํ๏͕ඞཁ
    13
    2. ैདྷͷιʔείʔυղੳΛ༻͍ͨख๏ͷ՝୊

    View Slide

  14. 3.
    ఏҊख๏

    View Slide

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

    View Slide

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

    View Slide

  17. 17
    ։ൃ
    ςετίʔυهड़
    αʔόʹ഑ஔ
    ࣗಈςετ
    ʴ
    ϗϫΠτϦετ࡞੒
    /P
    :FT
    Քಇ։࢝
    ςετ੒ޭ
    w ςετ࣌ʹൃߦ͞ΕͨΫΤϦ͔ΒϗϫΠτϦετΛ

    ࡞੒
    w ҎԼΛͦΕͧΕαʔόʹ഑ஔ
    w 8FCΞϓϦͷιʔείʔυ
    w ϗϫΠτϦετ
    ։ൃϓϩηεʹ͓͚ΔఏҊख๏ͷҐஔ෇͚
    w 8FCΞϓϦ͕Քಇ͢ΔલʹϗϫΠτϦετΛ࡞੒Մೳ
    w 8FCΞϓϦͷൃߦΫΤϦͷมԽʹ௥ैͯ͠ɼϗϫΠτ
    ϦετΛߋ৽Ͱ͖Δ

    View Slide

  18. • ΫΤϦͷϦςϥϧ஋ΛϓϨʔεϗϧμʹஔ͖׵͑ͨΫΤϦߏ଄Λొ࿥
    • ൃߦ͞ΕͨΫΤϦͷΫΤϦߏ଄ͷҧ͍Λݕ஌
    18
    ϗϫΠτϦετͷొ࿥಺༰
    ΫΤϦɿ4&-&$5'30.VTFST8)&3&JE
    ΫΤϦߏ଄ɿ4&-&$5'30.VTFST8)&3&JEʁ ϗϫΠτϦετ

    View Slide

  19. 19
    ఏҊख๏ͷઃܭ
    • σʔλϕʔεͷલஈʹσʔλϕʔεϓϩΩγΛ഑ஔ
    • ςετ࣮ߦதʹൃߦ͞ΕͨΫΤϦΛऩू
    • WebΞϓϦͷ࣮૷ʹґଘ͠ͳ͍
    ςετ࣮ߦத
    σʔλϕʔε
    8FCΞϓϦ σʔλϕʔεϓϩΩγ
    ϗϫΠτϦετ
    ΫΤϦΛऩू͠ΫΤϦߏ଄΁ม׵
    ग़ྗ
    ΫΤϦ ΫΤϦ

    View Slide

  20. 20
    ఏҊख๏ͷઃܭ
    • WebΞϓϦՔಇத͸ൃߦΫΤϦͱϗϫΠτϦετΛর߹͠ɼෆਖ਼ΫΤϦΛݕ஌
    • র߹ॲཧʹΑͬͯɼWebΞϓϦͱσʔλϕʔεؒʹಈ࡞ͷ஗Ԇ͕ൃੜ
    • ΫΤϦߏ଄ΛΩʔͱͨ͠ϋογϡςʔϒϧͱͯ͠ϗϫΠτϦετΛදݱ
    • ϦετͷΤϯτϦ਺ʹґଘͤͣɼߴ଎ʹর߹ॲཧ͕Մೳ
    σʔλϕʔε
    8FCΞϓϦ
    σʔλϕʔεϓϩΩγ
    8FCΞϓϦՔಇத
    ΫΤϦ ΫΤϦ
    ΫΤϦͱϗϫΠτϦετΛর߹ͯ͠ݕ஌
    ෆਖ਼ΫΤϦ
    ग़ྗ
    ϗϫΠτϦετ

    View Slide

  21. 4.
    ධՁ

    View Slide

  22. • ςετ޻ఔʹϗϫΠτϦετͷ࡞੒Λ૊ΈࠐΜͩ
    • ϗϫΠτϦετΛ࡞੒͢Δ͜ͱͷӡ༻ͷෛՙΛഉআ
    • ϗϫΠτϦετΛൃߦΫΤϦͷมԽʹ௥ैͯ͠ߋ৽͢Δ͜ͱͷӡ༻ͷෛՙΛ
    ഉআ
    22
    ӡ༻΁ͷෛՙͷධՁ

    View Slide

  23. • ϗϫΠτϦετͷর߹଎౓ͷධՁ
    • ΫΤϦߏ଄ΛΩʔͱͨ͠ϋογϡςʔϒϧͱͯ͠ϗϫΠτϦετΛදݱ͢Δ
    ͜ͱʹΑΓɼΤϯτϦ਺ʹґଘͤͣߴ଎ʹর߹Ͱ͖Δ
    • ςετ࣌ͷΫΤϦ͔Β࡞੒ͨ͠ϗϫΠτϦετͷݕ஌ਫ਼౓ͷධՁ
    23
    ࣮ӡ༻্ͷධՁ఺

    View Slide

  24. 24
    ݕ஌ਫ਼౓ͷධՁɿݕ஌ਫ਼౓ͷධՁࢦඪ
    'BMTFOFHBUJWF
    5SVFQPTJUJWF
    5SVFOFHBUJWF
    ෆਖ਼ͳΫΤϦΛෆਖ਼ͱ൑அͰ͖ͳׂ͔ͬͨ߹
    'BMTFQPTJUJWF
    ਖ਼ৗͳΫΤϦΛਖ਼ৗͱ൑அͰ͖ͳׂ͔ͬͨ߹
    ਖ਼ৗͳΫΤϦΛਖ਼ৗͱ൑அׂͨ͠߹
    ෆਖ਼ͳΫΤϦΛෆਖ਼ͱ൑அͰׂ͖ͨ߹

    View Slide

  25. 25
    ݕ஌ਫ਼౓ͷධՁɿఏҊख๏ͷݕ஌ਫ਼౓ͷ༧૝
    'BMTFOFHBUJWF
    5SVFQPTJUJWF
    5SVFOFHBUJWF
    'BMTFQPTJUJWF
    ςετ࣌ʹൃߦ͞ΕͨΫΤϦ
    ςετ࣌ʹൃߦ͞Εͳ͍ΫΤϦ
    ʢ8FCΞϓϦ͸ൃߦ͢Δʣ
    ςετ࣌ͷΈൃߦ͞ΕΔΫΤϦ
    ʢ8FCΞϓϦ͸ൃߦ͠ͳ͍ʣ
    ݕ஌ਫ਼౓ͷධՁͱͯ͠ɼ'BMTFQPTJUJWFͱ'BMTFOFHBUJWFΛܭଌͨ͠

    View Slide

  26. 26
    ݕ஌ਫ਼౓ͷධՁɿ࣮ݧ؀ڥ
    "QQ 1SPYZ42- .Z42-
    BSUJDMFςʔϒϧͷૢ࡞Λߦ͏ϝιουΛ࣮૷͠ɼςετΛهड़
    )551 63- ૢ࡞಺༰
    (&5 BSUJDMFT શͯͷBSUJDMFΛදࣔ
    (&5 BSUJDMFT UJUMFlz
    UJUMFͰݕࡧͯ͠BSUJDMFΛදࣔ
    ʢ42-ΠϯδΣΫγϣϯͷ੬ऑੑ͋Γʣ
    1045 BSUJDMFT BSUJDMFΛͭ࡞੒
    (&5 BSUJDMFTJE ಛఆͷBSUJDMFΛදࣔ
    1"5$) BSUJDMFTJE BSUJDMFΛߋ৽
    %&-&5& BSUJDMFTJE BSUJDMFΛ࡟আ
    UJUMFͱDPOUFOUΧϥϜΛ࣋ͬͨ

    BSUJDMFςʔϒϧΛ࡞੒
    ςετ࣌ʹൃߦ͞ΕͨΫΤϦΛऩू͠ɼΫΤϦߏ଄ʹม׵ͯ͠
    ϗϫΠτϦετΛ࡞੒
    ProxySQL: https://proxysql.com/

    View Slide

  27. • ਖ਼ৗͳΫΤϦσʔλ
    • WebΞϓϦʹϒϥ΢β͔ΒखಈͰHTTPϦΫΤετΛૹΓɼͦͷաఔͰൃߦ
    ͞ΕͨΫΤϦΛऔಘʢΫΤϦ਺ɿ17ʣ
    • ෆਖ਼ͳΫΤϦσʔλ
    • sqlmapΛ༻͍ͯSQLΠϯδΣΫγϣϯ߈ܸΛWebΞϓϦͷݕࡧϑΥʔϜʹ
    ߦ͍ɼͦͷաఔͰൃߦ͞ΕͨΫΤϦΛऔಘʢΫΤϦ਺ɿ265ʣ
    • ͜ΕΒΛϗϫΠτϦετͱর߹ͯ͠False positiveͱFalse negativeΛࢉग़
    27
    ݕ஌ਫ਼౓ͷධՁɿ࣮ݧํ๏
    Sqlmap: http://sqlmap.org/

    View Slide

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

    View Slide

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

    ࿙Ε͕ੜ͡Δ
    • େن໛ͳWebΞϓϦͰ͸ɼൃߦΫΤϦ਺͕૿Ճ͢ΔͨΊɼޡݕ஌͞ΕΔ

    ΫΤϦ਺΋૿େ
    • ϗϫΠτϦετʹෆ଍͍ͯ͠ΔΫΤϦΛิ׬͢Δํ๏͕ඞཁ
    29
    False postiveͷߟ࡯

    View Slide

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

    View Slide

  31. • WebΞϓϦέʔγϣϯςετΛ༻͍ͨΫΤϦͷϗϫΠτϦετࣗಈ࡞੒ख๏
    ΛఏҊͨ͠
    • WebΞϓϦͷൃߦΫΤϦͷมߋʹ௥ैͰ͖Δ
    • WebΞϓϦՔಇޙɼଈ࣌ʹෆਖ਼ΫΤϦΛݕ஌Ͱ͖Δ
    • WebΞϓϦͷ࣮૷ʹґଘͤͣɼ൚༻తʹར༻Ͱ͖Δ
    • SQLΠϯδΣΫγϣϯ߈ܸʹΑΔෆਖ਼ΫΤϦΛશͯݕ஌Ͱ͖Δ͜ͱΛ֬ೝ
    • ਖ਼ৗͳΫΤϦͷҰ෦Λޡݕ஌͢Δ͜ͱΛ֬ೝ
    31
    ·ͱΊ

    View Slide

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

    ݕ౼
    • େن໛ͳWebΞϓϦέʔγϣϯʹ͓͚Δݕ஌ਫ਼౓΍ɼWebΞϓϦͱσʔλ
    ϕʔεؒͷϨΠςϯγʔͷධՁ
    32
    ࠓޙͷ՝୊

    View Slide