腳本化語言是在運行時被解譯(interpret)而不是被編譯(compile)的高級編程語言。例如,腳本語言可以被嵌入在超文本標記語言(“HTML”)內(nèi),并且當由客戶端和/或服務器解譯時,可以將功能添加到網(wǎng)頁。腳本化語言也可能包含在被解譯時可以危害客戶端和/或服務器的安全性和/或完整性的惡意代碼。
技術實現(xiàn)要素:
根據(jù)一些可能的實施方式,一種設備可以接收數(shù)據(jù),標識與數(shù)據(jù)相關聯(lián)的上下文,并且在數(shù)據(jù)內(nèi)標識與上下文相關聯(lián)的腳本。該設備可以解析腳本以標識令牌,基于令牌形成節(jié)點,并且使用節(jié)點來組裝語法樹。該設備可以重命名與節(jié)點相關聯(lián)的一個或者多個標識符,并且基于重命名一個或者多個標識符之后的語法樹來生成與腳本相關聯(lián)的經(jīng)標準化的文本。該設備可以確定經(jīng)標準化的文本是否與正則表達式簽名匹配以及基于確定經(jīng)標準化的文本是否與正則表達式簽名匹配來處理數(shù)據(jù)。該設備在經(jīng)標準化的文本與正則表達式簽名匹配時,可以通過第一過程處理數(shù)據(jù),或者在經(jīng)標準化的文本與正則表達式簽名不匹配時,通過第二過程處理數(shù)據(jù)。第一過程與第二過程不同。
根據(jù)一些可能的實施方式,一種方法可以包括由設備從端點設備接收數(shù)據(jù),由該設備從數(shù)據(jù)中提取腳本化代碼,以及由該設備生成具有空白和標識符的、與腳本化代碼對應的經(jīng)標準化的腳本。該方法可以包括:由該設備根據(jù)標準化方案來格式化經(jīng)標準化的腳本的空白,并且由該設備根據(jù)經(jīng)標準化的方案來重命名經(jīng)標準化的腳 本的標識符。該方法可以包括:由該設備確定經(jīng)標準化的腳本是否與簽名匹配,并且由該設備基于由該設備確定經(jīng)標準化的腳本是否與簽名匹配、來選擇性地向與數(shù)據(jù)相關聯(lián)的另一個端點設備發(fā)送數(shù)據(jù)。該方法可以包括基于確定經(jīng)標準化的腳本與簽名不匹配而由該設備向另一個端點設備發(fā)送數(shù)據(jù),或者基于確定經(jīng)標準化的腳本與簽名匹配而不由該設備向另一個端點設備發(fā)送數(shù)據(jù)。
根據(jù)一些可能的實施方式,一種存儲指令的計算機可讀介質(zhì)可以包括多條指令,這些指令在由與設備相關聯(lián)的一個或者多個處理器執(zhí)行時,使得一個或者多個處理器接收數(shù)據(jù),標識被包含在數(shù)據(jù)中的可執(zhí)行代碼,在環(huán)境內(nèi)執(zhí)行可執(zhí)行代碼,以及基于可執(zhí)行代碼的執(zhí)行而生成跟蹤。多條指令可以進一步使得一個或者多個處理器基于跟蹤而生成列表,該列表標識由可執(zhí)行代碼執(zhí)行的一個或者多個函數(shù)、以及與執(zhí)行一個或者多個函數(shù)中的一個函數(shù)相關聯(lián)的順序、執(zhí)行計數(shù)、自變量或者返回值。多條指令可以進一步使得一個或者多個處理器基于跟蹤、通過用備選部分替換可執(zhí)行代碼的一部分來生成經(jīng)優(yōu)化的代碼,該部分和備選部分關于在執(zhí)行期間與環(huán)境交互是等同的。多條指令可以進一步使得一個或者多個處理器基于空白標準化方案來修改被包含在經(jīng)優(yōu)化的代碼中的空白,基于標識符標準化方案來修改被包含在經(jīng)優(yōu)化的代碼中的標識符,以及提供用于對代碼簽名進行匹配的經(jīng)優(yōu)化的代碼,以確定可執(zhí)行代碼是否是惡意,該經(jīng)優(yōu)化的代碼具有根據(jù)相應的空白標準化方案和標識符標準化方案而修改的空白和標識符。代碼簽名可以與確定可執(zhí)行代碼是否是惡意相關聯(lián)。多條指令可以進一步使得一個或者多個處理器提供用于對列表簽名進行匹配的列表,以確定可執(zhí)行代碼是否是惡意,該列表簽名可以與確定可執(zhí)行代碼是否是惡意相關聯(lián)。
附圖說明
圖1是本文所描述的示例實施方式的概覽圖;
圖2是本文所描述的系統(tǒng)和/或方法可以在其中被實施的示例環(huán) 境圖;
圖3是圖2的一個或者多個設備的示例組件圖;
圖4是用于使用正則表達式簽名去混淆腳本化語言以供網(wǎng)絡入侵檢測的示例過程的流程圖;以及
圖5A-圖5H是與在圖4中示出的示例過程有關的示例實施方式圖。
具體實施方式
示例實施方式的以下詳細描述指的是附圖。不同附圖中的相同參考標號可以標識相同或者相似的元件。
許多計算環(huán)境采用腳本化語言,諸如JavaScript、ECMAScript、VBScript、Python、Perl、PHP等,來提供功能。特別地,腳本化語言形成動態(tài)超文本標記語言(“DHTML”)和異步JavaScript+XML(“AJAX”)的關鍵組件,其使得用戶能夠享受交互式的和動態(tài)的web瀏覽體驗。(例如,用于智能電話、平板計算機等的)移動應用程序的開發(fā)者可以將腳本包括在他們的產(chǎn)品中。不幸的是,可執(zhí)行腳本的流行度已經(jīng)促進某些個人和參與者創(chuàng)建和發(fā)布惡意腳本,惡意腳本的目的是破壞、劫持和/或得益于執(zhí)行腳本的設備。這些腳本可以利用設備的軟件和/或硬件中的弱點在看似無害的活動期間自動地執(zhí)行(例如,通過感染受該設備信任和/或受該設備的用戶信任的服務器),和/或惡意代碼的作者(們)可以例如通過社交工程而欺騙用戶執(zhí)行惡意腳本。惡意腳本可以包括例如病毒、惡意軟件、間諜軟件、勒索軟件、信息竊取(例如,與兩個設備之間的連接相關聯(lián)的敏感會話數(shù)據(jù))等。
為了進一步使問題復雜化,惡意腳本的作者(“腳本作者”)通常采用一個或者多個混淆技術來放置被惡意軟件/反病毒掃描器檢測。例如,腳本作者可以使空白(whitespace)和/或標識符(例如,私有函數(shù)和/或變量的名稱)隨機化,添加軟件臃腫(bloat)(例如,腳本中的不影響有意義的腳本行為的部分、諸如注釋或者基于已知 值的邏輯切換——例如,x=1;if(x==1)then{..}),使用備選的手段來表示常量值(例如,用數(shù)學操作替代數(shù)字),將一個函數(shù)用作另一個的替代(例如,將本地函數(shù)用作用于可疑遠程函數(shù)或者對象方法的別名),在運行時分割字符串并且聯(lián)接字符串,和/或在運行時編碼腳本的一部分并且解碼該部分。在特定腳本中,不止一個混淆技術可以被使用,并且一些技術可以被分層(例如,經(jīng)加密的內(nèi)容可以使用不同密鑰來再被加密)。此外,腳本作者可以使用工具來使混淆技術的使用隨機化,以使得一個惡意腳本可以以許多不同的混淆形式而存在。
本文所描述的實施方式通過提供用于攔截通過網(wǎng)絡向與用戶相關聯(lián)的端點設備發(fā)送的含腳本的數(shù)據(jù)的方法和設備、通過標準化并且去混淆被包含在數(shù)據(jù)內(nèi)的腳本、通過將經(jīng)標準化/去混淆的腳本與關聯(lián)于惡意腳本的正則表達式簽名進行比較、并且通過在腳本與簽名匹配時防止腳本被遞送到端點設備,可以輔助用戶減輕由惡意腳本造成的威脅。通過這種方式,用戶的端點設備以及與網(wǎng)絡相關聯(lián)的其他端點設備可以避免由已經(jīng)被標識為惡意的腳本所感染。此外,該方法和設備可以輔助用戶分析腳本,以便確定腳本是否是惡意,并且如果是的話,確定如何創(chuàng)建正則表達式簽名以指導該設備檢測并且扣留腳本。
圖1是本文所描述的示例實施方式100的概覽圖。例如,假定第一端點向第二端點發(fā)送數(shù)據(jù)(例如,使用超文本傳輸協(xié)議(HTTP))。在到達第二端點之前,數(shù)據(jù)經(jīng)過網(wǎng)絡設備(例如,入侵檢測和預防系統(tǒng)、防火墻、代理服務器等)。網(wǎng)絡設備從數(shù)據(jù)內(nèi)標識并且提取腳本。網(wǎng)絡設備進一步在仿真環(huán)境中使腳本標準化,去混淆并且跟蹤腳本,以生成經(jīng)標準化/去混淆的腳本以及腳本的對系統(tǒng)/全局/應用程序接口(API)方法的調(diào)用的列表(例如,不是由腳本定義的、但是是由環(huán)境提供以允許腳本與環(huán)境交互的函數(shù))。網(wǎng)絡設備然后將經(jīng)標準化/去混淆的腳本與關聯(lián)于腳本的簽名(例如,正則表達式)進行匹配、和/或將腳本的方法調(diào)用的列表與關聯(lián)于該 方法調(diào)用的列表的簽名進行匹配。如果不存在匹配,則網(wǎng)絡設備可以假定數(shù)據(jù)是良性(benign)并且向第二端點路由該數(shù)據(jù)。如果存在匹配,路由器可以將腳本標識為惡意腳本,可以拒絕向第二端點路由該數(shù)據(jù),和/或可以響應于惡意腳本的檢測而采取一些動作。
通過這種方式,網(wǎng)絡設備可以保護第二端點避免之前已經(jīng)被定義為惡意腳本。進一步地,網(wǎng)絡設備可以通過拒絕路由包含惡意腳本的數(shù)據(jù)并且可能的話提醒向用戶該檢測(例如,通過日志或者電子郵件),而防止惡意腳本的進一步傳播。通過跟蹤腳本并且生成腳本的方法調(diào)用的列表,網(wǎng)絡設備可以化簡生成針對新的威脅的簽名的任務。
圖2是本文所描述的系統(tǒng)和/或方法可以在其中被實施的示例環(huán)境200的圖。如圖2中所示出的,環(huán)境200可以包括一組發(fā)送端點設備210-1、…、210-M(M≥1)(以下被統(tǒng)稱為“發(fā)送端點設備210”和被單獨地稱為“發(fā)送端點設備210”)、一組接收端點設備220-1、…、220-N(N≥1)(以下被統(tǒng)稱為“接收端點設備220”和被單獨地稱為“接收端點設備220”)、網(wǎng)絡設備230、發(fā)送網(wǎng)絡240和/或接收網(wǎng)絡250。環(huán)境200的設備可以經(jīng)由有線連接、無線連接或者有線連接和無線連接的組合進行互連。
發(fā)送端點設備210和/或接收端點設備220可以包括能夠在網(wǎng)絡(例如,發(fā)送網(wǎng)絡240和/或接收網(wǎng)絡250)上接收和/或提供信息、和/或能夠生成、存儲和/或處理在網(wǎng)絡上接收的和/或提供的信息的一個或者多個設備。例如,發(fā)送端點設備210和/或接收端點設備220可以包括計算設備(諸如,膝上型計算機、平板計算機、手持式計算機、臺式計算機、移動電話(例如,智能電話、無線電話等))、網(wǎng)絡設備(例如,路由器、網(wǎng)關、防火墻、集線器、網(wǎng)橋等)、服務器設備、或者類似的設備。發(fā)送端點設備210和/或接收端點設備220可以充當用于與另一個發(fā)送端點設備210和/或接收端點設備220通信的端點(例如,源和/或目的地)。例如,第一發(fā)送端點設備210和/或接收端點設備220可以(例如,經(jīng)由網(wǎng)絡設備230、發(fā)送網(wǎng)絡 240和/或接收網(wǎng)絡250)向第二發(fā)送端點設備210和/或接收端點設備220提供信息。例如,發(fā)送端點設備210可以向接收端點設備220發(fā)送包含一個或者多個腳本的數(shù)據(jù)。
網(wǎng)絡設備230可以包括能夠處理和/或傳遞在發(fā)送端點設備210和/或接收端點設備220之間的數(shù)據(jù)的一個或者多個設備(例如,一個或者多個流量傳遞設備)。例如,網(wǎng)絡設備230可以包括防火墻、路由器、網(wǎng)關、交換機、集線器、網(wǎng)橋、反向代理、服務器(例如,代理服務器)、安全設備、入侵檢測設備、負載平衡或者類似的設備。例如,網(wǎng)絡設備230可以基于確定數(shù)據(jù)內(nèi)的腳本是否與簽名匹配來選擇性地路由在發(fā)送端點設備210與接收端點設備220之間的數(shù)據(jù)。
發(fā)送網(wǎng)絡240和/或接收網(wǎng)絡250可以包括一個或者多個有線網(wǎng)絡和/或無線網(wǎng)絡。例如,發(fā)送網(wǎng)絡240和/或接收網(wǎng)絡250可以包括蜂窩網(wǎng)絡(例如,長期演進(LTE)網(wǎng)絡、3G網(wǎng)絡、碼分多址(CDMA)網(wǎng)絡等)、公共陸地移動網(wǎng)絡(PLMN)、局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、城域網(wǎng)(MAN)、電話網(wǎng)絡(例如,公共交換電話網(wǎng)絡(PSTN))、私有網(wǎng)絡、自組織網(wǎng)絡、內(nèi)聯(lián)網(wǎng)、因特網(wǎng)、基于光纖的網(wǎng)絡、云計算網(wǎng)絡和/或這些網(wǎng)絡或另一種類型的網(wǎng)絡的組合。雖然示出為分離的網(wǎng)絡,但是發(fā)送網(wǎng)絡240和接收網(wǎng)絡250可以被實現(xiàn)為單個網(wǎng)絡。
圖2中所示出的設備和網(wǎng)絡的數(shù)量和布置被提供作為示例。在實踐中,可以存在除了圖2中所示出的那些之外的附加設備和/或網(wǎng)絡、較少的設備和/或網(wǎng)絡、不同的設備和/或網(wǎng)絡、或者不同布置的設備和/或網(wǎng)絡。進一步地,圖2中所示出的兩個或者更多設備可以在單個設備內(nèi)被實施,或者圖2中所示出的單個設備可以被實現(xiàn)為多個分布式的設備。附加地或者備選地,環(huán)境200的一個設備集合(例如,一個或者多個設備)可以執(zhí)行描述為由環(huán)境200的另一個設備集合所執(zhí)行的一個或者多個功能。
圖3是設備300的示例組件圖。設備300可以對應于發(fā)送端點 設備210、接收端點設備220和/或網(wǎng)絡設備230。在一些實施方式中,發(fā)送端點設備210、接收端點設備220和/或網(wǎng)絡設備230可以包括一個或者多個設備300和/或設備300的一個或者多個組件。如圖3中所示出的,設備300可以包括總線310、處理器320、存儲器330、存儲組件340、輸入組件350、輸出組件360以及通信接口370。
總線310可以包括允許在設備300的組件之間進行通信的組件。處理器320可以包括解譯和/或執(zhí)行指令的處理器(例如,中央處理器(CPU)、圖形處理單元(GPU)、加速處理單元(APU)等)、微處理器、和/或任何處理組件(例如,現(xiàn)場可編程門陣列(FPGA)、專用集成電路(ASIC)等)。存儲器330可以包括存儲由處理器320使用的信息和/或指令的隨機訪問存儲器(RAM)、只讀存儲器(ROM)和/或另一類型的動態(tài)或者靜態(tài)存儲設備(例如,閃存、磁存儲器、光存儲器等)。
存儲組件340可以存儲與設備300的操作和使用有關的信息和/或軟件。例如,存儲組件340可以包括硬盤(例如,磁盤、光盤、磁光盤、固態(tài)盤等)、緊密盤(CD)、數(shù)字通用盤(DVD)、軟盤、盒式磁帶機、磁帶和/或任何類型的計算機可讀介質(zhì),連同對應的驅動器。
輸入組件350可以包括允許設備300諸如經(jīng)由用戶輸入(例如,觸摸屏顯示器、鍵盤、小型鍵盤、鼠標、按鈕、開關、麥克風等)接收信息的組件。附加地或者備選地,輸入組件350可以包括用于感測信息的傳感器(例如,全球定位系統(tǒng)(GPS)組件、加速計、陀螺儀、制動器等)。輸出組件360可以包括提供來自設備300的輸出信息的組件(例如,顯示器、揚聲器、一個或者多個發(fā)光二極管(LED)等)。
通信接口370可以包括使得設備300能夠(諸如,經(jīng)由有線連接、無線連接或者有線連接和無線連接的組合)與其他設備通信的類收發(fā)器組件(例如,收發(fā)器、分離的接收器和發(fā)射器等)。通信接口370可以允許設備300從另一個設備接收信息和/或向另一個設 備提供信息。例如,通信接口370可以包括以太網(wǎng)接口、光接口、同軸接口、紅外接口、射頻(RF)接口、通用串行總線(USB)接口、Wi-Fi接口、蜂窩網(wǎng)絡接口等。
設備300可以執(zhí)行一個或者多個本文所描述的過程。設備300可以響應于處理器320執(zhí)行由計算機可讀介質(zhì)(諸如、存儲器330和/或存儲組件340)所存儲的軟件指令而執(zhí)行這些過程。計算機可讀介質(zhì)在本文中被定義為非瞬態(tài)的存儲器設備。存儲器設備包括在單個物理存儲設備內(nèi)的存儲空間或者傳遍多個物理存儲設備的存儲空間。
軟件指令可以從另一個計算機可讀介質(zhì)或經(jīng)由通信接口370從另一個設備中被讀入到存儲器330和/或存儲組件340中。當被執(zhí)行時,存儲在存儲器330和/或存儲組件340中的軟件指令可以使得處理器320執(zhí)行本文所描述的一個或者多個過程。附加地或者備選地,硬連線的電路可以替代或者結合軟件指令被使用,以執(zhí)行本文所描述的一個或者多個過程。因此,本文所描述的實施方式并不限于硬件電路和軟件的任何特定的組合。
圖3中所示出的組件的數(shù)量和布置被提供作為示例。在實踐中,設備300可以包括除了圖3中所示出的那些之外的附加組件、較少的組件、不同的組件或者不同布置的組件。附加地或者備選地,設備300的一個組件集合(例如,一個或者多個組件)可以執(zhí)行描述為由設備300的另一個組件集合執(zhí)行的一個或者多個功能。
圖4是用于使用正則表達式簽名去混淆腳本化語言以供網(wǎng)絡入侵檢測的示例過程400的流程圖。在一些實施方式中,圖4的一個或者多個過程框可以由網(wǎng)絡設備230執(zhí)行。在一些實施方式中,圖4的一個或者多個過程框可以由另一個設備或者與網(wǎng)絡設備230分離的或者包括網(wǎng)絡設備230的一組設備(諸如發(fā)送端點設備210和/或接收端點設備220)來執(zhí)行。
如圖4中所示出的,過程400可以包括接收數(shù)據(jù)(框405)。例如,網(wǎng)絡設備230可以從發(fā)送端點設備210和/或接收端點設備220 接收數(shù)據(jù)。網(wǎng)絡設備230可以在執(zhí)行進一步分析時緩沖接收到的數(shù)據(jù)。通過這種方式,網(wǎng)絡設備230可以獲得數(shù)據(jù),從腳本可以從該數(shù)據(jù)中被提取和分析。
如圖4中進一步所示出的,過程400可以包括在數(shù)據(jù)內(nèi)標識上下文以及與上下文相關聯(lián)的腳本(框410)。例如,上下文可以包括與文檔(例如,HTML、XML、PDF、電子郵件)相關聯(lián)的數(shù)據(jù)、應用程序(例如,移動/嵌入式應用程序、web瀏覽器、或者其他腳本引擎)等。腳本可以包括嵌入式腳本、來自另一個源的鏈接腳本等。在一個示例中,上下文可以是具有HTML元素的HTML網(wǎng)頁,并且腳本可以是在<script></script>標簽內(nèi)定義的JavaScript元素。通過這種方式,網(wǎng)絡設備230可以確定腳本是否和/或如何與簽名匹配。
如圖4中進一步所示出的,過程400可以包括基于腳本生成語法樹并且使語法樹標準化(框415)。例如,網(wǎng)絡設備230可以解析腳本,標識有效令牌,以及基于所標識的令牌而用節(jié)點填充抽象語法樹(“AST”)。網(wǎng)絡設備230可以進一步基于節(jié)點結構、通過根據(jù)經(jīng)標準化的命名方案來重命名本地標識符(即,可以被改變而不影響腳本的解譯的標識符)來使語法樹標準化(例如,通過編號/排列節(jié)點,并且基于與節(jié)點和/或節(jié)點的類型相關聯(lián)的編號,將與節(jié)點相關聯(lián)的標識符替換為具有經(jīng)標準化的字符串模式的新的標識符)。網(wǎng)絡設備230也可以在創(chuàng)建語法樹時移除空白。例如,網(wǎng)絡設備230可以標識并且刪除不是解析腳本所必要的任何空白。
如圖4中進一步所示出的,過程400可以包括基于語法樹生成經(jīng)標準化的腳本(框420)。例如,網(wǎng)絡設備230可以遍歷根據(jù)腳本生成的經(jīng)標準化的語法樹的每個節(jié)點,并且使用經(jīng)標準化的命名方案來將該腳本記錄為經(jīng)標準化的腳本。網(wǎng)絡設備230可以通過使用特定空白插入方案來使經(jīng)標準化的腳本的空白標準化(例如,插入保留腳本的語法結構的最小量的空白)。通過將經(jīng)標準化的腳本與類似的經(jīng)標準化的腳本簽名進行比較,網(wǎng)絡設備230可以執(zhí)行更精確的、獨立于標識符的匹配,以加速基于正則表達式的簽名匹配算 法的執(zhí)行。
如圖4中進一步所示出的,過程400可以包括確定是否執(zhí)行動態(tài)去混淆(框425)。例如,網(wǎng)絡設備230可以基于標識與執(zhí)行動態(tài)去混淆相關聯(lián)的條件或者條件集合的配置信息,來確定是否執(zhí)行動態(tài)去混淆。例如,條件可以包括Boolean標志的狀態(tài),該狀態(tài)可以例如基于用戶輸入(例如,在分析新的腳本以確定新的腳本是否是惡意的情況下)而被設置為真或假。附加地或者備選地,條件可以包括混淆的等級和/或標記—諸如滿足混淆等級閾值。例如,網(wǎng)絡設備230可以基于啟發(fā)式(heuristic)算法(例如,通過確定腳本的部分是否可能要被編碼)或者基于初步的簽名匹配(例如,通過確定腳本是否匹配與混淆技術相關聯(lián)的一個或者多個正則表達式簽名)來確定混淆的等級和/或標記。附加地或者備選地,條件可以包括資源——諸如處理能力、網(wǎng)絡吞吐量/延遲、和/或存儲器空間——的可用性。附加地或者備選地,條件可以基于被包括在數(shù)據(jù)中的信息和/或與數(shù)據(jù)相關聯(lián)的信息,諸如發(fā)送者、接收者、上下文等。附加地或者備選地,網(wǎng)絡設備230在執(zhí)行動態(tài)去混淆之前(例如,如框455中所描述的),基于失敗地嘗試將腳本與簽名匹配,可以確定執(zhí)行腳本的動態(tài)去混淆。動態(tài)去混淆可以提升去混淆的等級并且因此可以提升惡意腳本檢測的可能性。
如圖4中進一步所示出的,如果動態(tài)去混淆要被執(zhí)行(框425=是),則過程400可以包括基于上下文生成對象模型(框430)。例如,網(wǎng)絡設備230可以標識API和/或對象模型,該API和/或對象模型指定腳本要如何被解譯以及腳本可以如何與它的環(huán)境進行交互。附加地或者備選地,網(wǎng)絡設備230可以標識腳本在運行時可以與其進行交互的、被包含在數(shù)據(jù)內(nèi)的信息,諸如元素、環(huán)境變量等。例如,對象模型可以是HTML文檔對象模型(“DOM”),其包括與例如web瀏覽器環(huán)境相關聯(lián)的各種方法、屬性以及規(guī)則。DOM可以包括映射數(shù)據(jù)的DOM樹,數(shù)據(jù)例如被包含在與腳本相關聯(lián)的一個或者多個HTML/XML/CSS文件內(nèi)的HTML和/或腳本元素以及與元素 相關聯(lián)的值。通過生成對象模型,網(wǎng)絡設備230可以提供仿真環(huán)境以跟蹤經(jīng)標準化的腳本。
如圖4中進一步所示出的,過程400可以包括在仿真對象模型環(huán)境中跟蹤經(jīng)標準化的腳本的解譯(框435)。例如,網(wǎng)絡設備230可以采用腳本解譯/調(diào)試引擎,該腳本解譯/調(diào)試引擎仿真與所生成的對象模型相關聯(lián)的環(huán)境。如果對象模型是DOM,則網(wǎng)絡設備230可以仿真例如web瀏覽器環(huán)境。備選地或者附加地,對象模型可以與不同的上下文(例如,PDF、電子郵件、嵌入式/移動應用程序等)相對應,并且網(wǎng)絡設備230可以類似地仿真與該環(huán)境相關聯(lián)的對象模型。備選地,網(wǎng)絡設備230可以采用不與特定環(huán)境對應但是仍然使用對象模型內(nèi)的本地元素的仿真模型。
網(wǎng)絡設備230可以替代或者實施備選函數(shù)來替換系統(tǒng)/全局/潛在危險的方法/函數(shù)。備選地,網(wǎng)絡設備可以在沙箱環(huán)境中解譯/執(zhí)行腳本,以觀察腳本的執(zhí)行的結果和/或跳過腳本的部分的解譯?;诮庾g腳本,網(wǎng)絡設備230可以生成事件的跟蹤(例如,函數(shù)入口/出口點、通過的自變量、返回的值、對象方法/函數(shù)的調(diào)用、交互/修改模型的元素、或者改變與腳本變量/對象元素相關聯(lián)的值)。來自跟蹤的輸出向網(wǎng)絡設備230提供將難以獲得或者難以由靜態(tài)分析獲得的信息,并且該信息可以用于去混淆腳本、對簽名進行匹配、以及在被執(zhí)行時標識腳本的行為。
如圖4中進一步所示出的,過程400可以包括基于跟蹤生成方法調(diào)用列表(框440)。例如,網(wǎng)絡設備230可以基于跟蹤來標識對與對象模型(例如,對象方法)進行交互的函數(shù)的所有調(diào)用/引用。網(wǎng)絡設備230可以進一步生成方法調(diào)用列表,該方法調(diào)用列表包括對那些函數(shù)的所有調(diào)用的順序列表、對那些函數(shù)的調(diào)用的數(shù)量、以及傳到那些函數(shù)的自變量。通過這種方式,網(wǎng)絡設備230可以依據(jù)腳本的與它的環(huán)境的交互來表征腳本。
如圖4中進一步所示出的,過程400可以包括確定調(diào)用列表是否與簽名匹配(框445)。例如,網(wǎng)絡設備230可以從被確定為與一 個或者多個惡意腳本相關聯(lián)的調(diào)用列表相匹配的正則表達式簽名的列表中選擇正則表達式簽名,并且確定調(diào)用列表是否與該正則表達式簽名匹配。網(wǎng)絡設備230可以針對一個或者多個附加正則表達式簽名而重復這個匹配過程(例如,迭代地),以確定調(diào)用列表是否匹配與一個或者多個附加正則表達式簽名中的一個附加正則表達式簽名相關聯(lián)的調(diào)用列表。
如圖4中進一步所示出的,如果調(diào)用列表與簽名不匹配(框445=否),則過程400可以包括基于跟蹤來優(yōu)化經(jīng)標準化的腳本(框450)。例如,網(wǎng)絡設備230可以從經(jīng)標準化的腳本中標識并且移除不影響有意義的腳本行為的經(jīng)標準化的腳本的部分(例如,無用代碼)。附加地或者備選地,網(wǎng)絡設備230可以標識并且移除多余的邏輯切換(例如,基于在運行時將總是或者從不被解譯的常數(shù)表達式的循環(huán)),該多余的邏輯切換備選地被表示為常數(shù)值、返回常數(shù)值的函數(shù)、和分割的字符串等。網(wǎng)絡設備230基于跟蹤,也可以解密腳本的加密部分并且標識替代/別名函數(shù)。網(wǎng)絡設備230可以以迭代的方式執(zhí)行這個優(yōu)化。備選地或者附加地,網(wǎng)絡設備230可以在表示腳本的語法樹上執(zhí)行該優(yōu)化,并且在優(yōu)化語法樹之后,從該語法樹中創(chuàng)建經(jīng)優(yōu)化的腳本。
如圖4中進一步所示出的,過程400可以包括確定經(jīng)標準化的腳本(具有或者不具有基于附加跟蹤的優(yōu)化)是否與簽名匹配(框455)。例如,網(wǎng)絡設備230可以從被確定為匹配一個或多個經(jīng)標準化的惡意腳本的正則表達式簽名的列表中選擇正則表達式簽名,并且確定經(jīng)標準化的腳本是否與該正則表達式簽名匹配。網(wǎng)絡設備230可以針對一個或者多個附加正則表達式簽名而重復這個匹配過程(例如,迭代地),以確定經(jīng)標準化的腳本是否匹配與一個或者多個附加的正則表達式簽名中的一個附加正則表達式簽名相關聯(lián)的惡意腳本。
如圖4中進一步所示出的,如果經(jīng)標準化的腳本與簽名不匹配(框455=否),則過程400可以包括確定腳本是否惡意地表現(xiàn)(框 460)。例如,盡管沒有匹配已知的簽名,網(wǎng)絡設備230仍可確定(例如,基于用戶輸入、跟蹤、調(diào)用列表、經(jīng)優(yōu)化的/經(jīng)標準化的腳本、和/或在配置信息中標識的條件)腳本是否惡意地表現(xiàn)。例如,網(wǎng)絡設備230可以基于跟蹤來確定在腳本與所仿真的對象模型環(huán)境之間的一個或者多個交互,該仿真對象模型環(huán)境與一個或者多個惡意行為關聯(lián)(例如,基于啟發(fā)式模型)。
如圖4中進一步所示出的,如果經(jīng)標準化的腳本沒有惡意地表現(xiàn)(框460=否),則過程400可以包括將數(shù)據(jù)處理為具有良性的腳本(框465)。例如,網(wǎng)絡設備230可以實施/執(zhí)行/存儲接收到的數(shù)據(jù)和/或向它的預定接收者發(fā)送該數(shù)據(jù)。
如圖4中進一步所示出的,如果經(jīng)標準化的腳本惡意地表現(xiàn)(框460=是),則過程400可以包括修改和/或生成一個或者多個簽名以匹配經(jīng)標準化的腳本和/或調(diào)用列表(框470)。例如,網(wǎng)絡設備230通過向用戶提供包含該腳本、經(jīng)標準化的/優(yōu)化的腳本、跟蹤和/或調(diào)用列表的數(shù)據(jù)的一部分,可以輔助用戶針對新的形式的惡意腳本而開發(fā)新的簽名、和/或修改現(xiàn)有的簽名。附加地或者備選地,網(wǎng)絡設備230可以自動地(例如,不要求來自用戶的輸入)生成新的簽名和/或修改現(xiàn)有的簽名,以將該腳本標識為惡意的。通過這種方式,網(wǎng)絡設備230可以更新現(xiàn)有的簽名和/或創(chuàng)建新的簽名以將腳本標識為是惡意的。
如圖4中進一步所示出的,如果經(jīng)標準化的腳本或者調(diào)用列表匹配簽名(框445=是或者框455=是)或者腳本惡意地表現(xiàn)(框460=是),則過程400可以包括將數(shù)據(jù)處理為具有惡意腳本(框475)。例如,網(wǎng)絡設備230可以刪除、隔離或者以其他方式防止數(shù)據(jù)到另一個設備(例如,到與分析和/或處理惡意腳本相關聯(lián)的接收端點設備220)的運行、訪問和/或傳遞。附加地或者備選地,網(wǎng)絡設備230可以通知用戶關于惡意腳本的檢測(例如,通過電子郵件、日志條目和/或用于由用戶/設備的訪問/到用戶/設備的顯示的其他消息)。附加地或者備選地,網(wǎng)絡設備230可以生成用于匹配由網(wǎng)絡設備230 接收的后續(xù)數(shù)據(jù)的一個或者多個附加簽名。例如,網(wǎng)絡設備230可以生成用于匹配與特定網(wǎng)絡、設備、協(xié)議、內(nèi)容和/或用戶相關聯(lián)的數(shù)據(jù)的簽名(例如,以使得接收網(wǎng)絡250與特定發(fā)送端點210隔離)。
雖然圖4示出過程400的示例框,但是在一些實施方式中,過程400可以包括除了圖4中所描繪那些之外的附加的框、較少的框、不同的框或者被不同地布置的框。附加地或者備選地,過程400的兩個或者更多個框可以并行地被執(zhí)行。
圖5A-圖5H是與圖4中所示出的示例過程400有關的示例實施方式500的圖。圖5A-圖5H示出了用于使用正則表達式簽名去混淆用于網(wǎng)絡入侵檢測的腳本化語言的過程的示例。
如圖5A中所示出的,例如實施方式500,假定第一端點(例如,發(fā)送端點設備210)響應于來自第二端點(例如,接收端點設備220)接收端點設備220的HTTP請求(“GET data.html HTTP/1.0|From:endpoint2@network2|User-Agent:HTTPTool/1.0”),向接收端點設備220發(fā)送HTTP數(shù)據(jù)(“HTTP/1.0200OK|Content-Type:text/html”和附加的內(nèi)容)。進一步假定網(wǎng)絡設備(例如,網(wǎng)絡設備230)在第一端點與第二端點之間的網(wǎng)絡位置處被定位。進一步假定網(wǎng)絡設備作為入侵檢測和預防系統(tǒng)的一部分,攔截并且分析在第一端點與第二端點之間傳遞的數(shù)據(jù)。通過這種方式,網(wǎng)絡設備可以接收在第一端點與第二端點之間傳遞的數(shù)據(jù),以確定數(shù)據(jù)是否包含惡意腳本語言。
如圖5B中所示出的,例如實施方式500,假定網(wǎng)絡設備標識被包含在數(shù)據(jù)(從第一端點設備接收的HTTP響應)內(nèi)的腳本(JavaScript)和與腳本相關聯(lián)的上下文(HTML網(wǎng)頁)。進一步假定網(wǎng)絡設備使用合適的解析器來標識有效的腳本令牌(關鍵詞、標識符、標點記號、文字等)。通過這種方式,網(wǎng)絡設備可以開始使腳本標準化以供標識。
如圖5C所示出的,例如實施方式500,假定網(wǎng)絡設備通過基于從腳本中標識的令牌來創(chuàng)建節(jié)點,生成抽象語法樹。進一步假定網(wǎng) 絡設備基于經(jīng)標準化的命名方案(例如,針對變量的“v”加序列號和針對函數(shù)的“f”加序列號)和與變量/函數(shù)相關聯(lián)的節(jié)點的位置(以便對從根(root)到分支(branch)的遍歷的順序進行編號)、來重命名本地變量/函數(shù)。通過這種方式,網(wǎng)絡設備可以使用AST來減少存儲大小和在通過變量/函數(shù)重命名來減輕混淆時的處理負載。
如圖5D中所圖示的,例如實施方式500,假定網(wǎng)絡設備通過遍歷AST的節(jié)點來生成具有經(jīng)標準化的標識符的經(jīng)標準化的腳本(如關于圖5C所描述的)。進一步假定當生成經(jīng)標準化的腳本時,網(wǎng)絡設備根據(jù)用于插入空白的特定方案來插入空白(例如,指導網(wǎng)絡設備僅插入維護腳本的解譯所要求的最小的空白),得到具有經(jīng)標準化的空白的經(jīng)標準化的腳本。通過這種方式,在使命名方案標準化以戰(zhàn)勝重命名混淆技術時,網(wǎng)絡設備可以使用比在網(wǎng)絡設備要使用原始腳本用于匹配時更少的空間和更少的處理器資源、來將經(jīng)標準化的腳本與正則表達式簽名進行匹配。
也如圖5D中所示出的,例如實施方式500,假定網(wǎng)絡設備已經(jīng)確定動態(tài)去混淆要被執(zhí)行。進一步假定網(wǎng)絡設備標識API,并且基于API來生成表示HTML上下文并且包括經(jīng)標準化的JavaScript的DOM樹。通過這種方式,網(wǎng)絡設備可以利用適當?shù)腄OM來發(fā)起仿真器,用于運行腳本的所追蹤的解譯。
如圖5E所示出的,例如實施方式500,假定網(wǎng)絡設備基于DOM,在所仿真的環(huán)境內(nèi),使用仿真器來解譯經(jīng)標準化的腳本。進一步假定網(wǎng)絡設備230在跟蹤中追蹤調(diào)用、自變量、返回值、DOM樹、變量值和/或其他信息。網(wǎng)絡設備使用仿真器,可以確定本地變量表示分割的文字字符串并且可以將分割的字符串的聯(lián)接評估為“object”、“classid”以及“clsid:55963676-2F5E-4BAF-AC28-CF26AA587566”,確定出fromCharCode函數(shù)利用文字數(shù)值參數(shù)進行操作并且可以將函數(shù)的返回值評估為“http://badsite”,以及確定出JavaScript腳本在DOM樹中創(chuàng)建具有以前面提及的classid和url作為參數(shù)的新的對象。
如圖5F中所示出的,假定網(wǎng)絡設備基于跟蹤來優(yōu)化AST以聯(lián)接 所標識的分割的文字字符串、將常數(shù)函數(shù)替換為文字等同體、傳播常數(shù)以及用調(diào)用的函數(shù)來替代本地別名函數(shù),這些本地別名函數(shù)調(diào)用所調(diào)用的函數(shù)。假定網(wǎng)絡設備基于優(yōu)化的經(jīng)標準化的AST來生成優(yōu)化的經(jīng)標準化的腳本。通過這種方式,網(wǎng)絡設備可以進一步減少匹配過程的簽名的存儲器和/或處理器要求,以及恢復腳本中的數(shù)據(jù)混淆的一些形式以減少漏報的幾率(即,不將混淆的惡意腳本與簽名進行匹配)。
進一步假定網(wǎng)絡設備基于跟蹤來生成方法調(diào)用列表。進一步假定該方法調(diào)用列表將三種外部的方法標識為已經(jīng)由腳本調(diào)用以與DOM進行交互:“createElement”、“setAttribute”和“fromCharCode”以及與每個相關聯(lián)的調(diào)用計數(shù)(對于所有三個都是1)和被傳遞到每個的自變量(對于“createElement”和“setAttribute”是內(nèi)聯(lián)的(inline)/沒有自變量,對于fromCharCode是14個數(shù)值)。網(wǎng)絡設備通過該生成方法調(diào)用列表,可以提供另一個上下文,針對該另一個上下文簽名可以被生成/被匹配以標識惡意腳本。
如圖5G所示出的,例如實施方式500,假定網(wǎng)絡設備在不具有動態(tài)去混淆的情況下確定經(jīng)標準化的腳本是否與第一正則表達式簽名(“REGEX1=var f1=document\.createElement\(\(function\(\){var var1=["]”)匹配。進一步假定網(wǎng)絡設備在經(jīng)標準化的JavaScript的開始處匹配第一正則表達式簽名,并且因此確定數(shù)據(jù)要被視為具有惡意腳本。
如圖5G中進一步所示出的,假定網(wǎng)絡設備確定具有動態(tài)去混淆的經(jīng)標準化的腳本是否與第二正則表達式簽名(“REGEX2=55963676-2F5E-4BAF-AC28-CF26AA587566”)或者第三正則表達式簽名(“REGEX3=badsite”)匹配。進一步假定網(wǎng)絡設備將第二正則表達式簽名和第三正則表達式簽名與經(jīng)標準化的動態(tài)去混淆的腳本匹配,并且因此確認數(shù)據(jù)要被視為具有惡意腳本。
如圖5G進一步所示出的,假定網(wǎng)絡設備確定方法調(diào)用列表是否與第四正則表達式簽名(“REGEX4=fromCharCode[0-9]+\<[0-9]+ 數(shù)值”)匹配。進一步假設網(wǎng)絡設備將第四正則表達式簽名與方法調(diào)用列表匹配,并且因此確認數(shù)據(jù)要被視為具有惡意腳本。
通過這種方式,網(wǎng)絡設備基于匹配一個或者多個腳本和/或方法調(diào)用列表的一個或者多個正則表達式簽名,可以標識和/或確認惡意代碼的標識。如圖5G中所示出的,網(wǎng)絡設備基于簽名是否要被匹配到非動態(tài)去混淆的經(jīng)標準化的腳本、動態(tài)去混淆經(jīng)標準化的腳本或者到方法調(diào)用列表,可以選擇特定正則表達式簽名或者特定正則表達式簽名的集合。
如圖5H中所示出的,網(wǎng)絡設備230基于確定腳本是否與用于惡意腳本的簽名匹配,可以刪除/隔離從發(fā)送端點設備210接收的數(shù)據(jù)(如果腳本與簽名匹配)或者向接收端點設備220遞送數(shù)據(jù)(如果腳本不與簽名匹配)。通過這種方式,當減輕傳遞惡意腳本的風險時,網(wǎng)絡設備230可以使得接收端點設備220無縫地向和從發(fā)送端點設備210(以及其他潛在危險的/不信任的源)發(fā)送和接收數(shù)據(jù)。
如上面所指出的,圖5A-圖5H僅被提供作為示例。其他示例也是可能的,并且可以與參考圖5A-圖5H所描述的不同。
本文所描述的實施方式提供入侵檢測和預防系統(tǒng),該入侵檢測和預防系統(tǒng)檢查通過設備傳遞的數(shù)據(jù),標識腳本和與腳本相關聯(lián)的上下文,使空白和標識符命名標準化,去混淆腳本,在仿真的環(huán)境中跟蹤腳本的解譯,并且將經(jīng)標準化的/去混淆的腳本以及其他跟蹤信息與用于已經(jīng)被標識為是惡意的腳本的正則表達式簽名進行匹配。本文所描述的實施方式也可以用來輔助用戶生成要與腳本匹配的正則表達式簽名。
前述公開內(nèi)容提供了圖示和說明,但是并不旨在將實施方式窮盡或者限制到所公開的精確形式。根據(jù)上面的公開內(nèi)容修改和變型是可能的或者可以實施方式的實踐中被獲得。
如本文所使用的,術語組件旨在被廣義地解譯為硬件、固件和/或硬件和軟件的組合。
一些實施方式在本文中被描述與閾值有關。如本文所使用的, 滿足閾值可以是指一個值大于閾值、多于閾值、高于閾值、大于或者等于閾值、小于閾值、少于閾值、低于閾值、小于或者等于閾值、等于閾值等。
將理解的是,本文所描述的系統(tǒng)和/或方法可以以硬件、固件或者硬件和軟件的組合的不同的形式被實施。用于實施這些系統(tǒng)和/或方法的實際專門的控制硬件或者軟件并不限于實施方式。因此,系統(tǒng)和/或方法的操作和行為在本文中被描述,而沒有對特定軟件代碼的參考——應當理解軟件和硬件基于本文的描述,可以被設計用于實施系統(tǒng)和/或方法。
雖然特征的特定組合在權利要求書中被列舉和/或在說明書中被公開,但是這些組合并不旨在限制可能實施方式的公開內(nèi)容。事實上,這些特征的許多特征可以以未在權利要求書中具體列舉的和/或在說明書中公開的方式被組合。雖然下面所列出的每個從屬權利要求僅直接依賴一個權利要求,但是可能實施方式的公開內(nèi)容包括每個從屬權利要求與權利要求集中的每個其他權利要求相結合。
本文所使用的元件、動作或指令不應當被解譯為關鍵的或者必要的,除非明確地被描述為如此。通用,如本文所使用的,冠詞“一”和“一個”旨在包括一個或者多個項目,并且可以與“一個或者多個”交換地被使用。進一步地,如本文所使用的,術語“集合”旨在包括一個或者多個項,并且可以與“一個或者多個”交換地被使用。當規(guī)定只有一個項的地方,術語“一個”或者類似的語言被使用。同樣地,如本文所使用的,術語“具有”、“有”、“含有”等旨在開放的術語。進一步地,短語“基于”旨在意味著“至少部分地基于”,除非另外明確地說明。