<b>驗證碼對抗之路及現有驗證機制介紹</b>
<b>目明@阿裡聚安全</b>
yahoo郵箱在九幾年的時候,業務深受各種郵箱機器人的困擾,存在着大量的垃圾郵件,于是他們找到了當時仍在讀大學的路易斯·馮·安(luis von ahn),并設計了經典的圖形驗證碼,即通過簡單的扭曲圖形文字進行機器的識别。

通過這個簡單的圖形,他們很快的控制住了垃圾郵件的數量,并将大量的機器人據之門外。
但是即使驗證碼解決了垃圾郵件的問題,我們仍要提出一個問句:
阿裡有句簡單的話:不忘初心,方得始終。
驗證碼不是一個功能性的需求,他并不能帶來業務的提升,也不能帶來任何價值。
驗證碼隻是為了解決機器問題才誕生的。在設計和驗證碼演化的過程中,必須同時考慮安全性和體驗。
讓我們老考慮驗證碼的最簡化模型,關鍵點在于:生成的問題能夠由人來解答,并且機器難于解答。
于是傳統的圖形驗證碼的重點就放在了如何生成讓機器難于解答的圖檔上來。
從上圖看來,相應的各種方法已經有了相當成熟的一些對抗辦法,更不用說現在已經廣泛泛濫的打碼平台了。
結合我們安全性和體驗兩方面來講,傳統驗證碼在兩方面來說都已經不能滿足要求了。
現在随着攻防的更新和對抗的不斷加強,驗證碼的面前針對安全性和體驗這兩個關鍵點分出了兩條路:
<b>從體驗上來:基于人類使用者的行為</b>
<b>從安全性上來:基于人類認知問題的答案</b>
基于人類認知問題的答案,我們已經碰見過很多種了,這裡簡單貼兩個:
當然也存在這類:
簡要分析,優點明顯:機器沒有這個認知能力(廢話,好多我都做不出來)
1.題庫維護的難題。如果題庫被周遊完成,那麼其安全性無法保證。
12306為什麼後面把問題變成了圖檔呢? 因為有攻擊者将每次的答案與出現的可選問題進行了多次重複周遊,當這個周遊到達一定次數後,會發現某個答案與某張圖常常會關聯出現(因為問題必定會有正确答案),通過這個出現機率即可得到答案。于是,12306才把文字變成了現在扭曲的圖檔。 并且還有研究人發現,12306的圖檔可能大量來自某百科,通過逆向使用該公司的圖像識别服務,可以得到該圖檔的部分标簽。
2.體驗差
過年的時候,正常人平均都要答3、4次才能答對答案。而且部分圖檔因為分辨率不高、再加上縮小圖檔以後,會更加的看不清了。
基于人類使用者行為這條路是基于以下基礎的:
<b>機器人的環境有别于正常使用者</b>
<b>機器人的動作或頻率等有别于正常使用者</b>
<b>機器人的在相應關鍵業務點的行為邏輯有别于正常使用者</b>
但是這個基礎在技術對抗上有個更關鍵的點,在于如何建構一個安全的信道,将這些資料回傳回來。如果這個信道的采集機制、加密機制和傳輸機制被攻擊者所探知,那麼以上采集的資訊将沒有秘密可言。(換句話說,攻擊者會僞裝成正常使用者的行為發送資料)
該類方法的優點:
收回了對使用者的強打擾将基于知識和問題的對抗轉變為前端加解密采集等機制的對抗如果攻擊者無法攻破這一層堡壘,即使打碼平台存在也無法攻擊成功
缺點:
加解密機制需要做到足夠強,并且需要擁有攻擊感覺能力、線上的自我變更能力和自動化測試等能力
我們選擇了同時走兩條
基于上述思考,阿裡滑動驗證綜合考慮兩種類型的方法,結合并推出了滑動驗證的體系:
通過基于使用者行為的第一道防禦将對正常使用者的打擾降低,使得正常使用者可以以極小的代駕通過滑動驗證,而同時對不确定的使用者實施知識型問題的驗證,在攔截機器人的同時,保障業務的正常平穩運作。
再看看google先階段的norecaptcha:
可以看到,google的模式與阿裡的模式有些類似,所不同的是google所使用的驗證碼模式是點選,而阿裡是滑動。
簡單分析下google,對于第一步的點選驗證,google更多的是通過其基于虛拟機的強混淆器對整個資料采集過程進行了加密,并綜合了環境資訊(如裝置指紋、cookie、點選頻率等資訊)來進行判斷,而第二步的知識驗證也包括以下幾種(部分在之前的圖中沒有出現):
1.扭曲的圖形
2.圖形的分類
3.進階圖形分類(會不斷的出圖,點完一張又一張)
之前已經提到過,無論是google的norecaptcha還是我們的滑動驗證,其核心都在于其本身的風控引擎和相應的規則,對于攻擊者來說也有兩條路:
正面強行突破,破解前端的密文、然後模拟正常使用者行為,達到直接通過的目的
退而求其次,通過觸發二次驗證過程,然後通過ocr或者打碼等其他方法通過
4月8日,blackhat上公布了一篇來自哥倫比亞大學的論文,大緻上講了他們是如何突破google的norecaptcha驗證碼的。
簡單說明下他們的破解過程:
<b>1.</b>攻擊者通過大量的模拟器及代理ip來僞造browsing history及browser environment來fuzz測試google的風險分析系統。測試過程中發現包括useragent、canvas fingerprint、螢幕分辨率、滑鼠行為動作衆多因素均為風險判斷的因子,風險判斷決策傳回結果随機且有嚴格的次數限制;
比如,攻擊者發現,修改user agent、使用firefox而聲稱chrome等會導緻norecaptcha出現回退,即出現普通的驗證碼。
<b>2.</b>在得出了這些參數與最終結果的關系後,也沒有正面突破,走到了第二個思路,經過fuzz嘗試後,發現google的容錯性較高,即即使圖中隻有2個正确答案,你如果點選了3個圖,包含兩個正确答案,也算正确。并且,根據基于次數的統計發現,norecaptcha中出現答案的比例較多的為2個答案(74%),是以,攻擊者很聰明的選擇了每次選擇3個圖像的方法,因為這樣做可以使得每次成功的機率提高(畢竟多選了一個可能正确的答案,即使選錯了也可以對)。
<b>3.</b>同時,在大量的fuzz面前,攻擊者們發現有些圖檔會時不時的出現。出現次數最多的一個圖檔出現了12次。他們開始意識到這些圖檔并不是實時生成的,而是從一個已經生成好的池子中生成的。重複的利用,也就意味着大規模的可能性。
盡管google生成的圖每張的hash值不同,但是利用感覺hash算法(perceptual hash algorithm),攻擊者可以對每次稍微變換了hash的圖進行相似度比較,如果相似度較高,即可完成對已打标完成的圖的重定位。
重定位完成後,既可以對已經完成的答案進行重複利用,而這種重複利用在大規模的攻擊中是非常重要的,無限彈藥在遊戲中的作用你懂的。
<b>4.</b>完成了以上動作以後通過用圖檔搜尋相應關鍵字(利用google自己的功能搞google)、其他圖檔搜尋引擎(alchemy、gris、clarifai、neuraltalk)等對圖進行搜尋,并利用這些資料得到了大量的圖檔相關的子類标資訊,越來越多的标簽資訊意味着對圖檔有了更多更高次元的刻畫。通過在各個網站收集相關标簽,即可得到一個對該圖檔較為全面的描述。
<b>5.</b>利用機器學習的算法,其實就是利用word2vec,将兩個圖的對應關鍵字放在一個向量空間中,然後利用餘弦相似性原理,找出相似度最高的幾張圖檔。(與我們傳統的找兩個相似的文獻或同作者的思路類似)。
<b>6.</b>将之前的五步進行組裝。
看見未曾見過的圖,感覺hash計算,如果是已有答案,直接給答案。
看見見過的圖,直接給答案。
如果是未曾見過的,也不在資料庫内,開啟圖形引擎獲得标簽資訊,再扔進模型裡面得到答案,将答案存入庫裡。
循環以上步驟比如:同時出現紅酒、酒杯、酒這幾個标簽,那麼對所有獲得的标簽進行相似性比對後,會取出帶有酒這個标簽的前幾個圖
阿裡在實際的對抗中,我們也發現有攻擊者無法攻破第一層防禦,即他們無法正常通過,但是卻知道如何觸發第二級驗證,并嘗試通過破解第二級驗證的問題通過。
如果想要真的做好在安全和體驗間的良好平衡,需要同時在兩個方面都下功夫,才能保證整體的安全水位。
前端可信端體系的建立、強大認知問題系統的建立需要持續不斷思考和提高。我們的每一次的變更,接入的客戶都将實時享受到更高安全等級的防護。
阿裡聚安全由阿裡巴巴移動安全部出品,面向企業和開發者提供企業安全解決方案,全面覆寫移動安全、資料風控、内容安全、實人認證等次元,并在業界率先提出“以業務為中心的安全”,賦能生态,與行業共享阿裡巴巴集團多年沉澱的專業安全能力。