轉(zhuǎn)帖|行業(yè)資訊|編輯:蔣永|2016-12-28 10:25:24.000|閱讀 314 次
概述:常在網(wǎng)上晃悠的人,對(duì)上面這張圖都不會(huì)陌生。特別是在注冊(cè)新賬號(hào)、確認(rèn)交易時(shí),它們都會(huì)頻繁出現(xiàn),要求我們輸入正確的驗(yàn)證碼,那這些看上去跟我們要做的事情完全無(wú)關(guān)的驗(yàn)證碼到底有何作用呢?
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
常在網(wǎng)上晃悠的人,對(duì)上面這張圖都不會(huì)陌生。特別是在注冊(cè)新賬號(hào)、確認(rèn)交易時(shí),它們都會(huì)頻繁出現(xiàn),要求我們輸入正確的驗(yàn)證碼,那這些看上去跟我們要做的事情完全無(wú)關(guān)的驗(yàn)證碼到底有何作用呢?
常在網(wǎng)上晃悠的人,對(duì)上面這張圖都不會(huì)陌生。特別是在注冊(cè)新賬號(hào)、確認(rèn)交易時(shí),它們都會(huì)頻繁出現(xiàn),要求我們輸入正確的驗(yàn)證碼,那這些看上去跟我們要做的事情完全無(wú)關(guān)的驗(yàn)證碼到底有何作用呢?
首先,先介紹下驗(yàn)證碼程序的提出者,路易斯·馮·安(Luis von Ahn)。2002年,路易斯和他的小伙伴在卡內(nèi)基梅隆第一次提出了CAPTCHA(驗(yàn)證碼)這樣一個(gè)程序概念。該程序是指,向請(qǐng)求的發(fā)起方提出問題,能正確回答的即是人類,反之則為機(jī)器。這個(gè)程序基于這樣一個(gè)重要假設(shè):提出的問題要容易被人類解答,并且讓機(jī)器無(wú)法解答。
在當(dāng)時(shí)的條件下,識(shí)別扭曲的圖形,對(duì)于機(jī)器來(lái)說(shuō)還是一個(gè)很艱難的任務(wù),而對(duì)于人來(lái)說(shuō),則相對(duì)可以接受。yahoo在當(dāng)時(shí)第一個(gè)應(yīng)用了圖形化驗(yàn)證碼這個(gè)產(chǎn)品,很快解決了yahoo郵箱上的垃圾郵件問題,因此圖形類驗(yàn)證碼開始了大發(fā)展時(shí)期。
圖形化驗(yàn)證碼在被證明有效后,在互聯(lián)網(wǎng)上迅速得到了推廣。國(guó)內(nèi)外各大網(wǎng)站,在關(guān)鍵的業(yè)務(wù)點(diǎn)上都加入了這一類型的驗(yàn)證碼。
首先,由于開發(fā)者水平的良莠不齊,導(dǎo)致驗(yàn)證碼本身的實(shí)現(xiàn)存在問題,從而導(dǎo)致漏洞可以繞過(guò),常見的有以下幾種類型:
如將驗(yàn)證碼答案輸出到頁(yè)面中、寫在cookie里。打比方就是說(shuō),在發(fā)卷的時(shí)候,把答案寫在了卷子背面。(老師再也不用擔(dān)心我的成績(jī))
如驗(yàn)證碼可以重復(fù)使用、不設(shè)超時(shí)。驗(yàn)證一次,永久使用。
如修改業(yè)務(wù)參數(shù)可導(dǎo)致不用校驗(yàn)驗(yàn)證碼也可通過(guò)、甚至驗(yàn)證碼就是擺設(shè)。結(jié)合到具體的業(yè)務(wù)點(diǎn)上有什么危害呢?
a. 驗(yàn)證碼寫在cookie中。此處可導(dǎo)致旅客信息泄露。
b. 驗(yàn)證碼與圖片存在對(duì)應(yīng)關(guān)系,因此直接訪問html即可得到答案。此處可導(dǎo)致撞庫(kù)與暴力破解密碼。
在開篇我們提到了一個(gè)重要的假設(shè):
CAPTCHA提出的問題要容易被人類解答,并且讓機(jī)器無(wú)法解答。
實(shí)際上,CAPTCHA所要處理的問題是:將普通人與惡意的用戶(黑客、垃圾消息發(fā)送者)區(qū)分開來(lái)。那當(dāng)時(shí)間點(diǎn)到達(dá)2016年時(shí),黑客們與普通用戶之間的差距已經(jīng)很大了(想象下中國(guó)足球隊(duì)對(duì)巴西足球隊(duì),而且此時(shí)留給中國(guó)隊(duì)的時(shí)間已經(jīng)不多了)。
因此,CAPTCHA在圖片驗(yàn)證碼這一應(yīng)用點(diǎn)上已經(jīng)無(wú)法滿足這一假設(shè)了。在這段時(shí)間內(nèi),出現(xiàn)了很多的加強(qiáng)和識(shí)別圖形驗(yàn)證碼的方法(每一種方法的詳細(xì)原理和解釋,可以參見wooyun drops,在此不做詳述):
附上部分名詞解釋:
預(yù)處理:灰度值二值化、去噪點(diǎn)、連通性補(bǔ)全等
切割:通過(guò)滴水算法、統(tǒng)計(jì)方法等得到單個(gè)字符的所在位置
機(jī)器學(xué)習(xí)算法:將經(jīng)過(guò)處理的每個(gè)字符進(jìn)行訓(xùn)練,訓(xùn)練后得到識(shí)別答案(SVM、KNN、神經(jīng)網(wǎng)絡(luò)等)
字庫(kù):與機(jī)器學(xué)習(xí)算法類似,將處理后的字符人工導(dǎo)入,構(gòu)造字庫(kù),對(duì)長(zhǎng)期不變的驗(yàn)證碼較為有效
如上圖所示,原始的圖像使用了字體旋轉(zhuǎn)、背景色混淆等手段,在專業(yè)的驗(yàn)證碼工具面前,也就是幾個(gè)命令拼接即可完成識(shí)別
如上圖所示,是一個(gè)驗(yàn)證碼識(shí)別軟件自建字庫(kù)的過(guò)程,通過(guò)回車確認(rèn)驗(yàn)證碼識(shí)別正確,如有錯(cuò)誤,稍帶修改繼續(xù)。當(dāng)保存了上千個(gè)正確識(shí)別的字庫(kù)后,該程序便可達(dá)到一個(gè)可用的可用的準(zhǔn)確率。(其實(shí)若不不做其他限制,此時(shí)準(zhǔn)確率在30%以上時(shí),即可造成很大的危害,畢竟對(duì)于攻擊者來(lái)說(shuō),發(fā)3個(gè)包與發(fā)1個(gè)包的成本差別不大)
看到這里,客戶們大概可以回答這個(gè)問題了:
為什么我用了驗(yàn)證碼還是會(huì)被刷?
那普通驗(yàn)證碼難道沒用了嗎?
那倒也不是,安全是一個(gè)博弈的過(guò)程。綜合使用之前提到的驗(yàn)證碼技術(shù)(特別是字體粘連等),并且保持關(guān)注和變化,攻擊者的識(shí)別率也比較低。當(dāng)攻擊的成本大于可獲得的利益時(shí),自然就沒人來(lái)攻擊了。(普通用戶在此應(yīng)強(qiáng)烈要求存在感)
此時(shí),雖然兩方大小上略有差距,但是總體戰(zhàn)斗力還算是勉強(qiáng)打個(gè)平手,互相出招而已。只是隨著戰(zhàn)火的升級(jí),個(gè)人輪番上陣后,驗(yàn)證碼已經(jīng)違背了他最初設(shè)計(jì)時(shí)的初衷:對(duì)普通用戶的友好性逐漸消失。而普通用戶的體驗(yàn)也就成了這場(chǎng)戰(zhàn)爭(zhēng)中的犧牲品,這也就造就了一批有一批被用戶吐槽的無(wú)法辨認(rèn)的驗(yàn)證碼。
正當(dāng)普通用戶們不斷吐槽的時(shí)候,程序員表示這個(gè)鍋不想背但是也得背。因為業(yè)務(wù)總是要做的,而攻擊者們也是要吃飯的,升級(jí)了驗(yàn)證碼的成本,也就限制了風(fēng)險(xiǎn)的等級(jí),于是就變成了這樣一個(gè)模式╮(╯_╰)╭:
程序員:熬一晚上升級(jí)
攻擊者:熬一晚上破解
程序員:熬兩晚上升級(jí)
攻擊者:熬兩晚上破解
....(心疼)...
大家就在這種你方唱罷我登臺(tái)的情況下看似和睦的度過(guò)了一段時(shí)間。
在日日夜夜的對(duì)抗中,攻擊者想到了一個(gè)辦法,可以一勞永逸的解決圖片驗(yàn)證碼的問題。在我對(duì)這些搞灰產(chǎn)的人們表示憧憬之前,先說(shuō)點(diǎn)題外話。
2009年,google買下了CMU的一個(gè)項(xiàng)目:recaptcha。這個(gè)項(xiàng)目是CAPTCHA的進(jìn)階版本。它所基于的假設(shè)與CAPTCHA一致,但是它同時(shí)讓用戶識(shí)別兩張圖片,一張用于驗(yàn)證用戶身份,而另一張用于幫助難以用機(jī)器識(shí)別的電子文檔。
恩,如果讀者有從事此類灰產(chǎn)相關(guān)工作的人,請(qǐng)注意recaptcha右下角的小字(stop spam.read books看看這情懷)。
而recaptcha的作者,當(dāng)然又是:路易斯·馮·安。在recaptcha的基礎(chǔ)上,路易斯進(jìn)一步提出了一個(gè)概念:人類計(jì)算(Human Computation) 。
簡(jiǎn)單來(lái)說(shuō),他希望借由計(jì)算機(jī)和網(wǎng)絡(luò)平臺(tái),發(fā)揮人類技能,去解決大規(guī)模、復(fù)雜的問題,具體到recaptcha項(xiàng)目來(lái)說(shuō),就是借助大家的力量去幫助數(shù)字化書籍。(該思想的具體應(yīng)用還包括一個(gè)叫ESP GAME的游戲以及后面會(huì)提到的no recaptcha)
但是,在2004年(我能搜到這個(gè)新聞的最早時(shí)間),就有人已經(jīng)完美的實(shí)現(xiàn)了這個(gè)概念:人工打碼,并且起源地:中國(guó)(此處我應(yīng)該感到自豪嗎)。
所謂的人工打碼就是,將驗(yàn)證碼的請(qǐng)求轉(zhuǎn)發(fā)給某平臺(tái),該平臺(tái)會(huì)將這個(gè)信息發(fā)送給平臺(tái)上的打碼工,然后打碼工人識(shí)別后,將答案反送回請(qǐng)求者。通過(guò)打碼平臺(tái)的api,攻擊者可以寫程序?qū)崿F(xiàn)對(duì)目標(biāo)的自動(dòng)化操作,而驗(yàn)證碼的部分只要交給打碼平臺(tái)就可以了。
打碼平臺(tái)在國(guó)內(nèi)市場(chǎng)上的火爆,有幾個(gè)原因:
可以打碼的類型包括:
1. 普通字母驗(yàn)證碼
2. 中文驗(yàn)證碼
3. 鼠標(biāo)類型類驗(yàn)證碼
4. 選擇題類型(比如某些網(wǎng)游中做任何會(huì)遇到的驗(yàn)證碼)
5. 旋轉(zhuǎn)類驗(yàn)證碼
6. 知識(shí)常識(shí)問答型驗(yàn)證碼
以上驗(yàn)證碼的價(jià)格在平臺(tái)上都是明碼標(biāo)價(jià),普通的字母驗(yàn)證碼1條在1分錢左右,而知識(shí)問答類在6分錢左右,相較于利用這些灰產(chǎn)所會(huì)產(chǎn)生的利益,真是件美物廉,重點(diǎn)是還非常穩(wěn)定。
同時(shí)我注意到國(guó)外的價(jià)格現(xiàn)在與國(guó)內(nèi)的價(jià)格已經(jīng)相差不大,現(xiàn)在美國(guó)的價(jià)錢約為$1.5/1000,美國(guó)的打碼工已經(jīng)向東南亞擴(kuò)展。打碼平臺(tái)一出現(xiàn),2.2中提到的加強(qiáng)驗(yàn)證碼的方法都無(wú)用了。因?yàn)椴还苣阍趺醋兓?yàn)證碼總需要是人類能夠通過(guò)的。
打碼平臺(tái)的出現(xiàn),雖然沒有從理論上打破CAPTCHA的原則,但是也從事實(shí)上擊破了防止程序自動(dòng)提交的防御,因此我們需要新型的安全的驗(yàn)證方式。這些探索也帶來(lái)了現(xiàn)在各種多樣的驗(yàn)證碼形式,這些我們將在下篇探討。
最后用一個(gè)“富有情懷”的圖片結(jié)束。
這張圖不是來(lái)自改變世界的極客,也不是來(lái)自富有愛心的藝術(shù)家。它來(lái)自某知名打碼平臺(tái)的官網(wǎng),是不是太有情懷了?(你們的確改變了我們的工作方式)
本文轉(zhuǎn)自()
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn