• 検索結果がありません。

AndroidにおけるWebViewの脆弱性を利用した攻撃を防止するアクセス制御方式の提案

N/A
N/A
Protected

Academic year: 2021

シェア "AndroidにおけるWebViewの脆弱性を利用した攻撃を防止するアクセス制御方式の提案"

Copied!
7
0
0

読み込み中.... (全文を見る)

全文

(1)Vol.2013-DPS-154 No.4 Vol.2013-CSEC-60 No.4 2013/3/14. ৘ใॲཧֶձ‫ڀݚ‬ใࠂ IPSJ SIG Technical Report. Android ʹ͓͚Δ WebView ͷ੬ऑੑΛར༻ͨ͠߈ܸΛ ๷ࢭ͢ΔΞΫηε੍‫ࣜํޚ‬ͷఏҊ ဋ ‫ڝ‬1,a). ࢁ಺ ར޺1. ֓ཁɿAndroid ͸ɼWebView Λར༻͢Δ͜ͱͰɼWeb ϖʔδͱ࿈‫͖Ͱܞ‬Δɽ͜ΕʹΑΓɼWeb ϖʔδ಺ͷ JavaScript ͸ɼAndroid ୺຤ͷϝιουΛ࣮ߦͰ͖Δɽ͔͠͠ɼ࣮ߦ͞ΕͨϝιουʹΑΓɼJavaScript ͔Β Android ୺຤಺ͷ‫ݸ‬ਓ৘ใͷୣऔɼσʔλͷվ͟ΜͳͲͷෆਖ਼ૢ࡞͕Ͱ͖Δ໰୊͕͋Δɽͦ͜Ͱɼ JavaScript ͔Β Android ୺຤ͷࢿ‫ݯ‬Λૢ࡞͢Δ Java ΦϒδΣΫτʹΞΫηε੍‫ߏػޚ‬Λ௥Ճ͢Δ͜ͱͰɼ. Android ୺຤΁ͷ߈ܸΛ๷ࢭ͢ΔํࣜΛఏҊ͢ΔɽఏҊํࣜ͸ɼJava ΦϒδΣΫτͷొ࿥࣌ʹɼJava Φϒ δΣΫτ͕࣮ߦͰ͖ΔॲཧΛղੳ͠ɼ‫ ͳݥة‬API Ϧετͱൺֱ͢Δɽ͜ΕʹΑΓɼJava ΦϒδΣΫτͷ ར༻ʹΑΓੜ͡Δજࡏ͢Δ‫ڴ‬ҖΛ‫ݕ‬ग़͠ɼར༻ऀʹఏࣔ͢Δɽར༻ऀ͸ɼఏࣔ͞Εͨ৘ใΛ΋ͱʹɼJava ΦϒδΣΫτΛແޮԽ͢Δ͜ͱͰɼAndroid ୺຤΁ͷ߈ܸΛ๷ࢭͰ͖Δɽ. 1. ͸͡Ίʹ. ʹΑΓɼAndroid ύʔϛογϣϯ (Ҏ߱ɼύʔϛογϣϯ ͱ‫ )Ϳݺ‬Λѱ༻͢Δ JavaScript ͷ‫ڴ‬ҖΛ঺հ͍ͯ͠Δɽ·. ۙ೥ɼGoogle ͕ࣾఏএɾ։ൃͨ͠‫ܞ‬ଳ୺຤༻ϓϥοτ. ͨɼͦͷ‫ڴ‬ҖΛਪఆ͢Δ੩తղੳख๏ΛఏҊ͍ͯ͠Δɽ͠. ϑΥʔϜͰ͋Δ Android[1] ͕஫໨͞Ε͍ͯΔɽAndroid. ͔͠ɼWebView ͷ੬ऑੑΛར༻ͨ͠߈ܸ΁ͷରࡦ͸ड़΂. ͸ɼΦʔϓϯιʔεͰ޿͘։ൃ͕ߦΘΕ͓ͯΓɼAndroid. ΒΕ͍ͯͳ͍ɽ. Λ౥ࡌͨ͠୺຤͕‫͍ͯ͠ٴීʹܹٸ‬Δɽ. ຊߘͰ͸ɼWebView ͷ੬ऑੑΛར༻ͨ͠߈ܸΛ๷ࢭ͢Δ. Android ͸ɼAndroid ΞϓϦέʔγϣϯʢҎ߱ɼAndroid. ΞΫηε੍‫ࣜํޚ‬ΛఏҊ͢ΔɽఏҊํࣜ͸ɼAndroid Ξϓ. ΞϓϦͱ‫Ϳݺ‬ʣͷ։ൃΛαϙʔτ͢ΔͨΊʹɼ๛෋ͳϥ. Ϧ͕ JavaScript ͱ࿈‫͢ܞ‬Δͱ͖ʹར༻͢Δ Java ΦϒδΣ. ΠϒϥϦΛఏ‫͍ͯ͠ڙ‬ΔɽಛʹɼWebKit ͕ఏ‫͍ͯ͠ڙ‬Δ. ΫτʹΞΫηε੍‫ߏػޚ‬Λ௥Ճ͢Δɽ·ͨɼaddJavascript-. WebView[2] Λར༻͢Δ͜ͱͰɼAndroid ΞϓϦʹ؆қత. Interface API ʹΑΔ Java ΦϒδΣΫτͷొ࿥ॲཧΛߦ͏. ͳϒϥ΢β‫ػ‬ೳΛ࣮‫͖Ͱݱ‬Δɽར༻ऀ͸ɼσϑΥϧτͷϒ. ࡍʹɼAndroid ΞϓϦΛ‫ٯ‬Ξηϯϒϧ͢Δ͜ͱͰɼJava Φ. ϥ΢βΛ࢖ΘͣʹɼAndroid ΞϓϦ಺Ͱ Web ϖʔδΛϨϯ. ϒδΣΫτ͕࣮ߦͰ͖ΔॲཧΛղੳ͠ɼ‫ ͳݥة‬API Ϧε. μϦϯάͰ͖Δɽ·ͨɼAndroid ΞϓϦͱ JavaScript ͷ࿈. τͱൺֱ͢Δɽ͜ΕʹΑΓɼJava ΦϒδΣΫτͷར༻ʹ. ‫ʹܞ‬ΑΓɼWeb ϖʔδ಺ͷ JavaScript ͸ɼAndroid ୺຤ͷ. ΑΓੜ͡Δજࡏ͢Δ‫ڴ‬ҖΛ‫ݕ‬ग़Ͱ͖Δɽ͞Βʹɼར༻ऀʹ. ‫ػ‬ೳ΍৘ใ΁ͷΞΫηε͕Ͱ͖Δɽ͜ͷΑ͏ʹɼAndroid. Java ΦϒδΣΫτͷొ࿥Λ‫ڐ‬Մ͢Δ͔൱͔ΛਘͶΔɽར༻. ΞϓϦͷ։ൃऀ͸ɼ‫ػ‬ೳͷ๛෋ͳΞϓϦΛ؆୯ʹ։ൃͰ. ऀ͸ɼఏࣔ͞Εͨ৘ใΛ΋ͱʹɼJava ΦϒδΣΫτΛແޮ. ͖Δɽ. Խ͢Δ͜ͱͰɼAndroid ୺຤΁ͷ߈ܸΛ๷ࢭͰ͖Δɽ. ҰํɼWebView ͷ࢖͍ํΛ͏·͘೺ѲͰ͖ͳ͍ͱɼ੬ ऑੑ͕ੜ·ΕΔ [3]ɽ͜ͷ੬ऑੑ͕ѱ༻͞Εͨ৔߹ɼ‫ݸ‬ਓ. 2. Android ͷ‫ج‬ຊ‫ ͱߏػ‬WebView ͷ໰୊఺. ৘ใͷୣऔɼσʔλͷվ͟ΜͳͲͷηΩϡϦςΟ্ͷ໰. 2.1 ‫ج‬ຊ‫ߏػ‬. ୊͕ൃੜ͢ΔɽWebView ͷ੬ऑੑΛར༻ͨ͠߈ܸʹ͍ͭ. 2.1.1 Dalvik Ծ૝Ϛγϯ. ͯɼจ‫[ ݙ‬4] ͱจ‫[ ݙ‬5] Ͱใࠂ͞Ε͍ͯΔɽจ‫[ ݙ‬4] Ͱ͸ɼ. Android ͸ɼDalvik Ծ૝ϚγϯΛར༻͍ͯ͠ΔɽDalvik. WebView ͷ੬ऑੑΛར༻ͨ͠߈ܸ͸ɼWeb ϖʔδ͔Β. Ծ૝Ϛγϯ͸ɼ୺຤͝ͱͷεϖοΫͷҧ͍Λ‫ٵ‬ऩ͢Δ͜ͱ. Android ୺຤΁ͷ߈ܸͱ Android ୺຤͔Β Web ϖʔδ΁. ʹՃ͑ͯɼαϯυϘοΫεͷ໾ׂΛ࣋ͭɽAndroid ΞϓϦ. ͷ߈ܸͷ 2 छྨ͋Δͱड़΂͍ͯΔɽจ‫[ ݙ‬5] ͸ɼWebView 1 a). ͸ɼ‫ݸ‬ผͷ UID Λ࣋ͪɼDalvik Ծ૝Ϛγϯ্Ͱಈ࡞ͯ͠ ͍Δɽ͜ΕʹΑΓɼ҆શੑΛߴΊΔɽ. Ԭࢁେֶ େֶӃࣗવՊֶ‫ڀݚ‬Պ yu@swlab.cs.okayama-u.ac.jp. c 2013 Information Processing Society of Japan . Dalvik Ծ૝Ϛγϯ͕࣮ߦՄೳͳϑΝΠϧͷϑΥʔϚο. 1.

(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 グライド防止工

現状の課題及び中期的な対応方針 前提となる考え方 「誰もが旅、スポーツ、文化を楽しむことができる社会の実現」を目指し、すべての

糸速度が急激に変化するフィリング巻にお いて,制御張力がどのような影響を受けるかを