逻辑漏洞——会话管理问题
普及會(huì)話與令牌的作用以及針對(duì)令牌的常用攻擊手段
會(huì)話令牌
?? HTTP協(xié)議本身是“無(wú)狀態(tài)”,“無(wú)連接”的,也就是說(shuō)HTTP協(xié)議本身并不會(huì)記住客戶端訪問(wèn)的上下文,也無(wú)法保存客戶端的各種狀態(tài),這其中就包括登錄狀態(tài)。如果HTTP不能保存用戶的登錄狀態(tài),那就意味著用戶在每次訪問(wèn)需要身份驗(yàn)證的網(wǎng)站時(shí)都必須填寫(xiě)用戶名及密碼,這里的“每次訪問(wèn)”是指每個(gè)單次的HTTP請(qǐng)求包括刷新一次頁(yè)面。為了解決上述的問(wèn)題,Web應(yīng)用程序就需要使用會(huì)話這個(gè)概念,即用戶登錄成功后為其建立一個(gè)會(huì)話,通過(guò)會(huì)話記錄用戶的各種狀態(tài),通常使用Cookie、Session及Token實(shí)現(xiàn)會(huì)話機(jī)制。令牌就是這一類(lèi)用于維持用戶會(huì)話狀態(tài)的方法。
?? 執(zhí)行會(huì)話最簡(jiǎn)單、最常見(jiàn)的方式是向每名用戶發(fā)布一個(gè)唯一的會(huì)話令牌或標(biāo)識(shí)符,
用戶在每一個(gè)請(qǐng)求中提交這個(gè)令牌。
確定會(huì)話令牌
多個(gè)數(shù)據(jù)共同表示一個(gè)會(huì)話令牌,包括Cookie、URL參數(shù)以及隱藏的表單參數(shù)
標(biāo)準(zhǔn)的會(huì)話Cookie可能存在但是Web應(yīng)用程序未對(duì)其進(jìn)行使用
觀察用戶登錄前后客戶端保存數(shù)據(jù)的變化,這些變化中包含了建立新會(huì)話的令牌
通過(guò)刪除客戶端向服務(wù)器端發(fā)送的參數(shù)來(lái)進(jìn)行判斷,比如在刪除了某個(gè)參數(shù)后無(wú)法正常訪問(wèn)用戶的個(gè)人資料,那么這個(gè)參數(shù)應(yīng)該與會(huì)話令牌有關(guān)
令牌使用情景
發(fā)送到用戶注冊(cè)郵箱的密碼恢復(fù)令牌
防止CSRF的會(huì)話令牌
用于一次性訪問(wèn)受保護(hù)資源的令牌
未使用驗(yàn)證的購(gòu)物應(yīng)用程序的消費(fèi)者用于檢索現(xiàn)有訂單狀態(tài)的令牌
會(huì)話令牌生成過(guò)程中的缺陷
令牌有含義
我們常規(guī)抓取http數(shù)據(jù)包所觀察到的令牌內(nèi)容多是雜亂無(wú)序的字符串,不同用戶之
間的令牌也無(wú)任何規(guī)律。但是也不排除有些系統(tǒng)會(huì)有意設(shè)置具有含義的令牌字符,如:
用戶名稱:如user、admin、system
用戶標(biāo)識(shí):如0001、0002、0003
用戶權(quán)限:admin、00101、01000
用戶姓/名:zhangsan
日期/時(shí)間截
電子郵箱
可預(yù)測(cè)數(shù)字
令牌可預(yù)測(cè)
? 隱含序列:有時(shí)我們并不能直接的通過(guò)觀察令牌來(lái)發(fā)現(xiàn)其隱含的序列或者規(guī)律,我們可以通過(guò)對(duì)令牌進(jìn)行解碼,然后發(fā)揮想象力通過(guò)各種運(yùn)算或者操作來(lái)發(fā)現(xiàn)解密后令牌中所蘊(yùn)含的規(guī)律或者隱含的序列。
? 時(shí)間依賴:一些Web服務(wù)器和應(yīng)用程序使用時(shí)間來(lái)參與令牌的生成。如果使用時(shí)間生成令牌的算法沒(méi)有合并足夠的滴,攻擊者就可能推測(cè)出其他用戶的令牌。
? 生成數(shù)字的隨機(jī)性不強(qiáng):計(jì)算機(jī)生成的隨機(jī)數(shù)都是偽隨機(jī)數(shù),如果偽隨機(jī)數(shù)的算法強(qiáng)度較弱,那么生成隨機(jī)數(shù)很可能被預(yù)測(cè)。
? 令牌加密函數(shù)對(duì)外開(kāi)放或暴露:如果攻擊者可以接觸到會(huì)話令牌生成函數(shù)的源碼、算法過(guò)程或者相應(yīng)加密過(guò)程的入口(即攻擊者可以通過(guò)此入口獲得任何數(shù)據(jù)經(jīng)過(guò)和令牌相同的加密方式后的數(shù)據(jù)),那么攻擊者就可以詳細(xì)的了解令牌生成的過(guò)程,從而模仿此過(guò)程對(duì)令牌進(jìn)行偽造。
令牌可預(yù)測(cè)
常見(jiàn)的cookie(令牌)一般都是無(wú)序的字符串,并不能看出其中有何含義
令牌可預(yù)測(cè)
但有些網(wǎng)站系統(tǒng)開(kāi)發(fā)者喜歡用自己制定的策略生成令牌字段,同時(shí)策略過(guò)于簡(jiǎn)單的話,就會(huì)使令牌包含一定規(guī)律,可以被攻擊者預(yù)測(cè)到令牌的內(nèi)容,如:
有含義的編號(hào):身份證號(hào)、學(xué)號(hào)、員工號(hào)、手機(jī)號(hào)等
Unix時(shí)間截:當(dāng)前系統(tǒng)時(shí)間、注冊(cè)時(shí)間、時(shí)間截的變形等
令牌可獲取
在網(wǎng)絡(luò)上泄露令牌
? 應(yīng)用程序在登錄階段那使用HTTPS,但是登錄成功后轉(zhuǎn)為使用HTTP或者可以訪問(wèn)驗(yàn)證前使用HTTP的鏈接,這樣盡管保護(hù)了用戶的證書(shū),卻保護(hù)不了用戶的會(huì)話令牌
? 用戶在首次訪問(wèn)某一網(wǎng)站時(shí)使用HTTP協(xié)議,往往此時(shí)服務(wù)器已經(jīng)給客戶端發(fā)布了會(huì)話令牌,當(dāng)用戶進(jìn)行登錄時(shí),即使網(wǎng)站轉(zhuǎn)換使用HTTPS,那么在令牌不改變的情況下,原先處于暴露環(huán)境中的令牌此刻升級(jí)為具有通過(guò)驗(yàn)證的令牌
? 如果登錄界面允許使用HTTP協(xié)議登錄,那么攻擊者可以通過(guò)各種方式使用戶在登錄時(shí)使用HTTP協(xié)議
? 在用戶使用HTTPS協(xié)議登錄后,如果網(wǎng)頁(yè)在加載像圖片等靜態(tài)資源時(shí)使用的是HTTP協(xié)議,用戶的會(huì)話令牌還是可以通過(guò)此泄露
在日志中泄露令牌
協(xié)助網(wǎng)絡(luò)管理人員的系統(tǒng)日志如果記錄了最近的會(huì)話日志,且未對(duì)訪問(wèn)控制進(jìn)行嚴(yán)格管理,那么在此種情況下,攻擊者可能通過(guò)日志獲得登錄會(huì)話。
如果應(yīng)用程序?qū)?huì)話置于URL中,那么這些會(huì)話會(huì)被記錄在:
用戶瀏覽器的日志中
Web服務(wù)器日志
企業(yè)或ISP代理服務(wù)器日志
反向代理服務(wù)器日志
任何站外服務(wù)器的Referer(高危)
會(huì)話令牌與會(huì)話的映射易受到攻擊
允許并行登錄
使用靜態(tài)令牌,即一個(gè)用戶令牌發(fā)布后不再改變
客戶端暴露在令牌動(dòng)持風(fēng)險(xiǎn)中
網(wǎng)站存在如下攻擊,容易造成會(huì)話令牌被動(dòng)持
XSS、CSRF、會(huì)話固定
認(rèn)證前就發(fā)布令牌
認(rèn)證后獲得的會(huì)話令牌可重新用于其他用戶認(rèn)證
應(yīng)用程序接受偽造令牌
令牌不失效
? 令牌有效期過(guò)長(zhǎng)
??? 是否需要在一段時(shí)間后使令牌失效
??? 是否需要在關(guān)閉瀏覽器時(shí)使令牌失效
? 令牌嘗試次數(shù)過(guò)多
??? 可以考慮在令牌提交次數(shù)過(guò)多時(shí)候使令牌失效
? 無(wú)效的令牌重置的手段
???? 注銷(xiāo)后令牌是否還有效
會(huì)話管理問(wèn)題
? cookie的屬性值expires,就是用于設(shè)置cookie過(guò)期時(shí)間,如果設(shè)置一個(gè)時(shí)間,到期后cookie則失效,如果默認(rèn)不設(shè)置,則為瀏覽器關(guān)閉后cookie失效。令牌的有效時(shí)間設(shè)置比較重要,時(shí)間設(shè)置過(guò)短,用戶還沒(méi)有訪問(wèn)完就要重新登錄,時(shí)間設(shè)置過(guò)長(zhǎng)會(huì)存在安全問(wèn)題。令牌失效時(shí)間過(guò)長(zhǎng),當(dāng)用戶結(jié)束訪問(wèn)網(wǎng)站后,令牌仍然有效,那么攻擊者動(dòng)持成功令牌的概率就會(huì)增加。用戶注銷(xiāo)后,令牌是否有設(shè)置失效,如沒(méi)有該邏輯,那么注銷(xiāo)后的令牌仍然合法,攻擊者依舊可以以用戶身份登錄。
案例:會(huì)話固定攻擊
會(huì)話固定攻擊(sessionfixationattack)是利用應(yīng)用系統(tǒng)在服務(wù)器的會(huì)話ID固定不變機(jī)制,借助他人用相同的會(huì)話ID獲取認(rèn)證和授權(quán),然后利用該會(huì)話ID劫持他人的會(huì)話以成功冒充他人,造成會(huì)話固定攻擊。
總結(jié)
以上是生活随笔為你收集整理的逻辑漏洞——会话管理问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 逻辑漏洞——验证机制问题
- 下一篇: 逻辑漏洞——权限控制问题