短信驗(yàn)證碼的深度剖析

6 評論 19285 瀏覽 121 收藏 6 分鐘

本文深度剖析了關(guān)于短信驗(yàn)證碼的運(yùn)作機(jī)制,破解驗(yàn)證碼A和短信驗(yàn)證碼A‘原理,以及短信驗(yàn)證碼未加防護(hù)存在的風(fēng)險和對于短信驗(yàn)證碼出現(xiàn)的一些問題應(yīng)該如何處理。

一、短信驗(yàn)證碼運(yùn)作機(jī)制

1. 驗(yàn)證碼加密發(fā)送

  1. 在APP中點(diǎn)擊發(fā)送驗(yàn)證碼,向后臺發(fā)送一個發(fā)送驗(yàn)證碼請求;
  2. 后臺收到請求,生成一個驗(yàn)證碼A,并反編譯成短信驗(yàn)證碼A‘;
  3. 請求短信服務(wù)商發(fā)送短信驗(yàn)證碼A’至用戶手機(jī),同時存儲驗(yàn)證碼A至后臺數(shù)據(jù)庫中;

注:出于安全性考慮,后臺數(shù)據(jù)庫只能查看驗(yàn)證碼A,無法查看短信驗(yàn)證碼A‘。

2. 驗(yàn)證碼解密驗(yàn)證

  1. 用戶收到短信驗(yàn)證碼A’,填寫至APP中,點(diǎn)擊注冊,向后臺發(fā)送驗(yàn)證驗(yàn)證碼請求并提交短信驗(yàn)證碼;
  2. 后臺收到請求后后反編譯短信驗(yàn)證碼A‘,驗(yàn)證反編譯之后的結(jié)果是否是驗(yàn)證碼A,是則驗(yàn)證碼成功,此次用戶注冊申請成功,否則驗(yàn)證失敗,反饋給APP,此次注冊申請不成功。

產(chǎn)品經(jīng)理只需要理解成為——“我們有一個密件,你用我短信傳給你的暗號打開密件,然后把里面的東西交給我,我就把你要的東西給你”。

二、破解驗(yàn)證碼A、短信驗(yàn)證碼A‘原理

在這樣的一個機(jī)制下,而且需要驗(yàn)證碼不過于復(fù)雜,會出現(xiàn)兩種比較常見的對用戶賬戶的安全性造成威脅的情況:

(1)暴力破解短信驗(yàn)證碼A’

假設(shè)短信驗(yàn)證碼A’只有四位,暴力破解只需要模擬調(diào)取接口10000次就能夠把短信驗(yàn)證碼A‘破解出來。假設(shè)調(diào)取一次接口耗時0.1秒,那么1000秒就能夠成功破解驗(yàn)證碼A’,即只有短短的1000/60=16.67分鐘。

(2)暴力破解驗(yàn)證碼A

截取數(shù)據(jù)庫的數(shù)據(jù)包拿到驗(yàn)證碼A,對驗(yàn)證碼A執(zhí)行暴力破解,反推出短信驗(yàn)證碼A‘,相比直接暴力破解短信驗(yàn)證碼A’,時間會有點(diǎn)長,但可以減少驗(yàn)證次數(shù)。

三、短信驗(yàn)證碼未加防護(hù)存在的風(fēng)險

當(dāng)黑客發(fā)現(xiàn)某個未加防護(hù)的短信發(fā)送接口后,按照某個手機(jī)號碼列表,循環(huán)發(fā)送短信驗(yàn)證碼,不斷變換ip地址,如果我們沒有做任何限制的話,會存在兩個方面的風(fēng)險:

  1. 公司可能損失數(shù)以萬計甚至更高的短信費(fèi)用,發(fā)送驗(yàn)證碼是需要向運(yùn)營商付費(fèi),如果發(fā)出的短信大多數(shù)都是沒有用的話,用戶注冊量越大資金支出越大,將讓公司在這一塊遭受不必要的損失;
  2. 流量攻擊,用戶無法登陸、注冊;大批量的請求發(fā)送驗(yàn)證碼,會導(dǎo)致訪問流量大增,有可能使得發(fā)送驗(yàn)證碼的數(shù)據(jù)接口癱瘓,用戶無法繼續(xù)使用該功能(造成用戶無法登陸、注冊),必定會收到用戶的投訴,公司形象也會受損。

四、應(yīng)對策略

為了防止黑客惡意刷取目標(biāo)網(wǎng)站短信驗(yàn)證碼,使用對短信發(fā)送次數(shù)、短信發(fā)送時間間隔進(jìn)行限制以及發(fā)送之前增加動態(tài)驗(yàn)證。

(1)手機(jī)號獲取短信驗(yàn)證碼次數(shù)限制是其中一種防攻擊策略,不過在設(shè)計這方面內(nèi)容時,需要根據(jù)自己公司的業(yè)務(wù)情況具體制定的。

需要回答3個問題:

  1. 根據(jù)業(yè)務(wù)需要,短信驗(yàn)證碼發(fā)送次數(shù)設(shè)置的上限為多少合適?單次短信驗(yàn)證碼填寫錯誤的次數(shù)?
  2. 一般超過這個上限,我們需要鎖定用戶手機(jī)號多長時間?6小時,12小時,還是24小時?
  3. 鎖定用戶手機(jī)號后,我們可以為用戶提供的后續(xù)方案是什么?需不需要提示對方,讓他打電話給客服,自己主動申請解鎖?走郵箱的驗(yàn)證方式、增加語音驗(yàn)證碼也是一種可行的解決方案。

(2)設(shè)置短信發(fā)送時間間隔是其中的一種防攻擊策略,為了防止用戶重復(fù)獲取驗(yàn)證碼,一般設(shè)置60s左右的間隔獲取時間,但驗(yàn)證碼的有效期一般是5-30分鐘不等。一般來說,5分鐘有效的都是4位驗(yàn)證碼,30分鐘有效的都是6位驗(yàn)證碼。不過這方面手段不能防止黑客更換手機(jī)號進(jìn)行攻擊,防護(hù)等級較低。

(3)發(fā)送驗(yàn)證碼之前需要填寫一次驗(yàn)證碼,不過此種傳統(tǒng)的方式利用機(jī)器學(xué)習(xí)的知識很容易破解。另外可以增加滑塊拼圖這種需要人為干預(yù)的動態(tài)驗(yàn)證。

至于如何研究這一塊,各位可以看一下各大手機(jī)銀行的APP,他們的安全防護(hù)措施都非常強(qiáng)大,無論是登錄還是注冊還是找回密碼都有極高的安全性。

 

本文由 @?碼農(nóng) 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自 Pixabay,基于 CC0 協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 專業(yè)提供短信驗(yàn)證通道,一鍵登錄驗(yàn)證。商務(wù)合作聯(lián)系WX:13128049287

    來自廣東 回復(fù)
  2. 可以將驗(yàn)證碼位數(shù)增加至8位或10位嗎?或采用組合輸入的辦法。 比如本身的六位數(shù)字驗(yàn)證碼發(fā)送給用戶,同時隨機(jī)生成2位英文字符,用戶獲取后,填寫驗(yàn)證碼+英文,實(shí)現(xiàn)驗(yàn)證。

    來自北京 回復(fù)
    1. 復(fù)雜的驗(yàn)證碼不便于用戶記憶輸入,反而丟失用戶體驗(yàn),一般都是4或6位純數(shù)字碼。防盜刷策略應(yīng)放在接口調(diào)用側(cè)較為合適。

      來自上海 回復(fù)
    2. 都是有道理的,還是得具體問題具體考慮吧,得綜合評估是否足夠的理由犧牲用戶體驗(yàn)去滿足安全性,金融行業(yè)對于安全性要求更高

      回復(fù)
    3. 感謝建議,應(yīng)對策略一塊確實(shí)寫的不夠全面。一定程度上增加驗(yàn)證碼的長度,采用混合驗(yàn)證碼提高驗(yàn)證碼的復(fù)雜度,都能進(jìn)一步提高暴力破解的難度。

      回復(fù)
  3. 應(yīng)對策略各位童鞋有更好的實(shí)現(xiàn)方法,歡迎指導(dǎo)交流……

    來自浙江 回復(fù)