2016年11月30日 VAddyユーザーミートアップ Vol.4 資料
ID管理のクラウドサービスExtic におけるセキュリティの取り組み エクスジェン・ネットワークス株式会社 野村 健太郎
IDཧͷΫϥυαʔϏεExtic ʹ͓͚ΔηΩϡϦςΟͷऔΓΈ201611݄30ΤΫεδΣϯŋωοτϫʔΫεגࣜձࣾଜ ݈ଠVAddy ϢʔβʔϛʔτΞοϓ Vol.4
View Slide
࣍• ࣗݾհ• IDaaS Ͱ͋Δ Extic ͷհ• SCIM ͷհ• Extic ʹ͓͚ΔηΩϡϦςΟͷऔΓΈʹ͍ͭͯ2
ࣗݾհ• ଜ ݈ଠ(@nomnux)• ॴଐɿΤΫεδΣϯŋωοτϫʔΫε(ג)• ೝূؔ࿈ͷࣄʹैࣄ͔ͯ͠Ε͜Ε10• ͖ͳݴޠɿPython• ࠷ۙͷ͓ؾʹೖΓɿDockerɺAnsible• ͖ͳόΠΫϝʔΧʔɿSUZUKI (ླەอ࣋ऀ)
Extic հ
ͷલʹ࣭Ͱ͢
ʮIDaaSʯͬͯ·͔͢ʁ
IDaaS ?• ฉ͍ͨ͜ͱ͋Δ• ͍ͬͯΔ(Ϣʔβʔͱͯ͠)• ։ൃ͍ͯ͠Δ7
IDaaS ؔ࿈Ωʔϫʔυ• LDAP• ϓϩϏδϣχϯά• ϑΣσϨʔγϣϯ• SAML• OAuth• OpenID / OpenID Connect• SCIM (※ೖྗϝιουͰͳ͍Ͱ͢)8
IDaaS ͱ• Identity as a Service• ʮID ཧʯʮγϯάϧαΠϯΦϯʯΛΫϥυ্ͷαʔϏεͱͯ͠ఏڙ͢Δͷ• ւ֎ɾࠃͰ༷ʑͳ IDaaS ࣄۀऀ͕αʔϏεΛల։͍ͯ͠Δ9
IDaaS ͰͰ͖Δ͜ͱ10G SuiteOffice 365ཧऀID ϓϩϏδϣχϯάΦϯϓϨAD/LDAP
IDaaS ͰͰ͖Δ͜ͱ11G SuiteOffice 365γϯάϧαΠϯΦϯ(SSO)ར༻ऀϩάΠϯ
Extic• EXGEN Trusted Identity Center• EXGEN ͕࡞ͬͨ IDaaS• ࠓͷͱ͜Ζจڭ͚12
Extic ͷػೳ• ID ϓϩϏδϣχϯά• G SuiteɺOffice 365• ΦϯϓϨͷ ADɾLDAP (ΤʔδΣϯτΛΦϯϓϨʹಋೖ)• γϯάϧαΠϯΦϯ (Ճ༧ఆ)• SAML• Shibboleth IdP (Ճ༧ఆ)• ֶज़ೝূϑΣσϨʔγϣϯ͚13
σϞ
SCIM ͷ͝հ
SCIM16SCIMClientSCIMServerJSONHTTP
ɹSCIM• System for Cross-domain Identity Management• http://www.simplecloud.info/• ID ཧ༻ͷ API (REST API) ͷ༷• ϢʔβʔใάϧʔϓใΛ JSON Ͱදݱ͠ɺHTTP ϦΫΤετͰରαʔϏε(SCIM Server)ʹૹ৴͢Δ• Extic ͰҰ෦ͷػೳͰ SCIM(ͬΆ͍) REST API Λ࣮͍ͯ͠Δ• ࣮ྫ• https://api.slack.com/scim17
SCIM ͷ JSON18{"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],"userName": "[email protected]","displayName": "NIHON Taro","nickName": "taro"}
SCIM Ͱར༻͢Δ HTTP ϝιου19ૢ࡞ HTTP ϝιουՃ POSTߋ৽PUT (શଐੑߋ৽)PATCH (Ұ෦ଐੑߋ৽)আ DELETEऔಘɾݕࡧ GET
SCIM ͷϦΫΤετ20$ curl \-H “Authorization: *****” \-H "Content-Type: application/scim+json" \-X "POST" \-d ‘{ JSON Λॻ͘(লུ) }’ \https://scimsv.example.jp/v2/UsersϢʔβʔՃͷྫ
Extic ʹ͓͚ΔηΩϡϦςΟͷऔΓΈ
ཧ• ͓٬͞Μͷ ID/PW Λ༬͔ΔͷͰηΩϡϦςΟେࣄ• ՄೳͳݶΓ(༧ࢉ͕ڐ͢ݶΓ)ઐϕϯμʔʹΑΔ੬ऑੑݕࠪΛ࣮ࢪ͍ͨ͠• VAddy ͷΑ͏ͳݕࠪπʔϧΛ։ൃϓϩηεʹΈࠐΜͰසൟ(Ϗϧυຖ)ʹηΩϡϦςΟςετ͍ͨ͠22
ݱ࣮• ઐϕϯμʔʹΑΔසൟͳݕࠪίετతʹແཧ• ϦϦʔεલʹݕࠪΛड͚ͨͱͯ͠ɺͦ͜Ͱ੬ऑੑ͕ݟ͔ͭͬͯमਖ਼ʹ͕͔͔࣌ؒΔͷͰɺखΓ͕େ͖͘ɺϦϦʔε͕ΕΔ• ϏϧυຖʹηΩϡϦςΟςετΛ࣮ࢪͯ݁͠ՌΛ֬ೝ͖͠Εͳ͍• ϩάͷ֬ೝେࣄ(ޙड़)23
ݕࠪπʔϧɾαʔϏεൺֱ24VAddyskipfishOWASP ZAPઐϕϯμʔ༻қ த ߴ ָݕ߲ࠪ গ ଟ ଟAPI ͷݕࠪ O X(?) Oݕࠪ࣌ؒ ʙ ݁Ռͷ֬ೝ(ϩά·Ͱ֬ೝ)ͪΐͬͱେม͔ͳΓେม(ઈతͳྔ…)ָ
VAddy ͷϝϦοτ• ࣮ߦ͕؆୯• खܰ͞େࣄ• ࣄલʹΫϩʔϧ͢Δ͜ͱͰɺݕࠪର URL ͕ߜΒΕΔ• ݕࠪ࣌ؒͷॖɺϩά֬ೝͷݮ• API ͷݕ͕ࠪՄೳ• ׂΓΓ• ݕ߲ࠪΛ֦ॆ͍ͨ͠߹ଞͷπʔϧΛ͑Α͍25
ݱ࣮తͳηΩϡϦςΟςετܭը26ʑͷ։ൃෆ۩߹मਖ਼ܰඍͳػೳՃେنػೳՃఆظతͳશݕࠪηΩϡϦςΟςετVAddyVAddyɾͦͷଞπʔϧͦͷଞπʔϧɾઐϕϯμʔઐϕϯμʔ
ࠓޙͷ՝• ࣗಈԽ• ΞϓϦͷσΟϓϩΠ ➡ ݕ࣮ࠪߦ ➡ ݕࠪ݁Ռ֬ೝ ͷࣗಈԽ• ը໘ͷΫϩʔϧख࡞ۀͰΑ͍• ࣗಈԽ͍ͨ͠ͱ͜ΖͰ͋Δ͕ɺͪΐͬͱେม…• ݱঢ়ɺͦ͜·Ͱը໘ଟ͘ͳ͍ͷͰɺΫϩʔϧख࡞ۀͰͳΜͱ͔ͳΔ27
VAddy ಋೖͷཪ
น• VAddy ͷεΩϟϯ݁ՌͰ੬ऑੑແ͠ͱग़·ͨ͢ɻ͜ΕͰ҆৺Ͱ͢ɻ• ͲΜͳݕࠪΛͯ͠Δͷ͔ϩάݟͯ֬ೝͯ͠ΈΑ͏ͣ• (ɹƅшƅ)• ηογϣϯ͕ඞཁͳը໘ͷεΩϟϯͰΤϥʔฦͬͯͶ?…• (ͭд⊂)ŠƄŢŠƄŢ• ηογϣϯҡ࣋Ͱ͖ͯͳ͍ ➡ ηογϣϯ͕ඞཁͳը໘(ϩάΠϯը໘Ҏ֎)ͷݕ͕ࠪͰ͖ͯͳ͍(T_T)29
ਆରԠ• (E) VAddy ͔ΒͷεΩϟϯ࣌ʹηογϣϯҡ࣋Ͱ͖ͯͳ͍Α͏Ͱ͢(T_T)• (૬ੑͱ͔͋ΔͩΖ͏͠ɺͲ͏ͯ͠εΩϟϯͰ͖ͳ͔ͬͨΒ VAddy ͖͋ΒΊΑ͏…)• (V) ରԠ͠·ͨ͠ʂ• (E) ͍͢·ͤΜɺࠓ CSRF ରࡦͷτʔΫϯ͕…• (V) ରԠ͠·ͨ͠ʂʂ30
ͦͷଞʹେม͓ੈʹͳΓ·ͨ͠…• (E) go-vaddy ίϚϯυͷΓ͕ظͱҧ͍·ͨ͠…• (V) मਖ਼͠·ͨ͠ʂ• (E) API ͷΫϩʔϧ࣌ʹඌʹΫΤϦετϦϯά͚ͭΔͷ໘͍͘͞Ͱ͢…• (V)͚ͭͳͯ͘Α͘͠·ͨ͠ʂ• (E) ͪΌΜͱΫϩʔϧͰ͖ͯΔͷ͔Ͳ͏͔ෆ҆Ͱ͢…• (V) ը໘ͰΫϩʔϧ݁ՌΛ֬ೝͰ͖ΔΑ͏ʹ͠·ͨ͠ʂ31
ޙஊ• VAddy ͷεϐʔσΟʔͳରԠָ͕ͯ͘͠ɺ͍͍ͭͭηΩϡϦςΟςετʹ಄• Docker ΛͬͯίϚϯυҰൃͰςετڥ࡞ΕΔΑ͏ʹͨ͠Γ• Nginx ͷϩάग़ྗΛڧԽͨͯ͘͠ lua ॻ͘ͷʹ಄ͨ͠Γ• ຊۀ(Πϯϑϥ֦ுɺػೳՃ)ʹࢧো͕Ͱͩ͢…• (্࢘)ʮηΩϡϦςΟେࣄ͕ͩɺͦΖͦΖۭؾಡΊʯ• VAddy ͠Β͓͘༬͚ʹ…32
ڭ܇• ϩάͷ֬ೝॏཁ• πʔϧͷݕࠪ݁ՌΛӏವΈʹͤͣɺͪΌΜͱ WebαʔόʔΞϓϦͷϩά֬ೝ͢Δ• ηΩϡϦςΟςετґଘʹҙ• ʮηΩϡϦςΟେࣄͰ͔͢Βʂʯͱ͔ݴ͍ͭͭɺʮςετΛޮతʹߦ͏ͨΊͷڥߏஙʯͱ͔ʹ಄͠ͳ͍Α͏ʹҙ…33
͋Γ͕ͱ͏͍͟͝·ͨ͠