第三代驗證碼研究

隨着機器學習與圖像識別技術的發展,第一代、第二代驗證碼已經失去了安全驗證的做用。爲了增長識別難度,網站暴力升級圖片驗證碼,嚴重破壞了用戶體驗。第三代驗證碼的誕生解決了這一痛點,第三代驗證碼已經再也不是狹義上的驗證碼,它經過多場景多維度進行數據收集,爲網站提供立體式安全保障。算法

聲明

  本文內容僅限於研究,不涉及各安全廠商具體源碼與風控策略。維護網絡安全,人人有責。chrome

 

背景

前段時間分析了市面上一些安全廠商的第三代驗證碼協議,如下內容不針對任何廠商,僅聊聊本身對第三代驗證碼的理解。canvas

驗證碼劃代

(一)第一代驗證碼數組

定義:主要利用簡單知識構建驗證碼。如中文、英文、數字等。瀏覽器

   



(二)第二代驗證碼安全

定義:以第一代驗證碼爲基礎,以創新交互方式的思想構建驗證碼。如看題選字、看圖選物等。


     
服務器

(三)第三代驗證碼cookie

定義:多場景多維度收集數據信息,爲網站提供立體式安全防禦。


   網絡

第一第二代驗證碼退出歷史舞臺的緣由

如下是我總結的兩點緣由
(1)隨着機器學習與圖像是被技術的發展,第一代、第二代驗證碼已經失去了安全驗證的做用;
(2)爲了增長識別難度,網站暴力升級圖片驗證碼,嚴重破壞用戶體驗。
舉個例子

    


以上類型驗證碼咱們經過肉眼識別準確率大約爲30%,但咱們拿到圖片打碼平臺(魔鏡)上用訓練後發現準確率能超過90%。機器能作得比人好,其實這已經失去的驗證碼的意義。less

第三代驗證碼「很簡單」

    最近經常會有人問我,研究的第三代驗證碼是否是就是滑塊驗證碼?不就是把滑塊滑動到指定位置嗎?這有什麼難的? 這讓我想起,在還沒加入Qunar前,小王子在InfoQ上的分享。有人問他,機票價格爲何不能作成一張巨大的哈希表?有必要設計得這麼複雜嗎?從產品的角度來講,不管是Qunar機票報價仍是第三代驗證碼都是很是成功的,由於優秀的產品就是讓普通用戶以爲「很簡單」。

第三代驗證碼網上方案可行嗎

在google或百度上搜索,就會發現不少文章分享如何經過機器模擬人的行爲進行滑動驗證碼、點選驗證碼校驗。解決方案無非就是一下兩種形式:
(1)Selenium + Headless
(2)chrome插件模擬點擊
注:
    Selenium是一種用於Web應用程序測試工具。使用Selenium可以模擬真正用戶操做瀏覽器的行爲,例如模擬鼠標操做、模擬鍵盤操做等。

    PhantomJS是一個」無界面"(headless)瀏覽器,它會把網站加載到內存並執行頁面上的JavaScript,由於不會展現圖形界面,因此運行起來比完整的瀏覽器更高效。
    可行嗎?我以爲在用戶層面上是可行的,無非就是用戶怎麼操做,機器就怎麼操做。可是一旦請求數達到某個閾值後,滑塊就再也沒法成功。這是什麼緣由致使的呢?下面咱們來分析分析。

第三代驗證碼是什麼?

如下是我對第三代驗證碼的歸納
(一)立體防禦
第三代驗證碼,已經再也不是狹義上的驗證碼。多場景多維度進行數據收集,給網站提供立體的安全保障。
(二)無感驗證
以無感、無知識的形式存在,極大提高用戶體驗。
(三)數據分析
利用機器學習對機器信息、行爲數據等進行高維度地分析。
第三代驗證碼構成
如下是我總結的第三代驗證碼構成
(一)驗證碼圖片
     1)圖片還原
     2)圖片識別
(二)人機識別
     3)生物行爲特徵
     4)設備環境信息監測(設備指紋)
(三)平臺安全
     5)代碼混淆 (定時混淆)
     6)加密算法 (高頻率定時更新)
     7)  瀏覽器多點存儲技術(惡意行爲標識)
(四)風控模型
     8)風險決策 (基本行爲校驗、參數校驗)
(五)行爲驗證
     9)驗證碼(無感、滑塊、點選等)
(六)反爬策略
(七)大數據風險庫

第三代驗證碼分析流程

(一)圖片還原

      分析的第一步,圖片被打亂,如何還原?
  圖片還原思路:
    (1)切割圖片,記錄位置,最後找出規律
    (2)經過前序請求返回值
    (3)其餘特殊方式,如圖片名稱、圖片lbs、固定數組等
          

(二)滑塊識別

       分析第二步,缺口識別。(是否下發原圖,視具體廠商而定)
   滑塊識別思路:
    (1)暴力遍歷(原背景圖與缺口背景圖相「與」,單片區域中存在大面積不一樣,返回座標)
    (2)邊緣檢測 (①提取單片邊緣並構造二維矩陣②對圖像進行處理凸顯拼圖在背景圖中邊緣③沿軌跡相與)
    (3)機器學習(給圖片打標,訓練模型)

                

(三)行爲模擬

        分析第三步,行爲模擬(滑塊、點選、刮圖等)。
    行爲模擬思路:
    (1)低級數據僞造-自定義算法:
        Ⅰ、 先快後慢
        Ⅱ、臨近卡槽動做模擬
    (2)高級數據僞造-自定義算法:
        Ⅰ、 收集人工滑動軌跡  
        Ⅱ、根據數據擬合模型,用模型構造軌跡
      

(四)JS混淆

    分析第四步,生物行爲模擬以後,座標如何發送?以什麼格式發送?要想知道答案就須要去了解其協議。分享淘寶的平展控制流混淆JS(3萬行),讓你們感覺下被JS支配的恐懼。https://g.alicdn.com/AWSC/uab/118.js?d=22
      

    (1)爲何混淆?
       JS代碼是透明且公開的,若是被輕易瞭解其中信息便可模擬請求,並與服務器通訊。要想解決這一問題,就必需要使用混淆和加密來解決代碼安全隱患。
    (2)保護機制與原理?
      Ⅰ、使JS代碼不可分析,防止動態跟蹤調試
      Ⅱ、按期高頻率混淆JS代碼
      Ⅲ、按期高頻率修改加密算法
    (3)如何進行JS混淆?
     Ⅰ、正則替換。成本低、效果差
     Ⅱ、語法樹混淆。成本高、更靈活、更安全
    (4)常見混淆哪幾種形式?
     Ⅰ、明文字符加密。對常量、變量以及函數名進行替換
     Ⅱ、控制流混淆。將代碼塊進行拆分,打亂函數執行流程,隨機插入垃圾代碼。

(五)瀏覽器多點存儲技術

    分析第五步,在調試過程當中,可能會出現異常情況(驗證碼驗證失敗、驗證碼類型變動、網站拒絕訪問等等)。不要懷疑,你的異常行爲已經致使該機器被定位。這時候想到的第一件事,應該是刪除cookie,可是刪除cookie以後,問題仍是沒獲得解決,這是什麼緣由呢?定位數據具有如下特徵。
    (1)多點存儲
        Cookie、SessionStorage、LocalStorage多點存儲同一數據
    (2)難刪除
        多點存儲,分別存儲於瀏覽器、用戶本地。難以一次刪除全部數據
    (3)防篡改
        防篡改機制,經過防篡改簽名,內容和簽名對應。服務端校驗數據是否被篡改
    (4)可重生
        多點存儲,任一存儲點存在數據,每次訪問數據從新植入全部存儲點

(六)設備指紋

    分析第六步,在分析JS的過程當中會發現,瀏覽器還收集了其餘的信息。那麼這些信息是什麼呢?其實收集的是設備信息,用戶生成設備指紋。
    (1)設備指紋是什麼?
        基於設備與運行環境等多維度收集信息,爲設備單獨生成的惟一識別碼
    (2)爲何收集設備指紋?
        須要對用戶上網的設備的軟硬件信息進行收集,爲用戶生成網絡惟一身份標識。若用戶存在惡意行爲,可以精準鑑別用戶身份,進行精確打擊。
    (3)指紋收集角度?
        Ⅰ、硬件信息
        Ⅱ、軟件信息
        Ⅲ、軟件環境信息
        Ⅳ、服務器下發信息
    (4)收集什麼信息?
        Ⅰ、設備與瀏覽器基本信息 (系統、內存、顯卡、瀏覽器版本、瀏覽器當前語言、屏幕顏色深度、屏幕分辨率、瀏覽器插件等)
        Ⅱ、服務器存儲本地的特性數據(前序請求數據、最新混淆HTML元素信息等)
        Ⅲ、瀏覽器或硬件設備在特性環境下的信息 (canvas圖片渲染)
        Ⅳ、瀏覽器我的設置與信息 (瀏覽器屏幕佔比、顯示設置、是否開啓控制檯等)

(七)無感驗證

    分析第七步,無感驗證。多場景多維度收集用戶信息,由風控系統斷定用戶等級以及是否啓用進一步的行爲校驗。
             

(八)風險決策

    分析第八步,第三代驗證碼風控系統經過風險決策。結合參數校驗、行爲校驗、網絡探測、風險庫、風險識別等步驟,最終對當前用戶作出等級斷定。
                

總結

    第三代驗證碼是無感知、立體式驗證碼。而咱們普通用戶所看到的滑動或點選等形式的行爲校驗,只不過是風控系統沒法準確判別時,進一步收集用戶信息的一種方式。第三代驗證碼看似簡單,實則暗藏玄機。

最後

    關於驗證碼,懂得很少,作得不多。歡迎批評與指教。

 原創文章,轉載請標明出處!

相關文章
相關標籤/搜索