短信驗(yàn)證碼常被用于網(wǎng)站用戶注冊(cè)、賬戶安全登錄以及忘記密碼、確認(rèn)下單等應(yīng)用場(chǎng)景,特別是一些涉及到用戶個(gè)人敏感行為時(shí)候,為了確認(rèn)操作是用戶本人執(zhí)行的通常會(huì)使用短信驗(yàn)證碼進(jìn)行二次認(rèn)證。
在實(shí)際應(yīng)用中,有很多產(chǎn)品的短信驗(yàn)證碼接口存在諸多邏輯漏洞,針對(duì)手機(jī)短信驗(yàn)證碼可能存在的問題,這里總結(jié)常見的邏輯漏洞如下,供大家參考:
1、短信驗(yàn)證碼接口沒有設(shè)置下發(fā)頻次
①無限制,任意下發(fā);
②有一定時(shí)間間隔,無限下發(fā);
短信驗(yàn)證碼接口沒設(shè)頻次上限導(dǎo)致短信轟炸。這種情況往往出現(xiàn)在一些小站或者子站,這幾年很少看到通過GET請(qǐng)求發(fā)送短信驗(yàn)證碼了,基本都是使用POST請(qǐng)求,使用抓包軟件可以重放請(qǐng)求對(duì)于后端沒有做限制的網(wǎng)站就可以達(dá)到短信轟炸的效果。
危害:對(duì)用戶來說個(gè)人生活受到騷擾,對(duì)企業(yè)來說造成一定的負(fù)面影響,很多小公司因?yàn)槎绦膨?yàn)證碼接口被大量調(diào)用出現(xiàn)運(yùn)營(yíng)問題,對(duì)于公司沒有安全工程師的情況下,一般都是業(yè)務(wù)方發(fā)現(xiàn)了數(shù)據(jù)異常向上匯報(bào),最后和開發(fā)一起反溯才會(huì)找到這個(gè)問題,那么在這段時(shí)間中對(duì)企業(yè)所損失的錢也是無法挽回的。
預(yù)防:這里主要是針對(duì)兩種攻擊場(chǎng)景來進(jìn)行防御,第一種是對(duì)單用戶的短信轟炸,即重放發(fā)送請(qǐng)求且phonenum為一個(gè)值。第二種是對(duì)多用戶發(fā)送短信騷擾的場(chǎng)景,即將phonenum參數(shù)設(shè)置為字典,重放短信驗(yàn)證碼接口。
①設(shè)置發(fā)送間隔,即單一用戶發(fā)送請(qǐng)求后,與下次發(fā)送請(qǐng)求時(shí)間需要間隔60秒。
②設(shè)置單用戶發(fā)送上限,即設(shè)置每個(gè)用戶單位時(shí)間內(nèi)發(fā)送短信數(shù)的上限,如果超過閾值就不允許今天再次調(diào)用短信接口(閾值根據(jù)業(yè)務(wù)情況設(shè)置)。
③設(shè)置單IP發(fā)送上限,這種情況是預(yù)防第二種攻擊場(chǎng)景的,由于IP的特殊性可能存在所處IP是大出口,一旦誤殺后果會(huì)很驗(yàn)證,所以這個(gè)限制根據(jù)自身情況酌情考慮,對(duì)于有風(fēng)控的團(tuán)隊(duì)來說,當(dāng)發(fā)現(xiàn)發(fā)送IP存在異??梢詫?duì)該IP增加二次認(rèn)證來防止機(jī)器操作,也可以降低誤殺情況。
2、無效驗(yàn)證
有驗(yàn)證碼模塊,但驗(yàn)證模塊與業(yè)務(wù)功能沒有關(guān)聯(lián)性,此為無效驗(yàn)證,一般在新上線的系統(tǒng)中比較常見。
①獲取短信驗(yàn)證碼后,隨意輸入驗(yàn)證碼,直接輸入兩次密碼,可成功更改用戶密碼,沒有對(duì)短信驗(yàn)證碼進(jìn)行驗(yàn)證,可能導(dǎo)致CSRF等問題。
②任意用戶注冊(cè)
第一步,利用自己的手機(jī)號(hào)接收驗(yàn)證碼進(jìn)行驗(yàn)證,下一步跳轉(zhuǎn)到一個(gè)設(shè)定密碼的頁(yè)面
第二步,抓包,篡改手機(jī)號(hào),使用任意手機(jī)號(hào)進(jìn)行注冊(cè)
問題剖析:業(yè)務(wù)一致性存在安全隱患,身份驗(yàn)證與密碼修改過程分開,驗(yàn)證無效。
3、客戶端驗(yàn)證繞過
客戶端驗(yàn)證是不安全的,可能導(dǎo)致任意賬號(hào)注冊(cè)、登錄及重置任意用戶密碼等一系列問題。
①直接返回明文驗(yàn)證碼
②返回密文驗(yàn)證碼
③攔截替換返回包
4、驗(yàn)證碼與手機(jī)號(hào)未綁定
一般來說短信驗(yàn)證碼僅能使用一次,驗(yàn)證碼和手機(jī)號(hào)未綁定,驗(yàn)證碼一段時(shí)期內(nèi)有效,那么就可能出現(xiàn)如下情況:
1、A手機(jī)的驗(yàn)證碼,B可以拿來用;
2、A手機(jī)在一定時(shí)間間隔內(nèi)接到兩個(gè)驗(yàn)證碼,都可以用。
案例一:任意用戶密碼重置
a、使用自己手機(jī)號(hào)收取驗(yàn)證碼
b、自己的驗(yàn)證碼和對(duì)方的手機(jī)號(hào)填上,下一步城管設(shè)置新密碼
解決方案:
1.在服務(wù)器進(jìn)行有效驗(yàn)證,手機(jī)號(hào)和驗(yàn)證碼在服務(wù)器進(jìn)行唯一性綁定驗(yàn)證。
2.在服務(wù)端限制驗(yàn)證碼發(fā)送周期,設(shè)置時(shí)效,限制次數(shù)。
5、驗(yàn)證碼爆破
短信驗(yàn)證碼一般由4位或6位數(shù)字組成,若服務(wù)端未對(duì)驗(yàn)證時(shí)間、次數(shù)進(jìn)行限制,則存在被爆破的可能。 推薦閱讀:60 秒短信驗(yàn)證背后的危險(xiǎn)