網頁注入(Web Injection)是每位程式設計師、開發者和資訊安全(InfoSec)專家所頭疼的問題,也是網路犯罪工具包內常備的工具。特別是跨站腳本、命令注入、SQL注入和XML注入都是網站和網頁應用程式經常遭遇到的攻擊,因為這些攻擊可以透過多種方式執行。防護方案的複雜性也增加了防禦的困難度。
四種網頁注入攻擊
保護平台不讓個人及財務資料失守是企業在營運、商譽和利潤方面重要的一環。以下是資安人員經常會遇到的四種網頁注入攻擊:
- SQL注入(SQL Injection, SQLi)
SQL注入可以用來入侵使用資料庫的軟體,被開放網路軟體安全計畫(OWASP)視為侵入網站及SQL資料庫最常見的技術之一。SQLi將惡意SQL語法插入輸入字串(作為指令或查詢的一部分),並且利用了軟體或網頁應用程式的漏洞 – 例如沒有正確地過濾使用者輸入。比方說,攻擊者可以將惡意輸入變成SQL查詢的參數,讓資料庫認為是SQL指令的一部分而執行。
SQLi攻擊成功可以讓駭客偽裝成目標身份並取得資料庫伺服器的管理權限。駭客接著可以修改現有資料(如取消交易),取出系統內的資料,破壞、覆蓋或刪除資料,甚至使其無法連線。對於會用如何入侵網路來威脅企業付奬金的漏洞獵人以及會刪除網站內容並將其活動偽裝成勒索病毒的壞人來說,這一直是個首選技術。SQLi還被用來竄改網站以及公開儲存在資料庫內的個人識別資料、帳密和敏感公司資料。
- 命令注入(Command Injection)
不同於SQLi攻擊針對資料庫相關網頁應用程式/服務,命令注入讓攻擊者插入惡意shell命令到網站主機作業系統。像是可以找出應用程式安裝的目錄並在那執行惡意腳本。命令注入讓駭客可以利用有漏洞的網頁應用程式來執行任意命令 – 例如當應用程式將表單、HTTP標頭和cookie內的惡意內容帶到系統shell時。此類攻擊就會用這不安全應用程式的權限執行。
簡而言之,當惡意輸入被誤認為作業系統命令時就會發生命令注入,讓壞人可以取得檔案或網頁伺服器的控制。2014年的Shellshock攻擊就是一例:它們讓攻擊者可以修改網頁伺服器內容、變更網站代碼、竊取或外洩資料、變更權限以及安裝後門等惡意軟體。電子郵件寄送程式庫的網站元件出現漏洞時也都會成為頭條,例如聯絡人、註冊及密碼重設郵件表單。
- XML外部實體注入(XML External Entity Injection, XXE)
這類攻擊不像SQLi或跨站腳本那樣常出現,但XML外部實體注入(XXE)最近也獲得了關注。XML(可延伸標記式語言)支援外部實體。可以用來引用或調用主檔案外的資料到XML文件。XXE會攻擊網頁應用程式解析未知或可疑來源XML輸入時的漏洞。將惡意內容注入將使用者或客戶資料輸入應用程式的文件(如XML檔案)。
XXE攻擊成功可以讓駭客存取內部網路或服務、讀取存放在伺服器上的系統檔案以及掃描內部端口。在某些狀況下,XXE可以讓攻擊者執行遠端程式碼(比方說透過載入惡意可執行PHP程式碼)。這些都取決於解析器的權限。
XXE被用來成功地在Facebook執行遠端程式碼,由此成為最高的bug獎金之一。XXE漏洞最近也出現在經常用於Mac應用程式的更新框架、Adobe ColdFusion的XML解析器(CVE-2016-4264)、Google搜尋引擎的一個功能以及Magento使用的PHP工具包(Zend)。
- 跨站腳本(Cross Site Scripting, XSS)
利用跨站腳本(XSS)漏洞讓壞人可以將惡意腳本注入使用者的瀏覽器。OWASP的最新資料表示XSS是最大的安全風險,常被用來進行網頁竄改(defacement)和自動化網路攻擊。
XSS攻擊有許多種,取決於程式碼注入方式及攻擊者的動機。XSS攻擊會出現在處理使用者輸入的網頁,如資料庫、登入和搜尋表單、評論功能和留言板/論壇 – Stored XSS。錯誤和搜尋結果頁面(將輸入作為請求的一部分送給伺服器)也可能被用來傳送攻擊者注入的惡意腳本 – Reflected XSS。攻擊者還可以修改受害者瀏覽器內的文件物件模型(Document Object Model, DOM)來執行惡意行為 – DOM-based XSS。
造成的影響從騷擾到重大資安風險 – 造成不當網站內容、竊取或變動session和授權cookie、產生會被誤認為有效的請求、將使用者轉向惡意網站、劫持受害者帳號、造成網站停擺或將惡意軟體送進系統。對Yahoo!、Wordpress(利用有漏洞的外掛程式)、來自Google Docs和Google Developers的網站/網域(透過Caja工具包內的漏洞)以及電子商務和網頁開發平台Magento和Wix的攻擊是2016年有關跨站腳本攻擊的知名事件。
安全對策
與大多數事情一樣,預防勝過治療。以下是IT專業人員及網頁開發者/程式設計師可以採取的一些對策,以緩解(如果不是阻止)這些攻擊:
別相信任何人。網頁開發者必須假設所有的使用者輸入都是惡意的,必須加以驗證和消毒。白名單(拒絕白名單以外的任何輸入)是安全處理輸入的方法之一。在開發網站和網頁應用程式時,請考慮出現輸入問題時要終止執行(例如使用非預期字元),並且要過濾和編碼輸入來確保都經過檢查。有些程式語言具有污點檢驗(taint-checking)功能,可以檢查和防止用來執行惡意命令的輸入。如何處理輸出也必須驗證。網頁開發者應該用替代字元來編碼輸出,這樣可以消毒字元並防止被意外地執行。
始於安全的設計。網頁開發者必須在整個開發週期採用安全開發實作以維護會被其網頁應用程式/頁面處理資料的隱私性、完整性和可存取性。比方說,在層疊樣式表(CSS)屬性、HTML屬性和XML解析器內嚴格驗證不受信任的資料(同時保留網站/應用程式外觀)是防禦入侵的必要條件。
保持與時並進。IT專家必須定期進行更新及安裝修補程式以防止系統及軟體的安全漏洞被利用。開發人員也必須要了解最佳開發實作。同時公司內部也需要提供資安教育訓練和稽查。
別讓事情複雜化。開發人員應盡可能避免使用易遭受攻擊的工具和開發技術。像是使用準備好帶參數的語法或查詢及預存程序(Stored Procedure)而非動態SQL。停用外部實體解析也有助於緩解基於XXE的阻斷服務攻擊。
採取縱深防禦與多層次防禦機制。IT專家應該要網路內出現的惡意和可疑資料及流量。檢查網站或網頁應用程式內的連線以及請求和回應(如HTTP、HTTPS、SOAP和XML遠端程序呼叫等)。比方說檢查可能顯示出現XSS攻擊的程式碼。網頁應用程式防火牆(WAF)可以幫得上忙;WAF還具備能夠仔細檢查訊息腳本(如JavaScript)的過濾器,並且提供一些漏洞攻擊的防護。開發人員可以考慮採取縱深防禦(城堡方式)的安全策略:在網站或網頁應用程式內採取多層次防禦機制以減少被攻擊成功的可能性。
減少暴露自己。開發人員應該停用網站、資料庫或網頁應用程式不必要的元件。這有時會增加受攻擊面。像是可以提升權限和產生命令shell的功能對想要劫持SQL伺服器帳號的駭客來說很有用。透過文件型別定義(Data Type Definition, DTD)防止使用實體宣告的文件上載可以降低應用程式遭受XXE攻擊的風險。使用API可以在系統命令被呼叫前幫助分離命令和參數。建議IT專家停用不必要或未使用的端口(例如僅打開面向外部網路的HTTP/HTTPS端口)以阻止某些應用程式協定相關的網路攻擊和惡意使用。開發人員在建立/開發網站和網頁應用程式時也同樣地必須想到這些。
保守自己的秘密。 IT專家應該要實施權限管理政策來減少需要管理權限來存取系統/電腦的攻擊。開發人員也同樣地能夠透過限制網站/應用程式的使用者權限以及加密或雜湊化帳密和其他敏感資料(如連線字串)做到一樣的事情。害人可以通過錯誤頁面來取得許多關於資料庫架構的資訊。開發人員可以在外部錯誤頁面只呈現最少資訊來解決此問題,確保攻擊者只看到未處理的錯誤訊息。
再三檢查。開發人員與IT專家在部署網頁應用程式/網站前要先測試是否有漏洞。對使用資料庫的應用程式/服務和網站定期進行滲透測試有助於找出其他措施沒有防禦到的安全漏洞。在檢查過程中持續監控網站、軟體或資料庫基礎架構來找出可能被忽略的安全漏洞或風險的相關資訊。
補上漏洞(並發出警報)。事件回應意味著必須主動進行回復工作。鑑識和日誌分析工具可以協助系統管理員和IT專家找出駭客的進入點,然後找到開發人員可以修補的漏洞或有漏洞的組件。這包含可以取得硬碟資料和映像檔,檢查和分析檔案、註冊表、電子郵件、記憶體、網頁和網路流量的工具。是否有任何資料被外洩或被竊?攻擊是否變動了網站或伺服器上的資料?了解組織的風險狀況也能夠簡化分析。不要忘記驗證並通知相關人員。
趨勢科技解決方案
趨勢科技Deep Discovery進階網路安全防護 和Vulnerability Protection 漏洞防護提供虛擬修補技術,可以保護端點免於漏洞攻擊威脅。即使在部署修補程式之前,趨勢科技OfficeScan的Vulnerability Protection也可以保護端點免於已知和未知的漏洞攻擊。趨勢科技的Deep Discovery進階網路安全防護 透過特製引擎、客製化沙箱和橫跨整個攻擊生命週期的無縫關聯技術來對漏洞攻擊進行偵測、深入分析和主動回應,從而可以無需更新引擎和特徵碼就能夠偵測像網頁注入(Web Injection)這些攻擊。