跨網站指令碼(XSS)是一個保安漏洞,常見於接受用戶輸入的網站及/或網站應用程式。例子包括搜尋引擎、登入表格、留言板及評論欄。
目錄
網絡罪犯會利用這個漏洞,在這些功能輸入一系列可執行的惡意程式碼。這會將惡意代碼注入目標網站的內容,使其成為網站的一部分,從而影響可能造訪或瀏覽該網站的受害者。該代碼也可能顯示為短暫內容,而該內容實際上並非網站的一部分,但只顯示給訪客。這讓網站看起來真的被網絡罪犯入侵。
網絡罪犯亦可能利用此漏洞來控制或直接入侵網站,以及利用網站伺服器或軟件上的其他現有漏洞。
網絡罪犯會選擇目標網站,並發掘易受攻擊的接受用戶輸入功能。例如搜尋欄、登入表格及評論欄。
他們會將惡意程式碼輸入他們所選擇的功能。惡意程式碼可能使用 HTML 或 JavaScript 等編程語言撰寫。
惡意代碼會在網頁上注入,由該功能產生(搜尋結果或評論頁面的評論)。然後它就會成為該網頁的一部分,並成功入侵。
根據程式碼的輸入方式,惡意內容甚至可能不屬於實際的網頁本身,而只是一個暫時的元素,只會在漏洞攻擊中出現。這可能會產生假象,令網站在沒有被入侵時看來像已被入侵。
用戶可能因為被網絡罪犯連結或偶然發現網頁而成為被入侵網頁的受害者,其損失視乎罪犯的目標而定。
注入的程式碼在受害者系統上執行可能只會是無害的厭煩,亦可能是完全惡意。它可以像在該網站上合法發佈的圖片一樣無害,也可以將用戶重新導向至惡意網站及/或自動下載惡意檔案至其系統。它亦可用於竊取受害者的重要個人資料,例如登入資料。
透過跨網站指令碼,網絡罪犯可將受信任的網站變成惡意網站,不僅會對受害者造成傷害,還會損害受信任網站擁有者的聲譽。
跨網站指令碼所入侵的網站可造成大量威脅攻擊用戶的系統。這可以是任何不適當的內容,以至下載到系統的惡意程式,而用戶亦會對此一無所知。
雖然跨網站指令碼很危險,但仍有辦法修補這類漏洞。網站擁有者必須確保其接受用戶輸入的網上應用程式在建立結果頁面前,先淨化輸入字串。這可防止任何代碼注入。另一方面,用戶應停用瀏覽器的指令碼編寫功能,並避免點擊可疑的連結。
網站開發者/擁有者應:
確保網站上任何接受用戶輸入的頁面都會過濾輸入的代碼,例如 HTLM 及 JavaScript。
掃瞄任何網站應用程式漏洞並作出相應修補。
更新其網站及伺服器軟件,防止日後利用跨網站指令碼攻擊所針對的漏洞。
用戶應:
在不需要指令碼的頁面上停用指令碼,或將其完全停用。
避免點擊可疑電郵或留言板上帖子的連結,因為它們可能引導至已被入侵的頁面。
直接透過網址登入所需網站,而非透過第三方來源或連結。
定期更新系統軟件及應用程式,防止次級漏洞入侵。
根據開放網站應用程式保安計劃(OWASP),跨網站指令碼攻擊分為三個類別:反映式跨網站指令碼、儲存式跨網站指令碼及文件物件模型(DOM)跨網站指令碼。詳情如下。
反映式跨網站指令碼攻擊(非持續性)
當黑客向一個漏洞網站應用程式提供惡意指令碼時,伺服器就會在 HTTP 作出回應,形成一個跨網站指令碼攻擊。受害者的瀏覽器會執行惡意指令碼作為 HTTP 回應的一部分,入侵該用戶及將其私人資料傳送至黑客。
反映式跨網站指令碼攻擊通常會針對錯誤訊息或搜尋引擎結果頁面,因為許多用戶都很容易會點擊惡意電郵中的連結。當用戶點擊連結時,伺服器會接收包含惡意指令碼的要求,而由於它不會儲存這資訊,因此會向用戶發送代碼來作出回應。當用戶輸入未得到充分驗證及淨化,或資料因要求而不安全被重複時,就會有反映式跨網站指令碼漏洞的風險。
第一道防線是過濾內容及驗證用戶輸入。您可以使用指令碼供應商的安全列表和封鎖列表來拒絕風險數據。
此外,您可以實施嚴格的內容保安政策來協助您識別內網指令碼的來源,從而減低反映式跨網站指令碼攻擊的風險。強大的內容保安政策讓您控制指令碼及網頁位置,以便載入及運行它們。
儲存式跨網站指令碼攻擊(持續性)
在儲存式跨網站指令碼攻擊中,惡意指令碼會儲存用戶輸入至目標伺服器的內容。與在伺服器上執行的反射式跨網站指令碼攻擊不同,儲存式跨網站指令碼攻擊會在用戶的瀏覽器上執行。然後,攻擊者會利用一般採用 HTML 資料庫的現代 HTML5 應用程式,永久儲存瀏覽器上的有害指令碼。
在儲存式跨網站指令碼攻擊中,當用戶每次造問受影響網站時,指令碼都會在伺服器上儲存和執行。攻擊者很容易針對大量受害者,結果也是持久的。儲存式跨網站指令碼攻擊也可能在未受培訓的用戶嘗試從軟件中擷取資料,且沒有採取任何淨化或驗證等預防措施時出現。
儲存式跨網站指令碼攻擊旨在向用戶反映惡意指令碼,因此最簡單的方法是對用戶數據進行淨化,並小心處理輸入內容,而最好的方法是使用適當的參數綁定。
您可使用自動轉義範本系統或 HTML 編碼對資料進行淨化。您應將用於輸出的資料編碼,以防止伺服器將其解讀為有效內容。這表示應用程式會將儲存資料中的特殊字元視為 HTML 標籤內容,而非純 HTML。
資料參數根據向量結合不同變數,但您可以將變數作為功能正常功能以外的附加值傳遞。您也可以使用適當的回應標頭來防範攻擊,通常只要新增幾行程式碼即可。
另一個即時防止跨網站指令碼攻擊的技巧是採用動態防護來主動搜尋漏洞攻擊。透過攔截已知的攻擊模式,您可以阻止攻擊者利用現有的漏洞。
最後,您可以使用網頁應用程式防火牆即時偵測及緩解跨網站指令碼攻擊。
文件物件模型(DOM)跨網站指令碼攻擊
文件物件模型介面透過讀取和修改 HTML 和 XML 文件,可以處理和操作網頁內容。以文件物件模型為基礎的跨網站指令碼攻擊會惡意變更受害者瀏覽器的文件物件模型環境,導致意外執行客戶端程式碼。
與已反映及儲存的跨網站指令碼攻擊不同,以文件物件模型為基礎的跨網站指令碼攻擊不會儲存惡意指令碼或將其傳送至伺服器。在這攻擊中,受害者的瀏覽器是唯一的漏洞。由於比其他類別更難理解,因此文件物件模型為基礎的漏洞並不常見、複雜及難以克服。此外,自動化漏洞掃瞄及網站應用程式防火牆亦無法輕易識別。
你可使用與其他兩項相同的技巧來防止這種攻擊,但必須格外小心,以保護客戶端代碼。兩個有效的解決方案是防止用戶控制的源碼更改為有潛在危險的 JavaScript 功能(稱為水槽),或只允許使用安全清單來提供可靠的內容。有了這些預防措施,可能會危及文件物件模型的串碼不會被送往水槽。您亦可使用內建的瀏覽器功能淨化資料,從而減低出現變更語法分析器的相關風險。
對抗這類攻擊的嶄新防禦就是使用可信賴的類型。這是一個瀏覽器安全機制,確保文件物件模型的所有風險部分只能被通過預先定義政策的數據使用。它可防止任意串碼被傳遞到潛在危險的水槽,這有助瀏覽器區分程式碼與資料,消除主要的漏洞來源。
跨網站指令碼攻擊被歸類為伺服器端跨網站指令碼或客戶端跨網站指令碼。客戶端程式在客戶裝置或瀏覽器上執行,並處理用戶介面及在客戶裝置上進行的任何其他程序。伺服器端程式在伺服器上運行,並建立網頁內容。
伺服器端的跨網站指令碼會在所有伺服器端代碼都脆弱時出現,而瀏覽器也會產生回應,並執行任何內含的合法指令碼。另一方面,客戶端跨網站指令碼在用戶的裝置上執行,並在載入後修改網頁。
任何有 HTML 的地方都可以進行跨網站指令碼攻擊。無論是儲存式、反映式還是文件物件模型為基礎的攻擊,所有跨網站指令碼攻擊都具有相同的效果:攻擊者完全掌控了網絡工作時段。
這些跨網站指令碼攻擊也可能重疊,而網站可能同時容易受到所有三個方式所攻擊。在單一網站或離線應用程式的情況下,所有三種攻擊類型都可能直接在瀏覽器中出現。然而,與從伺服器反映的資料相比,當資料儲存在伺服器上時,他們的行為可能有所不同。
利用單一平台更快阻止威脅及管控您的網上風險。以人工智能、領導市場的威脅研究及情報為後盾,提供全面預防、偵測及回應功能以更有效管理保安運作。
Trend Vision One 支援各式各樣的資訊科技環境,自動化及協調工作流程,並提供專業的網絡保安服務,讓您可以整合及簡化保安運作。
Jon Clay 在網絡保安領域擁有超過 29 年經驗。他利用其業界經驗來教育及分享所有趨勢科技對外發佈的威脅研究及情報。