最初的驗證碼在2023年投入使用,從那時起驗證碼整體上都大同小異。考慮到驗證碼主要是一種安全手段,這顯然會引發麻煩。畢竟,如果在長達17年的時間裡,一項安全技術始終得不到更新,這簡直是場災難,因為這意味著全世界的攻擊者已經花了整整17年,用新的攻擊技術來挫敗你老舊的防禦技術。
不妨看看,過去17年裡有什麼影響了驗證碼。
對驗證碼最重要的影響因素是已經成為主流的機器學習。神經網路等技術已經從電腦科學中的尖端研究技術發展成了青少年打發時間的週末遊戲。神經網路這類技術是程式設計師的不二選擇,它們遠比其他手段簡單太多。
原本需要成千上萬行**實現的功能如今僅需幾百行**就可實現。讀到這裡,那些沒用過神經網路的讀者大概會驚奇不已。我想告訴各位的是,神經網路可以把複雜的任務變得簡單易行。看看這個電腦通過學習分辨自行車**的例子。
我們的目標是讓電腦分辨**中的自行車等物,如果不用神經網路的話,就必須程式設計來描述自行車的特徵。
比如,程式設計師可以告訴程式尋找兩個內銀外黑的圓圈,圓圈內外有線相連。要做到這一點,程式可能會把影象分解成線、圓、橢圓等簡單的形狀。這種方法當然有效,卻只適合辨別自行車的側檢視。如果給定的上自行車並沒有側擺著呢?如果自行車被倒掛著或者只能看到正面呢?程式設計師將被迫為每個可能的視角編寫新規則,並要求程式乙個個地檢查這些規則。
這個方法的訓練成本極低(事實上由於程式按照預編規則執行,沒有什麼訓練成本),但是程式檢查每個影象時的執行成本極高,而且程式設計師會花費大量的時間編寫規則。因此,成立乙個專門寫演算法的公司並提供驗證碼服務很划不來,每個驗證碼的的實現和演算法成本高得讓人難以接受,在經濟欠發達國家甚至比人工校驗還昂貴。
神經網路理出影象中所有的點並衡量權重。然後編成畫素-權重表。當程式被要求分類乙個從未見過的影象時,它將遍歷數字1、2、3的權重表來對照每個畫素值,看哪一組權重匹配程度最高,據此,操作者可以知道程式對輸入的和已訓練的字元的匹配的可信度。
現在,讓我們回到自行車的例子,來看看具體怎樣使用神經網路。
如果輸入1000張自行車的來建立乙個類似程序,權重矩陣會根據這些制定完整的規則來定義自行車的樣子。
這些方法在光學字元識別領域非常有效。近年來,谷歌已經能夠(用不到100行python**)識別筆跡,有效性高達99.2%。以往通過軟體攻克驗證碼因為種種原因顯得不切實際,而如今這些問題都被解決了。我們已經能想象,類似神經網路的技術將被用於破解驗證碼。在一篇名為《一種對微軟驗證碼的低成本攻擊方式》裡,紐卡斯爾大學的研究人員的驗證碼識別率達到了95%-100%。
目前,我們雖然只聽到來自學術界的突破。不過,完全可以認為,黑客世界已經著手破解驗證碼。隨著時間的推移,這些攻擊將變得越來越便宜,並成為一種常態。
綜上所述,防護團隊有什麼可以做的?在這種背景下,防護團隊必須著手兩件事。
建設和使用需要更高計算成本攻克的驗證碼
關鍵在於「更高成本」。我這樣說的原因在於,如果防護團隊總是想當然地覺得驗證碼不會被破解,這就會引發17年沒更新驗證碼技術這樣的問題。
防護團隊應該避免只靠的應答式的驗證碼來對抗惡意嘗試
谷歌的recaptcha改善了這些問題。終端使用者在與谷歌的recaptcha互動時,看到的是乙個對話方塊,上面寫著「我不是乙個機械人。」當使用者關閉對話方塊時,驗證程式會檢查大量谷歌沒有一一指定的細節。
作為例子,我將列舉一些被考慮的細節:
使用者的滑鼠移動到到對話方塊的路徑使用者的瀏覽器的細節使用者花多少時間填寫表單ip的信譽
最後,也是最重要的一點,(據稱)recaptcha會觀察使用者在所有使用recaptcha的**上的狀態,並收集有關使用者整體行為的其他細節。
如果對話方塊之後,recaptcha判定使用者合法,會顯示並傳送乙個驗證標誌。而如果recaptcha發現使用者不合法,使用者就必須完成乙個完整的彩色影象的分類問題。
想對於傳統的驗證碼,新型驗證碼最大的優點在於,標誌識別的訓練要遠比字母識別的訓練難得多。谷歌使用專有資料集生成這些驗證碼。要打敗recaptcha這樣的驗證碼,攻擊者必須具有谷歌同一層次的大型資料集。這個簡單的事實使谷歌的recaptcha很棒。
現在,如果你的防護團隊想要實現自己的解決方案,而非使用recaptcha,你會做什麼呢?(宣告:這些只是我從研究中獲取的想法後,我不保證它們適合你。)讓我們回到這兩件你想實現的事情。
你想要攻克驗證碼的計算成本盡可能高
在不訪問專有資料集的前提下,也許最好的方法是使用三維驗證碼。原因在於,用計算機解決ocr(光學字元識別)不再困難或昂貴。當我們加入三維數學,攻克這種驗證碼的計算和儲存成本都會大幅增加。
三維驗證碼的計算成本昂貴的原因在於,它需要攻擊者解決影象呈現角度的猜測和校驗問題。此外,它需要三維數學,這讓計算成本很高。三維驗證碼是有可能被破解的,但是其中難度很大,可能需要乙個gpu才能有效解決問題。
強迫攻擊者租用gpu伺服器讓託管基礎設施攻擊的成本變得更高。而這類三維驗證碼可以通過隨機變化的更大的視覺干擾和深度變遷來變得更難攻克。
驗證碼該做卻沒做的另一件事,就是使用多種字型。大部分驗證碼只是字元和干擾混合成的。這允許攻擊者建立模糊的驗證碼逆向機械工程並建立乙個資料集,資料集提供給機器學習模型進行訓練。如果使用大量隨機字型,攻擊者就需要對每一種字型訓練他們的模型。這使得訓練和破解的成本成倍上公升。最後,字元的扭曲增加了隨機誤差,這會增加破解驗證碼的複雜性,攻擊者必須具有更大的樣本量來訓練乙個神經網路。
防護團隊應該避免只靠應答式的驗證碼來對抗惡意嘗試
除了驗證碼以外,你需要做的包括:檢查ip信譽、阻止**或tor節點、通過ip實施速度限制、監測通訊、看看通用瀏覽模式是什麼並審查ip是否經常違背這些模式、檢查標題欄並嘗試發現瀏覽器是否有異常。
如果這些的方法你只能記住一條,那麼牢記這句:不要只用通用的二維文字驗證碼來防止惡意嘗試。如果你只使用谷歌的recaptcha,這會很好但卻不夠完美。
你真正需要對是向recaptcha學習,找到乙個絕佳的驗證碼,並建立基礎設施來監控流量和通訊狀況。你不可能徹底打敗惡意嘗試,但是你可以讓攻擊者付出更多。
卷積神經網路文字輸入 使用卷積神經網路進行文字分類
cnn 是卷積神經網路,通常用於影象領域,並且在影象分類取得非常好的效果。2014 年 yoon kim 在 convolutional neural networks for sentence classification 中將 cnn 的思想應用到文字處理中,後續很多把 convnet 用在 n...
神經網路驗證集的作用 卷積神經網路的程式設計
每乙個epoch所有的樣本都訓練一次。最大的迴圈,迴圈訓練集所有樣本數量 訓練集每次選取batch大小的樣本數量進行訓練後更新權值。訓練集中選出batch大小樣本數量 每乙個迭代次數更新一次權值。訓練集 前向傳播求得損失函式 反向傳播利用損失函式更新神經網路引數的權值。驗證集和測試集只需要進行前向傳...
迴圈神經網路文字與時間序列感想
使用pip install quandl獲得google股價資料集,該資料集包含3424行12列。列使用其中5個屬性,訓練集選用前2850行,測試集選用後624行。假設視窗長度或者timestep為50,以長度為1滾動構建訓練集,則獲得的網路輸入向量為 2800,50,5 即滾動次數,時間步長,一行...