短信驗(yàn)證碼的運(yùn)作機(jī)制,破解驗(yàn)證碼A和短信驗(yàn)證碼A‘原理,以及短信驗(yàn)證碼未加防護(hù)存在的風(fēng)險(xiǎn)和對(duì)于短信驗(yàn)證碼出現(xiàn)的一些問題應(yīng)該如何處理。
一般在用戶在注冊(cè)各大網(wǎng)站或者APP的時(shí)候,經(jīng)常會(huì)遇到填寫手機(jī)號(hào)碼后,需要點(diǎn)擊獲取短信驗(yàn)證碼的情況。其實(shí)短信驗(yàn)證碼是企業(yè)為用戶提供的一個(gè)用于注冊(cè)、驗(yàn)證等的安全憑證,這樣大大降低了非法注冊(cè)、重復(fù)注冊(cè)、以及用戶安全維護(hù)的風(fēng)險(xiǎn)。
一、短信驗(yàn)證碼運(yùn)作機(jī)制
1. 驗(yàn)證碼加密發(fā)送
在APP中點(diǎn)擊發(fā)送驗(yàn)證碼,向后臺(tái)發(fā)送一個(gè)發(fā)送驗(yàn)證碼請(qǐng)求;后臺(tái)收到請(qǐng)求,生成一個(gè)驗(yàn)證碼A,并反編譯成短信驗(yàn)證碼A‘;請(qǐng)求短信服務(wù)商發(fā)送短信驗(yàn)證碼A’至用戶手機(jī),同時(shí)存儲(chǔ)驗(yàn)證碼A至后臺(tái)數(shù)據(jù)庫中;
注:出于安全性考慮,后臺(tái)數(shù)據(jù)庫只能查看驗(yàn)證碼A,無法查看短信驗(yàn)證碼A‘。
2. 驗(yàn)證碼解密驗(yàn)證
用戶收到短信驗(yàn)證碼A’,填寫至APP中,點(diǎn)擊注冊(cè),向后臺(tái)發(fā)送驗(yàn)證驗(yàn)證碼請(qǐng)求并提交短信驗(yàn)證碼;
后臺(tái)收到請(qǐng)求后后反編譯短信驗(yàn)證碼A‘,驗(yàn)證反編譯之后的結(jié)果是否是驗(yàn)證碼A,是則驗(yàn)證碼成功,此次用戶注冊(cè)申請(qǐng)成功,否則驗(yàn)證失敗,反饋給APP,此次注冊(cè)申請(qǐng)不成功。
產(chǎn)品經(jīng)理只需要理解成為——“我們有一個(gè)密件,你用我短信傳給你的暗號(hào)打開密件,然后把里面的東西交給我,我就把你要的東西給你”。
二、破解驗(yàn)證碼A、短信驗(yàn)證碼A‘原理
在這樣的一個(gè)機(jī)制下,而且需要驗(yàn)證碼不過于復(fù)雜,會(huì)出現(xiàn)兩種比較常見的對(duì)用戶賬戶的安全性造成威脅的情況:
(1)暴力破解短信驗(yàn)證碼A’
假設(shè)短信驗(yàn)證碼A’只有四位,暴力破解只需要模擬調(diào)取接口10000次就能夠把短信驗(yàn)證碼A‘破解出來。假設(shè)調(diào)取一次接口耗時(shí)0.1秒,那么1000秒就能夠成功破解驗(yàn)證碼A’,即只有短短的1000/60=16.67分鐘。
(2)暴力破解驗(yàn)證碼A
截取數(shù)據(jù)庫的數(shù)據(jù)包拿到驗(yàn)證碼A,對(duì)驗(yàn)證碼A執(zhí)行暴力破解,反推出短信驗(yàn)證碼A‘,相比直接暴力破解短信驗(yàn)證碼A’,時(shí)間會(huì)有點(diǎn)長,但可以減少驗(yàn)證次數(shù)。
三、短信驗(yàn)證碼未加防護(hù)存在的風(fēng)險(xiǎn)
當(dāng)黑客發(fā)現(xiàn)某個(gè)未加防護(hù)的短信發(fā)送接口后,按照某個(gè)手機(jī)號(hào)碼列表,循環(huán)發(fā)送短信驗(yàn)證碼,不斷變換ip地址,如果我們沒有做任何限制的話,會(huì)存在兩個(gè)方面的風(fēng)險(xiǎn):
公司可能損失數(shù)以萬計(jì)甚至更高的短信費(fèi)用,發(fā)送驗(yàn)證碼是需要向運(yùn)營商付費(fèi),如果發(fā)出的短信大多數(shù)都是沒有用的話,用戶注冊(cè)量越大資金支出越大,將讓公司在這一塊遭受不必要的損失;
流量攻擊,用戶無法登陸、注冊(cè);大批量的請(qǐng)求發(fā)送驗(yàn)證碼,會(huì)導(dǎo)致訪問流量大增,有可能使得發(fā)送驗(yàn)證碼的數(shù)據(jù)接口癱瘓,用戶無法繼續(xù)使用該功能(造成用戶無法登陸、注冊(cè)),必定會(huì)收到用戶的投訴,公司形象也會(huì)受損。
四、應(yīng)對(duì)策略
為了防止黑客惡意刷取目標(biāo)網(wǎng)站短信驗(yàn)證碼,使用對(duì)短信發(fā)送次數(shù)、短信發(fā)送時(shí)間間隔進(jìn)行限制以及發(fā)送之前增加動(dòng)態(tài)驗(yàn)證。
(1)手機(jī)號(hào)獲取短信驗(yàn)證碼次數(shù)限制是其中一種防攻擊策略,不過在設(shè)計(jì)這方面內(nèi)容時(shí),需要根據(jù)自己公司的業(yè)務(wù)情況具體制定的。
需要回答3個(gè)問題:
根據(jù)業(yè)務(wù)需要,短信驗(yàn)證碼發(fā)送次數(shù)設(shè)置的上限為多少合適?單次短信驗(yàn)證碼填寫錯(cuò)誤的次數(shù)?
一般超過這個(gè)上限,我們需要鎖定用戶手機(jī)號(hào)多長時(shí)間?6小時(shí),12小時(shí),還是24小時(shí)?
鎖定用戶手機(jī)號(hào)后,我們可以為用戶提供的后續(xù)方案是什么?需不需要提示對(duì)方,讓他打電話給客服,自己主動(dòng)申請(qǐng)解鎖?走郵箱的驗(yàn)證方式、增加語音驗(yàn)證碼也是一種可行的解決方案。
(2)設(shè)置短信發(fā)送時(shí)間間隔是其中的一種防攻擊策略,為了防止用戶重復(fù)獲取驗(yàn)證碼,一般設(shè)置60s左右的間隔獲取時(shí)間,但驗(yàn)證碼的有效期一般是5-30分鐘不等。一般來說,5分鐘有效的都是4位驗(yàn)證碼,30分鐘有效的都是6位驗(yàn)證碼。不過這方面手段不能防止黑客更換手機(jī)號(hào)進(jìn)行攻擊,防護(hù)等級(jí)較低。
(3)發(fā)送驗(yàn)證碼之前需要填寫一次驗(yàn)證碼,不過此種傳統(tǒng)的方式利用機(jī)器學(xué)習(xí)的知識(shí)很容易破解。另外可以增加滑塊拼圖這種需要人為干預(yù)的動(dòng)態(tài)驗(yàn)證。
至于如何研究這一塊,各位可以看一下各大手機(jī)銀行的APP,他們的安全防護(hù)措施都非常強(qiáng)大,無論是登錄還是注冊(cè)還是找回密碼都有極高的安全性。
發(fā)送短信的服務(wù)一般是由第三方短信服務(wù)商提供的,他們整合了移動(dòng),聯(lián)通、電信三方資源,三網(wǎng)都可以發(fā)送,這樣就不需要直接對(duì)接運(yùn)營商了。比如說Mob短信驗(yàn)證碼接口的應(yīng)用,發(fā)送短信驗(yàn)證碼主要是為了驗(yàn)證手機(jī)方的真實(shí)性,實(shí)現(xiàn)原理簡單說就是系統(tǒng)先生成一個(gè)驗(yàn)證碼,調(diào)用Mob第三方服務(wù)商的短信接口,發(fā)送到手機(jī)方,手機(jī)方輸入驗(yàn)證碼,再由系統(tǒng)去校驗(yàn)是否符合,符合則說明手機(jī)真實(shí)有效。
短信驗(yàn)證碼功能在各大app上都是必不可少的一項(xiàng)功能,比如說app驗(yàn)證碼登陸功能,注冊(cè)功能,支付功能,身份驗(yàn)證等等方面,雖然只是一串?dāng)?shù)字,但是app短信驗(yàn)證碼功能卻是影響著我們生活的方方面面。
賞