與Web應用程序常用的任何其他安全機制相比,驗證功能中存在著更多設計方面的薄弱環節。即使在基于用戶名和密碼驗證用戶這種非常簡單的標準化模型中,其中包含的設計缺陷也容易導致應用程序被非法訪問。常見設置缺陷有以下這些。
密碼保密性不強
- 非常短或空白的密碼; - 以常用的字典詞匯或名稱為密碼; - 密碼和用戶名完全相同; - 仍然使用默認密碼。
蠻力攻擊登錄
登錄功能的公開性往往誘使攻擊者試圖猜測用戶名和密碼,從而獲得未授權訪問應用程序的權力。如果應用程序允許攻擊者使用不同的密碼重復進行登錄嘗試,直到找到正確的密碼,那么它就非常容易遭受攻擊,因為即使是業余攻擊者也可以在瀏覽器中手動輸入一些常見的用戶名和密碼。
詳細的失敗消息
一個典型的登錄表單要求用戶輸入兩組信息(用戶名和密碼),而另外一些應用程序則需要更多信息(如出生日期、紀念地或PIN號碼)。如果登錄嘗試失敗,當然可以得出結論:至少有一組信息出錯。但是,如果應用程序通知是哪一組信息無效,就可以利用它顯著降低登錄機制的防御效能。在最簡單的情況下,如果只需要用戶名和密碼登錄,應用程序可能會通過指出失敗的原因(用戶名無效或密碼錯誤)來響應失敗的登錄嘗試。 在這種情況下,攻擊者可以發動一次自動化攻擊,遍歷大量常見的用戶名,確定哪些有效。當然,用戶名一般并非秘密(例如,登錄時并不隱藏用戶名)。但是,如果攻擊者能夠輕易確定有效的用戶名,就更可能在有限的時間內、運用一定的技能、付出一定的精力攻破應用程序,并將枚舉出的用戶名列表作為隨后各種攻擊的基礎,包括密碼猜測、攻擊用戶數據或會話,或者社會工程。除主要的登錄功能外,還可以對驗證機制的其他組件進行用戶名枚舉。
證書傳輸易受攻擊
如果應用程序使用非加密的HTTP連接傳輸登錄證書,處于網絡適當位置的竊聽者當然就能夠攔截這些證書。即使是通過HTTPS登錄,如果應用程序處理證書的方式并不安全,證書仍有可能被泄露給未授權方。許多應用程序對應用程序中未經驗證的區域使用HTTP,而在登錄時轉而使用HTTPS。如果是這樣,應在向瀏覽器加載登錄頁面時轉換到HTTPS,使得用戶能夠在輸入證書前核實頁面是否真實可信。但是,一些應用程序通常使用HTTP加載登錄頁面,而在提交證書時才轉換到HTTPS。這樣做是不安全的,因為用戶不能核實登錄頁面的真實性,因此無法保證安全提交證書。那么,處在適當位置的攻擊者就可以攔截并修改登錄頁面,更改登錄表單的目標URL以使用HTTP。等到精明的用戶意識到證書已使用HTTP提交時,攻擊者已成功獲取這些證書。
忘記密碼功能
與密碼修改功能一樣,重新獲得忘記密碼的機制常常會引入已在主要登錄功能中避免的問題,如用戶名枚舉。除這種缺陷外,忘記密碼功能設計方面的缺點往往使它成為應用程序總體驗證邏輯中最薄弱的環節。
“記住我”功能
為方便用戶,避免他們每次在一臺特定的計算機上使用應用程序時需要重復輸入用戶名和密碼,應用程序通常執行“記住我”功能。這些功能在設計上并不安全,致使用戶易于遭受本地和其他計算機用戶的攻擊。
用戶偽裝功能
一些應用程序允許特權用戶偽裝成其他用戶,以在該用戶的權限下訪問數據和執行操作。例如,一些銀行應用程序允許服務臺操作員口頭驗證一名電話用戶,然后將銀行的應用程序會話轉換到該用戶的權限下,以為其提供幫助。
可預測的用戶名
一些應用程序根據某種可以預測的順序(如cust5331、cust5332)自動生成賬戶用戶名。如果應用程序以這種方式運轉,弄清了用戶名順序的攻擊者就可以很快獲得全部有效用戶名,以此作為后續攻擊的基礎。與依賴不斷提交由詞匯驅動請求的枚舉方法不同,這種確定用戶名的方法不需實施入侵,也很少給應用程序造成干擾。
回答所涉及的環境:聯想(Lenovo)天逸510S、Windows 10。
與Web應用程序常用的任何其他安全機制相比,驗證功能中存在著更多設計方面的薄弱環節。即使在基于用戶名和密碼驗證用戶這種非常簡單的標準化模型中,其中包含的設計缺陷也容易導致應用程序被非法訪問。常見設置缺陷有以下這些。
密碼保密性不強
蠻力攻擊登錄
詳細的失敗消息
證書傳輸易受攻擊
忘記密碼功能
“記住我”功能
用戶偽裝功能
可預測的用戶名
回答所涉及的環境:聯想(Lenovo)天逸510S、Windows 10。