Google怎麼知道我不是機器人?機器人又要怎麼破解?



Original Source Here

Google怎麼知道我不是機器人?機器人又要怎麼破解?

來源:https://developers.google.com/recaptcha

大家應該都看過這個框框,只要點選了就可以證明自己不是機器人。但大家應該也有類似的疑問:為什麼我點了就不是機器人?難道機器人就不會勾選嗎?今天我就被這個框框煩了好幾次,突然決定來認真查一下這是甚麼東西。

寫著寫著發現其實可以牽扯到蠻多深度學習的相關題目,因此會在各個章節把相關的議題都稍微列一下給大家玩玩看。

CAPTCHA

這個框框其實是Google開發的一種CAPTCHA系統。CAPTCHA的全名是Completely Automated Public Turing test to tell Computers and Humans Apart,就是用完全自動化的公開圖靈測試來區分人類跟電腦。

最早的CAPTCHA大家都有看過,就是「驗證碼」。驗證碼的英文字會設計得歪七扭八是為了讓機器人難以識別,而人類仍然能勉強看出來答案,用以區分人類與機器。之後更有reCAPTCHA方法,使用真實書籍上的文字來增加機器人的區分難度。

CAPTCHA

OCR破解CAPTCHA

OCR(Optical character recognition),光學文字識別。近年來受到深度學習的蓬勃發展已經十分強大,OCR破解CAPTCHA是理所當然的事情。深度學習大神LeCun Yann在深度學習領域中突破的MNIST資料集就是數字識別,同時MNIST也是深度學習第一課會拿來當範例的標準題目,破解CAPTCHA一點都不意外。

OCR最通用的實作方法是Detection+Classification:

  1. 先用Detection方法檢測可能是文字/字詞的框(ex: EAST)
  2. CNN預測文字:透過CNN網路,單獨預測每個文字框的文字內容
  3. CRNN預測字詞:透過CNN提取深度特徵,加上LSTM等RNN網路預測字詞。(ex: SEE)

至於使用CNN還是CRNN,要看你的應用場景而定。以純數字驗證碼來說,前後數字的上下文關係可能不是很明顯,所以可以分開預測文字。但若是在預測英文單詞或文章的時候,使用CRNN類型方法可以有更好的效果。舉個例子,example這個詞在CNN方法可能會預測成examp1e,但是CRNN方法就有很高的機會可以避免這個問題。

提供一個支援80+種語言的OCR Code,給有興趣的人玩玩看:

JaidedAI/EasyOCR: Ready-to-use OCR with 80+ supported languages and all popular writing scripts including Latin, Chinese, Arabic, Devanagari, Cyrillic and etc. (github.com)

CAPTCHA會有語音按鈕,給視覺不方便的用戶使用

語音識別破解CAPTCHA

通常我們看到的CAPTCHA都是文字,但其實為了眼睛不方便的人士,通常旁邊會有一個語音撥放鍵,可以讓你聽到驗證碼。利用這個路徑,就可以繞過影像改用語音的方式攻破CAPTCHA。

語音識別(Speech Recognition)也是深度學習裡面非常熱門的一個題目,也有非常多的資源。語音識別在深度學習主要是使用LSTM模型提取特徵,整體主要分为2種思路:

  1. Connectionist Temporal Classification(CTC)把一段聲音切成固定長度的N等分(N與聲音長度成正比),LSTM提取特徵後分別用FC+Softmax預測出N個文字結果,後續再用動態規劃等方法組合成一個合理的字詞。
  2. Sequence-To-Sequence(Seq2Seq):分為Listener與Speller。Listener用LSTM提取完整的特徵後,Speller再用另一組LSTM直接輸出一組語句。

兩個方法最大的差別是CTC是單獨預測每個文字的,而Seq2Seq一開始的目的就是輸出一組句子。這兩個方法的差異與CNN/CRNN相似,一個是單獨預測,一個是整體預測。

值得一提的是,自從注意力機制(Attention Mechanism)被提出之後,引入注意力的多層預訓練模型BERT將效果達到了另一個新檔次。但BERT又是另一個大題目了,這篇文章有各種附圖寫得很淺顯易懂,很適合觀看:

The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning) — Jay Alammar — Visualizing machine learning one concept at a time. (jalammar.github.io)

這裡順便再列一個Open Source給大家玩玩:

Uberi/speech_recognition: Speech recognition module for Python, supporting several engines and APIs, online and offline. (github.com)

No CAPTCHA reCAPTCHA (reCAPTCHA v2)

這就是大家熟知的那個「我不是機器人」驗證框了。這個方法裡Google換了一個思考方式:不是透過提問,而是利用Advanced Risk Analysis(ARA, 進階風險分析)來實現圖靈測試。在你點下勾勾的那一瞬間,驗證框會傳送以下訊息給server:

  • 九天內的Cookies
  • 瀏覽器
  • 運行機器
  • 瀏覽器的繪圖效果
  • Click時間
  • 滑鼠路徑
  • 其他..….

後續只要分析這些特徵是否符合人類的使用行為,就可以區分人類跟機器。比方說:機器可能秒點按鈕,或是甚至不需等到繪圖出現就可以返回結果,甚至機器人的瀏覽紀錄行為與人類肯定是不一樣的。

如果經過驗證框之後server仍然無法確定你是否為人類,就會回到提問的方式來做double check。最常見的是Image CAPTCHA。

但其這種方式也是可以被攻破的。第一,Coockies完全可以人造,瀏覽器與機器環境完全可以模擬,甚至滑鼠路徑也可以預錄或是模擬。第二,Image CAPTCHA雖然比Text CAPTCHA難度稍高,但是對深度學習而言也是很成熟的主戰場。

附上一篇破解論文:I’m not a human: Breaking the Google reCAPTCHA

破解 Image CAPTCHA

圖片分類(Image Classification)因為有李飛飛老師建立的ImageNet公開資料集,各種CNN的骨幹模型都會在上面進行benchmark實驗。現在成熟的CNN模型已經有很多,包括:VGG, ResNet, Xception…,也有專門為手機端打造的輕量化模型,例如:MobileNet, ShuffleNet…。甚至GitHub也有很多整理的文章,可以讓你一覽所有熱門模型。例如這個:

weiaicunzai/awesome-image-classification: A curated list of deep learning image classification papers and codes (github.com)

PapersWithCode上面,ImageNet的論文與Code更是多到取之不盡用之不竭。

PapersWithCode上列出的ImageNet跑分趨勢圖,每個灰點代表一篇論文。綠色線表示當時的最佳效果(Start-of-the-arts)

reCAPTCHA v3

從2018年開始推出reCAPTCHA v3之後,驗證框已經不會出現了。在reCAPTCHA v3使用的也是ARA技術,但不同的是他在網站的每一頁都內嵌了ARA的Code,記錄你在這個網站每一頁的行為。

理論上這個方式就更難攻破了。因為驗證框已經不存在,機器已經沒有任務可以破解,甚至還要模擬真實用戶的真實行為。reCAPTCHA v3甚至還會製作風險分析報表給後台管理者,顯示幕前的網站中是否存在異常行為,以及有多少的可疑流量占比。

reCAPTCHA v3分析報告。來源:Analytics | reCAPTCHA | Google Developers

破解 reCAPTCHA v3

破解的方式很簡單:降級破解。因為ARA技術並不是100%準確,如果系統把一個正常人類視為機器人並強硬地把他block住,是個非常差的體驗。所以ARA技術如果判斷你為機器人,有很大的機會還是會讓你走一次驗證框的流程(reCAPTCHA v2)。通過了這個驗證之後,機器人就可以做任何事情了。

大家可以試試看,如果你用VPN+無痕模式打開Youtube的話,很容易就會出現reCAPTCHA v2的驗證框。這是因為無痕模式中無法取得你的cookies分析,而且VPN導致大量用戶共用少數幾個IP,很容易判斷你為異常流量而被reCAPTCHA v3阻擋,並回退到v2的ARA驗證流程。

附上一張利用強化學習破解的論文:Hacking Google reCAPTCHA v3 using Reinforcement Learning

小節

其實reCAPTCHA的ARA技術本身也是屬於機器學習題目,但是我沒有找到公開的論文,也許是因為這牽扯到資訊安全的風險問題所以Google沒有公開發表。但是終究道高一尺魔高一丈,系統就是要被破的,在ARA方面勢必也必須不斷地更新才行。

一般機器學習的題目要實作完成,會經歷6個設計步驟:

1. Problem definition
2. Data
3. Evaluation
4. Features
5. Model
6. Experimentation

CAPTCHA原本對我是一個比較陌生的題目,但在寫完這篇文章之後除了Features與Model的部分之外都有了大概的頭緒了。這篇文章也對破解方法及各自的深度學習題目做了一些入門介紹,希望對大家有幫助。

AI/ML

Trending AI/ML Article Identified & Digested via Granola by Ramsey Elbasheer; a Machine-Driven RSS Bot



via WordPress https://ramseyelbasheer.wordpress.com/2021/03/01/google%e6%80%8e%e9%ba%bc%e7%9f%a5%e9%81%93%e6%88%91%e4%b8%8d%e6%98%af%e6%a9%9f%e5%99%a8%e4%ba%ba%ef%bc%9f%e6%a9%9f%e5%99%a8%e4%ba%ba%e5%8f%88%e8%a6%81%e6%80%8e%e9%ba%bc%e7%a0%b4%e8%a7%a3%ef%bc%9f/

Popular posts from this blog

I’m Sorry! Evernote Has A New ‘Home’ Now

Jensen Huang: Racism is one flywheel we must stop

How to Install C++ Programs From Source Code Using Make in WSL2