近日,開放式 Web 應用程序安全項目(OWASP)發布了最終版 2017 Top 10 榜單。在 2017 威脅榜單中,注入攻擊漏洞仍然位居 Top 10 威脅之首,而 XSS 的威脅程度從 A3 降到了 A7。敏感信息泄露、安全配置錯誤、失效的訪問控制等威脅均有提升,值得企業重視。
與此同時,榜單中還出現了一些新的安全威脅,包括 XXE 漏洞(A4:2017, XML External Entity attack)、針對 Java 平臺的不安全反序列化漏洞(A8:2017, Insecure Deserialization)以及記錄和監控不足風險(A10:2017, Insufficient Logging &Monitoring)等。
A1 注入攻擊漏洞
A2 失效的身份認證
A3 敏感信息泄露
A4 XXE 漏洞
A5 失效的訪問控制
A6 安全配置錯誤
A7 跨站腳本 XSS
A8 不安全反序列化漏洞
A9 使用含有已知漏洞的組件
A10 不足的記錄和監控
隨著網貸、購物和社交等一系列新型互聯網產品的誕生,企業信息化的過程中越來越多的應用都架設在 Web 平臺上,接踵而至的就是 Web 安全威脅的凸顯。大量黑客利用網站操作系統的漏洞和 Web 服務程序的 SQL 注入漏洞等得到 Web 服務器的控制權限,輕則篡改網頁內容,重則竊取重要內部數據,更為嚴重的則是在網頁中植入惡意代碼,使得網站訪問者受到侵害。
什么是 Web 應用安全風險?
如下圖所示,攻擊者可以通過應用程序中許多不同的路徑和方法來危害您的業務或者企業組織。每種路徑方法都代表了一種風險,有些路徑方法很容易被發現并利用,有些則很難被發現。
文章重點分析排名前三的 Web 安全威脅以及應對方法:
注入攻擊漏洞
注入攻擊漏洞,例如 SQL、OS 以及 LDAP 注入。這些攻擊發生在當不可信的數據作為命令或者查詢語句的一部分,被發送給解釋器的時候,攻擊者發送的惡意數據可以欺騙編輯器,以執行計劃外的命令或者在未被恰當授權時訪問數據。
檢查是否存在「注入漏洞」的方法
最好的辦法就是確認所有解釋器的使用都明確地將不可信數據從命令語句或查詢語句中區分出來。對于 SQL 調用,在所有準備語句和存儲過程中使用綁定變量,并避免使用動態查詢語句。
檢查應用程序是否安全使用解釋器的最快最有效的辦法是代碼審查,代碼分析工具能幫助安全分析者找到使用解釋器的代碼并追蹤應用的數據流。
可以執行應用程序的動態掃描器能夠提供信息,幫助確認一些可利用的注入漏洞是否存在。
典型案例
NextGEN Gallery 插件是眾所周知的 WordPress 相冊插件,這款插件功能強大,可以在博客中任意插入動態圖片效果,提供了很完美的照片管理方法,在 WordPress 平臺上擁有過百萬的安裝量。
今年 3 月 NextGEN Gallery 插件被曝存在嚴重的 SQL 注入漏洞,影響上百萬用戶,攻擊者利用 SQL 注入漏洞獲取了數據庫中包括用戶信息在內的敏感數據。
失效的身份認證
與身份認證和會話管理相關的應用程序功能常常被錯誤地實現,攻擊者使用認證管理功能中的漏洞,采用破壞密碼、密鑰、會話令牌去冒充其他用戶的身份。
檢查是否存在「失效的身份認證」的方法
用戶身份驗證憑證是否使用哈希或加密保護;是否可以通過薄弱的賬戶管理功能(例如賬戶創建、密碼修改、密碼修復、弱會話 ID)重寫。
會話 ID 暴露在 URL 里;會話 ID 沒有超時限制,用戶會話或身份驗證令牌(特別是單點登錄令牌)在用戶注銷時沒有失效;密碼、會話 ID 和其他認證憑據使用未加密鏈接傳輸等。
典型案例
機票預訂應用程序支持 URL 重寫,把當前用戶的會話 ID 放在 URL 中:http://example.com/sale/saleitems;jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii
該網站一個經過認證的用戶希望讓他朋友知道這個機票打折信息。他將上面鏈接通過郵件發送給朋友們,并不知道已經泄露了自己會話 ID. 當他的朋友們使用上面的鏈接時,可以輕而易舉地使用他的會話和信用卡。
敏感信息泄露
許多 Web 應用程序沒有正確保護敏感數據,如信用卡、身份證 ID 和身份驗證憑據等。攻擊者可能會竊取或篡改這些弱保護的數據以進行信用卡詐騙、身份竊取或其他犯罪。
敏感數據需額外的保護,比如在存放或在傳輸過程中進行加密,以及在與瀏覽器交換時進行特殊的預防措施。
檢查是否存在「敏感信息泄露」的方法
首選需要確認哪些數據時敏感數據而需要被加密。當這些數據被長期存儲的時候,無論存儲在哪里,是否被加密和備份?
無論內部數據還是外部數據,傳輸時是否是明文傳輸?是否還在使用舊的或者脆弱的加密算法?
加密密鑰的生成是否缺少恰當的密鑰管理或缺少密鑰回轉?當瀏覽器接收或發送敏感數據時,是否有瀏覽器安全指令?
典型案例
一個網站上所有需要身份驗證的網頁都沒有使用 SSL 加密。攻擊者只需要監控網絡數據流(比如一個開放的無線網絡或其社區的有限網絡),并竊取一個已驗證的受害者的會話 Cookie. 攻擊者利用這個 Cookie 執行重放攻擊并接管用戶的會話,從而訪問用戶的隱私數據。
如何有效地防范 Web 應用安全風險?
安全防護要貫穿整個 Web 應用生命周期
在 Web 開發階段需要對代碼進行核查,在測試階段需要對上線前的 Web 應用做完整的安全檢查,在運營階段,建議在事前、事中和事后進行分階段、多層面的完整防護。
構建以漏洞、事件生命周期閉環管理體系
通過監測系統平臺進行漏洞生命周期的管理,包含漏洞掃描、人工驗證、漏洞狀態的追蹤工作以及漏洞修復后的復驗工作等,使漏洞管理流程化。
提升安全管理人員工作能力
安全管理崗位人員需要建立起信息安全管理的概念,清楚 Web 威脅的危害,掌握識別安全漏洞及風險的專用技術,以及對安全問題進行加固處置的技能。