以下、実施形態について、添付の図面を参照しながら詳しく説明する。
本発明の実施形態に係る保安性評価システムは、以下で説明されるサーバによって実現されてよく、本発明の実施形態に係る保安性評価方法は、上述したサーバによって実行されてよい。例えば、サーバには、本発明の一実施形態に係るコンピュータプログラムがインストールされて駆動してよく、サーバは、駆動するコンピュータプログラムの制御に従って本発明の一実施形態に係る保安性評価方法を実行してよい。上述したコンピュータプログラムは、コンピュータで実現されるサーバと結合して保安性評価方法をコンピュータに実行させるためにコンピュータ読取可能な記録媒体に格納されてよい。
図1は、本発明の一実施形態における、ネットワーク環境の例を示した図である。図1のネットワーク環境は、複数の電子機器110、120、130、140、複数のサーバ150、160、およびネットワーク170を含む例を示している。このような図1は、発明の説明のための一例に過ぎず、電子機器の数やサーバの数が図1のように限定されることはない。
複数の電子機器110、120、130、140は、コンピュータ装置によって実現される固定端末や移動端末であってよい。複数の電子機器110、120、130、140の例としては、スマートフォン、携帯電話、ナビゲーション、PC(personal computer)、ノート型パンコン、デジタル放送用端末、PDA(Personal Digital Assistant)、PMP(Portable Multimedia Player)、タブレットなどがある。一例として、図1では、電子機器1(110)の例としてスマートフォンの形状を示しているが、本発明の実施形態において、電子機器1(110)は、実質的に無線または有線通信方式を利用し、ネットワーク170を介して他の電子機器120、130、140および/またはサーバ150、160と通信することのできる多様な物理装置の1つを意味してよい。
通信方式が限定されることはなく、ネットワーク170が含むことのできる通信網(一例として、移動通信網、有線インターネット、無線インターネット、放送網)を活用する通信方式だけではなく、機器間の近距離無線通信が含まれてもよい。例えば、ネットワーク170は、PAN(personal area network)、LAN(local area network)、CAN(campus area network)、MAN(metropolitan area network)、WAN(wide area network)、BBN(broadband network)、インターネットなどのネットワークのうちの1つ以上の任意のネットワークを含んでよい。さらに、ネットワーク170は、バスネットワーク、スターネットワーク、リングネットワーク、メッシュネットワーク、スター−バスネットワーク、ツリーまたは階層的(hierarchical)ネットワークなどを含むネットワークトポロジのうちの任意の1つ以上を含んでもよいが、これらに限定されることはない。
サーバ150、160それぞれは、複数の電子機器110、120、130、140とネットワーク170を介して通信して命令、コード、ファイル、コンテンツ、サービスなどを提供するコンピュータ装置または複数のコンピュータ装置によって実現されてよい。例えば、サーバ150は、ネットワーク170を介して接続した複数の電子機器110、120、130、140に第1サービスを提供するシステムであってよく、サーバ160も、ネットワーク170を介して接続した複数の電子機器110、120、130、140に第2サービスを提供するシステムであってよい。より具体的な例として、サーバ150は、アプリケーションパブリッシャのシステムを構成する装置のうちの少なくとも一部であってよく、複数の電子機器110、120、130、140にインストールされて動作するアプリケーションのパッケージファイルの登録を受けて配布するサービスを、上記の第1サービスとして提供してよい。他の例として、サーバ160は、配布されたパッケージファイルを通じてアプリケーションをインストールおよび駆動する複数の電子機器110、120、130、140に、そのアプリケーションと関連するサービスを上記の第2サービスとして提供してよい。
図2は、本発明の一実施形態における、電子機器およびサーバの内部構成を説明するためのブロック図である。図2では、電子機器に対する例として電子機器1(110)の内部構成と、サーバ150の内部構成について説明する。また、他の電子機器120、130、140やサーバ160も、上述した電子機器1(110)またはサーバ150と同一または類似の内部構成を有してよい。
電子機器1(110)とサーバ150は、それぞれ、メモリ211、221、プロセッサ212、222、通信モジュール213、223、および入力/出力インタフェース214、224を含んでよい。メモリ211、221は、コンピュータ読取可能な記録媒体であって、RAM(random access memory)、ROM(read only memory)、およびディスクドライブのような永久大容量記憶装置(permanent mass storage device)を含んでよい。ここで、ROMやディスクドライブのような永久大容量記憶装置は、メモリ211、221とは区分される別の永久格納装置として電子機器1(110)やサーバ150に含まれてもよい。また、メモリ211、221には、オペレーティングシステムと、少なくとも1つのプログラムコード(一例として、電子機器1(110)にインストールされて駆動するブラウザや特定のサービスの提供のために、電子機器1(110)にインストールされるアプリケーションなどのためのコード)が格納されてよい。このようなソフトウェア構成要素は、メモリ211、221とは別のコンピュータ読取可能な記録媒体からロードされてよい。このような別のコンピュータ読取可能な記録媒体は、フロッピー(登録商標)ドライブ、ディスク、テープ、DVD/CD−ROMドライブ、メモリカードなどのコンピュータ読取可能な記録媒体を含んでよい。他の実施形態において、ソフトウェア構成要素は、コンピュータ読取可能な記録媒体ではない通信モジュール213、223を通じてメモリ211、221にロードされてもよい。例えば、少なくとも1つのプログラムは、開発者またはアプリケーションのインストールファイルを配布するファイル配布システム(一例として、上述したサーバ160)がネットワーク170を介して提供するファイルによってインストールされるコンピュータプログラム(一例として、上述したアプリケーション)に基づいてメモリ211、221にロードされてよい。
プロセッサ212、222は、基本的な算術、ロジック、および入出力演算を実行することにより、コンピュータプログラムの命令を処理するように構成されてよい。命令は、メモリ211、221または通信モジュール213、223によって、プロセッサ212、222に提供されてよい。例えば、プロセッサ212、222は、メモリ211、221のような記録装置に格納されたプログラムコードに従って受信される命令を実行するように構成されてよい。
通信モジュール213、223は、ネットワーク170を介して電子機器1(110)とサーバ150とが互いに通信するための機能を提供してもよいし、電子機器1(110)および/またはサーバ150が他の電子機器(一例として、電子機器2(120))または他のサーバ(一例として、サーバ160)と通信するための機能を提供してもよい。一例として、電子機器1(110)のプロセッサ212がメモリ211のような記録装置に格納されたプログラムコードに従って生成した要求が、通信モジュール213の制御に従ってネットワーク170を介してサーバ150に伝達されてよい。これとは逆に、サーバ150のプロセッサ222の制御に従って提供される制御信号や命令、コンテンツ、ファイルなどが、通信モジュール223とネットワーク170を経て電子機器1(110)の通信モジュール213を通じて電子機器1(110)で受信されてもよい。例えば、通信モジュール213を通じて受信したサーバ150の制御信号や命令、コンテンツ、ファイルなどは、プロセッサ212やメモリ211に伝達されてよく、コンテンツやファイルなどは、電子機器1(110)がさらに含むことのできる記録媒体(上述した永久格納装置)に格納されてよい。
入力/出力インタフェース214は、入力/出力装置215とのインタフェースのための手段であってよい。例えば、入力装置は、キーボードまたはマウスなどの装置を、出力装置は、ディスプレイやスピーカなどのような装置を含んでよい。他の例として、入力/出力インタフェース214は、タッチスクリーンのように入力と出力のための機能が1つに統合された装置とのインタフェースのための手段であってもよい。入力/出力装置215は、電子機器1(110)と1つの装置で構成されてもよい。また、サーバ150の入力/出力インタフェース224は、サーバ150と連結するかサーバ150が含むことのできる入力または出力のための装置(図示せず)とのインタフェースのための手段であってもよい。より具体的な例として、電子機器1(110)のプロセッサ212がメモリ211にロードされたコンピュータプログラムの命令を処理するにあたり、サーバ150や電子機器2(120)が提供するデータを利用して構成されるサービス画面やコンテンツが、入力/出力インタフェース214を通じてディスプレイに表示されてよい。
また、他の実施形態において、電子機器1(110)およびサーバ150は、図2の構成要素よりも多くの構成要素を含んでもよい。しかし、大部分の従来技術的構成要素を明確に図に示す必要はない。例えば、電子機器1(110)は、上述した入力/出力装置215のうちの少なくとも一部を含むように実現されてもよいし、トランシーバ、GPS(Global Positioning System)モジュール、カメラ、各種センサ、データベースなどのような他の構成要素をさらに含んでもよい。より具体的な例として、電子機器1(110)がスマートフォンである場合、一般的にスマートフォンに含まれる加速度センサやジャイロセンサ、カメラモジュール、物理的な各種ボタン、タッチパネルを利用したボタン、入力/出力ポート、振動のための振動器などのような多様な構成要素が、電子機器1(110)にさらに含まれるように実現されてよい。
図3は、本発明の一実施形態における、保安性評価システムを示したブロック図である。図3の保安性評価システム300は、上述したサーバ150によって実現されてよく、保安性評価システム300に含まれるパッケージ分解モジュール310、ファイル識別モジュール320、パースモジュール330、分析モジュール340、およびレポートモジュール350は、サーバ150のプロセッサ222の互いに異なる機能(different functions)の表現であってよい。
例えば、サーバ150のプロセッサ222は、コンピュータプログラムに含まれる制御命令に従ってパッケージファイルを分解するプロセッサ222の機能として、パッケージ分解モジュール310を利用してよい。このとき、分析モジュール340に含まれる脆弱性探知モジュール342が、脆弱性探知のための核心モジュールとして実現されてよい。
上述したように、サーバ150は、開発者によって登録されたアプリケーションのパッケージファイルを利用者に配布するサービスを提供してよい。
このとき、パッケージ分解モジュール310は、登録されたパッケージファイルを分解してよい。例えば、アンドロイドアプリケーションパッケージ(APK)は、モバイルオペレーティングシステムであるアンドロイドのソフトウェアとミドルウェア配布に使用されるパッケージファイルのファイルフォーマットとして「.apk」拡張子を有する。以下の実施形態では、このようなAPKのようなパッケージファイルを基盤として本発明の実施形態を説明するが、このような説明に基づき、他の種類のパッケージファイルにも同一または類似の特徴が適用可能であることは、当業者であれば容易に理解することができるであろう。
また、APKは周知のとおりであるため、APKファイルまたはAPKファイルが含むファイル自体についての説明も、当業者であれば従来技術から容易に理解することができるであろう。したがって、APKファイルまたはAPKファイルに含まれるファイル自体についての詳しい説明は省略する。
ファイル識別モジュール320は、分解されたパッケージファイルに含まれるファイルを識別してよい。図3に示される拡張子(「dex」、「so」、「dll」、「json」、「ini」、「apk」、「xml」、「cert」)は、上述したように、APKと関連する従来技術から当業者であれば容易に理解することができるであろう。
パースモジュール330は、識別されたファイルをパースしてよい。このために、パーサ331は、識別されたファイルのうち、特定の拡張子(一例として、「dex」、「so」、「dll」)のファイルをパースしてよく、コレクタ332は、特定の拡張子(一例として、「json」、「ini」、「apk」、「xml」、「cert」)のファイルから必要な情報を収集してよい。
例えば、パースモジュール330は、「dex」ファイルに含まれるクラス(class)とメソッド(method)それぞれを識別してよく、メソッドが含む命令を追跡して多数の集団(mass)で区分して識別してよい。命令の集団は、「goto」文や「switch」文、または「if」文などのような分岐命令を基準に区分されてよい。また、パースモジュール330は、このような命令の集団間の呼び出し関係に関する情報を生成して管理してよい。一例として、命令の集団間の呼び出し関係は、ツリー構造で管理されてよく、呼び出し関係に関する情報は、特定の命令の集団がコールするメソッドに関する情報を含んでよい。このような情報の生成および管理は、APKファイルのようなパッケージファイルが含むファイルそれぞれに対して処理されてよく、ファイルの特性によってパース方式が異なってよい。
パースされた情報と収集された情報は、分析モジュール340に伝達されてよい。
分析モジュール340は、パースモジュール330から伝達される情報に基づき、該当のパッケージファイル(または、該当のパッケージファイルによって電子機器1(110)のような利用者端末にインストールされて駆動されるアプリケーション)に対する難読化観点、脆弱性観点、および保安ソリューション観点による分析情報を生成および提供してよい。
例えば、難読化探知モジュール341は、特定の拡張子(一例として、「dex」、「so」、「dll」)のファイルにどの程度の水準の難読化が適用されているかに関する分析情報を生成してよい。このために、難読化探知モジュール341は、ファイルの種類に応じて、予め設定される項目別に難読化が適用されているかなどを判断してよい。
また、脆弱性探知モジュール342は、特定の拡張子(一例として、「dex」、「so」、または設定(configuration)ファイルの拡張子である「config」)のファイルにどのような脆弱性が存在するかに関する分析情報を生成してよい。このために、保安性評価システム300は、周知の脆弱性に関する情報を管理してよく、脆弱性探知モジュール342は、このような脆弱性に関する情報を利用することにより、どのファイルにどのような脆弱性が存在するかに関する分析情報を生成してよい。
また、プラットフォーム探知モジュール343は、該当のアプリケーションが開発されたプラットフォームおよび/または該当のアプリケーションが動作するプラットフォームに関する情報を抽出してよい。例えば、保安性評価システム300は、該当のアプリケーションがどのプラットフォーム(一例として、UnityやCocosのような開発ツール)で開発されたのかに応じて互いに異なる分析方式を活用してよい。
また、保安性評価システム300は、アプリケーションが動作するプラットフォームごとにパッケージファイルに含まれるファイルフォーマットが異なることもあるため、このようなプラットフォームごとに互いに異なる分析方式を活用してもよい。
このために、保安性評価システム300は、パッケージファイルに対するプラットフォームに関する情報を抽出してよく、このような情報に基づいてパッケージファイルを分析したり、抽出されたプラットフォームに関する情報を外部に提供したりしてよい。
保安ツール探知モジュール344は、パッケージファイルの開発者が自主的にパッケージファイルに挿入した保安ソリューションを探知してよい。例えば、第三者によってライブラリ形態で提供される第1保安ツールが、開発者によって該当のパッケージファイルに追加されていることがある。他の例として、開発者が自主開発した第2保安ツールが、開発者によって該当のパッケージファイルに追加されていることもある。言い換えれば、保安ツール探知モジュール344は、このような保安ツールがパッケージファイルに適用されているかに関する分析情報を生成してよい。
関係分析モジュール345は、パッケージファイルに含まれるファイル間の参照関係に関する分析情報を生成してよい。例えば、第1ファイルが第2ファイルを呼び出すためのコードを含んでいる場合、第1ファイルと第2ファイルとの参照関係に関する情報が分析情報に含まれるように分析情報が生成されてよい。
レポートモジュール350は、分析モジュール340で生成される分析情報を収集し、保安性評価システム300の関係者(一例として、サーバ150の管理者またはアプリケーションパブリッシャの保安検査チーム)に提供するための報告書を生成してよい。このような報告書は、図3に示す例のように、HTML(Hypertext Markup Language)やXML(eXtensible Markup Language)を利用して関係者の端末に提供されてよい。
図4は、本発明の一実施形態における、分析情報の提供のために報告書に含まれる情報の例を示した図である。図4は、本発明の理解を助けるための一実施形態に過ぎず、報告書に含まれる分析情報の例や分析情報の伝達方式は、実施形態によって異なってもよい。
例えば、パッケージファイルのファイルフォーマットがアンドロイドではなく他のオペレーティングシステムのためのファイルフォーマットである場合、パッケージファイルに含まれるファイルの情報やその構成方式がファイルフォーマットによって異なってもよいことは、当業者であれば容易に理解することができるであろう。以下で説明するファイル410〜480は、該当のファイルに含まれる情報を、ユーザに有意に整理して表現するためのテンプレート情報などを含んでもよい。
「Report.html」ファイル410は、対象となるパッケージファイルの全体の脆弱性等級に関する情報と、該当のパッケージファイルに適用された保安ツールに関する情報を含んでよい。
「WikiReport.html」ファイル420は、パッケージファイルに含まれるモジュール別またはファイル別の難読化等級に関する情報と、難読化に関する他の情報を含んでよい。
「Packages.html」ファイル430は、パッケージファイルに含まれるファイル(一例として、plistファイル、soファイル、xmlファイル、jsonファイルなど)に関する情報を含んでよい。
「Platfrom.html」ファイル440は、UnityやCocosなどのような開発ツールのように、該当のパッケージファイルがどのプラットフォームで開発されたかに関する情報を含んでよい。
「Perm.html」ファイル450は、アンドロイドパーミッション(Android permission)使用のリストに関する情報を含んでよい。
「Correlation.html」ファイル460は、パッケージファイルのモジュール間またはファイル間の呼び出し関係に関する情報を含んでよい。
「AppliedSecurityTool.html」ファイル470は、パッケージファイルに適用された保安ツールに関するリスト情報を含んでよい。また、「AppliedSecurityTool.html」ファイル470は、適用された保安ツールそれぞれの種類やバージョンに関する情報をさらに含んでもよい。
「dll、soファイル情報」480は、各ファイルに含まれる特定の項目に関する情報を含んでよい。例えば、soファイルのインポートアドレステーブル(IAT)、エクスポートアドレステーブル(EAT)、セクションヘッダ(section header)、プログラムヘッダ(Program header)、シンボル(symbol)などに関する情報が「dll、soファイル情報」480に含まれて提供されてよい。
図5は、本発明の一実施形態における、脆弱性観点の分析情報の例を示した図である。
図5の表500において、「タイプ(type)」は、該当の項目が脆弱性観点の分析情報であることを示している。また、図5の表500において、「名称(name)」は、どの脆弱性であるかを示す識別子を示している。また、図5の表500において、「危険等級(dangerous grade)」は、探知された脆弱性の危険等級を示している。さらに、図5の表500において、「探知ログ(detected log)」は、該当の脆弱性が、パッケージファイルが含むファイルのうちのどのファイルから探知されたかを示すために、該当のファイルの識別子(パスを含むファイル名)と脆弱性に関する情報(一例として、どのオープンソースから発見された脆弱性かに関する識別子)を示している。
図6は、本発明の一実施形態における、パースされたdllファイルに含まれるクラスとメソッドの例を示した図であり、図7は、本発明の一実施形態における、パースされたdllファイルから識別されたクラスとメソッドを基盤とした難読化観点の分析情報の例を示した図である。
図6の四角ボックス600は、パッケージファイルが含むsoファイルから抽出されたクラス(class)とメソッド(method)それぞれの識別情報を示している。一例として、図3を参照しながら説明した難読化探知モジュール341は、図6のように抽出されたクラスとメソッドを分析することで、難読化されたクラスと難読化されたメソッドを把握してよい。
このとき、保安性評価システム300は、図7の表700のように、難読化観点の分析情報を生成してよい。
図7の表700において、「名称」は、該当のdllファイルの識別子を、「危険等級」は、該当のdllファイルの難読化観点の危険等級を、「探知ログ」は、難読化に関する情報をそれぞれ示してよい。
ここで、図7の表700において、「MethodCrypted」は、メソッドの難読化の適用有無を示してよく、このとき、「yes」は、メソッドに難読化が適用されていることを示す値であってよい。
また、図7の表700において、「TotalClassNum=23」は、該当のdllファイルから抽出されたクラスの数が23個であることを意味してよく、「TotalMethodNum=23」は、該当のdllファイルから抽出されたメソッドの数が23個であることを意味してよい。
一方、図7の表700において、「TotalObfuscatedClassNum=2」は、該当のdllファイルに含まれる23個のクラスのうち、2個のクラスだけに難読化が適用されていることを意味してよい。また、図7の表700において、「TotalObfuscatedMethodNum=7」は、該当のdllファイルに含まれる23個のメソッドのうち、7個のクラスだけに難読化が適用されていることを意味してよい。
このとき、保安性評価システム300または難読化探知モジュール341は、このような難読化が適用されたクラスの数および/または難読化が適用されたメソッドの数に基づき、該当のdllファイルの難読化観点の危険等級を決定してよい。例えば、全体クラス/メソッドの数のうち、難読化が適用されたクラス/メソッドの数に対する割合に基づいて難読化観点の危険等級が決定されてよい。より具体的な例として、このような割合が高いほど、相対的に難読化観点の危険等級は低くなってよい。
図8は、本発明の一実施形態における、パースされたsoファイルに対する難読化観点の分析情報の例を示した図であり、図9は、本発明の一実施形態における、パースされたsoファイルに対する難読化観点の分析情報の他の例を示した図である。
図8の表800は、「libopenal.so」ファイルに対する難読化観点の危険等級が安全(SAFE)等級であることを示しており、図9の表900は、「libnmscrash64−v1.so」ファイルに対する難読化観点の危険等級がクリティカル(CRITICAL)等級であることをそれぞれ示している。
このために、保安性評価システム300または難読化探知モジュール341は、soファイルそれぞれに含まれる項目に難読化が適用されているかを判断し、このような難読化適用の程度に応じて難読化観点の危険等級を決定してよい。例えば、図8および図9では、soファイルそれぞれが含む項目として、セクションヘッダ(sectionHeader)、ストリングス(strings)、ストリングテーブル(stringTable)、シンボルテーブル(symbolTable)、およびコード(code)を示している。ここで、「yes」は難読化が適用されていることを意味する値であってよく、「no」は難読化が適用されていないことを意味する値であってよい。
このとき、図8の実施形態では、「libopenal.so」ファイルのセクションヘッダとシンボルテーブルに難読化が適用されており、「libopenal.so」ファイルのコードがパッキング(「codepacking=yes」)されているため、「libopenal.so」ファイルの難読化観点の危険等級が低く決定された例を示している。コードがパッキングされている場合、パッキングされたコードの本来のコードは簡単には取得できないため、コードパッキングの有無も難読化の適用有無として活用されてよい。
これに対して、図9の実施形態では、「libnmscrash64−v1.so」ファイルと関連し、予め選定された項目すべてに対して難読化が適用されていないため、「libnmscrash64−v1.so」ファイルの難読化観点の危険等級が高く決定された例を示している。
このように、保安性評価システム300は、ファイルの種類に応じて互いに異なる種類の項目(一例として、dllファイルではクラスやメソッドの項目、soファイルではセクションヘッダ、ストリング、ストリングテーブル、シンボルテーブル、および/またはコードなどの項目)に対する難読化の適用有無を確認し、このような難読化の適用有無に応じて該当のファイルの難読化観点の危険等級を自動で決定して分析情報を生成することができる。
保安性評価システム300は、難読化観点と脆弱性観点、および/または保安ソリューション観点のそれぞれについて観点別パターン情報を予め生成および管理し、このような観点別パターン情報を利用することにより、ファイル別に難読化観点の分析情報と脆弱性観点の分析情報、および/または保安ソリューション観点の分析情報を生成してよい。生成された分析情報は関係者に提供されてよい。また、関係者から追加の観点別パターン情報がさらに入力されることもある。例えば、既存のオープンソースから新たな脆弱性が発見されたり、既に提供された分析情報に基づいて難読化や脆弱性などを分析するための新たなパターン情報が開発されたりすることがある。このために、保安性評価システム300は、入力された観点別パターン情報を予め格納されている観点別パターン情報に追加することにより、予め格納されている観点別パターン情報を更新してよい。このとき、新たなパターン情報による追加分析のために、登録されているパッケージファイルに対する追加分析が行われてよい。
図10は、本発明の一実施形態における、サーバのプロセッサが含むことのできる構成要素の第1例を示したブロック図であり、図11は、本発明の一実施形態における、サーバが実行することのできる保安性評価方法の第1例を示したフローチャートである。
本発明の実施形態に係る保安性評価システムは、上述したサーバ150のようなコンピュータ装置の形態で実現されてよい。また、図10に示すように、サーバ150のプロセッサ222は、保安性評価システムを実現するための構成要素として、観点別パターン情報格納部1010、パッケージファイル登録部1020、分析情報生成部1030、分析情報提供部1040、および追加パターン情報処理部1050を備えてよい。このようなプロセッサ222およびプロセッサ222の構成要素は、図11の保安性評価方法に含まれる段階1110〜段階1180を実行してよい。このとき、プロセッサ222およびプロセッサ222の構成要素は、メモリ221に含まれるオペレーティングシステムのコードや少なくとも1つのプログラムのコードによる制御命令(instruction)を実行するように実現されてよい。ここで、プロセッサ222の構成要素は、サーバ150に格納されたコードにより提供される制御命令に従ってプロセッサ222によって実行される、プロセッサ222の互いに異なる機能の表現であってよい。例えば、プロセッサ222が上述した制御命令に従って観点別パターン情報を格納するプロセッサ222の機能的表現として、観点別パターン情報格納部1010が使用されてよい。
段階1110において、観点別パターン情報格納部1010は、パッケージファイルを難読化観点および脆弱性観点によって分析するための観点別パターン情報を格納してよい。パターン情報は、観点別、ファイルの種類別、および/またはプラットフォームの種類別などによって登録されたパッケージファイルをどのような方式で分析するかに関する情報を含んでよい。
段階1120において、パッケージファイル登録部1020は、アプリケーションのインストールおよび駆動のために利用者に配布するためのパッケージファイルの登録を受けてよい。例えば、パッケージファイル登録部1020は、開発者の端末からネットワークを介してサーバ150に送信されたパッケージファイル、あるいは別の記録媒体からサーバ150に入力されたパッケージファイルを登録してよい。登録されたパッケージファイルは、該当のアプリケーションを利用しようとする利用者に配布されてよいが、その前に、一定の水準以上の保安性を提供するために保安性評価が実施されてよい。
段階1130において、分析情報生成部1030は、登録されたパッケージファイルを観点別パターン情報に基づいて分析し、難読化観点の分析情報および脆弱性観点の分析情報を生成してよい。
例えば、分析情報生成部1030は、登録されたパッケージファイルを分解してパッケージファイルに含まれるファイルを識別してよい。また、分析情報生成部1030は、識別されたファイルの拡張子に基づいて、分析を必要とするファイルを観点別に識別して、観点別に識別されたファイルごとに対応する観点の分析情報を生成してよい。
より具体的には、観点別パターン情報のうちの難読化観点のパターン情報は、登録されたパッケージファイルに含まれるファイルのうち、難読化の観点によって識別されたファイルから項目別難読化の適用有無を識別するためのパターン情報を含んでよい。
一実施形態において、項目別難読化の適用有無は、難読化の観点によって識別されたファイルが含むメソッドとクラスそれぞれに対する難読化の適用有無を含んでよい。この場合、分析情報生成部1030は、段階1130において、難読化観点のパターン情報に基づき、難読化の観点によって識別されたファイルから難読化が適用されたメソッドおよびクラスを識別し、対象ファイル別に、(1)難読化が適用されたメソッドの数、(2)難読化が適用されたクラスの数、(3)難読化が適用されたメソッドの数および難読化が適用されたクラスの数に基づいて決定される危険等級を含む難読化観点の分析情報を生成してよい。このような分析情報の生成については、図6および図7を参照しながら詳しく説明したとおりである。
他の実施形態において、項目別難読化の適用有無は、難読化の観点によって識別されたファイルが含むセクションヘッダ、ストリング、ストリングテーブル、シンボルテーブル、およびコードのうちの少なくとも1つの項目に対応する情報それぞれの難読化の適用有無を含んでよい。この場合、分析情報生成部1030は、段階1130において、難読化観点のパターン情報に基づき、難読化の観点によって識別されたファイルから難読化が適用された項目を識別し、対象ファイル別に、(1)難読化が適用された項目の種類、および(2)難読化が適用された項目の種類に基づいて決定される危険等級を含む難読化観点の分析情報を生成してよい。
また、観点別パターン情報のうちの脆弱性観点のパターン情報は、脆弱性が存在するものとして知られているプロトコル、ライブラリ、およびAPI(Application Programming Interface)のうちの少なくとも1つに関する脆弱性情報を含んでよい。この場合、分析情報生成部1030は、段階1130において、脆弱性観点のパターン情報に基づき、登録されたパッケージファイルに含まれるファイルのうちから脆弱性情報に対応するプロトコル、ライブラリ、またはAPIを含むファイルを識別し、(1)識別されたファイルの識別子、および(2)識別されたファイルに含まれる脆弱性の種類に基づいて決定される危険等級を含む脆弱性観点の分析情報を生成してよい。
また、上述したように、保安ソリューション観点の分析情報がさらに生成されてもよい。例えば、観点別パターン情報格納部1010は、段階1110において、パッケージファイルを保安ソリューション観点によって分析するための観点別パターン情報をさらに格納してよい。この場合、分析情報生成部1030は、段階1130において、登録されたパッケージファイルを保安ソリューション観点に対応する観点別パターン情報に基づいてさらに分析して保安ソリューション観点の分析情報をさらに生成してよい。
段階1140において、分析情報提供部1040は、生成された分析情報を提供してよい。上述したように生成された分析情報は、関係者(一例として、サーバ150の管理者またはアプリケーションパブリッシャの保安検査チーム)に提供されてよい。上述したように、パッケージファイルに含まれるファイル間の参照関係に関する分析情報がさらに生成されてもよい。この場合、分析情報提供部1040は、参照関係に関する分析情報をさらに提供してよい。分析および提供される情報については、上述で詳しく説明したとおりである。
段階1150において、追加パターン情報処理部1050は、分析情報の提供と関連する追加の観点別パターン情報の入力を受けてよい。例えば、追加パターン情報処理部1050は、分析情報が提供される関係者から追加の観点別パターン情報の入力を受けてよい。より具体的な例として、オープンソースに対する新たな脆弱性が発見されることにより、新たな脆弱性を探知するためのパターン情報が関係者から入力されてよい。また、新たなファイルフォーマットなどが開発されて常用化される場合、このような新たなファイルフォーマットによるパッケージファイルを分析するための観点別パターン情報が入力されてもよい。
段階1160において、追加パターン情報処理部1050は、入力された観点別パターン情報を利用して、格納されている観点別パターン情報を更新してよい。このとき、追加パターン情報処理部1050は、入力された観点別パターン情報を、格納されている観点別パターン情報に追加してもよいし、入力された観点別パターン情報と予め格納されている観点別パターン情報を交換してもよい。
段階1170において、分析情報生成部1030は、入力された観点別パターン情報または更新された観点別パターン情報に基づいて、登録されたパッケージファイルそれぞれを再分析し、難読化観点の分析情報および脆弱性観点の分析情報を登録されたパッケージファイルごとにそれぞれ再生成してよい。
段階1180において、分析情報提供部1040は、再生成された分析情報を提供してよい。
また、保安性評価システムは、脆弱性を例外処理するための機能を提供してよい。例えば、保安性評価システムで脆弱性観点のパターン情報に基づいて脆弱性が存在するかを探知するにあたり、プログラム的にファイルに対する正確な脆弱性の探知がなされない場合が存在する。例えば、特定の脆弱性観点のパターン情報に基づいて正常なファイルが探知され、このようなパターン情報をプログラム的に修正することができない場合が存在する。この場合、保安性評価システムは、周知の脆弱性に対する脆弱性観点のパターン情報であったとしても、脆弱性探知から除外させるための例外処理機能を提供してよい。
また、保安性評価システムは、難読化と脆弱性の分析結果に対する指標管理機能を提供してよい。例えば、保安性評価システムは、特定の脆弱性が探知されたる数を時間に応じて記録し、一定期間単位で該当の脆弱性が探知される回数が増加しているか減少しているかに関する情報のような統計的情報を提供してよい。他の例として、保安性評価システムは、パッケージファイルに対する適用が増加している難読化技術あるいは適用が減少している難読化技術に関する情報のような指標を提供してもよい。
図12は、本発明の一実施形態における、Dexファイルの難読化の適用有無を決定する例を示した図である。保安性評価システム300に登録されるアンドロイドアプリケーションパッケージ(APK)は、難読化が適用されていない状態または難読化が適用された状態のDexファイルを含んでよい。このとき、保安性評価システム300は、登録されたアンドロイドアプリケーションパッケージに含まれるDexファイルに難読化が適用されているかどうかを決定してよい。
図12に示された第1Dexファイル1210は、難読化が適用されていない状態のファイルを示してよく、第2Dexファイル1220および第3Dexファイル1230は、難読化が適用された状態のファイルを示してよい。言い換えれば、第1Dexファイル1210は、第2Dexファイル1220および第3Dexファイル1230のように2つのDexファイル(マルチDex(multi dex))で難読化されてよい。このとき、第2Dexファイル1220は、第1Dexファイル1210からクラス(クラスA(ClassA)、クラスB(ClassB)、クラスC(ClassC)、クラスD(ClassD)、およびクラスE(ClassE)の5つのクラス、以下、「クラスA〜E」とする)が除去されたファイルであり、除去されたクラスは暗号化され、暗号化されたクラスA〜E(Crypted ClassA〜E)1231が含まれる新たなDexファイルである第3Dexファイル1230がアンドロイドアプリケーションパッケージに含まれるとする。
この場合、図12の実施形態において、Dexファイルに含まれなければならないクラス(クラスA〜E)は、第3Dexファイル1230に暗号化されて格納されているため、第2Dexファイル1220は、第3Dexファイル1230をメモリにロードするための機能を含まなければならない。言い換えれば、図12に示すように、第2Dexファイル1220に含まれるアプリケーションクラス(Application)1221は、このようなDexファイルのロードのための機能を含む必要がある。アンドロイドアプリケーションパッケージでは、DexファイルのロードのためのAPIが提供されていることから、第2Dexファイル1220に含まれるアプリケーションクラス1221は、このようなAPIコールのための機能(DexLoader)を含んでよい。例えば、アプリケーションクラス1221により、Dexファイル(図12の実施形態では第3Dexファイル1230)のロードのためのクラスローダ(「ClassLoader」または「DexClassLoader」)クラスと、このようなクラスローダクラスが含むロードクラス(「LoadClass」)メソッドが呼び出されなければならない。
このような観点において、1つのDexファイル(一例として、図12の第2Dexファイル1220)に対する難読化の適用有無を探知するために、保安性評価システム300は、該当のDexファイルに含まれるアプリケーションクラス(一例として、図12の第2Dexファイル1220に含まれるアプリケーションクラス1221)により、Dexファイル(一例として、図12の第3Dexファイル1230)のロードのためのAPIコールがなされるかを確認してよい。
より具体的な例として、アンドロイドアプリケーションパッケージでは、上述した例におけるクラスローダクラスおよびクラスローダクラスに含まれるロードクラスメソッドが呼び出されるかどうかに基づき、該当のDexファイルの難読化の適用有無が決定されてよい。言い換えれば、保安性評価システム300は、難読化の適用有無を決定しようとするDexファイルにおいて、クラスローダクラスおよびロードクラスメソッドの呼び出し有無を確認してよい。
図12の第1Dexファイル1210は、クラスA〜Eをすべて含んでいるため、別のDexファイルをロードするためのAPIコールが成なされないはずであり、これにより、保安性評価システム300は、第1Dexファイル1210に難読化が適用されていないことを把握できるようになる。一方、図12の第2Dexファイル1220は、第3Dexファイル1230がロードされることによって暗号化されたクラスA〜E 1231を得ることができるため、第3Dexファイル1230をロードするためのAPIコールがなされるはずであり、保安性評価システム300は、このようなAPIコールの探知により、第2Dexファイル1220には難読化が適用されていることを把握することができる。
図13は、本発明の一実施形態における、APIコールの探知過程の例を示した図である。
過程1において、保安性評価システム300は、APK1300を登録してよい。APK1300は、アプリケーションの利用者に配布するためにアプリケーションパブリッシャに登録されてよい。上述したように、保安性評価システム300は、アプリケーションパブリッシャが、登録されているアプリケーションのパッケージファイルを配布するためのサービスを提供する装置(一例として、サーバ150)に実現されてもよいし、上述した装置とネットワーク170を介して通信する別のシステムとして実現されてもよい。例えば、保安性評価システム300は、サーバ150に登録されるAPK1300を、ネットワーク170を介して受信して登録してよい。
過程2において、保安性評価システム300は、アンドロイドマニフェストファイル1310からアプリケーションクラス1321のクラス名を抽出してよい。アンドロイドアプリケーションパッケージが「AndroidManifest.xml」のようなアンドロイドマニフェストファイル1310を含むことや、このようなアンドロイドマニフェストファイル1310がアプリケーションクラス1321のクラス名を含むことは、周知のとおりである。
過程3において、保安性評価システム300は、抽出されたクラス名によって識別されるアプリケーションクラス1321からすべての呼び出しを収集してよい。例えば、保安性評価システム300は、抽出されたクラス名を利用して第1Dexファイル1320に含まれたアプリケーションクラス1321を識別してよく、識別されたアプリケーションクラス1321に含まれるすべてのメソッドそれぞれの本体命令(body instruction)で呼び出しされるクラスとメソッドに対する呼び出しリストを生成してよい。一例として、保安性評価システム300は、図3を参照しながら説明したパースモジュール330で生成される呼び出し関係を基盤として上述した呼び出しリストを生成してよい。
過程4において、保安性評価システム300は、他のDexファイル(図13の実施形態では第2Dexファイル1330)をロードするためのAPIコールを探知してよい。このために、保安性評価システム300は、呼び出しリストにより、クラスローダ(「ClassLoader」または「DexClassLoader」)クラスおよびロードクラス(「LoadClass」)メソッドが呼び出されたかを確認してよい。言い換えれば、クラスローダクラスおよびロードクラスメソッドの呼び出しが他のDexファイルをロードするためのAPIコールとして探知されてよい。
APIコールが探知されると、保安性評価システム300は、過程5のように、第1Dexファイル1320に難読化が適用されたものと決定してよい。APIコールが探知されなかった場合、保安性評価システム300は、過程6のように、第1Dexファイル1320に難読化が適用されていないものと決定してよい。
ただし、アプリケーションクラスの実現により、アプリケーションクラスが含むメソッドの本体命令でAPIコールがなされずに、該当のメソッドによって呼び出される他のメソッドの本体命令でDexファイルのロードのためのAPIコールがなされることもある。このような場合のAPIコールを探知するために、保安性評価システム300は、呼び出しリストによって識別されるメソッドの本体命令で収集される他の呼び出しリストによってAPIコールを探知する方式により、アプリケーションクラスが含むメソッドによって直接的/間接的に呼び出されるすべてのメソッドでAPIコールがなされるかを確認してもよい。このとき、アプリケーションクラスが含むメソッドにより、直接系/間接的に呼び出されるすべてのメソッドでAPIコールがなされなかった場合、保安性評価システム300は、第1Dexファイル1320に難読化が適用されていないものと決定してよい。
第2Dexファイル1330の場合には、アンドロイドマニフェストファイル1310から関連するアプリケーションクラスのクラス名が抽出されないため、難読化の適用有無が探知されなくてもよい。
また、上述したように、マルチDexを利用する難読化方式の他にも、メソッドの本体命令全体を暗号化する難読化方式が存在する。
図14は、本発明の一実施形態における、本体命令の暗号化を利用して難読化を探知する例を示した図である。図14は、Dexファイルが含む特定のメソッド1410の演算コード1411を暗号化や符号化、またはダミー(dummy)コードの追加などによって難読化し、変形された演算コード1412を含むメソッド1420が生成された例を示している。
このとき、Dexファイルはコンパイルによって生成されるという点を考慮すると、変形された演算コード1412は、任意のコードに代替されるのではなく、コンパイルが可能なコードに代替されなければならないことから、数種類のパターンを有するようになる。例えば、変形された演算コード1412は、レジスタに影響を与えないか無意味な命令のパターン(一例として、ARMアセンブリ命令におけるLDR命令の連続や分岐、またはLSLS命令の連続)を含むようになる。
また、正常なバイトコードは、一定のヘキサ(hexa)値の連続によってコードが予め定義されている。例えば、下のウェブサイトでは、ダルビックOPコードについて説明している。
−ウェブサイト(http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html)
各メソッドは、「.local」というディレクティブ(directive)により、使用されるローカル変数レジスタ(local variable register)の個数を把握してよい。「.local」が2であれば、v0、v1のように、2つのローカル変数レジスタが使用されたことを意味してよい。このとき、「0B」というヘキサ値が発見される場合、その後にあるヘキサ値はローカル変数レジスタを意味してよい。例えば、「0B」というヘキサ値は、上述したウェブサイトで説明するように、OPコードネーム「move−result−object vx」に対応しており、このようなOPコードは、以前のメソッド呼び出し(invocation)のlong/double結果値を「vx」と「vx+1」に移動させる命令であることが分かる。言い換えれば、「0B02」は、以前の命令実施のlong/double結果値を「v2」と「v3」の2つのローカル変数レジスタに移動させるのである。この場合、保安性評価システム300は、「.local」によって確認したローカル変数レジスタの個数と「0B02」によって要求されるローカル変数レジスタに基づき、要求されるローカル変数レジスタが可用であるかを確認してよい。他の例として、ヘキサ値「6E」は、上述したウェブサイトで説明したように、OPコード「invoke−virtual」後に現在のインスタンスのパラメータに該当するローカル変数レジスタとメソッドパラメータに対応するローカル変数レジスタを明示しなければならない。この場合にも、保安性評価システム300は「.local」を利用してこのようなレジスタが可用なレジスタであるかを確認することができ、このような方法により、メソッド1410の演算コードが一般的な(または正常な)コードであるか、難読化された(または変形された)コードであるかを判別できるようになる。
したがって、保安性評価システム300は、整形化されたパターンを予め格納および管理している間に、該当のパターンの命令を処理する演算コードのメソッドを探知することにより、Dexファイルに対する難読化の適用有無を決定することができる。言い換えれば、図14の実施形態において、保安性評価システム300は、予め格納されたパターンを演算コード1411や変形された演算コード1412によって検索し、予め格納されたパターンが発見される変形された演算コード1412該当によってメソッド1420に難読化が適用されたことを判断してよいが、これは、該当のメソッド1420を含むDexファイルに難読化が適用されたことを意味してよい。
このとき、Dexファイルが含むメソッド別に難読化の適用有無が決定されるようになるため、保安性評価システム300は、実施形態によっては、Dexファイルが含むメソッドのうち、難読化が適用されたメソッドの比重に基づいて難読化による保安性等級を決定してもよい。
図15は、本発明の一実施形態における、サーバのプロセッサが含むことのできる構成要素の第2例を示したブロック図であり、図16は、本発明の一実施形態における、サーバが実行することのできる保安性評価方法の第2例を示したフローチャートである。
本発明の実施形態に係る保安性評価システム300は、上述したサーバ150のようなコンピュータ装置の形態で実現されてよい。また、図15に示すように、サーバ150のプロセッサ222は、保安性評価システム300を実現するための構成要素として、APK登録部1510、アプリケーションクラス検索部1520、APIコール確認部1530、難読化決定部1540、保安性決定部1550、および情報提供部1560を備えてよい。このようなプロセッサ222およびプロセッサ222の構成要素は、図16の保安性評価方法に含まれる段階1610〜段階1660を実行してよい。このとき、プロセッサ222およびプロセッサ222の構成要素は、メモリ221に含まれるオペレーティングシステムのコードや少なくとも1つのプログラムのコードによる制御命令を実行するように実現されてよい。ここで、プロセッサ222の構成要素は、サーバ150に格納されたコードが提供する制御命令に従ってプロセッサ222によって実行される、プロセッサ222の互いに異なる機能の表現であってよい。例えば、プロセッサ222が上述した制御命令に従ってアンドロイドアプリケーションパッケージ(APK)を登録するプロセッサ222の機能的表現として、APK登録部1510が使用されてよい。
段階1610において、APK登録部1510は、アンドロイドアプリケーションパッケージを登録してよい。アンドロイドアプリケーションパッケージは、アプリケーションの利用者に配布するためにアプリケーションパブリッシャに登録されてよい。上述したように、保安性評価システムは、アプリケーションパブリッシャが、登録されたアプリケーションのパッケージファイルを配布するためのサービスを提供する装置に実現されてもよいし、上述した装置とネットワーク170を介して通信する別のシステムとして実現されてもよい。例えば、保安性評価システム300は、アプリケーションパブリッシャに登録されたアンドロイドアプリケーションパッケージを、ネットワーク170を介して受信して登録してもよい。
段階1620において、アプリケーションクラス検索部1520は、アンドロイドアプリケーションパッケージに含まれるDexファイルからアプリケーションクラスを検索してよい。一例として、アプリケーションクラス検索部1520は、アンドロイドアプリケーションパッケージに含まれる「AndroidManifest.xml」のようなアンドロイドマニフェストファイルから、アプリケーションクラスのクラス名を抽出してよく、抽出されたクラス名を利用して、Dexファイルから抽出されたクラス名に対応するアプリケーションクラスを検索してよい。
段階1630において、APIコール確認部1530は、アプリケーションクラスに含まれるメソッドの本体命令で呼び出されるクラスおよびメソッドを基盤とし、そのアンドロイドアプリケーションパッケージにさらに含まれる他のDexファイルをロードするためのAPIコールがなされたかを確認してよい。上述したように、APIコール確認部1530は、識別されたアプリケーションクラスに含まれるすべてのメソッドそれぞれの本体命令で呼び出されるクラスとメソッドについての呼び出しリストを生成してよい。このとき、APIコール確認部1530は、呼び出しリストにより、クラスローダ(「ClassLoader」または「DexClassLoader」)クラスおよびロードクラス(「LoadClass」)メソッドが呼び出されたかを確認してよい。言い換えれば、クラスローダクラスおよびロードクラスメソッドの呼び出しが、他のDexファイルをロードするためのAPIコールとして探知されてよい。
生成された呼び出しリストからクラスローダクラスおよびロードクラスメソッドが検索されなければ、APIコール確認部1530は、呼び出しリストによって識別されるメソッドの本体命令から収集される呼び出しリストにより、クラスローダクラスおよびロードクラスメソッドの呼び出しがあったかどうかをさらに検索してよい。このように、APIコールの確認過程は、アプリケーションクラスが含むすべてのメソッドから直接的に呼び出されるクラスとメソッドだけではなく、呼び出されるメソッドから再び呼び出されるクラスとメソッドに対しても繰り返し行われることで、アプリケーションクラスに含まれるメソッドによって直接的/間接的に呼び出されるすべてのクラスとメソッドに対して実行されてよい。
段階1640において、難読化決定部1540は、他のDexファイルをロードするためのAPIコールが存在すると確認された場合、Dexファイルに難読化が適用されていると決定してよい。他のDexファイルをロードするためのAPIコールが確認されない場合、難読化決定部1540は、段階1640において、Dexファイルに難読化が適用されていないと決定してよい。
段階1650において、保安性決定部1550は、Dexファイルに難読化が適用されたかに少なくとも基づき、登録されたアンドロイドアプリケーションパッケージの保安性を決定してよい。例えば、登録されたアンドロイドアプリケーションパッケージの保安性は、Dexファイルに難読化が適用されている場合の方が、Dexファイルに難読化が適用されていない場合よりも相対的により高く決定されてよい。
段階1660において、情報提供部1560は、Dexファイルに難読化が適用されているかどうかに関する情報を提供してよい。例えば、特定のDexファイルに対し、該当のDexファイルのファイル名、難読化の適用有無などに関する情報が共に提供されてよい。例えば、関連情報は、図3を参照しながら説明したように、管理者などに提供されてよい。
図17は、本発明の一実施形態における、サーバのプロセッサが含むことのできる構成要素の第3例を示したブロック図であり、図18は、本発明の一実施形態における、サーバが実行することのできる保安性評価方法の第3例を示したフローチャートである。
本実施形態に係るサーバ150のプロセッサ222は、保安性評価システム300を実現するための構成要素として、APK登録部1710、ジャンクコードパターン管理部1720、ジャンクコードパターン検索部1730、および難読化決定部1740を備えてよい。このようなプロセッサ222およびプロセッサ222の構成要素は、図18の保安性評価方法に含まれる段階1810〜段階1840を実行してよい。このとき、プロセッサ222およびプロセッサ222の構成要素は、メモリ221に含まれるオペレーティングシステムのコードや少なくとも1つのプログラムのコードによる制御命令を実行するように実現されてよい。ここで、プロセッサ222の構成要素は、サーバ150に格納されたコードが提供する制御命令に従ってプロセッサ222によって実行される、プロセッサ222の互いに異なる機能の表現であってよい。
段階1810において、APK登録部1710は、アンドロイドアプリケーションパッケージを登録してよい。このようなAPK登録部1710は、図15を参照しながら説明したAPK登録部1510に対応してよい。
段階1820において、ジャンクコードパターン管理部1720は、探索しようとするジャンクコードパターンの入力を受けて管理してよい。図14を参照しながら説明したように、ジャンクコードパターンは、メソッドの本体命令に対する難読化によって示されるようになるパターンを予め設定して活用してよい。このとき、段階1820は、段階1810以前に実行されてもよい。
段階1830において、ジャンクコードパターン検索部1730は、Dexファイルに含まれるメソッドの本体命令からジャンクコードパターンを検索してよい。Dexファイルはコンパイルによって生成されることから、メソッドの本体命令に対する難読化によって変換されたコードは任意のランダムな値を含むことはできず、一定のパターンを有するようになる。したがって、ジャンクコードパターン検索部1730は、このようなジャンクコードパターンがメソッドの本体命令から検索されるかどうかを確認してよい。
段階1840において、難読化決定部1740は、ジャンクコードパターンが検索される場合、Dexファイルに難読化が適用されていると決定してよい。このとき、Dexファイルに難読化が適用されているかどうかに少なくとも基づき、登録されたアンドロイドアプリケーションパッケージの保安性を決定してよい。あるいは、メソッド別に難読化の有無の決定が可能であるため、メソッド全体に対する難読化されたメソッドの割合などに基づいて保安性が決定されてもよい。また、難読化が適用されているメソッドに関する情報は、管理者などに提供されてもよい。
実施形態によって、図15および図16の実施形態と図17および図18の実施形態とが結合されてもよい。例えば、登録されるAPKに対し、DexファイルのロードのためのAPIコールの有無についての探知とジャンクコードパターンの探知が並列的に実行されてよい。このとき、難読化決定部1540または難読化決定部1740は、他のDexファイルをロードするためのAPIコールが存在すると確認されたる場合や、ジャンクコードパターンが検索される場合、Dexファイルに難読化が適用されていると決定してよい。この場合、保安性は、並列的にそれぞれ決定された保安性の加重合計などによって決定されてよく、探知されたそれぞれの情報が管理者などに提供されてよい。
図19および図20は、本発明の一実施形態における、登録されたパッケージファイルが含むELFファイルからシンボルに対する難読化を探知する第1例を示した図である。
図19は、ELFファイルが含むセクションヘッダテーブル1910と、セクションヘッダテーブル1910に含まれる動的リンクシンボルテーブルセクション(.dynsymセクション)のヘッダ1911を示している。また、図19は、ELFファイルに含まれる動的リンクシンボルテーブルセクション(.dynsymセクション)のシンボルエントリーテーブル(Symbol Entry Table)1920をさらに示しており、動的リンクシンボルテーブルセクションのヘッダ1911でシンボルエントリーテーブル1920をポインティングしている様子を示している。シンボルエントリーテーブル1920は、インポート関数(Import Function)およびエクスポート関数(Export Function)の名称とアドレスを並べているテーブルであってよい。
ELFファイルにおいて、セクションヘッダテーブル1910は、ELFファイルに含まれるセクションそれぞれに対する名称、メモリ、開始アドレス、ファイルオフセット、サイズ、整列方式、表現方式などの情報を定義している。セクションは、上述した.dynsymセクションの他にも、動的リンク情報セクション(.dynamicセクション)、読み取り専用データセクション(.rodataセクションまたは.rdataセクション)、プロセス初期化時に使用されるコードを含むセクション(.initセクションまたは.init_arrayセクション)などのような多様なセクションを含んでおり、これは周知のとおりである。例えば.dynsymセクションに関する情報は、セクションヘッダテーブル1910で.dynsymセクションのヘッダに基づいて定義されてよく、.dynsymセクションのヘッダは、このような定義された値のうちの少なくとも一部(一例として.dynsymセクションの開始アドレスとファイルオフセット、およびサイズ)によって.dynsymセクションをポインティングしてよい。
図20は、図19の動的リンクシンボルテーブルセクションのヘッダ1911に定義された値を難読化する例として、定義された値をヌル(Null)2010に代替した例を示している。この場合、動的リンクシンボルテーブルセクションのヘッダ1911は、シンボルエントリーテーブル1920をポインティングできなくなり、これによってELFファイルのセクションヘッダが難読化されるようになる。
このように、動的リンクシンボルテーブルセクションのヘッダ1911に定義された値をヌル2010や他の情報に変更して難読化することにより、ELFファイルで利用されるシンボルを難読化してよい。このとき、保安性評価システム300は、動的リンクシンボルテーブルセクションのヘッダ1911に定義された値を分析することにより、このようなセクションヘッダの難読化を探知してよい。
例えば、保安性評価システム300は、動的リンクシンボルテーブルセクションのヘッダ1911がヌル2010を含むという第1条件、動的リンクシンボルテーブルセクションのヘッダ1911のパース(parsing)が不可能であるという第2条件、および動的リンクシンボルテーブルセクションのヘッダ1911に含まれる情報がセクションのうちの動的リンク情報セクション(.dynamicセクション)に存在しないという第3条件のうちのいずれか1つの条件が満たされる場合、セクションヘッダに難読化が適用されていると決定してよい。
第1条件は、図20で説明するように、動的リンクシンボルテーブルセクションのヘッダ1911に定義された値がヌル2010に代替された条件を意味してよい。
一方、動的リンクシンボルテーブルセクションのヘッダ1911は、予め定義された構造を有しており、このような予め定義された構造によって動的リンクシンボルテーブルセクションのヘッダ1911をパースするための既存の方式が存在する。このとき、第2条件は、このような既存のパース方式によって動的リンクシンボルテーブルセクションのヘッダ1911のパースを試した結果、動的リンクシンボルテーブルセクションのヘッダ1911が正常にパースされないという条件を意味してよい。言い換えれば、動的リンクシンボルテーブルセクションのヘッダ1911が難読化された場合、保安性評価システム300は、動的リンクシンボルテーブルセクションのヘッダ1911をパースすることができなくなり、したがって、第2条件が満たされることが確認されるようになる。
また、動的リンクシンボルテーブルセクションのヘッダ1911に予め定義された構造によって定義される値のうちの少なくとも一部は、動的リンク情報セクション(.dynamicセクション)にも含まれ、動的リンク情報セクション(.dynamicセクション)の値は変更されない。したがって、保安性評価システム300は、動的リンクシンボルテーブルセクションのヘッダ1911に含まれる情報が、動的リンク情報セクション(.dynamicセクション)に存在するかを確認し、存在しない場合には、動的リンクシンボルテーブルセクションのヘッダ1911に含まれる値が変更されたものと決定してよい。言い換えれば、保安性評価システム300は、第3条件が満たされることを確認できるようになる。
このような第1条件、第2条件、および第3条件のうちのいずれか1つの条件が満たされれば、保安性評価システム300は、動的リンクシンボルテーブルセクションのヘッダ1911に難読化が適用されたものと決定するようになる。
図21は、本発明の一実施形態における、登録されたパッケージファイルが含むELFファイルからシンボルに対する難読化を探知する第2例を示した図である。図21の実施形態では、動的リンクシンボルテーブルセクションのヘッダ1911の代わりにシンボルエントリーテーブル1920の値に難読化を適用した例であって、インポート関数の名称2110とエクスポート関数の名称2120をヌルに変更した例を示している。
このような場合のために、保安性評価システム300は、動的リンクシンボルテーブルセクションのヘッダ1911がポインティングしているシンボルエントリーテーブル1920を見つけ出し、インポート関数とエクスポート関数の値を分析して動的リンクシンボルテーブルセクションに難読化が適用されているかどうかを決定してよい。例えば、保安性評価システム300は、インポート関数とエクスポート関数の値がヌルを含むか、アスキー(American Standard Code for Information Interchange:ASCII)コードで表現されていない場合、セクション(動的リンクシンボルテーブルセクション)に難読化が適用されていると決定してよい。
図22は、本発明の一実施形態における、登録されたパッケージファイルが含むELFファイルからシンボルに対する難読化を探知する第3例を示した図である。ELFファイルは、読み取り専用(read−only)セクション(.rdataセクション2210または.rodataセクション)を含んでよく、セクションヘッダテーブル1910は、このような読み取り専用(read−only)セクションのためのヘッダ(.rdataセクションヘッダ2220または.rodataセクションヘッダ)を含んでよい。
このような読み取り専用セクションに対する難読化は、読み取り専用セクションが含むテキストを暗号化または符号化することによってなされてよい。したがって、保安性評価システム300は、読み取り専用セクションのためのヘッダに基づいて読み取り専用セクションを確認し、確認された読み取り専用セクションに含まれる読み取り専用値を分析することにより、読み取り専用セクションに対する難読化を探知してよい。
例えば、図22の実施形態において、保安性評価システム300は、ELFファイルのセクションヘッダテーブル1910から.rdataセクションヘッダ2220を識別し、識別された.rdataセクションヘッダ2220がポインティングする.rdataセクション2230を見つけ出して.rdataセクション2230に含まれる値を分析してよい。このとき.rdataセクション2230は.rdataセクション2210に含まれるテキストを難読化したセクションであってよく、保安性評価システム300は、rdataセクション2230に含まれる値がヌルであるか、アスキーコードで表現されていない場合.rdataセクション2210とは異なり、.rdataセクション2230に対して難読化が適用されたことを確認してよい。
図23は、本発明の一実施形態における、ELFファイルのELFヘッダに対する難読化を探知する例を示した図である。図23において、第1ELFヘッダ2310は、難読化が適用されていないヘッダであって、セクションヘッダのサイズ2311、セクションヘッダの数2312、およびセクションのサイズ2313のような情報を含む例を示している。一方、第2ELFヘッダ2320は、難読化が適用されたヘッダであって、本来の値が操作された値2321に変更された例を示している。
このような難読化の探知のために、保安性評価システム300は、ELFヘッダの非正常値を探知することによってELFヘッダに対する難読化の適用有無を決定してよい。例えば、ELFヘッダの正常な値は、一定範囲の値を有することがあるが、難読化が適用された場合にはこのような値の範囲を逸脱することがある。
このために、保安性評価システム300は、ELFヘッダが含むセクションヘッダのサイズ、セクションヘッダの数、およびセクションのサイズのうちの少なくとも1つの項目に対する正常値の範囲を設定してよく、ELFヘッダからこのような少なくとも1つの項目の値を抽出してよく、抽出された値が設定された正常値の範囲を逸脱する場合、ELFヘッダに難読化が適用されたものと決定してよい。
例えば、図23の実施形態において、第1ELFヘッダ2310から抽出される値は正常値の範囲に含まれるはずであり、第2ELFヘッダ2320から抽出される値は正常値の範囲を逸脱するはずである。このように、保安性評価システム300は、このように抽出される値の非正常値が感知される場合、ELFヘッダに対して難読化が適用されたことを探知できるようになる。
図24は、本発明の一実施形態における、実行コードを含むセクションのヘッダに対する難読化の適用有無を決定する例を示した図である。
上述したセクションヘッダテーブル1910は、実行コードを含むセクション(.textセクション)のヘッダを含んでよい。このとき、正常な.textセクションのヘッダ2410は、実行コードのサイズ2411を含んでよく、難読化方式のうちの1つとして、正常な.textセクションのヘッダ2410が含む実行コードのサイズ2411を操作する方式が存在する。図24は、正常な.textセクションのヘッダ2410に難読化が適用されることにより、操作された値2421を含む難読化された.textセクションのヘッダ2420に変更された例を示している。
このような難読化の探知のために、保安性評価システム300は、動的リンクシンボルテーブルセクション(.dynsymセクション)に含まれるシンボルエントリーテーブル1920から、エクスポートシンボルエントリー(図24のエクスポート関数)に基づいて関数のアドレスを収集してよい。例えば、保安性評価システム300は、このようなエクスポート関数のアドレスに基づいて関数のアドレスを繰り返し収集してよく、収集されたアドレスを利用して実行コードのサイズ2411を計算してよい。このとき、保安性評価システム300は、正常な.textセクションのヘッダ2410から実行コードのサイズ2411を抽出してよく、抽出された実行コードのサイズ2411と計算された実行コードのサイズを比較することにより、正常な.textセクションのヘッダ2410には難読化が適用されていないものと決定してよい。
図24の実施形態のように、難読化された.textセクションのヘッダ2420から操作された値2421が抽出される場合には、操作された値2421は本来の実行コードのサイズ2411と差があるため、計算された実行コードのサイズとは異なるようになり、このような比較により、保安性評価システム300は、難読化された.textセクションのヘッダ2420に難読化が適用されたことを探知してよい。
図25は、本発明の一実施形態における、コードに対する難読化を探知する例を示した図である。セクションヘッダテーブル1910は、プロセス初期化のためのコードを含むセクション(.initセクションおよび/または.init_arrayセクション)のヘッダを含んでよい。図25では.initセクションのヘッダ2510と.init_arrayセクションのヘッダ2520をそれぞれ示している。また、図25は、セグメント2530を示している。セグメント2530は、ELFファイルが含むセクションをリンカーが統合することによって生成されるものであり、.initセクションのヘッダ2510および/または.init_arrayセクションのヘッダ2520は、ランタイム時に最初に実行され、セグメント2530が含むコードセグメント(Code segment)2531のコードを実行するように実現されてよい。ここで、コードセグメント2531は、読み取り−書き取り−実行(Read−Write−Execute:RWE)権限を有してよく、データセグメント2532は、読み取り−書き取り(Read−Write:RW)権限を有してよい。
このようなコードセグメント2531は、アプリケーションの駆動のための実際の実行コードを含んでいる。しかし、実行コードに対して難読化がなされた場合(一例として、実行コードのうちの少なくとも一部が暗号化された場合)、正常な方法によってコードセグメント2531のコードが実行される場合には、暗号化されたコードによって実行コードが正常に実行されることができない。
したがって、このようなコード難読化の場合には、難読化されたコードを復元するために、読み取り−書き取り−実行(Read−Write−Execute:RWE)権限を有する新たなセグメントが挿入されるようになる。図25の実施形態では、挿入されたセグメント(Inserted segment)2533に難読化されたコードを復元するための命令が追加される例を示している。このとき、ランタイム時に最初に実行される.initセクションのヘッダ2510および/または.init_arrayセクションのヘッダ2520は、コードセグメント2531ではなく、挿入されたセグメント2533をポインティングするように変更されてよい。
このような難読化を探知するための一実施形態において、保安性評価システム300は、挿入されたセグメント2533の存在を探索してよい。このとき、保安性評価システム300は、読み取り−書き取り−実行(RWE)権限を有する挿入されたセグメント2533が存在する場合、コードセグメント2531に難読化が適用されたものと決定してよい。
他の実施形態において、保安性評価システム300は、.initセクションのヘッダ2510および/または.init_arrayセクションのヘッダ2520に挿入されたセグメント2533へのポインティングが存在するかを探索してよい。このとき、保安性評価システム300は、.initセクションのヘッダ2510および/または.init_arrayセクションのヘッダ2520に挿入されたセグメント2533へのポインティングが存在する場合、コードセグメント2531に難読化が適用されたものと決定してよい。
また他の実施形態において、保安性評価システム300は、挿入されたセグメント2532を分析(一例として、ディスアセンブル)し、コードセグメント2531に含まれた難読化されたコードを復元(一例として、暗号化されたコードを復号)するためのコードが挿入されたセグメント2533に存在する場合、コードセグメント2531に難読化されたものと決定してよい。
また、保安性評価システム300は、コード自体を分析することにより、コードに対する難読化の有無を探知してもよい。
図26は、本発明の一実施形態における、コードの整合性を説明するための例示図である。保安性評価システム300は、図24を参照しながら説明したように、動的リンクシンボルテーブルセクション(.dynsymセクション)に含まれるシンボルエントリーテーブル1920からエクスポートシンボルエントリー(図24のエクスポート関数)に基づいて関数のアドレスを収集してよい。このとき、保安性評価システム300は、収集されたアドレスに基づいてそれぞれの関数が含む命令を分析してよい。
例えば、図26に示すように、命令PushとPopは、アセンブリ語において最も多く使用される命令であり、Push a、b 2610は、オペランドa、bの値をスタック(レジスタ)に格納するための命令であり、Pop a、b 2620は、スタック最上端の値を取り出してオペランドa、bに格納する動作のための命令である。したがって、保安性評価システム300は、図26に示すように、Pushされたレジスタの値がPopになっているかを探索することによってコードの整合性を分析してよい。Pushされたレジスタの値がPopになっていなければ、少なくとも一部のコードに難読化が適用されたものと判断してよい。
図26を参照しながら説明したPushとPopの他にも、命令stmfdとldmfdのペア、命令stmdbとpop.wのペアにもこのような整合性が求められる。保安性評価システム300は、このような命令stmfdとldmfdのペアと命令stmdbとpop.wのペアに対する整合性をさらに分析してもよく、命令間に整合性がない場合、少なくとも一部のコードに難読化が適用されたものと判断してよい。
また、保安性評価システム300は、存在しない(予め定義されていない)演算コード(operation code:opcode)の組合せが存在するかに応じて、少なくとも一部のコードに対する難読化の適用有無を決定してもよい。言い換えれば、難読化によって演算コードが存在しない組合せを構成するようになる場合、保安性評価システム300は、コードの難読化を探知してよい。
また、保安性評価システム300は、分岐(branch)コードの分岐位置に関する情報に基づいてコードに対する難読化の適用有無を決定してもよい。例えば、上述したように、保安性評価システム300は、関数のアドレスに関する情報に基づき関数全体に関する情報を有している。このとき、分岐コードにより、次に実行される命令の位置がこのような関数への位置ではない場合、保安性評価システム300は、コードの難読化を探知することができる。
図27は、本発明の一実施形態における、分岐位置に関する情報に基づいてコードに対する難読化の適用有無を決定する例を示した図である。図27は、関数A(2700)が含む分岐コード2710により、図25を参照しながら説明したセグメント2530のコードセグメント2531ではなく、挿入されたセグメント2533に分岐する例を示している。この場合、保安性評価システム300は、少なくとも一部のコードに難読化が適用されていることを探知してよい。
また、保安性評価システム300は、予め定義されたパターンのダミーコードが存在するかに基づき、バイナリコードに対する難読化の適用有無を決定してもよい。ダミーコードは、レジスタに影響を与えないながらもコード分析を難しくするために追加されるコードであって、一定の形式を有する。したがって、保安性評価システム300は、このようなダミーコードのパターンに関する情報を予め定義して管理してよく、管理されるパターンのコードが存在する場合にはこれをダミーコードとして判断してよく、コード難読化のためにダミーコードが追加されたことを探知してよい。
以下の表1は、ダミーコードの例を示している。
また、保安性評価システム300は、ソースコードにダミーコードを追加して難読化してもよい。このようなダミーコードは、コンパイルによってジャンクコード(junk code)に変換されてよい。
図28は、本発明の一実施形態における、ソースコードにダミーコードを追加する例を示した図である。図28は、演算コード2811を含むソースコード2810にダミーコード2821を追加することで難読化されたソースコード2820を生成し、難読化されたソースコード2820をコンパイルすることでジャンクコード2831とコンパイルされた演算コード2832を含むバイナリコード2830を生成する例を示している。
このとき、ダミーコード2821とジャンクコード2831は、一定のパターンを有するようになる。これは、ダミーコード2821がコンパイルされることのできる一定の形式を有さなければならない上に、本来の演算コード2811やコンパイルされた演算コード2832に影響を及ぼしてはいけないからである。したがって、保安性評価システム300は、このようなダミーコード2821および/またはジャンクコード2831に対するパターンを予め設定して管理してよく、ソースコードやバイナリコードから予め定義されたパターンが発見される場合、コードに対する難読化の適用を探知してよい。例えば、バイナリコードにおいて、命令ldrおよび/または命令lslsの連続的な使用がジャンクコード2831に対するパターンとして設定されることがある。この場合、保安性評価システム300は、バイナリコードを分析して命令ldrおよび/または命令lslsが繰り返し使用されるパターンを探知し、コードに対する難読化の適用を探知してよい。
図29は、本発明の一実施形態における、サーバのプロセッサが含むことのできる構成要素の第4例を示したブロック図であり、図30は、本発明の一実施形態における、サーバが実行することのできる保安性評価方法の第4例を示したフローチャートである。
本発明の実施形態に係る保安性評価システム300は、上述したサーバ150のようなコンピュータ装置の形態で実現されてよい。また、図29に示すように、サーバ150のプロセッサ222は、保安性評価システム300を実現するための構成要素として、パッケージファイル登録部2910、ELFファイル識別部2920、難読化決定部2930、保安性等級決定部2940、およびレポート部2950を備えてよい。このようなプロセッサ222およびプロセッサ222の構成要素は、図30の保安性評価方法が含む段階3010〜段階3050を実行してよい。このとき、プロセッサ222およびプロセッサ222の構成要素は、メモリ221に含まれるオペレーティングシステムのコードや少なくとも1つのプログラムのコードによる制御命令を実行するように実現されてよい。ここで、プロセッサ222の構成要素は、サーバ150に格納されたコードが提供する制御命令に従ってプロセッサ222によって実行される、プロセッサ222の互いに異なる機能の表現であってよい。例えば、プロセッサ222が上述した制御命令に従ってパッケージファイルを登録するプロセッサ222の機能的表現として、パッケージファイル登録部2910が使用されてよい。
段階3010において、パッケージファイル登録部2910は、アプリケーションのインストールおよび駆動のためのパッケージファイルを登録してよい。パッケージファイルは、アプリケーションの利用者に配布されるためにアプリケーションパブリッシャに登録されてよい。上述したように、保安性評価システム300は、アプリケーションパブリッシャが登録されるアプリケーションのパッケージファイルを配布するためのサービスを提供する装置で実現されてもよいし、上述した装置とネットワーク170を介して通信する別のシステムとして実現されてもよい。例えば、保安性評価システム300は、アプリケーションパブリッシャに登録されるパッケージファイルを、ネットワーク170を介して受信して登録してよい。このようなパッケージファイルは、上述したように、アンドロイドアプリケーションパッケージ(APK)を含んでよい。
段階3020において、ELFファイル識別部2920は、登録されたパッケージファイルが含むELFファイルを識別してよい。一例として、パッケージファイルがアンドロイドアプリケーションパッケージである場合、PEファイルはsoファイルであってよい。識別しようとするELFファイルは、図3を参照しながら説明したように、パッケージ分解モジュール310とファイル識別モジュール320によって識別されるファイルの中からファイルの拡張子に基づいて識別されてよい。
段階3030において、難読化決定部2930は、ELFファイルが含むELFヘッダ、セクションヘッダ、セクション、およびセグメントのうちの少なくとも1つに対する難読化の適用有無を決定してよい。難読化の適用有無を決定する多様な実施形態については上述したとおりであり、このような実施形態に係る難読化決定部2930のより詳しい動作については、以下で図面を参照しながらさらに詳しく説明する。
段階3040において、保安性等級決定部2940は、難読化の適用有無に基づいてELFファイルの保安性等級を決定してよい。例えば、ELFファイルに難読化が適用されているか、ELFファイルに適用された難読化の種類や程度などに応じてELFファイルの保安性等級が決定されてよい。難読化の種類は、上述した多様な実施形態を参照しながら詳しく説明したとおりであり、難読化の程度は、一例として、適用された難読化の種類の数、コードの整合性の程度などによって決定されてよい。
段階3050において、レポート部2950は、難読化の適用有無に関する情報およびELFファイルに対して決定された保安性等級に関する情報をレポートしてよい。例えば、識別されたELFファイルに対するセクションヘッダの難読化の適用有無、ストリングおよび/またはストリングテーブルに対する難読化の適用有無、シンボルテーブルに対する難読化の適用有無、コードに対する難読化の適用有無などに関する情報が、保安性評価システム300の管理者や利用者に提供されてよい。
図31は、本発明の一実施形態における、ELFヘッダに対する難読化の適用有無を決定する方法を示したフローチャートである。図31の段階3110〜段階3130は、図30の段階3030に含まれてよい。このとき、段階3110は段階3030に含まれてもよく、段階3030以前に実行されてもよい。
段階3110において、難読化決定部2930は、ELFヘッダに含まれるセクションヘッダのサイズ、セクションヘッダの数、およびセクションのサイズのうちの少なくとも1つの項目に対する正常値の範囲を設定してよい。
段階3120において、難読化決定部2930は、ELFヘッダから少なくとも1つの項目の値を抽出してよい。ELFヘッダが難読化されていなければ正常値の範囲に含まれる値が抽出されるはずであり、ELFヘッダが難読化されていれば正常値の範囲を逸脱した値が抽出されるはずである。
段階3130において、難読化決定部2930は、抽出された値が設定された正常値の範囲を逸脱する場合、ELFヘッダに難読化が適用されたものと決定してよい。言い換えれば、難読化決定部2930は、予めセクションヘッダのサイズ、セクションヘッダの数、およびセクションのサイズのうちの少なくとも1つの項目に対する正常値の範囲を設定しておいた後、ELFファイルのELFヘッダに対する難読化の適用有無を判断するために活用してよい。このようなELFヘッダに対する難読化の探知は、図23を参照しながら説明したとおりである。
図32は、本発明の一実施形態における、動的リンクシンボルテーブルセクション(.dynsymセクション)のヘッダに対する難読化の適用有無を決定する方法を示したフローチャートである。図32の段階3210および段階3220は、図30の段階3030に含まれてよい。
段階3210において、難読化決定部2930は、ELFファイルに含まれるセクションヘッダテーブルから、動的リンクシンボルテーブルセクション(.dynsymセクション)のヘッダを抽出してよい。
段階3220において、難読化決定部2930は、抽出された動的リンクシンボルテーブルセクションのヘッダを分析してセクションヘッダに対する難読化の適用有無を決定してよい。このために、難読化決定部2930は、抽出された動的リンクシンボルテーブルセクションのヘッダがヌル(null)を含むという第1条件、前記抽出された動的リンクシンボルテーブルセクションのヘッダのパース(parsing)が不可能であるという第2条件、および前記抽出された動的リンクシンボルテーブルセクションのヘッダに含まれる情報が、前記セクションのうちの動的リンク情報セクション(.dynamicセクション)に存在しないという第3条件のうちのいずれか1つの条件が満たされる場合、そのセクションヘッダに難読化が適用されたものと決定してよい。このような動的リンクシンボルテーブルセクション(.dynsymセクション)のヘッダに対する難読化の探知は、図19および図20を参照しながら説明したとおりである。
図33は、本発明の一実施形態における、実行コードを含むセクションのヘッダに対する難読化の適用有無を決定する方法を示したフローチャートである。図33の段階3310〜段階3330は、図30の段階3030に含まれてよい。
段階3310において、難読化決定部2930は、ELFファイルが含むセクションのうち、動的リンクシンボルテーブルセクション(.dynsymセクション)に含まれるエクスポートシンボルエントリーに基づいて関数のアドレスを収集してよい。例えば、難読化決定部2930は、エクスポートシンボルエントリーのアドレスをディスアセンブルして全体関数を追跡し、そのアドレスを収集してよい。
段階3320において、難読化決定部2930は、ELFファイルが含むセクションヘッダテーブルにおいて、実行コードを含むセクション(.textセクション)のヘッダから実行コードのサイズに対する値を抽出してよい。実行コードを含むセクション(.textセクション)のヘッダが操作(難読化)されているときに抽出される値は、収集されたアドレスに基づいて計算される値とは異なるはずである。
段階3330において、難読化決定部2930は、収集されたアドレスに基づいて計算される実行コードのサイズと抽出された値を比較し、実行コードを含むセクションのヘッダに対する難読化の適用有無を決定してよい。言い換えれば、計算される値と抽出される値が互いに異なる場合、実行コードを含むセクションのヘッダに対する難読化を探知するようになる。このような実行コードを含むセクションのヘッダに対する難読化の探知については、図24を参照しながら説明したとおりである。
図34は、本発明の一実施形態における、動的リンクシンボルテーブルセクションに対する難読化の適用有無を決定する方法を示したフローチャートである。図34の段階3410は、図30の段階3030に含まれてよい。
段階3410において、難読化決定部2930は、ELFファイルに含まれるセクションのうち、動的リンクシンボルテーブルセクション(.dynsymセクション)に含まれるシンボルエントリーを分析し、シンボルエントリーに含まれる名称およびアドレスのうちの少なくとも1つがヌルを含むか、またはアスキーコードで表現されていない場合、動的リンクシンボルテーブルセクションに難読化が適用されたものと決定してよい。このような難読化探知の過程については、図21を参照しながら説明したとおりである。
図35は、本発明の一実施形態における、読み取り専用セクションに対する難読化の適用有無を決定する方法を示したフローチャートである。図35の段階3510は、図30の段階3030に含まれてよい。
段階3510において、難読化決定部2930は、ELFファイルに含まれるセクションのうち、読み取り専用セクションに含まれる情報を分析し、含まれる情報がヌルを含むか、またはアスキーコードで表現されていない場合、読み取り専用セクションに対して難読化が適用されたものと決定してよい。このような読み取り専用セクションは.rdataセクションまたは.rodataセクションを含んでよく、このようなセクションに対する難読化の探知については、図22を参照しながら説明したとおりである。
図36は、本発明の一実施形態における、コードに対する難読化の適用有無を決定する方法の第1例を示したフローチャートである。図36の段階3610は、図30の段階3030に含まれてよい。
段階3610において、難読化決定部2930は、ELFファイルに含まれるセクションがリンカーによって統合されて生成されるように、予め定義されているセグメントの他に、読み取り−書き取り−実行権限を有する他のセグメントが追加されているかに応じて、予め定義されているセグメントに含まれるコードに対する難読化の適用有無を決定してよい。図25では、挿入されたセグメント2533について説明したが、このようなセグメントの挿入自体がコードに難読化が適用されていることを意味してよい。したがって、難読化決定部2930は、読み取り−書き取り−実行権限を有する他のセグメントが追加されることを、コードに難読化が適用されたことと解釈してよい。
図37は、本発明の一実施形態における、コードに対する難読化の適用有無を決定する方法の第2例を示したフローチャートである。図37の段階3710〜段階3730は、図30の段階3030に含まれてよい。
段階3710において、難読化決定部2930は、ELFファイルが含むセクションがリンカーによって統合されて生成されるように、予め定義されているセグメントの他に、読み取り−書き取り−実行(RWE)権限を有する他のセグメントの追加を確認してよい。
段階3720において、難読化決定部2930は、ELFファイルに含まれるセクションヘッダテーブルにおいて、プロセス初期化のためのコードを含むセクション(.initセクションまたは.init_arrayセクション)のヘッダを識別してよい。
段階3730において、難読化決定部2930は、識別されたセクションのヘッダで確認された他のセグメントへのポインティングが存在する場合、予め定義されているセグメントに含まれるコードに難読化が適用されたものと決定してよい。
図25で説明したように、コードが難読化される場合、難読化されたコードを復元するためのコードが求められるようになり、このようなコードを追加するためのセグメントが挿入されるようになる。また、ランタイム時に最初に実行されるプロセス初期化のためのコードを含むセクション(.initセクションまたは.init_arrayセクション)のヘッダは、難読化されたコードを復元するために、挿入されたセグメントをポインティングするようになる。したがって、難読化決定部2930は.initセクションまたは.init_arrayセクションが挿入されたセグメントのポインティングを探知し、これを予め定義されているセグメント(一例として、図25のコードセグメント2531)に含まれるコードに対する難読化として探知してよい。
図38は、本発明の一実施形態における、コードに対する難読化の適用有無を決定する方法の第3例を示したフローチャートである。図38の段階3810および段階3820は、図30の段階3030に含まれてよい。
段階3810において、難読化決定部2930は、ELFファイルに含まれるセクションがリンカーによって統合されて生成されるように、予め定義されているセグメントの他に、読み取り−書き取り−実行(RWE)権限を有する他のセグメントの追加を確認してよい。
段階3820において、難読化決定部2930は、確認された他のセグメントを分析し、アプリケーションのランタイム時に暗号化されたコードを復元するためのコードが存在する場合、予め定義されているセグメントに含まれたコードに難読化が適用されたものと決定してよい。
上述したように、コードが難読化される場合、難読化されたコードを復元するためのコードが求められるようになり、このようなコードを追加するためのセグメントが挿入されるようになる。したがって、難読化決定部2930は、このような挿入されたセグメントを分析して暗号化されたコードを復元するためのコードが存在するか確認し、このようなコードの存在を予め定義されているセグメント(一例として、図25のコードセグメント2531)に含まれたコードの難読化として探知してよい。
図39は、本発明の一実施形態における、命令を分析してコードに対する難読化の適用有無を決定する方法を示したフローチャートである。図39の段階3910および段階3920は、図30の段階3030に含まれてよい。
段階3910において、難読化決定部2930は、ELFファイルが含むセクションのうち、動的リンクシンボルテーブルセクション(.dynsymセクション)に含まれたエクスポートシンボルエントリーに基づいて関数のアドレスを収集してよい。
段階3920において、難読化決定部2930は、収集されたアドレスを利用して関数が含む命令を分析し、コードに対する難読化の適用有無を決定してよい。
このとき、難読化決定部2930は、関数に含まれる命令間の整合性、定義されていない演算コードの組合せの存在有無、分岐コードの分岐位置に関する情報、および予め定義されたパターンのダミーコードの存在有無のうちの少なくとも1つに基づき、コードに対する難読化の適用有無を決定してよい。
例えば、難読化決定部2930は、段階3920において、ELFファイルに含まれるセクションがリンカーによって統合されて生成されるように、予め定義されているセグメントの他に、読み取り−書き取り−実行(RWE)権限を有する他のセグメントの追加を確認し、関数に含まれる命令が、他のセグメントに含まれるコードに分岐する場合、コードに難読化が適用されたものと決定してよい。
図31〜図39の段階は、段階3030内でそれぞれ互いに並列的に実行されてよい。また、このような段階が互いに並列的に実行されるにあたり、同じ動作を実行する段階は重複して実行されず、1度だけ実行されてよい。例えば、関数のアドレスを収集する段階3310と段階3910は、2つのうちの1つの段階だけが実行されてもよい。
図40は、本発明の一実施形態における、登録されたパッケージファイルに含まれるPEファイルの例を示した図である。保安性評価システム300に登録されたパッケージファイルには、難読化が適用された状態のPEファイルまたは難読化が適用されていないPEファイルが含まれてよい。このとき、保安性評価システム300は、このようなパッケージファイルに含まれるPEファイルに難読化が適用されているかを決定してよい。PEファイルの構造は周知のとおりであるため、別途説明しなくても、当業者であれば容易に理解することができるであろう。一例として、登録されたパッケージファイルのPEファイルとして、アンドロイドアプリケーションパッケージ(APK)に含まれるDLLが含まれてよい。
このとき、図40の実施形態では、難読化が適用されていない第1PEファイル4010と、ファイルに含まれた全体バイナリを暗号化することで難読化が適用された第2PEファイル4020の例を示している。例えば、登録されたパッケージファイルが第2PEファイル4020を含んでいる場合、登録されたパッケージファイルは、このような第2PEファイル4020で暗号化された情報を復号するための情報が、他のファイルにさらに含まれていることがある。このとき、パッケージファイルに基づいて電子機器(一例として、電子機器1(110))にアプリケーションがインストールされて駆動される場合、第2PEファイル4020の暗号化された情報が、他のファイルに含まれる復号情報によって復号されることにより、アプリケーションが正常に実行されるようになる。
図41は、本発明の一実施形態における、全体バイナリが暗号化されたPEファイルに対する難読化の適用有無を決定する過程の例を示した図である。図40を参照しながら説明した第2PEファイル4020のように、全体バイナリが暗号化されている場合には、第2PEファイル4020から正常値(一例として、PEファイルのヘッダに常に含まれる一定の値)を抽出することができない。例えば、一般的なPEファイルのヘッダが、Dosヘッダ、Dosスタブ、PEヘッダ、およびセクションテーブルで実現されているとする。このとき、Dosヘッダは、合計64byteで構成され、最初の部分はMZというDosヘッダのシグニチュア(signature)から始まるように予め定義されている。したがって、保安性評価システム300は、Dosヘッダからシグニチュアの抽出を試した結果、予め定義されている一定の値であるMZが抽出されない場合は、該当のPEファイルが難読化されていることが分かる。また.Netヘッダでは、BSJBというシグニチュアが活用されたりもする。
このとき、図41の実施形態では、保安性評価システム300が、図40を参照しながら説明したように、第2PEファイル4020のヘッダからシグニチュアの抽出を試した例を示している。このとき、第2PEファイル4020は、全体バイナリが暗号化(または難読化)されているため、所望するシグニチュアの抽出が行われない。したがって、保安性評価システム300は、第2PEファイル4020に難読化が適用されていることを確認できるようになる。
実施形態によっては、保安性評価システム300は、互いに異なる複数のシグニチュアの抽出を試してみてもよい。このとき、抽出が試されたシグニチュアそれぞれの抽出の有無に応じて点数が付与されてよく、このような点数に基づいてPEファイルの保安性に対する危険等級が設定されてよい。この場合、点数が低いほどPEファイルの保安性は高くてよく、これとは逆に危険等級は低く設定されてよい。例えば、Dosヘッダのシグニチュアは抽出されないが、.Netヘッダのシグニチュアが抽出される場合、PEファイルの全体バイナリのうちの一部だけに暗号化(または難読化)が適用されているものと決定されてよく、このような場合、全体バイナリを暗号化(または難読化)したものよりも、保安性は相対的に低く、危険等級は高く設定されてよい。
一方、実行コードで特定のクラスや特定のメソッドのみを指定して暗号化する方式によって難読化がPEファイルに適用されてもよい。このような実行コードは、図40に示された「.text」セクションに含まれてよい。
図42は、本発明の一実施形態における、特定のクラスや特定のメソッドが暗号化されたPEファイルの例を示した図である。図42は、PEファイル4210のテキストセクション(.text)4220で特定のメソッドが暗号化されることにより暗号化されたコード4230を含む例を示している。保安性評価システム300は、このような暗号化による難読化がPEファイル4210に適用されているか分からないため、このような難読化の適用有無を決定するための過程が実施される必要がある。
保安性評価システム300は、PEファイル4210にどのようなクラスとメソッドが存在するか分からないため、優先的にPEファイル210が含むメタデータテーブルをパースして分析してよい。一例として、保安性評価システム300は.Net2.0に含まれる合計42個のメタデータテーブルのうち、「MethodDef」テーブル、「ModuleRef」テーブル、「TypeRef」テーブル、および「TypeDef」テーブルをパース/分析してクラスリストを確保してよく、クラスとメソッドをマッピングしてよい。すなわち、保安性評価システム300は、このようなメタデータテーブルを分析する過程により、PEファイル4210にはどのようなクラスが存在し、またそれぞれのクラスにどのようなメソッドが含まれているかを把握できるようになる。
したがって、保安性評価システム300は、全体メソッドを把握できるようになり、このような全体メソッドそれぞれに対して暗号化(または難読化)が適用されているかを決定することができる。このために、保安性評価システム300は、メソッドの仮想メモリにおける相手のアドレス値を意味する相対仮想アドレス(RVA:Relative Virtual Address)を求め、テキストセクション4220からメソッドの本体命令(body instruction)を抽出してよい。
このとき、保安性評価システム300は、抽出された本体命令が含む命令演算コード(opcode)の整合性を分析し、抽出された本体命令に対応するメソッドに対する難読化の適用有無を決定してよい。
ここで、命令には、1byte命令と2byte命令が存在し、このような命令をパースするための従来の方式が存在する。例えば、このような従来の方式では、メソッドのパースのために本体命令から1byteのデータを読み取り、その値が「0x00〜0xE0」の範囲に含まれる場合は、読み取った1byteのデータが1byte命令であることが分かる。その値が「0x00〜0xE0」の範囲に含まれなければ、2byteのデータを読み取り、1番目のbyteの値がOxFEであり、2番目のbyteの値が「0x00〜0x1E」の範囲に含まれるかを確認してよい。このとき、1番目のbyteの値が0xFEであり、2番目のbyteの値が「0x00〜0x1E」の範囲に含まれる場合、読み取った2byteのデータが2byte命令であることが分かる。また、従来の方式では、それぞれの命令に適合する追加演算コードを分析することにより、次の命令を求めることができた。例えば、1byteの命令であり、「int32 type」の命令であれば、次の命令は5byte(1byte+4byte(32bit))以後の位置で得られるようになる。
しかし、メソッドが暗号化されていれば、このような方式では命令を得ることはできない。したがって、保安性評価システム300は、抽出された本体命令に対して一般的なパース作業を実施し、少なくとも1つの命令に対して正常なパース作業がなされていない場合、該当のメソッドに対して難読化が適用されたことを把握できるようになる。
このとき、保安性評価システム300は、全体メソッドそれぞれに対してこのようなパース作業を実施し、全体メソッドのうちから難読化が適用されたメソッドを判断できるようになる。この場合、保安性評価システム300は、全体メソッドのうちで難読化が適用されたメソッドの割合に基づいてPEファイル4210の保安性等級を決定してよい。
図43は、本発明の一実施形態における、サーバのプロセッサが含むことのできる構成要素の第5例を示したブロック図であり、図44は、本発明の一実施形態における、サーバが実行することのできる保安性評価方法の第5例を示したフローチャートである。
本発明の実施形態に係る保安性評価システム300は、上述したサーバ150のようなコンピュータ装置の形態で実現されてよい。また、図43に示すように、サーバ150のプロセッサ222は、保安性評価システム300を実現するための構成要素として、パッケージファイル登録部4310、PEファイル識別部4320、本体命令抽出部4330、難読化決定部4340、保安性決定部4350、および情報提供部4360を備えてよい。このようなプロセッサ222およびプロセッサ222の構成要素は、図44の保安性評価方法に含まれる段階4410〜段階4460を実行してよい。このとき、プロセッサ222およびプロセッサ222の構成要素は、メモリ221に含まれるオペレーティングシステムのコードや少なくとも1つのプログラムのコードによる制御命令を実行するように実現されてよい。ここで、プロセッサ222の構成要素は、サーバ150に格納されたコードが提供する制御命令に従ってプロセッサ222によって実行される、プロセッサ222の互いに異なる機能の表現であってよい。例えば、プロセッサ222が上述した制御命令に従ってパッケージファイルを登録するプロセッサ222の機能的表現として、パッケージファイル登録部4310が使用されてよい。
段階4410において、パッケージファイル登録部4310は、アプリケーションのインストールおよび駆動のためのパッケージファイルを登録してよい。パッケージファイルは、アプリケーションの利用者に配布されるためにアプリケーションパブリッシャに登録されてよい。上述したように、保安性評価システム300は、アプリケーションパブリッシャが登録されるアプリケーションのパッケージファイルを配布するためのサービスを提供する装置で実現されてもよいし、上述した装置とネットワーク170を介して通信する別のシステムとして実現されてもよい。例えば、保安性評価システム300は、アプリケーションパブリッシャに登録されるパッケージファイルを、ネットワーク170を介して受信して登録してもよい。このようなパッケージファイルは、上述したように、アンドロイドアプリケーションパッケージ(APK)を含んでよい。
段階4420において、PEファイル識別部4320は、登録されたパッケージファイルに含まれるPEファイルを識別してよい。一例として、パッケージファイルがアンドロイドアプリケーションパッケージである場合、PEファイルはDLLファイルであってよい。識別しようとするPEファイルは、図3を参照しながら説明したように、パッケージ分解モジュール310とファイル識別モジュール320で識別されるファイルの中からファイルの拡張子に基づいて識別されてよい。
段階4430において、本体命令抽出部4330は、PEファイルが含むメタデータテーブル(Metadata Table)を利用し、PEファイルが含むテキストセクションからメソッドの本体命令を抽出してよい。上述したように、本体命令抽出部4330は、先ず、PEファイルのテキストセクションに含まれたクラスとメソッドを認識し、その後にそれぞれのメソッドのためのRVAを求め、テキストセクションから必要なメソッドの本体命令を抽出してよい。
段階4440において、難読化決定部4340は、抽出された本体命令を分析してメソッドに対する難読化の適用有無を決定してよい。上述したように、抽出された本体命令に対等するメソッドに対する難読化の適用有無は、抽出された本体命令が含む命令演算コード(opcode)の整合性を分析して決定されてよい。このような難読化の適用有無は、識別される全体メソッドに対してそれぞれ決定されてよい。
段階4450において、保安性決定部4350は、難読化の適用有無に基づき、パッケージファイルおよびPEファイルのうちの少なくとも1つに対する保安性等級を決定してよい。例えば、保安性決定部4350は、テキストセクションに含まれる全体メソッドのうち、難読化が適用されたものと決定されたメソッドの割合に基づいて保安性等級(または危険等級)を決定してよい。このとき、前記の割合が高くなるほど相対的に保安性等級は高くなってよく、これとは逆に危険等級は低くなってよい。
段階4460において、情報提供部4360は、難読化の適用有無に関する情報および決定された保安性等級に関する情報をレポートしてよい。例えば、識別されたPEファイルに対し、メソッドに対する難読化が適用されているか、全体クラスの数、難読化が適用されたクラスの数、全体メソッドの数、難読化が適用されたメソッドの数、前記の割合、保安性等級(または危険等級)のような情報が、保安性評価システム300の管理者や利用者に提供されてよい。
図45は、本発明の一実施形態における、本体命令を抽出する方法の例を示したフローチャートである。図45の段階4510〜段階4530は、図44を参照しながら説明した段階4430に含まれ、本体命令抽出部4330によって実行されてよい。
段階4510において、本体命令抽出部4330は、メタデータテーブルをパースしてクラスリストを取得してよい。一例として、上述したように、保安性評価システム300は.Net2.0に含まれる合計42個のメタデータテーブルのうち、「MethodDef」テーブル、「ModuleRef」テーブル、「TypeRef」テーブル、および「TypeDef」テーブルをパース/分析してクラスリストを確保してよく、クラスとメソッドをマッピングしてよい。このとき、PEファイルで、クラスとメソッドに関する情報がPEファイルのヘッダにメタデータテーブルの形態で含まれることは自明であり、本体命令抽出部4330は、PEファイルの形態や構造に応じてPEファイルのヘッダに含まれた情報を適切に活用しながらクラスとメソッドに関する情報を取得できることは、当業者であれば容易に理解することができるであろう。
段階4520において、本体命令抽出部4330は、クラスリストを基盤としてクラスとメソッドをマッピングしてよい。例えば、クラスAがメソッドa、メソッドb、メソッドcを含んでいる場合、本体命令抽出部4330は、このようなクラスAとメソッドa、メソッドb、メソッドcをマッピングしてよい。メソッドa、メソッドb、およびメソッドcがすべて難読化(または暗号化)されている場合、クラスAに難読化(または暗号化)が適用されたものと解釈されてよい。上述した難読化されたクラスの数は、このような解釈に基づいて決定されてよい。
段階4530において、本体命令抽出部4330は、PEファイルのヘッダをパースし、マッピングされたメソッドそれぞれの本体命令を抽出してよい。このような本体命令の抽出は、メソッドの仮想メモリにおける相手のアドレス値を意味するRVAに基づき、テキストセクションから該当のメソッドを探索することによって処理されてよい。
図46は、本発明の一実施形態における、PEファイルに対する難読化の適用有無を決定する例を示した図である。図40および図41を参照しながら、PEファイルの全体バイナリが難読化(または暗号化)された例について説明した。例えば.NetファイルのようなPEファイルは、ELFファイルとは異なり、リンカーによってロードされず、モノファイル(一例として、mono.soファイル)によってロードされるため、全体ファイルを暗号化して難読化することが可能である。図46の実施形態では、段階4610が図44を参照しながら説明した段階4420と段階4430の間に実行される実施形態を示しているが、段階4610は、段階4420以後に他の段階と並列的に実行されてもよい。また、段階4410、段階4420、および段階4610を含む他の実施形態の保安性評価方法が実現されてもよい。
段階4610において、難読化決定部4340は、PEファイルのヘッダからシグニチュアの抽出を試した結果、シグニチュアが抽出されない場合、PEファイルに対して難読化が適用されたものと決定してよい。PEファイルの全体バイナリに対して難読化(または暗号化)がなされた場合、シグニチュアは抽出されることができない。したがって、難読化決定部4340は、このようなシグニチュアの抽出可否のような簡単な方法により、PEファイルに対する難読化の適用有無を決定できるようになる。また、上述したように、予め定義されている多数のシグニチュアに対する抽出を試し、抽出されるシグニチュアそれぞれに対する点数化によって保安性等級や危険等級を設定して提供してもよい。
以上のように、本発明の実施形態によると、アプリケーションパブリッシャの観点において、登録されるアプリケーションに適用された保安水準を難読化、脆弱性、および保安ソリューションそれぞれの観点によって客観的な方法で分析および把握し、分析された情報を提供してアプリケーションの保安性向上のために活用することができる。また、アンドロイドアプリケーションパッケージ(APK)に含まれるDexファイルに対する難読化の適用有無を決定することができる。また、ELFファイルに対する難読化の適用有無を探知することができる。さらに、DLLのようなPEファイルに対する難読化の適用有無を探知することができる。
上述したシステムまたは装置は、ハードウェア構成要素、ソフトウェア構成要素、またはハードウェア構成要素とソフトウェア構成要素との組合せによって実現されてよい。例えば、実施形態で説明された装置および構成要素は、例えば、プロセッサ、コントローラ、ALU(arithmetic logic unit)、デジタル信号プロセッサ、マイクロコンピュータ、FPGA(field programmable gate array)、PLU(programmable logic unit)、マイクロプロセッサ、または命令を実行して応答することができる様々な装置のように、1つ以上の汎用コンピュータまたは特殊目的コンピュータを利用して実現されてよい。処理装置は、オペレーティングシステム(OS)および前記OS上で実行される1つ以上のソフトウェアアプリケーションを実行してよい。また、処理装置は、ソフトウェアの実行に応答し、データにアクセスし、データを格納、操作、処理、および生成してもよい。理解の便宜のために、1つの処理装置が使用されるとして説明される場合もあるが、当業者であれば、処理装置が複数個の処理要素および/または複数種類の処理要素を含んでもよいことが理解できるであろう。例えば、処理装置は、複数個のプロセッサまたは1つのプロセッサおよび1つのコントローラを含んでよい。また、並列プロセッサのような、他の処理構成も可能である。
ソフトウェアは、コンピュータプログラム、コード、命令、またはこれらのうちの1つ以上の組合せを含んでもよく、所望のとおりに動作するように処理装置を構成したり、独立的または集合的に処理装置に命令したりしてよい。ソフトウェアおよび/またはデータは、処理装置に基づいて解釈されたり、処理装置に命令またはデータを提供したりするために、いかなる種類の機械、コンポーネント、物理装置、仮想装置、コンピュータ格納媒体または装置に具現化されてよい。ソフトウェアは、ネットワークによって接続されたコンピュータシステム上に分散され、分散された状態で格納されても実行されてもよい。ソフトウェアおよびデータは、1つ以上のコンピュータ読取可能な記録媒体に格納されてよい。
実施形態に係る方法は、多様なコンピュータ手段によって実行可能なプログラム命令の形態で実現されてコンピュータ読取可能な媒体に記録されてよい。コンピュータ読取可能な媒体は、プログラム命令、データファイル、データ構造などを単独でまたは組み合わせて含んでよい。媒体に記録されるプログラム命令は、実施形態のために特別に設計されて構成されたものであってもよいし、コンピュータソフトウェアの当業者に公知な使用可能なものであってもよい。コンピュータ読取可能な記録媒体の例としては、ハードディスク、フロッピー(登録商標)ディスク、および磁気テープのような磁気媒体、CD−ROM、DVDのような光媒体、フロプティカルディスク(floptical disk)のような光磁気媒体、およびROM、RAM、フラッシュメモリなどのようなプログラム命令を格納して実行するように特別に構成されたハードウェア装置が含まれる。このような記録媒体は、単一または多数のハードウェアが結合した形態の多様な記録手段または格納手段であってよく、あるコンピュータシステムに直接に接続する媒体に限定されることはなく、ネットワーク上に分散存在するものであってもよい。プログラム命令の例は、コンパイラによって生成されるもののような機械語コードだけではなく、インタプリタなどを使用してコンピュータによって実行される高級言語コードを含む。
以上のように、実施形態を、限定された実施形態と図面に基づいて説明したが、当業者であれば、上述した記載から多様な修正および変形が可能であろう。例えば、説明された技術が、説明された方法とは異なる順序で実行されたり、かつ/あるいは、説明されたシステム、構造、装置、回路などの構成要素が、説明された方法とは異なる形態で結合されたりまたは組み合わされたり、他の構成要素または均等物によって対置されたり置換されたとしても、適切な結果を達成することができる。
したがって、異なる実施形態であっても、特許請求の範囲と均等なものであれば、添付される特許請求の範囲に属する。