驗證碼的前世今生(今生篇)

Image

看完《驗證碼的前世今生(前世篇)》也許第一感覺就是Winter is coming,互聯網的人機對抗到了最黑暗的時刻。柳暗花明又一村,最黑暗的時刻也是光明即將來臨的時刻——在傳統驗證碼的末日新的反向圖靈測試機制浴火重生。

0×1 驗證碼的劃代標準

在介紹新的反向圖靈測試機制前,首先我們對驗證碼進行劃代對比。通過驗證碼的劃代對比我們能更清楚新型驗證碼的特性。

驗證碼劃代的標準是人機識別過程中基於對人類知識的應用

第一代:標準驗證碼

這一代驗證碼是即是我們常見的圖形驗證碼、語音驗證碼,基於機器難以處理複雜的計算機視覺及語音識別問題,而人類卻可以輕鬆的識別來區分人類及機器。這一代驗證碼初步利用了人類知識容易解答,而計算機難以解答的機制進行人機判斷

Screen Shot 2016-03-01 at 11.10.50 PM.png

第二代:創新驗證碼

第二代驗證碼是基於第一代驗證碼的核心思想(通過人類知識可以解答,而計算機難以解答的問題進行人機判斷)而產生的創新的交互優化型驗證碼。第二代驗證碼基於第一代驗證碼的核心原理--“人機之間知識的差異”,拓展出大量創新型驗證碼

如12306的驗證碼也是對於傳統驗證碼的一種創新:

Screen Shot 2016-03-01 at 11.11.55 PM.png

第三代:無知識型驗證碼

第三代驗證碼最大的特點是不再基於知識進行人機判斷,而是基於人類固有的生物特徵以及操作的環境信息綜合決策,來判斷是人類還是機器。無知識型驗證碼最大特點即無需人類思考,從而不會打斷用戶操作,進而提供更好的用戶體驗。

如Google的新版ReCaptcha:

Screen Shot 2016-03-01 at 11.15.45 PM.png

阿里巴巴的滑動驗證:

Screen Shot 2016-03-02 at 9.46.55 AM.png

0×2 無知識型驗證碼的原理

Step 1:在Web前端週期性的對Javascript代碼進行混淆和並更新加密算法,將不可信的Web前端打造成可信的客戶端。在用戶進行滑動操作時,基於可信的客戶端採集用戶操作的行爲信息以及環境信息,將其加密後提交給後端的風控引擎;

Web前端因爲代碼都是明文形式的腳本語言,服務端想要從客戶端獲取可信的數據一直面臨“源碼面前,了無祕密”的困擾。給一個前端工程師充足的時間,似乎Web前端真的是了無祕密,如下圖:

8f697255089919f2c874c9aa5287747a.png

而隨着攻防對抗的持續,安全的補鍋匠們總能找到猥瑣的方法來進行防禦。Web前端雖然沒有客戶端防止逆向和調試的安全強度,但是卻具備客戶端所不具有的hotpatch能力。

參考Map-Reduce的原理,單臺機器性能不行,把任務分派到多臺機器併發執行。如果單份Javascript混淆的強度不可行,那麼週期性的對Javascript代碼自動混淆。即便攻擊者能夠短時間的對Web前端進行逆向,但逆向出來的功能短期之後就會在服務端失效,那麼也能極大的消耗攻擊者的成本。

更可怕的是喪心病狂的Google基於Javascript完全的實現一套虛擬機,核心代碼使用字節碼實現。週期性的對字節碼格式更新逆向的成本成幾何級數遞增。

如果代碼邏輯不更新,僅僅重複的混淆原有邏輯,那麼仍然沒有意義。而對於一個Web的驗證碼應用,核心功能只有兩部分:

  1. 事件採集模塊,採集用戶的行爲信息,此部分邏輯簡單,也無法自動化更新代碼邏輯;
  2. 行爲數據加密模塊,該部分的核心是加密算法,似乎代碼邏輯自動化更新變化有足夠空間。

爲了保障前端的可信,需要對加密算法進行自動化更新,必須要有一個巨大的對稱加密算法可選集合才能保證代碼的自動化更新。而所有對稱加密算法都基於Feistel分組密碼結構,基於Feistel分組密碼結構可以派生出無數的對稱加密算法,從而可以派生出無數的的對稱加密算法。

如下圖,Festel分組結構的可逆性不要求加密的核心函數F可逆,故可以自動的生成任意的F函數進而派生出無數對稱加密算法。

1022px-Feistel_cipher_diagram_en.svg.png

基於自動化的代碼更新及混淆機制從而保障整個Web代碼對抗逆向分析和調試的強度,進而將不可信的Web前端打造成可信的端。

Step 2:後續風控引擎會基於用戶操作的行爲特徵、用戶環境信息、用戶對應的設備指紋及其設備信譽綜合進行決策,判斷是否需要對該次操作進行二次判斷或者是直接阻斷。

Screen Shot 2016-03-03 at 12.15.08 AM.png

0×3 無知識型驗證碼的優點

無知識型驗證碼有三大核心優點,分別是用戶體驗,風險識別,風險攔截。

用戶體驗:

無知識型驗證碼針對大多數的用戶能夠無需思考,直接通過。不存在業務和流程的打斷,體驗流暢,對用戶體驗的提升毋庸質疑。

風險識別:

因爲隨着機器學習的發展讓機器掌握人類具有的知識也不再是難點,無知識型驗證碼不再基於知識來挑戰機器,而是基於人類的固有行爲特徵以及操作的環境信息綜合進行風控決策,攻擊者難以批量的模擬出可以欺騙風控引擎的正常人類的的操作。

風險攔截:

普通的驗證碼基於知識對機器發起挑戰,無法做到對機器進行阻斷。因爲知識的挑戰還需要兼顧人類的體驗,機器通過的概率只能做到無限的降低而無法消除。而無知識型驗證碼基於後端的風控決策,可以對不同風險的操作提出更高難度的驗證碼乃至阻斷,有更大空間對風險進行消除和攔截。

0×4 總結 

目前阿里巴巴提供的滑動驗證產品,目前對外提供免費試用,歡迎申請試用滑動驗證 ,Discuz插件安裝鏈接

最後,希望新型的驗證碼能夠建設更簡單和安全的互聯網: )

* 作者/bbdog(阿里安全研究實驗室),轉載請註明來自FreeBuf(黑客與極客)

Ref: http://www.freebuf.com/articles/web/102276.html?utm_source=tuicool&utm_medium=referral

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章