JP6144848B2 - 解析装置、解析方法、および、解析プログラム - Google Patents

解析装置、解析方法、および、解析プログラム Download PDF

Info

Publication number
JP6144848B2
JP6144848B2 JP2016554079A JP2016554079A JP6144848B2 JP 6144848 B2 JP6144848 B2 JP 6144848B2 JP 2016554079 A JP2016554079 A JP 2016554079A JP 2016554079 A JP2016554079 A JP 2016554079A JP 6144848 B2 JP6144848 B2 JP 6144848B2
Authority
JP
Japan
Prior art keywords
code
program
unit
slice
analysis
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016554079A
Other languages
English (en)
Other versions
JPWO2016060110A1 (ja
Inventor
雄太 高田
雄太 高田
満昭 秋山
満昭 秋山
毅 八木
毅 八木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Publication of JPWO2016060110A1 publication Critical patent/JPWO2016060110A1/ja
Application granted granted Critical
Publication of JP6144848B2 publication Critical patent/JP6144848B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/951Indexing; Web crawling techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/955Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
    • G06F16/9566URL specific, e.g. using aliases, detecting broken or misspelled links
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Virology (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、解析装置、解析方法、および、解析プログラムに関する。
従来、ドライブバイダウンロード攻撃等のサイバー攻撃に対して、悪性なコードをブラウザのエミュレータ(以下、ブラウザエミュレータと呼ぶ。)で実行し、実行結果を解析することで悪性なコードを検知する手法が知られている(例えば、非特許文献1、非特許文献2参照)。
このドライブバイダウンロード攻撃(Drive-by Download攻撃)は、JavaScript(登録商標)等のコードを用いて、複数のウェブサイト(以下、踏台URL(Uniform Resource Locator)と呼ぶ。)を経由した後、攻撃コードを実行する悪性なウェブサイト(以下、攻撃URLと呼ぶ。)へクライアントを転送する。クライアントが攻撃URLにアクセスすると、ブラウザやブラウザのプラグイン(以下、プラグインと呼ぶ。)の脆弱性を悪用する攻撃コードが実行され、クライアントはコンピュータウィルス等の悪性プログラムをダウンロード、インストールしてしまう。
ブラウザエミュレータは、ウェブサイトに含まれるコードの実行を関数単位で監視し、脆弱性を有するブラウザやプラグインの関数の不正な利用を検知することで、悪性なコードを検知している。悪性なコードは、ブラウザやプラグインが用意する関数の脆弱性を悪用し、長い文字列や大きな数値を入力することで、コンピュータのメモリ領域を不正に書き換えるバッファオーバーフローや、メモリの割り当て方法を不正に操作するヒープスプレーを引き起こし、攻撃コードを実行する。そのため、ブラウザエミュレータは、コードにおける脆弱なプラグインの使用や関数への文字列入力、数値入力を監視することで、悪性なコードを検知している。
例えば、ブラウザエミュレータは、Internet Explorer(登録商標)のプラグインであるActiveX(登録商標)に着目し、脆弱なActiveX(登録商標)コンポーネントの関数に対する攻撃コードをあらかじめシグネチャとして用意するとともに、コード実行時にシグネチャにマッチした場合、そのウェブサイトを悪性ウェブサイトと判定する(非特許文献1参照)。
また、ブラウザエミュレータは、JavaScript(登録商標)の文字列を操作する関数(例えば、substring())やコードを動的生成する関数(例えば、eval())の実行回数や関数で用いる引数情報を収集し、収集した情報に基づいた機械学習による検知手法も考案されている(非特許文献2参照)。
一方で、悪性なコードでは、幅広いアプリケーション(例えば、ブラウザはInternet Explorer(登録商標)、Firefox(登録商標)、Opera(登録商標)等、プラグインはAdobe Acrobat(登録商標)、Adobe Flash Player(登録商標)、Oracle JRE(登録商標)等)の脆弱性が悪用される。悪用される脆弱性の種類は、OS(Operating System)やブラウザ、プラグインの種類やバージョン(以下、クライアント環境と呼ぶ。)ごとに細分化しており、多岐にわたる。
また、JavaScript(登録商標)では、ウェブサイトにアクセスしてきたクライアント環境を識別するブラウザフィンガープリンティング(Browser Fingerprinting)を用いることで、クライアント環境情報を取得することができる。
ドライブバイダウンロード攻撃における踏台URLでは、このブラウザフィンガープリンティングを利用してクライアント環境情報を取得し、クライアント環境情報に基づいた制御文によって、攻撃対象となるクライアント環境を持つクライアントのみに、攻撃URLへ転送するコード(以下、転送コードと呼ぶ。)や、攻撃コードを含んだコンテンツを取得するHTML(HyperText Markup Language)タグの挿入コード(以下、コンテンツ取得コードと呼ぶ。)を実行する(以下、環境依存攻撃と呼ぶ。非特許文献3参照)。したがって、上述した従来技術では、ブラウザエミュレータに設定されるクライアント環境が攻撃対象のクライアント環境とは異なる場合、攻撃URLまで到達できないため、悪性なコードの検知技術が有効に機能しない。
一方で、抽象構文木やプログラムスライシングといった技術を用いて、コードを網羅的に解析し、JavaScript(登録商標)に埋め込まれているURLを抽出する手法が提案されている(非特許文献4参照)。抽象構文木(Abstract Syntax Tree, AST)とは、プログラム構造を抽象的な木構造で表すデータ構造である。抽象構文木を探索することで、プログラムを網羅的に解析できる。すなわち、プログラム構造に依存せずコードを解析できるため、JavaScript(登録商標)の制御文によって実行されないようなコードも静的解析することができる。
また、プログラムスライシング(Program Slicing)とは、スライシング基準(Slicing Criteria)<s,v>と呼ばれる、プログラム内の任意の文sにおいて着目する変数vに関連する一部の文集合をプログラムから抽出する技術である(非特許文献5参照)。スライシング基準にしたがって抽出された文集合はスライス(Slice)と呼ばれる。このスライスを抽出する手法として、データフローに基づいたプログラムスライシング手法や依存グラフに基づいたプログラムスライシング手法が知られている。
非特許文献4では、ウェブサイトにアクセスした際に取得したJavaScript(登録商標)全体の抽象構文木を用いて、URLが使用されるようなコードを特定する。その後、プログラムスライシングを用いてURLに関係のないコードを除去した上で、JavaScript(登録商標)インタプリタによるコードの実行を行っている。しかし、独自のJavaScript(登録商標)インタプリタに手法を実装しており、クライアントのプラグイン情報を参照するコードには対応していない。また、検索エンジンのカバレッジ向上を目的としているため、攻撃URLとして使用される可能性の低い、aタグやformタグ等に使用するURLも抽出している。
Jose Nazario、"PhoneyC: A Virtual Client Honeypot"、In Proceedings of the USENIX Workshop on Large-Scale Exploits and Emergent Threats (LEET)、April 2009、[平成26年9月2日検索]、インターネット<URL:https://www.usenix.org/legacy/events/leet09/tech/full_papers/nazario/nazario.pdf> 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、[平成26年9月2日検索]、インターネット<URL:http://www.cs.ucsb.edu/~vigna/publications/2010_cova_kruegel_vigna_Wepawet.pdf> 高田雄太、秋山満昭、針生剛男、"ドライブバイダウンロード攻撃に使用される悪性なJavaScriptの実態調査"、電子情報通信学会、情報通信システムセキュリティ研究会、2014年3月、[平成26年9月2日検索]、インターネット<URL:http://www.ieice.org/ken/paper/20140327QBlZ/> 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、[平成26年9月2日検索]、インターネット<URL:http://stap.sjtu.edu.cn/images/2/2e/ExtractingAnalysis.pdf> Mark Weiser、"PROGRAM SLICING"、In Proceedings of the 5th International Conference on Software Engineering、1981、[平成26年9月2日検索]、インターネット<URL:http://dl.acm.org/citation.cfm?id=802557>
従来技術は、コードの制御文に依存する転送コードやコンテンツ取得コードを考慮していないため、例えば、ドライブバイダウンロード攻撃を行うコードの制御文によって、踏台URLや攻撃URLへ転送されないという問題があった。その結果、悪性コードの検知技術が有効に機能せず、悪性コードを検知できないおそれがあった。
例えば、ある踏台URLにおいて、ブラウザフィンガープリンティングを用いてJRE(登録商標)のバージョン情報を取得し、JRE(登録商標)バージョン7に対してのみ、攻撃URLへの転送コードを実行するよう制御を加えたJavaScript(登録商標)コードが使用された場合に、JRE(登録商標)をインストールしていないクライアント環境やJRE(登録商標)バージョン7以外のJRE(登録商標)をインストールしたクライアント環境では、転送コードを実行することができない。その結果、クライアントからのアクセスは踏台URLや攻撃URLに転送されないので、悪性コードの検知技術が有効に機能せず、悪性コードを検知できない。
そこで、本発明は前記した問題を解決し、クライアント環境に依存してドライブバイダウンロード攻撃を行うコードを解析することを課題とする。
前記した課題を解決するため、本発明は、ウェブコンテンツに含まれるコードを解析する解析装置であって、前記ウェブコンテンツに含まれるコードの構文解析を行うことにより、前記コードから、他のサイトへの転送コードまたはコンテンツ取得コードを探索し、前記探索の結果発見された転送コードまたはコンテンツ取得コードに使用されるオブジェクト、オブジェクトのプロパティ、および、関数の少なくともいずれかを特定する構文解析部と、前記特定したオブジェクト、オブジェクトのプロパティ、および、関数の少なくともいずれかをもとに前記転送コードまたはコンテンツ取得コードと依存関係を持つコードを抽出するプログラムスライシング部とを備えることを特徴とする。
本発明によれば、クライアント環境に依存してドライブバイダウンロード攻撃を行うコードを解析できる。その結果、例えば、当該コードからドライブバイダウンロード攻撃において攻撃URLや踏台URLに用いられる可能性の高いURLを抽出できる。
図1は、システムの構成例を示す図である。 図2は、ブラウザエミュレータマネージャの構成例を示す図である。 図3は、プログラム解析部による解析対象のコードの例を示す図である。 図4は、転送コードおよびコンテンツ取得コードの例を示す図である。 図5は、抽象構文木の例を示す図である。 図6は、プログラム依存グラフの例を示す図である。 図7は、スライスの例を示す図である。 図8は、解析情報データベースに登録される解析情報の例を示す図である。 図9は、システムの処理手順の例を示すフローチャートである。 図10は、図9のコード解析の処理手順の例を示すフローチャートである。 図11は、図9のコード解析の処理手順の例を示すフローチャートである。 図12は、システムの構成例を示す図である。 図13は、ブラウザエミュレータマネージャの構成例を示す図である。 図14は、プログラム解析部による解析対象のコードの例を示す図である。 図15は、スクリプト転送コード、タグ転送コード、コードに使用されるHTMLタグとその属性名のペアの例を示す図である。 図16は、プログラム依存グラフの例を示す図である。 図17は、スライシング基準<14,location.href>で抽出対象となるノードの例を示す図である。 図18は、スライシング基準<14,location.href>で抽出されるスライスを説明するための図である。 図19は、実行経路探索部により抽出されるスライスを説明するための図である。 図20は、スライシング基準<5,if>で抽出対象となるノードの例を示す図である。 図21は、スライシング基準<5,if>で抽出されるスライスを説明するための図である。 図22は、解析情報データベースに記憶される解析情報の例を示す図である。 図23は、システムの処理手順の例を示すフローチャートである。 図24は、図23のコード解析の処理手順の例を示すフローチャートである。 図25は、図23のコード解析の処理手順の例を示すフローチャートである。 図26は、図23のコード解析の処理手順の例を示すフローチャートである。 図27は、図25および図26のスライスの抽出の処理手順の例を示すフローチャートである。 図28は、解析プログラムを実行するコンピュータを示す図である。
以下、図面を参照しながら、本発明を実施するための形態(実施形態)について説明する。本発明は本実施形態に限定されない。
[第1の実施形態]
まず、図1を用いて第1の実施形態のシステムの構成例を説明する。システムは、例えば、図1に示すようにネットワーク1とネットワーク2とを備える。ネットワーク1とネットワーク2とはパケット転送装置3により接続される。
ネットワーク1は、解析対象ウェブサイト12を備える。ネットワーク1は、インターネットのように広域なネットワークであってもよいし、法人ネットワークのように中小規模なネットワークや、クラウド環境やホスティング環境のネットワークであってもよい。
解析対象ウェブサイト12は、ブラウザエミュレータマネージャ(解析装置)23による解析対象のウェブサイトである。この解析対象ウェブサイト12は、例えば、公開されている悪性ウェブサイトのブラックリストに掲載されているウェブサイト等である。
また、ネットワーク2は、ブラウザエミュレータマネージャ23と、解析情報データベース24とを備える。ネットワーク2は、ローカルエリアネットワークのように小規模なネットワークであってもよいし、法人ネットワークのように中小規模なネットワークである場合やクラウド環境やホスティング環境のネットワークであってもよい。
ブラウザエミュレータマネージャ23は、1以上のブラウザエミュレータ25を管理し、このブラウザエミュレータ25に所定のウェブサイト(解析対象ウェブサイト12)へアクセスさせる。そして、ブラウザエミュレータマネージャ23は、ブラウザエミュレータ25がアクセスしたウェブサイトのURLや、当該ウェブサイトから取得したコードの解析により得られたURL等を解析情報データベース24へ蓄積する。
ブラウザエミュレータ25は、ブラウザの動作を模擬する装置である。このブラウザエミュレータ25は、例えば、ハニーネットプロジェクトが提供しているブラウザエミュレータや、オープンソースとして開発されたHtmlUnitやSeleniumが適用できる。このブラウザエミュレータ25の詳細は後記する。なお、図1においてブラウザエミュレータ25はブラウザエミュレータマネージャ23内に構築されるように描かれているが、ブラウザエミュレータマネージャ23外に構築されてももちろんよい。
解析情報データベース24は、ブラウザエミュレータ25がアクセスしたウェブサイトのURLや、当該ウェブサイトから取得したコードの解析により得られたURL等を蓄積(保存)する。この解析情報データベース24におけるデータの保存は、RDBMS(Relational DataBase Management System)を用いてもよいし、テキスト形式で保存してもよい。この解析情報データベース24の詳細は後記する。
なお、本実施形態では、ブラウザエミュレータ25、ブラウザエミュレータマネージャ23および解析情報データベース24を同じネットワークに配置しているが、それぞれ別ネットワークに配置してもよい。また、各構成をセキュアに接続するため、既存の暗号技術を適用して通信情報を暗号化したり、各装置が配置されたネットワーク間または各構成間をVPN(Virtual Private Network)で接続したりしてもよい。
次に、図2を用いてブラウザエミュレータマネージャ23およびブラウザエミュレータ25を詳細に説明する。ブラウザエミュレータマネージャ23はブラウザエミュレータ25および制御部27を備える。制御部27は、ホストシステム26上でブラウザエミュレータ25を動作させる。このホストシステム26は、例えば、ブラウザエミュレータマネージャ23が備えるOSを用いる。制御部27の詳細は後記する。
(ブラウザエミュレータ)
次に、ブラウザエミュレータ25を説明する。ブラウザエミュレータ25は、クライアント環境模擬部251と、アクセス部252と、HTML/CSS(HyperText Markup Language/Cascading Style Sheets)パーサ253と、スクリプトインタプリタ部254とを備える。
クライアント環境模擬部251は、ブラウザエミュレータ25が模擬すべきクライアント環境(例えば、OS、ブラウザ、プラグイン等)の情報を設定する。
アクセス部252は、ウェブサイト(例えば、図1の解析対象ウェブサイト12)と、HTTP(HyperText Transfer Protocol)またはHTTPS(HyperText Transfer Protocol Secure)による通信を行い、当該ウェブサイトからウェブコンテンツを取得する。ここでアクセス部252は、HTTPまたはHTTPSによる通信時、HTTPヘッダのUser-Agentフィールドに、クライアント環境模擬部251で設定したクライアント環境を使用する。これによりブラウザエミュレータ25は、クライアント環境を模擬する。このアクセス部252には、例えば、フリーソフトウェアとして開発されたcURLを用いる。
また、アクセス部252は、ウェブサイトへのアクセス結果をアクセスログに記録する。例えば、アクセス部252は、アクセスしたウェブサイトのURLや、アクセスした日時をアクセスログに記録する。また、アクセス部252は当該ウェブサイトへアクセスした結果、別のウェブサイトに遷移した場合、その遷移先のURL等もアクセスログに記録する。
HTML/CSSパーサ253は、アクセス部252で取得したウェブコンテンツを解釈する。また、HTML/CSSパーサ253は、ウェブコンテンツを解釈した結果、当該ウェブコンテンツにコードが含まれる場合、スクリプトインタプリタ部254を用いてコードを解釈する。
スクリプトインタプリタ部254は、ウェブコンテンツに含まれるコードを解釈する。例えば、コードがJavaScript(登録商標)により記述されている場合、スクリプトインタプリタ部254は、オープンソースとして開発されたSpiderMonkeyやV8 JavaScript(登録商標)Engine等のJavaScript(登録商標)インタプリタ、Java(登録商標)で記述されたJavaScript(登録商標)インタプリタであるRhino等を用いてコードを解釈する。
(制御部)
次に、制御部27を説明する。制御部27は、URLリスト作成部271と、アクセス指示部272と、プログラム解析部273と、登録処理部278と、URL解析部279とを備える。
URLリスト作成部271は、各ブラウザエミュレータ25が巡回するウェブサイト(解析対象ウェブサイト12)のURLリストである巡回対象URLリストを作成する。例えば、URLリスト作成部271は、公開されている悪性ウェブサイトのブラックリストに掲載されているウェブサイトのURLをもとに巡回対象URLリストを作成する。
アクセス指示部272は、各ブラウザエミュレータ25のアクセス部252へ巡回対象URLリスト(URLリスト)に示されるURLへのアクセスを指示する。
プログラム解析部273は、アクセス先のウェブサイトから取得したウェブコンテンツに含まれるプログラム(コード)の解析を行う。このプログラム解析部273の詳細は後記する。
登録処理部278は、各ブラウザエミュレータ25のアクセスログを取得し、解析情報データベース24に登録する。また、登録処理部278は、プログラム解析部273によるコードの解析(後記するスライスの実行)により得られたURLを解析情報データベース24に登録する。
URL解析部279は、解析情報データベース24に蓄積されたアクセスログやコード解析により得られたURL(解析情報)を解析し、その解析結果を出力する。例えば、URL解析部279は、アクセスログに含まれるURLや、コード解析により得られたURLから、攻撃URLや踏台URLである可能性のあるURLを抽出し、出力する。
次に、プログラム解析部273を詳細に説明する。プログラム解析部273は、構文解析部274と、プログラム依存グラフ構築部275と、プログラムスライシング部(抽出部)276と、スライス実行部277とを備える。
構文解析部274は、ブラウザエミュレータ25により取得されたウェブコンテンツに含まれるコードの構文解析を行う。具体的には、ブラウザエミュレータ25のスクリプトインタプリタ部254がウェブコンテンツに含まれるコードのスクリプトを解釈する過程で、スクリプトの構文解析を行い、ウェブコンテンツに含まれるコードから、他のサイトへの転送コードまたはコンテンツ取得コードを探索する。そして、構文解析部274は、探索の結果発見された転送コードまたはコンテンツ取得コードに使用されるオブジェクト、オブジェクトのプロパティ、関数を特定する。
この構文解析の具体例を説明する。ここでの解析対象のコードは、例えば、図3に示すようなJavaScript(登録商標)により記述されたコードであるものとする。なお、図3に示すコードはJREのバージョン情報をもとに制御命令を実行後、他のサイトへの転送を実行する転送コード、または、他のサイトからコンテンツを取得するコンテンツ取得コードを実行するコードである。また、構文解析部274が探索対象とする転送コードおよびコンテンツ取得コードは、図4の符号401および符号402に示すコードであるものとする。なお、符号402に示すコンテンツ取得コードは、所定のHTMLタグにおいて所定の属性名に代入されるURLをもとに、外部コンテンツを取得するコードである。このコンテンツ取得コードで使用されるHTMLタグとその外部コンテンツのURLを指定する属性名のペアは、例えば、符号403に示すHTMLタグおよび属性名のペアであるものとする。これらのコードに関する情報(探索対象コード情報)は、ブラウザエミュレータマネージャ23の記憶部(図示省略)の所定領域に記憶され、管理者等が適宜設定可能である。
例えば、構文解析部274は、図3のコードの制御文部分(図3の5行目から12行目まで)を、Rhinoに搭載されているJavaScript(登録商標)コードの抽象構文木解析機能を用いて図5に示す抽象構文木に変換する。この抽象構文木における各ノード(以下、ASTノードと呼ぶ。)に記されているラベルについて説明する。
IfStatementは、JavaScript(登録商標)におけるif文を意味し、子ASTノードの左から条件文、THEN文、ELSE文を意味している。Scopeは、コード中のスコープの範囲({})を表しており、ExpressionStatementは、文の終わりを示すセミコロン(;)を含む文一行を表している。7行目に該当する抽象構文木に含まれるFunctionCallは、関数実行を意味し、子ASTノードの左から、関数名、引数1、引数2・・・と続く。FunctionCallの関数名にあたるPropertyGetは、オブジェクトのプロパティ参照を意味し、Nameは、オブジェクト名や関数名、プロパティ名を意味する。FunctionCallの引数1にあたるStringLiteralは文字列を表している。さらに引数2のInfixExpressionは二項演算を意味し、子ASTノードはそれぞれ左辺と右辺を表している。図3のコードの11行目に該当する抽象構文木に含まれるAssignmentは、代入文を意味し、子ASTノードはそれぞれ左辺と右辺を意味する。また、図5における三角形のノードのSubTree1〜3は、SubTree1が図3のコードの5行目の条件文、SubTree2が図3のコードの6行目の文、SubTree3が図3のコードの8行目の文を表しており、他と同様に抽象構文木が含まれる。
例えば、構文解析部274は、図5に示す抽象構文木から、図4に示す転送コードおよびコンテンツ取得コードに関連するASTノードとして、図5中の太線で強調したASTノード(setAttribute、location、hrefのASTノード)を探索する。
構文解析部274は、このように抽象構文木を網羅的に探索することで、制御文により実行されない転送コードやコンテンツ取得コードに使用されるオブジェクト、オブジェクトのプロパティ、関数についても特定できる。
なお、構文解析部274は、上記の方法以外の方法でコードの構文解析を行ってももちろんよい。
図2のプログラム依存グラフ構築部275は、構文解析部274による探索の結果、探索対象のコード(つまり、転送コードまたはコンテンツ転送コード)が発見されたとき、ウェブコンテンツから取得したコードの各文をノードとし、ノード間におけるデータ依存関係および制御依存関係を示したプログラム依存グラフを構築する。そして、プログラム依存グラフ構築部275は構築したプログラム依存グラフを用いて、発見された転送コードまたはコンテンツ転送コードに関連するノードを特定する。
例えば、プログラム依存グラフ構築部275は、JavaScript(登録商標)コードにおける変数定義文、代入文、関数定義文、関数実行文、リターン文、条件分岐文、ループ文、例外処理文等をプログラム依存グラフ(Program Dependence Graph)におけるノード(以下、PDGノードと呼ぶ。)とし、ノード間のデータ依存関係や制御依存関係をエッジ(以下、PDGエッジと呼ぶ。)としたプログラム依存グラフを構築する。
例えば、プログラム依存グラフ構築部275は、図3に示すコードから、図6に示すプログラム依存グラフを構築する。図6に示すプログラム依存グラフの各PDGノードに記されているラベルについて説明する。VariableInitializerは、変数定義を意味し、定義対象となる変数名も併記している。IfStatement、Assignment、FunctionCallは、図5に示した抽象構文木におけるラベルの意味と同じであり、条件文やオブジェクト名、関数名を併記している。また、図6に示すプログラム依存グラフの実線矢印で示すPDGエッジはデータ依存関係を表しており、破線矢印で示すPDGエッジは制御依存関係を表している。例えば、図6に示すプログラム依存グラフにおいて、FunctionCall ifr.setAttributeは、VariableInitializer src、VariableInitializer jre、VariableInitializer ifrとデータ依存関係があり、また、IfStatement jre[1]==“6”と制御依存関係があることを示す。
プログラム依存グラフ構築部275は、このようなプログラム依存グラフから、構文解析部274で特定したコード(ASTノード)に関連するPDGノードを特定する。例えば、構文解析部274が図5に示す抽象構文木において太線で強調したASTノード(setAttribute、location、href)を特定した場合、プログラム依存グラフ構築部275は、このASTノードに関連するPDGノードとして図6の太線で強調したPDGノード(FunctionCall ifr.setAttribute、Assignment location.href)を特定する。
図2のプログラムスライシング部276は、ウェブコンテンツから取得したコードのうち、プログラム依存グラフ構築部275により特定されたプログラム依存グラフのノード(例えば、図6の太線で強調したPDGノード)の文をスライシング基準とし、プログラム依存グラフから、スライスを抽出する。つまり、プログラムスライシング部276は、プログラム依存グラフにおけるデータ依存関係(図6の実線矢印参照)を用いて逆方向スライスを適用し、転送コードまたはコンテンツ取得コードに関連するスライスを抽出する。なお、一般的に、スライスを抽出するときには、プログラム依存グラフにおける制御依存関係を考慮するが、プログラムスライシング部276は、プログラム依存グラフにおける制御依存関係は考慮せず、データ依存関係を考慮した逆方向スライスを適用することで、コードの制御文に依存しないスライスを抽出する。
プログラムスライシング部276は、例えば、図6に示すプログラム依存グラフを用いて、太線で強調したPDGノード(FunctionCall ifr.setAttribute、Assignment location.href)の文をスライシング基準(図3に示すコードの7行目のsetAttribute():<7,setAttribute>と11行目のlocation.href:<11,location.href>)とし、スライスを抽出する。例えば、プログラムスライシング部276はスライシング基準<7,setAttribute>により、図3に示すコードの7行目のsetAttributeの文とデータ依存関係のある文をスライスとして抽出する(図7の符号701→符号702参照)。なお、ここでは説明を省略するが、プログラムスライシング部276は、スライシング基準<11,location.href>についても同様に、スライスを抽出する。
図2のスライス実行部277は、プログラムスライシング部276で抽出したスライスをスクリプトインタプリタ部254に実行させる。つまり、スライス実行部277はプログラムスライシング部276で抽出したスライスをスクリプトインタプリタ部254に解釈させ、その解釈の過程で、転送コードまたはコンテンツ取得コードに使用されるオブジェクト、オブジェクトのプロパティ、関数に代入される値の引数を監視し、URLを抽出する。
例えば、ブラウザエミュレータ25がJRE(登録商標)バージョン7がインストールされたクライアント環境を模擬している場合を考える。この場合、スライス実行部277は、ブラウザエミュレータ25のスクリプトインタプリタ部254に図7の符号702に示すスライスを実行させ、転送コードまたはコンテンツ取得コードに使用されるオブジェクト、オブジェクトのプロパティ、関数に代入される値の引数を監視すると、例えば、監視しているsetAttribute()関数の引数2から、http://example.com/exploit/?jre=7というURLを抽出する。
ただし、スライス実行部277は、DOM(Document Object Model)を操作するコードを実行できるよう、DOMの読み込みが完了したタイミング(例えば、Firefox(登録商標)、Google Chrome(登録商標)におけるDOMContentLoadedイベントの直前)で、スライスを実行する。また、スライス実行部277は、スライスを実行した結果が本来のJavaScript(登録商標)等の処理に影響を与えないよう、スライスを実行する時点のDOM情報(DOMツリーの構造や値)およびJavaScript(登録商標)のコンテキスト情報(例えば、変数定義や関数定義等)は、スライス実行用に複製し、スライスを実行した後は破棄するものとする。
また、ブラウザエミュレータ25のアクセス部252は、スライスの実行により抽出されたURL(例えば、図8に示す解析情報の「スライス」が「1」のURL)にアクセスすることで、さらにウェブコンテンツを取得し、取得したウェブコンテンツにコードが含まれていた場合は、上記と同様にスクリプトインタプリタ部254によるスクリプトの解釈と、構文解析部274、プログラム依存グラフ構築部275、プログラムスライシング部276およびスライス実行部277による処理とを実行する。つまり、ブラウザエミュレータマネージャ23は、スライスの実行により抽出されたURLに対し再帰的な解析を行う。これにより、ブラウザエミュレータマネージャ23は攻撃URLや踏台URLである可能性のあるURLをより多く抽出することができる。
なお、ブラウザエミュレータマネージャ23が上記のようなスライスの実行により抽出されたURLに対し再帰的な解析を行うか否かは、監視対象のオブジェクトやオブジェクトのプロパティ、関数に応じて、システムの管理者等が適宜設定するようにしてもよい。
(解析情報データベース)
次に解析情報データベース24を説明する。前記したとおり、解析情報データベース24は、解析情報を記憶する。解析情報は、例えば、図8に示すとおり、解析情報の識別情報である解析ID、ブラウザエミュレータ25が解析対象ウェブサイトのURLにアクセスした際にアクセスしたURLである「アクセスURL」、当該URLにアクセスした日時を示す「タイムスタンプ」、当該URLがプログラムスライシングによって抽出されたURLか否かを表す「スライス」等を対応付けた情報である。なお、この解析情報における「スライス」の項目が「1」のURLは当該URLがプログラムスライシングにより抽出されたURLであることを示し、「スライス」の項目が「0」のURLは当該URLがプログラムスライシングにより抽出されたURLではないことを示す。また、「アクセスURL」は、解析対象ウェブサイトのURLのみならず、当該URLへのアクセスにより転送されたウェブサイトのURLも含む。なお、解析情報は、上記以外の情報を含んでいてももちろんよい。
以上説明したシステムによれば、ウェブコンテンツから取得したコードを網羅的に探索し、転送コードやコンテンツ取得コードを特定する。そして、その特定した転送コードやコンテンツ取得コードからURLを抽出する。その結果、システムは、クライアントの環境に依存して行われるドライブバイダウンロード攻撃において攻撃URLや踏台URLである可能性のあるURLを抽出することができる。
(処理手順)
次に、図9を用いて、システムの処理手順の例を説明する。まず、URLリスト作成部271は、巡回対象URLリストを作成する(S1)。例えば、URLリスト作成部271は、公開されている悪性ウェブサイトのブラックリストをもとに巡回対象URLリストを作成する。
そして、アクセス指示部272は、ブラウザエミュレータ25に巡回対象URLリストのURLを入力し(S2)、ブラウザエミュレータ25はアクセス部252で、S2で入力されたURLにアクセスする(S3)。そして、アクセス部252は、アクセス先のURLからウェブコンテンツを取得する。
なお、S2においてアクセス指示部272は、1つのブラウザエミュレータ25に複数のURLへアクセスさせてもよいし、複数のブラウザエミュレータ25にそれぞれ異なるURLへアクセスさせるようにしてもよい。
S3の後、ブラウザエミュレータ25のHTML/CSSパーサ253は、取得したウェブコンテンツを解釈し、スクリプトインタプリタ部254において取得したウェブコンテンツにコードが含まれていれば、このコードを解釈し、プログラム解析部273においてコード解析を行う(S4)。このコード解析の詳細は後記する。
S4の後、アクセス部252はアクセスログを出力する(S5)。つまり、アクセス部252は、アクセス指示部272により入力されたURLへのアクセス結果をアクセスログとして出力する。そして、登録処理部278は、S5で出力されたアクセスログ、S4のコード解析により出力されたURLを整形し(S6)、整形されたデータを解析情報データベース24(図8参照)に蓄積する(S7)。
ここで、スライス実行部277によるスライスの実行により抽出されたURLを解析する旨が設定されていれば(S8でYes)、アクセス指示部272は、解析情報データベース24の解析情報からスライスの実行により抽出されたURLを読み出し、当該URLを巡回対象URLのURLとしてS2以降の処理を行う。つまり、ブラウザエミュレータマネージャ23はスライスの実行により抽出されたURLに対し再帰的な解析を行う。
なお、S8において、スライスの実行により抽出されたURLを解析する旨が設定されておらず(S8でNo)、巡回対象URLリストに次の巡回URLが存在すれば(S9でYes)、S2へ戻る。一方、巡回対象URLリストに次の巡回URLが存在しなければ(S9でNo)、処理を終了する。
上記のようにして解析情報データベース24に解析情報が蓄積されると、URL解析部279は、解析情報のURLの解析処理を行い、例えば、攻撃URLや踏台URLである可能性の高いURLを抽出する。
次に、図10および図11を用いて、図9のS4のコード解析処理を詳細に説明する。ここでは、構文解析部274がコードの構文解析を行う際に、抽象構文木(図5参照)を用いる場合を例に説明する。
まず、構文解析部274はウェブコンテンツから取得したコードを抽象構文木(図5参照)に変換する(図10のS11)。ここで、抽象構文木に探索対象となる抽象構文木ノードが存在した場合(S12でYes)、プログラム依存グラフ構築部275は、プログラム依存グラフ(図6参照)を構築する(S13)。一方、抽象構文木に探索対象となる抽象構文木ノードが存在しない場合(S12でNo)、図11のS18へ進む。
また、S13の後、探索対象となる抽象構文木ノードが転送コードまたはコンテンツ取得コードに関連するノードである場合(S14でYes)、プログラム依存グラフ構築部275は、その抽象構文木ノードに関連するプログラム依存グラフノードを特定する(S15)。そして、プログラム依存グラフ構築部275は、S15で特定したプログラム依存グラフノードを、スライシング基準に使用するノードとして保持する(S16)。一方、S14において探索対象となる抽象構文木ノードが転送コード、コンテンツ取得コードいずれにも関連しないノードである場合(S14でNo)、S17へ進む。
S17においてプログラム依存グラフ構築部275が、次の探索対象となる抽象構文木ノードが存在すると判断したとき(S17でYes)、S13へ戻る。一方、次の探索対象となる抽象構文木ノードが存在しない判断したとき(S17でNo)、図11のS18へ進む。
図11のS18において、プログラム依存グラフ構築部275が、スライシング基準として保持したプログラム依存グラフノードが存在すると判断したとき(S18でYes)、プログラムスライシング部276は、S16で保持したプログラム依存グラフノードの文をスライシング基準とし、スライスの抽出を行う(S19)。なお、S18においてプログラム依存グラフ構築部275が、スライシング基準として保持したプログラム依存グラフノードは存在しないと判断したとき(S18でNo)、処理を終了する。
S19の後、スライス実行部277は、S19で抽出されたスライスを実行し(S20)、転送コードやコンテンツ取得コードに使用されるオブジェクトやオブジェクトのプロパティ、関数に代入される値や引数からURLを抽出し、出力する(S21)。S21の後、次のスライシング基準となるプログラム依存グラフノードがまだ存在すれば(S22でYes)、S19へ戻り、次のスライシング基準となるプログラム依存グラフノードが存在しなければ(S22でNo)、処理を終了する。
以上説明したシステムによれば、ウェブコンテンツから取得したコードを網羅的に探索し、転送コードやコンテンツ取得コードを特定する。そして、その特定した転送コードやコンテンツ取得コードからURLを抽出する。その結果、システムは、クライアントの環境に依存して行われるドライブバイダウンロード攻撃において攻撃URLや踏台URLである可能性のあるURLを抽出することができる。
なお、構文解析部274において特定するオブジェクト、オブジェクトのプロパティ、関数は、転送コードやコンテンツ取得コードに関するものに限定されず、目的に応じて適宜変更可能である。
また、プログラム依存グラフ構築部275において、JavaScript(登録商標)コードの文のうち、プログラム依存グラフにおけるプログラム依存グラフノードとする文は、変数定義文、代入文、関数定義文、関数実行文、リターン文、条件分岐文、ループ文、例外処理文等としたが、これら以外にも、システムの管理者等が適宜追加、変更してもよい。
なお、プログラム解析部273がコード解析の結果、出力する情報はURL以外の情報であってもよい。例えば、攻撃コードに使用されるオブジェクトやオブジェクトのプロパティ、関数の情報が事前に分かっていれば、プログラム解析部273は、これらの情報を用いて攻撃コードを特定し、特定した攻撃コードに使用される各種情報を出力してもよい。
また、システムは、ブラウザエミュレータ25を用いて解析対象ウェブサイト12にアクセスすることとしたが、ブラウザエミュレータ25以外(例えば、実際のクライアント環境)を用いて解析対象ウェブサイト12にアクセスしてもよい。
また、システムのプログラムスライシング部276は、プログラム依存グラフ構築部275により構築されたプログラム依存グラフにおける制御依存関係を考慮せず、データ依存関係に基づきスライスを抽出することとしたが、これに限定されない。例えば、プログラムスライシング部276は、プログラム依存グラフにおける制御依存関係の一部とデータ依存関係とを用いてスライスを抽出してもよい。さらに、プログラムスライシング部276は、プログラム依存グラフを用いてスライスを抽出することとしたが、各コードの制御依存関係とデータ依存関係とが把握できれば、プログラム依存グラフを用いなくてもよい。
[第2の実施形態]
次に、図12を用いて第2の実施形態のシステムの構成例を説明する。第2の実施形態では、制御依存関係を考慮に入れたスライスの抽出方法ならびに転送されるために必要なクライアント環境を特定する方法を説明する。第2の実施形態は、抽出したスライスに実行経路が含まれる場合に、網羅的にURLを抽出するため、実行経路ごとにスライスを抽出する実行経路探索部270aと、抽出した攻撃URLや踏台URLである可能性のあるURLへ転送されるために必要なクライアント環境を特定するため、プログラム依存グラフにおける条件分岐文を示すノードもスライシング基準として加えるプログラムスライシング部276aと、を備えることを特徴とする。システムは、例えば、図12に示すようにネットワーク1aとネットワーク2aとを備える。ネットワーク1aとネットワーク2aとはパケット転送装置3aにより接続される。
ネットワーク1aは、解析対象ウェブサイト12aを備える。ネットワーク1aは、インターネットのように広域なネットワークであってもよいし、法人ネットワークのように中小規模なネットワークや、クラウド環境やホスティング環境のネットワークであってもよい。
解析対象ウェブサイト12aは、ブラウザエミュレータマネージャ(解析装置)23aによる解析対象のウェブサイトである。この解析対象ウェブサイト12aは、例えば、公開されている悪性ウェブサイトのブラックリストに掲載されているウェブサイト等である。
また、ネットワーク2aは、ブラウザエミュレータマネージャ23aと、解析情報データベース24aとを備える。ネットワーク2aは、ローカルエリアネットワークのように小規模なネットワークであってもよいし、法人ネットワークのように中小規模なネットワークである場合やクラウド環境やホスティング環境のネットワークであってもよい。
ブラウザエミュレータマネージャ23aは、1以上のブラウザエミュレータ25aを管理し、このブラウザエミュレータ25aに所定のウェブサイト(解析対象ウェブサイト12a)へアクセスさせる。そして、ブラウザエミュレータマネージャ23aは、ブラウザエミュレータ25aがアクセスしたウェブサイトのURLや、当該ウェブサイトから取得したコードの解析により得られたURL等を解析情報データベース24aへ蓄積する。
ブラウザエミュレータ25aは、ブラウザの動作を模擬する装置である。このブラウザエミュレータ25aは、例えば、ハニーネットプロジェクトが提供しているブラウザエミュレータ(http://www.honeynet.org/node/827参照)や、オープンソースとして開発されたHtmlUnitやSeleniumが適用できる。このブラウザエミュレータ25aの詳細は後記する。なお、図12においてブラウザエミュレータ25aはブラウザエミュレータマネージャ23a内に構築されるように描かれているが、ブラウザエミュレータマネージャ23a外に構築されてももちろんよい。
解析情報データベース24aは、ブラウザエミュレータ25aがアクセスしたウェブサイトのURLや、当該ウェブサイトから取得したコードの解析により得られたURL等を蓄積(保存)する。この解析情報データベース24aにおけるデータの保存は、RDBMS(Relational DataBase Management System)を用いてもよいし、テキスト形式で保存してもよい。この解析情報データベース24aの詳細は後記する。
なお、本実施形態では、ブラウザエミュレータ25a、ブラウザエミュレータマネージャ23aおよび解析情報データベース24aを同じネットワークに配置しているが、それぞれ別ネットワークに配置してもよい。また、各構成をセキュアに接続するため、既存の暗号技術を適用して通信情報を暗号化したり、各装置が配置されたネットワーク間または各構成間をVPN(Virtual Private Network)で接続したりしてもよい。
次に、図13を用いてブラウザエミュレータマネージャ23aおよびブラウザエミュレータ25aを詳細に説明する。ブラウザエミュレータマネージャ23aはブラウザエミュレータ25aおよび制御部27aを備える。制御部27aは、ホストシステム26a上でブラウザエミュレータ25aを動作させる。このホストシステム26aは、例えば、ブラウザエミュレータマネージャ23aが備えるOSを用いる。制御部27aの詳細は後記する。
(ブラウザエミュレータ)
次に、ブラウザエミュレータ25aを説明する。ブラウザエミュレータ25aは、クライアント環境模擬部251aと、アクセス部252aと、HTML/CSS(HyperText Markup Language/Cascading Style Sheets)パーサ253aと、スクリプトインタプリタ部254aとを備える。
クライアント環境模擬部251aは、ブラウザエミュレータ25aが模擬すべきクライアント環境(例えば、OS、ブラウザ、プラグイン等)の情報を設定する。
アクセス部252aは、ウェブサイト(例えば、図12の解析対象ウェブサイト12a)と、HTTP(HyperText Transfer Protocol)またはHTTPS(HyperText Transfer Protocol Secure)による通信を行い、当該ウェブサイトからウェブコンテンツを取得する。ここでアクセス部252aは、HTTPまたはHTTPSによる通信時、HTTPヘッダのUser-Agentフィールドに、クライアント環境模擬部251aで設定したクライアント環境を使用する。これによりブラウザエミュレータ25aは、クライアント環境を模擬する。このアクセス部252aには、例えば、フリーソフトウェアとして開発されたcURLを用いる。
また、アクセス部252aは、ウェブサイトへのアクセス結果をアクセスログに記録する。例えば、アクセス部252aは、アクセスしたウェブサイトのURLや、アクセスした日時をアクセスログに記録する。また、アクセス部252aは当該ウェブサイトへアクセスした結果、別のウェブサイトに遷移した場合、その遷移先のURL等もアクセスログに記録する。
HTML/CSSパーサ253aは、アクセス部252aで取得したウェブコンテンツを解釈するコンテンツパーサである。また、HTML/CSSパーサ253aは、ウェブコンテンツを解釈した結果、当該ウェブコンテンツにコードが含まれる場合、スクリプトインタプリタ部254aを用いてコードを解釈する。
スクリプトインタプリタ部254aは、ウェブコンテンツに含まれるコードを解釈する。例えば、コードがJavaScript(登録商標)により記述されている場合、スクリプトインタプリタ部254aは、オープンソースとして開発されたSpiderMonkeyやV8 JavaScript(登録商標)Engine等のJavaScript(登録商標)インタプリタ、Java(登録商標)で記述されたJavaScript(登録商標)インタプリタであるRhino等を用いてコードを解釈する。
(制御部)
次に、制御部27aを説明する。制御部27aは、URLリスト作成部271aと、アクセス指示部272aと、プログラム解析部273aと、登録処理部278aと、URL解析部279aとを備える。
URLリスト作成部271aは、各ブラウザエミュレータ25aが巡回するウェブサイト(解析対象ウェブサイト12a)のURLリストである巡回対象URLリストを作成する。例えば、URLリスト作成部271aは、公開されている悪性ウェブサイトのブラックリストに掲載されているウェブサイトのURLをもとに巡回対象URLリストを作成する。
アクセス指示部272aは、各ブラウザエミュレータ25aのアクセス部252aへ巡回対象URLリスト(URLリスト)に示されるURLへのアクセスを指示する。
プログラム解析部273aは、アクセス先のウェブサイトから取得したウェブコンテンツに含まれるプログラム(コード)の解析を行う。このプログラム解析部273aの詳細は後記する。
登録処理部278aは、各ブラウザエミュレータ25aのアクセスログを取得し、解析情報データベース24aに登録する。また、登録処理部278aは、プログラム解析部273aによるコードの解析(後記するスライスの実行)により得られたURLやクライアント環境情報(環境情報)を解析情報データベース24aに登録する。
URL解析部279aは、解析情報データベース24aに蓄積されたアクセスログやコード解析により得られたURL(解析情報)を解析し、その解析結果を出力する。例えば、URL解析部279aは、アクセスログに含まれるURLや、コード解析により得られたURLから、攻撃URLや踏台URLである可能性のあるURLを抽出し、出力する。
(プログラム解析部)
次に、プログラム解析部273aを詳細に説明する。プログラム解析部273aは、構文解析部274aと、プログラム依存グラフ構築部275aと、プログラムスライシング部276aと、スライス実行部277aと、実行経路探索部270aとを備える。
構文解析部274aは、ブラウザエミュレータ25aにより取得されたウェブコンテンツに含まれるコードの構文解析を行う。具体的には、ブラウザエミュレータ25aのスクリプトインタプリタ部254aがウェブコンテンツに含まれるコードのスクリプトを解釈する過程で、スクリプトの構文解析を行い、ウェブコンテンツに含まれるコードから、他のサイトへの転送コードを特定する。
この構文解析の具体例を説明する。ここでの解析対象のコードは、例えば、図14に示すようなJavaScript(登録商標)により記述されたコードであるものとする。なお、図14に示すコードはクライアントにインストールされているJava(登録商標)のバージョン情報をもとに条件分岐文を実行後、他のウェブサイトへの転送を実行するスクリプト転送コードである。また、構文解析部274aが特定対象とする転送コードは、例えば、図15の符号401aに示すスクリプト転送コードであるものとする。なお、図15の符号402aに示すタグ転送コードは、所定のHTMLタグにおいて所定の属性名に代入されるURLをもとに、外部コンテンツを取得するコードである。このタグ転送コードで使用されるHTMLタグとその外部コンテンツのURLを指定する属性名のペアは、例えば、図15の符号403aに示すHTMLタグおよび属性名のペアであるものとする。これらのコードに関する情報(特定対象コード情報)は、ブラウザエミュレータマネージャ23aの記憶部(図示省略)の所定領域に記憶され、システム管理者等が適宜設定可能である。
例えば、構文解析部274aは、抽象構文木を用いてコードを木構造データへ変換し、木構造データを探索することで転送コードを特定する。なお、この抽象構文木を用いたデータ変換や転送コード特定等の解析手法については、例えば、非特許文献3の技術を用いればよい。構文解析部274aは、抽象構文木の網羅的な探索により、例えば、図15に示す転送コードに使用されるオブジェクトやオブジェクトのプロパティ、関数を特定する。図14に示すコードでは、14行目のlocation.hrefが特定対象となる。
なお、構文解析部274aは、上記の方法以外の方法で構文解析を行ってももちろんよい。また、図14および図15は、プログラム解析部273aを説明するために示した例であり、これらに限るものではない。
図13のプログラム依存グラフ構築部275aは、構文解析部274aによる構文解析時に、ウェブコンテンツから取得したコードの各文をノードとし、ノード間におけるデータ依存関係および制御依存関係を示したプログラム依存グラフを構築する。そして、プログラム依存グラフ構築部275aは構築したプログラム依存グラフを用いて、構文解析部274aにより特定した転送コードに関連するノードを特定する。
例えば、プログラム依存グラフ構築部275aは、JavaScript(登録商標)コードにおける変数定義文、代入文、関数定義文、関数実行文、リターン文、条件分岐文、ループ文、例外処理文等をプログラム依存グラフ(Program Dependence Graph)におけるノード(以下、PDGノードと呼ぶ。)とし、ノード間のデータ依存関係や制御依存関係をエッジ(以下、PDGエッジと呼ぶ。)としたプログラム依存グラフを構築する。
例えば、プログラム依存グラフ構築部275aは、図14に示すコードから、図16に示すプログラム依存グラフを構築する。図16に示すプログラム依存グラフの各PDGノードに記されているラベルについて説明する。VariableInitializerは、変数定義を意味し、定義対象となる変数名も併記している。IfStatementおよびAssignmentはそれぞれ、条件文、変数代入を表し、条件式や変数名を併記している。また、PDGノードに記されている番号は、図14に示すコードの行数を表している。図16に示すプログラム依存グラフの実線矢印で示すPDGエッジはデータ依存関係を表しており、破線矢印で示すPDGエッジは制御依存関係を表している。
例えば、図16に示すプログラム依存グラフにおいて、IfStatement jre[1]==“6”は、VariableInitializer jreとデータ依存関係があり、また、IfStatement jre[1]==“6”は、Assignment urlおよびIfStatement jre[1]==“7”と制御依存関係があることを示す。
プログラム依存グラフ構築部275aは、このようなプログラム依存グラフから、構文解析部274aで特定したコードに関連するPDGノードを特定する。例えば、構文解析部274aは、図14に示すコードから、14行目のlocation.hrefを特定した場合、プログラム依存グラフ構築部275aは、図16の太線で強調したPDGノード(Assignment location.href)を特定する。
図13のプログラムスライシング部276aは、ウェブコンテンツから取得したコードのうち、プログラム依存グラフ構築部275aにより特定されたプログラム依存グラフのノード(例えば、図16の太線で強調したPDGノード)の文をスライシング基準とし、プログラム依存グラフから、スライスを抽出する。
なお、一般的に、スライスを抽出するときには、プログラム依存グラフにおけるデータ依存関係および制御依存関係を再帰的に辿る。しかし、本実施形態のプログラムスライシング部276aは、まず、プログラム依存グラフにおけるデータ依存関係を再帰的に辿ることで、変数の定義参照に関連する文(ノード)を抽出し、次に制御依存関係を所定数以下(例えば、一度)辿ることで、抽出した文の制御フローに関連する文を抽出し、抽出した文をスライスとする。この時、抽出したスライスに関数定義文(function文)が含まれる場合は、プログラムスライシング部276aにより、該当する関数呼び出し文も合わせて抽出する。加えて、関数定義文に引数を含む場合は、プログラムスライシング部276aは、該当する関数呼び出し文の引数に関連のある文も、同様に抽出する。
なお、ここで制御依存関係については、所定数以下(例えば、一度)辿ることとしたのは、制御依存関係について再帰的に辿ると、スライシング基準(着目している文、例えば、図16のAssignment location.href)に関連の薄い文も抽出してしまう可能性があるからである。つまり、本実施形態のプログラムスライシング部276aは、プログラム依存グラフにおけるデータ依存関係を再帰的に辿った後、制御依存関係については所定数以下(例えば、一度)に絞り込んで辿ることで、スライシング基準(着目している文、例えば、図16のAssignment location.href)と関連が高い文を抽出することができる。
プログラムスライシング部276aは、例えば、図16に示すプログラム依存グラフを用いて、太線で強調したPDGノード(Assignment location.href)の文をスライシング基準(図14に示すコードの14行目のlocation.href:<14,location.href>が該当)とし、スライスを抽出する。例えば、プログラムスライシング部276aは、スライシング基準<14, location.href>により、まず図14に示すコードの14行目のlocation.hrefの文とデータ依存関係を再帰的に考慮し、PDGノードを抽出し、次に、制御依存関係を一度のみ考慮したPDGノードを抽出する(つまり、図16に示すプログラム依存グラフから図17に示すPDGノードが抽出される)。そして、プログラムスライシング部276aは、例えば、図17に示すPDGノードをもとに、図18の符号701a→符号702aに示すようなスライスを抽出する。
図13の実行経路探索部270aは、プログラムスライシング部276aで抽出したスライスに複数の実行経路が含まれる場合(つまり、制御依存関係を考慮した際に条件分岐文等が含まれる場合)に、当該スライスを構文解析部274aで構文解析することで、実行経路ごとのスライスを抽出する。つまり、実行経路探索部270aは、構文解析部274aに探索対象コード(スライス)を構文解析させ、構文解析の過程で、条件分岐文等による複数の実行経路を特定した際に、それぞれの実行経路ごとのスライスを抽出することで、制御フローに依存しないスライスを抽出する。例えば、実行経路探索部270aは、図19の符号801a(もしくは図18の符号702a)に示すコード(スライス)から、図19の符号802a〜804aに示す3つのスライスを抽出する。
なお、実行経路探索部270aは、制御フローに依存せずにスライスを抽出するため、条件分岐文やループ文、例外処理文等を削除したスライスをそれぞれ生成する。
図13のスライス実行部277aは、プログラムスライシング部276aまたは実行経路探索部270aで抽出したスライスをスクリプトインタプリタ部254aに実行させる。つまり、スライス実行部277aは、プログラムスライシング部276aまたは実行経路探索部270aで抽出したスライスをスクリプトインタプリタ部254aに解釈させ、その解釈の過程で、転送コードまたはコンテンツ取得コードに使用されるオブジェクト、オブジェクトのプロパティ、関数に代入される値の引数を監視し、URLを抽出する。
例えば、スライス実行部277aは、ブラウザエミュレータ25aのスクリプトインタプリタ部254aに、図19の符号802a〜804aに示すスライスをそれぞれ実行させ、転送コードに使用されるオブジェクトや関数の引数、プロパティの代入値を監視し、例えば、監視しているlocation.hrefプロパティから、http://A.example/mal1/、http://A.example/mal2/、http://B.example/benign/というURLを抽出する。
ただし、スライス実行部277aは、DOM(Document Object Model)を操作するコードを実行できるよう、DOMの読み込みが完了したタイミング(例えば、Firefox(登録商標)、Google Chrome(登録商標)におけるDOMContentLoadedイベントの直前)で、スライスを実行する。また、スライス実行部277aは、スライスを実行した結果が本来のJavaScript(登録商標)等の処理に影響を与えないよう、スライスを実行する時点のDOM情報(DOMツリーの構造や値)およびJavaScript(登録商標)のコンテキスト情報(例えば、変数定義や関数定義等)は、スライス実行用に複製し、スライスを実行した後は破棄するものとする。
また、ブラウザエミュレータ25aのアクセス部252aは、スライスの実行により抽出されたURL(例えば、図22に示す解析情報の「スライス」が「1」のURL)にアクセスすることで、さらにウェブコンテンツを取得し、取得したウェブコンテンツにコードが含まれていた場合は、上記と同様にスクリプトインタプリタ部254aによるスクリプトの解釈と、構文解析部274a、プログラム依存グラフ構築部275a、プログラムスライシング部276a、実行経路探索部270aおよびスライス実行部277aによる処理とを実行する。つまり、ブラウザエミュレータマネージャ23aは、スライスの実行により抽出されたURLに対し再帰的な解析を行う。これにより、ブラウザエミュレータマネージャ23aは攻撃URLや踏台URLである可能性のあるURLをより多く抽出することができる。
なお、ブラウザエミュレータマネージャ23aが上記のようなスライスの実行により抽出されたURLに対し再帰的な解析を行うか否かは、監視対象のオブジェクトやオブジェクトのプロパティ、関数に応じて、システムの管理者等が適宜設定するようにしてもよい。
以上説明したプログラム解析部273aによれば、ウェブコンテンツから取得したコードを網羅的に解析し、転送コードを特定する。そして、その特定した転送コードからURLを抽出する。加えて、このプログラム解析部273aは、抽出したURLに転送されるために必要なクライアント環境情報を特定する。このプログラム解析部273aによるクライアント環境情報の特定について説明する。
(クライアント環境情報の特定)
プログラム解析部273aは、スライス実行部277aによりURLを抽出できた場合において、プログラムスライシング部276aにより抽出したスライスに条件分岐文が含まれるとき、その条件分岐文をスライシング基準とする。そして、プログラムスライシング部276aは、当該スライシング基準を用いてスライスを抽出し、抽出したスライスをスライス実行部277aにより実行する。その結果、ウェブコンテンツに含まれるコードにおいて、URLを抽出できた転送コード前段の条件分岐文で、クライアント環境情報を使用する条件判定が行われていれば、当該転送コードがクライアント環境に依存した転送コードであることが分かる。
このようなクライアント環境情報を使用する条件分岐文では、ブラウザやプラグインのメジャーバージョンとマイナーバージョンを評価するために、文字列操作関数を用いたバージョン情報の分割と結合を行った後、条件判定する場合が多い(図14に示すコードの2行目の文や、非特許文献5参照)。したがって、スライス実行部277aは、プログラムスライシング部276aで抽出したスライスをスクリプトインタプリタ部254aに解釈させ、その解釈の過程で、スライスに使用される文字列操作等に関連するオブジェクトや関数の引数、プロパティの代入値を監視することで、スライスの実行によるクライアント環境情報の使用を特定する。すなわち、スライス実行部277aは、抽出したURLと、当該URLへの転送に必要なクライアント環境情報を関連付ける。
例えば、図18の符号702a(もしくは図19の符号801a)に示すスライスに含まれる条件分岐文をスライシング基準(図18の符号702aに示すコードの5行目のif文:<5,if>が該当)とした場合に、抽出対象となるPDGノードを図20に示す。なお、ここでは説明を省略するが、プログラムスライシング部276aは、スライシング基準<8,if>についても同様にスライスを抽出する。
そして、プログラムスライシング部276aは、例えば、図20に示すPDGノードをもとに、図21の符号1001a→符号1002aに示すようなスライスを抽出する。
例えば、ブラウザエミュレータ25aがJava(登録商標)のバージョン「1.6.0.22」がインストールされたクライアント環境を模擬している場合を考える。この場合、スライス実行部277aは、ブラウザエミュレータ25aのスクリプトインタプリタ部254aに図21の符号1002aに示すスライスを実行させ、文字列操作等に関連するオブジェクトや関数の引数、プロパティの代入値を監視する。そして、スライス実行部277aにおいて監視している文字列操作に関連する関数であるsplit関数のStringオブジェクトが「1.6.0.22」というJava(登録商標)のバージョン値であることを特定することで、抽出したスライスの実行にJava(登録商標)の環境情報を使用していることが特定できる。
なお、スライス実行部277aが、ウェブコンテンツに含まれるコードにおけるクライアント環境情報の使用を特定する際には、例えば、ブラウザエミュレータ25aで模擬するクライアント環境の名称情報やバージョン情報の完全一致により特定をしてもよいし、正規表現を使用したクライアント情報のシグネチャを生成し、そのシグネチャにより特定をしてもよい。
ただし、スライス実行部277aは、URLの抽出時と同様に、スライスを実行する時点のDOM情報およびJavaScript(登録商標)のコンテキスト情報をスライス実行用に複製し、スライスを実行した後は破棄するものとする。なお、スライス実行時に監視する関数やプロパティは上記に限らず、監視対象の関数やプロパティを、システム管理者等が適宜追加または削除するようにしてもよい。
そのほか、抽出したURLに関連するクライアント環境情報の特定方法として、URLに使用されているファイル拡張子情報を用いる方法や、タグ転送コードに使用されているHTMLタグ情報を用いる方法もある。このファイル拡張子情報を用いる方法は、例えば、URLが「.jar」というファイル拡張子を使用するURLであった場合に、そのURLはJava(登録商標)に関連するURLであると特定できる。また、HTMLタグ情報を用いる方法は、例えば、タグ転送コードがobjectタグを使用したコードであった場合に、data属性にURLが指定され、type属性にMIMEタイプが指定される。そのため、type属性が、例えば、「application/pdf」であった場合に、data属性に指定されたURLはPDFに関連するURLであると特定できる。
このようにファイル拡張子情報やHTMLタグ情報を用いた、URLに関連するクライアント環境情報の特定方法は、上記したプログラム解析部273aによる特定方法と併用してももちろんよい。このようにすることで、プログラム解析部273aは、クライアント環境情報を特定できるURL数を増やすことができる。
(解析情報データベース)
次に解析情報データベース24aを説明する。前記したとおり、解析情報データベース24aは、解析情報を記憶する。解析情報は、例えば、図22に示すとおり、解析情報の識別情報である「解析ID」、ブラウザエミュレータ25aが解析対象ウェブサイトのURLにアクセスした際にアクセスしたURLである「アクセスURL」、当該URLにアクセスした日時を示す「タイムスタンプ」、当該URLがプログラムスライシングによって抽出されたURLか否かを表す「スライス」、当該URLがクライアント環境に依存して転送されるURLである場合に、転送されるために必要なクライアント環境情報を表す「環境情報」等を対応付けた情報である。
なお、この解析情報における「スライス」の項目が「1」のURLは、該当URLがプログラムスライシングにより抽出されたURLであることを示し、「スライス」の項目が「0」のURLは、当該URLがプログラムスライシングにより抽出されたURLではないこと(すなわち、通常アクセスにより抽出されたURLであること)を示す。また、「アクセスURL」は、解析対象ウェブサイトのURLのみならず、当該URLへのアクセスにより転送されたウェブサイトのURLも含む。なお、解析情報は、上記以外の情報を含んでいてももちろんよい。
以上説明したシステムによれば、ウェブコンテンツから取得したコードから網羅的にURLを抽出することができる。その結果、システムは、クライアント環境に依存して行われるドライブバイダウンロード攻撃において攻撃URLや踏台URLである可能性のあるURLを抽出できる。加えて、システムは、抽出したURLへ転送されるために必要なクライアント環境情報を特定できる。
(処理手順)
次に、図23を用いて、システムの処理手順の例を説明する。まず、URLリスト作成部271aは、巡回対象URLリストを作成する(S101)。例えば、URLリスト作成部271aは、公開されている悪性ウェブサイトのブラックリストをもとに巡回対象URLリストを作成する。
そして、アクセス指示部272aは、ブラウザエミュレータ25aに巡回対象URLリストのURLを入力し(S102)、ブラウザエミュレータ25aはアクセス部252aで、S102で入力されたURLにアクセスする(S103)。そして、アクセス部252aは、アクセス先のURLからウェブコンテンツを取得する。
なお、S102においてアクセス指示部272aは、1つのブラウザエミュレータ25aに複数のURLへアクセスさせてもよいし、複数のブラウザエミュレータ25aにそれぞれ異なるURLへアクセスさせるようにしてもよい。
S103の後、ブラウザエミュレータ25aのHTML/CSSパーサ253aは、取得したウェブコンテンツを解釈し、スクリプトインタプリタ部254aにおいて取得したウェブコンテンツにコードが含まれていれば、このコードを解釈し、プログラム解析部273aにおいてコード解析を行う(S104)。このコード解析の詳細は後記する。
S104の後、アクセス部252aはアクセスログを出力する(S105)。つまり、アクセス部252aは、アクセス指示部272aにより入力されたURLへのアクセス結果をアクセスログとして出力する。そして、登録処理部278aは、S105で出力されたアクセスログ、S104のコード解析により出力されたURLおよび環境情報を整形し(S106)、整形されたデータを解析情報データベース24a(図22参照)に蓄積する(S107)。
ここで、スライス実行部277aによるスライスの実行により抽出されたURLを解析する旨が設定されていれば(S108でYes)、アクセス指示部272aは、解析情報データベース24aの解析情報からスライスの実行により抽出されたURLを読み出し、当該URLを巡回対象URLのURLとしてS102以降の処理を行う。つまり、ブラウザエミュレータマネージャ23aはスライスの実行により抽出されたURLに対し再帰的な解析を行う。
なお、S108において、スライスの実行により抽出されたURLを解析する旨が設定されておらず(S108でNo)、巡回対象URLリストに次の巡回URLが存在すれば(S109でYes)、S102へ戻る。一方、巡回対象URLリストに次の巡回URLが存在しなければ(S109でNo)、処理を終了する。
上記のようにして解析情報データベース24aに解析情報が蓄積されると、URL解析部279aは、解析情報のURLの解析処理を行い、例えば、攻撃URLや踏台URLである可能性の高いURLを抽出する。
次に、図24、図25、および、図26を用いて、図23のS104のコード解析処理を詳細に説明する。
まず、構文解析部274aは、ウェブコンテンツから取得したコードの各文を構文解析する(S1010)。ここで、構文解析の対象となる文が存在した場合(S1011でYes)、プログラム依存グラフ構築部275aは、プログラム依存グラフ(図16参照)を構築する(S1012)。一方、構文解析の対象となる文が存在しない場合(S1011でNo)、図25のS1016へ進む。
また、S1012の後、構文解析対象の文が特定対象の転送コードに関連するプログラム依存グラフノード(PDGノード)である場合(S1013でYes)、プログラム依存グラフ構築部275aは、そのPDGノードをスライシング基準として保持する(S1014)。一方、S1013において、構文解析対象の文が、特定対象の転送コードに関連しないPDGノードである場合(S1013でNo)、S1015へ進む。
S1015において、構文解析部274aが、構文解析対象となる次の文が存在すると判断したとき(S1015でYes)、S1012へ戻る。一方、構文解析対象となる次の文が存在しないと判断したとき(S1015でNo)、図25のS1016へ進む。
図25のS1016において、プログラム解析部273aが、S1014でスライシング基準として保持されたPDGノードが存在すると判断したとき(S1016でYes)、プログラムスライシング部276aは、保持されているノード(PDGノード)をスライシング基準とし、プログラムスライシングによりスライスを抽出する(S1017)。このプログラムスライシング部276aによるスライス抽出処理の詳細は後記する。なお、S1016において、プログラム解析部273aが、S1014でスライシング基準として保持されたPDGノードが存在しないと判断したとき(S1016でNo)、処理を終了する。
S1017の後、実行経路探索部270aが、S1017で抽出されたスライスに複数の実行経路が含まれると判断したとき(S1018でYes)、実行経路ごとにスライスを抽出する(S1019)。一方、実行経路探索部270aが、S1017で抽出されたスライスに複数の実行経路が含まれないと判断したとき(S1018でNo)、S1020へ進む。
S1020において、スライス実行部277aは、S1017で抽出されたスライスに複数の実行経路が含まれない場合は、S1017で抽出されたスライスを実行し、S1017で抽出されたスライスに複数の実行経路が含まれる場合は、S1019で抽出されたスライスを実行する(S1020)。このとき、スライス実行部277aは、転送コードに関連するオブジェクトや関数の引数、プロパティの代入値を監視することにより、転送コードに使用されるURLを抽出し、出力する(S1021)。S1021の後、図26のS1023へ進む。
図26のS1023において、図25のS1017で抽出したスライスに条件分岐文が含まれている場合(S1023でYes)、プログラムスライシング部276aは、その条件分岐文をスライシング基準とし、プログラムスライシングによりスライスを抽出する(S1024)。このプログラムスライシング部276aによるスライス抽出処理の詳細は、S1017同様、後記する。なお、S1023において、図25のS1017で抽出したスライスに条件分岐文が含まれていない場合(S1023でNo)、図25のS1022へ進む。
S1024の後、スライス実行部277aは、S1024で抽出されたスライスを実行する(S1025)。このとき、スライス実行部277aは、文字列操作に関連するオブジェクトや関数の引数、プロパティの代入値を監視することにより、S1024で抽出されたスライスの実行によるクライアント環境情報の使用を特定する(S1026)。
S1026の後、抽出したスライスに次の条件分岐文が含まれていれば(S1027でYes)、S1024へ戻り、抽出したスライスに次の条件分岐文が含まれていなければ(S1027でNo)、図25のS1022へ進む。
図25のS1022において、次のスライシング基準となるPDGノードが存在すれば(S1022でYes)、S1017へ戻り、次のスライシング基準となるPDGノードが存在しなければ(S1022でNo)、処理を終了する。
次に、図27を用いて、図25のS1017および図26のS1024の処理(スライス抽出処理)を詳細に説明する。
まず、プログラムスライシング部276aは、スライシング基準のノード(PDGノード)を解析対象ノードとして保持し(S1028)、保持されている解析対象ノードをスライス対象ノードに追加する(S1029)。次に、プログラムスライシング部276aは、保持されている解析対象ノードが持つデータ依存関係のPDGエッジを逆方向に一度辿り、辿った先すべてのPDGノードを、解析対象ノードとして保持する(S1030)。保持されている解析対象ノードのいずれかにデータ依存関係のエッジ(PDGエッジ)が存在する場合(S1031でYes)、S1029へ戻り、保持されている解析対象ノードのいずれにもデータ依存関係のPDGエッジが存在しない場合(S1031でNo)、S1032へ進む。
S1032において、プログラムスライシング部276aは、スライス対象ノード(すなわち、プログラム依存グラフのデータ依存関係のPDGエッジを辿ることで抽出したPDGノード)が持つ制御依存関係のPDGエッジを逆方向に一度辿り、辿った先すべてのPDGノードをスライス対象ノードに追加する(S1032)。S1032の後、プログラムスライシング部276aは、保持されているスライス対象ノードであるPDGノードをスライスとして抽出し(S1033)、処理を終了する。
上記の処理の一例を挙げる。例えば、プログラムスライシング部276aは、図16に示すプログラム依存グラフにおいてスライシング基準のPDGノード((14)Assignment location.href)を解析対象ノードとすると、このPDGノード(Assignment location.href)の持つデータ依存関係のPDGエッジを逆方向に一度辿り、辿った先すべてのPDGノード((6)Assignment url、(9)Assignment url、(12)Assignment urlおよび(4)VariableInitializer url)を、新たな解析対象ノードとして保持する。また、図16の(6)Assignment urlおよび(9)Assignment urlのPDGノードはさらにデータ依存関係のPDGエッジを持つので、プログラムスライシング部276aは、このPDGエッジを逆方向に辿り、(3)VariableInitializer dのPDGノードも新たな解析対象ノードとして保持する。ここで保持された解析対象ノードのうち、(6)Assignment url、(9)Assignment urlおよび(12)Assignment urlには、制御依存関係のPDGエッジがあるので、このPDGエッジを逆方向に一度辿り、辿った先すべてのPDGノード、つまり、(5)IfStatement jre[1]==“6”および(8)IfStatement jre[1]==“7”のPDGノードをスライス対象ノードに追加する。そして、プログラムスライシング部276aは、保持されているPDGノード、つまり、(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は、図17に示すPDGノードをもとに、図18の符号701a→符号702aに示すスライスを抽出する。
また、例えば、プログラムスライシング部276aは、図16に示したプログラム依存グラフにおいてスライシング基準のPDGノード((5)IfStatement jre[1]==“6”)を解析対象ノードとすると、このPDGノード((5)IfStatement jre[1]==“6”)が持つデータ依存関係のPDGエッジを逆方向に一度辿り、辿った先すべてのPDGノード((2)VariableInitializer jre)を、新たな解析対象ノードとして保持する。また、(2)VariableInitializer jreのPDGノードにはさらにデータ依存関係のPDGエッジがあるので、プログラムスライシング部276aは、このPDGエッジを逆方向に辿り、(1)VariableInitializer jre_versionのPDGノードも新たな解析対象ノードとして保持する。なお、この場合、(1)VariableInitializer jre_versionのPDGノードには制御依存関係のPDGエッジは存在しないので、プログラムスライシング部276aは、(5)IfStatement jre[1]==“6”、(2)VariableInitializer jreおよび(1)VariableInitializer jre_versionをスライスとして抽出する。例えば、プログラムスライシング部276aは、図20に示すPDGノードをもとに、図21の符号1001a→符号1002aに示すスライスを抽出する。
このようなシステムによれば、クライアント環境に依存してドライブバイダウンロード攻撃を行うコードを詳細に解析できる。その結果、例えば、当該コードからドライブバイダウンロード攻撃において攻撃URLや踏台URLである可能性のあるURLをクライアント環境に依存せず、網羅的に抽出できる。また、システムは、抽出した攻撃URLや踏台URLである可能性のあるURLへ転送されるために必要なクライアント環境を特定できる。その結果、従来のハニーポット技術により環境依存攻撃の解析を行う場合に、どのようなクライアント環境を設定すれば、攻撃URLや踏台URLに到達できるかを効果的に決定できる。また、クライアント環境ごとにURLを集約することで、各クライアントのクライアント環境に応じて導入すべきURLブラックリストを最適化できる。
[その他の実施形態]
なお、構文解析部274aにおいて特定するオブジェクト、オブジェクトのプロパティ、関数は、転送コードやコンテンツ取得コードに関するものに限定されず、目的に応じて適宜変更可能である。
また、プログラム依存グラフ構築部275aにおいて、JavaScript(登録商標)コードの文のうち、プログラム依存グラフにおけるプログラム依存グラフノードとする文は、変数定義文、代入文、関数定義文、関数実行文、リターン文、条件分岐文、ループ文、例外処理文等としたが、これら以外にも、システムの管理者等が適宜追加、変更してもよい。
なお、プログラム解析部273aがコード解析の結果、出力する情報はURL以外の情報であってもよい。例えば、攻撃コードに使用されるオブジェクトやオブジェクトのプロパティ、関数の情報が事前に分かっていれば、プログラム解析部273aは、これらの情報を用いて攻撃コードを特定し、特定した攻撃コードに使用される各種情報を出力してもよい。
また、システムは、ブラウザエミュレータ25aを用いて解析対象ウェブサイト12aにアクセスすることとしたが、ブラウザエミュレータ25a以外(例えば、実際のクライアント環境)を用いて解析対象ウェブサイト12aにアクセスしてもよい。
さらに、プログラムスライシング部276aは、プログラム依存グラフを用いてスライスを抽出することとしたが、各コードの制御依存関係とデータ依存関係とが把握できれば、プログラム依存グラフを用いなくてもよい。
なお、プログラム解析部273aによるURL抽出の後に、プログラム解析部273aを用いて、クライアント環境情報の使用特定を実施したが、システム管理者等が適宜実施しないよう変更してもよい。
また、ブラウザエミュレータ25aは、コンテンツパーサとしてHTML/CSSパーサ253aを用いることとしたが、Adobe Acrobat(登録商標)で使用するPDFファイルやAdobe Flash Player(登録商標)で使用するSWFファイル等のウェブコンテンツを解釈するコンテンツパーサを用いてもよい。なお、PDFファイルを解釈する場合は、JavaScript(登録商標)を解析コードとし、スクリプトインタプリタ部254aは、JavaScript(登録商標)のインタプリタを使用するものとする。また、SWFファイルを解釈する場合は、ActionScriptを解析対象コードとし、スクリプトインタプリタ部254aは、ActionScriptのインタプリタを使用するものとする。
また、プログラム解析部273aはJavaScript(登録商標)以外のコード、例えば、VBScriptを解析対象コードとしてもよいが、その場合は、スクリプトインタプリタ部254aは、VBScriptのインタプリタを使用するものとする。
また、プログラム解析部273aは、スライス実行部277aによりURLを抽出でき、かつ、プログラムスライシング部276aにより抽出したスライスに条件分岐文が含まれる場合に、その条件分岐文をスライシング基準としたスライスの抽出を行うこととしたが、これに限定されない。例えば、プログラム解析部273aは、プログラムスライシング部276aにより抽出したスライスに条件分岐文が含まれていれば、スライス実行部277aによりURLを抽出できたか否かにかかわらず、当該条件分岐文をスライシング基準としたスライスの抽出を行ってもよい。
(プログラム)
また、上記実施形態に係るブラウザエミュレータマネージャ23,23aが実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成し、実行することもできる。この場合、コンピュータがプログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかるプログラムをコンピュータに読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、ブラウザエミュレータマネージャ23と同様の機能を実現する制御プログラムを実行するコンピュータの一例を説明する。
図28は、解析プログラムを実行するコンピュータを示す図である。図28に示すように、コンピュータ1000は、例えば、メモリ1010と、CPU(Central Processing Unit)1020と、ハードディスクドライブインタフェース1030と、ディスクドライブインタフェース1040と、シリアルポートインタフェース1050と、ビデオアダプタ1060と、ネットワークインタフェース1070とを有する。これらの各部は、バス1080によって接続される。
メモリ1010は、ROM(Read Only Memory)1011およびRAM(Random Access Memory)1012を含む。ROM1011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。ハードディスクドライブインタフェース1030は、ハードディスクドライブ1090に接続される。ディスクドライブインタフェース1040は、ディスクドライブ1100に接続される。ディスクドライブ1100には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース1050には、例えば、マウス1110およびキーボード1120が接続される。ビデオアダプタ1060には、例えば、ディスプレイ1130が接続される。
ここで、図28に示すように、ハードディスクドライブ1090は、例えば、OS1091、アプリケーションプログラム1092、プログラムモジュール1093およびプログラムデータ1094を記憶する。上記実施形態で説明した探索対象コード情報や、アクセスログや、解析により抽出されたURL等は、例えばハードディスクドライブ1090やメモリ1010に記憶される。
また、解析プログラムは、例えば、コンピュータ1000によって実行される指令が記述されたプログラムモジュールとして、ハードディスクドライブ1090に記憶される。具体的には、上記実施形態で説明したブラウザエミュレータマネージャ23が実行する各処理が記述されたプログラムモジュールが、ハードディスクドライブ1090に記憶される。
また、解析プログラムによる情報処理に用いられるデータは、プログラムデータとして、例えば、ハードディスクドライブ1090に記憶される。そして、CPU1020が、ハードディスクドライブ1090に記憶されたプログラムモジュール1093やプログラムデータ1094を必要に応じてRAM1012に読み出して、上述した各手順を実行する。
なお、解析プログラムに係るプログラムモジュール1093やプログラムデータ1094は、ハードディスクドライブ1090に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ1100等を介してCPU1020によって読み出されてもよい。あるいは、制御プログラムに係るプログラムモジュール1093やプログラムデータ1094は、LAN(Local Area Network)やWAN(Wide Area Network)等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース1070を介してCPU1020によって読み出されてもよい。
1,1a,2,2a ネットワーク
3,3a パケット転送装置
12,12a 解析対象ウェブサイト
23,23a ブラウザエミュレータマネージャ
24,24a 解析情報データベース
25,25a ブラウザエミュレータ
26,26a ホストシステム
27,27a 制御部
251,251a クライアント環境模擬部
252,252a アクセス部
253,253a HTML/CSSパーサ
254,254a スクリプトインタプリタ部
270a 実行経路探索部
271,271a URLリスト作成部
272,272a アクセス指示部
273,273a プログラム解析部
274,274a 構文解析部
275,275a プログラム依存グラフ構築部
276,276a プログラムスライシング部
277,277a スライス実行部
278,278a 登録処理部
279,279a URL解析部

Claims (12)

  1. ウェブコンテンツに含まれるコードを解析する解析装置であって、
    前記ウェブコンテンツに含まれるコードの構文解析を行うことにより、前記コードから、他のサイトへの転送コードまたはコンテンツ取得コードを探索し、前記探索の結果発見された転送コードまたはコンテンツ取得コードに使用されるオブジェクト、オブジェクトのプロパティ、および、関数の少なくともいずれかを特定する構文解析部と、
    前記特定したオブジェクト、オブジェクトのプロパティ、および、関数の少なくともいずれかをもとに前記転送コードまたはコンテンツ取得コードと依存関係を持つコードを抽出するプログラムスライシング部と
    を備えることを特徴とする解析装置。
  2. 前記構文解析部による探索の結果、前記転送コードまたはコンテンツ取得コードが発見されたとき、前記ウェブコンテンツに含まれるコードの各文をノードとし、前記ノード間におけるデータ依存関係および制御依存関係を示したプログラム依存グラフを構築し、前記プログラム依存グラフを用いて、前記発見された前記転送コードまたはコンテンツ取得コードに対応するノードを特定するプログラム依存グラフ構築部をさらに備え、
    前記プログラムスライシング部は、
    前記プログラム依存グラフ構築部により特定されたノードをスライシング基準とし、前記コードに対し、前記プログラム依存グラフにおけるデータ依存関係に基づく逆方向スライスを行うことにより、前記転送コードまたはコンテンツ取得コードと依存関係を持つコードを抽出すること
    を特徴とする請求項1に記載の解析装置。
  3. 前記プログラムスライシング部による逆方向スライスにより抽出されたコードを、スクリプトインタプリタ部に解釈させ、前記解釈の過程で、前記転送コードまたはコンテンツ取得コードに使用されるオブジェクト、オブジェクトのプロパティ、関数に代入される値、引数の少なくともいずれかを監視し、前記転送コードまたはコンテンツ取得コードの実行によりアクセスするウェブサイトのURL(Uniform Resource Locator)を抽出するスライス実行部をさらに備えること
    を特徴とする請求項2に記載の解析装置。
  4. 前記スライス実行部により抽出されたURLにアクセスすることで取得されたウェブコンテンツに含まれるコードに対して、前記構文解析部、前記プログラム依存グラフ構築部、前記プログラムスライシング部および前記スライス実行部による処理を実行すること
    を特徴とする請求項3に記載の解析装置。
  5. 解析装置においてウェブコンテンツに含まれるコードを解析する解析方法であって、
    前記ウェブコンテンツに含まれるコードの構文解析を行うことにより、前記コードから、他のサイトへの転送コードまたはコンテンツ取得コードを探索するステップと、
    前記探索の結果発見された転送コードまたはコンテンツ取得コードに使用されるオブジェクト、オブジェクトのプロパティ、および、関数の少なくともいずれかを特定するステップと、
    前記特定したオブジェクト、オブジェクトのプロパティ、および、関数の少なくともいずれかをもとに前記転送コードまたはコンテンツ取得コードと依存関係を持つコードを抽出するステップと
    を含んだことを特徴とする解析方法。
  6. ウェブコンテンツに含まれるコードを解析する解析プログラムであって、
    前記ウェブコンテンツに含まれるコードの構文解析を行うことにより、前記コードから、他のサイトへの転送コードまたはコンテンツ取得コードを探索するステップと、
    前記探索の結果発見された転送コードまたはコンテンツ取得コードに使用されるオブジェクト、オブジェクトのプロパティ、および、関数の少なくともいずれかを特定するステップと、
    前記特定したオブジェクト、オブジェクトのプロパティ、および、関数の少なくともいずれかをもとに前記転送コードまたはコンテンツ取得コードと依存関係を持つコードを抽出するステップと
    をコンピュータに実行させることを特徴とする解析プログラム。
  7. ウェブコンテンツに含まれるコードを解析する解析装置であって、
    前記コードの各文をノードとし、前記文同士のデータ依存関係および制御依存関係をエッジとして示したプログラム依存グラフを構築するプログラム依存グラフ構築部と、
    前記プログラム依存グラフにおける転送コードまたは条件分岐文を示すノードをスライシング基準とし、前記プログラム依存グラフにおける前記スライシング基準から前記データ依存関係のエッジを辿ることで、前記スライシング基準の変数の定義参照に関連する文を抽出し、前記抽出した文それぞれから制御依存関係を示すエッジを所定数以下辿ることで、抽出した文の制御フローに関連する文を抽出し、前記スライシング基準と依存関係を持つ文をスライスとして抽出するプログラムスライシング部と
    を備えることを特徴とする解析装置。
  8. 前記プログラムスライシング部は、前記プログラム依存グラフの転送コードを示すノードをスライシング基準としてスライスを抽出し、
    前記解析装置は、さらに、
    前記抽出されたスライスがコードの実行経路を複数含む場合、前記スライスを構文解析することで、前記実行経路ごとのスライスを抽出する実行経路探索部と、
    前記抽出されたスライスそれぞれをスクリプトインタプリタ部に解釈させ、前記解釈の過程で、前記転送コードに使用されるオブジェクト、オブジェクトのプロパティ、関数に代入される値、引数の少なくともいずれかを監視し、前記スライスの実行によりアクセスするウェブサイトのURL(Uniform Resource Locator)を抽出するスライス実行部と、
    を備えることを特徴とする請求項7に記載の解析装置。
  9. 前記プログラムスライシング部は、前記プログラム依存グラフに条件分岐文を示すノードが含まれていた場合、前記条件分岐文を示すノードをスライシング基準としてスライスを抽出し、
    前記解析装置は、さらに、
    前記抽出されたスライスをスクリプトインタプリタ部に解釈させ、前記解釈の過程で、文字列操作に関連するオブジェクト、オブジェクトのプロパティ、関数に代入される値、引数の少なくともいずれかを監視し、前記スライスの実行において使用されるクライアント環境情報を特定するスライス実行部
    を備えることを特徴とする請求項7に記載の解析装置。
  10. 前記スライス実行部により前記URLを抽出できた場合において、前記プログラム依存グラフに条件分岐文を示すノードが含まれていたとき、
    前記プログラムスライシング部は、前記プログラム依存グラフの条件分岐文を示すノードをスライシング基準としてスライスを抽出し、
    前記スライス実行部は、前記抽出されたスライスをスクリプトインタプリタ部に解釈させ、前記解釈の過程で、文字列操作に関連するオブジェクト、オブジェクトのプロパティ、関数に代入される値、引数の少なくともいずれかを監視し、前記スライスの実行において使用されるクライアント環境情報を特定し、抽出した前記URLと前記クライアント環境情報を関連付けること
    を特徴とする請求項8に記載の解析装置。
  11. 解析装置においてウェブコンテンツに含まれるコードを解析する解析方法であって、
    前記コードの各文をノードとし、前記文同士のデータ依存関係および制御依存関係をエッジとして示したプログラム依存グラフを構築するステップと、
    前記プログラム依存グラフにおける転送コードまたは条件分岐文を示すノードをスライシング基準とし、前記プログラム依存グラフにおける前記スライシング基準から前記データ依存関係のエッジを辿ることで、前記スライシング基準の変数の定義参照に関連する文を抽出し、前記抽出した文それぞれから制御依存関係を示すエッジを所定数以下辿ることで、抽出した文の制御フローに関連する文を抽出し、前記スライシング基準と依存関係を持つ文をスライスとして抽出するステップと
    を含んだことを特徴とする解析方法。
  12. ウェブコンテンツに含まれるコードを解析する解析プログラムであって、
    前記コードの各文をノードとし、前記文同士のデータ依存関係および制御依存関係をエッジとして示したプログラム依存グラフを構築するステップと、
    前記プログラム依存グラフにおける転送コードまたは条件分岐文を示すノードをスライシング基準とし、前記プログラム依存グラフにおける前記スライシング基準から前記データ依存関係のエッジを辿ることで、前記スライシング基準の変数の定義参照に関連する文を抽出し、前記抽出した文それぞれから制御依存関係を示すエッジを所定数以下辿ることで、抽出した文の制御フローに関連する文を抽出し、前記スライシング基準と依存関係を持つ文をスライスとして抽出するステップと
    をコンピュータに実行させることを特徴とする解析プログラム。
JP2016554079A 2014-10-14 2015-10-13 解析装置、解析方法、および、解析プログラム Active JP6144848B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
JP2014210126 2014-10-14
JP2014210126 2014-10-14
JP2015085821 2015-04-20
JP2015085821 2015-04-20
PCT/JP2015/078906 WO2016060110A1 (ja) 2014-10-14 2015-10-13 解析装置、解析方法、および、解析プログラム

Publications (2)

Publication Number Publication Date
JPWO2016060110A1 JPWO2016060110A1 (ja) 2017-04-27
JP6144848B2 true JP6144848B2 (ja) 2017-06-07

Family

ID=55746654

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016554079A Active JP6144848B2 (ja) 2014-10-14 2015-10-13 解析装置、解析方法、および、解析プログラム

Country Status (5)

Country Link
US (1) US10416970B2 (ja)
EP (1) EP3190536B1 (ja)
JP (1) JP6144848B2 (ja)
CN (1) CN106796637B (ja)
WO (1) WO2016060110A1 (ja)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017077847A1 (ja) * 2015-11-02 2017-05-11 日本電信電話株式会社 解析装置、解析方法、および、解析プログラム
US10075456B1 (en) * 2016-03-04 2018-09-11 Symantec Corporation Systems and methods for detecting exploit-kit landing pages
US10277701B2 (en) 2016-07-08 2019-04-30 Facebook, Inc. Methods and Systems for Rewriting Scripts to Direct Requests
CN107808097A (zh) 2016-09-09 2018-03-16 安提特软件有限责任公司 JavaScript 路径枚举
WO2018131200A1 (ja) 2017-01-11 2018-07-19 日本電信電話株式会社 解析装置、解析方法及び解析プログラム
JP6823201B2 (ja) * 2017-12-20 2021-01-27 日本電信電話株式会社 分類装置、分類方法、および、分類プログラム
CN108595334B (zh) * 2018-04-27 2021-08-13 刘尚国 一种计算Java程序动态切片的方法、装置及可读存储介质
EP3961452A1 (en) * 2018-05-04 2022-03-02 Google LLC Detecting injection vulnerabilities of client-side templating systems
US11226797B2 (en) * 2018-05-24 2022-01-18 Chaldal, Inc. Representation and analysis of workflows using abstract syntax trees
US10877870B2 (en) * 2018-06-11 2020-12-29 Tata Consultancy Services Limited Method and system for verifying properties of source code
CN109165514B (zh) * 2018-10-16 2019-08-09 北京芯盾时代科技有限公司 一种风险检测方法
CN109635175B (zh) * 2018-11-06 2021-12-31 北京字节跳动网络技术有限公司 页面数据拼接方法、装置、可读存储介质和电子设备
US10846083B2 (en) * 2018-12-12 2020-11-24 Sap Se Semantic-aware and self-corrective re-architecting system
JP7188198B2 (ja) * 2019-03-13 2022-12-13 オムロン株式会社 グラフ表示装置、グラフ表示方法、及びグラフ表示プログラム
CN110717181B (zh) * 2019-09-09 2021-07-02 中国人民解放军战略支援部队信息工程大学 基于新型程序依赖图的非控制数据攻击检测方法及装置
CN110928549B (zh) * 2019-11-19 2023-03-21 北京明略软件系统有限公司 一种重编辑前端脚本程序的方法及装置
CN113098865B (zh) * 2021-03-31 2022-03-08 广州锦行网络科技有限公司 一种浏览器指纹获取方法、装置、电子设备及存储介质
US20230328091A1 (en) * 2022-04-07 2023-10-12 Vmware, Inc. Automated discovery of vulnerable endpoints in an application server
CN114861194B (zh) * 2022-05-13 2024-03-08 兰州交通大学 一种基于bgru与cnn融合模型的多类型漏洞检测方法
WO2024079668A1 (en) 2022-10-13 2024-04-18 Cybersentry.Ai, Inc. Program execution anomaly detection for cybersecurity
CN116955719B (zh) * 2023-09-20 2023-12-05 布谷云软件技术(南京)有限公司 一种链式网络结构数字化存储的代码管理方法及系统

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6167520A (en) 1996-11-08 2000-12-26 Finjan Software, Inc. System and method for protecting a client during runtime from hostile downloadables
US9106694B2 (en) * 2004-04-01 2015-08-11 Fireeye, Inc. Electronic message analysis for malware detection
US20080196012A1 (en) * 2007-02-12 2008-08-14 Panaya Ltd. System and methods for static analysis of large computer programs and for presenting the results of the analysis to a user of a computer program
JP2009237762A (ja) * 2008-03-26 2009-10-15 Toshiba Corp プログラム解析装置、プログラム解析方法および解析プログラム
US8499283B2 (en) * 2010-02-09 2013-07-30 Webroot Inc. Detection of scripting-language-based exploits using parse tree transformation
US8726392B1 (en) 2012-03-29 2014-05-13 Symantec Corporation Systems and methods for combining static and dynamic code analysis
US9275226B1 (en) * 2013-09-17 2016-03-01 Symantec Corporation Systems and methods for detecting selective malware attacks
CN103970845B (zh) * 2014-04-28 2017-03-22 南京邮电大学 基于程序切片技术的网页过滤方法

Also Published As

Publication number Publication date
US10416970B2 (en) 2019-09-17
CN106796637B (zh) 2020-08-25
WO2016060110A1 (ja) 2016-04-21
CN106796637A (zh) 2017-05-31
EP3190536A4 (en) 2018-03-21
EP3190536B1 (en) 2019-01-09
US20170293477A1 (en) 2017-10-12
JPWO2016060110A1 (ja) 2017-04-27
EP3190536A1 (en) 2017-07-12

Similar Documents

Publication Publication Date Title
JP6144848B2 (ja) 解析装置、解析方法、および、解析プログラム
US10855696B2 (en) Variable runtime transpilation
US9021593B2 (en) XSS detection method and device
US20030088643A1 (en) Method and computer system for isolating and interrelating components of an application
US9213839B2 (en) Malicious code detection technologies
JP6687761B2 (ja) 結合装置、結合方法および結合プログラム
CN106663171B (zh) 浏览器模拟器装置、构建装置、浏览器模拟方法以及构建方法
US11263062B2 (en) API mashup exploration and recommendation
JP6450022B2 (ja) 解析装置、解析方法、および、解析プログラム
Dosis et al. Semantic representation and integration of digital evidence
KR20190058141A (ko) 문서로부터 추출되는 데이터를 생성하는 방법 및 그 장치
CN114385148A (zh) 一种实现联动功能的方法、装置、设备和存储介质
JP6527111B2 (ja) 解析装置、解析方法および解析プログラム
US20140068771A1 (en) Transforming User-Input Data in Scripting Language
JP6666475B2 (ja) 解析装置、解析方法及び解析プログラム
EP4268098A1 (en) Correlation between source code repositories and web endpoints
Alfieri et al. XSS-Unearth: A Tool for Forensics Analysis of XSS Attacks
Pan et al. Icefex: protocol format extraction from IL-based concolic execution
KR20240019738A (ko) 사이버 위협 정보 처리 장치, 사이버 위협 정보 처리방법 및 사이버 위협 정보 처리하는 프로그램을 저장하는 저장매체
CN116432176A (zh) 基于跨语言语义分析的Web恶意程序检测方法和系统
CN116361793A (zh) 代码检测方法、装置、电子设备及存储介质
CN115987638A (zh) 一种网页漏洞检测方法、装置、设备及存储介质
CN115828265A (zh) 源码跨站脚本漏洞检测方法、装置、电子设备及存储介质
Ristic et al. Enough With Default Allow in Web Applications!

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20161104

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170328

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170414

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170509

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170511

R150 Certificate of patent or registration of utility model

Ref document number: 6144848

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150