谷歌最新驗證系統又雙叒被「破解」了,這次是強化學習

機器之心發表於2019-03-27
自推出以來,谷歌的 reCaptcha 驗證系統就被頻繁破解,因此谷歌不得不一次又一次地迭代升級。現在,reCaptcha 已經升級到了 v3,由原來的使用者互動直接升級成了給使用者打分。但再強的系統也會有漏洞,來自加拿大和法國的研究者另闢蹊徑,用強化學習「破解」了這個最新的驗證系統。

谷歌的 reCAPTCHA 驗證系統

谷歌最新驗證系統又雙叒被「破解」了,這次是強化學習

對於谷歌瀏覽器的使用者來說,上面這幅畫面想必並不陌生。這是谷歌開發的驗證碼系統 reCaptcha,旨在確認訪問者是人還是程式,並防止惡意程式的入侵。

reCAPTCHA 專案是由卡內基梅隆大學建立的系統,於 2009 年 9 月被谷歌收購。reCAPTCHA v1 將從書本上掃描下來、無法被 OCR 準確識別的文字顯示在 CAPTCHA 問題中,從而判斷訪問者到底是程式還是人類。該版本被 Bursztein 等人破解,他們使用基於機器學習的系統對文字進行分割和識別,準確率達 98%。

為了反破解,谷歌引入了基於音訊和影象的 reCAPTCHA v2。該系統使用了一些高階的分析工具來判斷一個使用者到底是人還是機器人。

他們使用了多種元素,包括 cookie、解題的速度、滑鼠的移動以及解題的成功率。但儘管如此,還是有研究人員宣稱自己破解了 ReCAPTCHA,其中比較有名的就是美國馬里蘭大學四位研究人員開發的 unCapture。

用 unCaptcha 攻破 reCAPTCHA

unCaptcha 專案最早建立於 2017 年 4 月,並在當時實現了 85% 的 ReCaptcha 對抗率。後來,谷歌釋出了新的 ReCaptcha,實現了更好的瀏覽器自動檢測,而且開始使用短語語音進行驗證。這些改進最開始成功地防禦了第一版 unCaptcha 的攻擊,但這一改進版很快又被第二版 unCaptcha 破解了。

谷歌最新驗證系統又雙叒被「破解」了,這次是強化學習

由於 ReCaptcha 新增了語音形式的驗證碼識別,破解 ReCaptcha 變得比以前更加容易。破解者表示,「因為我們只需要呼叫一個免費的語音識別 API,對所有驗證碼的識別準確率就能達到 90% 左右。」今年一月份,破解者還開源了 ReCaptcha 的破解程式碼。

用強化學習「攻破」reCAPTCHA v3

當然,谷歌也沒有閒著,一直在迭代自己的驗證系統。2018 年 10 月,谷歌正式釋出 reCAPTCHA v3。谷歌這次放出的大招是:移除所有使用者介面。

前兩個版本的 reCAPTCHA 有可利用的文字、影象或音訊,可以將其用作訓練神經網路的輸入。但 reCAPTCHA v3 移除了所有使用者介面,沒有拆開亂碼文字或街道標誌,甚至也沒有勾選「我不是機器人」的方框。

它會分析一系列訊號,使用機器學習技術返回一個 0 到 1 之間的風險評估分數(這個分數表徵了使用者的可信任度,越接近 1 越有可能是人類)。與前兩個版本相比,這種打分完全是在後臺進行的,根本沒有人類互動,因此破解難度更大。

破解從哪兒入手?

這麼高難度的專案當然會引得各路「黑客」躍躍欲試。近日,來自法國和加拿大的研究人員聲稱自己破解了谷歌的 reCAPTCHA v3,並根據自己的研究成果發表了一篇名為《Hacking Google reCAPTCHA v3 using Reinforcement Learning》(使用強化學習破解谷歌的 reCAPTCHA v3)的論文。與之前研究的不同之處在於,他們使用的是強化學習方法,測試準確率達到了 97.4%。

實際上,這項強化學習技術並非針對 reCAPTCHA v3 中不可見的分數,而是 reCAPTCHA v2 中首次引入的滑鼠移動分析。也就是說,這項研究並非真正攻破 reCAPTCHA v3,而是用機器學習欺騙二級系統(即舊版的「我不是機器人」打勾操作),以繞過 reCAPTCHA v3。

等等,「我不是機器人」這種介面不是已經在 v3 中被移除了嗎?理論上是該這麼做,但在實際操作中並沒有。

論文一作 Akrout 表示,在 reCAPTCHA v3 中,網站設定其分數閾值以判定使用者是否為機器人。如果訪客在某個設定點低於閾值(比如當他們輸入評論或登入細節時),網站可以選擇立即譴責該訪客是機器人,不過真這麼做的話,如果訪客是真人就會很尷尬了。

想象一下在網購的時候,你正在檢視的頁面突然消失,隨之而來的是滿屏的「你是機器人」譴責。就問你糟不糟心?從使用者體驗的角度來看這種做法實在太……emmm…

因此,Akrout 表示,很多網站會選擇更友好地緩和這個過程。如果網站訪客低於分數閾值,網站會顯示舊版的「我不是機器人」核取方塊頁面,這個核取方塊用來發現機器人的分析行為,包括滑鼠移動等。

這樣可以讓使用者更好地理解為什麼他們的網購或其它正在乾的事會被打斷,而且會給他們一個證明自己人類身份的機會。

「我認識的大部分程式設計師會新增核取方塊,因為他們不知道如何選擇恰當的時機來詢問 v3 系統的判斷。」

正是這個核取方塊的存在讓 Akrout 和他的同事們發現了繞過 reCAPTCHA v3 的可能。

怎麼破解?

Akrout 及其同事利用強化學習來欺騙部分 reCAPTCHA v3 系統,其中軟體智慧體試圖找到最佳的可能途徑,並通過正確方向上每一步的獎勵受到鼓勵。

他們的系統在頁面中放置一個正方形網格,滑鼠沿對角線穿過網格到達「我不是機器人」按鈕。如果成功,則給予正面強化;如果失敗,則給予負面強化。該系統學會了控制正確的移動方法以欺騙 reCAPTCHA 系統。該論文中稱其準確率達到了 97.4%。在論文發表後,谷歌未對該論文置評。

谷歌最新驗證系統又雙叒被「破解」了,這次是強化學習

這樣破解真的可以嗎?

這種做法並沒有讓伯恩茅斯大學的 Nan Jiang 信服,他沒有參與這次研究。「理論上來說,任何僅依賴於檢查使用者行為的驗證碼方法都可以用定製的機器學習演算法破解,比如那種可以輕易地模擬使用者在頁面上互動的演算法。

但是,谷歌的 ReCAPTCHA 結合了其它技術來預測使用者的可信程度,然後嘗試把該使用者納入白名單。一旦你被納入白名單,無論你做什麼都可以通過測試。」他表示。

破解 reCAPTCHA 版本 2 的伊利諾伊大學電腦科學助理教授 Jason Polakis 指出,reCAPTCHA 版本 3 的工作要比論文中描述的更多。

他說道:「本文試圖展示的攻擊僅僅是從頁面中的隨機起點移至核取方塊。這是使用者在實踐中與實際頁面產生互動的非常具體和有限的子集(如填寫表格、與多頁面元素互動以及跨越更復雜模式等)。」

他還補充:「如果谷歌也已經改善瀏覽器/裝置指紋等更先進技術的利用(我們在進行廣泛深入分析和破解 ReCaptcha 版本 2 時已經發現了這些跡象),實際上展開攻擊將會變得更為複雜。」

Akrout 同意基於滑鼠移動的攻擊存在侷限,但這些也揭露了一點關於 reCAPTCHA 版本 3 工作的資訊。他表示,「如果你通過一個常規 IP 連線谷歌賬戶,則系統大部分時間都會認為你是人類。」如果你通過 TOR 或者代理伺服器連線谷歌賬戶,則系統通常會認為你是機器人。

如果測試的網站已經具有這種預設設定,瞭解這些則更容易迫使 reCAPTCHA 系統顯示「我不是機器人」按鈕。

Akrout 表示攻擊需要對谷歌表現出中立性—所以沒有登入賬戶,也沒有通過代理伺服器或使用 Selenium 等瀏覽器控制工具進入。他說道:「這就好像是我在要求該系統直接進入第二個頁面,其目的僅是為了獲得大量移動檢測。」

Akrout 認為谷歌可以通過這項技術(特別是根據使用者點選按鈕花費的時間),使用更簡單的方法來保護 reCAPTCHA。Akrout 表示,「該智慧體點選核取方塊花費的時間比人類更多。在沒有任何互動的情況下,任何使用者通常都不會影響 reCaptcha 在後臺的工作。」

肯特大學的網路安全教授 Shujun Li 先前已經設計了自己用於破解 reCAPTCHA 早期版本的系統,但並沒有參與這個專案。他表示這項工作從技術層面看似可行,但也認為谷歌可輕易更新其系統以避免此類攻擊。

他說道:「尚未清楚的是,該攻擊方法被重新訓練至何種程度才能趕上谷歌系統。可能更加穩健的一種方法是收集真正人類使用者對 reCAPTCHA 的響應,並構建機器學習模型來模擬此類響應。這些模型很容易被重複訓練,而且能夠保證有用,除非 reCAPTCHA 對常規人類使用者不可用。」

Li 表示破解這些系統的確還有很多其他方法。雖然這種特定攻擊受到限制,但 reCAPTCHA 將繼續淪為人工智慧系統犧牲品的事實並不意外。

Li 表示:「破解驗證碼並不是什麼新聞了。最近的 AI 進展已經大大提高了自動攻擊的成功率。原則上,驗證碼技術已證明無法抵制先進的攻擊。」本文的研究或許無法破解第 3 版 reCAPTCHA,但這是一個開始。

論文:Hacking Google reCAPTCHA v3 using Reinforcement Learning

谷歌最新驗證系統又雙叒被「破解」了,這次是強化學習

論文連結:https://arxiv.org/pdf/1903.01003.pdf

摘要:本文提出了一種可以欺騙谷歌 reCAPTCHA v3 的強化學習方法。我們將 reCAPTCHA v3 視為一個網格世界,智慧體在這個世界裡學習如何移動滑鼠並點選 reCAPTCHA 按鈕獲得高分。

我們研究了在改變網格中格子大小時智慧體的效能,結果顯示,當智慧體向目標大步前進時,其效能會大大降低。最後,我們用了一個分治策略來應對任意網格解析度,以攻破 reCAPTCHA 系統。我們提出的方法在 100 × 100 的網格中實現了 97.4% 的勝率,在 1000 × 1000 的螢幕解析度上實現了 96.7% 的勝率。

實驗結果

研究人員在一個特定尺寸的網格上訓練了一個強化學習智慧體。他們的方法是將訓練得到的策略用於在 reCAPTCHA 環境中選擇最佳行動。實驗結果是在訓練 1000 輪之後得到的。

如果智慧體得到 0.9 分,他們就認為該智慧體成功攻破了 reCAPTCHA。策略網路是一個全新的雙層全連線層網路。引數是以 10^(-3) 的學習率訓練得到的,批大小為 2000。

下圖顯示了智慧體在 100 × 100 的網格上得到的結果。該方法以 97.4% 的勝率成功攻破了 reCAPTCHA 測試。

接下來考慮在更大的網格上測試該方法。如果增加網格的大小,狀態空間的維數就會指數級增加,在這種情況下訓練強化演算法並不可行。這是本研究解決的另一個難題:如果不為每個解析度的網格重新訓練智慧體,該如何攻破 reCAPTCHA 系統?

為此,研究人員提出了一種分治方法,可以攻破任意網格大小的 reCAPTCHA 系統而無需重新訓練強化學習智慧體。中心思想是將網格進一步切分為子網格,然後將訓練得到的智慧體應用到這些子網格上,以為更大的螢幕尋找最優策略(見圖 2)。圖 3 顯示了該方法的有效性,在不同大小的網格上勝率超過了 90%。

谷歌最新驗證系統又雙叒被「破解」了,這次是強化學習

圖 2:分治方法圖示:智慧體在紫色的對角網格世界上執行。紅色網格世界還沒有被探索。

谷歌最新驗證系統又雙叒被「破解」了,這次是強化學習

圖 3:強化學習智慧體在不同網格解析度上的勝率。

參考連結:https://www.wired.co.uk/article/google-captcha-recaptcha

相關文章