0x01 等保測評項
GBT 22239-2019《信息安全技術(shù) 網(wǎng)絡(luò)安全等級保護(hù)基本要求》中,8.1.4.4安全計算環(huán)境—入侵防范項中要求包括:a)應(yīng)遵循最小安裝的原則,僅安裝需要的組件和應(yīng)用程序;b)應(yīng)關(guān)閉不需要的系統(tǒng)服務(wù)、默認(rèn)共享和高危端口;c)應(yīng)通過設(shè)定終端接入方式或網(wǎng)絡(luò)地址范圍對通過網(wǎng)絡(luò)進(jìn)行管理的管理終端進(jìn)行限制;d)應(yīng)提供數(shù)據(jù)有效性檢驗功能,保證通過人機(jī)接口輸入或通過通信接口輸入的內(nèi)容符合系統(tǒng)設(shè)定要求;e)應(yīng)能發(fā)現(xiàn)可能存在的已知漏洞,并在經(jīng)過充分測試評估后,及時修補(bǔ)漏洞;f)應(yīng)能夠檢測到對重要節(jié)點(diǎn)進(jìn)行入侵的行為,并在發(fā)生嚴(yán)重入侵事件時提供報警。驗證碼缺失/繞過對應(yīng)訪問控制項中要求e),所以安全控制點(diǎn)為入侵防范e。
GBT 28448-2019《信息安全技術(shù) 網(wǎng)絡(luò)安全等級保護(hù)測評要求》中,測評單元(L3-CES1-21) 該測評單元包括以下要求: a)測評指標(biāo):應(yīng)能發(fā)現(xiàn)可能存在的已知漏洞,并在經(jīng)過充分測試評估后,及時修補(bǔ)漏洞。;b)測評對象:終端和服務(wù)器等設(shè)備中的操作系統(tǒng)(包括宿主機(jī)和虛擬主機(jī)操作系統(tǒng))、網(wǎng)絡(luò)設(shè)備(包括虛擬網(wǎng)絡(luò)設(shè)備)、安全設(shè)備(包括虛擬安全設(shè)備)、移動終端、移動終端管理系統(tǒng)、移動終端管理客戶端、感知節(jié)點(diǎn)設(shè)備、網(wǎng)關(guān)節(jié)點(diǎn)設(shè)備、控制設(shè)備、業(yè)務(wù)應(yīng)用系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng)、中間件和系統(tǒng)管理軟件等。c)測評實(shí)施包括以下內(nèi)容:1)應(yīng)通過漏洞掃描、滲透測試等方式核查是否不存在高危風(fēng)險漏洞;2)應(yīng)核查是否在經(jīng)過充分測試評估后及時修補(bǔ)漏洞;d)單元判定:如果1)和2)均為肯定,則符合本測評單元指標(biāo)要求,否則不符合或部分符合本測評單元指標(biāo)要求驗證碼缺失/繞過屬于測評單元(L3-CES1-21)中測評實(shí)施的第1項,故定測評單元為L3-CES1-21.1。
0x02 測試內(nèi)容
通過攔截調(diào)用驗證碼處相關(guān)數(shù)據(jù)包,如登錄功能、密碼找回、留言提交等處,測試驗證碼是否有效,是否可以進(jìn)行繞過或重復(fù)利用。
0x03 漏洞原理
驗證碼是什么
驗證碼是一種區(qū)分用戶是計算機(jī)還是人的公共自動程序。這個問題可以由計算機(jī)生成并評判,但是必須只有人類才能解答。由于計算機(jī)無法解答驗證碼的問題,所以回答出問題的用戶就可以被認(rèn)為是人類。
驗證碼有中文字、純數(shù)字、英文字母、點(diǎn)擊字符串、圖片圖形、數(shù)學(xué)運(yùn)算等等。
驗證碼的作用
?進(jìn)行人機(jī)校驗;
?驗證使用者身份,判斷當(dāng)前賬戶使用者是否是賬戶的擁有者;
?防止惡意的IP頻繁訪問;
?防止惡意操作導(dǎo)致用戶本身受損失;
?防止暴力破解;
?防止惡意灌水;
?防止刷票;
驗證碼分類常見的驗證碼有:短信驗證碼、語音驗證碼、圖文驗證碼、數(shù)字驗證碼等等。形式多樣核心內(nèi)容一致,根據(jù)形式的不同就有了分門別類的應(yīng)用。具體可看之前寫的文章《滲透遇見驗證碼,跑路?or 拿下它?》。
根據(jù)作用可分為以下兩種:
?區(qū)分用戶是計算機(jī)還是人的公共全自動程序,比如Google登錄時的驗證碼、12306圖片識別的點(diǎn)擊式驗證碼等。
?識別身份的驗證碼,用于識別用戶是否為賬號的所有者,比如短信驗證碼、郵箱驗證碼、電話驗證碼等。
驗證碼繞過
驗證碼大致可通過以下兩種思路進(jìn)行繞過
1. 識別法:腳本+深度學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)的知識;
2. 邏輯繞過,開發(fā)人員寫驗證碼校驗代碼時產(chǎn)生邏輯錯誤。
無驗證碼
應(yīng)用登錄功能未設(shè)置驗證碼校驗機(jī)制,且無登錄失敗次數(shù)過多鎖定策略,這種情況下可直接嘗試進(jìn)行暴力破解。
驗證碼為空值
有驗證碼機(jī)制,但是在請求包中將驗證碼參數(shù)刪除,服務(wù)器端就不進(jìn)行驗證碼校驗,會直接校驗賬戶、密碼;或者雖然頁面中顯示有驗證碼機(jī)制,但在不填寫驗證碼直接輸入用戶名、密碼的情況下,可直接登錄,存在爆破風(fēng)險。
萬能驗證碼
0000、1111、8888、000000、123456等,一般多出現(xiàn)于設(shè)備、硬件設(shè)備。
驗證碼藏于Cookie中
一般情況下系統(tǒng)會將驗證碼的值用Session存儲起來,再通過對比用戶提交的驗證碼和Session中的驗證,就可以知道用戶輸入的是否正確. 但由于Session 會占用服務(wù)器資源,有些程序員會將驗證碼的值加密后存儲在Cookie中。針對這種情況,攻擊者可以通過抓取登錄數(shù)據(jù)包,分析包中的Cookie字段,查看其中有沒有相匹配的驗證碼或者是經(jīng)過簡單加密后的驗證碼。
驗證碼隱藏于源碼中
記住驗證碼,打開網(wǎng)站源碼,用Ctrl+F搜索,如果搜索到剛才輸入的驗證碼,就說明驗證碼被隱藏于源碼中,接下來就可以使用工具提取源碼中的驗證碼并將其放入每次的請求包中,對用戶名、密碼進(jìn)行破解。
前端校驗驗證碼
前端對驗證碼進(jìn)行校驗,相當(dāng)于沒有設(shè)置驗證碼,可通過抓包查看是否有驗證碼傳參,或禁用JS進(jìn)行繞過。
驗證碼未進(jìn)行校驗
代碼雖設(shè)置有驗證碼模塊,但未對驗證碼進(jìn)行校驗,隨機(jī)輸入就可驗證成功;
驗證碼可控
某些系統(tǒng)獲取驗證碼的方式為通過參數(shù)的方式去加載,比如http://www.123.com/yanzhengma.php?code=**** 等,攻擊者就可以嘗試將參數(shù)code的值改為undefined,即設(shè)為控制;也可以通過便便攜腳本的方式獲取驗證碼并傳入驗證流程。
驗證碼重復(fù)使用
應(yīng)用程序設(shè)置了驗證碼校驗機(jī)制,但是驗證碼可重復(fù)使用,沒有過期限制,相當(dāng)于無驗證機(jī)制。一般是在某一段時間內(nèi),無論登錄失敗多少次,只要不刷新頁面或者不刷新驗證碼,就可以無限次的使用同一個驗證碼來對一個或多個用戶帳號進(jìn)行暴力猜解。換句話說,攻擊者可以在同一個會話下,在獲得第一個驗證碼后,后面不再主動觸發(fā)驗證碼生成頁面,并且一直使用第一個驗證碼就可循環(huán)進(jìn)行后面的表單操作,從而繞過了驗證碼的校驗作用,對登錄進(jìn)行暴力猜解。
驗證碼有規(guī)律
驗證碼有生成規(guī)則而非隨機(jī)驗證碼,比如某些系統(tǒng)會設(shè)置驗證碼為時間戳的后6位。
驗證碼包含于返回包中
由于開發(fā)在寫代碼時不嚴(yán)謹(jǐn)導(dǎo)致通過抓包可在返回包中查看以明文或者簡單加密的驗證碼,這種情況相當(dāng)于驗證碼直接返回,攻擊者可利用此漏洞進(jìn)行任意賬戶注冊、任意用戶密碼重置、修改綁定信息等。
驗證碼可識別
若驗證碼過于簡單,就可以使用工具對圖案進(jìn)行識別,比如驗證碼識別工具Pkav HTTP Fuzzer。
驗證碼輸出至HTML頁面
應(yīng)用程序登錄功能、找回密碼等處設(shè)置了短信/郵件驗證碼校驗機(jī)制,但驗證機(jī)制存在問題,發(fā)送的驗證碼直接輸出到客戶端HTML頁面。
0x04 代碼示例
Pikachu漏洞練習(xí)平臺驗證碼繞過(on server) 源碼vulurteforcef_server.php文件中,在用戶名、密碼和驗證碼均不為空的情況下判斷輸入驗證碼是否與生成后保存在session中的驗證碼相同,但比較完后并沒有刪除該session,導(dǎo)致下一個數(shù)據(jù)包輸入該驗證碼也會判斷正確,出現(xiàn)驗證碼重復(fù)使用漏洞。
0x05 測試案例
測試案例1
驗證碼有條件不刷新某些時候會有這種情況:用戶在登錄失敗后,系統(tǒng)會打開一個新的頁面或者出現(xiàn)彈窗,提示用戶登錄失敗,點(diǎn)擊“確定”后返回登錄界面,驗證碼也會刷新。但是這種情況下,只要我們不關(guān)閉新窗口、彈窗,直接使用BurpSuite截取登錄請求包,先發(fā)送至Repeater模塊,多“Go”幾次,看看會不會返回“驗證碼錯誤”的提示信息,如果依舊返回“密碼錯誤”則說明驗證碼不進(jìn)行刷新。再將數(shù)據(jù)包發(fā)送到Intruder模塊,把密碼設(shè)為變量再進(jìn)行MD5編碼,就可直接爆破了。
不點(diǎn)擊【確定】
多Go幾次,判斷驗證碼是否會刷新。
將密碼編碼,爆破。
從返回包中可以看到仍舊提示“密碼錯誤”,驗證碼是不失效的。正常使用的時候,直接上弱口令字典跑就是,跟平常的爆破操作一樣。(為寫文章隨變寫了幾個弱口令進(jìn)行測試截圖)
測試案例2
驗證碼識別抓包查看此系統(tǒng)未采用前端校驗驗證碼,多次刷新驗證碼發(fā)現(xiàn)驗證碼易識別,決定采用識別工具進(jìn)行識別爆破。
右鍵復(fù)制驗證碼地址
使用Pkav工具進(jìn)行驗證碼識別。
確認(rèn)可以正常識別驗證碼后,對賬號、密碼進(jìn)行爆破。
0x06 風(fēng)險分析
?在資金提現(xiàn)、轉(zhuǎn)賬、充值、修改銀行卡、修改密碼等的重要操作,驗證碼可以啟到防賬戶盜用、篡改賬戶、的作用;
?如果網(wǎng)站有提交表單的功能,并且需要由站點(diǎn)管理員審核才可通過,惡意用戶會產(chǎn)生大量的垃圾表單,影響網(wǎng)站訪問速度,加大工作量,且合法用戶的請求有可能會因此被拒絕服務(wù);
?惡意用戶可利用程序發(fā)送短信/郵件的功能,發(fā)送大量垃圾郵件/短信,造成短信/郵件轟炸,影響用戶體驗及站點(diǎn)短信服務(wù)過度消費(fèi);
?通常在網(wǎng)站的用戶注冊、密碼找回、登錄等頁面處使用驗證碼,但當(dāng)這些驗證碼具有一定的規(guī)律性并且沒有做好對應(yīng)的防護(hù)措施時會導(dǎo)致攻擊者通過爆破等方式猜解/繞過驗證碼機(jī)制,可導(dǎo)致任意用戶注冊、批量注冊無用賬戶、重置任意用戶密碼、獲取系統(tǒng)權(quán)限等危害。
?系統(tǒng)易遭受DDOS攻擊;
?機(jī)器人自動批量注冊;
?對特定的注冊用戶用特定程序爆破方式進(jìn)行不斷的登錄、“灌水”、“刷單”、短信/電子郵件轟炸等;
0x07 加固建議
1. 不要把驗證方式置于前端,手機(jī)號和短信驗證碼在服務(wù)端進(jìn)行唯一性綁定驗證;
2. 在服務(wù)端限制短信驗證碼發(fā)送周期,設(shè)置時效性,限制發(fā)送次數(shù);
3. 封禁的應(yīng)該是惡意請求的手機(jī)號而不是IP地址,對一天內(nèi)每一個手機(jī)號獲得的驗證碼次數(shù)進(jìn)行限制;
4. 手機(jī)驗證碼生成6位或者以上的數(shù)字+字母組合的驗證碼,并且保證用后即失效;
5. 禁止用戶自定義短信內(nèi)容;
6. 在服務(wù)器進(jìn)行有效驗證,手機(jī)號和驗證碼在服務(wù)器進(jìn)行唯一性綁定驗證等。
審核編輯 :李倩
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9256瀏覽量
85755 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3841瀏覽量
64544 -
網(wǎng)絡(luò)設(shè)備
+關(guān)注
關(guān)注
0文章
317瀏覽量
29715 -
數(shù)據(jù)包
+關(guān)注
關(guān)注
0文章
265瀏覽量
24426
原文標(biāo)題:0x07 加固建議
文章出處:【微信號:Tide安全團(tuán)隊,微信公眾號:Tide安全團(tuán)隊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論