驗證碼作為安全服務中最貼近大眾使用者的一環,也是任何產品在使用者登入環節幾乎必備的一環,從最初的文字型驗證碼到知識型驗證碼到行為軌跡驗證碼,再到智慧無感驗證碼,驗證碼廠商花了十幾年的時間。而驗證碼每一次更新的背後則是驗證碼廠商們與黑灰產不停的博弈對抗的結果。
一般來說,驗證碼的工作流程如下:
1、客戶端請求驗證碼;
2、驗證碼服務端返回驗證碼資訊(如圖片、會話ID、提示資訊等);
3、客戶端渲染展示,使用者根據提示點選或滑動驗證碼;
4、客戶端收集使用者驗證資料併傳送請求到服務端進行驗證,服務端返回驗證結果。
前不久,頂象正式推出了智慧無感驗證。
智慧無感驗證顧名思義就是要讓可信使用者安全無障礙透過。如使用者首次申請驗證碼時,客戶端自動採集裝置資訊進行上報,服務端透過風控策略、人機識別模型、行為特徵模型等判斷出當前使用者風險資訊,無風險使用者則不需要驗證碼即可透過,疑似風險使用者則需要再次驗證方可透過。當然,在一些高風險業務場景,使用者也可以修改智慧無感驗證為強校驗模式,來滿足業務安全的需求。
其中,驗證碼的安全性主要由這兩個因素決定:
一是圖片本身,對機器來說識別圖片的內容有一定難度;
二是驗證過程中產生的行為資料,用於核驗驗證過程中是否是人類的行為。
今天我們就圍繞圖片本身來探討下其如何與黑灰產進行對抗的。
圖片防禦在反爬蟲的應用
我們以反爬蟲為例,看下圖片在驗證碼攻防對抗中的作用。
目前,旋轉驗證碼、亂序拼圖類驗證碼都是效果比較好的反爬蟲驗證碼型別,此類驗證碼需要一定聯想能力,而機器識別很難具備這種能力,且驗證過程類似遊戲,不僅提升了使用者體驗,並且實現了不錯的防禦效果。
百度旋轉驗證(左)、頂象旋轉驗證(中)、頂象亂序拼圖(右)
當然,這類驗證碼也並非一勞永逸,爬蟲團隊也有相應的破解手段:
比如在旋轉類驗證碼中爬蟲團隊一般的操作過程如下:
1、收集圖片素材;
2、程式模擬旋轉生成模型庫(如下圖);
3、使用相似度演算法檢索模型庫,獲取目標旋轉角度;
4、模擬使用者旋轉圖片至目標角度或直接合成請求資料包進行驗證;
5、驗證透過獲得憑證。
同理,拼圖類驗證碼也面臨相同的問題。爬蟲團隊破解流程如下:
1、收集圖片素材;
2、人工還原排序或暴力重試還原圖片,寫入模型庫;
3、檢索模型庫找到原圖,根據原圖還原正確的順序。
綜上,不難看出,無論是旋轉類驗證碼還是拼圖類驗證碼,收集圖片素材都是其必要條件,但要想實現防禦效果,僅靠圖片是不行的。
而這就不得不提到驗證碼防禦的兩個重要指標——解空間難度和動態素材。
解空間在驗證碼防禦中扮演什麼作用?
首先,我們來看下解空間的定義。
我們可以簡單的把解空間理解為一個機率問題,即使用者或者爬蟲在透過驗證碼時的難度。
如傳統文字驗證碼,如果是4位數字,解空間則為104。而旋轉驗證碼使用滑塊平移長度轉換為旋轉角度,滑驗證碼長度一般為300px,隨機的長度有300個px的可能,那麼解空間大約為300~400。
那麼,這是不是證明文字驗證碼比旋轉驗證碼的安全性更高呢?
不一定,因為解空間的難度是不固定的。
以語序點選驗證碼為例,在不考慮文字庫的情況下,解空間就變成了從五個字中找出既定順序的四個字的機率,即A(5,4)=5*4*3*2=120。也就是說爬蟲有1/120的機率透過驗證碼。
這樣看來,旋轉驗證碼似乎又比語序點選驗證碼更安全。
需要注意的是,解空間也會隨著破解方案不斷退化,當解空間退化為1時,也就意味著爬蟲每次都可以順利透過驗證碼。
那麼,如何解決這個問題呢?
從對抗出發,以變制變——動態素材在驗證碼防控中的應用
一成不變的防禦策略無法永遠有效,用來解釋解空間最合適不過,但要想保證解空間的難度則需要動態素材(素材的更新頻率)來配合。
動態素材分為3種應用場景:
1、人工更換
人工更換顧名思義就是需要人工更換圖片素材。
但人工更換素材存在一些問題:
- 素材有效週期短,需要頻繁更換;
- 圖片素材從網際網路獲取會存在版權問題;
- 即使不考慮版權問題,也需要人工對圖片進行篩選,以保證驗證碼的效果;
- 人工更換素材成本更高。
採用程式自動生成背景圖片是一個可行的思路,同時也解決了版權問題。
2、程式生成
解決方案之一是採用OpenGL進行繪圖,並生成圖片輸出到素材庫。OpenGL在依賴模型的情況下繪製圖片可以進行模型、數量、大小、旋轉、著色、紋理、光線的組合,並渲染成三維圖片,理論上可以生成近似於無窮多的圖片。在此基礎上,使用動態生成的、幾乎不會重複的圖片作為旋轉驗證碼的素材支撐,可以有效防禦打碼團隊收集圖片素材的破解方式,極大地提升驗證碼的防禦能力。
動態素材生成依託模型可以有多種形式,例如幾何模型、虛擬實物模型等:
根據驗證碼動態背景圖的需要,只需要選擇較為簡單的素材即可。驗證的素材庫最佳化後可以保證旋轉驗證、亂序拼圖所使用圖片素材都是動態更新且幾乎不會重複的,這樣就解決了網路爬蟲收集圖片素材破解驗證碼的問題。
3、邊緣處理
動態素材的另一個應用在於圖片的邊緣處理,這一點在滑動還原驗證碼中尤為重要。
動態還原驗證碼需要使用者還原一張被切割平移的圖片,和上文中的旋轉驗證和拼圖驗證一樣需要聯想能力。但不同的是,網路爬蟲沒有聯想能力也是可以攻破常規圖片的旋轉驗證。網路爬蟲透過不斷平移,並比對上下圖片的rgb值,直到上下圖片的RGB值在一個誤差範圍內,即可確定目標位置。
根據這個思路,我們需要上下兩張圖片的邊緣顏色相近,使得網路爬蟲無法根據上下兩張圖片的RGB值確定目標滑動距離,並且,這在動態素材的基礎上實現是非常簡單的。透過動態素材程式為所有物體覆蓋同樣的紋理,就可以達到理想的效果。
綜上所述,從對抗出發,以變制變是驗證碼的永恆主題,一成不變的驗證碼在激烈的攻防對抗中很難立於不敗之地。從驗證碼的不斷迭代過程中,我們亦可以證明這一點。雖然驗證過程沒變,但其中的驗證難度是隨著驗證碼的迭代不斷增強的。
正如頂象推出的第五代驗證碼,其無感背後不僅僅是技術的迭代,更是演算法的迭代,並且第五代驗證碼將驗證碼能力與頂象防禦雲深度融合,不僅讓防禦效果一目瞭然,更讓使用者體驗不斷提升。
畢竟,安全對抗是個永恆的戰場,安全防護更需要打組合拳,方能致黑灰產於“死地”。