馬軍,王效武,朱永川,王海兮
1.深圳市網聯安瑞網絡科技有限公司,廣東 深圳 518000 2.中國電子科技集團公司第三十研究所,四川 成都 610041
近年來,互聯網信息呈現出指數級增長的趨勢,而數據對于商家則至關重要。通過海量互聯網數據分析,不僅能降低企業的運營成本,還能提前預估產品的需求,進而降低生產和庫存成本。然而,用戶對海量互聯網數據的采集,使得互聯網服務器承受巨大的壓力;尤其是大量網絡爬蟲機器人的存在,造成數據采集的頻次和速度超過人類的瀏覽速度,影響網絡服務器的正常運行[1]。因此,大量網站都采用了多種反爬蟲的機制,驗證碼識別則是眾多反爬機制中的一種[2]。
對于普通的驗證碼,部分人工智能的技術能自動識別驗證碼,突破驗證碼識別機制,并配合網絡爬蟲實現全自動化的信息采集。但人工智能技術不是無懈可擊,其自身也存在潛在的漏洞[3-5]。為了確保驗證碼圖片不被基于智能算法的機器人識別,利用人工智能技術的弱點,構造出基于圖像擾動技術的擾動樣本,這些樣本能有效降低機器人的識別準確度,使網絡機器人自動識別驗證碼的功能失效,從而提高系統安全性。
對抗樣本可作為機器學習或深度學習模型的輸入,最終導致模型得出錯誤的分類結果[6-7]。其設計的基本思想是攻擊者在原始圖片中添加較小的擾動,就能使模型結果產生截然不同的錯誤判斷,這些擾動被稱為對抗樣本。例如,在原版大熊貓圖片中加入肉眼難以發現的干擾,生成對抗樣本,最終導致神經網絡誤認為大熊貓圖片是長臂猿,其置信度在99.3%[6]。除此之外,Szegedy等[4]還發現,對抗樣本具有一定的跨模型和跨數據集泛化性;前者指大部分對抗樣本會被具有不同參數(模型層數、正則化、權重等)的網絡模型誤分類,后者指大部分對抗樣本會被在不同訓練集上被誤分類。
因此,本文擬通過向文本驗證碼添加較小的像素擾動進而生成對抗驗證碼,從而使得這些對抗驗證碼不容易被以深度神經網絡算法為核心的智能機器人正確識別,進而提高系統的安全性。
目前,驗證碼可分成3 種類型:第1 種是基于文本的驗證碼,通常由字母和數字組成,其經過復雜的圖像扭曲技術處理,不能被自動識別技術所識別,但是肉眼能正常識別;第2 種是基于圖像的驗證碼,通常要求用戶在一組候選圖片中選擇一張或多張具有特定語義的圖片;第3 種是基于語音的驗證碼,通常要求用戶完成語音識別任務,并常與文本驗證碼一起使用。
本文主要基于文本的驗證碼進行研究,原因如下:1)基于文本的驗證碼是最廣泛使用的一種驗證碼類型,許多主流網站都在使用,比如Google、Baidu、Yahoo;2)文本驗證碼由來已久且已被廣泛使用,相關的攻擊手段層出不窮,且攻擊技術也相對成熟,因此文本驗證碼系統的安全性常受到較大威脅;3)文本驗證碼作為最基礎的形式,其相關研究能較容易應用到其他類型的驗證碼中。
文本驗證碼的來源存在爭議,2 個研究團隊都聲稱發明了當今互聯網廣泛使用的驗證碼。以M.D.Lillibridge 為首的研究團隊人員聲稱1997 年在AltaVista 上使用驗證碼,防止機器人在其網絡搜索引擎中添加統一資源定位器(uniform resource locators,URLs)[8]。卡內基梅隆大學的一個研究團隊在2003 年發布的一篇論文也提出驗證碼這一概念,隨后被學術界和工業界廣泛使用,并成為追捧的研究熱點[9]。Chellapilla 等[9]研究了早期文本驗證碼的安全性,并且設計出了一種基于機器學習能破解驗證碼的方法。為了增強文本驗證碼的安全性,Yan 等[10]建議將驗證碼字符擠在一起,由此提出了一種名為字符粘連(crowding characters together,CCT)的驗證碼生成機制。除此之外,還有一些技術用于增強文本驗證碼的安全性,比如噪聲弧、扭曲、旋轉、重疊、兩層結構等。然而這些安全機制并不絕對安全,較容易被攻破[11-12]。文本驗證碼的攻防就像矛與盾的問題,針對文本驗證碼的攻擊層出不窮,因此關于提升文本驗證碼魯棒性的研究還在不斷深入。
驗證碼數據采集系統針對特定互聯網目標網站進行采集,采集數據經過預處理后入庫,用以訓練驗證碼。
本系統采用典型的瀏覽器/服務器模式(browser/server,B/S)架構來實現,不同的客戶端程序通過IE/Chrome 瀏覽器共同訪問Web 服務器的前端頁面,訪問Redis 數據庫、MongoDB 數據庫、Mysql 數據庫服務器進行數據存取。系統結構如圖1 所示。

圖1 系統結構(B/S)
系統設計說明如下:
1)每個客戶終端計算機都不需要額外安裝客戶程序,但是需要有瀏覽器支持。
2) Web 服務器訪問各個數據庫集群,數據庫對外部不可見。
3)數據采集服務器訪問各個目標網站,獲取數據并寫入Redis 和MongoDB 數據庫服務器,數據庫對外不可見。
4) MySQL 服務器用于存儲相對繁瑣仔細的業務代碼部分,數據庫對外不可見。MySQL 服務器在足夠硬件環境的支持下能夠適用,并且相對合理。
5)多用戶并發訪問和處理、數據鎖和事務協調由數據庫和后端共同來完成,不設計單獨的事務處理服務器。
應用程序的開發設計采用Java 進行實現,前端通過JavaScript 設計并實現,數據采集部分采用Python 實現,所有的邏輯實現、算法和腳本在服務器端編譯開發或解釋。系統規劃的結果如圖2 所示。

圖2 系統邏輯結構
系統運行控制將嚴格按照各模塊間函數調用關系來實現。在各事務中心模塊中,需對運行控制進行正確的判斷,選擇正確的運行控制路徑。在網絡傳輸方面,客戶機在發送數據后,將等待服務器的確認收到信號,收到后,再次等待服務器發送回答數據,然后對數據進行確認。服務器在接到數據后發送確認信號,在對數據處理、訪問數據庫后,將返回信息送回客戶機,并等待確認。運行控制方法的具體模塊包括:
1)登錄模塊:前端模塊接收到賬號密碼登錄請求,對賬號密碼進行加密,通過時間戳以及加鹽等方式進行加密,傳輸到后端,后端從redis 中獲取到相應的隨機字串,進行加密驗證,若相同,則進行允許登錄跳轉。
2)采集模塊:Java 后端守護進程模塊告知Python 后端守護進程模塊開始進行爬蟲,Python守護進程調用Scrapy 模塊根據要求進行爬蟲,并將數據寫入MongoDB 和Redis 數據庫。
3)用戶信息管理模塊:前端模塊接受到用戶信息的修改要求,并把修改后的信息發送給Java 后端,Java 后端修改Mysql 數據庫中的用戶信息。
4)關鍵詞管理:前端模塊展示關鍵詞庫變更過程,Java 后端管理模塊通過調用Mysql 數據庫模塊從而獲取數據傳送給前端。
5)信息添加:前端模塊傳輸添加信息的內容到Java 后端管理模塊,后端模塊通過json 拼接將數據寫入MongoDB 數據庫模塊。
6)信息刪除:前端模塊傳輸相應信息的關鍵密鑰到Java 后端管理模塊,控制MongoDB 數據庫模塊刪除相關信息。
7)信息修改:前端模塊傳輸修改后的信息到Java 后端管理模塊,控制MongoDB 數據庫模塊修改相關信息,并將更改后的信息通過后端返回給前端。
8)信息排序:前端模塊傳輸排序請求到Java 后端管理模塊,控制MongoDB 數據庫模塊修改相關信息,并將更改后的信息通過后端返回給前端。
9)采集開關:Java 后端守護進程模塊作為客戶端,Python 后端守護進程模塊作為服務端,通過多線程的方法創建多個客戶端實例,同時向多個Python 服務端發送請求。
對抗樣本源于計算機視覺領域,其主要的目的是產生圖像擾動。最初由Kurakin 等[6]提出,并就擾動的原理進行了詳細的闡述。
根據攻擊者所能獲取的信息,攻擊可分為白盒攻擊和黑盒攻擊。在白盒攻擊情境中,攻擊者能獲取目標神經網絡的所有信息,包括網絡的參數和架構、梯度以及數據集等;攻擊者利用這些先驗信息構造對抗樣本[3,6-7,13]。在黑盒攻擊的情境中,攻擊者無法獲取神經網絡模型的內部信息以及訓練集的分布,只能啟用替代模型,這個替代模型首先隨機生成樣本輸入到判別模型中,獲取對應的輸出,并觀察輸入和輸出的關系,試圖讓替代模型找到與判別模型幾乎一樣的決策邊界,并通過不斷地迭代合成對抗樣本,最終成功地讓深度神經網絡(deep neural networks,DNN)分類器錯分了84.24%的對抗樣本,讓Logistic 回歸分類器錯分了96.19%的對抗樣本[14]。
由于白盒攻擊獲得的先驗信息較多,這意味著攻擊者能獲取到明確的目標函數,生成模型能更加高效地制造出對抗樣本。而黑盒攻擊過程中,最初只能隨機生成樣本,輸入到判別模型中,此時的判別模型基本上是個黑匣子,攻擊者只能構造一個替代模型,通過觀察輸入和輸出的關系,試圖讓替代模型的決策邊界無限接近判別模型的決策邊界,由此合成出對抗樣本。因此,綜上所述,白盒攻擊的成功率自然會比黑盒攻擊高。
本文旨在實現針對文本驗證碼生成對抗樣本。由于白盒攻擊的成功率較高,因此選取了2 種經典的白盒攻擊算法作為基準測試組,包括快速梯度符號法(fast gradient sign method,FGSM)和基礎迭代法(basic iterative method,BIM),并將以上2 種經典方法與空間轉換(spatially transformed Adversarial,stAdv)算法進行對比。
Kurakin 等[6]提出了一種名為FGSM 的生成對抗樣本的方法,這種方法簡單易行,只需要攻擊一次就可達成無目標攻擊的效果。該方法能很自然地遷移到文本對抗驗證碼生成的任務中,公式為

式中:參數 ε為擾動的程度,LF,label(x)為用來訓練模型的損失函數。除此之外,式(1)隱含滿足以下條件:xadv與x之間的距離 ε應該設置比較小的數值,否則對圖像的擾動就很容易被識破。
Kurakin 等[6]提出了基于FSGM 提出多次迭代的FSGM 的改良方法(即BIM),這種方法的思想是將FGSM 算法以較小的步長運行多次,并且在每步之后對像素值的中間結果進行裁剪,以確保它們在原始圖像的 ε值域內。其核心公式為

式(2)與式(1)最大的區別在于,前者較后者增加了Clip 函數,該函數是像素值裁剪函數,確保擾動后的像素值在-1~1。
在實際部署時,我們對原有代碼做了如下修改,以適應文本驗證碼的圖片。x(h,w,c)函數確保擾動后的像素值x′(h,w,c)在[x(h,w,c)-ε,x(h,w,c)+ε],同時不能超過上界+1 或下界-1。其中,x(h,w,c)表示驗證碼圖片x在通道c位置(h,w)處的像素值,x′(h,w,c)表示在此處擾動后的像素值;步長 η通常設置為一個較小的值(η ≤ε),通過將最大迭代次數i設置為一個合理的值,使得擾動后的像素值能抵達擾動邊界x(h,w,c)-ε 和x(h,w,c)+ε之間。
基準測試中生成對抗文本驗證碼的算法都采用直接修改原始圖片像素值的方式,因此較容易受到圖片預處理技術的影響[7]。因此,本文試圖找到一種不易受到預處理技術影響的生成對抗樣本的算法。通過文獻[7]發現,spatially transformed的優化方法較適合我們的應用場景。因此我們基于spatially transformed 的優化方法(StAdv)進行改進,并稱其為改進型StAdv,從而能一定程度上緩解以上提及的預處理的影響問題。
基于傳統StAdv 優化方法做了如下2 點改進:1)引入了一個整數型變量T作為衡量干擾程度的變量,其取值在0~n-1,其值越小干擾程度越大。若T被設置為0,則驗證碼圖像經過空間變換后,將被分類器預測為最不可能的結果,圖像的前后變化差異也會較大;若T被設置為n-1,則不會對分類器造成任何干擾。2)為了優化生成算法的速度以適應本文的應用場景,我們并沒有使用原文的L-BFGS 優化器,而使用Adam 優化器最小化目標函數。改進型StAdv 生成算法的偽代碼如下。

代碼中,x為原始的文本驗證碼圖像;C為預先訓練的CNN 分類模型;Z為模型最后一層的輸出;ytrue為驗證碼圖像的真實標簽;i為最大迭代次數;τ為平衡系數,用以平衡Ladv和Lflow;k為驗證碼圖像被誤分類為其他類別的置信度;lr和T分別是學習率和干擾程度。
為比較不同圖像加擾算法的效果,使用LeNet、ResNet、DenseNet、Wide ResNet 等4 種典型的卷積神經網絡模型作為入侵學習模型,構造用戶身份驗證圖像[15]。此外,使用FGSM、BIM、DeepFool、JSMA 等4 種圖像擾動算法作為本文所提改進StAdv算法的對比算法,對上述圖像擾動算法的反入侵能力進行比較。仿真實驗采用常用目標網站的驗證碼圖像數據集(詳見圖3),隨機選擇100 000 張圖像作為訓練集,20 000 張圖像作為測試驗證集,實驗完成基于該數據集的圖像識別任務。

圖3 驗證碼圖像集
如圖4 所示,在無圖像干擾時,非法入侵者通過使用LeNet、ResNet、DenseNet、Wide ResNet 等典型模型構造驗證圖像時,系統認證的通過率分別可達到87.3%、90.2%、91.1%和90.1%。

圖4 不同圖像加擾算法對應的干擾效果
作為本文所提改進StAdv 算法的對比算法,實驗中考慮使用FGSM、BIM、DeepFool、JSMA等圖像擾動算法。對比結果顯示,FGSM 算法可以將入侵模型所偽造圖像的認證通過率降低至30%~40%;BIM、DeepFool、JSMA 等算法在防御入侵模型時不太穩定,構造圖像的認證通過率在20%~70%浮動;本文所提StAdv 算法可以將入侵模型構造圖像的認證通過率下降至20%以下。因此,基于StAdv 圖像擾動算法的入侵防御模型,其干擾效果和健壯性明顯優于其他4 種擾動算法。
本文研究基于文本驗證碼圖片的對抗擾動方法,以提升反爬模型的健壯性和可用性。為比較不同圖像加擾算法的效果,使用LeNet、ResNet、DenseNet、Wide ResNet 等4 種典型的卷積神經網絡模型作為入侵學習模型,構造用戶身份驗證圖像。此外,使用FGSM、BIM、DeepFool、JSMA 等4 種圖像擾動算法作為所提改進StAdv 算法的對比算法,對上述圖像擾動算法的反入侵能力進行比較。結果表明,基于StAdv 圖像擾動算法的入侵防御模型,其干擾效果和健壯性明顯優于其他4 種擾動算法。