Webアプリケーション実行環境におけるセキュリティ

 Webアプリケーション実行環境におけるセキュリティ

福岡ゆるっとIT交流会 vol.9「セキュリティの話を聞こう」

2019/01/25

さくらインターネット株式会社
さくらインターネット研究所

上級研究員 松本亮介 / まつもとりー / @matsumotory

2b692bd83f4418103142a053ecf5ff59?s=128

MATSUMOTO Ryosuke

January 25, 2019
Tweet

Transcript

  1. ͘͞ΒΠϯλʔωοτגࣜձࣾ (C) Copyright 1996-2019 SAKURA Internet Inc ͘͞ΒΠϯλʔωοτݚڀॴ WebΞϓϦέʔγϣϯ࣮ߦ؀ڥʹ ͓͚ΔηΩϡϦςΟ

    2019/01/25 ্ڃݚڀһ দຊ ྄հ ෱ԬΏΔͬͱITަྲྀձ vol.9ʮηΩϡϦςΟͷ࿩Λฉ͜͏ʯ
  2. 2 ɾ͘͞ΒΠϯλʔωοτݚڀॴ ্ڃݚڀһ ɾגࣜձࣾGrooves Forkewll ٕज़ސ໰ ɾϖύϘݚڀॴ ٬һݚڀһ ݚڀސ໰ ɾηΩϡϦςΟɾΩϟϯϓߨࢣ

    ɾ৘ใॲཧֶձ Πϯλʔωοτͱӡ༻ٕज़ݚڀձ ֤छҕһ ɾژ౎େֶത࢜ʢ৘ใֶʣ দຊ྄հ / ·ͭ΋ͱΓʔ / @matsumotory
  3. 3 WebΞϓϦέʔγϣϯΛ࣮ߦ͢Δ؀ڥͰ͋ΔWebαʔόɼ͞Βʹ͸ɼϗε ςΟϯάαʔϏε΍Ϋϥ΢υαʔϏεɼVM΍ίϯςφͱ͍༷ͬͨʑͳ؀ڥ͕ ଘࡏ͠·͢ɽ ຊൃදͰ͸ɼͦΕΒΛͰ͖Δ͚ͩ੔ཧ্ͨ͠ͰɼOSͷηΩϡϦςΟʹؔ͢Δ جૅ஌ࣝΛ਎ʹ͚ͭΔͨΊʹɼϗεςΟϯάαʔϏεͷΑ͏ͳWebΞϓϦ έʔγϣϯ࣮ߦ؀ڥʹ͓͍ͯɼHWϦιʔείετ΍ੑೳΛ୲อͭͭ͠ɼη ΩϡϦςΟΛ୲อ͢ΔͨΊͷ༷ʑͳपลٕज़ʹ͍ͭͯ঺հ͠·͢ɽ ࠓ೔ͷ࿩

  4. 4 1. WebαʔόͷԾ૝Խɾִ཭ٕज़ͷ෼ྨ 2. Webαʔόʹ͓͚Δಈతίϯςϯπͱ೷͖ݟ 3. CGI࣮ߦํࣜͷηΩϡϦςΟ 4. DSO࣮ߦํࣜͷηΩϡϦςΟ 5.

    ͦͷଞ࠷৽ͷݚڀಈ޲ ໨࣍
  5. 1. WebαʔόͷԾ૝Խɾִ཭ٕज़ͷ෼ྨ

  6. 6 1. XenɼKVM΍VMware౳ͷԾ૝ϚγϯͰϗετΛ෼͚Δํ๏ 2. LXCɼOpenVZɼDocker౳ͷίϯςφܕԾ૝ԽͷΑ͏ʹϑΝΠϧγεςϜ΍ ໊લۭؒΛૢ࡞͢ΔγεςϜίʔϧʹΑͬͯOS্ʹෳ਺ͷԾ૝తͳִ཭؀ڥ Λ༻ҙ͠ϗετΛ෼͚Δํ๏ 3. IPΞυϨε΍ϙʔτ୯ҐͰෳ਺ͷϗετΛ෼཭֤͠ϗετʹݸผͷϓϩηεΛ ༻ҙͯ͠ىಈͤ͞Δख๏

    → WebΞϓϦέʔγϣϯαʔό౳ 4. ୯Ұͷαʔόϓϩηε܈Ͱෳ਺ͷϗετΛԾ૝ϗετํࣜʹΑΓѻ͏ख๏ Ϋϥ΢υɾϗεςΟϯάͷϗετͷִ཭෼ྨ
  7. 7 • ϗετ୯ҐͰ(1)VMϞσϧɺ(2)ίϯςφϞσϧɺ(3)୯७ϓϩηεϞσϧͰ෼཭ • (1)͔Βॱʹִ཭Ϩϕϧ͕ߴ͘ίετ΍༻్ʹ߹Θܾͤͯఆ͢Δ • (2)ͷϞσϧͷయܕతͳߏ੒ αʔόӡ༻΍ηΩϡϦςΟΛॏࢹͨ͠৔߹

  8. 8 • unshare(): IPCɺnetɺmountɺpidɺuserͳͲͷ໊લۭؒΛִ཭ • chroot(): rootσΟϨΫτϦͷมߋ • Ծ૝Ϛγϯͱൺֱִͯ͠཭౓͸௿͍͕ऩ༰αʔό୯ҐͰͷऩ༰ޮ཰͸ߴ͍ •

    OSͷγεςϜྖҬ͔ΒϑΝΠϧγεςϜɾ໊લۭؒͰִ཭Մೳ • chroot؀ڥʹϑΝΠϧϕʔεͰॆ࣮ͨ͠ϥΠϒϥϦ؀ڥΛߏஙՄೳ • ϗετ୯ҐͰෆඞཁͳίϚϯυ΍ϥΠϒϥϦΛ഑ஔ͠ͳ͍ͱ੍͍ͬͨޚ͕Մೳ unshare()౳ͰϓϩηεΛִ཭͢ΔϞσϧ(2)
  9. 9 • ϗετ୯ҐͰݸผͷJVMΛ༻ҙ • ΞϓϦέʔγϣϯαʔόʹΑΔ୯७ͳϓϩηε෼཭Ϟσϧ(3)ʹ֘౰ • SteinʹΑΔख๏ [1] • (3)ͷख๏ϕʔεͰҟͳΔϢʔβݖݶͰϓϩηεΛىಈ͢Δख๏

    • ෳ਺ͷαʔό΁εέʔϧΞ΢τ͢Δ͜ͱ͕ࠔ೉Ͱ͋Δ՝୊΋͋Δ JavaServlet΍Ruby on RailsͷϞσϧ(3) [1] L. Stein, “SBOX, put CGI scripts in a box,” USENIX Annual Technical Conference, General Track, pp.145–155, June 1999.
  10. 10 • (4)୯Ұͷαʔόϓϩηε܊Ͱෳ਺ͷϗετΛԾ૝తʹॲཧ͢Δߏ੒ • WebαʔόͷԾ૝ϗετํࣜͱΑ͹ΕΔϚϧνςφϯτΞʔΩςΫνϟ • ϦιʔείετΛޮ཰Խͤ͞ΔͨΊʹ͸౎߹ͷྑ͍ߴूੵϞσϧ ߴूੵʹϗετΛऩ༰͢Δ৔߹ͷϞσϧ

  11. 11 • Ծ૝ϗετํࣜʹΑΔϚϧνςφϯτΞʔΩςΫνϟΛ࠾༻ • ୯ҰͷҰൠతͳWebαʔόʹ਺ສҎ্ͷϗετΛऩ༰Մೳ • εϖοΫͱͯ͠CPU24εϨουɺϝϞϦ32GBఔ౓ͷWebαʔόΛ૝ఆ • ϗεςΟϯάαʔϏεͰྑ͘࠾༻͞ΕΔϞσϧͰ΋͋Δ ߴूੵWebαʔόͱ͸

  12. 12 • ΞΫηεͷ߹ͬͨϗετ໊ʹରԠͨ͠υΩϡϝϯτϧʔτΛಈతʹղੳ • Ծ૝ϗετ਺ʹϓϩηε਺͕ґଘ͠ͳ͍ͨΊߴूੵऩ༰࣌ʹޮ཰͕ྑ͍ • ڞ༗ετϨʔδʹσʔλΛల։͢Ε͹Webαʔό܈ͷෛՙ෼ࢄ͕Մೳ • σʔλ΍ઃఆ͕Webαʔόʹݻఆ͞Εͳ͍ͨΊ •

    ಈతίϯςϯπͷ࣮ߦʹ༷ʑͳ޻෉͕ඞཁͱͳΓෳࡶͰ͋Δ • Ϧιʔεڝ߹໰୊΍ηΩϡϦςΟͷ୲อɺߴूੵ࣌ͷੑೳ΍ӡ༻ٕज़ͷ໰୊ Ծ૝ϗετํࣜͷϝϦοτͱσϝϦοτ
  13. 13 • Ծ૝ϚγϯϨϕϧͷ෼཭ • ߴूੵʹϗετΛऩ༰͢Δʹ͸ෆ޲͖ɾηΩϡϦςΟॏࢹͷ৔߹ • ϓϩηεϨϕϧͷ෼཭ • ϗετ਺ʹґଘͯ͠ϓϩηε਺͕૿Ճ͢ΔͨΊߴूੵʹ͸ෆ޲͖ •

    ୯Ұͷαʔόϓϩηε܈Ͱෳ਺ͷϗετΛԾ૝తʹ෼཭ • ϗετ਺ʹґଘ͠ͳ͍ͨΊߴूੵʹద͍ͯ͠Δ • ಛఆͷϗετͷϦιʔεઐ༗͕αʔόϓϩηεͷϦιʔεΛઐ༗͢Δ ߴूੵऩ༰ʹ͓͚Δϗετִ཭·ͱΊ
  14. 2. Webαʔόʹ͓͚Δಈతίϯςϯπͱ ೷͖ݟ

  15. 15 • CGIʢCommon Gateway Interfaceʣ࣮ߦํࣜ • DSOʢDynamic Shared Objectʣ࣮ߦํࣜ Webαʔόʹ͓͚Δಈతίϯςϯπ࣮ߦํࣜ

  16. 16 CGI࣮ߦํࣜ $(*QSPDFTT QIQDHJJOEFYQIQ $(*QSPDFTT GPSL UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU

    $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹϓϩηεͷੜ੒ɾഁغͱൺֱతେ͖ͳ ΠϯλϓϦλόΠφϦʢ1)1ͩͱQIQDHJʣͷ FYFDWF ͕ඞཁ
  17. 17 DSO࣮ߦํࣜ 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ QBSTF SVO αʔόϓϩηεʹΠϯλϓϦλΛϥΠϒϥϦ

    ͱͯ͠௚઀૊ΈࠐΜͰ͓͘
  18. 18 • CGI࣮ߦํࣜ • ΠϯλϓϦλͷෳ਺όʔδϣϯΛ࣮ߦͰ͖Δ • DSO࣮ߦํࣜ • ੑೳ͸ߴ͍͕جຊతʹ͸୯ҰͷWebαʔόʹΠϯλϓϦλΛෳ਺όʔδϣϯ ࣋ͯͳ͍

    • ࣮ߦํࣜʹΑΒͣݖݶ෼཭ػೳΛར༻͠ͳ͍৔߹͸Webαʔόϓϩηεͱಉ༷ ͷΦʔφͰ࣮ߦ͞ΕΔͨΊηΩϡϦςΟ্ͷ՝୊͕͋Δ ಈతίϯςϯπͷ࣮ߦํࣜͷͦͷଞಛ௃
  19. 19 • OSͷγεςϜྖҬͰWebαʔόϓϩηεΛҰൠϢʔβͷݖݶͰىಈ • ҰൠϢʔβͰӾཡՄೳͳΦʔφઃఆͷϑΝΠϧ΍σΟϨΫτϦ͸ӾཡՄೳ • Webαʔόϓϩηε͸Ծ૝ϗετͷશͯͷίϯςϯπΛૢ࡞͢Δඞཁ͕͋Δ • ΞΫηε੍ޚΛ͠ͳ͍৔߹ɺશͯͷԾ૝ϗετ͕૬ޓʹίϯςϯπΛ೷͖ݟՄ ೳʹͳΔ

    Ծ૝ϗετํࣜͷݖݶ෼཭
  20. 20 Ծ૝ϗετؒͰͷίϯςϯπ೷͖ݟ w JOEFYDHJ͸BQBDIFݖݶͰ࣮ߦ w JOEFYDHJͷதͰ֎෦ίϚϯυ࣮ߦʹ ΑΓIPTUͷJOEFYDHJΛSFBE͢Δͱ ಺༰͕ӾཡՄೳ w JOEFYDHJͷதʹECQBTT͕ॻ͔Εͯ

    ͍Δ͜ͱ΋͋Δ
  21. 21 • suEXECͷΑ͏ͳΞΫηε੍ޚػߏΛར༻ • ಈతίϯςϯπͷ࣮ߦΦʔφΛαʔόϓϩηεͷΦʔφͱม͔͑ͯΒ࣮ߦ • ֤ϗετ୯ҐͰ࣮ߦΦʔφΛݸผʹมߋ͢Δ͜ͱͰ೷͖ݟΛ๷͙ Ծ૝ϗετํࣜͷΞΫηε੍ޚͷجຊઓུ

  22. 3. CGI࣮ߦํࣜͷηΩϡϦςΟ

  23. 23 • VirtualHostʹ͓͍ͯଞϗετྖҬΛӾཡͰ͖ͳ͍ߏ੒ΛߏஙՄೳ • CGI࣮ߦ࣌ʹ࣮ߦΦʔφΛมߋ͢ΔΞʔΩςΫνϟ CGI࣮ߦํࣜͱsuEXECͷجຊઓུ

  24. 24 CGI࣮ߦํࣜ $(*QSPDFTT QIQDHJJOEFYQIQ $(*QSPDFTT GPSL UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU

    $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹϓϩηεͷੜ੒ɾഁغͱ ൺֱతେ͖ͳόΠφϦʢ1)1ͩͱQIQDHJόΠφϦʣͷ FYFDWF ͕ඞཁ
  25. $(*QSPDFTT PXOFSVTFS $(*QSPDFTT PXOFSSPPU QIQDHJJOEFYQIQ PXOFSVTFS $(*QSPDFTT PXOFSVTFS ੩తʹઃఆ͞ΕͨVJEΛݩʹTFUVJE TFUHJE

    GPSL  FYFDWF TVFYFDQSPHSBN TFUVJESPPU UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹ$(*༻ϓϩηεͷ ੜ੒ഁغ͕ඞཁ ˞$(* TV&9&$
  26. None
  27. 27 • DoerschΒʹΑΔख๏[1] • suEXEC࣌ʹ֤ϗετ؀ڥͰchroot()γεςϜίʔϧʹΑΓִ཭ • ϗετྖҬ֎ͷϑΝΠϧΛӾཡ͢Δ͜ͱ͕Ͱ͖ͳ͍ • ϗετ୯ҐͰݸผʹϥΠϒϥϦ΍࣮ߦ؀ڥΛ༰қ͢Δඞཁ͸͋Δ •

    ෳ਺ͷ࣮ߦ؀ڥͷݻఆతͳϥΠϒϥϦ͸ϋʔυϦϯΫͰࢀর͢Δ͜ͱʹΑΓ ࣮ߦ؀ڥߏங΍࢖༻༰ྔͷίετΛ࡟ݮՄೳ suEXECͱchrootͷ૊Έ߹ΘͤʹΑΔִ཭ख๏
  28. $(*QSPDFTT PXOFSVTFS $(*QSPDFTT PXOFSSPPU QIQDHJJOEFYQIQ PXOFSVTFS $(*QSPDFTT PXOFSVTFS DISPPU ޙ

    TFUVJE TFUHJE GPSL  FYFDWF TVFYFDQSPHSBN TFUVJESPPU UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF DISPPU&OWJSPONFOU ˞%PFSTDIΒͷख๏
  29. 29 • CGIϓϩάϥϜ࣮ߦ୯ҐͰϓϩηεͷੜ੒ɾഁغ͕ඞཁͱͳΓੑೳ͕௿͘ͳΔ • suEXECϓϩάϥϜͷexecv()΋ෳ਺ճ࣮ߦ • ϓϩάϥϜͷΠϯλϓϦλΛ࠷ॳ͔Βىಈ͢Δඞཁ͕͋Γىಈίετ͕ߴ͍ • DSOͷΞΫηε੍ޚͷੑೳͱൺֱͯ͠ޙड़ CGI࣮ߦํࣜͷΞΫηε੍ޚͷ՝୊

  30. 4-1. DSO࣮ߦํࣜͷηΩϡϦςΟ (ΞϓϦέʔγϣϯϨΠϠʔͰͷΞΫηε੍ޚ)

  31. 31 • αʔόϓϩηεʹ૊ΈࠐΜͩΠϯλϓϦλ͕ϓϩάϥϜΛ௚઀࣮ߦ • ϦΫΤετ୯ҐͰϓϩηεͷੜ੒ɾഁغ͕ෆཁ • ΠϯλϓϦλΛ࠷ॳ͔Βϩʔυ͢Δඞཁ΋ແ͠ • εΫϦϓτͷߦ಄ʹShebangߦͷهड़΋ඞཁແ͠ •

    αʔόϓϩηεͷΦʔφͰ࣮ߦ͞ΕΔͨΊηΩϡϦςΟʹ஫ҙ͕ඞཁ • ΞΫηε੍ޚख๏͕͍͔ͭ͘ఏҊ͞Ε͖ͯͨ DSO࣮ߦํࣜͷϝϦοτͱݖݶ෼཭
  32. 32 DSO࣮ߦํࣜ 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ QBSTF SVO αʔόϓϩηεʹΠϯλϓϦλΛϥΠϒϥϦ

    ͱͯ͠௚઀૊ΈࠐΜͰ͓͘
  33. 33 • DSO࣮ߦํࣜͰ͋Δmod_php͸ηʔϑϞʔυͱ͍͏ػೳ͕͋ͬͨ • Ծ૝ϗετํࣜͷݖݶ෼཭Λ࣮ݱ͢ΔͨΊͷࢼΈ [2] • PHPಛ༗ͷηΩϡϦςΟػߏͰ͋Γ൚༻ੑʹ͚ܽͨ • OS΍ϑΝΠϧγεςϜͷݖݶ෼཭ͷ՝୊ΛΞϓϦέʔγϣϯϨΠϠʔͰ࣮ݱ

    ͢Δʹ͸ΞʔΩςΫνϟ্ݱ࣮తͰ͸Μ͔ͬͨ • PHP5.3.0Ͱ࢖༻͕ඇਪ঑ͱͳΓɺPHP5.4.0Ͱػೳ࡟আ PHPͷηʔϑϞʔυ <>IUUQQIQOFUNBOVBMKBGFBUVSFTTBGFNPEFQIQ
  34. ϝοηʔδ

  35. DSO࣮ߦํࣜͷηΩϡϦςΟ (਌αʔόϓϩηεͷrootԽΛར༻ͨ͠ΞΫηε੍ޚ) 4-2.

  36. 36 • NakamitsuΒʹΑΔख๏ [3] • ApacheϞδϡʔϧmod_suid2ͱ࣮ͯ͠૷ • αʔόϓϩηεΛrootݖݶͰىಈ͓͖ͯ͠ɺϦΫΤετ୯ҐͰݖݶΛมߋ rootͷαʔόϓϩηεͰݖݶ෼཭͢Δख๏ [33]

    Hideo N, mod-suid2, http://code.google.com/p/ mod-suid2/
  37. 37 DSO࣮ߦํࣜ 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ QBSTF SVO αʔόϓϩηεʹΠϯλϓϦλΛϥΠϒϥϦ

    ͱͯ͠௚઀૊ΈࠐΜͰ͓͘
  38. 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSSPPU JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO

    ˞NPE@TVJE $IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSVTFS UFSNJOBUFQSPDFTT ϦΫΤετຖͷࢠIUUQEϓϩηεͷੜ੒ഁغ͕ඞཁ
  39. 39 • DSO࣮ߦํࣜͷϝϦοτͰ͋ΔύϑΥʔϚϯεͷԸܙ͕ಘΒΕͳ͍ • ϦΫΤετ୯ҐͰࢠαʔόϓϩηεΛੜ੒ɾഁغ͢Δඞཁ͕͋Δ • ࢠαʔόϓϩηεͷੜ੒ɾഁغ͸CGIϓϩηεͷੜ੒ɾഁغΑΓ΋ίετߴ • ݁ՌతʹCGIํࣜͰϓϩάϥϜΛ࣮ߦ͢ΔΑΓ΋ੑೳ͕௿Լ •

    αʔόϓϩηεʹ೚ҙͷίϚϯυΛ࣮ߦ͢Δ੬ऑੑ͕͋Δ৔߹ • ༰қʹrootݖݶΛ࣋ͬͨϓϩηεΛୣΘΕΔ mod_suid2ͷ՝୊
  40. 40 • αʔόϓϩηεΛrootͰىಈ͠ηΩϡΞOSͰrootͷಛݖΛҰ෦੍ݶ͓ͯ͘͠ • ϦΫΤετຖʹfork()ͰϓϩηεΛੜ੒͠ɺϓϩηεͷݖݶΛมߋ͔ͯ͠Βί ϯςϯπΛ࣮ߦɺϓϩηεΛഁغ͢Δख๏ • mod_suid2ΑΓ҆શͰ͋Δ͕ϦΫΤετ୯ҐͰϓϩηεͷੜ੒ɾഁغ͕ඞཁ • ݪཧతʹDSO࣮ߦํࣜͰ͋ͬͯ΋suEXECΛ࢖ͬͨCGIఔ౓ͷੑೳʹͳΔ

    ݪΒʹΑΔख๏ [4] [4] ݪ େีɼඌ྄࡚ଠɼฌ಄࿨थɼதࢁହҰɼ“Harache: ϑΝΠϧॴ༗ऀͷݖݶͰಈ࡞͢Δ WWW αʔόɼ” ৘ॲֶ࿦ɼ vol.46, no.12, pp.3127–3137, 2005.
  41. 41 • CGI࣮ߦํࣜ(chroot+suEXEC)ɺCGI࣮ߦํࣜ(suEXEC)ɺDSO(mod_suid2) • ಉ࣌઀ଓ਺Λ1͔Β450ʹมԽͤ͞ͳ͕ΒඵؒͷϨεϙϯε਺Λܭଌ • PHPͰจࣈྻΛग़ྗ͢Δ͚ͩͷCGIϓϩάϥϜΛར༻ ࢀߟ: ੑೳධՁ

  42. 42 ࣮ݧ؀ڥ

  43. None
  44. DSO࣮ߦํࣜͷηΩϡϦςΟ (ಛݖΛ׆༻ͨ͠ϓϩηε୯ҐͷΞΫηε੍ޚ) 4-3.

  45. 45 • ੑೳ໘ʹ͓͍ͯCGI͸ຊདྷద͍ͯ͠ͳ͍ • ऩ༰਺͕૿͑ΔͱϓϩηεͷϝϞϦ࢖༻ྔ͕૿͑fork()ͷޮ཰௿Լ • ͦ΋ͦ΋ϦΫΤετ୯ҐͰfork()͢ΔͷͰ஗͍ • DSO͸ຊདྷfork()Λ࣮ߦ͠ͳ͍ͨΊߴ଎ʹಈ࡞͢Δ͕ •

    ैདྷͷDSOͷΞΫηε੍ޚ͸ϦΫΤετຖʹfork()Λ࣮ߦ͢Δ ߴूੵϚϧνςφϯτͱCGIɾDSOͷੑೳ
  46. 46 • NakamitsuΒʹΑΔmod_ruid2 [6] • rootͰαʔόϓϩηεΛىಈ͢ΔͷͰ͸ͳ͘rootͷಛݖΛࡉ෼Խ্ͨ͠ͰҰൠ ϢʔβʹಛݖΛҰ෦༩͑Δ → Linux Capability

    • ΦʔφΛมߋ͢ΔCAP_SETUIDͱCAP_SETGIDΛ༩͑Ε͹ྑ͍ ҰൠϢʔβͷϓϩηεͰݖݶ෼཭͢Δख๏ [6] Hideo, N, mod-ruid2, https://github.com/mind04/mod-ruid2 ΦϑΟγϟϧͷURL͕΋͏ݟ౰ͨΒͳͯ͘୅ΘΓʹmind04͞Μ͕ఏڙΛଓ͚͍ͯΔ໛༷
  47. 47 • ೚ҙΞΫηε੍ޚʢDACʣ • ࣗ਎͕࡞ͬͨϦιʔε΁ʹΞΫηε͸ࣗ਎͕ܾఆ • UNIXͷඪ४తͳϞσϧ • ڧ੍ΞΫηε੍ޚʢMACʣ •

    ࣗ਎͕࡞ͬͨϦιʔεʹ׬શʹΞΫηεͰ͖ΔΘ͚Ͱ͸ͳ͍ • ؅ཧऀ͕ܾఆ → SELinuxɺTOMOYO Linux ΞΫηε੍ޚϞσϧͷ෮श
  48. 48 • Linux2.2Ҏ߱ • ैདྷͷ2֊૚ͷDACݖݶϞσϧͷ֦ு • εϨου୯Ґʹ੍ޚՄೳͳಛݖάϧʔϓ • εϨου͸3छྨͷcapability setΛ࣋ͭ

    • PermittedɺEffectiveɺInheritable • capability setͷ૊Έ߹ΘͤʹΑͬͯcapabilityͷݖݶΛ੍ޚ Linux Capabilities
  49. 49 • Permitted͸ڐՄ • EffectiveͷηοτɾΞϯηοτ͕Մೳ • PermittedΛΞϯηοτ͢Δͱ໭Εͳ͍ • Effective͸࣮ޮ •

    ࣮ࡍͷݖݶՄ൱νΣοΫ͸EffectiveΛ൑ఆ͢Δ • Permitted͕ڐՄ͞Ε͍ͯΕ͹Ξϯηοτޙͷ࠶ηοτ͕Մೳ PermittedͱEffective
  50. 50 • ໿40άϧʔϓʹ෼ׂ͞Ε͍ͯΔ • uidɾgidมߋͷಛݖ • ಛݖϙʔτʢ1024ҎԼʣͷόΠϯυಛݖ • chrootͷಛݖ •

    rebootͷಛݖͳͲͳͲ…….. ಛݖͷࡉ෼Խ
  51. 51 • ಛݖΛ͍࣋ͬͯΔҰൠϢʔβͰ΋execve()࣌ʹಛݖ͕མͱ͞ΕΔ • ͨͩ͠ɺrootݖݶͰexecve()ͨ͠৔߹͸ಛݖΛҾ͖ܧ͛Δ • ϑΝΠϧࣗମʹಛݖΛઃఆͨ͠৔߹͸execve()࣌ʹಛݖΛҾ͖ܧ͙ • ͋Β͔͡ΊϑΝΠϧʹಛݖΛઃఆ͢Δඞཁ͋Γ •

    ೚ҙͷίϚϯυΛ೚ҙͷϢʔβͰಛݖΛ༩࣮͑ͭͭߦ͢Δ৔߹͸Ͱ͖ͳ͍ʁ • ҰൠϢʔβͰͷexecve()͕ඞཁɺ͔ͭɺϑΝΠϧʹಛݖΛઃఆͰ͖ͳ͍ ࣮૷࣌ͷ஫ҙ఺΍੍໿ͳͲ
  52. 52 • Linux4.3͔Β௥Ճ͞Εͨcapability • ࢠϓϩηεʹҾ͖ͮͭಛݖ܈ • ҰൠϢʔβͰfile capability͕ͳͯ͘΋execve()ޙʹҾ͖ܧ͛Δ • γϯϓϧͰ͋Δ͕࢖͍ํ࣍ୈͰ͸ඇৗʹڧྗ

    • ίϯςφ࣮૷࣌ʹAmbient capabilities͸͋͑ͯΞϯηοτ͢Δ࣮૷΋ • exeve()ޙͷ਌͔Βͷҙਤ͠ͳ͍ಛݖͷҡ࣋ͱঢ֨Λ๷ࢭ͢ΔͨΊ Ambient capabilities
  53. 53 • mod_ruid2Λ࢖ͬͯαʔόϓϩηεΛҰൠϢʔβͰىಈͭͭ͠ɺΦʔφΛมߋ ͢ΔಛݖΛ༩͑ͯ΍Ε͹ɺDSO࣮ߦํࣜͰ͋ͬͯ΋ߴ଎ʹݖݶ෼཭Մೳʁ • ϦΫΤετ୯ҐͰΦʔφΛมߋͯ͠ϨεϙϯεΛฦͨ͠ΒΦʔφΛ໭͢ • αʔόϓϩηεʹ೚ҙͷίϚϯυΛ࣮ߦ͢Δ੬ऑੑ͕͋ͬͯ΋ಛݖ͸࠷খݶ ʹݶఆͰ͖Δ ҰൠϢʔβͷϓϩηεͰݖݶ෼཭͢Δख๏

  54. 1BSFOUIUUQEQSPDFTT PXOFSBQBDIF $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO

    ˞NPE@SVJE $IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹϓϩηεͷੜ੒ഁغ͕ෆཁʁʁʁ QSDUM TFUVJETFUHJEDBQT TFUVJE TFUHJE
  55. 1BSFOUIUUQEQSPDFTT PXOFSBQBDIF $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO

    ˞NPE@SVJE $IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹϓϩηεͷੜ੒ഁغ͕ෆཁʁʁʁ QSDUM TFUVJETFUHJEDBQT TFUVJE TFUHJE ίϯςϯπΛαʔϏεར༻ऀ͕࡞੒Ͱ͖Δ ৔߹͸੬ऑੑʹͳΔ
  56. 1BSFOUIUUQEQSPDFTT PXOFSBQBDIF $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO

    ˞NPE@SVJE $IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSBQBDIF ࣮ߦϓϩηε͕ΦʔφมߋͷಛݖΛ࣋ͬ ͍ͯΔͨΊɺίϯςϯπܦ༝Ͱݖݶมߋ ͕Մೳʂʂ ˣ QSDUM TFUVJETFUHJEDBQT TFUVJE TFUHJE ίϯςϯπ࣮ߦલʹಛݖΛམͱ͞ͳ͍ͱ͍͚ ͳ͍ɻͭ·ΓɺϓϩηεͷΦʔφมߋޙ͸ݩ ͷΦʔφʹ໭Εͳ͍ͨΊϓϩηεഁغ͕ඞཁ VOTFUDBQT
  57. 57 • mod_suid2ͱಉ༷ɺ݁ہͷͱ͜ΖϗεςΟϯάαʔϏεʹ͓͍ͯɺDSO࣮ߦํ ࣜʹ͓͍ͯηΩϡϦςΟΛ୲อ͢ΔͨΊʹ͸ϦΫΤετ୯ҐͰαʔόϓϩηε ͷੜ੒ɾഁغ͕ඞཁ • ݁ՌతʹDSO࣮ߦํࣜΛ࢖͏ੑೳ্ͷϝϦοτ͕ڗडͰ͖ͳ͍ • ͜ͷΑ͏ͳΞΫηε੍ޚख๏Λ࠾༻͢Δ৔߹͸CGIͷํ͕ϝϦοτ͕ଟ͍ •

    ੑೳɾෳ਺ΠϯλϓϦλ͕ར༻ՄೳͳͲ ҰൠϢʔβͷϓϩηεͰݖݶ෼཭͢Δख๏
  58. 58 • Webαʔό͔ΒͷݖݶมߋΛՄٯతʹมߋՄೳʹͭͭ͠ɺ࣮ߦ͞ΕΔίϯςϯ πϓϩάϥϜ͔Β͸ݖݶΛมߋ͞Εͳ͍Α͏ʹ͢Δख๏ • ϓϩάϥϜ͔Β࣮ߦ͞ΕΔγεςϜίʔϧΛ͋Β͔͡Ίચ͍ग़͠ɺίϯςϯ π࣮ߦ࣌ʹ֘౰ͷγεςϜίʔϧΛϑοΫͯ͠ݖݶมߋͷॲཧΛແޮԽ͢Δ • Linuxʹ͓͍ͯγεςϜίʔϧΛద੾ʹϑοΫ͢Δʹ͸Χʔωϧʹ௚઀มߋΛՃ ͑Δඞཁ͕͋Δ

    • Χʔωϧ΍ϥΠϒϥϦΛܧଓతʹมߋ͢Δݱ৔Ͱ͸Մൖੑ͕௿͍ ݪΒͷγεςϜίʔϧΛϑοΫ͢Δख๏ [7] [7] ݪ େีɼதࢁହҰɼ“Hussa:εέʔϥϒϧ͔ͭηΩϡΞ ͳαʔόΞʔΩςΫνϟ௿ίετͳαʔόϓϩηε࣮ߦݖ ݶม ߋػߏɼ” ୈ 8 ճ৘ใՊֶٕज़ϑΥʔϥϜ (FIT 2009) ߨԋ࿦จूɼRB-002, 2009.
  59. DSO࣮ߦํࣜͷηΩϡϦςΟ (ಛݖΛ׆༻ͨ͠εϨου୯ҐͷΞΫηε੍ޚ) 4-4.

  60. 60 • DSO൛ͷੑೳΛ׆͔͢ΞΫηε੍ޚख๏͕ແ͍ • ࣮ߦํࣜ΍ΠϯλϓϦλ͕ಠࣗʹΞΫηε੍ޚख๏Λ࣮૷͓ͯ͠Γ൥ࡶ • Χʔωϧʹ൥ࡶͳ؅ཧΛٻΊΔख๏͸࣮༻্ɺՄൖੑʹ͚ܽΔ ͜͜·Ͱͷ·ͱΊ

  61. 61 • ੑೳ໘ʹ͓͍ͯCGI͸ຊདྷద͍ͯ͠ͳ͍ • ऩ༰਺͕૿͑ΔͱϓϩηεͷϝϞϦ࢖༻ྔ͕૿͑fork()ͷޮ཰௿Լ • ͦ΋ͦ΋ϦΫΤετ୯ҐͰfork()͢ΔͷͰ஗͍ • DSO͸ຊདྷfork()Λ࣮ߦ͠ͳ͍ͨΊߴ଎ʹಈ࡞͢Δ͕ •

    ͜͜·ͰͷDSOͷΞΫηε੍ޚ͸ϦΫΤετຖʹfork()Λ࣮ߦ͢Δ ߴूੵϚϧνςφϯτͱCGIɾDSOͷੑೳ
  62. 62 • DSOํࣜͷੑೳΛ׆͔͢ΞΫηε੍ޚΞʔΩςΫνϟ • ಈతίϯςϯπ࣮ߦલʹΦʔφมߋͷಛݖͷΈΛ༩੍͑ͨޚ༻εϨουΛ࡞੒ • ΦʔφΛมߋͨ͠εϨου্ͰίϯςϯπΛॲཧ • ίϯςϯπ࣮ߦޙ͸εϨουͷΈΛ࡟আ •

    ݖݶ෼཭ͷΦʔόʔϔουΛεϨουͷੜ੒ɾഁغϨϕϧʹ௿ݮ দຊΒͷεϨου୯ҐͰΞΫηε੍ޚ [8] [8] দຊ྄հ, Ԭ෦णஉ,εϨου୯ҐͰݖݶ෼཭Λߦ͏WebαʔόͷΞΫηε੍ޚΞʔΩςΫνϟ,ిࢠ৘ใ௨৴ֶձ࿦จࢽ Vol.J96-B, No.10, pp.1122-1130, Oct 2013.
  63. 63 • ݖݶ෼཭༻ͷ੍ޚ༻εϨουΛੜ੒͢ΔͨΊɺCGI΋ಉҰͷ࿮૊ΈͷதͰݖݶ ෼཭͕ՄೳʹͳΔ • Ծ૝ϗετ୯ҐͷΦʔφ৘ใ΋ϦΫΤετͷ͋ͬͨίϯςϯπ͔ΒࣗಈͰऔಘ ͢ΔͨΊϗετ୯Ґͷݖݶ෼཭ઃఆΛඞཁͱ͠ͳ͍ • ߴूੵ࣌ʹϗετͷऩ༰ઃఆ਺ͷ໰୊͔Βαʔόϓϩηεͷىಈ࣌ͷϝϞϦ࢖ ༻ྔ͕૿େ͢Δ͜ͱ͔Βɺfork()࣌ͷੑೳྼԽͷ໰୊΋͕͋ͬͨɺ౷Ұతͳઃ

    ఆͷهड़͕ՄೳͱͳΓfork()ͷੑೳ΋վળՄೳ DSOɾCGI࣮ߦํࣜ྆ํʹରԠ
  64. 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF UISFBE PXOFSVTFS UISFBE PXOFSBQBDIF JOEFYQIQ PXOFSVTFS

    TFUVJE TFUHJE ʜ VOTFUDBQT DSFBUFUISFBE TFUDBQT EFTUSPZUISFBE QBSTF SVO QSDUM TFUVJETFUHJEDBQT UISFBE PXOFSVTFS ˞%40 দຊΒͷΞΫηε੍ޚΞʔΩςΫνϟ
  65. 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF UISFBE PXOFSVTFS UISFBE PXOFSBQBDIF JOEFYQIQ PXOFSVTFS

    TFUVJE TFUHJE ʜ VOTFUDBQT DSFBUFUISFBE TFUDBQT EFTUSPZUISFBE QBSTF SVO QSDUM TFUVJETFUHJEDBQT UISFBE PXOFSVTFS ˞%40 দຊΒͷΞΫηε੍ޚΞʔΩςΫνϟ DISPPU&OWJSPONFOU
  66. 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF UISFBE PXOFSVTFS UISFBE PXOFSBQBDIF TFUVJE TFUHJE

    ʜ VOTFUDBQT DSFBUFUISFBE TFUDBQT EFTUSPZUISFBE QSDUM TFUVJETFUHJEDBQT UISFBE PXOFSVTFS ˞$(* দຊΒͷΞΫηε੍ޚΞʔΩςΫνϟ $(*QSPDFTT PXOFSVTFS QIQDHJJOEFYQIQ PXOFSVTFS $(*QSPDFTT PXOFSVTFS GPSL UFSNJOBUFQSPDFTT FYFDWF
  67. 67 • 1ϦΫΤετ1ϓϩηε઎༗͢ΔαʔόϞσϧલఏ • DSO͸εϨουͷ༗ແʹؔΘΒͣαʔόϓϩηεʹ૊Έࠐ·ΕͨΠϯλϓϦλ ͕௚઀ϓϩάϥϜΛ࣮ߦ • εϨουΛҰ࣌తʹ࡞Δ͜ͱʹΑΔηΩϡϦςΟϨϕϧͷ௿Լ͸ੜ͡ͳ͍ WebαʔόϞσϧͱ੍ޚ༻εϨουͷߟ࡯

  68. 68 • mod_process_securityϞδϡʔϧ • ઃఆ͸ҎԼͷΑ͏ʹγϯϓϧ LinuxͰApacheϞδϡʔϧͱ࣮ͯ͠૷

  69. 69 • Apache httpdʹରͯ͠ఏҊΞʔΩςΫνϟΛ࣮૷ • ඵؒͷϦΫΤετ਺ΛมԽͤ͞Ϩεϙϯε਺Λܭଌ • phpinfo()Λग़ྗ͢Δ͚ͩͷ؆୯ͳϓϩάϥϜΛ༻ҙ • ֤ख๏ͷੑೳΛධՁ

    ੑೳධՁ
  70. 70 ࣮ݧ؀ڥ

  71. 71 DSO࣮ߦํࣜͷΞΫηε੍ޚੑೳൺֱ w ඵؒϦΫΤετ਺Λ૿Ճͤ͞ͳ͕Βඵ ؒϨεϙϯε਺Λܭଌ w ྘ͷNPE@SVJEΛར༻ͨ͠ΞΫηε੍ ޚ͸΄ͱΜͲੑೳ͕Ͱ͍ͯͳ͍ w ੺ͷদຊΒͷΞΫηε੍ޚ͸ΞΫηε

    ੍ޚແ͠ͷ৔߹ͱൺ΂ͯ΋΄ͱΜͲΦʔ όʔϔου͸ແ͠ ੨ɿΞΫηε੍ޚແ͠ ੺ɿদຊΒͷΞΫηε੍ޚ ྘ɿNPE@SVJE౳ͷΞΫηε੍ޚ
  72. 72 CGI࣮ߦํࣜͷΞΫηε੍ޚੑೳൺֱ w ඵؒϦΫΤετ਺Λ૿Ճͤ͞ͳ͕ΒඵؒϨ εϙϯε਺Λܭଌ w $(*ͷΞΫηε੍ޚͷ༗ແʹؔΘΒͣ$(* ͷ࣮ߦํࣜͷΦʔόʔϔου͕େ͖͍ͨΊɺ ΞΫηε੍ޚʹΑΔΦʔόʔϔου͸ແ͍ ੨ɿΞΫηε੍ޚແ͠

    ੺ɿদຊΒͷΞΫηε੍ޚ ྘ɿTV&9&$
  73. 73 ࣮ݧ݁Ռ·ͱΊ ࣮ߦํࣜ ΞΫηε੍ޚద༻ʹΑΔεϧʔϓοτ௿Լ཰ $(* TV&9&$  NPE@QSPDFTT@TFDVSJUZ  %40

    NPE@SVJE౳  NPE@QSPDFTT@TFDVSJUZ 
  74. 74 • phpinfo()΁ͷΞΫηεΛstrace͔Βղੳ • CGI ʴ suEXEC: 3377ճ • mod_php

    + mod_process_security: 155ճ • ΦʔόʔϔουʹͳͬͯΔγεςϜίʔϧ • clone() open() close() execve() ͳͲsuEXECؔ࿈ ࢀߟɿγεςϜίʔϧͷ਺Λൺֱ ˞TUSBDFDGQ1*% ˞DBUDHJMPHcHSFQWFQPMM@XBJUcHSFQWGVUFYcQFSMBOF <aEa> QSJOU@JG
  75. 75 ࢀߟɿಋೖલޙͷCPU࢖༻ྔൺֱ Ұ೔ͷΞΫηε਺͸ͲͪΒͷαʔό΋໿ສ $(*ʴTV&9&$ %40ʴNPE@QSPDFTT@TFDVSJUZ ˙TZTUFN ˙VTFS ˙JEMF ref: দຊ྄հ,

    ηΩϡϦςΟͱੑೳཁ݅Λಉ࣌ʹຬͨ͢WebαʔόϗεςΟϯάٕज़ͷ࠷৽ಈ޲, https://speakerdeck.com/matsumoto_r/virtualhosting-security-performance-operasion
  76. 76 • ߴूੵϚϧνςφϯτํࣜʹ͓͍ͯηΩϡϦςΟͱੑೳΛཱ྆ͨ͠ख๏ • αʔόϓϩηεͦͷ΋ͷʹ೚ҙͷίϚϯυΛ࣮ߦͰ͖Δ৔߹͸Ͳ͏ͳΔ͔ • ϓϩηεΛڞ༗͢ΔݶΓWebαʔόͷΞʔΩςΫνϟ্ϦεΫ͕͋Δ • ͦͷ৔߹͸ίετͷ؍఺͔ΒVM΍ίϯςφͷִ཭Λݕ౼͢Δ •

    ίϯςφϨϕϧͷ੬ऑੑͰίϯςφͷ֎ʹग़ΒΕΔϦεΫ͸ʁ • Ϧιʔείετ͸ߴ͘ͳΔ͕VMϨϕϧͰͷִ཭Λݕ౼͢Δ΂͖ ·ͱΊͱϦεΫ
  77. 5. ͦͷଞ࠷৽ͷݚڀಈ޲

  78. 78 • Time-of-check to time-of-Use Race Condition • ҎԼͷॲཧΛUNIX͸ΞτϛοΫʹͰ͖ͳ͍ •

    ϑΝΠϧ͕ϦϯΫ͔ɺϑΝΠϧ·ͰͷύεʹϦϯΫؚ͕·ΕΔ͔ɺͦͷݕࠪ ޙʹϑΝΠϧΛopen()͢ΔΑ͏ͳॲཧ • Webίϯςϯπ͕ࣗ༝ͳϗεςΟϯάʹ͓͍ͯ͸େ͖ͳ໰୊ͱͳΔ • Ϛϧνϓϩηεͷαʔόιϑτ΢ΣΞͰ͸λΠϛϯάʹΑͬͯ͸ϦϯΫͷνΣο ΫޙʹผϑΝΠϧʹ͢Γସ͑ΒΕΔՄೳੑ༗Γ ϦϯΫݕࠪͷTOCTOU໰୊
  79. 79 • ͱ͋ΔԾ૝ϗετA͕੬ऑੑΛಥ͔ΕΔ • ϨʔείϯσΟγϣϯΛར༻ͯ͠ଞϗετBͷ.cgiʹରͯ͠.txtͷϦϯΫΛషΔ • γϯϘϦοΫϦϯΫ͸ϑΝΠϧͷଘࡏ֬ೝແ͘࡞੒͕Մೳ • Ծ૝ϗετํࣜ͸੩తϑΝΠϧͷ৔߹αʔόϓϩηεͷΦʔφͰread •

    ඇϦϯΫ൑ఆޙͰ͋ΔͨΊϗετBͷ.cgiʹॻ͔Εͨid/pass͕ӾཡՄೳ ଞϗετͷid/passΛऔಘ͞ΕΔέʔε
  80. ϑΝΠϧ͕ϦϯΫ͔ݕࠪ ϑΝΠϧͷύεʹϦϯΫ͕ ؚ·ΕΔ͔ݕࠪ ϑΝΠϧΛPQFO ͯ͠ Ϩεϙϯεੜ੒ॲཧ 8FCαʔόϓϩηεXPSLFS" ϑΝΠϧΛϦϯΫʹ ஔ͖׵͑ ϨʔείϯσΟγϣϯͷ

    Մೳੑ 0, 0, ϦϯΫͷνΣοΫޙʹ ผϗετͷϑΝΠϧ ʹஔ͖׵͑ΒΕͯ೷͖ݟ ͞ΕΔՄೳੑ͋Γ 8FCαʔόϓϩηεXPSLFS#
  81. 81 • ϗεςΟϯάཁ݅ʹ͓͍ͯ͸ղܾՄೳ • ಉҰॴ༗ऀͷϦϯΫ͸࠷ѱݕ஌Ͱ͖ͳͯ͘΋ྑ͍ • ݕ஌͢΂͖͸ଞϗετɺͭ·Γɺଞͷॴ༗ऀͷϑΝΠϧ΁ͷϦϯΫ͔Ͳ͏͔ • ϑΝΠϧopen()ޙʹfd͔ΒΦʔφνΣοΫ •

    ͦͷԾ૝ϗετͰઃఆ͍ͯ͠ΔΦʔφͱopen()ͨ͠ϑΝΠϧͷॴ༗ݖΛൺֱ mod_fileownercheck [9] [9] Ryosuke Matsumotoɼhttps://github.com/matsumotory/mod_fileownercheck.
  82. ϑΝΠϧΛPQFO GEͷPXOFSͱԾ૝ϗετͷઃ ఆͰڐՄ͍ͯ͠ΔPXOFSݕࠪ Ϩεϙϯεੜ੒ॲཧ ϑΝΠϧΛϦϯΫʹ ஔ͖׵͑ ผϗετͷϦϯΫ ʹ͸ஔ͖׵͑ΒΕͳ͍ 8FCαʔόϓϩηεXPSLFS" 8FCαʔόϓϩηεXPSLFS#

  83. 83 • ϦϯΫ࡞੒ͷϨʔείϯσΟγϣϯࣗମ͸๷͛ͳ͍ • ϗεςΟϯάཁ݅ʹ͓͍ͯผͷॴ༗ऀϑΝΠϧ΁ͷϦϯΫ͸๷͛Δ • fdͷownerͱopen()ͨ͠ϑΝΠϧͷownerൺֱͰ͸μϝ • ύεʹϦϯΫؚ͕·ΕΔ৔߹Λݕ஌Ͱ͖ͳ͍ •

    Ծ૝ϗετͷownerΛ੩తʹอ͓࣋ͯ͘͠ • υΩϡϝϯτϧʔτͷΦʔφ΍suEXECͷઃఆ͔Βऔಘ͢ΔͳͲ޻෉͕ඞཁ ஫ҙ఺
  84. 6. ·ͱΊ

  85. 85 ɾΞϓϦέʔγϣϯΛαʔόʹऩ༰͢ΔࡍͷΞΫηε੍ޚʹ͍ͭͯ ɾϋʔυ΢ΣΞϦιʔεΛ׆༻͢ΔͨΊͷ༷ʑͳ޻෉ ɾOSͷػೳΛ࠷େݶ׆͔ͭͭ͠ੑೳΛ୲อ͢ΔͨΊͷ࢓૊Έ ɾΞϓϦέʔγϣϯͷ໨తʹ߹ΘͤͨηΩϡϦςΟϞσϧͷݕ౼ ɾOSSʹ੬ऑੑ͕͋ͬͨͱ͖ʹͲ͜·ͰӨڹΛ༩͑Δ͔Λݕ౼ ɾαʔϏεϨϕϧΛఆٛͯͦ͠Εʹִ͋ͬͨ཭ํ๏Λબఆ ·ͱΊ