AndroidにおけるWebViewの脆弱性を利用した攻撃を防止するアクセス制御方式の提案
7
0
0
全文
(2) Vol.2013-DPS-154 No.4 Vol.2013-CSEC-60 No.4 2013/3/14. ใॲཧֶձڀݚใࠂ IPSJ SIG Technical Report. τɼdex Ͱ͋Δɽdex ϑΝΠϧʹɼίϯύΠϧͨ͠. Android ΞϓϦͷιʔείʔυ͕·ؚΕ͍ͯΔɽ 2.1.2 ύʔϛογϣϯߏػ Android ɼAndroid ΞϓϦ͕ΞΫηεͰ͖Δػೳ ใΛύʔϛογϣϯ͍ͯ͠ޚ੍ͰߏػΔɽAndroid ΞϓϦ ͕ར༻Ͱ͖ΔύʔϛογϣϯɼAndroid ΞϓϦͷΠϯε τʔϧ࣌ʹར༻ऀʹఏࣔ͞Εɼར༻ऀ͕ঝೝ্ͨ͠ͰΠϯ ετʔϧॲཧΛߦ͏ɽͳ͓ɼཁ͞ٻΕͨύʔϛογϣϯͷ Ұ෦ͷΈΛڐՄͯ͠ɼͦͷଞͷύʔϛογϣϯΛ൱ఆ͢ Δ͜ͱͰ͖ͳ͍ɽ͜ͷͨΊɼར༻ऀɼཁ͞ٻΕͨ͢ ͯͷύʔϛογϣϯΛڐՄ͢Δඞཁ͕͋Δɽ·ͨɼΠϯε τʔϧ͞Εͨ Android ΞϓϦͷύʔϛογϣϯΛมߋ͢Δ ͜ͱͰ͖ͳ͍ɽ. 2.2 WebView WebView ɼϒϥβΤϯδϯͰ͋Δ WebKit ͕ఏڙ ͢ΔΫϥεͰ͋ΔɽWebView ɼWeb ϖʔδΛ Android. ਤ 1. WebView Λར༻ͨ͠ Android ΞϓϦͷߏ. ϗʔϜϖʔδʹʮHello WebViewʯͷΞϥʔτΛग़ྗ ͢ΔྫΛࣔ͢ɽ. webview.loadUrl("http://www.google.com/. ΞϓϦʹϩʔυ͠ɼϨϯμϦϯά͢Δ͜ͱ͕Ͱ͖Δɽ·. javascript:alert("Hello WebView")");. ͨɼWebView ʹ༷ʑͳ API ͕ఏ͞ڙΕ͍ͯΔɽ͜ΕΒ ͷ API Λར༻͢Δ͜ͱͰɼAndroid ΞϓϦͱ Web ϖʔδ. 2.3 WebView ͷ. ͷ࿈͖Ͱ͕ܞɼAndroid ΞϓϦʹ؆қతͳϒϥβػೳΛ. 2.2 અͰड़ͨΑ͏ʹɼWebView Λར༻͢Δ͜ͱͰɼ. ࣮͖ͰݱΔɽ͜ΕʹΑΓɼWeb ϖʔδΛಡΈࠐΉࡍʹɼσ. Android ΞϓϦ Web ϖʔδͱ࿈͖ͰܞΔɽ͜ΕʹΑΓɼ. ϑΥϧτϒϥβΓସ͑Δ͜ͱͳ͘ɼAndroid ΞϓϦ. Web ϖʔδͷ JavaScript ɼAndroid ΞϓϦ͕ཁ͠ٻ. Ͱ Web ϖʔδΛϨϯμϦϯάͰ͖ΔɽWebView ͷར༻. ͨύʔϛογϣϯͷൣғͰɼAndroid Λૢ࡞͢Δ͜ͱ. ʹΑΓɼAndroid ΞϓϦͷ։ൃऀɼػೳ͕๛Ͱɼརศ. ͕Ͱ͖Δɽ͜ͷػೳɼѱҙͷ͋Δ JavaScript ʹར༻͞Ε. ੑͷߴ͍ΞϓϦΛ։ൃͰ͖Δɽ. ͨ߹ɼAndroid ʹڴҖͱͳΔɽ. Android ΞϓϦͱ Web ϖʔδͷ࿈ʹܞɼΑ͘ར༻͢Δ 3 ͭͷ API ΛҎԼʹઆ໌͢Δɽ. 2.4 WebView Λར༻ͨ͠߈ܸ. ( 1 ) setJavaScriptEnabled API. 2.4.1 ߈ܸϞσϧ. JavaScript Λ ༗ ޮ Խ ͢ Δ ͨ Ί ͷ API Ͱ ͋ Δ ɽ. ਤ 1 ʹ WebView Λར༻ͨ͠ Android ΞϓϦͷߏΛ. JavaScript Λ༗ޮԽ͠ͳ͍ͱɼWeb ϖʔδΛਖ਼ৗʹ. ࣔ͢ɽWebView Λར༻ͨ͠߈ܸʹɼҎԼͷ 2 छྨ͕͋. දࣔͰ͖ͳ͍Մೳੑ͕͋Δɽ͜ͷͨΊɼWebView Ͱ. Δ [4]ɽ. ɼsetJavaScriptEnabled API ʹΑΓ JavaScript Λ༗. ( 1 ) Web ϖʔδ͔Β Android ͷ߈ܸ. ޮԽ͢Δɽ. ( 2 ) addJavascriptInterface API. JavaScript ͔Β Android ͷݸਓใͷୣऔɼ σʔλͷվ͟ΜͳͲͷෆਖ਼ૢ࡞Λߦ͏߈ܸͰ͋Δɽ. JavaScript ͔ Β Android ʹ ఆ ٛ ͞ Ε ͯ ͍ Δ ϝ. ߈ܸܦ࿏Λਤ 1 ͷ A ʹࣔ͢ɽaddJavascriptInterface. ιουΛ࣮ߦͰ͖ΔΑ͏ʹ͢ΔΈͰ͋Δɽad-. API ʹΑΓɼJava ΦϒδΣΫτΛ WebView ʹొ͢. dJavascriptInterface API Λར༻͢Δ͜ͱͰɼJava Φ. ΔͱɼWebView ʹϩʔυ͞ΕΔͯ͢ͷ Web ϖʔδ. ϒδΣΫτΛ WebView ʹొ͢Δɽొ͞Εͨ Java. ɼΦϦδϯ (υϝΠϯ໊ɼϓϩτίϧɼϙʔτΛࢦ. ΦϒδΣΫτͷར༻ʹΑΓɼJavaScript Java Ϋϥ. ͢) ΛΘͣɼJava ΦϒδΣΫτ͕࣮ߦͰ͖Δϝιο. εʹఆٛ͞Ε͍ͯΔϝιουΛ࣮ߦͰ͖Δɽ. υΛͼݺग़͢͜ͱ͕Ͱ͖Δɽ. ( 3 ) loadUrl API Web ϖʔδΛϩʔυ͢ΔͨΊʹར༻͢Δ API Ͱ͋Δɽ ҎԼʹɼGoogle ͷϗʔϜϖʔδΛϩʔυ͢ΔྫΛࣔ͢ɽ. ( 2 ) Android ͔Β Web ϖʔδͷ߈ܸ loadUrl API Λར༻ͯ͠ɼAndroid ΞϓϦ͔Β WebView ʹ ϩ ʔ υ ͞ Ε ͨ Web ϖ ʔ δ ʹ ѱ ҙ ͷ ͋ Δ. WebView webview = new WebView(this);. JavaScript ΛૹΓࠐΉ͜ͱͰɼJavaScript ΠϯδΣ. webview.loadUrl("http://www.google.com/");. ΫγϣϯΛߦ͏߈ܸͰ͋Δɽ߈ܸܦ࿏Λਤ 1 ͷ B ʹ. ·ͨɼloadUrl API ʹΑΓɼWeb ϖʔδʹ JavaScript ίʔυΛૹΓࠐΉ͜ͱ͕Ͱ͖ΔɽҎԼʹɼGoogle ͷ. c 2013 Information Processing Society of Japan . ࣔ͢ɽ ຊڀݚɼ(1) ͷ Web ϖʔδ͔Β Android ͷ߈ܸ. 2.
(3) Vol.2013-DPS-154 No.4 Vol.2013-CSEC-60 No.4 2013/3/14. ใॲཧֶձڀݚใࠂ IPSJ SIG Technical Report. JavaObject ΫϥεͱରԠ͍ͯ͠Δ Obj_for_JS ͱ͍͏ Java ΦϒδΣΫτ͕ొ͞ΕΔɽ͜ΕʹΑΓɼJavaScript . Obj_for_JS Λར༻͢Δ͜ͱͰɼJavaObject Ϋϥεʹఆٛ͞ Ε͍ͯΔॲཧΛ࣮ߦͰ͖Δɽਤ 3 ͷ 3 ߦͰɼJavaScript ɼObj_for_JS Λར༻ͯ͠ Android ͷ method_n() Λ ͼݺग़͢ɽmethod_n() ɼ͞Βʹ TelephonyManger Ϋϥ εͷ getLine1Number() Λͼݺग़͍ͯ͠Δɽ͜ΕʹΑΓɼ. Web ϖʔδͷ JavaScript ͔Β Android ͷి൪߸ ͷใΛऔಘͰ͖Δɽ. 2.4.3 ߟ JavaScript ͔Β Android ͷϝιουͷͼݺग़͠ɼ addJavascriptInterface API ʹΑΓొ͞Εͨ Java Φϒ δΣΫτΛར༻͍ͯ͠Δɽ·ͨɼJava ΦϒδΣΫτɼ. Java ΫϥεͷΠϯελϯεͰ͋ΓɼJavaScript ͔Βͼݺग़ ਤ 2 Android ଆͷ࣮ίʔυͷྫ. ͠Մೳͳϝιου Java Ϋϥεʹఆٛ͞Ε͍ͯΔɽ͜ͷ ϝιουʹɼݸਓใͷΞΫηεɼσʔλͷมߋͷΑ͏ ͳݥةੑͷ͋Δ API(Ҏ߱ɼ ͳݥةAPI ͱ·ؚ͕ )ͿݺΕ Δ߹ɼJavaScript ͔Βݸਓใͷୣऔɼσʔλͷվ͟Μ ͳͲͷෆਖ਼ૢ࡞͕ՄೳͰ͋Δɽ্ʹهΑΓɼ ͳݥةAPI ڴҖͷݪҼͱͳΔ͜ͱ͕Θ͔ͬͨɽ͜ͷͨΊɼڴҖΛࢭ ͢Δʹɼ ͳݥةAPI Λಛఆ੍ͯ͢͠ޚΔඞཁ͕͋Δɽ. ਤ 3 Web ϖʔδଆͷ࣮ίʔυͷྫ. ͷରࡦΛఏҊ͢Δɽ. 2.4.2 ߈ܸྫ WebView Λར༻༷ͨ͠ʑͳ߈ܸྫ͕ެ։͞Ε͍ͯΔ [6]ɽ. 3. ఏҊํࣜ 3.1 త ఏҊํࣜɼѱҙͷ͋Δ JavaScript ͔Β ͳݥةAPI ͷ ΞΫηεΛࢭ͢Δ͜ͱΛతͱ͢Δɽར༻ऀɼAndroid. ຊߘͰɼJavaScript ͔Β Android ͷి൪߸ͷใ. ΞϓϦΛΠϯετʔϧ͢Δࡍʹɼཁ͞ٻΕͨ Android . Λୣऔ͢ΔྫΛ༻͍ͯɼWeb ϖʔδ͔Β Android . ͷػೳࢿݯͷΞΫηεͷύʔϛογϣϯΛڐՄ͢Δɽ. ͷ߈ܸΛઆ໌͢ΔɽAndroid ΞϓϦɼWeb ϖʔδͱ࿈ܞ. ͔͠͠ɼར༻ऀɼAndroid ΞϓϦͱ Web ϖʔδͷ࿈ʹܞ. ͢ΔͨΊͷ INTERNET ύʔϛογϣϯͱɼి൪߸Λऔ. ΑΓɼWeb ϖʔδͷ JavaScript ͕ڐՄ͞Εͨύʔϛο. ಘ͢ΔͨΊͷ READ_PHONE_STATE ύʔϛογϣϯΛ. γϣϯΛར༻Ͱ͖Δ͜ͱΛҙ͍ࣝͯ͠ͳ͍ɽAndroid Ξϓ. อ࣋͢Δͷͱ͢Δɽ. Ϧ͕ѱҙͷ͋Δ Web ϖʔδΛಡΈࠐΜͩ߹ɼѱҙͷ͋. Android ΞϓϦͱ Web ϖʔδͷ࿈ܞΛ࣮͢ݱΔʹɼ. Δ JavaScript ͕ Java ΦϒδΣΫτΛར༻͠ɼ ͳݥةAPI. Android ଆͱ Web ϖʔδଆͷ྆ํͷ࣮͕ඞཁͰ͋. Λ࣮ߦ͢Δ͜ͱ͕ՄೳʹͳΔɽ͜ͷͨΊɼJavaScript ͔Β. Δɽਤ 2 ʹ Android ଆͷ࣮ίʔυͷྫΛɼਤ 3 ʹ. ͳݥةAPI ͷΞΫηεΛ੍͢ޚΔඞཁ͕͋Δɽ. Web ϖʔδଆͷ࣮ίʔυͷྫΛࣔ͢ɽ ਤ 2 ͷ 1 ߦ͔Β 4 ߦ·ͰɼJavaScript ͔Β Android ͷϝιουΛͼݺग़ͨ͢ΊͷඞཁͳཁૉͰ͋Δɽ֤ཁ ૉͷઆ໌ΛҎԼʹࣔ͢ɽ. 3.2 ߟ͑ํ 2.4.2 ߲Ͱड़ͨΑ͏ʹɼJava ΦϒδΣΫτɼڴҖͱ ͳΔ 4 ͭͷඞཁͳཁૉͷ 1 ͭͰ͋ΔɽJava ΦϒδΣΫτΛ. ( 1 ) WebView ͷΠϯελϯεͷੜ. ੍͢ޚΔ͜ͱͰɼJavaScript ͔Βͷ߈ܸΛࢭͰ͖Δɽ·. ( 2 ) JavaScript ͷ༗ޮԽ. ͨɼ2.4.3 ߲ͷߟΑΓɼJavaScript ͔ΒͷڴҖͷݪҼɼ. ( 3 ) JavaScript ͕ར༻Ͱ͖Δ Java ΦϒδΣΫτͷొ. ͳݥةAPI Ͱ͋Δɽ͜ͷͨΊɼఏҊํࣜͷతΛ࣮͢ݱΔ. ( 4 ) ϩʔυ͢Δ Web ϖʔδͷ URL ͷࢦఆ. ͨΊʹɼ ͳݥةAPI Λ Java ΦϒδΣΫτ୯ҐͰಛఆͯ͠. ্هͷ 4 ͭͷඞཁͳཁૉ͕શ෦ଗΘͳ͍ͱɼJavaScript ͔Β. ੍͢ޚΔɽ. Android ͷϝιουΛͼݺग़͢͜ͱ͕Ͱ͖ͣɼAndroid. Java ΦϒδΣΫτ͕࣮ߦͰ͖Δϝιουʹ ͳݥةAPI. ʹڴҖͱͳΒͳ͍ɽ͜ͷͨΊɼ͜ΕΒͷ 4 ͭͷཁૉ. ͕·ؚΕΔ߹ɼ͜ͷ Java ΦϒδΣΫτΛ੍ޚରͱ͢. ڴҖͱͳΔͷʹඞཁͳཁૉͱ͍͑Δɽ. Δ (Ҏ߱ɼ੍ޚରͱͳΔ Java ΦϒδΣΫτͱ)Ϳݺɽఏ. ਤ 2 ͷ 3 ߦͰɼaddJavascriptInterface API ʹΑΓɼ. c 2013 Information Processing Society of Japan . ҊํࣜͷతΛ࣮͢ݱΔͨΊͷཁ݅ΛҎԼʹࣔ͢ɽ. 3.
(4) Vol.2013-DPS-154 No.4 Vol.2013-CSEC-60 No.4 2013/3/14. ใॲཧֶձڀݚใࠂ IPSJ SIG Technical Report. (ཁ݅ 1) ੍ޚରͱͳΔ Java ΦϒδΣΫτΛผͰ͖Δ. ද 1 ͳݥةAPI Ϧετ API ໊. ͜ͱ. ૢ࡞͢Δใ. getCellLocation. ͷࡏݱ. getDeviceId. ID ൪߸. getNetworkOperator. MCC, MNC ൪߸. getPhoneType. ͷిࣜܗ. δΣΫτɼ੍ޚରͱͳΔ Java ΦϒδΣΫτͰ͋Δ͔. getSubscriberId. Ճೖऀ ID. ൱͔ผ͢Δඞཁ͕͋Δɽ·ͨɼ੍ޚରͱͳΔ Java Φ. getLine1Number. ి൪߸. getSimSerialNumber. SIM ͷγϦΞϧ൪߸. getVoiceMailAlphaTag. ϘΠεϝʔϧ൪߸ͷࣝผࢠ. getVoiceMailNumber. ϘΠεϝʔϧ൪߸. sendDataMessage. SMS Ͱͷσʔλૹ৴. sendMultipartTextMessage. ϚϧνύʔτςΩετͰͷૹ৴. sendTextMessage. ςΩετσʔλͷૹ৴. getAllProviders. ϩέʔγϣϯϓϩόΠμ໊. getBestProvider. ࠷Ԋ͏ϓϩόΠμ໊. getGpsStatus. GPS ͷঢ়ଶ. getLastKnownLocation. ϓϩόΠμ͔Βಘͨ࠷ऴҐஔใ. clearPassword. ύεϫʔυͷআ. editProperties. ೝূઃఆͷมߋ. getAccounts. ͷΞΧϯτϦετ. getAuthToken. ೝূτʔΫϯ. getPassword. ΞΧϯτʹؔ͢Δύεϫʔυ. getUserData. ΞΧϯτʹؔ͢ΔϢʔβσʔλ. peekAuthToken. ΩϟογϡͷೝূτʔΫϯ. 3.4 ରॲ. removeAccount. ΞΧϯτͷআ. 3.4.1 (՝ 1) ͷରॲ. setPassword. ύεϫʔυͷઃఆɼআ. getName. Bluetooth Ξμϓλ໊. (ཁ݅ 2) ੍ޚରͱͳΔ Java ΦϒδΣΫτͷΞΫηε Λ੍͖ͰޚΔ͜ͱ. addJavascriptInterface API ʹΑΓొ͞Εͨ Java Φϒ. ϒδΣΫτͱผ͞Εͨ߹ɼѱҙͷ͋Δ JavaScript ͔Β ͷΞΫηεΛࢭ͢Δඞཁ͕͋Δɽ. 3.3 ՝ ఏҊํࣜͷ՝ΛҎԼʹࣔ͢ɽ. (՝ 1) Java ΦϒδΣΫτ͕࣮ߦͰ͖ΔॲཧΛѲ͢Δ ͜ͱ. (՝ 2) જࡏ͢ΔڴҖΛ Java ΦϒδΣΫτ୯ҐͰಛఆ͢ Δ͜ͱ. (՝ 3) જࡏ͢ΔڴҖ͕ಛఆ͞Εͨ߹ʹɼར༻ऀʹܯ ࠂΛఏࣔ͠ɼஅ݁ՌʹΑΓ੍͢ޚΔ͜ͱ. (ཁ݅ 1) Λຬͨͨ͢Ίʹɼ(՝ 1) ͱ (՝ 2) ͕͋Δɽ(ཁ ݅ 2) Λຬͨͨ͢Ίʹ (՝ 3) ͕͋Δɽ. Java ΦϒδΣΫτ͕࣮ߦͰ͖ΔॲཧΛѲ͢ΔͨΊʹɼ. getProfileConnectionState. ϓϩϑΝΠϧͷଓঢ়گ. ରԠ͢Δ Java ΫϥεͰఆٛ͞Ε͍ͯΔॲཧͷιʔείʔ. getProfileProxy. ϓϩϑΝΠϧϓϩΩγ. υΛࢀর͢Δඞཁ͕͋Δɽ͔͠͠ɼAndroid ΞϓϦίϯ. getParams. ΫϥΠΞϯτͷঢ়ଶ. ύΠϧ͞Ε͓ͯΓɼύοέʔδͷ͍ͯͬͳʹࣜܗΔɽ͜ͷ. getUngzippedContent. Ԡ࣮ମͷ InputStream. ͨΊɼAndroid ΞϓϦͷιʔείʔυΛࢀরͰ͖ͳ͍ɽ. getCertificate. ΦϒδΣΫτʹؔ͢Δ SSL ೝূ. clearHistory. ϒοΫϚʔΫɼཤྺͷআ. clearSearches. ࡧݕσʔλϕʔεͷআ. getAllBookmarks. ϒοΫϚʔΫͷϦετ. getAllVisitedUrls. ϒϥδϯάͨ͠ URL ͷϦετ. ͦ͜ͰɼAndroid ΞϓϦΛ੩తղੳ͢Δ͜ͱͰɼ֤ Java Ϋ ϥε͕࣮ߦͰ͖ΔॲཧΛѲ͢Δɽ. Android ΞϓϦΛղੳ͢Δπʔϧͱͯ͠ɼDedexer[7] dex2jar[8] ͳͲ͕͋ΔɽDedexer ɼAndroid ΞϓϦͷ࣮ ߦϑΝΠϧͰ͋Δ dex ϑΝΠϧΛٯΞηϯϒϧ͢Δ͜ͱ. ΛѲͰ͖Δɽ͜ΕʹΑΓɼ ͳݥةAPI Λ Java ΦϒδΣ. Ͱɼdex ϑΝʔϚοτΛΞηϯϒϦίʔυʹมߋͰ͖Δɽ. Ϋτ୯ҐͰಛఆͰ͖Δɽͳ͓ɼ ͳݥةAPI ɼݸਓใΛ. dex2jar ɼdex ϑΝΠϧΛ class ϑΝΠϧΛؚΉ jar ϑΝ. ѻ͏ API ֎෦ͱ௨৴͢Δ API ͳͲද 1 Ͱఆٛͨ͠ͷ. ΠϧʹมߋͰ͖Δɽ͞ΒʹɼJD-GUI[9] Λར༻͢Δ͜ͱͰɼ. ͱ͢Δɽ. jar ϑΝΠϧΛ Java ίʔυͷͰࣜܗදࣔͰ͖Δɽ͔͠͠ɼ. 3.4.3 (՝ 3) ͷରॲ. ্هͷπʔϧ Windows ্Ͱར༻͢ΔͨΊɼAndroid ্ Ͱར༻Ͱ͖ͳ͍ɽ. addJavascriptInterface API ʹΑΓ Java ΦϒδΣΫτͷ ొॲཧ͕ߦΘΕͨ߹ɼWeb ϖʔδͷ JavaScript ͔Β. ఏҊํࣜͰɼAndroid ΞϓϦʹજࡏ͢ΔڴҖΛಈతʹ. Android ʹఆٛ͞ΕͨϝιουΛ࣮ߦͰ͖ΔΑ͏ʹͳ. ݕग़੍ͯ͢͠ޚΔͨΊɼAndroid ্Ͱ੩తղੳΛߦ͏ඞཁ. Δɽͦ͜ͰɼఏҊํࣜɼaddJavascriptInterface API Λ. ͕͋Δɽͦ͜ͰɼఏҊํࣜɼAndroid ͕ఏ͢ڙΔٯΞη. ϑοΫ͢Δ͜ͱͰɼJava ΦϒδΣΫτͷొॲཧ͕ߦΘΕ. ϯϒϧπʔϧͰ͋Δ dexdump Λར༻͢Δɽdexdump ʹΑ. Δલʹɼ੩తղੳʹΑΓڴҖ͕જࡏ͢Δ͔νΣοΫ͢Δɽ. Γɼੜ͞ΕͨΞηϯϒϦίʔυΛղੳ͢Δ͜ͱͰɼ֤. Java ΦϒδΣΫτ੍͕ޚରͱͳΔ Java ΦϒδΣΫτͱ. Java ΫϥεͷॲཧΛѲͰ͖ɼ(՝ 1) ʹରॲ͢Δɽ. அ͞Εͨ߹ɼར༻ऀʹࠂܯΛఏࣔ͢Δɽར༻ऀɼఏ. 3.4.2 (՝ 2) ͷରॲ. ࣔ͞ΕͨใΛͱʹɼ੍ޚରͱͳΔ Java ΦϒδΣΫ. dexdump ʹΑΓੜ͞ΕͨΞηϯϒϦίʔυΛղੳ͢ Δ͜ͱͰɼAPI ͷͼݺग़͠ݩͲͷ Java Ϋϥεʹ͋Δ͔. c 2013 Information Processing Society of Japan . τΛແޮԽ͢Δ͜ͱͰɼJavaScript ͔Β Android ͷ ߈ܸΛࢭͰ͖Δɽ. 4.
(5) Vol.2013-DPS-154 No.4 Vol.2013-CSEC-60 No.4 2013/3/14. ใॲཧֶձڀݚใࠂ IPSJ SIG Technical Report. ਤ 5 ਤ 4. ੩తղੳ෦. ఏҊํࣜͷશମ૾. 3.5.2 ੩తղੳ෦ ਤ 5 ʹ੩తղੳ෦ͷߏΛࣔ͢ɽ੩తղੳ෦ɼٯΞη. 3.5 جຊߏ. ϯϒϧ෦ͱ API_Class Ϛονϯά෦͔ΒͳΔɽ੩తղੳ෦. 3.5.1 શମ૾. ͷॲཧͷྲྀΕΛҎԼʹࣔ͢ɽ. ਤ 4 ʹఏҊํࣜͷશମ૾Λࣔ͢ɽఏҊํࣜɼϑϨʔϜ. ( 1 ) ٯΞηϯϒϧ෦ɼAndroid ΞϓϦͷ apk ϑΝΠϧ͔. ϫʔΫͰ Java ΦϒδΣΫτͷ੍ޚΛߦ͏ɽओʹɼ੩తղ. Β࣮ߦϑΝΠϧͰ͋Δ dex ϑΝΠϧΛऔಘ͢Δɽ. ੳ෦ɼڴҖݕग़෦ɼ͓Αͼఏࣔ AP ͷ 3 ͔ͭΒͳΔɽఏҊ. ( 2 ) dexdump Λར༻ͯ͠ٯΞηϯϒϧ͢ΔɽఏҊํࣜɼ. ํࣜɼaddJavascriptInterface API ΛϑοΫ͢Δ͜ͱͰɼ. ٯΞηϯϒϧॲཧͷΦʔόϔουΛ͑ΔͨΊʹɼ੩త. ొ͞ΕΑ͏ͱ͍ͯ͠Δ Java ΦϒδΣΫτͷར༻ʹΑΓ. ղੳʹඞཁͷͳ͍ใΛμϯϓ͠ͳ͍Α͏ʹ dexdump. ੜ͡Δજࡏ͢ΔڴҖ͕͋Δ͔νΣοΫ͠ɼར༻ऀʹ Java Φ. ͷιʔείʔυͷमਖ਼Λߦͬͨɽ. ϒδΣΫτͷొͷՄ൱ΛਘͶΔɽར༻ऀͷஅ݁ՌʹΑ. ( 3 ) API_Class Ϛονϯά෦ɼٯΞηϯϒϧ෦ʹΑΓੜ. Γɼ੍ޚରͱͳΔ Java ΦϒδΣΫτΛແޮԽ͢Δ͔ରॲ. ͞ΕͨΞηϯϒϦίʔυΛղੳ͠ɼ֤ Java Ϋϥεʹ. Λߦ͏ɽજࡏ͢ΔڴҖ͕͋Δ͔൱͔ͷνΣοΫɼͳݥة. ·ؚΕ͍ͯΔ API Λ͋Β͔͡Ί࡞ͨ͠ ͳݥةAPI. API ͱ Java ΫϥεͷରԠؔΛࣔͨ͠ API_Class Ϛον. Ϧετͱൺֱ͢Δɽ. ϯάϦετΛͱʹɼڴҖݕग़෦͕ߦ͏ɽAPI_Class Ϛο. ( 4 ) ͳݥةAPI ϦετʹҰக͢Δ API ใɼ֤ Java Ϋ. νϯάϦετɼ੩తղੳ෦͕ੜ͢Δɽਤ 4 ͷ੩తղ. ϥεຖʹ API_Class ϚονϯάϦετʹ֨ೲ͢Δɽ͜. ੳ෦͔ΒڴҖݕग़෦ͷઢͷҹɼڴҖݕग़෦͔Βͷ. ΕʹΑΓɼ ͳݥةAPI ͱ Java ΫϥεͷରԠؔΛ. API_Class ϚονϯάϦετͷࢀরΛද͢ɽ. Ѳ͢Δɽ. ఏҊํࣜͷॲཧͷྲྀΕΛҎԼʹࣔ͢ɽ. ఏҊํࣜɼજࡏ͢ΔڴҖΛνΣοΫ͢ΔͨΊʹɼAndroid. ( 1 ) Android ΞϓϦ͕ addJavascriptInterface API Λ ͼݺग़͢ɽ. ΞϓϦΛҰճ੩తղੳ͢Δɽͨͩ͠ɼAndroid ΞϓϦ͕ߋ ৽͞Εͨ߹ɼվΊͯ੩తղੳ͢Δඞཁ͕͋Δɽ੩తղੳ. ( 2 ) addJavascriptInterface API ΛϑοΫ͠ɼJava Φ ϒδΣΫτͷใΛڴҖݕग़෦ʹૹ৴͢Δɽ. ෦͕ͲͷΑ͏ͳλΠϛϯάͰ࣮ߦ͞ΕΔ͔ɼγεςϜͷੑ ೳʹӨڹΛ༩͑Δɽ੩తղੳ෦ͷ࣮ߦλΠϛϯάʹ͍ͭͯɼ. ( 3 ) ڴҖݕग़෦ʹΑΓɼڴҖ͕͋Δͱஅ͞Εͨ߹ɼఏ ࣔ AP Λͼݺग़͢ɽͳ͓ɼڴҖ͕ͳ͍ͱஅ͞Εͨ ߹ɼ(7) ͷॲཧΛߦ͏ɽ. Android ΞϓϦͷΠϯετʔϧ࣌ͱ addJavascriptInterface API ࣮ߦ࣌ͷ 2 ͭͷํ๏͕ߟ͑ΒΕΔɽ ੩తղੳ෦ͷ࣮ߦλΠϛϯάΛΠϯετʔϧ࣌ʹͨ͠. ( 4 ) ར༻ऀʹࠂܯΛఏࣔ͢Δɽ. ߹ɼAndroid ΞϓϦΛΠϯετʔϧ͢Δͱͱʹɼ੩తղ. ( 5 ) ར༻ऀɼఏࣔ͞ΕͨใΛࢀߟʹɼՄ൱அΛߦ͏ɽ. ੳΛߦ͏ɽ͔͠͠ɼΠϯετʔϧ࣌ͰɼAndroid ΞϓϦ. ( 6 ) ఏࣔ AP ɼஅ݁ՌΛڴҖݕग़෦ʹฦ٫͢Δɽ. WebView Λར༻͍ͯ͠Δ͔൱͔அͰ͖ͳ͍ͨΊɼ͢. (7) ڴ. Җ. ݕ. ग़. ෦. . ɼ. அ. ݁. Ռ. Λ. addJavascriptInterface API ʹฦ٫͢Δɽ ( 8 ) ڴҖ͕ͳ͍ɼ·ͨར༻ऀ͕ Java ΦϒδΣΫτΛ. ͯͷ Android ΞϓϦʹରͯ͠੩తղੳΛߦ͏ɽ͜ͷͨ ΊɼWebView Λར༻͍ͯ͠ͳ͍ Android ΞϓϦͷղੳ͕ ແବʹͳΔɽ. ༗ޮԽͨ͠߹ɼJava ΦϒδΣΫτͷొॲཧΛߦ. ੩తղੳ෦ͷ࣮ߦλΠϛϯάΛ addJavascriptInterface. ͏ɽͳ͓ɼར༻ऀʹΑΓ Java ΦϒδΣΫτΛແޮԽ. API ࣮ߦ࣌ʹͨ͠߹ɼݕରͱͳΔ Android ΞϓϦͷ. ͨ͠߹ɼJava ΦϒδΣΫτͷొॲཧΛߦΘͣɼ. Έ੩తղੳΛߦ͏ɽ͔͠͠ɼຖճͷ addJavascriptInterface. addJavascriptInterface API ͷॲཧΛऴྃͤ͞Δɽ. API ࣮ߦ࣌ʹ੩తղੳΛߦ͏ͱɼΦʔόϔου͕େ͖͍ɽ. c 2013 Information Processing Society of Japan . 5.
(6) Vol.2013-DPS-154 No.4 Vol.2013-CSEC-60 No.4 2013/3/14. ใॲཧֶձڀݚใࠂ IPSJ SIG Technical Report ද 2. ϗετ OS ͷଌఆڥ. σΟετϦϏϡʔγϣϯ. Windows 7 Home Premium. CPU. Inter(R) Core(TM) i7-3517U 1.90GHz. ϝϞϦ. 8 GB. ԾԽιϑτΣΞ. VMware Player 4.0.4. ද 3. ήετ OS ͷଌఆڥ. σΟετϦϏϡʔγϣϯ. Ubuntu 10.04 LTS ɹɹɹɹɹɹɹɹɹ. Χʔωϧ. Linux 2.6.32-44-generic. Ծ CPU . 2. ϝϞϦ. 4 GB. ද 4. ੩తղੳॲཧ࣌ؒͷଌఆ݁Ռ. Android ΞϓϦ. dex ϑΝΠϧͷαΠζ. HelloWebView. 5.6 KB. 182 ms. 781.8 KB. 12,324 ms. LivingSocial. ฏॲۉཧ࣌ؒ. 3.6 ظ͞ΕΔޮՌ ఏҊํࣜͷ࣮ʹݱΑΓҎԼͷޮՌ͕ظͰ͖Δɽ. ( 1 ) WebView Λར༻ͨͯ͢͠ͷ Android ΞϓϦʹ͓͍ ͯڴҖΛ࿙Εͳ͘ݕग़Ͱ͖Δ ਤ 6. addJavascriptInterface API ΛϑοΫ͠ɼAPI_Class ఏࣔ AP ͷදࣔྫ. ϚονϯάϦετΛࢀর͢Δ͜ͱͰɼͯ͢ͷ Java Φ ϒδΣΫτͷར༻ʹΑΓੜ͡Δજࡏ͢ΔڴҖΛݕग़Ͱ. ͜ͷͨΊɼ੩తղੳ͕ߦΘΕ͍ͯͳ͍ Android ΞϓϦͰ͋ Δ͔൱͔ɼ·ͨ Android ΞϓϦͷߋ৽ʹΑΓ࠶ղੳ͢Δඞ ཁ͕͋Δ͔൱͔அ͢ΔΈ͕ඞཁͰ͋Δɽ ݱஈ֊ͷఏҊํࣜͷ࣮ɼΠϯετʔϧ࣌ʹ੩తղੳ. ͖Δɽ. ( 2 ) ར༻ऀͷஅΛࢧԉͰ͖Δ ఏࣔ͢Δ ʹࠂܯWeb ϖʔδͷ URL Λදࣔ͢Δ͜ͱ Ͱɼར༻ऀɼWeb ͔ΒͷڴҖͷҙࣝΛߴΊΔ͜ͱ. ෦Λ࣮ߦ͍ͯ͠Δɽࠓޙͷ՝ͱͯ͠ɼ͜ͷ 2 ͭͷํ๏ͷ. ͕Ͱ͖Δɽ·ͨɼར༻ऀ͕Մ൱அΛߦ͏ࡍʹɼWeb. ੑೳΛධՁ͢Δ͜ͱ͕͋Δɽ. ϖʔδͷ URL ͷใͱ ͳݥةAPI ͷใΛࢀߟͰ͖. 3.5.3 ڴҖݕग़෦. Δɽ·ͨɼར༻ऀɼ͏·͘அͰ͖ͳ͍߹ɼWeb. ڴҖݕग़෦ɼaddJavascriptInterface API ͷϑοΫʹΑ. ϖʔδͷ URL Λ WebView ͷΘΓʹɼσϑΥϧτ. ΓಘΒΕͨ Java ΦϒδΣΫτͷใɼ੩తղੳ෦ʹΑΓಘΒ. ϒϥβʹϩʔυͤ͞ɼσϑΥϧτϒϥβͰ Web. Εͨ API_Class ϚονϯάϦετΛͱʹɼJava ΦϒδΣ. ϖʔδͷ҆શੑΛ֬ೝ্ͨ͠ͰՄ൱அΛߦ͏͜ͱ. Ϋτͷར༻ʹΑΓੜ͡Δજࡏ͢ΔڴҖ͕͋Δ͔൱͔νΣο. Ͱ͖Δɽ. Ϋ͢ΔɽڴҖ͕͋Δͱஅ͞Εͨ߹ɼఏࣔ AP Λͼݺग़. ( 3 ) ڴҖ͕ݕग़͞Εͨ߹ɼJava ΦϒδΣΫτΛແޮԽ͠. ͢ɽ·ͨɼར༻ऀͷஅ݁ՌΛड͚औͬͯɼaddJavascript-. ͯɼWeb ϖʔδΛࢀরͰ͖Δ. Interface API ʹฦ٫͢ΔɽڴҖ͕ͳ͍ͱஅ͞Εͨ߹ɼ. ఏҊํࣜɼڴҖΛ Java ΦϒδΣΫτ୯ҐͰಛఆ͠ɼ. ఏࣔ AP Λͼݺग़ͣ͞ɼͦͷ݁ՌΛ addJavascriptInterface. ੍͖ͰޚΔɽ͜ͷͨΊɼAndroid ΞϓϦͷಈ࡞Λࢭ. API ʹฦ٫͢ΔɽaddJavascriptInterface API ɼ௨ৗͷ. ΊΔ͜ͱͳ͘ɼڴҖͱͳΔ Java ΦϒδΣΫτͷΈΛ. Java ΦϒδΣΫτͷొॲཧΛߦ͏ɽ. ແޮԽ͢Δ͜ͱͰɼڴҖΛࢭͰ͖Δɽ͜ΕʹΑΓɼ. 3.5.4 ఏࣔ AP. WebView Ͱ Web ϖʔδΛ҆શʹࢀরͰ͖Δɽ. ఏࣔ AP ɼར༻ऀʹࠂܯΛఏࣔ͢Δɽ·ͨɼར༻ऀͷ அ݁ՌΛڴҖݕग़෦ʹฦ٫͢Δɽৄࡉɼਤ 6 ʹࣔ͢ܯ ࠂͷදࣔྫΛ༻͍ͯઆ໌͢Δɽදࣔը໘ʹɼAndroid Ξ ϓϦ໊ɼWebView ͕ϩʔυ͢Δ Web ϖʔδͷ URL ใɼ. 4. ੑೳධՁ ఏҊํࣜͷੑೳΛѲ͢ΔͨΊʹɼ੩తղੳͷॲཧ࣌ؒΛ ଌఆͨ͠ɽଌఆ༻ͷ Android ΞϓϦɼࣗ࡞ͨ͠ HelloWe-. Web ϖʔδ͔Β Android ͷࢿݯΛૢ࡞͢Δ Java Φϒ. bView ͱจ[ ݙ4] Ͱհ͞Ε͍ͯΔ WebView Λར༻ͨ͠. δΣΫτͷ໊લɼ͓Αͼݕग़͞Εͨ ͳݥةAPI ͷใΛද. Android ΞϓϦͷදྫͰ͋Δ LivingSocial[11] Λ༻͍ͨɽ. ࣔ͢Δɽར༻ऀɼදࣔ͞ΕͨใΛࢀߟʹɼJavaScript. ଌఆڥΛද 2 ͱද 3 ʹࣔ͢ɽϗετ OS ɼVMware. ʹఏ͢ڙΔ Java ΦϒδΣΫτΛ༗ޮԽ͢Δ͔ɼ·ͨແ. Player 4.0.4 Λར༻ͯ͠ήετ OS Λىಈͤͨ͞ޙɼήε. ޮԽ͢Δ͔Λஅ͢Δɽ. τ OS ্ͰఏҊํࣜΛ࣮ͨ͠ Android 4.0.3 Λಈ࡞ͤ͞ɼ. c 2013 Information Processing Society of Japan . 6.
(7) Vol.2013-DPS-154 No.4 Vol.2013-CSEC-60 No.4 2013/3/14. ใॲཧֶձڀݚใࠂ IPSJ SIG Technical Report. ֤ Android ΞϓϦΛ 5 ճ੩తղੳͨ͠ɽଌఆ݁ՌΛද 4 ʹࣔ͢ɽ. ँࣙ ຊڀݚͷҰ෦ɼךใՊֶৼஂࡒڵฏ 23 ॿڀݚʹΑΔɽ. ද 4 ͔ΒɼαΠζͷখ͍͞ HelloWebView ͷ੩తղੳʹ ͔͔Δ࣌ؒ 182 ϛϦඵͰ͋Γɼ͍͜ͱ͕Θ͔ͬͨɽҰ. ࢀߟจݙ. ํɼαΠζͷେ͖͍ LivingSocial ɼ 12 ඵఔͷॲཧ. [1]. ͕͔͔࣌ؒͬͨɽͨͩ͠ɼఏҊํࣜͰɼAndroid ΞϓϦ ͷ੩తղੳɼΞϓϦͨΓҰճ͔͠ߦΘͳ͍ͨΊɼར༻ ऀʹͦΕ΄ͲͷΦʔόϔουͰͳ͍ͱߟ͑ΒΕΔɽ. 5. ؔ࿈ڀݚ WebView ͷར༻ʹΑΓੜ͡Δ੬ऑੑ͕͞Ε͍ͯ Δ [3],[6],[10]ɽจ[ ݙ4] ͷௐࠪͰɼ86%ͷ Android ΞϓϦ ͕ WebView Λར༻͍ͯ͠Δͱใࠂ͞Ε͍ͯΔɽ·ͨɼWe-. bView Λར༻ͨ͠߈ܸʹ͍ͭͯɼWeb ϖʔδ͔Β Android ͷ߈ܸͱ Android ͔Β Web ϖʔδͷ߈ܸͷ. 2 छྨ͕͋Δͱड़ΒΕ͍ͯΔɽ จ[ ݙ5] ɼWebView Λར༻ͨ͠ڴҖΛਪఆ͢Δ੩తղ ੳख๏ΛఏҊ͍ͯ͠Δɽ͜ͷ੩తղੳख๏ɼDedexer Λ ར༻͠ɼ͋Β͔͡Ί࡞ͨ͠ѱੑ API ϦετΛͱʹڴ ҖΛݕग़͢Δɽ͔͠͠ɼจ[ ݙ5] ɼڴҖ͕જࡏ͢Δ͔൱ ͔ͷਪఆΛ Android ΞϓϦ୯ҐͰߦ͍ͬͯΔɽ·ͨɼਪఆ ͞ΕͨڴҖͷ࣮ߦ࣌ͷରॲΛߦ͍ͬͯͳ͍ɽ͜ͷͨΊɼ. Android ΞϓϦʹڴҖ͕͋Δͱਪఆ͞Εͨ߹ɼར༻ऀɼ ͦͷ Android ΞϓϦΛར༻͢Δ͔൱͔͔͠બͰ͖ͳ͍ɽ ఏҊํࣜɼಈ࡞͍ͯ͠Δ Android ΞϓϦʹ WebView ͷར༻ʹΑΓੜ͡Δજࡏ͢ΔڴҖ͕͋Δ͔൱͔Λ Java Φ ϒδΣΫτ୯ҐͰಛఆ͠ɼར༻ऀʹ௨͢Δɽ·ͨɼར༻. Android, the world’s most popular mobile platform—Android Developers, available from ʪhttp://developer.android.com/about/index.htmlʫ [2] WebView—Android Developers, available from ʪhttp://developer.android.com/reference/android/webkit /WebView.htmlʫ [3] εϚʔτϑΥϯΞϓϦͷϒϥβػೳͷ࣮ʹજ Ή ݥ ةʕʕWebView Ϋ ϥ ε ͷ ʹ ͭ ͍ ͯ ɼೖ ख ઌ http://codezine.jp/article/detail/6618 (2012.06.25). [4] Tongbo Luo, Hao Hao, Wenliang Du, Yifei Wang, and Heng Yin: Attacks on WebView in the Android System, 27th Annual Computer Security Applications Conference (ACSACʟ11), pp.343-352 (2011). ल໌ɼүོݪকɼܟ༞ɼాۼɹาɿAndroid ύʔ [5] ϛογϣϯΛѱ༻͢Δ Script ͷڴҖͱ੩తղੳɼใॲཧ ֶձڀݚใࠂɼvol.2011-CSEC-53ɼno.3ɼpp.1-6 (2011)ɽ [6] lexanderA—WebView examples, available form ʪhttp://lexandera.com/category/webview_examples/ʫ (2009). [7] Dedexer, available from ʪhttp://dedexer.sourceforge.net/ʫ [8] dex2jar, available form ʪhttp://code.google.com/p/dex2jar/#Newsʫ [9] JD-GUI—Java Decompiler, available form ʪhttp://java.decompiler.free.fr/?q=jdguiʫ [10] Android η Ω ϡ Ϧ ς Ο ษ ڧձ—WebView ͷ ੬ ऑ ੑฤɼೖखઌ http://ierae.co.jp/uploads/webview.pdf (2012.10.06). [11] LivingSocial, available form ʪhttps://play.google.com/store/apps/details?id=com. livingsocial.wwwʫ. ऀɼJava ΦϒδΣΫτΛແޮԽ͢Δ͜ͱͰɼѱҙͷ͋ Δ JavaScript Λ WebView ʹϩʔυͯ͠ɼAndroid ʹڴҖͱͳΒͳ͍ɽ͜ΕʹΑΓɼར༻ऀɼWebView Ͱ. Web ϖʔδΛ҆શʹࢀরͰ͖Δɽ·ͨɼఏҊํࣜɼJava ΦϒδΣΫτͷొ࣌ʹڴҖ͕જࡏ͢Δ͔νΣοΫ͢Δͨ ΊɼWebView Λར༻ͨͯ͢͠ͷ Android ΞϓϦʹ͓͍ ͯڴҖΛ࿙Εͳ͘ݕग़ͯ͠ରॲͰ͖Δɽ. 6. ͓ΘΓʹ WebView ͷ ར ༻ ʹ Α Δ Web ϖ ʔ δ ͔ Β Android ͷ߈ܸʹ͍ͭͯड़ͨɽ͜ͷ߈ܸͷରॲͱͯ͠ɼ. JavaScript ͔Β Android ͷࢿݯΛૢ࡞͢Δ Java Φϒ δΣΫτʹΞΫηε੍ߏػޚΛՃ͢Δ͜ͱͰɼAndroid ͷ߈ܸΛࢭ͢ΔํࣜΛఏҊͨ͠ɽఏҊํࣜͰɼ. Java ΦϒδΣΫτͷొ࣌ʹɼJava ΦϒδΣΫτͷར༻ ʹΑΓੜ͡Δજࡏ͢ΔڴҖΛݕग़Ͱ͖Δ͜ͱɼݕग़͞Εͨ ڴҖΛར༻ऀʹ௨Ͱ͖Δ͜ͱɼར༻ऀ Java ΦϒδΣ ΫτΛແޮԽ͢Δ͜ͱʹΑΓɼAndroid ͷ߈ܸΛ ࢭͰ͖Δ͜ͱΛࣔͨ͠ɽ ࠓޙͷ՝ͱͯ͠ɼ੩తղੳ෦ͷ࣮ߦλΠϛϯάͷݕ౼ ͱఏҊํࣜͷΦʔόϔουͷධՁ͕͋Δɽ. c 2013 Information Processing Society of Japan . 7.
(8)
関連したドキュメント
第一の方法は、不安の原因を特定した上で、それを制御しようとするもので
攻撃者は安定して攻撃を成功させるためにメモリ空間 の固定領域に配置された ROPgadget コードを用いようとす る.2.4 節で示した ASLR が機能している場合は困難とな
断面が変化する個所には伸縮継目を設けるとともに、斜面部においては、継目部受け台とすべり止め
本節では本研究で実際にスレッドのトレースを行うた めに用いた Linux ftrace 及び ftrace を利用する Android Systrace について説明する.. 2.1
製品開発者は、 JPCERT/CC から脆弱性関連情報を受け取ったら、ソフトウエア 製品への影響を調査し、脆弱性検証を行い、その結果を
グライド防止工を設計するにあたっては、地形・地盤条件、設置位置などを十分考慮する ものとする。 2.3.2 グライド防止工
現状の課題及び中期的な対応方針 前提となる考え方 「誰もが旅、スポーツ、文化を楽しむことができる社会の実現」を目指し、すべての
糸速度が急激に変化するフィリング巻にお いて,制御張力がどのような影響を受けるかを