在當時的條件下,對於機器來說,識別扭曲的圖形仍然是壹件非常困難的事情,但是對於人來說相對可以接受。雅虎是當時第壹個應用圖形驗證碼的產品,很快解決了雅虎郵箱上的垃圾問題,於是圖形驗證碼開始了大發展時期。
在被證明有效後,圖形驗證碼在互聯網上迅速普及。國內外各大網站都在關鍵業務點添加了這類驗證碼。
首先,由於開發者水平參差不齊,驗證碼本身的實現就存在問題,導致可以繞過的漏洞。常見的類型如下:
例如,將驗證碼答案輸出到頁面,並寫入cookie中。比如發卷子的時候,答案就寫在卷子的背面。老師再也不用擔心我的成績了。
如果驗證碼可以重復使用,就沒有超時。驗證壹次,用壹輩子。
如果修改了服務參數,不檢查驗證碼就能通過,甚至驗證碼都是擺設。結合具體業務點有什麽危害?
A.驗證碼寫在cookie裏。這可能會導致乘客信息的泄露。
B.驗證碼和圖片是有對應關系的,直接訪問html就能得到答案。這可能導致庫沖突和暴力密碼破解。
壹開始,我們提到了壹個重要的假設:
CAPTCHA提出的問題,人類應該很容易回答,讓機器無法回答。
其實CAPTCHA要處理的問題就是區分普通人和惡意用戶(黑客,垃圾郵件制造者)。然後時間點到了2016,黑客和普通用戶的差距已經很大了(想象壹下中國足球隊對巴西足球隊,這個時候留給中國隊的時間已經不多了)。
所以在圖片驗證碼的應用點上,CAPTCHA已經不能滿足這個假設了。在此期間,出現了很多強化識別圖形驗證碼的方法(每種方法的詳細原理和解釋請參考wooyun drops,此處不再贅述):
附上壹些名詞解釋:
如上圖所示,原圖使用了字體旋轉、背景色混淆等手段。在專業驗證碼工具面前,拼接幾個命令就能識別。
如上圖所示,是驗證碼識別軟件自建字體的過程。輸入以確認驗證碼識別的正確性。如果有任何錯誤,繼續稍加修改。當保存了數千種正確識別的字體時,程序可以達到可用的精度。(其實如果沒有其他限制的話,準確率在30%以上的時候,會造成很大的危害。畢竟對於攻擊者來說,發送三個包的成本和發送1個包的成本相差不大。)
看到這裏,客戶大概可以回答這個問題:
為什麽我用驗證碼的時候還是會被刷?
普通驗證碼沒用嗎?
不是這樣的。安全是壹個博弈過程。綜合運用前面提到的驗證碼技術(尤其是字體粘連等。),並且保持關註和變化,攻擊者的識別率也比較低。當攻擊的成本大於可獲得的收益時,自然沒人會攻擊。(普通用戶在這裏應該強烈要求存在感)
至此,雙方雖然在體型上略有差距,但整體戰鬥力還是勉強打成平手,只是互相推搡。只是隨著戰爭的升級,個人輪番上陣後,驗證碼已經違背了他當初設計的初衷:對普通用戶的友好性逐漸消失。普通用戶的體驗成了這場戰爭的犧牲品,造就了壹批被用戶吐槽的無法識別的驗證碼。
就在普通用戶不停吐槽的時候,程序員說鍋不想背,但又不得不背。因為生意總是要做的,攻擊者也是要吃飯的,升級驗證碼的成本限制了風險的級別,所以就變成了這樣的模式╮ (╯ _ ╰) ╭:
就是在這種情況下,大家似乎和睦相處了壹段時間。
在日日夜夜的對抗中,攻擊者想到了壹個壹勞永逸解決圖片驗證碼問題的辦法。在表達對這些從事制灰的人的向往之前,我先說點題外話。
2009年,谷歌收購了CMU的壹個項目:recaptcha。這個項目是驗證碼的高級版本。它與CAPTCHA基於相同的假設,但它允許用戶同時識別兩張圖片,壹張用於驗證用戶的身份,另壹張用於幫助機器難以識別的電子文檔。
好吧,如果讀者有從事這種灰產的人,請註意recaptcha右下角的小字(stop spam .看書看這種感覺)。
《recaptcha》的作者當然是路易斯·馮·安。在recaptcha的基礎上,Louis進壹步提出了壹個概念:人類計算。
簡單來說,他希望利用計算機和網絡平臺解決大規模的復雜問題。具體來說,對於recaptcha項目來說,就是在大家的幫助下幫助圖書數字化。(這個思路的具體應用還包括後面會提到的壹個叫ESP GAME和no recaptcha的遊戲。)
不過在2004年(我能找到這個消息的最早時間),已經有人完美的實現了這個概念:手工編碼,起源:中國(這裏我應該感到自豪)。
所謂人工編碼,就是將驗證碼的請求轉發給壹個平臺,平臺會將這個信息發送給平臺上的編碼者,然後編碼者進行識別,將答案發回給請求者。通過編碼平臺的api,攻擊者可以編寫程序實現目標的自動運行,驗證碼部分只需要交給編碼平臺即可。
編碼平臺在國內市場受歡迎有幾個原因:
[1].從2006年開始,國內互聯網的快速發展,使得流量變現成為可能。各種郵件營銷,SEO,IM工具等。迫切需要壹個穩定的可以繞過圖形驗證碼的方法。近年來,基於數據的欺詐和賬戶盜竊進壹步加劇了這壹趨勢。
[2].編碼平臺的爆發式發展也得益於中國經濟蓬勃發展的原因之壹:人口多,勞動力成本低。壹種常見的網賺模式是碼商模式,只要會上網,會識別驗證碼的人都可以參與。PS:妳沒看過下面的廣告嗎?大學生大媽不需要學歷,只要會上網打字,壹天就能賺XXXXX。當然,除了打碼平臺,還有很多騙子。
以上驗證碼的價格在平臺上都有明確標註。普通的信驗證碼1大概是1分錢,而知識問答大概是6分錢。比起用這些骨灰產生的效益,真的是又美又不貴,關鍵是還很穩定。
同時我註意到國外的價格和國內相差不大。現在在美國的價格大概是1.5美元/1,000,美國的編碼員已經擴展到東南亞了。編碼平臺壹出現,2.2中提到的加強驗證碼的方法就沒用了。因為不管妳怎麽改,驗證碼總要能被人類接觸到。
編碼平臺的出現雖然理論上沒有打破CAPTCHA的原理,但實際上打破了對程序自動提交的防禦,所以我們需要新的安全的驗證方式。這些探索也帶來了各種形式的驗證碼,我們將在下壹篇文章中討論。
最後,以壹張“感傷”的圖片結束。
這張圖不是來自壹個改變世界的極客,也不是來自壹個有愛心的藝術家。來自官網,某知名編碼平臺,是不是太矯情了?妳真的改變了我們的工作方式。
面對這樣的感情,我想我現在只能做壹件事。