原創文章,轉載請標明出處!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
