本發(fā)明涉及分析裝置、分析方法和分析程序。
背景技術(shù):
以往,已知對于路過式下載攻擊等的網(wǎng)絡(luò)攻擊,通過瀏覽器的模擬器(以下,稱作瀏覽器模擬器)執(zhí)行惡性代碼,并對執(zhí)行結(jié)果進(jìn)行分析,從而檢測惡性代碼的手法(例如,參照非專利文獻(xiàn)1、非專利文獻(xiàn)2)。
該路過式下載攻擊(Drive-by Download攻擊)使用JavaScript(注冊商標(biāo))等的代碼,在經(jīng)由多個(gè)網(wǎng)站(以下,稱作踏板URL(Uniform Resource Locator))之后,將客戶轉(zhuǎn)發(fā)給執(zhí)行攻擊代碼的惡性網(wǎng)站(以下,稱作攻擊URL)。如果客戶訪問攻擊URL,則惡意利用瀏覽器或?yàn)g覽器的插件(以下,稱作插件)的脆弱性的攻擊代碼會被執(zhí)行,使得客戶下載、安裝計(jì)算病毒等的惡性程序。
瀏覽器模擬器以函數(shù)單位監(jiān)視網(wǎng)站中包含的代碼的執(zhí)行,檢測具有脆弱性的瀏覽器或插件的函數(shù)的惡意使用,由此檢測惡性代碼。惡性代碼惡意使用瀏覽器或插件所準(zhǔn)備的函數(shù)的脆弱性,通過輸入較長的字符串或較大的數(shù)值,由此引起不當(dāng)改寫計(jì)算的存儲器區(qū)域的緩存溢出或不當(dāng)操作存儲器的分配方法的堆噴射(heap spray),從而執(zhí)行攻擊代碼。因此,瀏覽器模擬器通過監(jiān)視代碼中的脆弱插件的使用或向函數(shù)中的字符串輸入、數(shù)值輸入,由此檢測惡性代碼。
例如,瀏覽器模擬器關(guān)注于作為Internet Explorer(注冊商標(biāo))的插件的ActiveX(注冊商標(biāo)),預(yù)先準(zhǔn)備好針對脆弱的ActiveX(注冊商標(biāo))組件的函數(shù)的攻擊代碼以作為簽名,并且在代碼執(zhí)行時(shí)與簽名匹配的情況下,將該網(wǎng)站判定為惡性網(wǎng)站(參照非專利文獻(xiàn)1)。
此外,還研究出了瀏覽器模擬器收集在操作JavaScript(注冊商標(biāo))的字符串的函數(shù)(例如,substring())或動(dòng)態(tài)生成代碼的函數(shù)(例如,eval())的執(zhí)行次數(shù)或函數(shù)中使用的自變量信息,進(jìn)行基于所收集的信息的機(jī)械學(xué)習(xí)的檢測手法(參照非專利文獻(xiàn)2)。
另一方面,惡性代碼對大范圍的應(yīng)用(例如,瀏覽器為Internet Explorer(注冊商標(biāo))、Firefox(注冊商標(biāo))、Opera(注冊商標(biāo))等,插件為Adobe Acrobat(注冊商標(biāo))、Adobe Flash Player(注冊商標(biāo))、Oracle JRE(注冊商標(biāo))等)的脆弱性進(jìn)行惡意使用。被惡意使用的脆弱性的種類按照每種OS(Operating System:操作系統(tǒng))或?yàn)g覽器、插件的種類或版本(以下,稱作客戶環(huán)境)而被細(xì)化,形式多種多樣。
此外,在JavaScript(注冊商標(biāo))中,通過使用對訪問網(wǎng)站的客戶環(huán)境進(jìn)行識別的瀏覽器指紋識別(Browser Fingerprinting),由此能夠取得客戶環(huán)境信息。
在路過式下載攻擊的踏板URL中,使用該瀏覽器指紋識別取得客戶環(huán)境信息,通過基于客戶環(huán)境信息的控制語句,僅對具備作為攻擊對象的客戶環(huán)境的客戶執(zhí)行向攻擊URL轉(zhuǎn)發(fā)的代碼(以下,稱作轉(zhuǎn)發(fā)代碼)或取得包含攻擊代碼的內(nèi)容的HTML(HyperText Markup Language:超文本標(biāo)記語言)標(biāo)簽的插入代碼(以下,稱作內(nèi)容取得代碼)(以下,稱作環(huán)境依賴攻擊。參照非專利文獻(xiàn)3)。因此,在上述現(xiàn)有技術(shù)中,在瀏覽器模擬器中被設(shè)定的客戶環(huán)境與攻擊對象的客戶環(huán)境不同的情況下,由于無法到達(dá)攻擊URL,因此惡性代碼的檢測技術(shù)不會有效地發(fā)揮功能。
另一方面,還提出了使用抽象語法樹或程序切片等技術(shù),全面地分析代碼,提取被嵌入到JavaScript(注冊商標(biāo))中的URL的手法(參照非專利文獻(xiàn)4)。抽象語法樹(Abstract Syntax Tree,AST)指的是通過抽象的樹結(jié)構(gòu)來表現(xiàn)程序結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)。通過搜索抽象語法樹,由此能夠全面地分析程序。即,能夠在不依賴于程序結(jié)構(gòu)的情況下分析代碼,因此也能夠?qū)Σ煌ㄟ^JavaScript(注冊商標(biāo))的控制語句執(zhí)行的的代碼進(jìn)行靜態(tài)分析。
此外,程序切片(Program Slicing)是從程序中提取被稱作切片基準(zhǔn)(Slicing Criteria)<s,v>的與在程序內(nèi)的任意的語句s中關(guān)注的變量v關(guān)聯(lián)的一部分語句集合的技術(shù)(參照非專利文獻(xiàn)5)。按照切片基準(zhǔn)而被提取的語句集合被稱作切片(Slice)。作為該提取切片的手法,已知基于數(shù)據(jù)流程的程序切片手法和基于依賴曲線圖的程序切片手法。
在非專利文獻(xiàn)4中,使用訪問網(wǎng)站時(shí)取得的JavaScript(注冊商標(biāo))整體的抽象語法樹,確定被使用URL的代碼。此后,使用程序切片去除與URL不存在關(guān)系的代碼,然后進(jìn)行JavaScript(注冊商標(biāo))解釋器對代碼的執(zhí)行。然而,在獨(dú)自的JavaScript(注冊商標(biāo))解釋器上安裝了手段,與參照客戶的插件信息的代碼不對應(yīng)。此外,由于以搜索引擎的覆蓋范圍的提高為目的,因此一并提取出被用作攻擊URL的可能性較低的在a標(biāo)簽或form標(biāo)簽等中使用的URL。
在先技術(shù)文獻(xiàn)
非專利文獻(xiàn)
非專利文獻(xiàn)1:Jose Nazario,“PhoneyC:A Virtual Client Honeypot”,In Proceedings of the USENIX Workshop on Large-Scale Exploits and Emergent Threats(LEET),April2009,[2014年9月2日檢索],因特網(wǎng)<URL:https://www.usenix.org/legacy/events/leet09/tech/full_papers/nazario/nazario.pdf>
非專利文獻(xiàn)2:Marco Cova,Christopher Kruegel,Giovanni Vigna,“Detection and Analysis of Drive-by-Download Attacks and Malicious JavaScript Code”,In Proceedings of the World Wide Web Conference(WWW),April 2010,[2014年9月2日檢索],因特網(wǎng)<URL:http://www.cs.ucsb.edu/~vigna/publications/2010_cova_kruegel_vigna_Wepawet.pdf>
非專利文獻(xiàn)3:高田雄太、秋山滿昭、針生剛男,“在路過式下載攻擊中使用的惡性JavaScript的實(shí)態(tài)調(diào)査”,電子信息通信學(xué)會,信息通信系統(tǒng)安全研究會,2014年3月,[2014年9月2日檢索],因特網(wǎng)<URL:http://www.ieice.org/ken/paper/20140327QBlZ/>
非專利文獻(xiàn)4:Qi Wang,Jingyu Zhou,Yizhou Zhang,Jianjun Zhao,“Extracting URLs from JavaScript via Program Analysis”,In Proceedings of the 9th joint meeting of the European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software Engineering,August 2013,[2014年9月2日檢索],因特網(wǎng)<URL:http://stap.sjtu.edu.cn/images/2/2e/ExtractingAnalysis.pdf>
非專利文獻(xiàn)5:Mark Weiser,“PROGRAM SLICING”,In Proceedings of the 5th International Conference on Software Engineering,1981,[2014年9月2日檢索],因特網(wǎng)<URL:http://dl.acm.org/citation.cfm?id=802557>
技術(shù)實(shí)現(xiàn)要素:
發(fā)明欲解決的課題
現(xiàn)有技術(shù)未考慮到依賴于代碼的控制語句的轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼,因此例如存在不會通過進(jìn)行路過式下載攻擊的代碼的控制語句被轉(zhuǎn)發(fā)給踏板URL或攻擊URL的問題。其結(jié)果是,惡性代碼的檢測技術(shù)未能有效發(fā)揮功能,存在無法檢測惡性代碼的可能。
例如,在某個(gè)踏板URL上,使用瀏覽器指紋識別取得JRE(注冊商標(biāo))的版本信息,使用被施加了僅對JRE(注冊商標(biāo))版本7執(zhí)行發(fā)往攻擊URL的轉(zhuǎn)發(fā)代碼的控制的JavaScript(注冊商標(biāo))代碼的情況下,在未安裝JRE(注冊商標(biāo))的客戶環(huán)境或安裝了JRE(注冊商標(biāo))版本7以外的JRE(注冊商標(biāo))的客戶環(huán)境下,無法執(zhí)行轉(zhuǎn)發(fā)代碼。其結(jié)果是,來自客戶的訪問不被轉(zhuǎn)發(fā)給踏板URL或攻擊URL,因此惡性代碼的檢測技術(shù)未有效發(fā)揮功能,無法檢測惡性代碼。
于是,本發(fā)明的課題在于解決所述問題,對依賴于客戶環(huán)境進(jìn)行路過式下載攻擊的代碼進(jìn)行分析。
用于解決課題的手段
為了解決所述課題,本發(fā)明提供一種分析裝置,其分析網(wǎng)頁內(nèi)容中包含的代碼,其特征在于,該分析裝置具有:語法分析部,其通過進(jìn)行所述網(wǎng)頁內(nèi)容中包含的代碼的語法分析,從所述代碼中搜索發(fā)往其他網(wǎng)站的轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼,確定在作為所述搜索的結(jié)果而發(fā)現(xiàn)的轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼中使用的對象、對象的屬性和函數(shù)中的至少任意一方;以及程序切片部,其根據(jù)所述確定的對象、對象的屬性和函數(shù)中的至少任意一方,提取與所述轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼具有依賴關(guān)系的代碼。
發(fā)明的效果
根據(jù)本發(fā)明,能夠?qū)σ蕾囉诳蛻舡h(huán)境進(jìn)行路過式下載攻擊的代碼進(jìn)行分析。其結(jié)果是,例如能夠從該代碼中提取出在路過式下載攻擊中被用于攻擊URL或踏板URL的可能性較高的URL。
附圖說明
圖1是表示系統(tǒng)的結(jié)構(gòu)例的圖。
圖2是表示瀏覽器模擬器管理器的結(jié)構(gòu)例的圖。
圖3是表示程序分析部的分析對象的代碼的示例的圖。
圖4是表示轉(zhuǎn)發(fā)代碼和內(nèi)容取得代碼的示例的圖。
圖5是表示抽象語法樹的示例的圖。
圖6是表示程序依賴曲線圖的示例的圖。
圖7是表示切片的示例的圖。
圖8是表示被登記在分析信息數(shù)據(jù)庫中的分析信息的示例的圖。
圖9是表示系統(tǒng)的處理步驟的示例的流程圖。
圖10是表示圖9的代碼分析的處理步驟的示例的流程圖。
圖11是表示圖9的代碼分析的處理步驟的示例的流程圖。
圖12是表示系統(tǒng)的結(jié)構(gòu)例的圖。
圖13是表示瀏覽器模擬器管理器的結(jié)構(gòu)例的圖。
圖14是表示程序分析部的分析對象的代碼的示例的圖。
圖15是表示腳本轉(zhuǎn)發(fā)代碼、標(biāo)簽轉(zhuǎn)發(fā)代碼、在代碼中使用的HTML標(biāo)簽及其屬性名的對的示例的圖。
圖16是表示程序依賴曲線圖的示例的圖。
圖17是表示根據(jù)切片基準(zhǔn)<14、location.href>而成為提取對象的節(jié)點(diǎn)的示例的圖。
圖18是用于說明根據(jù)切片基準(zhǔn)<14、location.href>而被提取的切片的圖。
圖19是用于說明通過執(zhí)行路徑搜索部而被提取的切片的圖。
圖20是表示根據(jù)切片基準(zhǔn)<5、if>而成為提取對象的節(jié)點(diǎn)的示例的圖。
圖21是用于說明根據(jù)切片基準(zhǔn)<5、if>而被提取的切片的圖。
圖22是表示被存儲在分析信息數(shù)據(jù)庫中的分析信息的示例的圖。
圖23是表示系統(tǒng)的處理步驟的示例的流程圖。
圖24是表示圖23的代碼分析的處理步驟的示例的流程圖。
圖25是表示圖23的代碼分析的處理步驟的示例的流程圖。
圖26是表示圖23的代碼分析的處理步驟的示例的流程圖。
圖27是表示圖25和圖26的切片的提取的處理步驟的示例的流程圖。
圖28是表示執(zhí)行分析程序的計(jì)算的圖。
具體實(shí)施方式
以下,根據(jù)附圖,對用于實(shí)施本發(fā)明的方式(實(shí)施方式)進(jìn)行說明。本發(fā)明并不限定于本實(shí)施方式。
[第1實(shí)施方式]
首先,使用圖1說明第1實(shí)施方式的系統(tǒng)的結(jié)構(gòu)例。系統(tǒng)例如圖1所示,具有網(wǎng)絡(luò)1和網(wǎng)絡(luò)2。網(wǎng)絡(luò)1和網(wǎng)絡(luò)2通過分組轉(zhuǎn)發(fā)裝置3而被連接起來。
網(wǎng)絡(luò)1具有分析對象網(wǎng)站12。網(wǎng)絡(luò)1既可以是如因特網(wǎng)那樣廣域的網(wǎng)絡(luò),也可以如法人網(wǎng)絡(luò)那樣是中小規(guī)模的網(wǎng)絡(luò)或云環(huán)境以及托管環(huán)境的網(wǎng)絡(luò)。
分析對象網(wǎng)站12是瀏覽器模擬器管理器(分析裝置)23的分析對象的網(wǎng)站。該分析對象網(wǎng)站12例如是在被公開的惡性網(wǎng)站的黑名單上登載的網(wǎng)站等。
此外,網(wǎng)絡(luò)2具有瀏覽器模擬器管理器23和分析信息數(shù)據(jù)庫24。網(wǎng)絡(luò)2既可以是如局域網(wǎng)那樣小規(guī)模的網(wǎng)絡(luò),也可以是如法人網(wǎng)絡(luò)那樣中小規(guī)模的網(wǎng)絡(luò)或云環(huán)境以及托管環(huán)境的網(wǎng)絡(luò)。
瀏覽器模擬器管理器23管理1個(gè)以上的瀏覽器模擬器25,使該瀏覽器模擬器25訪問規(guī)定的網(wǎng)站(分析對象網(wǎng)站12)。并且,瀏覽器模擬器管理器23將瀏覽器模擬器25所訪問的網(wǎng)站的URL或通過從該網(wǎng)站取得的代碼的分析而得到的URL等蓄積在分析信息數(shù)據(jù)庫24中。
瀏覽器模擬器25是模擬瀏覽器的動(dòng)作的裝置。該瀏覽器模擬器25例如可使用由Honeynet工程提供的瀏覽器模擬器或作為開放源代碼而被開發(fā)的HtmlUnit或Selenium。該瀏覽器模擬器25的詳細(xì)情況將在后文描述。另外,在圖1中瀏覽器模擬器25被描繪為構(gòu)建在瀏覽器模擬器管理器23內(nèi),而其當(dāng)然也可以被構(gòu)建在瀏覽器模擬器管理器23外。
分析信息數(shù)據(jù)庫24蓄積(保存)瀏覽器模擬器25所訪問的網(wǎng)站的URL或通過從該網(wǎng)站取得的代碼的分析而得到的URL等。該分析信息數(shù)據(jù)庫24的數(shù)據(jù)的保存既可以使用RDBMS(Relational DataBase Management System:關(guān)系數(shù)據(jù)庫管理系統(tǒng)),也可以通過文本形式保存。該分析信息數(shù)據(jù)庫24的詳細(xì)情況將在后文描述。
另外,在本實(shí)施方式中,將瀏覽器模擬器25、瀏覽器模擬器管理器23和分析信息數(shù)據(jù)庫24配置在相同的網(wǎng)絡(luò)中,然而也可以將它們分別配置在不同的網(wǎng)絡(luò)中。此外,將各結(jié)構(gòu)與安全裝置連接起來,因此可以使用現(xiàn)存的加密技術(shù)對通信信息加密,或者將配置有各裝置的網(wǎng)絡(luò)間或各結(jié)構(gòu)間通過VPN(Virtual Private Network:虛擬專用網(wǎng)絡(luò))連接起來。
下面,使用圖2具體說明瀏覽器模擬器管理器23和瀏覽器模擬器25。瀏覽器模擬器管理器23具有瀏覽器模擬器25和控制部27。控制部27在主系統(tǒng)26上使瀏覽器模擬器25進(jìn)行動(dòng)作。該主系統(tǒng)26例如使用瀏覽器模擬器管理器23具有的OS??刂撇?7的詳細(xì)情況將在后文描述。
(瀏覽器模擬器)
下面,說明瀏覽器模擬器25。瀏覽器模擬器25具有客戶環(huán)境模擬部251、訪問部252、HTML/CSS(HyperText Markup Language/Cascading Style Sheets:超文本標(biāo)記語言/層疊樣式表)分析庫253和腳本解釋器部254。
客戶環(huán)境模擬部251設(shè)定瀏覽器模擬器25應(yīng)模擬的客戶環(huán)境(例如,OS、瀏覽器、插件等)的信息。
訪問部252進(jìn)行網(wǎng)站(例如,圖1的分析對象網(wǎng)站12)與HTTP(HyperText Transfer Protocol:超文本傳輸協(xié)議)或HTTPS(HyperText Transfer Protocol Secure:安全超文本傳輸協(xié)議)的通信,從該網(wǎng)站取得網(wǎng)頁內(nèi)容。這里,訪問部252在HTTP或HTTPS的通信時(shí),在HTTP報(bào)頭的User-Agent字段使用通過客戶環(huán)境模擬部251設(shè)定的客戶環(huán)境。由此瀏覽器模擬器25模擬客戶環(huán)境。該訪問部252例如使用作為自由軟件而被開發(fā)的cURL。
此外,訪問部252將對網(wǎng)站的訪問結(jié)果記錄在訪問日志中。例如,訪問部252將所訪問的網(wǎng)站的URL或訪問的日期時(shí)間記錄在訪問日志中。此外,訪問部252在訪問該網(wǎng)站的結(jié)果是轉(zhuǎn)移到其他網(wǎng)站的情況下,將該轉(zhuǎn)移目的地的URL等也記錄在訪問日志中。
HTML/CSS分析庫253分析通過訪問部252取得的網(wǎng)頁內(nèi)容。此外,HTML/CSS分析庫253在分析網(wǎng)頁內(nèi)容的結(jié)果是該網(wǎng)頁內(nèi)容中包含代碼的情況下,使用腳本解釋器部254分析代碼。
腳本解釋器部254分析網(wǎng)頁內(nèi)容中包含的代碼。例如,在代碼通過JavaScript(注冊商標(biāo))而被記述的情況下,腳本解釋器部254使用作為開放源代碼而被開發(fā)的SpiderMonkey或V8JavaScript(注冊商標(biāo))Engine等的JavaScript(注冊商標(biāo))解釋器、通過Java(注冊商標(biāo))記述的作為JavaScript(注冊商標(biāo))解釋器的Rhino等分析代碼。
(控制部)
下面,說明控制部27??刂撇?7具有URL列表制作部271、訪問指示部272、程序分析部273、登記處理部278和URL分析部279。
URL列表制作部271制作作為各瀏覽器模擬器25巡回的網(wǎng)站(分析對象網(wǎng)站12)的URL列表的巡回對象URL列表。例如,URL列表制作部271根據(jù)在被公開的惡性網(wǎng)站的黑名單上登載的網(wǎng)站的URL制作巡回對象URL列表。
訪問指示部272對各瀏覽器模擬器25的訪問部252指示對于巡回對象URL列表(URL列表)所示的URL的訪問。
程序分析部273進(jìn)行從訪問目的地的網(wǎng)站取得的網(wǎng)頁內(nèi)容中包含的程序(代碼)的分析。該程序分析部273的詳細(xì)情況在后文敘述。
登記處理部278取得各瀏覽器模擬器25的訪問日志,并登記在分析信息數(shù)據(jù)庫24中。此外,登記處理部278將通過程序分析部273的代碼分析(后述的切片的執(zhí)行)而得到的URL登記在分析信息數(shù)據(jù)庫24中。
URL分析部279分析被蓄積在分析信息數(shù)據(jù)庫24中的訪問日志或通過代碼分析而得到的URL(分析信息),并輸出該分析結(jié)果。例如,URL分析部279從訪問日志中包含的URL或通過代碼分析得到的URL中提取出可能是攻擊URL或踏板URL的URL并輸出。
下面,具體說明程序分析部273。程序分析部273具有語法分析部274、程序依賴曲線圖構(gòu)建部275、程序切片部(提取部)276和切片執(zhí)行部277。
語法分析部274進(jìn)行通過瀏覽器模擬器25取得的網(wǎng)頁內(nèi)容中包含的代碼的語法分析。具體而言,在瀏覽器模擬器25的腳本解釋器部254分析網(wǎng)頁內(nèi)容中包含的代碼的腳本的過程中,進(jìn)行腳本的語法分析,從網(wǎng)頁內(nèi)容中包含的代碼中搜索發(fā)往其他網(wǎng)站的轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼。并且,語法分析部274確定作為搜索的結(jié)果而被發(fā)現(xiàn)的轉(zhuǎn)發(fā)代碼或在內(nèi)容取得代碼中使用的對象、對象的屬性、函數(shù)。
說明該語法分析的具體例。這里的分析對象的代碼例如是通過圖3所示的JavaScript(注冊商標(biāo))而被記述的代碼。另外,圖3所示的代碼是根據(jù)JRE的版本信息執(zhí)行了控制命令后,執(zhí)行向其他網(wǎng)站的轉(zhuǎn)發(fā)的轉(zhuǎn)發(fā)代碼或執(zhí)行從其他網(wǎng)站取得內(nèi)容的內(nèi)容取得代碼的代碼。此外,被語法分析部274作為搜索對象的轉(zhuǎn)發(fā)代碼和內(nèi)容取得代碼是圖4的符號401和符號402所示的代碼。另外,符號402所示的內(nèi)容取得代碼是根據(jù)在規(guī)定的HTML標(biāo)簽中被代入規(guī)定的屬性名中的URL取得外部內(nèi)容的代碼。在該內(nèi)容取得代碼中使用的HTML標(biāo)簽與指定其外部內(nèi)容的URL的屬性名的對例如是符號403所示的HTML標(biāo)簽和屬性名的對。與這些代碼有關(guān)的信息(搜索對象代碼信息)被存儲在瀏覽器模擬器管理器23的存儲部(省略圖示)的規(guī)定區(qū)域內(nèi),可由管理者等適當(dāng)設(shè)定。
例如,語法分析部274使用被搭載在Rhino上的JavaScript(注冊商標(biāo))代碼的抽象語法樹分析功能,將圖3的代碼的控制語句部分(圖3的第5行至第12行)變換為圖5所示的抽象語法樹。下面說明在該抽象語法樹上的各節(jié)點(diǎn)(以下,稱作AST節(jié)點(diǎn))上標(biāo)記的標(biāo)簽。
IfStatement表示JavaScript(注冊商標(biāo))的if語句,從子AST節(jié)點(diǎn)的左側(cè)開始表示條件語句、THEN語句、ELSE語句。Scope表示代碼中的域的范圍({}),ExpressionStatement表示包含示出語句的結(jié)尾的分號(;)的一行語句。在相當(dāng)于第7行的抽象語法樹中包含的FunctionCall表示函數(shù)執(zhí)行,從子AST節(jié)點(diǎn)的左方起接連有函數(shù)名、自變量1、自變量2···。相當(dāng)于FunctionCall的函數(shù)名的PropertyGet表示對象的屬性參照,Name表示對象名或函數(shù)名、屬性名。相當(dāng)于FunctionCall的自變量1的StringLiteral表示字符串。進(jìn)而,自變量2的InfixExpression表示二項(xiàng)運(yùn)算,子AST節(jié)點(diǎn)分別表示左邊和右邊。在相當(dāng)于圖3的代碼的第11行的抽象語法樹中包含的Assignment表示代入語句,子AST節(jié)點(diǎn)分別表示左邊和右邊。此外,圖5中的三角形的節(jié)點(diǎn)的SubTree1~3中,SubTree1表示圖3的代碼的第5行的條件語句,SubTree2表示圖3的代碼的第6行的語句,SubTree3表示圖3的代碼的第8行的語句,并且與其他情況同樣地包含有抽象語法樹。
例如,語法分析部274從圖5所示的抽象語法樹中搜索通過圖5中的粗線強(qiáng)調(diào)的AST節(jié)點(diǎn)(setAttribute、location、href的AST節(jié)點(diǎn)),作為與圖4所示的轉(zhuǎn)發(fā)代碼和內(nèi)容取得代碼關(guān)聯(lián)的AST節(jié)點(diǎn)。
語法分析部274如上全面地搜索抽象語法樹,由此還能夠指定在不根據(jù)控制語句執(zhí)行的轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼中使用的對象、對象的屬性、函數(shù)。
另外,語法分析部274當(dāng)然還可以通過上述的方法以外的方法進(jìn)行代碼的語法分析。
圖2的程序依賴曲線圖構(gòu)建部275在語法分析部274的搜索結(jié)果是發(fā)現(xiàn)了搜索對象的代碼(即,轉(zhuǎn)發(fā)代碼或內(nèi)容轉(zhuǎn)發(fā)代碼)時(shí),將從網(wǎng)頁內(nèi)容取得的代碼的各語句作為節(jié)點(diǎn),構(gòu)建表示節(jié)點(diǎn)間的數(shù)據(jù)依賴關(guān)系和控制依賴關(guān)系的程序依賴曲線圖。并且,程序依賴曲線圖構(gòu)建部275使用所構(gòu)建的程序依賴曲線圖,指定與所發(fā)現(xiàn)的轉(zhuǎn)發(fā)代碼或內(nèi)容轉(zhuǎn)發(fā)代碼關(guān)聯(lián)的節(jié)點(diǎn)。
例如,程序依賴曲線圖構(gòu)建部275構(gòu)建將JavaScript(注冊商標(biāo))代碼中的變量定義語句、代入語句、函數(shù)定義語句、函數(shù)執(zhí)行語句、返回語句、條件分支語句、循環(huán)語句、例外處理語句等作為程序依賴曲線圖(Program Dependence Graph)上的節(jié)點(diǎn)(以下,稱作PDG節(jié)點(diǎn)),并將節(jié)點(diǎn)間的數(shù)據(jù)依賴關(guān)系或控制依賴關(guān)系作為邊界(以下,稱作PDG邊界)的程序依賴曲線圖。
例如,程序依賴曲線圖構(gòu)建部275根據(jù)圖3所示的代碼構(gòu)建圖6所示的程序依賴曲線圖。下面說明在圖6所示的程序依賴曲線圖的各PDG節(jié)點(diǎn)上標(biāo)記的標(biāo)簽。VariableInitializer表示變量定義,一并標(biāo)記出成為定義對象的變量名。IfStatement、Assignment、FunctionCall與圖5所示的抽象語法樹上的標(biāo)簽的意義相同,一并標(biāo)記出條件語句或?qū)ο竺?、函?shù)名。此外,通過圖6所示的程序依賴曲線圖的實(shí)線箭頭示出的PDG邊界表示數(shù)據(jù)依賴關(guān)系,通過虛線箭頭示出的PDG邊界表示控制依賴關(guān)系。例如,在圖6所示的程序依賴曲線圖中,示出FunctionCall ifr.setAttribute與VariableInitializer src、VariableInitializer jre、VariableInitializer ifr具有數(shù)據(jù)依賴關(guān)系,此外,還與IfStatement jre[1]==“6”具有控制依賴關(guān)系。
程序依賴曲線圖構(gòu)建部275根據(jù)這種程序依賴曲線圖,指定與通過語法分析部274確定的代碼(AST節(jié)點(diǎn))關(guān)聯(lián)的PDG節(jié)點(diǎn)。例如,在語法分析部274指定了在圖5所示的抽象語法樹中通過粗線強(qiáng)調(diào)的AST節(jié)點(diǎn)(setAttribute、location、href)的情況下,程序依賴曲線圖構(gòu)建部275指定通過圖6的粗線強(qiáng)調(diào)的PDG節(jié)點(diǎn)(FunctionCall ifr.setAttribute、Assignment location.href),作為與該AST節(jié)點(diǎn)關(guān)聯(lián)的PDG節(jié)點(diǎn)。
圖2的程序切片部276將從網(wǎng)頁內(nèi)容取得的代碼中的通過程序依賴曲線圖構(gòu)建部275指定的程序依賴曲線圖的節(jié)點(diǎn)(例如,通過圖6的粗線強(qiáng)調(diào)的PDG節(jié)點(diǎn))的語句作為切片基準(zhǔn),并從程序依賴曲線圖中提取出切片。即,程序切片部276使用程序依賴曲線圖上的數(shù)據(jù)依賴關(guān)系(參照圖6的實(shí)線箭頭)使用逆向切片,提取與轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼關(guān)聯(lián)的切片。另外,通常在提取切片時(shí),會考慮到程序依賴曲線圖上的控制依賴關(guān)系,而程序切片部276不考慮程序依賴曲線圖上的控制依賴關(guān)系,而使用考慮到數(shù)據(jù)依賴關(guān)系的逆向切片,由此提取不依賴于代碼的控制語句的切片。
程序切片部276例如使用圖6所示的程序依賴曲線圖,將通過粗線強(qiáng)調(diào)的PDG節(jié)點(diǎn)(FunctionCall ifr.setAttribute、Assignment location.href)的語句作為切片基準(zhǔn)(圖3所示的代碼的第7行的setAttribute():<7,setAttribute>和第11行的location.href:<11,location.href>),并提取切片。例如,程序切片部276根據(jù)切片基準(zhǔn)<7,setAttribute>,將與圖3所示的代碼的第7行的setAttribute的語句具有數(shù)據(jù)依賴關(guān)系的語句中作為切片提取(參照圖7的符號701→符號702)。另外,這里省略了說明,而程序切片部276關(guān)于切片基準(zhǔn)<11,location.href>也同樣地提取切片。
圖2的切片執(zhí)行部277使腳本解釋器部254執(zhí)行通過程序切片部276提取的切片。即,切片執(zhí)行部277使腳本解釋器部254分析通過程序切片部276提取的切片,并在該分析的過程中,監(jiān)視在轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼中使用的對象、對象的屬性、被代入函數(shù)中的值的自變量,提取URL。
例如,考察瀏覽器模擬器25模擬安裝有JRE(注冊商標(biāo))版本7的客戶環(huán)境的情況。這種情況下,切片執(zhí)行部277若使瀏覽器模擬器25的腳本解釋器部254執(zhí)行圖7的符號702所示的切片,監(jiān)視在轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼中使用的對象、對象的屬性、被代入函數(shù)中的值的自變量,則例如從正在監(jiān)視的setAttribute()函數(shù)的自變量2中提取出http://example.com/exploit/?jre=7的URL。
其中,切片執(zhí)行部277以能夠執(zhí)行操作DOM(Document Object Model:文檔對象模型)的代碼的方式,在DOM的讀入完成的時(shí)機(jī)(例如,F(xiàn)irefox(注冊商標(biāo))、Google Chrome(注冊商標(biāo))中的DOMContentLoaded事件即將開始前)執(zhí)行切片。此外,切片執(zhí)行部277以使得執(zhí)行切片的結(jié)果不會對原本的JavaScript(注冊商標(biāo))等的處理帶來影響的方式執(zhí)行切片的時(shí)刻的DOM信息(DOM樹的結(jié)構(gòu)或值)和JavaScript(注冊商標(biāo))的上下文信息(例如,變量定義或函數(shù)定義等)用于切片執(zhí)行而被復(fù)制,在執(zhí)行切片后被廢棄。
此外,瀏覽器模擬器25的訪問部252訪問通過切片的執(zhí)行而被提取的URL(例如,圖8所示的分析信息的“切片”是“1”的URL),由此進(jìn)而取得網(wǎng)頁內(nèi)容,在所取得的網(wǎng)頁內(nèi)容中包含代碼的情況下,與上述同樣地執(zhí)行腳本解釋器部254的腳本的分析、以及語法分析部274、程序依賴曲線圖構(gòu)建部275、程序切片部276和切片執(zhí)行部277的處理。即,瀏覽器模擬器管理器23對通過切片的執(zhí)行而被提取的URL進(jìn)行遞歸的分析。由此,瀏覽器模擬器管理器23能夠更多地提取存在作為攻擊URL或踏板URL的可能性的URL。
另外,可以根據(jù)監(jiān)視對象的對象或?qū)ο蟮膶傩?、函?shù),由系統(tǒng)的管理者等適當(dāng)設(shè)定瀏覽器模擬器管理器23對通過上述的切片的執(zhí)行而被提取的URL是否進(jìn)行遞歸的分析。
(分析信息數(shù)據(jù)庫)
下面說明分析信息數(shù)據(jù)庫24。如上所述,分析信息數(shù)據(jù)庫24存儲分析信息。分析信息例如圖8所示,是將作為分析信息的識別信息的分析ID、作為瀏覽器模擬器25訪問分析對象網(wǎng)站的URL時(shí)所訪問的URL的“訪問URL”、表示訪問該URL的日期時(shí)間的“時(shí)戳”、表示該URL是否為通過程序切片而被提取的URL的“切片”等對應(yīng)起來的信息。另外,該分析信息中的“切片”的項(xiàng)目為“1”的URL表示該URL是通過程序切片被提取的URL,“切片”的項(xiàng)目為“0”的URL表示該URL不是通過程序切片被提取的URL。此外,“訪問URL”不僅包含分析對象網(wǎng)站的URL,還包含通過對該URL的訪問而被轉(zhuǎn)發(fā)的網(wǎng)站的URL。另外,分析信息當(dāng)然還可以包含上述以外的信息。
根據(jù)以上說明的系統(tǒng),全面地搜索從網(wǎng)頁內(nèi)容中取得的代碼,確定轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼。并且,從該確定的轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼中提取URL。其結(jié)果是,系統(tǒng)能夠提取出在依賴于客戶的環(huán)境進(jìn)行的路過式下載攻擊中存在作為攻擊URL或踏板URL的可能性的URL。
(處理步驟)
下面,使用圖9,說明系統(tǒng)的處理步驟的示例。首先,URL列表制作部271制作巡回對象URL列表(S1)。例如,URL列表制作部271根據(jù)被公開的惡性網(wǎng)站的黑名單制作巡回對象URL列表。
并且,訪問指示部272對瀏覽器模擬器25輸入巡回對象URL列表的URL(S2),瀏覽器模擬器25訪問通過訪問部252在S2輸入的URL(S3)。并且,訪問部252從訪問目的地的URL取得網(wǎng)頁內(nèi)容。
另外,在S2中,訪問指示部272既可以使1個(gè)瀏覽器模擬器25訪問多個(gè)URL,也可以使多個(gè)瀏覽器模擬器25分別訪問不同的URL。
在S3之后,瀏覽器模擬器25的HTML/CSS分析庫253分析所取得的網(wǎng)頁內(nèi)容,如果在腳本解釋器部254所取得的網(wǎng)頁內(nèi)容中包含代碼,則分析該代碼,在程序分析部273中進(jìn)行代碼分析(S4)。該代碼分析的詳細(xì)情況在后文描述。
在S4之后,訪問部252輸出訪問日志(S5)。即,訪問部252將對于通過訪問指示部272被輸入的URL的訪問結(jié)果作為訪問日志輸出。并且,登記處理部278對在S5中輸出的訪問日志、通過S4的代碼分析被輸出的URL進(jìn)行整形(S6),將被整形后的數(shù)據(jù)蓄積在分析信息數(shù)據(jù)庫24(參照圖8)中(S7)。
這里,如果被設(shè)定有對通過切片執(zhí)行部277的切片的執(zhí)行而被提取的URL進(jìn)行分析的內(nèi)容(S8的Yes),則訪問指示部272從分析信息數(shù)據(jù)庫24的分析信息中讀出通過切片的執(zhí)行而被提取的URL,將該URL作為巡回對象URL的URL進(jìn)行S2起的處理。即,瀏覽器模擬器管理器23對通過切片的執(zhí)行而被提取的URL進(jìn)行遞歸的分析。
另外,在S8中如果未設(shè)定對通過切片的執(zhí)行而被提取的URL進(jìn)行分析的內(nèi)容(S8的No),在巡回對象URL列表中存在下一個(gè)巡回URL(S9的Yes),則返回S2。另一方面,如果在巡回對象URL列表中不存在下一個(gè)巡回URL(S9的No),則結(jié)束處理。
如上所述在分析信息數(shù)據(jù)庫24中蓄積有分析信息時(shí),URL分析部279進(jìn)行分析信息的URL的分析處理,例如提取作為攻擊URL或踏板URL的可能性較高的URL。
下面,使用圖10和圖11,具體說明圖9的S4的代碼分析處理。這里,舉例說明在語法分析部274進(jìn)行代碼的語法分析時(shí),使用抽象語法樹(參照圖5)的情況。
首先,語法分析部274將從網(wǎng)頁內(nèi)容中取得的代碼變換為抽象語法樹(參照圖5)(圖10的S11)。這里,在抽象語法樹上存在成為搜索對象的抽象語法樹節(jié)點(diǎn)的情況下(S12的Yes),程序依賴曲線圖構(gòu)建部275構(gòu)建程序依賴曲線圖(參照圖6)(S13)。另一方面,在抽象語法樹上不存在成為搜索對象的抽象語法樹節(jié)點(diǎn)的情況下(S12的No),進(jìn)入圖11的S18。
此外,在S13之后,成為搜索對象的抽象語法樹節(jié)點(diǎn)是與轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼關(guān)聯(lián)的節(jié)點(diǎn)的情況下(S14的Yes),程序依賴曲線圖構(gòu)建部275確定與該抽象語法樹節(jié)點(diǎn)關(guān)聯(lián)的程序依賴曲線圖節(jié)點(diǎn)(S15)。并且,程序依賴曲線圖構(gòu)建部275將在S15中確定的程序依賴曲線圖節(jié)點(diǎn)作為用于切片基準(zhǔn)的節(jié)點(diǎn)進(jìn)行保持(S16)。另一方面,在S14中成為搜索對象的抽象語法樹節(jié)點(diǎn)是與轉(zhuǎn)發(fā)代碼、內(nèi)容取得代碼都不相關(guān)聯(lián)的節(jié)點(diǎn)的情況下(S14的No),進(jìn)入S17。
在S17中程序依賴曲線圖構(gòu)建部275判斷為存在成為下一個(gè)搜索對象的抽象語法樹節(jié)點(diǎn)時(shí)(S17的Yes),返回S13。另一方面,在判斷為不存在成為下一個(gè)搜索對象的抽象語法樹節(jié)點(diǎn)時(shí)(S17的No),進(jìn)入圖11的S18。
在圖11的S18中,程序依賴曲線圖構(gòu)建部275在判斷為存在作為切片基準(zhǔn)而保持的程序依賴曲線圖節(jié)點(diǎn)時(shí)(S18的Yes),程序切片部276將在S16中保持的程序依賴曲線圖節(jié)點(diǎn)的語句作為切片基準(zhǔn),進(jìn)行切片的提取(S19)。另外,在S18中,程序依賴曲線圖構(gòu)建部275判斷為不存在作為切片基準(zhǔn)保持的程序依賴曲線圖節(jié)點(diǎn)時(shí)(S18的No),結(jié)束處理。
在S19之后,切片執(zhí)行部277執(zhí)行在S19中被提取的切片(S20),從在轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼中使用的對象或?qū)ο蟮膶傩?、被代入函?shù)中的值或自變量中提取URL并輸出(S21)。在S21之后,如果還存在成為下一個(gè)切片基準(zhǔn)的程序依賴曲線圖節(jié)點(diǎn)(S22的Yes),則返回S19,如果不存在成為下一個(gè)切片基準(zhǔn)的程序依賴曲線圖節(jié)點(diǎn)(S22的No),則結(jié)束處理。
根據(jù)以上說明的系統(tǒng),全面地搜索從網(wǎng)頁內(nèi)容取得的代碼,確定轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼。并且,從該確定的轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼中提取URL。其結(jié)果是,系統(tǒng)能夠提取出在依賴于客戶的環(huán)境進(jìn)行的路過式下載攻擊中存在作為攻擊URL或踏板URL的可能性的URL。
另外,在語法分析部274確定的對象、對象的屬性、函數(shù)不限于與轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼有關(guān)的內(nèi)容,可以根據(jù)目的適當(dāng)變更。
此外,在程序依賴曲線圖構(gòu)建部275中,JavaScript(注冊商標(biāo))代碼的語句中的作為程序依賴曲線圖上的程序依賴曲線圖節(jié)點(diǎn)的語句是變量定義語句、代入語句、函數(shù)定義語句、函數(shù)執(zhí)行語句、返回語句、條件分支語句、循環(huán)語句、例外處理語句等,而除此以外還可以由系統(tǒng)的管理者等適當(dāng)追加、變更。
另外,作為程序分析部273進(jìn)行代碼分析的結(jié)果而輸出的信息可以是URL以外的信息。例如,如果事先得知用于攻擊代碼的對象或?qū)ο蟮膶傩?、函?shù)的信息,則程序分析部273可以使用這些信息確定攻擊代碼,輸出在所確定的攻擊代碼中使用的各種信息。
此外,系統(tǒng)使用瀏覽器模擬器25訪問分析對象網(wǎng)站12,然而也可以使用瀏覽器模擬器25以外(例如,實(shí)際的客戶環(huán)境)訪問分析對象網(wǎng)站12。
此外,系統(tǒng)的程序切片部276未考慮通過程序依賴曲線圖構(gòu)建部275而構(gòu)建的程序依賴曲線圖上的控制依賴關(guān)系,而根據(jù)數(shù)據(jù)依賴關(guān)系提取切片,然而不限于此。例如,程序切片部276可以使用程序依賴曲線圖上的控制依賴關(guān)系的一部分和數(shù)據(jù)依賴關(guān)系提取切片。進(jìn)而,程序切片部276使用程序依賴曲線圖提取切片,然而只要能夠把握各代碼的控制依賴關(guān)系和數(shù)據(jù)依賴關(guān)系,則可以不使用程序依賴曲線圖。
[第2實(shí)施方式]
下面,使用圖12說明第2實(shí)施方式的系統(tǒng)的結(jié)構(gòu)例。在第2實(shí)施方式中,說明考慮到控制依賴關(guān)系的切片的提取方法以及為進(jìn)行轉(zhuǎn)發(fā)而確定必要的客戶環(huán)境的方法。第2實(shí)施方式的特征在于,具有:執(zhí)行路徑搜索部270a,其在所提取的切片中包含執(zhí)行路徑的情況下,為了全面地提取URL,按照每個(gè)執(zhí)行路徑提取切片;以及程序切片部276a,其為了對為向存在所提取的攻擊URL或踏板URL的可能性的URL轉(zhuǎn)發(fā)而需要的客戶環(huán)境進(jìn)行確定,將表示程序依賴曲線圖上的條件分支語句的節(jié)點(diǎn)也作為切片基準(zhǔn)添加。例如圖12所示,系統(tǒng)具有網(wǎng)絡(luò)1a和網(wǎng)絡(luò)2a。網(wǎng)絡(luò)1a和網(wǎng)絡(luò)2a通過分組轉(zhuǎn)發(fā)裝置3a而被連接起來。
網(wǎng)絡(luò)1a具有分析對象網(wǎng)站12a。網(wǎng)絡(luò)1a既可以是如因特網(wǎng)那樣廣域的網(wǎng)絡(luò),也可以是如法人網(wǎng)絡(luò)那樣的中小規(guī)模的網(wǎng)絡(luò)或云環(huán)境以及托管環(huán)境的網(wǎng)絡(luò)。
分析對象網(wǎng)站12a是瀏覽器模擬器管理器(分析裝置)23a的分析對象的網(wǎng)站。該分析對象網(wǎng)站12a例如是被登載在被公開的惡性網(wǎng)站的黑名單上的網(wǎng)站等。
此外,網(wǎng)絡(luò)2a具有瀏覽器模擬器管理器23a和分析信息數(shù)據(jù)庫24a。網(wǎng)絡(luò)2a既可以是如局域網(wǎng)那樣的小規(guī)模的網(wǎng)絡(luò),也可以是如法人網(wǎng)絡(luò)那樣的中小規(guī)模的網(wǎng)絡(luò)或云環(huán)境以及托管環(huán)境的網(wǎng)絡(luò)。
瀏覽器模擬器管理器23a管理1個(gè)以上的瀏覽器模擬器25a,使這些瀏覽器模擬器25a訪問規(guī)定的網(wǎng)站(分析對象網(wǎng)站12a)。并且,瀏覽器模擬器管理器23a將瀏覽器模擬器25a所訪問的網(wǎng)站的URL或通過從該網(wǎng)站取得的代碼的分析而得到的URL等蓄積在分析信息數(shù)據(jù)庫24a中。
瀏覽器模擬器25a是模擬瀏覽器的動(dòng)作的裝置。該瀏覽器模擬器25a例如可使用Honeynet工程提供的瀏覽器模擬器(參照http://www.honeynet.org/node/827)或作為開放源代碼而被開發(fā)的HtmlUnit或Selenium。該瀏覽器模擬器25a的詳細(xì)情況在后語句描述。另外,圖12中瀏覽器模擬器25a被描繪為構(gòu)建在瀏覽器模擬器管理器23a內(nèi),然而當(dāng)然也可以被構(gòu)建在瀏覽器模擬器管理器23a外。
分析信息數(shù)據(jù)庫24a蓄積(保存)瀏覽器模擬器25a所訪問的網(wǎng)站的URL或通過從該網(wǎng)站取得的代碼的分析而得到的URL等。作為該分析信息數(shù)據(jù)庫24a的數(shù)據(jù)的保存,既可以使用RDBMS(Relational DataBase Management System:關(guān)系數(shù)據(jù)庫管理系統(tǒng)),也可以通過文本形式保存。該分析信息數(shù)據(jù)庫24a的詳細(xì)情況在后文描述。
另外,在本實(shí)施方式中,將瀏覽器模擬器25a、瀏覽器模擬器管理器23a和分析信息數(shù)據(jù)庫24a配置在同一網(wǎng)絡(luò)中,然而也可以將它們分別配置在不同的網(wǎng)絡(luò)中。此外,將各結(jié)構(gòu)與安全裝置連接起來,因此可以使用現(xiàn)存的加密技術(shù)對通信信息進(jìn)行加密,或者將配置有各裝置的網(wǎng)絡(luò)間或各結(jié)構(gòu)間通過VPN(Virtual Private Network:虛擬專用網(wǎng)絡(luò))連接起來。
下面,使用圖13具體說明瀏覽器模擬器管理器23a和瀏覽器模擬器25a。瀏覽器模擬器管理器23a具有瀏覽器模擬器25a和控制部27a??刂撇?7a在主系統(tǒng)26a上使瀏覽器模擬器25a進(jìn)行動(dòng)作。該主系統(tǒng)26a例如使用瀏覽器模擬器管理器23a具有的OS??刂撇?7a的詳細(xì)情況在后文描述。
(瀏覽器模擬器)
下面,說明瀏覽器模擬器25a。瀏覽器模擬器25a具有客戶環(huán)境模擬部251a、訪問部252a、HTML/CSS(HyperText Markup Language/Cascading Style Sheets:超文本標(biāo)記語言/層疊樣式表)分析庫253a和腳本解釋器部254a。
客戶環(huán)境模擬部251a設(shè)定瀏覽器模擬器25a應(yīng)模擬的客戶環(huán)境(例如,OS、瀏覽器、插件等)的信息。
訪問部252a進(jìn)行基于網(wǎng)站(例如,圖12的分析對象網(wǎng)站12a)和HTTP(HyperText Transfer Protocol:超文本傳輸協(xié)議)或HTTPS(HyperText Transfer Protocol Secure:安全超文本傳輸協(xié)議)的通信,并從該網(wǎng)站取得網(wǎng)頁內(nèi)容。這里,訪問部252a在基于HTTP或HTTPS的通信時(shí),在HTTP報(bào)頭的User-Agent字段上使用通過客戶環(huán)境模擬部251a設(shè)定的客戶環(huán)境。由此瀏覽器模擬器25a模擬客戶環(huán)境。該訪問部252a例如使用作為自由軟件而被開發(fā)的cURL。
此外,訪問部252a將對網(wǎng)站的訪問結(jié)果記錄在訪問日志中。例如,訪問部252a將所訪問的網(wǎng)站的URL或訪問的日期時(shí)間記錄在訪問日志中。此外,訪問部252a在對該網(wǎng)站訪問的結(jié)果是轉(zhuǎn)移到其他網(wǎng)站的情況下,也將該轉(zhuǎn)移目的地的URL等記錄在訪問日志中。
HTML/CSS分析庫253a是對通過訪問部252a取得的網(wǎng)頁內(nèi)容進(jìn)行分析的內(nèi)容分析庫。此外,HTML/CSS分析庫253a在對網(wǎng)頁內(nèi)容進(jìn)行分析的結(jié)果是在該網(wǎng)頁內(nèi)容中包含代碼的情況下,使用腳本解釋器部254a分析代碼。
腳本解釋器部254a對網(wǎng)頁內(nèi)容中包含的代碼進(jìn)行分析。例如,代碼通過JavaScript(注冊商標(biāo))而被記述的情況下,腳本解釋器部254a使用作為開放源代碼而被開發(fā)的SpiderMonkey或V8JavaScript(注冊商標(biāo))Engine等的JavaScript(注冊商標(biāo))解釋器、通過Java(注冊商標(biāo))記述的作為JavaScript(注冊商標(biāo))解釋器的Rhino等分析代碼。
(控制部)
下面,說明控制部27a??刂撇?7a具有URL列表制作部271a、訪問指示部272a、程序分析部273a、登記處理部278a和URL分析部279a。
URL列表制作部271a制作作為各瀏覽器模擬器25a巡回的網(wǎng)站(分析對象網(wǎng)站12a)的URL列表的巡回對象URL列表。例如,URL列表制作部271a根據(jù)在被公開的惡性網(wǎng)站的黑名單上登載的網(wǎng)站的URL制作巡回對象URL列表。
訪問指示部272a對各瀏覽器模擬器25a的訪問部252a指示向通過巡回對象URL列表(URL列表)示出的URL的訪問。
程序分析部273a進(jìn)行在從訪問目的地的網(wǎng)站取得的網(wǎng)頁內(nèi)容中包含的程序(代碼)的分析。該程序分析部273a的詳細(xì)情況在后文描述。
登記處理部278a取得各瀏覽器模擬器25a的訪問日志,并將其登記在分析信息數(shù)據(jù)庫24a中。此外,登記處理部278a將通過程序分析部273a的代碼的分析(后述的切片的執(zhí)行)而得到的URL或客戶環(huán)境信息(環(huán)境信息)登記在分析信息數(shù)據(jù)庫24a中。
URL分析部279a分析被蓄積在分析信息數(shù)據(jù)庫24a中的訪問日志或通過代碼分析得到的URL(分析信息),并輸出該分析結(jié)果。例如,URL分析部279a從訪問日志中包含的URL或通過代碼分析得到的URL中提取存在作為攻擊URL或踏板URL的可能性的URL并輸出。
(程序分析部)
下面,具體說明程序分析部273a。程序分析部273a具有語法分析部274a、程序依賴曲線圖構(gòu)建部275a、程序切片部276a、切片執(zhí)行部277a和執(zhí)行路徑搜索部270a。
語法分析部274a進(jìn)行在通過瀏覽器模擬器25a取得的網(wǎng)頁內(nèi)容中包含的代碼的語法分析。具體而言,在瀏覽器模擬器25a的腳本解釋器部254a分析網(wǎng)頁內(nèi)容中包含的代碼的腳本的過程中,進(jìn)行腳本的語法分析,根據(jù)網(wǎng)頁內(nèi)容中包含的代碼確定發(fā)往其他網(wǎng)站的轉(zhuǎn)發(fā)代碼。
下面說明該語法分析的具體例。這里的分析對象的代碼例如是通過圖14所示的JavaScript(注冊商標(biāo))記述的代碼。另外,圖14所示的代碼是在根據(jù)在客戶端安裝的Java(注冊商標(biāo))的版本信息而執(zhí)行條件分支語句后,執(zhí)行向其他網(wǎng)站的轉(zhuǎn)發(fā)的腳本轉(zhuǎn)發(fā)代碼。此外,被語法分析部274a作為特定對象的轉(zhuǎn)發(fā)代碼例如是圖15的符號401a所示的腳本轉(zhuǎn)發(fā)代碼。另外,圖15的符號402a所示的標(biāo)簽轉(zhuǎn)發(fā)代碼是根據(jù)在規(guī)定的HTML標(biāo)簽中被代入規(guī)定的屬性名中的URL,取得外部內(nèi)容的代碼。在該標(biāo)簽轉(zhuǎn)發(fā)代碼中使用的HTML標(biāo)簽與指定其外部內(nèi)容的URL的屬性名的對例如是圖15的符號403a所示的HTML標(biāo)簽和屬性名的對。與這些代碼有關(guān)的信息(特定對象代碼信息)被存儲在瀏覽器模擬器管理器23a的存儲部(省略圖示)的規(guī)定區(qū)域內(nèi),可由系統(tǒng)管理者等適當(dāng)設(shè)定。
例如,語法分析部274a使用抽象語法樹將代碼變換為樹結(jié)構(gòu)數(shù)據(jù),通過搜索樹結(jié)構(gòu)數(shù)據(jù)而確定轉(zhuǎn)發(fā)代碼。另外,關(guān)于該使用抽象語法樹的數(shù)據(jù)變換或轉(zhuǎn)發(fā)代碼確定等的分析手法,例如可以使用非專利文獻(xiàn)3的技術(shù)。語法分析部274a通過抽象語法樹的全面性搜索,例如確定在圖15所示的轉(zhuǎn)發(fā)代碼中使用的對象或?qū)ο蟮膶傩?、函?shù)。在圖14所示的代碼中,第14行的location.href成為確定對象。
另外,語法分析部274a還可以通過上述的方法以外的方法進(jìn)行語法分析。此外,圖14和圖15是用于說明程序分析部273a而示出的例子,并不限定于此。
圖13的程序依賴曲線圖構(gòu)建部275a在語法分析部274a的語法分析時(shí),構(gòu)建將從網(wǎng)頁內(nèi)容取得的代碼的各語句作為節(jié)點(diǎn),示出節(jié)點(diǎn)間的數(shù)據(jù)依賴關(guān)系和控制依賴關(guān)系的程序依賴曲線圖。并且,程序依賴曲線圖構(gòu)建部275a使用所構(gòu)建的程序依賴曲線圖,確定與通過語法分析部274a確定的轉(zhuǎn)發(fā)代碼關(guān)聯(lián)的節(jié)點(diǎn)。
例如,程序依賴曲線圖構(gòu)建部275a構(gòu)建出以JavaScript(注冊商標(biāo))代碼中的變量定義語句、代入語句、函數(shù)定義語句、函數(shù)執(zhí)行語句、返回語句、條件分支語句、循環(huán)語句、例外處理語句等作為程序依賴曲線圖(Program Dependence Graph)上的節(jié)點(diǎn)(以下,稱作PDG節(jié)點(diǎn)),將節(jié)點(diǎn)間的數(shù)據(jù)依賴關(guān)系或控制依賴關(guān)系作為邊界(以下,稱作PDG邊界)的程序依賴曲線圖。
例如,程序依賴曲線圖構(gòu)建部275a根據(jù)圖14所示的代碼,構(gòu)建圖16所示的程序依賴曲線圖。下面說明在圖16所示的程序依賴曲線圖的各PDG節(jié)點(diǎn)上記述的標(biāo)簽。VariableInitializer表示變量定義,一并記述成為定義對象的變量名。IfStatement和Assignment分別表示條件語句、變量代入,一并記述條件式或變量名。此外,在PDG節(jié)點(diǎn)上記述的編號表示圖14所示的代碼的行數(shù)。通過圖16所示的程序依賴曲線圖的實(shí)線箭頭示出的PDG邊界表示數(shù)據(jù)依賴關(guān)系,通過虛線箭頭示出的PDG邊界表示控制依賴關(guān)系。
例如,在圖16所示的程序依賴曲線圖中,IfStatement jre[1]==“6”表示與VariableInitializer jre具有數(shù)據(jù)依賴關(guān)系,此外,IfStatement jre[1]==“6”表示與Assignment url和IfStatement jre[1]==“7”具有控制依賴關(guān)系。
程序依賴曲線圖構(gòu)建部275a根據(jù)這種程序依賴曲線圖,確定與通過語法分析部274a確定的代碼關(guān)聯(lián)的PDG節(jié)點(diǎn)。例如,語法分析部274a根據(jù)圖14所示的代碼確定了第14行的location.href的情況下,程序依賴曲線圖構(gòu)建部275a確定通過圖16的粗線強(qiáng)調(diào)的PDG節(jié)點(diǎn)(Assignment location.href)。
圖13的程序切片部276a以從網(wǎng)頁內(nèi)容取得的代碼中的通過程序依賴曲線圖構(gòu)建部275a確定的程序依賴曲線圖的節(jié)點(diǎn)(例如,通過圖16的粗線強(qiáng)調(diào)的PDG節(jié)點(diǎn))的語句作為切片基準(zhǔn),從程序依賴曲線圖中提取出切片。
另外,一般在提取切片時(shí),遞歸性地跟蹤程序依賴曲線圖上的數(shù)據(jù)依賴關(guān)系和控制依賴關(guān)系。然而,本實(shí)施方式的程序切片部276a首先遞歸性地跟蹤程序依賴曲線圖上的數(shù)據(jù)依賴關(guān)系,由此提取與變量的定義參照關(guān)聯(lián)的語句(節(jié)點(diǎn)),接著在規(guī)定數(shù)以下(例如,一次)跟蹤控制依賴關(guān)系,由此提取與所提取的語句的控制流程關(guān)聯(lián)的語句,將所提取的語句作為切片。此時(shí),在所提取的切片中包含函數(shù)定義語句(function語句)的情況下,通過程序切片部276a一并提取出相應(yīng)的函數(shù)調(diào)用語句。此外,在函數(shù)定義語句中包含自變量的情況下,程序切片部276a同樣提取與相應(yīng)的函數(shù)調(diào)用語句的自變量存在關(guān)聯(lián)的語句。
另外,這里關(guān)于控制依賴關(guān)系進(jìn)行規(guī)定數(shù)以下(例如,一次)跟蹤的原因在于,如果對控制依賴關(guān)系遞歸性跟蹤,則存在將與切片基準(zhǔn)(關(guān)注的語句,例如,圖16的Assignment location.href)關(guān)聯(lián)較少的語句也被提取的可能性。即,本實(shí)施方式的程序切片部276a在對程序依賴曲線圖上的數(shù)據(jù)依賴關(guān)系遞歸地跟蹤后,對控制依賴關(guān)系限制在規(guī)定數(shù)以下(例如,一次)進(jìn)行跟蹤,由此能夠提取出與切片基準(zhǔn)(關(guān)注的語句、例如圖16的Assignment location.href)關(guān)聯(lián)較高的語句。
程序切片部276a例如使用圖16所示的程序依賴曲線圖,將通過粗線強(qiáng)調(diào)的PDG節(jié)點(diǎn)(Assignment location.href)的語句作為切片基準(zhǔn)(相當(dāng)于圖14所示的代碼的第14行的location.href:<14,location.href>),提取切片。例如,程序切片部276a根據(jù)切片基準(zhǔn)<14,location.href>,首先與圖14所示的代碼的第14行的location.href的語句遞歸地考慮數(shù)據(jù)依賴關(guān)系,提取PDG節(jié)點(diǎn),接著,提取僅考慮了一次控制依賴關(guān)系的PDG節(jié)點(diǎn)(即,從圖16所示的程序依賴曲線圖中提取出圖17所示的PDG節(jié)點(diǎn))。并且,程序切片部276a例如根據(jù)圖17所示的PDG節(jié)點(diǎn),提取圖18的符號701a→符號702a所示的切片。
圖13的執(zhí)行路徑搜索部270a在通過程序切片部276a提取的切片中包含多個(gè)執(zhí)行路徑的情況下(即,在考慮到控制依賴關(guān)系時(shí)包含條件分支語句等的情況下),通過語法分析部274a對該切片進(jìn)行語法分析,由此提取每個(gè)執(zhí)行路徑的切片。即,執(zhí)行路徑搜索部270a使語法分析部274a對搜索對象代碼(切片)進(jìn)行語法分析,在語法分析的過程中,確定了基于條件分支語句等的多個(gè)執(zhí)行路徑時(shí),提取各個(gè)執(zhí)行路徑的切片,由此提取不依賴于控制流程的切片。例如,執(zhí)行路徑搜索部270a從圖19的符號801a(或圖18的符號702a)所示的代碼(切片)中,提取出圖19的符號802a~804a所示的3個(gè)切片。
另外,執(zhí)行路徑搜索部270a不依賴于控制流程而提取切片,因此分別生成將條件分支語句或循環(huán)語句、例外處理語句等削除后的切片。
圖13的切片執(zhí)行部277a使腳本解釋器部254a執(zhí)行通過程序切片部276a或執(zhí)行路徑搜索部270a提取的切片。即,切片執(zhí)行部277a使腳本解釋器部254a分析通過程序切片部276a或執(zhí)行路徑搜索部270a提取的切片,并在該分析的過程中,監(jiān)視在轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼中使用的對象、對象的屬性、被代入函數(shù)中的值的自變量,提取URL。
例如,切片執(zhí)行部277a使瀏覽器模擬器25a的腳本解釋器部254a分別執(zhí)行圖19的符號802a~804a所示的切片,監(jiān)視在轉(zhuǎn)發(fā)代碼中使用的對象或函數(shù)的自變量、屬性的代入值,例如從所監(jiān)視的location.href屬性中提取出http://A.example/mal1/、http://A.example/mal2/、http://B.example/benign/的URL。
其中,切片執(zhí)行部277a以能夠執(zhí)行操作DOM(Document Object Model:文檔對象模型)的代碼的方式,在DOM的讀入完成的時(shí)機(jī)(例如,F(xiàn)irefox(注冊商標(biāo))、Google Chrome(注冊商標(biāo))中的DOMContentLoaded事件即將開始前)執(zhí)行切片。此外,切片執(zhí)行部277a以使得執(zhí)行切片的結(jié)果不會對原本的JavaScript(注冊商標(biāo))等的處理帶來影響的方式執(zhí)行切片的時(shí)刻的DOM信息(DOM樹的結(jié)構(gòu)或值)和JavaScript(注冊商標(biāo))的上下文信息(例如,變量定義或函數(shù)定義等)用于切片執(zhí)行而被復(fù)制,在執(zhí)行切片后被廢棄。
此外,瀏覽器模擬器25a的訪問部252a訪問通過切片的執(zhí)行而被提取的URL(例如,圖22所示的分析信息的“切片”是“1”的URL),由此進(jìn)而取得網(wǎng)頁內(nèi)容,在所取得的網(wǎng)頁內(nèi)容中包含代碼的情況下,與上述同樣地執(zhí)行腳本解釋器部254a的腳本的分析、以及語法分析部274a、程序依賴曲線圖構(gòu)建部275a、程序切片部276a、執(zhí)行路徑搜索部270a和切片執(zhí)行部277a的處理。即,瀏覽器模擬器管理器23a對通過切片的執(zhí)行而被提取的URL進(jìn)行遞歸的分析。由此,瀏覽器模擬器管理器23a能夠更多地提取存在作為攻擊URL或踏板URL的可能性的URL。
另外,可以根據(jù)監(jiān)視對象的對象或?qū)ο蟮膶傩?、函?shù),由系統(tǒng)的管理者等適當(dāng)設(shè)定瀏覽器模擬器管理器23a是否對通過上述的切片的執(zhí)行而被提取的URL進(jìn)行遞歸的分析。
根據(jù)以上說明的程序分析部273a,全面地分析從網(wǎng)頁內(nèi)容取得的代碼,確定轉(zhuǎn)發(fā)代碼。并且,從該確定的轉(zhuǎn)發(fā)代碼中提取出URL。此外,該程序分析部273a確定用于向所提取的URL轉(zhuǎn)發(fā)而需要的客戶環(huán)境信息。下面說明該程序分析部273a的客戶環(huán)境信息的確定。
(客戶環(huán)境信息的確定)
程序分析部273a在通過切片執(zhí)行部277a能夠提取URL的情況下,在通過程序切片部276a提取出的切片內(nèi)包含條件分支語句時(shí),將該條件分支語句作為切片基準(zhǔn)。并且,程序切片部276a使用該切片基準(zhǔn)提取切片,通過切片執(zhí)行部277a執(zhí)行所提取的切片。其結(jié)果是,在網(wǎng)頁內(nèi)容中包含的代碼中,如果通過能夠提取出URL的轉(zhuǎn)發(fā)代碼前段的條件分支語句進(jìn)行了使用客戶環(huán)境信息的條件判定,則可知該轉(zhuǎn)發(fā)代碼是依賴于客戶環(huán)境的轉(zhuǎn)發(fā)代碼。
在這種使用客戶環(huán)境信息的條件分支語句中,為了評價(jià)瀏覽器或插件的主版本和子版本,在與使用字符串操作函數(shù)的版本信息的分割進(jìn)行了結(jié)合后,大多進(jìn)行條件判定(參照圖14所示的代碼的第2行的語句或非專利文獻(xiàn)5)。因此,切片執(zhí)行部277a使腳本解釋器部254a分析通過程序切片部276a提取的切片,在該分析的過程中,監(jiān)視與在切片中使用的字符串操作等關(guān)聯(lián)的對象或函數(shù)的自變量、屬性的代入值,由此確定基于切片的執(zhí)行的客戶環(huán)境信息的使用。即,切片執(zhí)行部277a將所提取的URL與向該URL的轉(zhuǎn)發(fā)所需的客戶環(huán)境信息關(guān)聯(lián)起來。
例如,在將圖18的符號702a(或圖19的符號801a)所示的切片中包含的條件分支語句作為切片基準(zhǔn)(圖18的符號702a所示的代碼的第5行的if語句:相當(dāng)于<5,if>)的情況下,成為提取對象的PDG節(jié)點(diǎn)在圖20中示出。另外,在此省略了說明,而程序切片部276a對于切片基準(zhǔn)<8,if>也同樣地提取切片。
并且,程序切片部276a例如根據(jù)圖20所示的PDG節(jié)點(diǎn),提取圖21的符號1001a→符號1002a所示的切片。
例如,考察瀏覽器模擬器25a模擬被安裝有Java(注冊商標(biāo))的版本“1.6.0.22”的客戶環(huán)境的情況。這種情況下,切片執(zhí)行部277a使瀏覽器模擬器25a的腳本解釋器部254a執(zhí)行圖21的符號1002a所示的切片,監(jiān)視與字符串操作等關(guān)聯(lián)的對象或函數(shù)的自變量、屬性的代入值。并且,確定為通過切片執(zhí)行部277a監(jiān)視的作為與字符串操作關(guān)聯(lián)的函數(shù)的split函數(shù)的String對象是“1.6.0.22”的Java(注冊商標(biāo))的版本值,由此能夠確定為在所提取的切片的執(zhí)行中使用了Java(注冊商標(biāo))的環(huán)境信息。
另外,切片執(zhí)行部277a在確定網(wǎng)頁內(nèi)容中包含的代碼的客戶環(huán)境信息的使用時(shí),例如既可以根據(jù)通過瀏覽器模擬器25a模擬的客戶環(huán)境的名稱信息或版本信息的完全一致來進(jìn)行確定,也可以生成使用了正規(guī)表現(xiàn)的客戶信息的簽名,通過該簽名進(jìn)行確定。
其中,切片執(zhí)行部277a與URL的提取時(shí)同樣地,復(fù)制執(zhí)行切片的時(shí)刻的DOM信息和JavaScript(注冊商標(biāo))的上下文信息以用于切片執(zhí)行,并在執(zhí)行了切片后將其廢棄。另外,在切片執(zhí)行時(shí)監(jiān)視的函數(shù)或?qū)傩圆幌抻谏鲜鰞?nèi)容,也可以由系統(tǒng)管理者等適當(dāng)追加或刪除監(jiān)視對象的函數(shù)或?qū)傩浴?/p>
此外,作為與所提取的URL關(guān)聯(lián)的客戶環(huán)境信息的確定方法,還存在使用在URL中使用的文件擴(kuò)展符信息的方法或使用在標(biāo)簽轉(zhuǎn)發(fā)代碼中使用的HTML標(biāo)簽信息的方法。該使用文件擴(kuò)展符信息的方法中,例如在URL是使用“.jar”的文件擴(kuò)展符的URL的情況下,能夠?qū)⒃揢RL確定為與Java(注冊商標(biāo))關(guān)聯(lián)的URL。此外,在使用HTML標(biāo)簽信息的方法中,例如在標(biāo)簽轉(zhuǎn)發(fā)代碼是使用object標(biāo)簽的代碼的情況下,對data屬性指定URL,對type屬性指定MIME類型。因此,在type屬性例如是“application/pdf”的情況下,能夠?qū)⒈恢付ńodata屬性的URL確定為與PDF關(guān)聯(lián)的URL。
這樣使用文件擴(kuò)展符信息或HTML標(biāo)簽信息的與URL關(guān)聯(lián)的客戶環(huán)境信息的確定方法可以與上述的程序分析部273a的確定方法一并使用。由此,程序分析部273a可增加能夠確定客戶環(huán)境信息的URL數(shù)。
(分析信息數(shù)據(jù)庫)
下面說明分析信息數(shù)據(jù)庫24a。如上所述,分析信息數(shù)據(jù)庫24a存儲分析信息。分析信息例如圖22所示,是將作為分析信息的識別信息的“分析ID”、作為瀏覽器模擬器25a訪問分析對象網(wǎng)站的URL時(shí)所訪問的URL的“訪問URL”、表示訪問該URL的日期時(shí)間的“時(shí)戳”、表示該URL是否為通過程序切片被提取的URL的“切片”、以及在該URL是依賴于客戶環(huán)境而被轉(zhuǎn)發(fā)的URL的情況下,表示為進(jìn)行轉(zhuǎn)發(fā)而需要的客戶環(huán)境信息的“環(huán)境信息”等對應(yīng)起來的信息。
另外,該分析信息中的“切片”的項(xiàng)目是“1”的URL表示相應(yīng)URL是通過程序切片而被提取的URL,“切片”的項(xiàng)目是“0”的URL表示該URL并非通過程序切片而被提取的URL(即,是通過通常訪問而被提取的URL)。此外,“訪問URL”不僅包含分析對象網(wǎng)站的URL,還包含通過對該URL的訪問而被轉(zhuǎn)發(fā)的網(wǎng)站的URL。另外,分析信息還可以包含上述以外的信息。
根據(jù)以上說明的系統(tǒng),能夠根據(jù)從網(wǎng)頁內(nèi)容取得的代碼全面地提取URL。其結(jié)果是,系統(tǒng)能夠提取出在依賴于客戶環(huán)境進(jìn)行的路過式下載攻擊中存在作為攻擊URL或踏板URL的可能性的URL。此外,系統(tǒng)還能夠確定為向所提取的URL轉(zhuǎn)發(fā)而需要的客戶環(huán)境信息。
(處理步驟)
下面,使用圖23,說明系統(tǒng)的處理步驟的示例。首先,URL列表制作部271a制作巡回對象URL列表(S101)。例如,URL列表制作部271a根據(jù)所公開的惡性網(wǎng)站的黑名單制作巡回對象URL列表。
并且,訪問指示部272a對瀏覽器模擬器25a輸入巡回對象URL列表的URL(S102),瀏覽器模擬器25a通過訪問部252a訪問在S102中被輸入的URL(S103)。并且,訪問部252a從訪問目的地的URL取得網(wǎng)頁內(nèi)容。
另外,在S102中,訪問指示部272a既可以使1個(gè)瀏覽器模擬器25a訪問多個(gè)URL,也可以使多個(gè)瀏覽器模擬器25a分別訪問不同的URL。
在S103之后,瀏覽器模擬器25a的HTML/CSS分析庫253a分析所取得的網(wǎng)頁內(nèi)容,如果在通過腳本解釋器部254a取得的網(wǎng)頁內(nèi)容中包含有代碼,則分析該代碼,通過程序分析部273a進(jìn)行代碼分析(S104)。該代碼分析的詳細(xì)情況在后文描述。
在S104之后,訪問部252a輸出訪問日志(S105)。即,訪問部252a將對于通過訪問指示部272a被輸入的URL的訪問結(jié)果作為訪問日志輸出。并且,登記處理部278a對在S105中輸出的訪問日志、通過S104的代碼分析輸出的URL和環(huán)境信息進(jìn)行整形(S106),并將整形后的數(shù)據(jù)蓄積在分析信息數(shù)據(jù)庫24a(參照圖22)中(S107)。
這里,如果被設(shè)定了對通過切片執(zhí)行部277a的切片的執(zhí)行而被提取的URL進(jìn)行分析的內(nèi)容(S108的Yes),則訪問指示部272a從分析信息數(shù)據(jù)庫24a的分析信息中讀出通過切片的執(zhí)行被提取的URL,并將該URL作為巡回對象URL的URL進(jìn)行S102起的處理。即,瀏覽器模擬器管理器23a對通過切片的執(zhí)行被提取的URL進(jìn)行遞歸的分析。
另外,在S108中,如果未設(shè)定對通過切片的執(zhí)行被提取的URL進(jìn)行分析的內(nèi)容(S108的No),在巡回對象URL列表中存在下一個(gè)巡回URL(S109的Yes),則返回S102。另一方面,如果在巡回對象URL列表中不存在下一個(gè)巡回URL(S109的No),則結(jié)束處理。
如上所述在分析信息數(shù)據(jù)庫24a中蓄積有分析信息時(shí),URL分析部279a進(jìn)行分析信息的URL的分析處理,例如提取出作為攻擊URL或踏板URL的可能性較高的URL。
下面,使用圖24、圖25和圖26,具體說明圖23的S104的代碼分析處理。
首先,語法分析部274a對從網(wǎng)頁內(nèi)容取得的代碼的各語句進(jìn)行語法分析(S1010)。這里,存在作為語法分析的對象的語句的情況下(S1011的Yes),程序依賴曲線圖構(gòu)建部275a構(gòu)建程序依賴曲線圖(參照圖16)(S1012)。另一方面,不存在作為語法分析的對象的語句的情況下(S1011的No),進(jìn)入圖25的S1016。
此外,在S1012之后,語法分析對象的語句是與特定對象的轉(zhuǎn)發(fā)代碼關(guān)聯(lián)的程序依賴曲線圖節(jié)點(diǎn)(PDG節(jié)點(diǎn))的情況下(S1013的Yes),程序依賴曲線圖構(gòu)建部275a將該P(yáng)DG節(jié)點(diǎn)作為切片基準(zhǔn)保持(S1014)。另一方面,在S1013中,語法分析對象的語句是不與特定對象的轉(zhuǎn)發(fā)代碼關(guān)聯(lián)的PDG節(jié)點(diǎn)的情況下(S1013的No),進(jìn)入S1015。
在S1015中,語法分析部274a判斷為存在作為語法分析對象的下一個(gè)語句時(shí)(S1015的Yes),返回S1012。另一方面,在判斷為不存在作為語法分析對象的下一個(gè)語句時(shí)(S1015的No),進(jìn)入圖25的S1016。
在圖25的S1016中,程序分析部273a判斷為存在S1014中作為切片基準(zhǔn)而保持的PDG節(jié)點(diǎn)時(shí)(S1016的Yes),程序切片部276a將所保持的節(jié)點(diǎn)(PDG節(jié)點(diǎn))作為切片基準(zhǔn),通過程序切片提取切片(S1017)。該程序切片部276a的切片提取處理的詳細(xì)情況在后文描述。另外,在S1016中,程序分析部273a判斷為不存在S1014中作為切片基準(zhǔn)而保持的PDG節(jié)點(diǎn)時(shí)(S1016的No),結(jié)束處理。
在S1017之后,執(zhí)行路徑搜索部270a判斷為在S1017中提取的切片包含多個(gè)執(zhí)行路徑時(shí)(S1018的Yes),按照每個(gè)執(zhí)行路徑提取切片(S1019)。另一方面,在執(zhí)行路徑搜索部270a判斷為在S1017中提取的切片中不包含多個(gè)執(zhí)行路徑時(shí)(S1018的No),進(jìn)入S1020。
在S1020中,切片執(zhí)行部277a在S1017所提取的切片中不包含多個(gè)執(zhí)行路徑的情況下,執(zhí)行在S1017中被提取的切片,而在S1017中提取出的切片中包含多個(gè)執(zhí)行路徑的情況下,執(zhí)行在S1019中被提取的切片(S1020)。此時(shí),切片執(zhí)行部277a監(jiān)視與轉(zhuǎn)發(fā)代碼關(guān)聯(lián)的對象或函數(shù)的自變量、屬性的代入值,由此提取在轉(zhuǎn)發(fā)代碼中使用的URL并輸出(S1021)。在S1021之后,進(jìn)入圖26的S1023。
在圖26的S1023中,在圖25的S1017所提取的切片中包含條件分支語句的情況下(S1023的Yes),程序切片部276a將該條件分支語句作為切片基準(zhǔn),通過程序切片提取切片(S1024)。該程序切片部276a的切片提取處理的詳細(xì)情況與S1017同樣在后文描述。另外,在S1023中,在圖25的S1017所提取的切片中不包含條件分支語句的情況下(S1023的No),進(jìn)入圖25的S1022。
在S1024之后,切片執(zhí)行部277a執(zhí)行在S1024被提取的切片(S1025)。此時(shí),切片執(zhí)行部277a監(jiān)視與字符串操作關(guān)聯(lián)的對象或函數(shù)的自變量、屬性的代入值,由此確定基于通過S1024被提取的切片的執(zhí)行的客戶環(huán)境信息的使用(S1026)。
在S1026之后,如果在所提取的切片中包含下一個(gè)條件分支語句(S1027的Yes),則返回S1024,如果在所提取的切片中不包含下一個(gè)條件分支語句(S1027的No),則進(jìn)入圖25的S1022。
在圖25的S1022中,如果存在作為下一個(gè)切片基準(zhǔn)的PDG節(jié)點(diǎn)(S1022的Yes),則返回S1017,如果不存在作為下一個(gè)切片基準(zhǔn)的PDG節(jié)點(diǎn)(S1022的No),則結(jié)束處理。
下面,使用圖27,具體說明圖25的S1017和圖26的S1024的處理(切片提取處理)。
首先,程序切片部276a將切片基準(zhǔn)的節(jié)點(diǎn)(PDG節(jié)點(diǎn))作為分析對象節(jié)點(diǎn)保持(S1028),并將所保持的分析對象節(jié)點(diǎn)追加到切片對象節(jié)點(diǎn)中(S1029)。接著,程序切片部276a在所保持的分析對象節(jié)點(diǎn)具備的數(shù)據(jù)依賴關(guān)系的PDG邊界上沿反方向跟蹤一次,將跟蹤目的地的所有PDG節(jié)點(diǎn)作為分析對象節(jié)點(diǎn)保持(S1030)。在被保持的分析對象節(jié)點(diǎn)上的任意一個(gè)存在數(shù)據(jù)依賴關(guān)系的邊界(PDG邊界)的情況下(S1031的Yes),返回S1029,而在被保持的分析對象節(jié)點(diǎn)中的任意一個(gè)不存在數(shù)據(jù)依賴關(guān)系的PDG邊界的情況下(S1031的No),進(jìn)入S1032。
在S1032中,程序切片部276a在切片對象節(jié)點(diǎn)(即,通過在程序依賴曲線圖的數(shù)據(jù)依賴關(guān)系的PDG邊界上跟蹤而提取出的PDG節(jié)點(diǎn))具備的控制依賴關(guān)系的PDG邊界上沿反方向跟蹤一次,將跟蹤目的地的所有PDG節(jié)點(diǎn)追加到切片對象節(jié)點(diǎn)中(S1032)。在S1032之后,程序切片部276a將作為被保持的切片對象節(jié)點(diǎn)的PDG節(jié)點(diǎn)作為切片提取(S1033),并結(jié)束處理。
下面舉出上述的處理的一例。例如,程序切片部276a在圖16所示的程序依賴曲線圖上將切片基準(zhǔn)的PDG節(jié)點(diǎn)((14)Assignment location.href)作為分析對象節(jié)點(diǎn)時(shí),在該P(yáng)DG節(jié)點(diǎn)(Assignment location.href)具備的數(shù)據(jù)依賴關(guān)系的PDG邊界上沿反方向跟蹤一次,將跟蹤目的地的所有的PDG節(jié)點(diǎn)((6)Assignment url、(9)Assignment url、(12)Assignment url和(4)VariableInitializer url)作為新的分析對象節(jié)點(diǎn)保持。此外,圖16的(6)Assignment url和(9)Assignment url的PDG節(jié)點(diǎn)還具有數(shù)據(jù)依賴關(guān)系的PDG邊界,因此程序切片部276a在該P(yáng)DG邊界上沿反方向跟蹤,將(3)VariableInitializer d的PDG節(jié)點(diǎn)也作為新的分析對象節(jié)點(diǎn)保持。這里,在被保持的分析對象節(jié)點(diǎn)中的(6)Assignment url、(9)Assignment url和(12)Assignment url存在控制依賴關(guān)系的PDG邊界,因此在該P(yáng)DG邊界上沿反方向跟蹤一次,將跟蹤目的地的所有的PDG節(jié)點(diǎn)、即(5)IfStatement jre[1]==“6”和(8)IfStatement jre[1]==“7”的PDG節(jié)點(diǎn)追加到切片對象節(jié)點(diǎn)中。并且,程序切片部276a將被保持的PDG節(jié)點(diǎn)、即(14)Assignment location.href、(6)Assignment url、(9)Assignment url、(12)Assignment url、(4)VariableInitializer url、(3)VariableInitializer d、(5)IfStatement jre[1]==“6”和(8)IfStatement jre[1]==“7”作為切片提取。例如,程序切片部276a根據(jù)圖17所示的PDG節(jié)點(diǎn),提取圖18的符號701a→符號702a所示的切片。
此外,例如程序切片部276a在圖16所示的程序依賴曲線圖中將切片基準(zhǔn)的PDG節(jié)點(diǎn)((5)IfStatement jre[1]==“6”)作為分析對象節(jié)點(diǎn)時(shí),在該P(yáng)DG節(jié)點(diǎn)((5)IfStatement jre[1]==“6”)具備的數(shù)據(jù)依賴關(guān)系的PDG邊界上沿反方向跟蹤一次,將跟蹤目的地的所有的PDG節(jié)點(diǎn)((2)VariableInitializer jre)作為新的分析對象節(jié)點(diǎn)保持。此外,(2)VariableInitializer jre的PDG節(jié)點(diǎn)還具有數(shù)據(jù)依賴關(guān)系的PDG邊界,因此程序切片部276a在該P(yáng)DG邊界上沿反方向跟蹤,將(1)VariableInitializer jre_version的PDG節(jié)點(diǎn)也作為新的分析對象節(jié)點(diǎn)保持。另外,這種情況下,在(1)VariableInitializer jre_version的PDG節(jié)點(diǎn)上不存在控制依賴關(guān)系的PDG邊界,因此程序切片部276a將(5)IfStatement jre[1]==“6”、(2)VariableInitializer jre和(1)VariableInitializer jre_version作為切片提取。例如,程序切片部276a根據(jù)圖20所示的PDG節(jié)點(diǎn),提取圖21的符號1001a→符號1002a所示的切片。
根據(jù)這種系統(tǒng),能夠?qū)σ蕾囉诳蛻舡h(huán)境進(jìn)行路過式下載攻擊的代碼詳細(xì)地進(jìn)行分析。其結(jié)果是,例如,能夠在不依賴于客戶環(huán)境的情況下從該代碼中全面地提取出在路過式下載攻擊中存在作為攻擊URL或踏板URL的可能性的URL。此外,系統(tǒng)能夠確定用于向存在作為所提取的攻擊URL或踏板URL的可能性的URL而需要的客戶環(huán)境。其結(jié)果是,能夠有效地確定在通過現(xiàn)有的蜜罐技術(shù)進(jìn)行環(huán)境依賴攻擊的分析的情況下,設(shè)定何種客戶環(huán)境能夠到達(dá)攻擊URL或踏板URL。此外,通過按照每種客戶環(huán)境集中URL,由此能夠優(yōu)化根據(jù)各客戶的客戶環(huán)境而應(yīng)導(dǎo)入的URL黑名單。
[其他的實(shí)施方式]
另外,通過語法分析部274a確定的對象、對象的屬性、函數(shù)不限于與轉(zhuǎn)發(fā)代碼或內(nèi)容取得代碼有關(guān)的內(nèi)容,可以根據(jù)目的而適當(dāng)變更。
此外,在程序依賴曲線圖構(gòu)建部275a中,JavaScript(注冊商標(biāo))代碼的語句中的作為程序依賴曲線圖的程序依賴曲線圖節(jié)點(diǎn)的語句是變量定義語句、代入語句、函數(shù)定義語句、函數(shù)執(zhí)行語句、返回語句、條件分支語句、循環(huán)語句、例外處理語句等,還可以由系統(tǒng)的管理者等適當(dāng)追加、變更除此以外的內(nèi)容。
另外,作為程序分析部273a進(jìn)行代碼分析的結(jié)果而輸出的信息可以是URL以外的信息。例如,若事先知悉在攻擊代碼中使用的對象或?qū)ο蟮膶傩浴⒑瘮?shù)的信息,則程序分析部273a可以使用這些信息確定攻擊代碼,輸出在所確定的攻擊代碼中使用的各種信息。
此外,系統(tǒng)使用瀏覽器模擬器25a訪問分析對象網(wǎng)站12a,也可以使用瀏覽器模擬器25a以外(例如,實(shí)際的客戶環(huán)境)訪問分析對象網(wǎng)站12a。
進(jìn)而,程序切片部276a使用程序依賴曲線圖提取切片,然而只要能夠把握各代碼的控制依賴關(guān)系和數(shù)據(jù)依賴關(guān)系,就可以不必使用程序依賴曲線圖。
另外,在程序分析部273a進(jìn)行的URL提取之后,使用程序分析部273a實(shí)施了客戶環(huán)境信息的使用確定,然而也可以變更為不由系統(tǒng)管理者等實(shí)施。
此外,瀏覽器模擬器25a使用HTML/CSS分析庫253a作為內(nèi)容分析庫,然而也可以使用對在Adobe Acrobat(注冊商標(biāo))中使用的PDF文件或在Adobe Flash Player(注冊商標(biāo))中使用的SWF文件等的網(wǎng)頁內(nèi)容進(jìn)行分析的內(nèi)容分析庫。另外,在分析PDF文件的情況下,將JavaScript(注冊商標(biāo))作為分析代碼,腳本解釋器部254a使用JavaScript(注冊商標(biāo))的解釋器。此外,在分析SWF文件的情況下,將ActionScript作為分析對象代碼,腳本解釋器部254a使用ActionScript的解釋器。
此外,程序分析部273a還可以將JavaScript(注冊商標(biāo))以外的代碼、例如VBScript作為分析對象代碼,這種情況下,腳本解釋器部254a使用VBScript的解釋器。
此外,程序分析部273a在通過切片執(zhí)行部277a能夠提取URL,并且在通過程序切片部276a提取的切片中包含條件分支語句的情況下,進(jìn)行將該條件分支語句作為切片基準(zhǔn)的切片的提取,然而不限于此。例如,若在通過程序切片部276a提取的切片中包含條件分支語句,則無論通過切片執(zhí)行部277a能否提取出URL,程序分析部273a都可以進(jìn)行將該條件分支語句作為切片基準(zhǔn)的切片的提取。
(程序)
此外,還可以制作并執(zhí)行通過計(jì)算機(jī)可執(zhí)行的語言記述由上述實(shí)施方式的瀏覽器模擬器管理器23、23a執(zhí)行的處理的程序。這種情況下,通過由計(jì)算機(jī)執(zhí)行程序,可獲得與上述實(shí)施方式同樣的效果。進(jìn)而,還可以通過將該程序記錄在計(jì)算機(jī)可讀取的記錄介質(zhì)中,并使計(jì)算機(jī)讀入在該記錄介質(zhì)中記錄的程序并執(zhí)行,由此實(shí)現(xiàn)與上述實(shí)施方式同樣的處理。以下,說明執(zhí)行實(shí)現(xiàn)與瀏覽器模擬器管理器23同樣的功能的控制程序的計(jì)算的一例。
圖28是表示執(zhí)行分析程序的計(jì)算的圖。如圖28所示,計(jì)算機(jī)1000例如具有存儲器1010、CPU(Central Processing Unit:中央處理單元)1020、硬盤驅(qū)動(dòng)器接口1030、磁盤驅(qū)動(dòng)器接口1040、串行端口接口1050、視頻適配器1060和網(wǎng)絡(luò)接口1070。這些各部通過總線1080而連接起來。
存儲器1010包括ROM(Read Only Memory:只讀存儲器)1011和RAM(Random Access Memory:隨機(jī)存取存儲器)1012。ROM1011例如存儲BIOS(Basic Input Output System:基本輸入輸出系統(tǒng))等的引導(dǎo)程序。硬盤驅(qū)動(dòng)器接口1030與硬盤驅(qū)動(dòng)器1090連接。磁盤驅(qū)動(dòng)器接口1040與磁盤驅(qū)動(dòng)器1100連接。磁盤驅(qū)動(dòng)器1100例如供磁盤或光盤等的可拆裝的存儲介質(zhì)插入。串行端口接口1050例如供鼠標(biāo)1110和鍵盤1120連接。視頻適配器1060例如供顯示器1130連接。
這里,如圖28所示,硬盤驅(qū)動(dòng)器1090例如存儲OS1091、應(yīng)用程序1092、程序模塊1093和程序數(shù)據(jù)1094。在上述實(shí)施方式中說明的搜索對象代碼信息、訪問日志以及通過分析而被提取的URL等例如被存儲在硬盤驅(qū)動(dòng)器1090或存儲器1010中。
此外,分析程序例如作為記述有通過計(jì)算機(jī)1000執(zhí)行的指令的程序模塊而被存儲在硬盤驅(qū)動(dòng)器1090中。具體而言,記述有由上述實(shí)施方式中說明的瀏覽器模擬器管理器23執(zhí)行的各處理的程序模塊被存儲在硬盤驅(qū)動(dòng)器1090中。
此外,在基于分析程序的信息處理中使用的數(shù)據(jù)作為程序數(shù)據(jù)而例如被存儲在硬盤驅(qū)動(dòng)器1090中。并且,CPU1020根據(jù)需要將被存儲在硬盤驅(qū)動(dòng)器1090中的程序模塊1093或程序數(shù)據(jù)1094讀出到RAM1012中,從而執(zhí)行上述各步驟。
另外,分析程序的程序模塊1093或程序數(shù)據(jù)1094不限于被存儲在硬盤驅(qū)動(dòng)器1090中的情況,例如還可以被存儲在可拆裝的存儲介質(zhì)中,通過磁盤驅(qū)動(dòng)器1100等而被CPU1020讀出。或者,控制程序的程序模塊1093或程序數(shù)據(jù)1094可以被存儲在通過LAN(Local Area Network:局域網(wǎng))或WAN(Wide Area Network:廣域網(wǎng))等的網(wǎng)絡(luò)而連接的其他計(jì)算機(jī)中,通過網(wǎng)絡(luò)接口1070而被CPU1020讀出。
標(biāo)號說明
1、1a、2、2a 網(wǎng)絡(luò)
3、3a 分組轉(zhuǎn)發(fā)裝置
12、12a 分析對象網(wǎng)站
23、23a 瀏覽器模擬器管理器
24、24a 分析信息數(shù)據(jù)庫
25、25a 瀏覽器模擬器
26、26a 主系統(tǒng)
27、27a 控制部
251、251a 客戶環(huán)境模擬部
252、252a 訪問部
253、253a HTML/CSS分析庫
254、254a 腳本解釋器部
270a 執(zhí)行路徑搜索部
271、271a URL列表制作部
272、272a 訪問指示部
273、273a 程序分析部
274、274a 語法分析部
275、275a 程序依賴曲線圖構(gòu)建部
276、276a 程序切片部
277、277a 切片執(zhí)行部
278、278a 登記處理部
279、279a URL分析部