黃曄華,朱 倩
(1.無錫工藝職業(yè)技術(shù)學(xué)院信息中心,江蘇 無錫 214200;2.江蘇大學(xué)計算機科學(xué)與通信工程學(xué)院,江蘇 鎮(zhèn)江 212001)
網(wǎng)站通過提供信息搜索、社交和網(wǎng)絡(luò)游戲等豐富的網(wǎng)頁服務(wù)來吸引用戶。然而攻擊者可以偽裝成普通用戶,利用網(wǎng)絡(luò)機器人對這些網(wǎng)站發(fā)起攻擊,消耗寶貴的資源,如內(nèi)存和帶寬。文獻[1]中指出51%的網(wǎng)站流量是“非人為”的,主要是來自各種各樣的自動黑客工具和網(wǎng)絡(luò)機器人。
XRumer、Magic Submitter 和SENuke 等網(wǎng)絡(luò)機器人已經(jīng)被開發(fā)出來,用于在黑帽搜索引擎優(yōu)化(Search Engine Optimization,SEO)技術(shù)中創(chuàng)建反向鏈接,在網(wǎng)絡(luò)服務(wù)器上創(chuàng)建內(nèi)容,通過識別特殊HTML 元素的含義和功能來批量注冊免費服務(wù)。其中,XRumer[2]作為最強大和最受歡迎外鏈工具之一,可以被用來自動注冊虛假論壇帳號,創(chuàng)建瀏覽歷史,發(fā)送垃圾郵件,提升搜索引擎排名等[3-4]。XRumer 還能夠規(guī)避論壇管理員常用的垃圾郵件預(yù)防機制(例如:驗證碼機制)。
現(xiàn)有的解決辦法主要有兩種類型,一是基于機器學(xué)習(xí)技術(shù),通過檢測機器行為特征來識別網(wǎng)絡(luò)機器人[5]。Shin et.al.[4]研究了論壇垃圾郵件的特點,并開發(fā)了輕量級的特性來檢測垃圾郵件。Brewer etal.[6] 使用鏈接混淆來檢測和防御網(wǎng)絡(luò)機器人。Gundy[7]等人通過比較博客文章中所使用的語言模型、評論和相關(guān)的頁面來檢測評論垃圾信息。二是驗證碼技術(shù)。然而,安全性并不是設(shè)計驗證碼的唯一關(guān)注點,所有的驗證碼系統(tǒng)都是人類互動形式,需要用戶的參與。目前的驗證碼系統(tǒng)可以分為基于文本的驗證碼[8-9]和基于圖像的驗證碼[10-11]。基于文本的驗證碼系統(tǒng)要求用戶識別字母或數(shù)字,復(fù)雜的驗證碼會帶來較差的用戶體驗。由于智能網(wǎng)絡(luò)機器人可以擊敗基于文本的驗證碼系統(tǒng),于是設(shè)計了基于圖像的驗證碼,驗證碼的魯棒性取決于挑戰(zhàn)人工智能的難度,難度越高,抵御網(wǎng)絡(luò)機器人的復(fù)雜性越大,對合法用戶識別帶來的困難也相應(yīng)增加,可用性越低,用戶體驗性更差。
為了在不影響用戶體驗的前提下有效防御網(wǎng)絡(luò)機器人,借鑒移動目標防御(Moving Target Defense,MTD)的思想,設(shè)計了一種非干擾的動態(tài)防御方法(Non-Intrusive Dynamic Defense System,NIDDS)。MTD 作為美國近年來提出的網(wǎng)絡(luò)空間“改變游戲規(guī)則”的革命性技術(shù)之一,受到了美國白宮的高度重視。它完全不同于以往的網(wǎng)絡(luò)安全研究思路,它并不追求建立一種完美無瑕的系統(tǒng)來對抗攻擊,而是構(gòu)建多樣的、不斷變化的評價和部署機制及策略[12]。這種不斷變化的機制和策略可以增加攻擊者執(zhí)行探測和攻擊的不確定性和復(fù)雜性,有效限制脆弱性暴露及被攻擊的機會,提高系統(tǒng)的魯棒性[13]。具體到網(wǎng)絡(luò)應(yīng)用來說,網(wǎng)絡(luò)機器人需要通過識別HTML 元素來獲取相應(yīng)參數(shù)的語義,達到偽造正常用戶請求的目的。NIDDS 主要針對這些能夠通過模擬真實用戶行為(填寫HTML 表單并點擊提交按鈕)向遠程服務(wù)器自動提交大量請求的網(wǎng)絡(luò)機器人,通過隨機化HTML 元素來阻止網(wǎng)絡(luò)機器人對其識別,從而達到防御目的。這一點與驗證碼技術(shù)不同,它對用戶是完全透明的,不需要合法用戶通過人為操作來驗證自己。
網(wǎng)絡(luò)機器人是一種針對特定網(wǎng)站瀏覽行為的自動化程序。對很多網(wǎng)站來說,它們已經(jīng)成為一個巨大的威脅,造成很多安全問題,比如:網(wǎng)絡(luò)釣魚和垃圾郵件,消耗服務(wù)器資源,降低用戶體驗。以下來介紹NIDDS 所針對的網(wǎng)絡(luò)機器人及其主要威脅。
當(dāng)前,網(wǎng)絡(luò)機器人主要分為固定式機器人和自學(xué)式機器人兩大類。固定式機器人是用固定的腳本語言寫好的,發(fā)送一些簡單和固定的HTTP 請求,一旦目標網(wǎng)絡(luò)應(yīng)用改變其內(nèi)容時,這類機器人一般就會失效。社交網(wǎng)絡(luò)上的給用戶反復(fù)發(fā)送垃圾郵件的跨站點腳本蠕蟲就屬于這類機器人。自學(xué)式機器人比固定式更高級、更智能、更復(fù)雜。它可以通過分析目標網(wǎng)絡(luò)應(yīng)用的變化來自我進化,還可以通過模仿用戶瀏覽行為來發(fā)送數(shù)據(jù)提交請求(包含用戶信息,比如用戶身份驗證請求包含用戶名和密碼)。XRumer 就是一種典型的自學(xué)式機器人,它可以收集HTML 表單旁邊的用戶名,數(shù)據(jù)類型和標簽文本,然后填充這些輸入表格,向服務(wù)器提交相應(yīng)的HTTP 請求。本文所防御的主要是以上兩種網(wǎng)絡(luò)機器人,尤其是第2 種。
網(wǎng)絡(luò)機器人主要有以下幾種攻擊方式:1)大量注冊/登錄帳戶[14];2)濫發(fā)評論。利用網(wǎng)絡(luò)機器人來發(fā)布定制信息(例如:在論壇、博客等在線社交網(wǎng)絡(luò)上的評論欄里發(fā)布惡意鏈接;3)發(fā)送垃圾郵件[4]。利用郵件服務(wù)器向受害者發(fā)送垃圾郵件,并利用網(wǎng)絡(luò)機器人自動提交網(wǎng)站表單的電子郵件內(nèi)容;4)在線投票作弊。投票機器人是一種特殊的網(wǎng)絡(luò)機器人,它可以篡改在線投票結(jié)果[15];5)基于網(wǎng)絡(luò)的游戲自動化。網(wǎng)絡(luò)游戲機器人是為了在游戲中自動化某些重復(fù)性的任務(wù)而開發(fā)的,違反了在線游戲公平競爭的政策。
如2.1 節(jié)所述,網(wǎng)絡(luò)機器人在發(fā)起攻擊之前需要預(yù)先識別HTML 表單元素的唯一id/name 參數(shù)值,以實現(xiàn)自動訪問遠程服務(wù)器。由于name/id 參數(shù)在服務(wù)器端邏輯層中使用,因此,這些參數(shù)通常為常量,網(wǎng)絡(luò)機器人便可以利用這些常量值自動生成大量請求。NIDDS 就是通過隨機化HTML 元素的name/id 值實現(xiàn)將其隱藏的目的,以此來防御網(wǎng)絡(luò)機器人。
通過修改網(wǎng)絡(luò)應(yīng)用的源代碼,可以在服務(wù)器端部署NIDDS。此外,NIDDS 還可以作為服務(wù)器和客戶端之間的第三方中介,以避免增加服務(wù)器端邏輯層的復(fù)雜性。NIDDS 作為第三方中介還可以普遍應(yīng)用于不同的網(wǎng)絡(luò)應(yīng)用和客戶端技術(shù)(例如:不同的瀏覽器和插件)中。此外,NIDDS 不需要隨機化所有的網(wǎng)頁,只需要隨機化用戶可以提交數(shù)據(jù)里的一小部分HTML 表單頁。
NIDDS 的中介方案主要由3 部分組成,如圖1所示:元素標記模塊、隨機數(shù)發(fā)生模塊和去隨機化模塊。其工作流程如下:一旦遠程服務(wù)器回復(fù)客戶端與HTML 表單相關(guān)的網(wǎng)頁源代碼響應(yīng),如HTML、Javascript 和CSS,NIDDS 將攔截這些響應(yīng),并利用元素標記模塊在源代碼中標記這些HTML 元素供去隨機化模塊進行識別。這些元素可以是網(wǎng)頁中的HTML 元素或用于實現(xiàn)網(wǎng)絡(luò)服務(wù)功能的特定元素類型,比如在特定網(wǎng)頁上發(fā)布的內(nèi)容(評論、帖子、博客等),收集用戶的電子郵件地址等等。然后,隨機數(shù)發(fā)生模塊使用新的隨機值替換源代碼中標記元素的參數(shù)值,并將隨機的HTTP 表單頁傳遞給客戶端。一旦客戶端接收并提交隨機表單頁,去隨機化模塊將恢復(fù)這些被標記元素的原始參數(shù)值,并將其傳遞給服務(wù)器。以下詳細描述NIDDS 系統(tǒng)的設(shè)計。
圖1 NIDDS 系統(tǒng)框架示意圖
元素標記模塊是用來標記受NIDDS 保護和隨機化的元素。NIDDS 根據(jù)需要隨機化一個關(guān)鍵HTML 元素子集而忽略其他元素(例如:按鈕和鏈接等導(dǎo)航元素很難被攻擊者利用)。關(guān)鍵HTML 元素包括:1)允許用戶在網(wǎng)頁中發(fā)布內(nèi)容的元素;2)遠程服務(wù)器用來生成電子郵件標題的元素;3)服務(wù)器用來修改或更新其他服務(wù)器資源(如數(shù)據(jù)庫、文件和內(nèi)存狀態(tài))的元素;4)作為請求中參數(shù)一部分的元素。
在知道哪些元素需要隨機化之后,就可以對網(wǎng)頁源代碼中的那些元素進行標注,以供隨機數(shù)發(fā)生模塊識別。既可以通過給那些參數(shù)添加一個獨特并且特定的前綴,也可以指定新的參數(shù)值來實現(xiàn)標注功能。本文選擇第一個方法,即通過添加一個特殊的前綴字符串(名為“P-tag”)來標注元素的“name/id”參數(shù)值,本文使用_EaRmN_字符串(通常不會在網(wǎng)頁源代碼中使用)作為P-tag。例如:如果一個帶有“提交”id 值(例如:“< button type = button id =submit>”)的提交按鈕需要隨機化,元素標記模塊會將此元素標注為“< button type = button id =_EaRmN_submit>”。
隨機數(shù)發(fā)生模塊會將帶有P-tag 標記的元素隨機化,為了保證NIDDS 不需要保存原始值就能去隨機化,該模塊使用對稱加密機制。整個隨機化過程可以分為4 個主要步驟,如圖2 所示。
圖2 隨機化過程示意圖
1)生成主密鑰。系統(tǒng)每隔T(試驗中T 取值為30 min)時間周期性地生成一個主密鑰來加密帶標注的參數(shù)。生成主密鑰應(yīng)該既快速又高效,因為網(wǎng)絡(luò)服務(wù)器每天可能響應(yīng)數(shù)百萬個請求。因此,本文采用Xorshift 隨機數(shù)發(fā)生器[16],通過對種子數(shù)進行“xor”操作移位生成隨機數(shù)序列。種子數(shù)可以是一個隨機計數(shù)器,也可以是服務(wù)器的特定系統(tǒng)狀態(tài)值,例如系統(tǒng)時間和當(dāng)前進程數(shù)。會話中主密鑰的更改可能導(dǎo)致去隨機化的錯誤,一旦服務(wù)器和客戶機之間建立了會話,NIDDS 將加載當(dāng)前主密鑰并使用它來保護整個會話的網(wǎng)絡(luò)資源。這樣,即使在會話期間生成了新的主密鑰,當(dāng)前會話也不會被破壞。
2)生成客戶端會話密鑰。對于每個會話,在生成主密鑰之后,隨機數(shù)發(fā)生模塊將主密鑰和特定客戶端標識符(如IP 地址)通過哈希計算,生成為特定的客戶端會話密鑰。使用客戶端標識符可以保證網(wǎng)頁和java 腳本是由同一個客戶端會話密鑰隨機生成。
3)生成隨機參數(shù)值。在獲取客戶端會話密鑰后,就可以用該密鑰在P-tag 標記的參數(shù)值上使用任意加密密碼(例如AES)來計算隨機參數(shù)值。盡管服務(wù)器在傳輸HTML 頁面后可能會將一些java 腳本傳輸給客戶端,但是NIDDS 能將java 腳本和相應(yīng)的網(wǎng)頁請求之間的關(guān)系記錄下來,然后用同一個客戶端密鑰和主密鑰將java 腳本(去)隨機化。
4)添加P-tag。為了表示那些應(yīng)該去隨機化的元素,隨機數(shù)發(fā)生模塊再次為隨機參數(shù)值添加Ptag 標記。最后,NIDDS 將隨機的網(wǎng)絡(luò)資源傳給客戶端。
上述過程結(jié)束時,所有HTML 元素都被混淆了,網(wǎng)絡(luò)機器人無法識別正確的參數(shù),也就無法向服務(wù)器發(fā)送大量的、正確的HTTP 請求。
服務(wù)器一旦收到請求,將會根據(jù)所收到的隨機化網(wǎng)頁源代碼,用P-tag 前綴將這些“name/id”參數(shù)值去隨機化,變成原來的參數(shù)值,具體步驟如圖3所示。
圖3 去隨機化過程示意圖
1)找出P-tag 標記的參數(shù)值。當(dāng)去隨機化模塊接收到用戶的請求時,首先找出所有包含P-tag 前綴的HTML 元素的參數(shù)值。
2)去除參數(shù)值中的P-tag 標記。
3)計算客戶端會話密鑰。去隨機化模塊恢復(fù)出當(dāng)前主密鑰并使用客戶端標識符信息來計算客戶端會話密鑰。使用哈希函數(shù)計算客戶端會話密鑰的方法與在隨機數(shù)發(fā)生器中使用的方法類似。由于主密鑰和這些標識符信息在會話期間不會發(fā)生變化,因此,可以獲得與隨機化參數(shù)值相同的客戶端會話密鑰。
4)生成初始參數(shù)值。去隨機化模塊利用客戶端會話密鑰來解密隨機參數(shù)值。然后刪除P-tag 前綴,生成原始參數(shù)值,并將其發(fā)送回服務(wù)器。
如第2.1 節(jié)所述,NIDDS 作為服務(wù)器和客戶端之間的第三方中介的設(shè)計方案,可以避免增加網(wǎng)絡(luò)應(yīng)用的服務(wù)器端邏輯層的復(fù)雜性。文中采用代理的方式來實現(xiàn)上述系統(tǒng)的搭建。
對Privoxy[17]的源代碼進行修改,通過添加一個NIDDS 模塊來生成可以實現(xiàn)NIDDS 功能的代理。Privoxy 是一個具有高級過濾功能的開源和非緩存網(wǎng)絡(luò)代理,允許修改網(wǎng)頁和HTTP 頭信息。在Privoxy 中用C 語言實現(xiàn)perl 兼容的正則表達式,使用Pcre 模塊[18]來搜索和替換內(nèi)容。Pcre 模塊允許使用正則表達式對P-tag 標記的參數(shù)進行搜索,并使用隨機值替換它們。然后在Privoxy 的請求或者響應(yīng)處理模塊中連接NIDDS,緩沖并修改HTTP 表單頁,最終發(fā)送給客戶端。
在3 個流行的網(wǎng)絡(luò)平臺(phpBB,BuddyPress,WordPress)上對NIDDS 的安全性和開銷進行評估。phpBB 是最受歡迎的開源論壇平臺之一。WordPress已經(jīng)發(fā)展成為一個強大的網(wǎng)站設(shè)計和內(nèi)容管理系統(tǒng)平臺[19]。BuddyPress 是一個建立在WordPress 之上的,提供建立網(wǎng)站和社交網(wǎng)絡(luò)功能的開源平臺。
針對三大平臺上的3 種常見網(wǎng)絡(luò)機器人(如表1 所示)對NIDDS 的性能進行評估。XRumer 是使用最廣泛網(wǎng)絡(luò)機器人[2]。Magic Submitter 允許用戶在博客和社交網(wǎng)絡(luò)上自動提交大量信息。SENuke 是主要為SEO 而設(shè)計的商業(yè)網(wǎng)絡(luò)機器人。
表1 平臺上常見網(wǎng)絡(luò)機器人列表
NIDDS 在論壇和流行的開源系統(tǒng)上進行安全性評估。XRumer、Magic Submitter 和SENuke 可以在網(wǎng)站上自動創(chuàng)建文章、評論或填充Web 表單。使用NIDDS 來保護“門戶頁面”,如登錄頁面、帖子頁面、評論頁面和注冊頁面。然后,運行這3 個機器人,在裝有NIDDS 的網(wǎng)站上嘗試注冊、登錄、發(fā)帖或者發(fā)表評論。實驗結(jié)果顯示,NIDDS 可以在不同平臺上成功防御3 個機器人。
下面詳細介紹一個NIDDS 抵御XRumer 的實例。XRumer 試圖在phpBB3 平臺上自動創(chuàng)建新線程。當(dāng)不使用NIDDS 時,XRumer 可以成功地發(fā)布一個phpBB 帖子,如下頁圖4(a)所示。具體地說,XRumer 首先發(fā)出一個請求,并驗證該帖子是否創(chuàng)建成功。然后,當(dāng)啟用NIDDS 時,P-tag 被附加到線程創(chuàng)建表單元素中,XRumer 無法識別這些HTML元素,導(dǎo)致一個空的請求體,帖子創(chuàng)建失敗,如圖4(b)所示?!癠know”狀態(tài)表示XRumer 無法被識別該未知頁面。
圖4 XRumer 創(chuàng)建帖子成功、失敗圖
根據(jù)以下兩個指標來評估NIDDS 的性能開銷:頁面加載時間和頁面大小。在3 個網(wǎng)絡(luò)平臺(phpBB、Wordpress、Buddypress)上的5 種不同類型的網(wǎng)頁(發(fā)帖頁面(NT)、回復(fù)頁面(Post)、帳戶登錄頁面(Log)、評論頁面(Comt)和注冊頁面(Reg))來評估NIDDS。這些網(wǎng)絡(luò)平臺和網(wǎng)頁類型如表2 所示,其中“P-tag”表示在網(wǎng)頁中隨機化的HTML 元素的數(shù)量。
表2 網(wǎng)頁類型表
1)頁面加載時間。頁面加載時間(Page loading time,PLT)是指發(fā)送請求與瀏覽器完全加載一個網(wǎng)頁的時間間隔。本文使用Mozilla Firefox 的addon LORI[20]來計算加載和顯示網(wǎng)頁的時間,PLT 越高表示使用NIDDS 帶來的開銷越高。圖5 顯示了在3 個網(wǎng)絡(luò)平臺上不同網(wǎng)頁類型的PLT 值。T1 表示保護整個網(wǎng)頁所需要的PLT 值(s);T2 表示保護一個P-tag元素所需要的平均PLT 值(s)。
圖5 不同網(wǎng)頁類型的PLT 值表
從圖5 中可以看出,NIDDS 所帶來的PLT 增加量小于0.3 s,平均增加量為14.29%,最高增加百分比小于30 %,但是這僅在少量HTML 表單頁上產(chǎn)生,而不是用戶瀏覽的大多數(shù)常規(guī)網(wǎng)頁。此外,由于上述評估基于一個具有有限處理能力的虛擬機環(huán)境,在真正的網(wǎng)絡(luò)服務(wù)器上,使用代碼優(yōu)化后的NIDDS 性能會更好。而且,每個PLT 值都是由帶有空緩存的瀏覽器測得,所以在真實的帶有緩存存儲的通信場景下開銷會下降更多。
2) 頁面大小。依然使用Mozilla Firefox 的addon LORI[20]來測量網(wǎng)頁的大小。phpBB3 上未使用NIDDS(標記為Ori)和使用NIDDS(標記為NID)之后不同類型頁面的大小如表3 所示。所有網(wǎng)頁都有6 個P-tag 標記的元素。從表3 中可以看出,NIDDS 所帶來的網(wǎng)頁大小的開銷相對較小,平均增加量只有0.225 kB。原因在于這些開銷主要來自于P-tag 標記元素值的前綴。
表3 網(wǎng)頁大小表
從評估結(jié)果可以看出,NIDDS 可以較低的頁面加載時間和頁面大小開銷來有效防御現(xiàn)有的網(wǎng)路機器人。
本文提出了一種非侵入式的動態(tài)防御系統(tǒng)來針對網(wǎng)絡(luò)機器人,它不需要用戶參與識別被標記的元素,是一種隱式的防御方法來使網(wǎng)絡(luò)機器人的攻擊行為失效,而驗證碼方法則需要降低用戶體驗來應(yīng)對攻擊行為。當(dāng)然,如果服務(wù)器和客戶端之間通過SSL 加密通信,NIDDS 的中介方案將會失效。但這只是部署方法的局限性,在服務(wù)器端部署NIDDS,通過直接修改Web 應(yīng)用程序可以解決這一問題。從評估結(jié)果可以看出,NIDDS 可以在多個流行網(wǎng)絡(luò)平臺上擊敗大部分網(wǎng)絡(luò)機器人,并且?guī)淼木W(wǎng)頁加載時間和網(wǎng)頁大小開銷較低。