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