短信驗證碼安全常見邏輯漏洞
聲明:此文轉自http://www.lx598.com/hangyedongtai/978.html (短信驗證碼安全常見漏洞)
短信驗證碼常被用於網站用戶註冊、賬戶安全登錄以及忘記密碼、確認下單等應用場景,特別是一些涉及到用戶個人敏感行爲時候,爲了確認操作是用戶本人執行的通常會使用短信驗證碼進行二次認證。
在實際應用中,有很多產品的短信驗證碼接口存在諸多邏輯漏洞,針對手機短信驗證碼可能存在的問題,這裏總結常見的邏輯漏洞如下,供大家參考:
1、短信驗證碼接口沒有設置下發頻次
①無限制,任意下發;
②有一定時間間隔,無限下發;
短信驗證碼接口沒設頻次上限導致短信轟炸。這種情況往往出現在一些小站或者子站,這幾年很少看到通過GET請求發送短信驗證碼了,基本都是使用POST請求,使用抓包軟件可以重放請求對於後端沒有做限制的網站就可以達到短信轟炸的效果。
危害:對用戶來說個人生活受到騷擾,對企業來說造成一定的負面影響,很多小公司因爲短信驗證碼接口被大量調用出現運營問題,對於公司沒有安全工程師的情況下,一般都是業務方發現了數據異常向上彙報,最後和開發一起反溯纔會找到這個問題,那麼在這段時間中對企業所損失的錢也是無法挽回的。
預防:這裏主要是針對兩種攻擊場景來進行防禦,第一種是對單用戶的短信轟炸,即重放發送請求且phonenum爲一個值。第二種是對多用戶發送短信騷擾的場景,即將phonenum參數設置爲字典,重放短信驗證碼接口。
①設置發送間隔,即單一用戶發送請求後,與下次發送請求時間需要間隔60秒。
②設置單用戶發送上限,即設置每個用戶單位時間內發送短信數的上限,如果超過閾值就不允許今天再次調用短信接口(閾值根據業務情況設置)。
③設置單IP發送上限,這種情況是預防第二種攻擊場景的,由於IP的特殊性可能存在所處IP是大出口,一旦誤殺後果會很驗證,所以這個限制根據自身情況酌情考慮,對於有風控的團隊來說,當發現發送IP存在異常可以對該IP增加二次認證來防止機器操作,也可以降低誤殺情況。
2、無效驗證
有驗證碼模塊,但驗證模塊與業務功能沒有關聯性,此爲無效驗證,一般在新上線的系統中比較常見。
①獲取短信驗證碼後,隨意輸入驗證碼,直接輸入兩次密碼,可成功更改用戶密碼,沒有對短信驗證碼進行驗證,可能導致CSRF等問題。
②任意用戶註冊
第一步,利用自己的手機號接收驗證碼進行驗證,下一步跳轉到一個設定密碼的頁面
第二步,抓包,篡改手機號,使用任意手機號進行註冊
問題剖析:業務一致性存在安全隱患,身份驗證與密碼修改過程分開,驗證無效。
客戶端驗證是不安全的,可能導致任意賬號註冊、登錄及重置任意用戶密碼等一系列問題。
①直接返回明文驗證碼
②返回密文驗證碼
③攔截替換返回包
4、驗證碼與手機號未綁定
一般來說短信驗證碼僅能使用一次,驗證碼和手機號未綁定,驗證碼一段時期內有效,那麼就可能出現如下情況:
1、A手機的驗證碼,B可以拿來用;
2、A手機在一定時間間隔內接到兩個驗證碼,都可以用。
案例一:任意用戶密碼重置
a、使用自己手機號收取驗證碼
b、自己的驗證碼和對方的手機號填上,下一步設置新密碼
解決方案:
1.在服務器進行有效驗證,手機號和驗證碼在服務器進行唯一性綁定驗證。
2.在服務端限制驗證碼發送週期,設置時效,限制次數。
5、驗證碼爆破
短信驗證碼一般由4位或6位數字組成,若服務端未對驗證時間、次數進行限制,則存在被爆破的可能。