在一般情況下,Web開發人員在開發過程中是留意常規的Web安全漏洞的。但也有一些危險和鮮為人知的漏洞廣泛存在於Web應用程序中。大多數開發人員針對這些漏洞不做任何考慮,使得Web應用程序仍然處於危險中。失效的認證和會話管理就是這類漏洞之一。根據最新的OWASP TOP 10顯示它位列10大Web漏洞中的第三位。這意味著它是一個高度危險的漏洞存在於互聯網上的多數網站的應用程序中。
身份認證和會話管理
在進一步解釋這種危險的漏洞之前,讓我們了解一下身份認證和會話管理的基本知識。身份認證,最常見的是登錄功能,往往是提交用戶名和密碼,在安全性要求更高的情況下,有防止密碼暴力破解的驗證碼,基於客戶端的證書,物理口令卡等等。會話管理,HTTP本身是無狀態的,利用會話管理機制來實現連接識別。身份認證的結果往往是獲得一個令牌,通常放在cookie中,之後對用戶身份的識別根據這個授權的令牌進行識別,而不需要每次都要登陸。
什麼是失效的身份認證和會話管理?
用戶身份認證和會話管理是一個應用程序中最關鍵的過程,有缺陷的設計會嚴重破壞這個過程。在開發Web應用程序時,開發人員往往只關注Web應用程序所需的功能。由於這個原因,開發人員通常會建立自定義的認證和會話管理方案。但要正確實現這些方案卻很難,結果這些自定義的方案往往在如下方面存在漏洞:退出、密碼管理、超時、記住我、秘密問題、帳戶更新等等。因為每一個實現都不同,要找出這些漏洞有時會很困難。
一些存在此漏洞的例子:
1、用戶更改密碼之前不驗證用戶,而是依靠會話的IP地址;
2、沒有會話超時限制;
3、用戶忘記密碼後,密碼找回功能太過簡單。
例1:應用程序超時設置不當。用戶使用公共計算機訪問網站。離開時,該用戶沒有點擊退出,而是直接關閉浏覽器。攻擊者在一個小時後能使用相同浏覽器通過身份認證。
例2:機票預訂應用程序支持URL重寫,把會話ID放在URL裡:http://example.com/sale/saleitems;jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii
該網站一個經過認證的用戶希望讓他朋友知道這個機票打折信息。他將上面鏈接通過郵件發給他朋友們,並不知道自己已經洩漏了自己的會話ID.當他的朋友們使用上面的鏈接時,他們將會使用他的會話和信用卡。
例3:內部或外部攻擊者進入系統的密碼數據庫。 存儲在數據庫中的用戶密碼沒有被加密, 所有用戶的密碼都被攻擊者獲得。
如何驗證程序是否存在失效的認證和會話管理?