1. 程式人生 > >第三代驗證碼研究

第三代驗證碼研究

 原創文章,轉載請標明出處!https://www.cnblogs.com/boycelee/p/11363611.html

  隨著機器學習與影象識別技術的發展,第一代、第二代驗證碼已經失去了安全驗證的作用。為了增加識別難度,網站暴力升級圖片驗證碼,嚴重破壞了使用者體驗。第三代驗證碼的誕生解決了這一痛點,第三代驗證碼已經不再是狹義上的驗證碼,它通過多場景多維度進行資料收集,為網站提供立體式安全保障。  

宣告

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

驗證碼劃代

(一)第一代驗證碼 定義:主要利用簡單知識構建驗證碼。如中文、英文、數字等。       (二)第二代驗證碼 定義:以第一代驗證碼為基礎,以創新互動方式的思想構建驗證碼。如看題選字、看圖選物等。         (三)第三代驗證碼 定義:多場景多維度收集資料資訊,為網站提供立體式安全防護。      

第一第二代驗證碼退出歷史舞臺的原因

以下是我總結的兩點原因 (1)隨著機器學習與影象是被技術的發展,第一代、第二代驗證碼已經失去了安全驗證的作用; (2)為了增加識別難度,網站暴力升級圖片驗證碼,嚴重破壞使用者體驗。 舉個例子
       以上型別驗證碼我們通過肉眼識別準確率大約為30%,但我們拿到圖片打碼平臺(魔鏡)上用訓練後發現準確率能超過90%。機器能做得比人好,其實這已經失去的驗證碼的意義。

第三代驗證碼“很簡單”

    最近常常會有人問我,研究的第三代驗證碼是不是就是滑塊驗證碼?不就是把滑塊滑動到指定位置嗎?這有什麼難的? 這讓我想起,在還沒加入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圖片渲染)         Ⅳ、瀏覽器個人設定與資訊 (瀏覽器螢幕佔比、顯示設定、是否開啟控制檯等)

(七)無感驗證

    分析第七步,無感驗證。多場景多維度收集使用者資訊,由風控系統判定使用者等級以及是否啟用進一步的行為校驗。                 

(八)風險決策

    分析第八步,第三代驗證碼風控系統通過風險決策。結合引數校驗、行為校驗、網路探測、風險庫、風險識別等步驟,最終對當前使用者做出等級判定。                      總結     第三代驗證碼是無感知、立體式驗證碼。而我們普通使用者所看到的滑動或點選等形式的行為校驗,只不過是風控系統無法準確判別時,進一步收集使用者資訊的一種方式。第三代驗證碼看似簡單,實則暗藏玄機。      最後     關於驗證碼,懂得不多,做得很少。歡迎批評與指教。      原創文章,轉載請標明出處!https://www.cnblogs.com/boycelee/p/11363611.html