介紹
服務器端請求偽造(SSRF)攻擊是一種應用安全漏洞,惡意行為者可以操縱web應用程序上的參數來創建或控制來自存在漏洞的服務器的請求。攻擊者通常使用這些漏洞來攻擊那些由于使用了防火墻而無法從外部網絡訪問的內部系統。
最常見的情況是,為了實現某個特性或者為了開發的便利性,服務器應用程序向第三方服務器發送HTTPS請求。這個請求可能需要:使用一個互聯網API,下載一個包或通過一個社交賬戶(如微信, 淘寶等)檢索用戶信息。攻擊者可能濫用該特性向另一個第三方發送請求,或通過服務器對原來的第三方系統竊取數據。
從本質上說,SSRF攻擊利用了安全性的基礎之一信任,它利用現有的信任關系使應用程序可以直接對其他后端系統甚至服務器本身進行訪問甚至是攻擊。
影響及危害
一個成功的SSRF攻擊可以使惡意攻擊者滲透進內網并不受限制的橫向移動到后端web服務器的防火墻后面,導致應用程序的機密性、完整性和可用性全部受到損害。
那些成功地將SSRF作為其攻擊過程中重要一部分的黑客行為,其影響及后果往往都是非常巨大的。在臭名昭著的2019年Capital One黑客事件中,數字說明了一切:被泄露的數據包括姓名、地址、電話號碼、自我報告的收入、信用評分和支付歷史,以及美國約1億名客戶(約占美國人口的1/3)和加拿大600萬名客戶的其他個人信息。
與許多安全問題一樣,人為錯誤無疑在上述示例中起了一定作用,因為入侵入口的根本原因往往都是配置錯誤的防火墻。
場景:
通常,客戶端web請求是通過支持已定義的協議類(如HTTP)的語言函數來執行的,這使開發人員使用它們非常簡單。
根據易受攻擊的請求在服務器端實現的方式,攻擊者可能能夠到達另一個網站。攻擊者甚至可以更改協議,例如,使用file://協議(在許多情況下默認接受該協議)來讀取文件系統上的任何文件。
由于防火墻和網絡安全,SSRF攻擊仍然相當強大;能夠通過服務器偽造任意請求的攻擊者將受益于服務器的物理/邏輯位置和活動防火墻規則。當從服務器執行請求時,攻擊者可能可以使用不可見和禁止的網絡資源。一個常見的例子是對外部世界隱藏的管理服務器,但允許服務器使用它,因為該服務器可能管理其更新或監視其使用。
最后,攻擊者可以監聽指向開放TCP端口的SSRF的平均運行時間,并將其與指向關閉或過濾TCP端口的請求進行比較。通過提交相當少量的請求,攻擊者可以映射網絡并發現可能成為進一步攻擊目標開放了哪些端口。
如何防御
如果已知允許的url列表,開發人員應該為應用程序實現允許的主機名或IP地址列表。url不應該根據拒絕列表進行驗證,因為使用一些眾所周知的技術很容易就能繞過這種防御方法。
如果HTTP和HTTPS是應用程序用來發出請求的唯一活動協議,那么開發人員應該禁用其他未使用的URL模式。
為了減少攻擊者利用響應數據泄漏的風險,開發人員必須確保在向另一個服務器發送請求時,原始響應不會原樣返回給客戶機應用程序。
當發生SSRF時,主要的深度防御方法是降低對服務器的信任。這通常可以通過入站端(例如,接收請求的另一個服務器)的防火墻規則實現,但由于TCP的性質,在出站端實現防火墻規則要困難得多。