iT邦幫忙

24

什麼是JavaScript Hijacking?

ithelp 2008-02-01 14:17:5214549 瀏覽

一般認為,網頁安全威脅可能需要入侵網站伺服器、架設惡意網站,或在瀏覽時趁機在使用者電腦植入惡意程式等方式來攻擊,最近有人說只靠JavaScript Hijacking,就可以就能竊取資料,怎麼做到的?要如何避免?
2007年三月由Fortify公司發表了一篇技術文件,描述JavaScript劫持(JavaScript Hijacking)攻擊如何利用Ajax與JSON搭配來竊取資料。這種攻擊是跨站(Cross-Site)攻擊的一種變形,原理與XSS(Cross-Site Script,跨站指令攻擊)以及CSRF(Cross-Site Request Forgery,偽造跨站要求)類似,要實現這種攻擊需要受害網站、惡意網站、以及使用者瀏覽器等三方同時搭配,有別於一般透過入侵網站竊取資料的方式。

Ajax與JSON
Web 2.0是近年來的熱鬧話題,近一年來有許多成功的併購案都和它相關,彷彿重現當初網路泡沫時的熱潮。Web 2.0事實上是一種讓使用者高度參與的網路應用,而不是新的網路技術。在Web 2.0應用到的技術中,與JavaScript Hijacking有關的就是Ajax(Asynchronous JavaScript and XML)以及JSON(JavaScript Object Notation)。
首先來聊聊Ajax。傳統網頁要靠使用者按下更新(Refresh)鍵以觀看最新的網頁內容,但是像Gmail這樣應用Ajax的站臺,不需要使用者親自按更新鍵也能見到最新的收信夾資料,因為它能夠將用戶端與伺服器端連結起來,在不更新整個頁面的前提下,更新需要的資訊,也使得網站伺服器能夠更快速地回應。因為傳統的網站運作,是依靠瀏覽器抓取網頁並顯示給使用者,因此需要使用者手動按下更新鍵來觸發更新的行為。但是Ajax技術是使用JavaScript程式,在使用者端與伺服器端自行溝通,當有新資料的時候,JavaScript程式會自動抓取回來並且顯示在頁面上。這也是Ajax命名中所謂「非同步(Asynchronous)」的原因。而JSON其實是 JavaScript 的變數定義語法,是一種輕量級且可讀性高的資料轉換格式,規範在IETF RFC-4627之中。
Ajax架構下雖然可以使用XML,但是若傳遞資料的格式很簡單,使用XML會有「殺雞用牛刀」的感覺。因為XML既然是一種makeup language,定義起來就很嚴謹,如同HTML一樣需要表頭及表尾。若是傳遞的資料格式不太複雜,利用JSON其實經濟地多。而Fortify公司所作的示範,就是在Ajax架構下,利用JSON陣列,發動JavaScript Hijacking攻擊。

實現JavaScript Hijacking的具體方式
事實上,JavaScript Hijacking並不會對傳統形式的網站造成危害,它只能針對那些以JavaScript傳遞資料的網站產生威脅。要實現這種攻擊,需要受害網站、惡意網站、以及使用者瀏覽器等三方同時搭配,竊取資料的過程中也不需要入侵受害網站,或是在受害網站中植入任何的程式碼。
它與CSRF的運作模式類似。要完成JavaScript Hijacking,首先使用者瀏覽器要登入受害網站,登入並且取得cookie。此時,要是使用者又開了另一個瀏覽視窗,並且瀏覽到含有JavaScript Hijacking劫持攻擊的惡意網站(或是被插入惡意程式碼的網站),就可能因為執行惡意網站上面的JavaScript程式,進而將個人資料由受害網站傳送到惡意網站指定的地方。若是CSRF攻擊,則是指使瀏覽器傳送假造的資料。總而言之,JavaScript Hijacking是利用弱點「偷取資料」,而CSRF攻擊則是利用弱點「傳送假造資料」。
目前在網路上面找到的JavaScript Hijacking的攻擊程式大多利用覆寫 JavaScript 內建 Object 類別的建構子內容來達成。也就是說,當瀏覽器執行惡意網站上面的JavaScript程式時,會在登入受害網站的情況之下,呼叫惡意網站上面被覆寫過的程式碼。實際JavaScript Hijacking的概念驗證程式碼(Proof of Concept)可以在Fortify的技術文件中找到。

避免此類攻擊的方法
防制JavaScript Hijacking的方法目前有幾種:

一、在資料傳遞時,將cookie或是某些特別的欄位加入。因為惡意網站無法假造這種請求。

二、 檢查 HTTP表頭中的Referer欄位,我們可以知道是否是來自相同網域的請求。但是由於Referer可以經由一些方法變造,所以不是一個很保險的作法。你可以參考http://webappsec.org/lists/websecurity/archive/2006-07/msg00069.html

三、因為惡意網站使用<script>標籤來實行跨站攻擊,而<script> 只會產生HTTP GET請求,因此可以在伺服端設下限制,只回應HTTP POST的請求。

四、伺服器將傳回的JSON資料加以變造,使得JavaScript沒辦法直接執行。例如在JSON資料前後加上注釋符號,便可令 JavaScript 視之為一般注釋,而不加以執行,如此便不會喚起 Hijacking 程式碼。

五、 採用XML來傳遞資料,而非使用JSON。
隨著Web 2.0的網站越來越多,這種利用Ajax架構下弱點的攻擊,也會持續浮出水面。除了網站管理者要注意,所有上網的使用者也要小心。


0
john651216
iT邦研究生 1 級 ‧ 2008-04-20 11:51:06

謝謝分享

0
5min
iT邦好手 10 級 ‧ 2008-04-20 17:02:17

謝謝分享

0
tgunlu
iT邦研究生 1 級 ‧ 2008-04-26 15:27:41

謝謝分享

0
fanylu60
iT邦研究生 1 級 ‧ 2008-04-26 16:36:17

感謝提供分享

0
yce701116
iT邦研究生 1 級 ‧ 2008-04-26 16:50:49

感謝分享這個資訊

0
plutosrita
iT邦研究生 1 級 ‧ 2008-05-04 10:45:02

謝謝分享

0
tyc1220
iT邦研究生 1 級 ‧ 2008-05-15 02:26:17

謝謝分享

0

感恩分享咯!

我要留言

立即登入留言