什麼是會話攻擊
現代網際網路套用中,身份認證和會話管理是保證數據安全和用戶隱私的重要手段,而該過程大致分為這三個步驟:
終端用戶向目標系統(比如某個購物網站)發起登錄請求。
隨後通過口令等方式取得認證(我是誰)並得到特定功能的授權(我能做些什麼)。這樣的功能也許包括“查看和修改我的個人資料”、“瀏覽商品並發起訂購”,但不包括“查看別人的資料”、“處置別人的帳戶餘額”。
用戶和系統之間建立會話連線,開始使用上述授權範圍內的各種功能。
如果有黑客想要獲取終端用戶在目標系統中的隱私數據,最初始的思路便是獲得用戶的賬號口令,冒充該用戶登錄系統。這依賴於用戶採用了易於猜測的弱口令,或者通過網路嗅探之類的方式獲取到口令。這種方式有時不那么容易成功。
此時另一個突破口就在於用戶和目標系統之間所建立的會話管理。如果黑客繞過初始的認證環節,而獲取受害者的會話信息,從而直接利用會話信息冒充用戶向系統發起會話連線,同樣能夠達到獲取隱私數據甚至其它的破壞目的。那用戶和系統建立的會話信息又是什麼呢?
會話攻擊原理
以Web網站為例,我們知道用戶和系統之間主要通過HTTP協定互動。而HTTP協定原本是“無狀態”的,也就是每一次的請求和回響都是獨立的,並不需要記錄“某時刻某用戶曾訪問某資源”。然而越來越複雜的網頁互動和易用性需求又使得狀態的記錄成為必須,比如誰登錄了站點並通過認證?他的基本信息和許可權又有哪些?他在網站訂購了哪些商品?等等這樣才好控制他能查看什麼數據、進行什麼操作。這些就是“會話管理”要做的事情,當然其它還包括會話的建立、釋放、過期等生命周期管理。
那么會話管理可能出現的漏洞又在哪兒呢?當用戶登錄並認證成功後網站系統通常會生成一個“令牌”——會話標識,交給用戶瀏覽器,用戶的後續動作都會帶上這個“令牌”以表明身份,這樣不用每次互動都要再認證一次。就像單位招聘員工,第一次來上班需要用身份證登記下並核查檔案,確認無誤後頒發工作證,以後他再來單位的時候出示工作證即可。此時客戶端和伺服器之間的會話管理及其安全性就靠令牌維繫,假如令牌落入黑客之手,其後果無異於用戶的賬號口令被黑客掌握,用戶隱私同樣一覽無餘。
會話攻擊防範
針對會話攻擊應該如何防範呢?應當採取的措施包括:建立儘量短的會話不活動逾時機制;周期性地生成新會話標識同時使舊會話標識失效;不允許同一用戶ID同時登錄;不在日誌、URL、錯誤信息中暴露會話標識;用戶登錄成功後關閉原始會話並創建一個新的會話。