驗證機制是應用程序防御惡意攻擊的中心機制。它處于防御未授權的最前沿,如果用戶能夠突破那些防御,他們通常能夠控制應用程序的全部功能,自由訪問其中的數據。缺乏安全穩定的驗證機制,其他核心安全機制(如回話管理和訪問控制)都無法有效實施。
web應用程序常用的驗證機制有:
1)? 基于HTML表單的驗證(最常用)
2)? 多元機制,如組合型密碼和物理令牌
3)? 客戶端SSL證書或智能卡(成本非常昂貴)
4)? HTTP基本和摘要驗證(內網使用較多)
5)? 使用NTLM或Kerberos整合windows的驗證
6)? 驗證服務
接下來說一下,在驗證機制中可能存在的一些問題。一共分為兩個個方面進行說明,分別為設計缺陷和執行缺陷
驗證機制的設計缺陷:
1)? 密碼保密性不強:使用非常短或空白的密碼,已常用的字典詞匯或名稱為密碼,密碼和用戶名完全相同,依然使用默認密碼,存在這些情況容易導致暴力破解。
?
2)? 蠻力攻擊登陸(允許攻擊者使用不同的密碼重復進行登陸嘗試)
?
3)? 詳細的失敗信息(顯示是用戶名或者密碼錯誤,攻擊者可以輕易的確定有效的用戶名作為隨后攻擊的基礎)
通過詳細的失敗信息可以枚舉用戶名,然后根據用戶名去猜測密碼。
4)? 證書傳輸易受攻擊(使用非加密的HTTP連接,應用程序處理證書的方式不安全)
進行一次成功登陸,監控客戶端和服務器之間的所有來回流量,確定在來回方向上傳輸證書的每一種情況,如果發現通過URL字符串或者cookie的方式提交證書,想法弄清楚開發者這樣做的目的。同時使用HTTP協議或者查詢字符串傳遞都是不安全的。
5)? 密碼修改功能(允許詳細的錯誤信息,說明被請求的用戶名是否有效,允許攻擊者無限制猜測現有密碼字段,在驗證現有密碼后,僅檢查新密碼與確認密碼)
使用無效的用戶,無效的現有密碼及不匹配的“新密碼”和“確認密碼”值向密碼修改功能提交各種請求,設法確定任何可用于用戶名枚舉和暴力攻擊的行為。
6)? 忘記密碼功能
用戶名枚舉,質詢響應問題
7)? 記住我功能
記住我功能通過簡單的cookie執行,可能造成推測出其cookie值從而避免登陸
8)? 用戶偽裝功能(造成垂直提權等功能)
9)? 證書確認不完善(截斷密碼,只確認前n個字符,不對密碼進行大小寫檢查,刪除不常用的字符)
10) 非唯一性用戶名(枚舉,泄露另一個賬戶的密碼)
11)? 可預測用戶名
12)? 可預測初始密碼
13)? 證書分配不安全(通過郵件或者郵寄密碼,激活URL表現出某種順序)
?
驗證機制執行缺陷:
1)故障開放登陸機制(邏輯缺陷,
?
?
2)多階段登錄機制中的缺陷
一些應用程序使用精心設計的多階段登錄機制,例如輸入用戶名和密碼,響應一個質詢,答案是pin中的特殊數字或一個值得紀念的詞,提交在不斷變化的物理令牌上顯示的某個值。
3)不安全的證書存儲
以明文存儲證書
?
上面輸了驗證機制中可能存在的一些問題,下面來說一下如何保障驗證機制的安全,
在設計安全機制的時候,需要考慮以下的因素:
應用程序所提供功能的安全程度
用戶對不同類型的驗證控制的容忍和接受程度
支持一個不夠友好的用戶界面系統所需的成本
競爭性解決方案相對于應用程序可能產生的收入方面的金融成本或它所保護資產的價值
具體方法如下:
1)? 使用可靠的證書(強密碼,唯一的用戶名,隨機)
2)? 安全處理證書(使用HTTPS加載登錄表單)
3)? 正確確認證書
4)? 防止信息泄露
5)? 防止蠻力攻擊
6)? 防止濫用密碼修改功能
7)? 防止濫用賬戶恢復功能
8)? 日志,監控與通知
?