自推出以來,谷歌的 reCaptcha 驗證系統(tǒng)就被頻繁破解,因此谷歌不得不一次又一次地迭代升級?,F(xiàn)在,reCaptcha 已經(jīng)升級到了 v3,由原來的用戶交互直接升級成了給用戶打分。但再強的系統(tǒng)也會有漏洞,來自加拿大和法國的研究者另辟蹊徑,用強化學(xué)習(xí)「破解」了這個最新的驗證系統(tǒng)。
谷歌的 reCAPTCHA 驗證系統(tǒng)
對于谷歌瀏覽器的用戶來說,上面這幅畫面想必并不陌生。這是谷歌開發(fā)的驗證碼系統(tǒng) reCaptcha,旨在確認訪問者是人還是程序,并防止惡意程序的入侵。
reCAPTCHA 項目是由卡內(nèi)基梅隆大學(xué)創(chuàng)建的系統(tǒng),于 2009 年 9 月被谷歌收購。reCAPTCHA v1 將從書本上掃描下來、無法被 OCR 準(zhǔn)確識別的文字顯示在 CAPTCHA 問題中,從而判斷訪問者到底是程序還是人類。該版本被 Bursztein 等人破解,他們使用基于機器學(xué)習(xí)的系統(tǒng)對文本進行分割和識別,準(zhǔn)確率達 98%。
為了反破解,谷歌引入了基于音頻和圖像的 reCAPTCHA v2。該系統(tǒng)使用了一些高級的分析工具來判斷一個用戶到底是人還是機器人。
他們使用了多種元素,包括 cookie、解題的速度、鼠標(biāo)的移動以及解題的成功率。但盡管如此,還是有研究人員宣稱自己破解了 ReCAPTCHA,其中比較有名的就是美國馬里蘭大學(xué)四位研究人員開發(fā)的 unCapture。
用 unCaptcha 攻破 reCAPTCHA
unCaptcha 項目最早創(chuàng)建于 2017 年 4 月,并在當(dāng)時實現(xiàn)了 85% 的 ReCaptcha 對抗率。后來,谷歌發(fā)布了新的 ReCaptcha,實現(xiàn)了更好的瀏覽器自動檢測,而且開始使用短語語音進行驗證。這些改進最開始成功地防御了第一版 unCaptcha 的攻擊,但這一改進版很快又被第二版 unCaptcha 破解了。
由于 ReCaptcha 添加了語音形式的驗證碼識別,破解 ReCaptcha 變得比以前更加容易。破解者表示,「因為我們只需要調(diào)用一個免費的語音識別 API,對所有驗證碼的識別準(zhǔn)確率就能達到 90% 左右。」今年一月份,破解者還開源了 ReCaptcha 的破解代碼。
用強化學(xué)習(xí)「攻破」reCAPTCHA v3
當(dāng)然,谷歌也沒有閑著,一直在迭代自己的驗證系統(tǒng)。2018 年 10 月,谷歌正式發(fā)布 reCAPTCHA v3。谷歌這次放出的大招是:移除所有用戶界面。
前兩個版本的 reCAPTCHA 有可利用的文本、圖像或音頻,可以將其用作訓(xùn)練神經(jīng)網(wǎng)絡(luò)的輸入。但 reCAPTCHA v3 移除了所有用戶界面,沒有拆開亂碼文本或街道標(biāo)志,甚至也沒有勾選「我不是機器人」的方框。
它會分析一系列信號,使用機器學(xué)習(xí)技術(shù)返回一個 0 到 1 之間的風(fēng)險評估分數(shù)(這個分數(shù)表征了用戶的可信任度,越接近 1 越有可能是人類)。與前兩個版本相比,這種打分完全是在后臺進行的,根本沒有人類交互,因此破解難度更大。
破解從哪兒入手?
這么高難度的項目當(dāng)然會引得各路「黑客」躍躍欲試。近日,來自法國和加拿大的研究人員聲稱自己破解了谷歌的 reCAPTCHA v3,并根據(jù)自己的研究成果發(fā)表了一篇名為《Hacking Google reCAPTCHA v3 using Reinforcement Learning》(使用強化學(xué)習(xí)破解谷歌的 reCAPTCHA v3)的論文。與之前研究的不同之處在于,他們使用的是強化學(xué)習(xí)方法,測試準(zhǔn)確率達到了 97.4%。
實際上,這項強化學(xué)習(xí)技術(shù)并非針對 reCAPTCHA v3 中不可見的分數(shù),而是 reCAPTCHA v2 中首次引入的鼠標(biāo)移動分析。也就是說,這項研究并非真正攻破 reCAPTCHA v3,而是用機器學(xué)習(xí)欺騙二級系統(tǒng)(即舊版的「我不是機器人」打勾操作),以繞過 reCAPTCHA v3。
等等,「我不是機器人」這種界面不是已經(jīng)在 v3 中被移除了嗎?理論上是該這么做,但在實際操作中并沒有。
論文一作 Akrout 表示,在 reCAPTCHA v3 中,網(wǎng)站設(shè)置其分數(shù)閾值以判定用戶是否為機器人。如果訪客在某個設(shè)定點低于閾值(比如當(dāng)他們輸入評論或登錄細節(jié)時),網(wǎng)站可以選擇立即譴責(zé)該訪客是機器人,不過真這么做的話,如果訪客是真人就會很尷尬了。
想象一下在網(wǎng)購的時候,你正在查看的頁面突然消失,隨之而來的是滿屏的「你是機器人」譴責(zé)。就問你糟不糟心?從用戶體驗的角度來看這種做法實在太……emmm…
因此,Akrout 表示,很多網(wǎng)站會選擇更友好地緩和這個過程。如果網(wǎng)站訪客低于分數(shù)閾值,網(wǎng)站會顯示舊版的「我不是機器人」復(fù)選框頁面,這個復(fù)選框用來發(fā)現(xiàn)機器人的分析行為,包括鼠標(biāo)移動等。
這樣可以讓用戶更好地理解為什么他們的網(wǎng)購或其它正在干的事會被打斷,而且會給他們一個證明自己人類身份的機會。
「我認識的大部分程序員會添加復(fù)選框,因為他們不知道如何選擇恰當(dāng)?shù)臅r機來詢問 v3 系統(tǒng)的判斷?!?/p>
正是這個復(fù)選框的存在讓 Akrout 和他的同事們發(fā)現(xiàn)了繞過 reCAPTCHA v3 的可能。
怎么破解?
Akrout 及其同事利用強化學(xué)習(xí)來欺騙部分 reCAPTCHA v3 系統(tǒng),其中軟件智能體試圖找到最佳的可能途徑,并通過正確方向上每一步的獎勵受到鼓勵。
他們的系統(tǒng)在頁面中放置一個正方形網(wǎng)格,鼠標(biāo)沿對角線穿過網(wǎng)格到達「我不是機器人」按鈕。如果成功,則給予正面強化;如果失敗,則給予負面強化。該系統(tǒng)學(xué)會了控制正確的移動方法以欺騙 reCAPTCHA 系統(tǒng)。該論文中稱其準(zhǔn)確率達到了 97.4%。在論文發(fā)表后,谷歌未對該論文置評。
這樣破解真的可以嗎?
這種做法并沒有讓伯恩茅斯大學(xué)的 Nan Jiang 信服,他沒有參與這次研究?!咐碚撋蟻碚f,任何僅依賴于檢查用戶行為的驗證碼方法都可以用定制的機器學(xué)習(xí)算法破解,比如那種可以輕易地模擬用戶在頁面上交互的算法。
但是,谷歌的 ReCAPTCHA 結(jié)合了其它技術(shù)來預(yù)測用戶的可信程度,然后嘗試把該用戶納入白名單。一旦你被納入白名單,無論你做什么都可以通過測試?!顾硎尽?/p>
破解 reCAPTCHA 版本 2 的伊利諾伊大學(xué)計算機科學(xué)助理教授 Jason Polakis 指出,reCAPTCHA 版本 3 的工作要比論文中描述的更多。
他說道:「本文試圖展示的攻擊僅僅是從頁面中的隨機起點移至復(fù)選框。這是用戶在實踐中與實際頁面產(chǎn)生交互的非常具體和有限的子集(如填寫表格、與多頁面元素交互以及跨越更復(fù)雜模式等)?!?/p>
他還補充:「如果谷歌也已經(jīng)改善瀏覽器/設(shè)備指紋等更先進技術(shù)的利用(我們在進行廣泛深入分析和破解 ReCaptcha 版本 2 時已經(jīng)發(fā)現(xiàn)了這些跡象),實際上展開攻擊將會變得更為復(fù)雜?!?/p>
Akrout 同意基于鼠標(biāo)移動的攻擊存在局限,但這些也揭露了一點關(guān)于 reCAPTCHA 版本 3 工作的信息。他表示,「如果你通過一個常規(guī) IP 連接谷歌賬戶,則系統(tǒng)大部分時間都會認為你是人類?!谷绻阃ㄟ^ TOR 或者代理服務(wù)器連接谷歌賬戶,則系統(tǒng)通常會認為你是機器人。
如果測試的網(wǎng)站已經(jīng)具有這種默認設(shè)置,了解這些則更容易迫使 reCAPTCHA 系統(tǒng)顯示「我不是機器人」按鈕。
Akrout 表示攻擊需要對谷歌表現(xiàn)出中立性—所以沒有登錄賬戶,也沒有通過代理服務(wù)器或使用 Selenium 等瀏覽器控制工具進入。他說道:「這就好像是我在要求該系統(tǒng)直接進入第二個頁面,其目的僅是為了獲得大量移動檢測?!?/p>
Akrout 認為谷歌可以通過這項技術(shù)(特別是根據(jù)用戶點擊按鈕花費的時間),使用更簡單的方法來保護 reCAPTCHA。Akrout 表示,「該智能體點擊復(fù)選框花費的時間比人類更多。在沒有任何交互的情況下,任何用戶通常都不會影響 reCaptcha 在后臺的工作?!?/p>
肯特大學(xué)的網(wǎng)絡(luò)安全教授 Shujun Li 先前已經(jīng)設(shè)計了自己用于破解 reCAPTCHA 早期版本的系統(tǒng),但并沒有參與這個項目。他表示這項工作從技術(shù)層面看似可行,但也認為谷歌可輕易更新其系統(tǒng)以避免此類攻擊。
他說道:「尚未清楚的是,該攻擊方法被重新訓(xùn)練至何種程度才能趕上谷歌系統(tǒng)??赡芨臃€(wěn)健的一種方法是收集真正人類用戶對 reCAPTCHA 的響應(yīng),并構(gòu)建機器學(xué)習(xí)模型來模擬此類響應(yīng)。這些模型很容易被重復(fù)訓(xùn)練,而且能夠保證有用,除非 reCAPTCHA 對常規(guī)人類用戶不可用。」
Li 表示破解這些系統(tǒng)的確還有很多其他方法。雖然這種特定攻擊受到限制,但 reCAPTCHA 將繼續(xù)淪為人工智能系統(tǒng)犧牲品的事實并不意外。
Li 表示:「破解驗證碼并不是什么新聞了。最近的 AI 進展已經(jīng)大大提高了自動攻擊的成功率。原則上,驗證碼技術(shù)已證明無法抵制先進的攻擊?!贡疚牡难芯炕蛟S無法破解第 3 版 reCAPTCHA,但這是一個開始。
論文:Hacking Google reCAPTCHA v3 using Reinforcement Learning
論文鏈接:https://arxiv.org/pdf/1903.01003.pdf
摘要:本文提出了一種可以欺騙谷歌 reCAPTCHA v3 的強化學(xué)習(xí)方法。我們將 reCAPTCHA v3 視為一個網(wǎng)格世界,智能體在這個世界里學(xué)習(xí)如何移動鼠標(biāo)并點擊 reCAPTCHA 按鈕獲得高分。
我們研究了在改變網(wǎng)格中格子大小時智能體的性能,結(jié)果顯示,當(dāng)智能體向目標(biāo)大步前進時,其性能會大大降低。最后,我們用了一個分治策略來應(yīng)對任意網(wǎng)格分辨率,以攻破 reCAPTCHA 系統(tǒng)。我們提出的方法在 100 × 100 的網(wǎng)格中實現(xiàn)了 97.4% 的勝率,在 1000 × 1000 的屏幕分辨率上實現(xiàn)了 96.7% 的勝率。
實驗結(jié)果
研究人員在一個特定尺寸的網(wǎng)格上訓(xùn)練了一個強化學(xué)習(xí)智能體。他們的方法是將訓(xùn)練得到的策略用于在 reCAPTCHA 環(huán)境中選擇最佳行動。實驗結(jié)果是在訓(xùn)練 1000 輪之后得到的。
如果智能體得到 0.9 分,他們就認為該智能體成功攻破了 reCAPTCHA。策略網(wǎng)絡(luò)是一個全新的雙層全連接層網(wǎng)絡(luò)。參數(shù)是以 10^(-3) 的學(xué)習(xí)率訓(xùn)練得到的,批大小為 2000。
下圖顯示了智能體在 100 × 100 的網(wǎng)格上得到的結(jié)果。該方法以 97.4% 的勝率成功攻破了 reCAPTCHA 測試。
接下來考慮在更大的網(wǎng)格上測試該方法。如果增加網(wǎng)格的大小,狀態(tài)空間的維數(shù)就會指數(shù)級增加,在這種情況下訓(xùn)練強化算法并不可行。這是本研究解決的另一個難題:如果不為每個分辨率的網(wǎng)格重新訓(xùn)練智能體,該如何攻破 reCAPTCHA 系統(tǒng)?
為此,研究人員提出了一種分治方法,可以攻破任意網(wǎng)格大小的 reCAPTCHA 系統(tǒng)而無需重新訓(xùn)練強化學(xué)習(xí)智能體。中心思想是將網(wǎng)格進一步切分為子網(wǎng)格,然后將訓(xùn)練得到的智能體應(yīng)用到這些子網(wǎng)格上,以為更大的屏幕尋找最優(yōu)策略(見圖 2)。圖 3 顯示了該方法的有效性,在不同大小的網(wǎng)格上勝率超過了 90%。
圖 2:分治方法圖示:智能體在紫色的對角網(wǎng)格世界上運行。紅色網(wǎng)格世界還沒有被探索。
圖 3:強化學(xué)習(xí)智能體在不同網(wǎng)格分辨率上的勝率。