觀點

跨網頁攻擊對企業網站所帶來的影響

2012 / 11 / 16
陳瑞賢
跨網頁攻擊對企業網站所帶來的影響

       Cross-site scripting又被簡稱為XSS1,而中文譯名則為跨網頁攻擊或是跨網站攻擊。大家可以從 OWASP2 網站的十大網站攻擊手法中發現到,跨網頁攻擊總是名列攻擊排行榜上的前五名,由此可見跨網頁攻擊的普遍性。另外,大家所熟知的釣魚攻擊(Phishing Attack),也是利用跨網頁攻擊的弱點所進行的攻擊。

       而談到跨網頁攻擊是如何發生的,那得先從HTML開始說起。在最原始的HTML網頁,所有的HTML都是為靜態網頁,也就是說每一個網頁幾乎都有一個固定的URL相對應,所以相對來說,靜態網頁並不適合被用於資料庫的存取應用,因而進一步衍生發展成為現在被廣泛應用的動態網頁技術。相較於靜態網頁只是單純的顯示網頁內容,動態網頁可以讓網頁顯示動態的資訊,現在已被大部分的網站廣泛利用,例如網站購物、即時新聞…等。

        跨網頁攻擊這個名詞也許會讓一般人感覺很困惑,簡單的來說,跨網頁攻擊是利用動態網頁的特性、網頁中的程式錯誤,以及利用開發者沒有嚴格限制回傳參數及過濾輸入之特殊字元,將具攻擊性的JavaScript、VB Script、ActiveX,或FLASH程式碼置入而所進行的攻擊。所以跨網頁攻擊可能會對企業網站造成相當大的影響。跨網站攻擊的應用其實非常廣泛,攻擊者可以利用它偷取Cookie,進一步得到被攻擊者的輸入參數,例如,帳號密碼等。

       而攻擊者是如何利用跨網頁攻擊手法進行所謂的釣魚攻擊﹖攻擊者必須利用跨網頁攻擊的特性以社交工程 (Social Engineering3) 的方式,讓被攻擊者上勾。換句話說,也就是攻擊者將已包裝好的連結,藉由Email或MSN等,讓被攻擊者連結到此連結來完成所謂的跨網頁攻擊。首先,攻擊者會找尋目標,利用簡單的檢測手法尋找擁有此弱點的網站。然後,攻擊者便可建立跟原本的網頁很類似的網頁登入畫面在自己的伺服器上,最後,再將包裝好的URL以社交工程手法,欺騙使用者上勾。待成功攻擊之後,攻擊者便可利用收集來的帳號和密碼進行資料竊取。

攻擊手法

      針對跨網頁攻擊所造成的影響,可以從常見的攻擊手法來了解;跨網頁攻擊的攻擊手法可以很單純,也可以很具破壞性。根據OWASP (Open Web Application Security Project),一般說來跨網頁攻擊可以分為stored和 reflected方式。Stored攻擊是當被攻擊者處理被修改過的script request時,那些存放 (stored) 在資料庫裡的資料便會被Request。換句話說攻擊者便可透過此方式將存放在資料庫裡的資料,回傳到它的伺服器上,較常見的為留言版或是聊天室等。Reflected攻擊則是利用錯誤訊息的產生或是搜尋的結果,或是利用送到資料庫端的Request的回應 (Response)來置換變數的攻擊。而這類的攻擊,通常是攻擊者必須取得被害者的信任,使其被攻擊者能點選執行這些已被更動過的連結。利用被攻擊者點選執行過後,驅動這些變數傳送到被攻擊者的資料庫或是瀏覽器。

      例如:<script>alert(''You Have Cross-Site Scripting'')</script> 這個JavaScript語法,相信大家都知道。雖然這是個簡單的語法,且不具備多大的殺傷力,但是,攻擊者通常可以利用此語法,先來檢測被攻擊的目標,是否擁有跨網頁攻擊的風險,利用這樣的方式來進行更進一步的攻擊。圖一、圖二為利用此JavaScript產生的畫面。

      而另外一種可以利用XSS的攻擊手法,則屬於阻斷式攻擊(DoS)。例如:攻擊者可以置入類似以下的Script:<script language = javascript>setInterval("window.open(''http://www.xss.com'',''DoS'')",99999);</script> 攻擊者可以任意更改開啟次數。例如:將其改成10000000,則可對該網站進?大?的瀏覽網頁請求,在伺服器端則會造成嚴重負荷;在客戶端則會造成用戶無法作業。

如何預防

      跨網頁程式攻擊現在是網站管理人員經常必須面對的安全性課題,除了上述提到的簡單檢測法以外,因為攻擊手法式千變萬化,所以預防方法可從幾個角度來著手:如果是一般的使用者,建議不要相信或使用來路不明的的網址,這些來路不明的網址可能來自Email或是留言版等等,因為有些可能是被包裝好的XSS URL。

        另外,如果想要瀏覽一些平常沒有瀏覽的網頁,建議可以先利用搜尋引擎搜尋再點選該網站,這樣一來便可大大降低跨網頁攻擊的威脅,而使用者更可將瀏覽器中的JavaScript設定提高等級以過濾部分Cookies。

       而從企業的角度來看,最佳的解決方法則是針對所有的網頁進行安全性檢測。網頁上的漏洞追根究底還是來自程式開發者對網頁撰寫的邏輯。一般的程式撰寫人員,因為較缺乏相關的網頁安全性知識,所以撰寫的程式,並不會特別針對所傳遞的參數做一個過濾檢測,或是將其轉換成其他的字元。程式開發者應該要在使用者客戶端,以及伺服器端,嚴格的制訂所要傳遞的參數格式。例如:在使用者的輸入欄位,便應該只能允許輸入數字和字元。其他特殊字元,便不能允許使用者輸入。而這些需被過濾的特殊符號通常有 /%<>()#& 等等。這樣,在之前的SCRIPT範例,“<script>alert( ''You Have Cross-Site Scripting'')</script>” 便會被過濾為:
“scriptalert''You Have Cross-Site Scriptingscript”。基本上,經過這樣的過濾手法,便能阻擋 95% 以上此類的攻擊了。另外,亦可阻擋另一類常見的網站攻擊手法: SQL Injection。

      一般來說,企業有委外給其他單位開發網站,或是企業內部具有屬於自己的程式開發小組。不論是哪種,企業都應該擁有一套針對網站安全性的檢測機制。如果無法自行用開發工具檢測,建議聘請資訊安全顧問公司,針對企業的網站執行外部滲透測試。藉由這類的檢測工具或服務,為企業的網站,加強網路應用層上全面性的安全補強。既保護自己的網站免於遭受此類攻擊,亦保護一般無辜的使用者成為受害人。

後記

       跨網頁攻擊其實是個非常嚴重的問題,同時也是資訊安全相關人員所會面臨的安全課題之一。目前因為企業對此種攻擊的警覺性偏低,所以類似的攻擊事件仍然層出不窮。如果不加強教育訓練相關網站及程式設計人員,攻擊者還會持續的運用跨網頁攻擊來攻擊企業的網站。例如:XSS其實是因為網頁沒做好Input Validation的管控。如果程式開發人員,在程式開發初期既擁有此種安全觀念,而將其觀念導入所開發程式中,那相對的所開發出的程式也就比較安全。所以,企業們也不需要太悲觀,跨網頁攻擊並非完全無法避免,事實上並不難防範,不過一切還得倚賴企業是否有心正視此課題。建議企業從教育訓練以及導入Web AP檢測機制兩方面著手。