JPWO2006009081A1 - アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法 - Google Patents

アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法 Download PDF

Info

Publication number
JPWO2006009081A1
JPWO2006009081A1 JP2006529155A JP2006529155A JPWO2006009081A1 JP WO2006009081 A1 JPWO2006009081 A1 JP WO2006009081A1 JP 2006529155 A JP2006529155 A JP 2006529155A JP 2006529155 A JP2006529155 A JP 2006529155A JP WO2006009081 A1 JPWO2006009081 A1 JP WO2006009081A1
Authority
JP
Japan
Prior art keywords
class
meta information
application
java
instruction
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.)
Withdrawn
Application number
JP2006529155A
Other languages
English (en)
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.)
Panasonic Corp
Panasonic Holdings Corp
Original Assignee
Panasonic Corp
Matsushita Electric Industrial Co Ltd
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 Panasonic Corp, Matsushita Electric Industrial Co Ltd filed Critical Panasonic Corp
Publication of JPWO2006009081A1 publication Critical patent/JPWO2006009081A1/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

従来のアプリケーション保護技術では、アプリケーションを複雑化することで、アプリケーションの解析を困難にしていた。しかし、この方法ではアプリケーションをどれだけ複雑化しても、時間をかけることで解析が可能であった。また、アプリケーションそのものを不正コピーから防ぐことはできない。安全な実行部で動作するメタ情報管理部は、アプリケーションのメタ情報をデバッガからアクセスすることができない領域へ記憶させ、通常の実行部でアプリケーション実行時のためメタ情報が必要になった時に、メタ情報を使い所定の計算をした結果を通常の実行部へ通知することで、アプリケーションのメタ情報を秘匿する。

Description

本発明は、アプリケーションプログラム(特にJava(登録商標)言語で記述されたプログラム)を実行するアプリケーション実行装置に関し、インターネットやDVD等の外部のメディアからダウンロードしたアプリケーションを実行する時に、アプリケーションが不正に盗聴、改竄されることを防止する技術に関する。
従来のデジタルTVや携帯電話などの電子機器では、Java(登録商標)言語で記述されたアプリケーションプログラムをダウンロードし、実行する機能を搭載するものが増加している。たとえば携帯電話では、NTT DoCoMoがiアプリ(登録商標)と呼ばれるサービスを提供している。このサービスは、携帯電話端末がインターネット上にあるアプリケーション配信サーバからJava(登録商標)プログラムをダウンロードして、端末上で実行する。
また、欧州では、DVB−MHP(Digital Video Broadcasting−Multimedia Home Platform)と呼ばれる仕様が策定され、既に仕様に準拠した運用が開始されている。DVB−MHP規格に基づくデジタル放送では、放送波に多重化されJava(登録商標)プログラムをデジタルTVが受信し、それを実行する。
このようなアプリケーションプログラム配信サービスにおいて、配信されるアプリケーションプログラムはそのアプリケーションプログラムの開発者の知的財産権で保護されており、これを悪意のある攻撃者が盗聴することは防がなくてはならない。また、悪意のある攻撃者により改ざんされたアプリケーションプログラムが、利用者やアプリ製作者の意図しない動作をすることを防がなくてはならない。
近年の電子機器は、多数のソフトウエアモジュールから構成されている。専門的な知識を有する者であれば、これらのソフトウエアモジュールのバグを悪用することで電子機器内のソフトウエアを改ざんすることも可能である。また、デバッガやICE(In−Circuit Emulator)等のツールを用いることでも同様のことは実現可能である。そのため、たとえばJava(登録商標)プログラムに著作権管理機能や課金機能が含まれる場合には、これらの機能を無効化できてしまうという問題が発生する。今後、インターネット等を利用したJava(登録商標)アプリケーションプログラムの配信ビジネスが本格化するに従い、このようなアプリケーションプログラムの盗聴、改ざんの問題が深刻化すると予想される。
従来、ソフトウエアモジュールのバグの悪用や、デバッガ、ICEなどのツールによってメモリ上のプログラムを解析、改ざんすることを防ぐために、元のプログラムに対し、複雑化と暗号化という方法が用いられている。
複雑化とは、処理の分割、出現順序の交換、条件の挿入などの処理を施すことにより、元のプログラムと動作は同じであるが、より複雑なプログラムへと変換し、プログラム自体を複雑にするという手法であり、暗号化とは、プログラムを暗号化しておき、実行時にだけ復号する方法である。
特表2002−514333
しかし、複雑化の方法は、どれだけ複雑な変換を施したとしても、時間をかけて解析することでいつかは解析されてしまう。プログラムの金銭的価値が高くなれば、いかに複雑なプログラムであってもそれを解析するためのコストを負担する者が現れるのは必然である。
また、暗号化の方法は、プログラムの実行中は復号されているので、その間に解析、盗聴されてしまう可能性がある。
本発明は、上記の問題を解決するもので、ソフトウエアモジュールのバグの悪用や、専門的なツールによるアプリケーションプログラムの盗聴、改ざんを防止するアプリケーション実行装置を提供することを目的とする。
上記課題を解決するため、本発明は、取得したアプリケーションをクラス単位で実行するアプリケーション実行装置であって、クラスファイルに含まれるメタ情報を記憶するメタ情報記憶手段と、クラスファイルに含まれる命令列を記憶する命令列記憶手段と、参照すべき情報のない命令を実行し、参照すべき第1情報があるとき要求し、通知された第2情報を用いて命令を実行する命令実行手段と、前記命令実行手段の要求に応じて前記メタ情報から第2情報を生成し、前記命令実行手段に通知するメタ情報実行手段とを備え、前記メタ情報記憶手段に記憶されたメタ情報は、前記メタ情報実行手段だけが読み出すことができ、前記メタ情報実行手段は、前記命令実行手段の要求だけを受け付けることとしている。
上記構成により、アプリケーションの命令を実行する命令実行手段は、参照すべき情報があるとき、メタ情報実行手段に指示して、必要とする第2情報が通知されるので、例えばデバッガを用いて命令実行手段を盗聴したとしても、メタ情報記憶手段に記憶されているメタ情報そのものは見ることが出来ない。したがって、命令実行手段で命令列が盗聴、改ざんされたとしても、アプリケーションの解析は困難であり、盗聴、改ざんを防止することができる。
また、前記メタ情報記憶手段は、インデックスとコンスタントプールの型とその値とを記載したコンスタントプールと、項目とその値とを記載したクラス構造情報とを記憶し、前記命令列記憶手段は、クラスで定義されているメソッドのバイトコードを記憶し、前記メタ情報実行手段は、前記命令実行手段がバイトコードに第1情報であるコンスタントプールのインテックスが指定されている命令を実行するとき、その命令の種類に応じて前記コンスタントプールとクラス構造情報とを参照して第2情報を生成することとしている。
これにより、アプリケーションの実行時においても、アプリケーションが不正に解析、改ざんされることを防ぐことができ、保護強度が向上する。
また、前記命令実行手段が実行するバイトコードが新しいオブジェクトの生成であるとき、前記メタ情報実行手段は、指定されたインデックスに対応するコンスタントプールの型を前記コンスタントプールから検索し、前記クラス構造情報を参照して、メモリサイズを生成することとしている。
これにより、命令実行手段はオブジェクトのサイズを得るが、オブジェクトのサイズの計算の元になった、当該クラスが宣言するメタ情報のフィールドの数と型記述子は命令実行手段には見えない。
また、前記命令実行手段が実行するバイトコードがメソッドの呼び出しであるとき、前記メタ情報実行手段は、指定されたインデックスに対応するコンスタントプールの型を前記コンスタントプールから検索し、前記クラス構造情報を参照して前記メソッドのアドレスを生成することとしている。
これにより、命令実行手段はメソッドのアドレスを得るが、当該アドレスを得るのに必要なメタ情報は命令実行手段には見えない。
また、前記命令実行手段が実行するバイトコードがオブジェクトのフィールド参照であるとき、前記メタ情報実行手段は、指定されたインデックスに対応するコンスタントプールの型を前記コンスタントプールから検索し、前記クラス構造情報を参照して、前記フィールドのアドレスを生成することとしている。
これにより、命令実行手段はフィールドのアドレスを得るが、当該アドレスを得るのに必要なメタ情報は命令実行手段には見えない。
また、前記取得されたアプリケーションは暗号化されており、前記暗号化されたアプリケーションを復号し、復号された命令列を前記命令列記憶手段に記憶させ、復号されたメタ情報を前記メタ情報記憶手段に記憶させる復号手段を更に備えることとしている。
これにより、アプリケーションの復号時においてもアプリケーションのメタ情報を保護することができ、より保護強度が向上する。
また、前記復号手段は、外部から直接アクセスできない鍵記憶手段に記憶された復号鍵を用いて前記アプリケーションを復号することとしている。
これにより、アプリケーションが不正に復号され、解析、改ざんされることを防ぐことができ、保護強度が向上する。
また、前記アプリケーションは、Java(登録商標)アプリケーションであることとしている。
これにより、Java(登録商標)アプリケーションが不正に盗聴、改ざんされることを防ぐことができる。
また、本発明は、取得したアプリケーションをクラス単位で実行するアプリケーション実行装置のアプリケーション実行方法であって、クラスファイルに含まれるメタ情報を記録するメタ情報記録ステップと、クラスファイルに含まれる命令列を記録する命令列記録ステップと、参照すべき情報のない命令を実行し、参照すべき第1情報があるとき要求し、通知された第2情報を用いて命令を実行する命令実行ステップと、前記命令実行ステップの要求に応じて前記メタ情報から第2情報を生成し、前記命令実行ステップに通知するメタ情報実行ステップとを有し、前記メタ情報記録ステップに記録されたメタ情報は、前記メタ情報実行ステップだけが読み出すことができ、前記メタ情報実行ステップは、前記命令実行ステップの要求だけを受け付けることとしている。
上記方法により、デバッガ等のツールによりアプリケーション実行時に、アプリケーションの命令がメモリ上で盗聴、改ざんされたとしても、デバッガ等からはアプリケーションのメタ情報にはアクセスできないので、アプリケーションとしての解析を困難にし、盗聴、改ざんを防止することができる。
本発明に係るアプリケーション実行装置の実施の形態1の構成図である。 上記実施の形態のJava(登録商標)仮想マシンの構成を示す図である。 上記実施の形態のJava(登録商標)クラスファイルの構造図である。 上記実施の形態の第1ROMに記憶されている情報の一例の構成図である。 上記実施の形態のアプリ取得プログラムの構成の一例の構造図である。 上記実施の形態のメタ情報の処理手順を示すフローチャートである。 上記実施の形態の第2ROMに記憶されている情報の一例の構成図である。 上記実施の形態のJava(登録商標)仮想マシンをロードする処理手順を示すフローチャートである。 上記実施の形態の復号の処理手順を示すフローチャートである。 上記実施の形態のクラスをロードする処理手順を示すフローチャートである。 上記実施の形態のJava(登録商標)クラスの一例を示す図である。 上記実施の形態のコンスタントプールの一例を示す図である。 上記実施の形態のクラス構造情報の一例を示す図である。 上記実施の形態のバイトコードの一例を示す図である。 上記実施の形態のバイトコードのnew命令の処理手順を示すフローチャートである。 上記実施の形態のクラスID対応テーブルの一例を表す図である。 上記実施の形態のクラスID対応テーブルの別の一例を表す図である。 上記実施の形態のinvokespecial命令を実行する際のバイトコードインタプリタおよびメタ情報管理部のフローチャートである。 上記実施の形態のgetfield命令を実行する際のバイトコードインタプリタおよびメタ情報管理部のフローチャートである。 本発明に係るアプリケーション実行装置の実施の形態2の構成図である。 上記実施の形態の仮想マシンの構成を示す図である。 上記実施の形態の第1ROMに記憶されている情報の一例を示す図である。 上記実施の形態のJava(登録商標)仮想マシンをロードする処理手順を示すフローチャートである。
符号の説明
100,2000 ダウンロード可能なプログラム
110,2010 アプリケーション実行装置
120,2020 通常実行部
121,2021 アプリ取得プログラム
122 Java(登録商標)仮想マシン
123,2023 OS
124,2024 第1CPU
125,2025 第1RAM
126,2026 第1ROM
130,2030 安全な実行部
131,2031 メタ情報管理部
132,2033 Java(登録商標)仮想マシンローダ
133,2034 復号処理部
134,2035 第2CPU
135,2036 第2RAM
136,2037 第2ROM
201,2101 バイトコードインタプリタ
202,2106 クラスローダ
203,2107 ベリファイヤ
204,2103 Java(登録商標)ヒープ管理部
205,2104 Java(登録商標)ネイティライブラリ
206,2105 JITコンパイラ
300 クラスファイル
301 クラス構造情報
302 コンスタントプール
303 バイトコード
401 暗号化されたJava(登録商標)仮想マシン
402 暗号化されたアプリ取得プログラム
403 暗号化されたメタ情報管理部
404 起動クラス名
501 暗号化されたサブクラス
701 復号鍵
1100 Java(登録商標)言語によるクラス定義ファイル
1600 クラスID対応テーブル(例1)
1700 クラスID対応テーブル(例2)
2022 第1Java(登録商標)仮想マシン
2032 第2Java(登録商標)仮想マシン
本発明に係るアプリケーション実行装置の実施の形態を、図面を参照しながら説明する。
(実施の形態1)
図1は、本発明に係るアプリケーション実行装置の実施の形態1の構成図である。
ダウンロード可能なアプリケーションプログラム(以下、単に「アプリケーション」という)100は、アプリケーション実行装置110からダウンロード可能なアプリケーションであり、本実施の形態においては、コンパイルされ、暗号化されたJava(登録商標)アプリケーションである。
アプリケーション実行装置110は、通常実行部120と安全な実行部130とを備え、仮想線140の上方のソフトウェアと下方のハードウェアとで構成される。アプリケーション実行装置110は、たとえばデジタルテレビ、セットトップボックス、DVDレコーダー、Blu−ray Disc(BD)レコーダー、カーナビ端末、携帯電話、PDAなどの、Java(登録商標)仮想マシンを搭載する電子機器あるいは端末に摘用される。
通常実行部120は、ソフトウェアとして、アプリ取得プログラム121、Java(登録商標)仮想マシン122、OS123と、ハードウェアとして、第1CPU124、第1RAM125、第1ROM126とから構成される。ここで、アプリ取得プログラム121、Java(登録商標)仮想マシン122、OS123の並び順は、ソフトウェアの階層構成の上層からの順を示し、これらのソフトウェアは第1CPU124で動作する。
通常実行部120は、たとえば通常のパーソナルコンピュータやデジタル家電機器等に搭載されているプログラム実行手段と同様のものである。なお、請求の範囲では、通常実行部120は、命令実行手段及び命令列記憶手段で構成される。
安全な実行部130は、ソフトウェアとして、メタ情報管理部131、Java(登録商標)仮想マシンローダ132、復号処理部133と、ハードウェアとして、第2CPU134、第2RAM135、第2ROM136とから構成される。ここで、メタ情報管理部131、Java(登録商標)仮想マシンローダ132、復号処理部133の各ソフトウェアは、第2CPU124で動作する。
安全な実行部130は、悪意のある第三者からの攻撃を防御しつつ、安全にプログラムを実行させることができる。即ち、安全な実行部130は、外部の装置から直接アクセスされることが禁止され、第1CPU124からの指示に応じて、第2CPU134は必要な情報を第1CPU124に通知する。なお、請求の範囲では、安全な実行部130は、メタ情報実行手段及びメタ情報記憶手段並びに復号手段で構成される。
先ず、通常実行部120の各構成要素について説明する。
アプリ取得プログラム121は、アプリケーション100をアプリケーション実行装置110の外部から取得し、第1RAM125に記憶させる。アプリ取得プログラム121は、たとえば、インターネット上にあるサーバから、TLS(Transport Layer Security)、HTTP(Hyper Text Transfer Protocol)等のプロトコルに従いJava(登録商標)アプリケーション100(暗号化され、クラスファイル形式)をダウンロードするJava(登録商標)プログラムが相当する。
ここで、TLSは暗号化により通信時のデータの盗聴、改ざんを防ぐデータ転送方式である。TLSの詳細はRFC2246に記載されており、ここでは詳細な説明を省略する。
また、HTTPは、インターネット上のデータ通信で一般的に用いられているデータ転送方式である。HTTPの詳細はRFC2616に記載されており、ここでは詳細な説明を省略する。
なお、アプリ取得プログラム121は、デジタル放送のデータ放送として、MPEG2トランスポートストリーム内に埋め込まれたJava(登録商標)アプリケーションをアプリケーション実行装置110に読み出すJava(登録商標)プログラムであってもよい。MPEG2トランスポートストリームの詳細はMPEG規格書ISO/IEC138181−1に記載されているので、その説明を省略する。MPEG2トランスポートストリームにJava(登録商標)プログラムを埋め込む方法は、DSMCC方式として、MPEG規格書ISO/IEC138181−6に記述されている。ここではDSMCCの詳細な説明は省略する。DSMCC方式は、MPEG2トランスポートストリームのパケットの中に、コンピュータで使用されているディレクトリやファイルで構成されるファイルシステムをエンコードする方法を規定している。
また、アプリ取得プログラム121は、SDカード、CD−ROM、DVD、BD−ROM等のリムーバブルメディアに記録されたJava(登録商標)アプリケーションを、第1RAM125に書き込むJava(登録商標)プログラムであってもよい。アプリ取得プログラム121はOS123が提供するファイル操作機能を用いて、これらのリムーバブルメディアに記録されたJava(登録商標)アプリケーションを読み出す。
また、アプリ取得プログラム121は、アプリケーション実行装置110内にある第1ROMに記録されたJava(登録商標)アプリケーションを、第1RAM125に書き込むJava(登録商標)プログラムであってもよい。アプリ取得プログラム121はOS123が提供するファイル操作機能を用いて、第1ROM126に記録されたJava(登録商標)アプリケーションを読み出す。
なお、本実施の形態ではアプリ取得プログラム121は、Java(登録商標)言語で記述されたJava(登録商標)プログラムとしているが、同等の機能を有する、ネイティブ(実行装置固有)言語で記述されたプログラムで実現されていてもよい。
Java(登録商標)仮想マシン122は、Java(登録商標)言語で記述されたプログラムを逐次解析し実行するJava(登録商標)バーチャル(仮想)マシンである。Java(登録商標)言語で記述されたプログラムはバイトコードと呼ばれる、ハードウエアに依存しない中間コードの命令列(オペレーション)にコンパイルされる。Java(登録商標)仮想マシン122は、このバイトコードを解釈、実行するソフトウエアで実現される。また、一部のJava(登録商標)仮想マシン122は、バイトコードを第1CPU124が実行可能な実行形式に翻訳するJIT(Just In Time)コンパイラと呼ばれる機能を持つものもある。また、一部のJava(登録商標)仮想マシン122は、一部のバイトコードを直接実行可能なプロセッサと、プロセッサでは直接実行できないバイトコードを実行するインタプリタから構成されることもある。なお、Java(登録商標)言語の詳細は、書籍「Java(登録商標)Language Specification(ISBN 0−201−63451−1)」等の多くの書籍で解説されているので、ここでは、その詳細を省略する。
Java(登録商標)仮想マシン122は、複数のサブプログラムから構成される。
図2は、Java(登録商標)仮想マシン122を構成するサブプログラムの一例である。
Java(登録商標)仮想マシン122は、図2に示すように、バイトコードインタプリタ201、クラスローダ202、ベリファイヤ203、Java(登録商標)ヒープ管理部204、Java(登録商標)ネイティブライブラリ205、JITコンパイラ206で構成されている。
バイトコードインタプリタ201は、クラスファイルに含まれるバイトコードを解釈、実行するサブプログラムで、Java(登録商標)仮想マシン122において中核的な処理を行うサブプログラムである。詳細ついては後述する。
クラスローダ202は、アプリ取得プログラム121が取得したJava(登録商標)アプリケーション100を、第1RAM125から読み出し、Java(登録商標)仮想マシン122が実行できるアプリケーションに変換して再度第1RAM125に書き込み、クラスを実行可能な状態にする。また、クラスローダ202は、クラスアンロード処理も行う。クラスアンロード処理とは、実行が終了し不要になったクラスをJava(登録商標)仮想マシン122から取り除く処理のことである。
ここで、クラスとは、Java(登録商標)アプリケーションを構成する基本単位であり、書籍「Java(登録商標)Virtual Machine Specification(ISBN 0−201−63451−)」で定義されている。
図3は、クラスに含まれる情報の概要を示した図である。
「Java(登録商標)Virtual Machine Specification」での規定では、クラスは図3に示されていない情報もあるが、ここでは説明の簡単化のため本発明に関連のある項目のみ説明する。
クラス構造情報301は、このクラスが保持するフィールド、メソッド、どのクラスを継承するかなど、クラスの構造に関する情報を含んでいる。
コンスタントプール302は、アプリケーション(クラス)で定義されている定数(コンスタント)に関するデータをまとめた情報であり、クラスで定義しているまたはこのクラスから参照している他クラスのフィールド、メソッド、クラスの名前などの情報を含んでいる。クラス構造情報301とコンスタントプール302とを総称してクラスのメタ情報(または、単にメタ情報)と呼ぶ。
バイトコード303は、そのクラスにおいて実行されるメソッドの処理を、中間言語の命令の列として記述したものである。バイトコード303にはアプリケーションが処理するデータに関する情報は含まれない。したがって、Java(登録商標)アプリケーションの実行においては、バイトコード303だけでは一般的に実行処理ができず、データ部分を定義したコンスタントプール302があって始めて実行処理が可能となる。クラスに含まれる上記の各情報の例については、後述する。
図2に戻って、ベリファイヤ203は、クラスのデータ形式の不備や、クラスに含まれるバイトコードの安全性を判定する。バイトコードの安全性の検査方法は、Java(登録商標)Virtual Machine Specificationで定義されているため詳細な説明は省略する。
ベリファイヤ203が妥当ではないと判定されたクラスは、クラスローダ202はロードをしない。
Java(登録商標)ヒープ管理部204は、Java(登録商標)ヒープと呼ばれる、Java(登録商標)アプリケーションが使用するワーキングメモリの確保を行う。Java(登録商標)ヒープは第1RAM125内に確保される。また、Java(登録商標)ヒープ管理部204は、ガーベジコレクションも行う。ここで、ガーベジコレクションとは、アプリケーション実行において不要になったワーキングメモリを開放し、他の用途に再利用できるようにする公知の技術をいい、詳細な説明は省略する。
Java(登録商標)ネイティブライブラリ205は、Java(登録商標)アプリケーションから呼び出されるライブラリで、OS123や、アプリケーション実行装置110が備える図1には記載されていないハードウエア、サブプログラム等で提供される機能を、Java(登録商標)アプリケーションへ提供する。
JITコンパイラ206は、バイトコード303を第1CPU124もしくは第2CPU134が理解可能な実行形式に翻訳する。
以上で、図2に基づく、Java(登録商標)仮想マシン122の概略の説明を終わる。
再び図1に戻って、OS123は、アプリケーション実行装置110の電源が投入されると第1CPU124が起動する基本ソフトウェアである。OS123は、オペレーティングシステムの略であり、Linuxが一例である。OS123は、プログラムを平行して実行するカーネル及び、ライブラリで構成される公知の技術の総称であり、詳細な説明は省略する。OS123はJava(登録商標)仮想マシン122をサブプログラムとして実行する。
第1CPU124は、Java(登録商標)仮想マシン122、OS123、アプリケーション取得プログラム121、アプリケーション取得プログラム121の実行で取得されたアプリケーション100の各プログラムに従い処理を実行する。
第1RAM125は、アプリケーション取得プログラム121の実行で取得されたアプリケーションプログラムをクラスファイルとして記憶し、復号されたJava(登録商標)仮想マシン122を記憶する。また、第1CPU124が処理を行う際、一時的にデータを保存する。また、第1CPU124から第2CPU134に実行を依頼するときの、両CPU間のデータの受け渡しに使用される。第1RAM125は、たとえば、SRAM、DRAM等の一次記憶からなる。
第1ROM126は、暗号化されたJava(登録商標)仮想マシン401などを記憶する。第1CPU124から指示されたデータやプログラムを記憶する。第1ROM126は、具体的にはフラッシュメモリやハードディスク等の不揮発性メモリからなる。
図4は、第1ROM126が記憶している内容の一例を示す図である。
第1ROM126は、暗号化されたJava(登録商標)仮想マシン401、暗号化されたアプリ取得プログラム402、暗号化されたメタ情報管理部403、起動クラス名404を含む。
図5は、アプリ取得プログラム402の構成を示す図である。
アプリ取得プログラム402は、サブクラス501〜503などの複数のクラスから構成される。各サブクラスは暗号化されている。
起動クラス名404は、Java(登録商標)仮想マシン122が起動した際に最初に実行するプログラムであるクラスの名前である。本実施の形態では暗号化起動クラス名404にはサブクラス501が指定されているものとする。なお、第1ROM126は図4に示した以外のデータを記憶していてもよい。
次に、安全な実行部130の各構成要素について説明する。
メタ情報管理部131は、Java(登録商標)仮想マシン122にロードされているクラスに含まれるメタ情報を管理し、バイトコードインタプリタ201の要求によりその情報を参照処理し、その結果を提供するプログラムである。メタ情報管理部131については後に詳細に説明をする。
Java(登録商標)仮想マシンローダ132は、アプリケーション実行装置110の電源投入後に、第1CPU124がJava(登録商標)仮想マシン122を実行可能な状態にするための処理を行う。Java(登録商標)仮想マシンローダ132については後に詳細に説明をする。
復号処理部133は、第1RAM125もしくは第1ROM126が記憶する暗号化された情報(アプリケーション、Java(登録商標)仮想マシン122等)を復号し、第1RAM125へ復号結果を書き出すプログラムである。暗号化のためのアルゴリズムは任意の暗号アルゴリズムを用いることが可能である。
上記の復号のための鍵は、第2ROM136に記憶されている復号鍵701を使用する。
第2CPU134は、メタ情報管理部131、Java(登録商標)仮想マシンローダ132、復号処理部133の各プログラムに従い処理を実行する。
第2RAM135は、後述のクラス構造情報301、コンスタントプール302およびクラスID対応テーブルを記憶する。また、第2CPU134が処理を行う際、一時的にデータを保存するために使用される。
第2RAM135は、たとえば、DRAMやSRAM等で構成され第2CPU134からのみアクセスが可能であり、第1CPU124から第2RAM135に記憶された情報を読むことも書くこともできない。なお、第2RAM135はCPU134に混載されていてもよい。
通常実行部120で動作するプログラム、たとえばJava(登録商標)仮想マシン122と安全な実行部130で動作するプログラム、たとえばメタ情報管理部131は、共同して動作するため、両者の間で情報の交換が必要となる。
図6は、Java(登録商標)仮想マシン122が、たとえばメタ情報管理部131に処理を指示するときのフローチャートである。
図6において、Java(登録商標)仮想マシン122は、メタ情報管理部131に渡す情報を、第1RAM125の所定のアドレスへ記憶させる(S601)。次に、Java(登録商標)仮想マシン122は、第1CPU124を通じて第2CPU134へ、メタ情報管理部131の実行を指示する(S602)。メタ情報管理部131は、第1RAM125の所定のアドレスから、Java(登録商標)仮想マシン122がS601で記憶されたデータを読み出し(S603)、そのデータを用いて所定の処理を行う(S604)。
次に、メタ情報管理部131は、S604で得られた処理結果を第1RAM125の所定のアドレスへ書きこむ(S605)。次に、メタ情報管理部131は、第2CPU134を通じて第1CPU124へJava(登録商標)仮想マシン122の実行を指示する(S606)。次に、Java(登録商標)仮想マシン122は第1RAM125の所定のアドレスから、メタ情報管理部131がS604で行なった処理の結果を読みだす。
以上のように実行することで、第1CPU124からは直接参照することができない情報に基づく処理を、安全な実行部130内で動作するプログラムに指示して情報を受け渡しできる。
第2ROM136は、読み出し専用の不揮発性メモリからなり、第2CPU134以外からは第2ROM136が記憶する情報を読みだすことが出来ないことを保証する。
図7は、第2ROM136が記憶する情報の一例を示す図である。
図7の第2ROM136には、第1ROM126が記憶するJava(登録商標)仮想マシン401,アプリ取得プログラム402に含まれるサブクラス501〜503を復号するための復号鍵701を記憶している。本実施の形態では、Java(登録商標)仮想マシン401、アプリ取得プログラム402、起動クラス名404を復号する鍵は、復号鍵701一つのみとしているが、それぞれに別々の鍵を用いても本発明は実施可能である。なお、第2ROM136は図7に示されていない別のデータを記憶していてもよい。
また、復号鍵701は、アプリ取得プログラム121で取得された暗号化されたアプリケーション100の復号のための暗号化された復号鍵を復号するために用いられる。アプリケーション100の復号された復号鍵も第2ROM136に記憶される。
なお、本実施の形態では、アプリケーション実行装置110は二つのCPUを備えているが、一つのCPUが動作モードを切り替えるなどの方法で仮想的に二つのCPUのように振舞ってもよい。動作モードを変えることが可能なCPUには、たとえばIntel社のLaGrandeがある。このCPUは通常モードとセキュアモードと呼ばれる2つの動作モードを持つ。通常モード側で動作するプログラムからは、セキュアモード上で動くプログラムを盗聴、改ざんすることができないように構成されている。同様の機能を持ったCPUはARM社やAMD社からも発表されている。
なお、本実施の形態では、メタ情報管理部131、Java(登録商標)仮想マシンローダ132、復号処理部133は第2CPU134で実行されるプログラムとしているが、LSIでこれらの機能を実現してもよい。
また、第1RAM125、第2RAM135は、一つのRAMを仮想的に2つのRAMとして扱ったものとしてもよく、また、第1ROM126、第2ROM136は一つのROMを仮想的に2つのROMとして扱ったものとしてもよい。
また、安全な実行部130全体、もしくは一部をハードウエアにより実現してもよい。この場合、第1CPU124と第2CPU134間のデータ通信は暗号化して行い、第三者による盗聴を防ぐ。これは両CPUを結ぶデータバス(図示されていない)にデータを送信する際に暗号化し、データを受信後に復号することで行われる。
また、安全な実行部130は、スマートカードやICカードのように、アプリケーション実行装置110から取り外し可能な装置であってもよい。スマートカード、ICカードはカード内部にCPUやメモリ、セキュリティ回路を含む公知の技術であり、詳細な説明を省略する。この場合、通常実行部120と安全な実行部130間のデータ転送は、SAC(Secure Authenticated Channel)等の技術を用いて、第三者による盗聴を防ぎながら行うようにする。SACはICカードと外部機器の相互認証、および暗号鍵の共有を安全に行うための公知の技術である。
また、安全な実行部130のソフトウェアは、耐タンパソフトウエア技術により保護されたソフトウエアであってもよい。
次に、アプリケーション実行装置110がJava(登録商標)アプリケーションを盗聴、改ざんから保護しながら実行する方法について説明する。
Java(登録商標)アプリケーション実行装置110の電源が投入されると、第1CPU124は、OS123を起動する。OS123は起動後、第1CPU124を通じて第2CPU134に対し、Java(登録商標)仮想マシンローダ132をロードするよう指示する。第2CPU134によって起動されたJava(登録商標)仮想マシンローダ132は、一定の手順でJava(登録商標)仮想マシン122を第1RAM125へ、メタ情報管理部131を第2RAM135へロードする。
図8は、Java(登録商標)仮想マシン122およびメタ情報管理部131をロードする手順を示した図である。
図8において、S801で、Java(登録商標)仮想マシンローダ132は復号処理部133を使い、第1ROM126に記憶されたJava(登録商標)仮想マシン401を第1RAM125へ復号する。
図9は、復号処理部133が、暗号化されたJava(登録商標)仮想マシン401を復号する際の処理手順を示す図である。
図9において、復号処理部133は、第1ROM126が記憶する暗号化されたJava(登録商標)仮想マシン401を、第2CPU133を通じて読み出す(S901)。
復号処理部133は、第2ROM136から復号鍵701を取得し(S902)、Java(登録商標)仮想マシン401の復号結果の出力先を判定する。(S903)出力先が第1RAMのとき、復号されたJava(登録商標)仮想マシン122を、第2CPU134を通じて第1RAM125に(S904)、また、出力先が第2RAMのとき、第2RAM135に記憶させる(S905)。
図8に戻って、Java(登録商標)仮想マシンローダ132は、復号処理部133に指示して、第1ROM126に記憶されたメタ情報管理部404を、第2RAM135へ復号する(S802)。Java(登録商標)仮想マシンローダ132は、OS123へロードの完了を通知する。(S803)
OS123は、Java(登録商標)仮想マシンローダ132からロード完了通知を受け、Java(登録商標)仮想マシン122の実行を開始する。Java(登録商標)仮想マシン122の実行が開始されると、クラスローダ202が呼び出され、クラスローダ202は、図4で示す第1ROM126に記憶されている起動クラス名404を参照し、起動クラス名404で指定されたクラスをロードする。
図10は、起動クラス名404として、図5のアプリ取得プログラム402のサブクラス501が指定されていたときを例に、クラスローダ202がサブクラス501をロードする処理手順を示したフローチャートである。
まず、クラスローダ202は、復号処理部133に指示し、第1ROM126に記憶されている暗号化されたサブクラス501の復号処理を行わせる(S1001)。次に、ベリファイヤ203に指示し、第1RAM125の復号されたサブクラスをベリファイさせる(S1002)。クラスローダ202は、第1RAM125の復号されたサブクラスからメタ情報(クラス構造情報301、コンスタントプール302)を抽出し(S1003)、抽出後はサブクラスからメタ情報を削除して、当該メタ情報を第1RAM125に書き出し、メタ情報管理部131を呼び出す(S1004)。メタ情報管理部131は、第1RAM125からメタ情報を読み取り、第2RAM135へコピーする。クラスローダ202は、メタ情報管理部131によるメタ情報のコピーが終わると、第1RAM125から当該メタ情報を削除する(S1005)。
以上のようにして、クラスローダ202は、アプリ取得プログラムだけではなく、アプリ取得プログラム121で取得されたアプリケーションのクラスについても同様な処理を行い、クラスのメタ情報を、安全な第2RAM135へのみ記憶させる。
上記のように構成することにより、アプリケーションの実行時に、クラスのメタ情報はデバッガ等では読み出すことも書き込むこともできない領域へ記憶することができる。
次に、バイトコードインタプリタ201、メタ情報管理部131が、クラスを盗聴、改ざんから保護しながら実行する処理の例について説明する。なお、クラスの構造やバイトコードインタプリタ201の動作は「Java(登録商標)Virtual Machine Specification」で詳細に説明されているため、本実施の形態に関連の深い箇所のみを簡単に説明する。
図11はJava(登録商標)言語により記述されたクラスファイルの一例を示す図である。
クラス名1101は、このクラスの名前であり、例ではクラスの名前はSampleである。フィールド1102はSampleクラスが定義するフィールドである。フィールド1102は、メソッド実行時の計算結果の値を記憶させる領域として使うことができる。メソッド1103およびメソッド1104は、Sampleクラスで定義されている2つのメソッドである。ここで、メソッドとは、クラスの処理内容を定義したものである。
Java(登録商標)言語でクラスを定義したソ−スファイル1100は、Java(登録商標)コンパイラによりクラスファイル300に変換される。変換されたクラスファイル300は、クラス構造情報301、コンスタントプール302、バイトコード303から構成される。
図12は、クラス1100がコンパイルされたときのクラスファイル300のコンスタントプール302を示す図である。
列1201は、コンスタントプール302のエントリ番号を示すインデックスであり、コンスタントプール302の参照はインデックスで表現する。列1202はコンスタントプールの型である。コンスタントプールは、記録する情報の種類に応じて型が決められている。列1203はコンスタントプールの値である。
たとえば、インデックス1は、インデックス3のクラスで宣言されているクラスにおいて、インデックス13の示すメソッドへの参照であることを意味する。インデックス3は、CONSTANT_Classはクラスへの参照を表している。インデックス3は、インデックス15の名前を持ったクラスへの参照であり、インデックス15のCONSTANT_Utf8は、クラス、メソッド、フィールドの名前を表している。インデックス15の例ではクラスの名前は“Sample”である。インデックス13のCONSTANT_NameAndTypeは、メソッドやフィールドの名前と型記述子の参照を表す。型記述子とは、フィールドの型や、メソッドの引数、戻り値の型を文字列で表現したものである。インデックス13の例では、このコンスタントプール302は名前がインデックス8、型記述子がインデックス18である。その値は、それぞれ”<init>“、”()V“である。つまり、インデックス1のメソッド参照は、名前が”<init>“で型記述子が”()V“であるメソッドへの参照になる。また、インデックス2のCONSTANT_FieldRefはこのコンスタントプール302がフィールドへの参照であることを表している。インデックス2は、クラス”Sample“で定義された、名前が”field“で、型記述子が”I“のフィールドを参照している。
図13は、クラス1100のクラス構造情報301の一部である。this_class1301はクラス1100の名前への参照である。クラスの名前はコンスタントプール302のインデックス15に記録されている。super_class1302は、クラス1100の親クラスである。filed_count1303は、クラス1100で定義されているフィールドの数を表す。フィールドは、メソッドの処理結果などを記憶させることができる領域である。フィールド情報1304は、クラス1100で定義されているフィールドの名前、アクセス権などの情報が記録されている。method_count1305は、クラス1100で定義されているメソッドの数を表す。メソッド情報1306は、クラス1100で定義されているメソッドの名前、バイトコードのアドレスなどが記録されている。
図14は、クラス1100で定義されているメソッド1104のバイトコード303である。バイトコード303からは、コンスタントプール302を使いクラス、フィールド、メソッドへアクセスする。たとえば、命令1401ではインデックス3のコンスタントプール302を参照している。
バイトコードインタプリタ201は、バイトコード303の実行時に、コンスタントプール302を参照している命令、つまり図14で#の記号によりコンスタントプール302のインデックスを指定している命令があると、メタ情報管理部131にコンスタントプール解決処理を依頼し、コンスタントプール解決処理により得られた情報を用いて命令の処理をする。バイトコードインタプリタ201は、コンスタントプール302のインデックスを指定していない命令は独自に実行する。ここで、コンスタントプール解決処理とは、コンスタントプール302において文字列で表現されているクラス、フィールド、メソッドが第1RAM125内のどのアドレスに記憶されているかを調べる処理のことである。
図15は、図14の命令1401を実行する処理のフローチャートである。
図15において、バイトコードインタプリタ201は、命令1401をフェッチする。命令1402は、コンスタントプール302のインデックス3の位置に記憶されているクラス型のオブジェクトを生成する命令である。コンスタントプール302は、第2RAM135が記憶しているため、バイトコードインタプリタ201はコンスタントプール302へアクセスできない。そのため、バイトコードインタプリタ201はメタ情報管理部131へ、命令1401の内容を通知する。(S1501)。メタ情報管理部131は、命令1401を読み出し、命令1401が参照するインデックス3で、第2RAM135が記憶するコンスタントプール302を検索する(S1502)。本実施の形態では、クラス名“Sample”が得られる。
次に、メタ情報管理部131は、“Sample”クラスのクラス構造情報301からオブジェクトのサイズを計算する。(S1503)。ここで、オブジェクトのサイズは、そのクラスが宣言するフィールドの数と型記述子から計算される。たとえば“Sample”クラスの場合int型のフィールドを1つ持つため、オブジェクトサイズは4(バイト)になる。
次に、メタ情報管理部131は“Sample”クラスを表すクラスIDを生成する(S1504)。クラスIDは、生成されたオブジェクトがどのクラスから生成されたのかを識別するために用いる情報である。クラスIDはたとえば32ビットの整数値を用いて実現できる。メタ情報管理部131は、クラスIDと、クラス名で代表するクラス構造情報301との対応関係を、第2RAM134が記憶するクラスID対応テーブルに記憶させる。
図16は、クラスID対応テーブルの一例を示す図である。列1610はクラス名を表しており、列1611はクラスIDを表している。たとえば行1601の例では“Sample”のクラス名で代表するクラス構造情報301は、クラスIDが1と対応付けられていることを表している。
図15に戻って、メタ情報管理部131は、S1503で計算したオブジェクトサイズと、S1504で生成したクラスIDを第1RAM125へ記憶させ、バイトコードインタプリタ201へ通知する(S1505)。その後、バイトコードインタプリタ201は通知されたオブジェクトサイズ分のメモリを確保し(S1506)、オブジェクトヘッダに通知されたクラスIDを記録する(S1507)。ここで、オブジェクトヘッダは、オブジェクトに関する様々な情報を記録する領域である。
以上の処理により、バイトコードインタプリタ201は、メタ情報を知ることなく、命令1401を実行することができる。この時、悪意のある第三者がコンスタントプール302の内容の盗聴を試みても、コンスタントプール302は第2RAM135に記録されているため盗聴することができない。また、悪意のある第三者がバイトコードインタプリタ201とメタ情報管理部131間の通信内容を盗聴したとしても、コンスタントプール302のインデックスと、確保すべきオブジェクトサイズが得られるだけであり、コンスタントプールの内容は漏洩しない。つまり、悪意のある第三者からコンスタントプール302の内容を秘匿することができる。
なお、クラスID対応テーブル1600において、クラスIDとクラス構造情報301の対応は必ずしも1対1である必要はない。
図17は、ひとつのクラス構造情報301に対し複数のクラスIDが対応する例を示す図である。このように構成することにより、デバッガなどのツールが第1RAM125を盗聴したときに、どのオブジェクトがどのクラスに対応するものか解析することが困難になる。
続いて、命令1402〜命令1403は、コンスタントプール302への参照を含まないため、バイトコードインタプリタ201はメタ情報管理部131を呼び出すことなく命令を実行することができる。命令1404は、コンスタントプール302への参照を伴う命令である。命令1404は、第2RAM135が記憶するコンスタントプール302のインデックス2の位置に記憶されているクラス名、メソッド名で表されるメソッドのバイトコードを呼び出す命令である。
図18は、バイトコードインタプリタ201が、命令1404を実行する処理のフローチャートである。
バイトコードインタプリタ201は、命令1404をフェッチし、命令1404の内容と、レシーバオブジェクトのアドレスをメタ情報管理部131へ通知する(S1801)。
ここで、レシーバオブジェクトとは、メソッドを実行する対象のオブジェクトのことである。Java(登録商標)言語では、メソッドの処理はレシーバオブジェクトが記憶するフィールドを用いて行われる。メタ情報管理部131は、レシーバオブジェクトのオブジェクトヘッダに記憶されているクラスIDを、第2RAM134が記憶するクラスID対応テーブル1600から検索し、クラスIDに対応するクラス構造情報301を検索する(S1802)。図16に示すように、クラスIDは「1」であるので、図13のクラス構造情報301が検索される。
次に、メタ情報管理部131は、コンスタントプール302からインデックス4を検索し、メソッド名“<init>”と型記述子”()V“を得る(S1803)。次に、メタ情報管理部131は、S1802で検索したクラス構造情報301に含まれるメソッド情報1306から、S1803で検索したメソッド名と型記述子を持つメソッドを検索し、そのバイトコードアドレスを得る(S1804)。次に、メタ情報管理部131は、S1804で得たバイトコードアドレスをインタプリタ201へ通知する(S1805)。バイトコードインタプリタ201は、メタ情報管理部131から通知されたバイトコードアドレスを実行する(S1806)。
以上の動作によりバイトコードインタプリタ201は、メタ情報を知ることなく命令1404を実行することができる。この時、悪意のある第三者がコンスタントプール302の内容の盗聴を試みても、コンスタントプール302は第2RAM135に記録されているため盗聴することができない。また、悪意のある第三者がバイトコードインタプリタ201とメタ情報管理部131間の通信内容を盗聴したとしても、コンスタントプール302のインデックスと、次に実行すべきバイトコードアドレスが得られるだけであり、コンスタントプールの内容は漏洩しない。つまり、悪意のある第三者からコンスタントプール302の内容を秘匿することができる。
続いて、命令1405〜命令1406は、コンスタントプール302への参照を含まないため、バイトコードインタプリタ201はメタ情報管理部131を呼び出すことなく命令を実行することができる。
命令1407は、コンスタントプール302への参照を伴う命令である。命令1407は、第2RAM135が記憶するコンスタントプール302のインデックス2の位置に記憶されている、クラス名、フィールド名で表されるフィールドを読み出す命令である。コンスタントプール302は、第2RAM135が記憶しているため、バイトコードインタプリタ201はコンスタントプール302へアクセスできない。図19は、バイトコードインタプリタ201が、命令1407を実行する処理のフローチャートである。
バイトコードインタプリタは命令1407をフェッチすると、メタ情報管理部131を呼び出し、命令1407の内容と、命令1407の実行直前のJava(登録商標)スタックの最上位にあるオブジェクトのアドレスを通知する(S1901)。
ここで、Java(登録商標)スタックについては「Java(登録商標)Virtual Machine Specification」を参照されたい。
メタ情報管理部131は、通知されたオブジェクトのオブジェクトヘッダに記憶されているクラスIDを、第2RAM134が記憶するクラスID対応テーブル1600から検索し、クラスIDに対応するクラス構造情報301を検索する。(S1902)本実施の形態では、クラスIDは「1」であるので、クラス構造情報301が検索される。
次に、メタ情報管理部131は、コンスタントプール302からインデックス2を検索し、フィールド名“field”と型記述子”I“を得る。(S1903)次に、メタ情報管理部131は、S1902で検索したクラス構造情報301に含まれるフィールド情報1304から、S1903で検索したフィールド名と型記述子を持つフィールドを検索し、そのフィールドのアドレスを得る。(S1904)次に、メタ情報管理部131は、第1RAM125へ、S1904で得たフィールドアドレスを記憶させ、バイトコードインタプリタ201へそのアドレスを通知する(S1905)。バイトコードインタプリタ201は、メタ情報管理部131から通知されたフィールドアドレスを読み取る(S1906)。
以上の動作により、バイトコードインタプリタ201は、メタ情報を知ることなく命令1407を実行することができる。この時、悪意のある第三者がコンスタントプール302の内容の盗聴を試みても、コンスタントプール302は第2RAM135に記録されているため盗聴することができない。また、悪意のある第三者がバイトコードインタプリタ201とメタ情報管理部131間の通信内容を盗聴したとしても、コンスタントプール302のインデックスと、データを読み出すためのフィールドのアドレスが得られるだけであり、コンスタントプールの内容は漏洩しない。つまり、悪意のある第三者からコンスタントプール302の内容を秘匿することができる。
以上に説明したように、メタ情報(クラス構造情報301、コンスタントプール302)はデバッガからアクセスすることができない第2RAM134のみが記憶するため、悪意のある第三者がデバッガなどのツールを使ってJava(登録商標)アプリケーションの不正コピーを試みても、メタ情報が取得できない。また、Java(登録商標)アプリケーションの実行時に、データの盗聴、改ざんを試みても、メタ情報を読み出すことができないため、どのメソッドやデータを盗聴、改ざんすればよいかが分からず、攻撃が非常に困難になる。
なお、アプリ取得プログラム121、Java(登録商標)仮想マシン122は、第1CPU124で実行されるソフトウェアで実現されるとしたけれども、LSI等のハードウェアで実現されてもよいのは勿論である。
(実施の形態2)
上記実施の形態1では、クラスローダ202やベリファイヤ203はJava(登録商標)仮想マシン122のサブプログラムとして通常実行部120で動作している。このため、図10に示したクラスロード処理のS1001完了後から、S1005までの間にデバッガ等のツールで第1RAM125を盗聴することで、メタ情報が漏洩する課題がある。本実施の形態2では、クラスローダ202、ベリファイヤ203を安全な実行部130で動作させることによりこの課題を解決する。
図20は、実施の形態2におけるアプリケーション実行装置の構成を示すブロック図である。
本実施の形態におけるアプリケーション実行装置2010は、実施の形態1におけるアプリケーション実行装置110と比べ、第1Java(登録商標)仮想マシン2022、第2Java(登録商標)仮想マシン2032、復号処理部2034が異なる。その他の構成要素については、実施の形態1と同様であるため説明を省略する。
図21は、第1Java(登録商標)仮想マシン2022、第2Java(登録商標)仮想マシン2032のサブプログラムの構成を示す図である。
クラスローダ2106、ベリファイヤ2107は、安全な実行部2030で実行するため第2Java(登録商標)仮想マシン2032のサブプログラムとする。
また、図22に示すように、第1ROM2026は、第1Java(登録商標)仮想マシン2201、第2Java(登録商標)仮想マシン2202を記憶している。
図23は、Java(登録商標)仮想マシンローダ2033が、第1Java(登録商標)仮想マシン2022、第2Java(登録商標)仮想マシン2032をロードする処理手順を示すフローチャートである。
図23のS2301で、Java(登録商標)仮想マシンローダ2033は、復号処理部2034へ、第1Java(登録商標)仮想マシン2201を復号し、結果を第1RAM2036へ出力するよう指示する。
そして、Java(登録商標)仮想マシンローダ2033は、復号処理部2034に対し、第2Java(登録商標)仮想マシン2202を復号し、結果を第2RAM2036へ出力するよう指示する(S2302)。最後に、OS2023へロードの完了を通知する(S2303)。
以上でJava(登録商標)仮想マシンをロードすることができる。
クラスのロード処理は、クラスローダ2106、ベリファイヤ2107の動作を安全な実行部2010で実行すること以外は、実施の形態1と同様のため説明を省略する。また、クラスの実行処理も、実施の形態1と同様であるため説明を省略する。
以上のように構成することにより、クラスのロード処理の処理中のときでも、復号されたメタ情報のデバッガなどのツールによる盗聴、改ざんを防ぐことができる。
なお、実施の形態1および実施の形態2ではJava(登録商標)アプリケーションを実行するアプリケーション実行装置を例に説明したが、本発明はメタ情報を持つ他の言語で記述されたアプリケーションにも適用が可能である。たとえば、ECMAで標準化されているC#言語は、CIL(Common Intermediate Language)と呼ばれる中間言語(Java(登録商標)におけるバイトコードに相当)をCLI(Common Laguage Infrastructure)と呼ばれる仮想マシン(Java(登録商標)におけるJava(登録商標)仮想マシンに相当)が実行する方式をとる。C#言語におけるメタ情報はECMA−355規格のPartition IIで定義されている。
なお、実施の形態1、実施の形態2では、クラスファイルに含まれるすべてのメタ情報を、第2RAM135のみへ記憶させたが、一部のメタ情報を第1RAM125へ記憶させてもよい。この場合、第1RAM125へ記憶させた情報については、デバッガなどのツールにより解析される恐れがあるが、通常の実行部120と安全な実行部130とのインタラクションを削減できるため、より速くアプリケーションを実行できるようになる。
一部のメタ情報だけでは完全なクラスを復元することはできないが、入手したメタ情報から他のメタ情報を推定することで完全なクラスを復元することができる可能性がある。どれだけのメタ情報を隠蔽すれば十分であるかは、実行プログラムに求められる保護要件に基づき決定すればよい。
本発明に係るアプリケーション実行装置は、アプリケーションの実行、解析に不可欠なメタ情報を、盗聴、改ざんが困難な安全実行部へと隠蔽することで、アプリケーションを実行時の盗聴、改ざんから保護することができ、アプリケーションのダウンロード配信ビジネスにおいて、コンテンツ作成者の権利を保護することができる。
本発明は、アプリケーションプログラム(特にJava(登録商標)言語で記述されたプログラム)を実行するアプリケーション実行装置に関し、インターネットやDVD等の外部のメディアからダウンロードしたアプリケーションを実行する時に、アプリケーションが不正に盗聴、改竄されることを防止する技術に関する。
従来のデジタルTVや携帯電話などの電子機器では、Java(登録商標)言語で記述されたアプリケーションプログラムをダウンロードし、実行する機能を搭載するものが増加している。たとえば携帯電話では、NTT DoCoMoがiアプリ(登録商標)と呼ばれるサービスを提供している。このサービスは、携帯電話端末がインターネット上にあるアプリケーション配信サーバからJava(登録商標)プログラムをダウンロードして、端末上で実行する。
また、欧州では、DVB−MHP(Digital Video Broadcasting−Multimedia Home Platform)と呼ばれる仕様が策定され、既に仕様に準拠した運用が開始されている。DVB−MHP規格に基づくデジタル放送では、放送波に多重化されたJava(登録商標)プログラムをデジタルTVが受信し、それを実行する。
このようなアプリケーションプログラム配信サービスにおいて、配信されるアプリケーションプログラムはそのアプリケーションプログラムの開発者の知的財産権で保護されており、これを悪意のある攻撃者が盗聴することは防がなくてはならない。また、悪意のある攻撃者により改ざんされたアプリケーションプログラムが、利用者やアプリ製作者の意図しない動作をすることを防がなくてはならない。
近年の電子機器は、多数のソフトウエアモジュールから構成されている。専門的な知識を有する者であれば、これらのソフトウエアモジュールのバグを悪用することで電子機器内のソフトウエアを改ざんすることも可能である。また、デバッガやICE(In−Circuit Emulator)等のツールを用いることでも同様のことは実現可能である。そのため、たとえばJava(登録商標)プログラムに著作権管理機能や課金機能が含まれる場合には、これらの機能を無効化できてしまうという問題が発生する。今後、インターネット等を利用したJava(登録商標)アプリケーションプログラムの配信ビジネスが本格化するに従い、このようなアプリケーションプログラムの盗聴、改ざんの問題が深刻化すると予想される。
従来、ソフトウエアモジュールのバグの悪用や、デバッガ、ICEなどのツールによってメモリ上のプログラムを解析、改ざんすることを防ぐために、元のプログラムに対し、複雑化と暗号化という方法が用いられている。
複雑化とは、処理の分割、出現順序の交換、条件の挿入などの処理を施すことにより、元のプログラムと動作は同じであるが、より複雑なプログラムへと変換し、プログラム自体を複雑にするという手法であり、暗号化とは、プログラムを暗号化しておき、実行時にだけ復号する方法である。
特表2002−514333
しかし、複雑化の方法は、どれだけ複雑な変換を施したとしても、時間をかけて解析することでいつかは解析されてしまう。プログラムの金銭的価値が高くなれば、いかに複雑なプログラムであってもそれを解析するためのコストを負担する者が現れるのは必然である。
また、暗号化の方法は、プログラムの実行中は復号されているので、その間に解析、盗聴されてしまう可能性がある。
本発明は、上記の問題を解決するもので、ソフトウエアモジュールのバグの悪用や、専門的なツールによるアプリケーションプログラムの盗聴、改ざんを防止するアプリケーション実行装置を提供することを目的とする。
上記課題を解決するため、本発明は、取得したアプリケーションをクラス単位で実行するアプリケーション実行装置であって、クラスファイルに含まれるメタ情報を記憶するメタ情報記憶手段と、クラスファイルに含まれる命令列を記憶する命令列記憶手段と、参照すべき情報のない命令を実行し、参照すべき第1情報があるとき要求し、通知された第2情報を用いて命令を実行する命令実行手段と、前記命令実行手段の要求に応じて前記メタ情報から第2情報を生成し、前記命令実行手段に通知するメタ情報実行手段とを備え、前記メタ情報記憶手段に記憶されたメタ情報は、前記メタ情報実行手段だけが読み出すことができ、前記メタ情報実行手段は、前記命令実行手段の要求だけを受け付けることとしている。
上記構成により、アプリケーションの命令を実行する命令実行手段は、参照すべき情報があるとき、メタ情報実行手段に指示して、必要とする第2情報が通知されるので、例えばデバッガを用いて命令実行手段を盗聴したとしても、メタ情報記憶手段に記憶されているメタ情報そのものは見ることが出来ない。したがって、命令実行手段で命令列が盗聴、改ざんされたとしても、アプリケーションの解析は困難であり、盗聴、改ざんを防止することができる。
また、前記メタ情報記憶手段は、インデックスとコンスタントプールの型とその値とを記載したコンスタントプールと、項目とその値とを記載したクラス構造情報とを記憶し、前記命令列記憶手段は、クラスで定義されているメソッドのバイトコードを記憶し、前記メタ情報実行手段は、前記命令実行手段がバイトコードに第1情報であるコンスタントプールのインテックスが指定されている命令を実行するとき、その命令の種類に応じて前記コンスタントプールとクラス構造情報とを参照して第2情報を生成することとしている。
これにより、アプリケーションの実行時においても、アプリケーションが不正に解析、改ざんされることを防ぐことができ、保護強度が向上する。
また、前記命令実行手段が実行するバイトコードが新しいオブジェクトの生成であるとき、前記メタ情報実行手段は、指定されたインデックスに対応するコンスタントプールの型を前記コンスタントプールから検索し、前記クラス構造情報を参照して、メモリサイズを生成することとしている。
これにより、命令実行手段はオブジェクトのサイズを得るが、オブジェクトのサイズの計算の元になった、当該クラスが宣言するメタ情報のフィールドの数と型記述子は命令実行手段には見えない。
また、前記命令実行手段が実行するバイトコードがメソッドの呼び出しであるとき、前記メタ情報実行手段は、指定されたインデックスに対応するコンスタントプールの型を前記コンスタントプールから検索し、前記クラス構造情報を参照して前記メソッドのアドレスを生成することとしている。
これにより、命令実行手段はメソッドのアドレスを得るが、当該アドレスを得るのに必要なメタ情報は命令実行手段には見えない。
また、前記命令実行手段が実行するバイトコードがオブジェクトのフィールド参照であるとき、前記メタ情報実行手段は、指定されたインデックスに対応するコンスタントプールの型を前記コンスタントプールから検索し、前記クラス構造情報を参照して、前記フィールドのアドレスを生成することとしている。
これにより、命令実行手段はフィールドのアドレスを得るが、当該アドレスを得るのに必要なメタ情報は命令実行手段には見えない。
また、前記取得されたアプリケーションは暗号化されており、前記暗号化されたアプリケーションを復号し、復号された命令列を前記命令列記憶手段に記憶させ、復号されたメタ情報を前記メタ情報記憶手段に記憶させる復号手段を更に備えることとしている。
これにより、アプリケーションの復号時においてもアプリケーションのメタ情報を保護することができ、より保護強度が向上する。
また、前記復号手段は、外部から直接アクセスできない鍵記憶手段に記憶された復号鍵を用いて前記アプリケーションを復号することとしている。
これにより、アプリケーションが不正に復号され、解析、改ざんされることを防ぐことができ、保護強度が向上する。
また、前記アプリケーションは、Java(登録商標)アプリケーションであることとしている。
これにより、Java(登録商標)アプリケーションが不正に盗聴、改ざんされることを防ぐことができる。
また、本発明は、取得したアプリケーションをクラス単位で実行するアプリケーション実行装置のアプリケーション実行方法であって、クラスファイルに含まれるメタ情報を記録するメタ情報記録ステップと、クラスファイルに含まれる命令列を記録する命令列記録ステップと、参照すべき情報のない命令を実行し、参照すべき第1情報があるとき要求し、通知された第2情報を用いて命令を実行する命令実行ステップと、前記命令実行ステップの要求に応じて前記メタ情報から第2情報を生成し、前記命令実行ステップに通知するメタ情報実行ステップとを有し、前記メタ情報記録ステップに記録されたメタ情報は、前記メタ情報実行ステップだけが読み出すことができ、前記メタ情報実行ステップは、前記命令実行ステップの要求だけを受け付けることとしている。
上記方法により、デバッガ等のツールによりアプリケーション実行時に、アプリケーションの命令がメモリ上で盗聴、改ざんされたとしても、デバッガ等からはアプリケーションのメタ情報にはアクセスできないので、アプリケーションとしての解析を困難にし、盗聴、改ざんを防止することができる。
本発明に係るアプリケーション実行装置の実施の形態を、図面を参照しながら説明する。
(実施の形態1)
図1は、本発明に係るアプリケーション実行装置の実施の形態1の構成図である。
ダウンロード可能なアプリケーションプログラム(以下、単に「アプリケーション」という)100は、アプリケーション実行装置110からダウンロード可能なアプリケーションであり、本実施の形態においては、コンパイルされ、暗号化されたJava(登録商標)アプリケーションである。
アプリケーション実行装置110は、通常実行部120と安全な実行部130とを備え、仮想線140の上方のソフトウェアと下方のハードウェアとで構成される。アプリケーション実行装置110は、たとえばデジタルテレビ、セットトップボックス、DVDレコーダー、Blu−ray Disc(BD)レコーダー、カーナビ端末、携帯電話、PDAなどの、Java(登録商標)仮想マシンを搭載する電子機器あるいは端末に摘用される。
通常実行部120は、ソフトウェアとして、アプリ取得プログラム121、Java(登録商標)仮想マシン122、OS123と、ハードウェアとして、第1CPU124、第1RAM125、第1ROM126とから構成される。ここで、アプリ取得プログラム121、Java(登録商標)仮想マシン122、OS123の並び順は、ソフトウェアの階層構成の上層からの順を示し、これらのソフトウェアは第1CPU124で動作する。
通常実行部120は、たとえば通常のパーソナルコンピュータやデジタル家電機器等に搭載されているプログラム実行手段と同様のものである。なお、請求の範囲では、通常実行部120は、命令実行手段及び命令列記憶手段で構成される。
安全な実行部130は、ソフトウェアとして、メタ情報管理部131、Java(登録商標)仮想マシンローダ132、復号処理部133と、ハードウェアとして、第2CPU134、第2RAM135、第2ROM136とから構成される。ここで、メタ情報管理部131、Java(登録商標)仮想マシンローダ132、復号処理部133の各ソフトウェアは、第2CPU124で動作する。
安全な実行部130は、悪意のある第三者からの攻撃を防御しつつ、安全にプログラムを実行させることができる。即ち、安全な実行部130は、外部の装置から直接アクセスされることが禁止され、第1CPU124からの指示に応じて、第2CPU134は必要な情報を第1CPU124に通知する。なお、請求の範囲では、安全な実行部130は、メタ情報実行手段及びメタ情報記憶手段並びに復号手段で構成される。
先ず、通常実行部120の各構成要素について説明する。
アプリ取得プログラム121は、アプリケーション100をアプリケーション実行装置110の外部から取得し、第1RAM125に記憶させる。アプリ取得プログラム121は、たとえば、インターネット上にあるサーバから、TLS(Transport Layer Security)、HTTP(Hyper Text Transfer Protocol)等のプロトコルに従いJava(登録商標)アプリケーション100(暗号化され、クラスファイル形式)をダウンロードするJava(登録商標)プログラムが相当する。
ここで、TLSは暗号化により通信時のデータの盗聴、改ざんを防ぐデータ転送方式である。TLSの詳細はRFC2246に記載されており、ここでは詳細な説明を省略する。
また、HTTPは、インターネット上のデータ通信で一般的に用いられているデータ転送方式である。HTTPの詳細はRFC2616に記載されており、ここでは詳細な説明を省略する。
なお、アプリ取得プログラム121は、デジタル放送のデータ放送として、MPEG2トランスポートストリーム内に埋め込まれたJava(登録商標)アプリケーションをアプリケーション実行装置110に読み出すJava(登録商標)プログラムであってもよい。MPEG2トランスポートストリームの詳細はMPEG規格書 ISO/IEC138181−1に記載されているので、その説明を省略する。MPEG2トランスポートストリームにJava(登録商標)プログラムを埋め込む方法は、DSMCC方式として、MPEG規格書 ISO/IEC138181−6に記述されている。ここではDSMCCの詳細な説明は省略する。DSMCC方式は、MPEG2トランスポートストリームのパケットの中に、コンピュータで使用されているディレクトリやファイルで構成されるファイルシステムをエンコードする方法を規定している。
また、アプリ取得プログラム121は、SDカード、CD−ROM、DVD、BD−ROM等のリムーバブルメディアに記録されたJava(登録商標)アプリケーションを、第1RAM125に書き込むJava(登録商標)プログラムであってもよい。アプリ取得プログラム121はOS123が提供するファイル操作機能を用いて、これらのリムーバブルメディアに記録されたJava(登録商標)アプリケーションを読み出す。
また、アプリ取得プログラム121は、アプリケーション実行装置110内にある第1ROMに記録されたJava(登録商標)アプリケーションを、第1RAM125に書き込むJava(登録商標)プログラムであってもよい。アプリ取得プログラム121はOS123が提供するファイル操作機能を用いて、第1ROM126に記録されたJava(登録商標)アプリケーションを読み出す。
なお、本実施の形態ではアプリ取得プログラム121は、Java(登録商標)言語で記述されたJava(登録商標)プログラムとしているが、同等の機能を有する、ネイティブ(実行装置固有)言語で記述されたプログラムで実現されていてもよい。
Java(登録商標)仮想マシン122は、Java(登録商標)言語で記述されたプログラムを逐次解析し実行するJava(登録商標)バーチャル(仮想)マシンである。Java(登録商標)言語で記述されたプログラムはバイトコードと呼ばれる、ハードウエアに依存しない中間コードの命令列(オペレーション)にコンパイルされる。Java(登録商標)仮想マシン122は、このバイトコードを解釈、実行するソフトウエアで実現される。また、一部のJava(登録商標)仮想マシン122は、バイトコードを第1CPU124が実行可能な実行形式に翻訳するJIT(JustIn Time)コンパイラと呼ばれる機能を持つものもある。また、一部のJava(登録商標)仮想マシン122は、一部のバイトコードを直接実行可能なプロセッサと、プロセッサでは直接実行できないバイトコードを実行するインタプリタから構成されることもある。なお、Java(登録商標)言語の詳細は、書籍「Java(登録商標) Language Specification(ISBN 0−201−63451−1)」等の多くの書籍で解説されているので、ここでは、その詳細を省略する。
Java(登録商標)仮想マシン122は、複数のサブプログラムから構成される。
図2は、Java(登録商標)仮想マシン122を構成するサブプログラムの一例である。
Java(登録商標)仮想マシン122は、図2に示すように、バイトコードインタプリタ201、クラスローダ202、ベリファイヤ203、Java(登録商標)ヒープ管理部204、Java(登録商標)ネイティブライブラリ205、JITコンパイラ206で構成されている。
バイトコードインタプリタ201は、クラスファイルに含まれるバイトコードを解釈、実行するサブプログラムで、Java(登録商標)仮想マシン122において中核的な処理を行うサブプログラムである。詳細ついては後述する。
クラスローダ202は、アプリ取得プログラム121が取得したJava(登録商標)アプリケーション100を、第1RAM125から読み出し、Java(登録商標)仮想マシン122が実行できるアプリケーションに変換して再度第1RAM125に書き込み、クラスを実行可能な状態にする。また、クラスローダ202は、クラスアンロード処理も行う。クラスアンロード処理とは、実行が終了し不要になったクラスをJava(登録商標)仮想マシン122から取り除く処理のことである。
ここで、クラスとは、Java(登録商標)アプリケーションを構成する基本単位であり、書籍「Java(登録商標) Virtual Machine Specification(ISBN 0−201−63451―)」で定義されている。
図3は、クラスに含まれる情報の概要を示した図である。
「Java(登録商標) Virtual Machine Specification」での規定では、クラスは 図3に示されていない情報もあるが、ここでは説明の簡単化のため本発明に関連のある項目のみ説明する。
クラス構造情報301は、このクラスが保持するフィールド、メソッド、どのクラスを継承するかなど、クラスの構造に関する情報を含んでいる。
コンスタントプール302は、アプリケーション(クラス)で定義されている定数(コンスタント)に関するデータをまとめた情報であり、クラスで定義しているまたはこのクラスから参照している他クラスのフィールド、メソッド、クラスの名前などの情報を含んでいる。クラス構造情報301とコンスタントプール302とを総称してクラスのメタ情報(または、単にメタ情報)と呼ぶ。
バイトコード303は、そのクラスにおいて実行されるメソッドの処理を、中間言語の命令の列として記述したものである。バイトコード303にはアプリケーションが処理するデータに関する情報は含まれない。したがって、Java(登録商標)アプリケーションの実行においては、バイトコード303だけでは一般的に実行処理ができず、データ部分を定義したコンスタントプール302があって始めて実行処理が可能となる。クラスに含まれる上記の各情報の例については、後述する。
図2に戻って、ベリファイヤ203は、クラスのデータ形式の不備や、クラスに含まれるバイトコードの安全性を判定する。バイトコードの安全性の検査方法は、Java(登録商標) Virtual Machine Specificationで定義されているため詳細な説明は省略する。
ベリファイヤ203が妥当ではないと判定されたクラスは、クラスローダ202はロードをしない。
Java(登録商標)ヒープ管理部204は、Java(登録商標)ヒープと呼ばれる、Java(登録商標)アプリケーションが使用するワーキングメモリの確保を行う。Java(登録商標)ヒープは第1RAM125内に確保される。また、Java(登録商標)ヒープ管理部204は、ガーベジコレクションも行う。ここで、ガーベジコレクションとは、アプリケーション実行において不要になったワーキングメモリを開放し、他の用途に再利用できるようにする公知の技術をいい、詳細な説明は省略する。
Java(登録商標)ネイティブライブラリ205は、Java(登録商標)アプリケーションから呼び出されるライブラリで、OS123や、アプリケーション実行装置110が備える図1には記載されていないハードウエア、サブプログラム等で提供される機能を、Java(登録商標)アプリケーションへ提供する。
JITコンパイラ206は、バイトコード303を第1CPU124もしくは第2CPU134が理解可能な実行形式に翻訳する。
以上で、図2に基づく、Java(登録商標)仮想マシン122の概略の説明を終わる。
再び図1に戻って、OS123は、アプリケーション実行装置110の電源が投入されると第1CPU124が起動する基本ソフトウェアである。OS123は、オペレーティングシステムの略であり、Linuxが一例である。OS123は、プログラムを平行して実行するカーネル及び、ライブラリで構成される公知の技術の総称であり、詳細な説明は省略する。OS123はJava(登録商標)仮想マシン122をサブプログラムとして実行する。
第1CPU124は、Java(登録商標)仮想マシン122、OS123、アプリケーション取得プログラム121、アプリケーション取得プログラム121の実行で取得されたアプリケーション100の各プログラムに従い処理を実行する。
第1RAM125は、アプリケーション取得プログラム121の実行で取得されたアプリケーションプログラムをクラスファイルとして記憶し、復号されたJava(登録商標)仮想マシン122を記憶する。また、第1CPU124が処理を行う際、一時的にデータを保存する。また、第1CPU124から第2CPU134に実行を依頼するときの、両CPU間のデータの受け渡しに使用される。第1RAM125は、たとえば、SRAM、DRAM等の一次記憶からなる。
第1ROM126は、暗号化されたJava(登録商標)仮想マシン401などを記憶する。第1CPU124から指示されたデータやプログラムを記憶する。第1ROM126は、具体的にはフラッシュメモリやハードディスク等の不揮発性メモリからなる。
図4は、第1ROM126が記憶している内容の一例を示す図である。
第1ROM126は、暗号化されたJava(登録商標)仮想マシン401、暗号化されたアプリ取得プログラム402、暗号化されたメタ情報管理部403、起動クラス名404を含む。
図5は、アプリ取得プログラム402の構成を示す図である。
アプリ取得プログラム402は、サブクラス501〜503などの複数のクラスから構成される。各サブクラスは暗号化されている。
起動クラス名404は、Java(登録商標)仮想マシン122が起動した際に最初に実行するプログラムであるクラスの名前である。本実施の形態では暗号化起動クラス名404にはサブクラス501が指定されているものとする。なお、第1ROM126は図4に示した以外のデータを記憶していてもよい。
次に、安全な実行部130の各構成要素について説明する。
メタ情報管理部131は、Java(登録商標)仮想マシン122にロードされているクラスに含まれるメタ情報を管理し、バイトコードインタプリタ201の要求によりその情報を参照処理し、その結果を提供するプログラムである。メタ情報管理部131については後に詳細に説明をする。
Java(登録商標)仮想マシンローダ132は、アプリケーション実行装置110の電源投入後に、第1CPU124がJava(登録商標)仮想マシン122を実行可能な状態にするための処理を行う。Java(登録商標)仮想マシンローダ132については後に詳細に説明をする。
復号処理部133は、第1RAM125もしくは第1ROM126が記憶する暗号化された情報(アプリケーション、Java(登録商標)仮想マシン122等)を復号し、第1RAM125へ復号結果を書き出すプログラムである。暗号化のためのアルゴリズムは任意の暗号アルゴリズムを用いることが可能である。
上記の復号のための鍵は、第2ROM136に記憶されている復号鍵701を使用する。
第2CPU134は、メタ情報管理部131、Java(登録商標)仮想マシンローダ132、復号処理部133の各プログラムに従い処理を実行する。
第2RAM135は、後述のクラス構造情報301、コンスタントプール302およびクラスID対応テーブルを記憶する。また、第2CPU134が処理を行う際、一時的にデータを保存するために使用される。
第2RAM135は、たとえば、DRAMやSRAM等で構成され第2CPU134からのみアクセスが可能であり、第1CPU124から第2RAM135に記憶された情報を読むことも書くこともできない。なお、第2RAM135はCPU134に混載されていてもよい。
通常実行部120で動作するプログラム、たとえばJava(登録商標)仮想マシン122と安全な実行部130で動作するプログラム、たとえばメタ情報管理部131は、共同して動作するため、両者の間で情報の交換が必要となる。
図6は、Java(登録商標)仮想マシン122が、たとえばメタ情報管理部131に処理を指示するときのフローチャートである。
図6において、Java(登録商標)仮想マシン122は、メタ情報管理部131に渡す情報を、第1RAM125の所定のアドレスへ記憶させる(S601)。次に、Java(登録商標)仮想マシン122は、第1CPU124を通じて第2CPU134へ、メタ情報管理部131の実行を指示する(S602)。メタ情報管理部131は、第1RAM125の所定のアドレスから、Java(登録商標)仮想マシン122がS601で記憶されたデータを読み出し(S603)、そのデータを用いて所定の処理を行う(S604)。
次に、メタ情報管理部131は、S604で得られた処理結果を第1RAM125の所定のアドレスへ書きこむ(S605)。次に、メタ情報管理部131は、第2CPU134を通じて第1CPU124へJava(登録商標)仮想マシン122の実行を指示する(S606)。次に、Java(登録商標)仮想マシン122は第1RAM125の所定のアドレスから、メタ情報管理部131がS604で行なった処理の結果を読みだす。
以上のように実行することで、第1CPU124からは直接参照することができない情報に基づく処理を、安全な実行部130内で動作するプログラムに指示して情報を受け渡しできる。
第2ROM136は、読み出し専用の不揮発性メモリからなり、第2CPU134以外からは第2ROM136が記憶する情報を読みだすことが出来ないことを保証する。
図7は、第2ROM136が記憶する情報の一例を示す図である。
図7の第2ROM136には、第1ROM126が記憶するJava(登録商標)仮想マシン401,アプリ取得プログラム402に含まれるサブクラス501〜503を復号するための復号鍵701を記憶している。本実施の形態では、Java(登録商標)仮想マシン401、アプリ取得プログラム402、起動クラス名404を復号する鍵は、復号鍵701一つのみとしているが、それぞれに別々の鍵を用いても本発明は実施可能である。なお、第2ROM136は図7に示されていない別のデータを記憶していてもよい。
また、復号鍵701は、アプリ取得プログラム121で取得された暗号化されたアプリケーション100の復号のための暗号化された復号鍵を復号するために用いられる。アプリケーション100の復号された復号鍵も第2ROM136に記憶される。
なお、本実施の形態では、アプリケーション実行装置110は二つのCPUを備えているが、一つのCPUが動作モードを切り替えるなどの方法で仮想的に二つのCPUのように振舞ってもよい。動作モードを変えることが可能なCPUには、たとえばIntel社のLaGrandeがある。このCPUは通常モードとセキュアモードと呼ばれる2つの動作モードを持つ。通常モード側で動作するプログラムからは、セキュアモード上で動くプログラムを盗聴、改ざんすることができないように構成されている。同様の機能を持ったCPUはARM社やAMD社からも発表されている。
なお、本実施の形態では、メタ情報管理部131、Java(登録商標)仮想マシンローダ132、復号処理部133は第2CPU134で実行されるプログラムとしているが、LSIでこれらの機能を実現してもよい。
また、第1RAM125、第2RAM135は、一つのRAMを仮想的に2つのRAMとして扱ったものとしてもよく、また、第1ROM126、第2ROM136は一つのROMを仮想的に2つのROMとして扱ったものとしてもよい。
また、安全な実行部130全体、もしくは一部をハードウエアにより実現してもよい。この場合、第1CPU124と第2CPU134間のデータ通信は暗号化して行い、第三者による盗聴を防ぐ。これは両CPUを結ぶデータバス(図示されていない)にデータを送信する際に暗号化し、データを受信後に復号することで行われる。
また、安全な実行部130は、スマートカードやICカードのように、アプリケーション実行装置110から取り外し可能な装置であってもよい。スマートカード、ICカードはカード内部にCPUやメモリ、セキュリティ回路を含む公知の技術であり、詳細な説明を省略する。この場合、通常実行部120と安全な実行部130間のデータ転送は、SAC(Secure Authenticated Channel)等の技術を用いて、第三者による盗聴を防ぎながら行うようにする。SACはICカードと外部機器の相互認証、および暗号鍵の共有を安全に行うための公知の技術である。
また、安全な実行部130のソフトウェアは、耐タンパソフトウエア技術により保護されたソフトウエアであってもよい。
次に、アプリケーション実行装置110がJava(登録商標)アプリケーションを盗聴、改ざんから保護しながら実行する方法について説明する。
Java(登録商標)アプリケーション実行装置110の電源が投入されると、第1CPU124は、OS123を起動する。OS123は起動後、第1CPU124を通じて第2CPU134に対し、Java(登録商標)仮想マシンローダ132をロードするよう指示する。第2CPU134によって起動されたJava(登録商標)仮想マシンローダ132は、一定の手順でJava(登録商標)仮想マシン122を第1RAM125へ、メタ情報管理部131を第2RAM135へロードする。
図8は、Java(登録商標)仮想マシン122およびメタ情報管理部131をロードする手順を示した図である。
図8において、S801で、Java(登録商標)仮想マシンローダ132は復号処理部133を使い、第1ROM126に記憶されたJava(登録商標)仮想マシン401を第1RAM125へ復号する。
図9は、復号処理部133が、暗号化されたJava(登録商標)仮想マシン401を復号する際の処理手順を示す図である。
図9において、復号処理部133は、第1ROM126が記憶する暗号化されたJava(登録商標)仮想マシン401を、第2CPU133を通じて読み出す(S901)。
復号処理部133は、第2ROM136から復号鍵701を取得し(S902)、Java(登録商標)仮想マシン401の復号結果の出力先を判定する。(S903)出力先が第1RAMのとき、復号されたJava(登録商標)仮想マシン122を、第2CPU134を通じて第1RAM125に(S904)、また、出力先が第2RAMのとき、第2RAM135に記憶させる(S905)。
図8に戻って、Java(登録商標)仮想マシンローダ132は、復号処理部133に指示して、第1ROM126に記憶されたメタ情報管理部404を、第2RAM135へ復号する(S802)。Java(登録商標)仮想マシンローダ132は、OS123へロードの完了を通知する。(S803)
OS123は、Java(登録商標)仮想マシンローダ132からロード完了通知を受け、Java(登録商標)仮想マシン122の実行を開始する。Java(登録商標)仮想マシン122の実行が開始されると、クラスローダ202が呼び出され、クラスローダ202は、図4で示す第1ROM126に記憶されている起動クラス名404を参照し、起動クラス名404で指定されたクラスをロードする。
図10は、起動クラス名404として、図5のアプリ取得プログラム402のサブクラス501が指定されていたときを例に、クラスローダ202がサブクラス501をロードする処理手順を示したフローチャートである。
まず、クラスローダ202は、復号処理部133に指示し、第1ROM126に記憶されている暗号化されたサブクラス501の復号処理を行わせる(S1001)。次に、ベリファイヤ203に指示し、第1RAM125の復号されたサブクラスをベリファイさせる(S1002)。クラスローダ202は、第1RAM125の復号されたサブクラスからメタ情報(クラス構造情報301、コンスタントプール302)を抽出し(S1003)、抽出後はサブクラスからメタ情報を削除して、当該メタ情報を第1RAM125に書き出し、メタ情報管理部131を呼び出す(S1004)。メタ情報管理部131は、第1RAM125からメタ情報を読み取り、第2RAM135へコピーする。クラスローダ202は、メタ情報管理部131によるメタ情報のコピーが終わると、第1RAM125から当該メタ情報を削除する(S1005)。
以上のようにして、クラスローダ202は、アプリ取得プログラムだけではなく、アプリ取得プログラム121で取得されたアプリケーションのクラスについても同様な処理を行い、クラスのメタ情報を、安全な第2RAM135へのみ記憶させる。
上記のように構成することにより、アプリケーションの実行時に、クラスのメタ情報はデバッガ等では読み出すことも書き込むこともできない領域へ記憶することができる。
次に、バイトコードインタプリタ201、メタ情報管理部131が、クラスを盗聴、改ざんから保護しながら実行する処理の例について説明する。なお、クラスの構造やバイトコードインタプリタ201の動作は「Java(登録商標) Virtual Machine Specification」で詳細に説明されているため、本実施の形態に関連の深い箇所のみを簡単に説明する。
図11はJava(登録商標)言語により記述されたクラスファイルの一例を示す図である。
クラス名1101は、このクラスの名前であり、例ではクラスの名前はSampleである。フィールド1102はSampleクラスが定義するフィールドである。フィールド1102は、メソッド実行時の計算結果の値を記憶させる領域として使うことができる。メソッド1103およびメソッド1104は、Sampleクラスで定義されている2つのメソッドである。ここで、メソッドとは、クラスの処理内容を定義したものである。
Java(登録商標)言語でクラスを定義したソ-スファイル1100は、Java(登録商標)コンパイラによりクラスファイル300に変換される。変換されたクラスファイル300は、クラス構造情報301、コンスタントプール302、バイトコード303から構成される。
図12は、クラス1100がコンパイルされたときのクラスファイル300のコンスタントプール302を示す図である。
列1201は、コンスタントプール302のエントリ番号を示すインデックスであり、コンスタントプール302の参照はインデックスで表現する。列1202はコンスタントプールの型である。コンスタントプールは、記録する情報の種類に応じて型が決められている。列1203はコンスタントプールの値である。
たとえば、インデックス1は、インデックス3のクラスで宣言されているクラスにおいて、インデックス13の示すメソッドへの参照であることを意味する。インデックス3は、CONSTANT_Classはクラスへの参照を表している。インデックス3は、インデックス15の名前を持ったクラスへの参照であり、インデックス15のCONSTANT_Utf8は、クラス、メソッド、フィールドの名前を表している。インデックス15の例ではクラスの名前は“Sample”である。インデックス13のCONSTANT_NameAndTypeは、メソッドやフィールドの名前と型記述子の参照を表す。型記述子とは、フィールドの型や、メソッドの引数、戻り値の型を文字列で表現したものである。インデックス13の例では、このコンスタントプール302は名前がインデックス8、型記述子がインデックス18である。その値は、それぞれ”<init>“、”()V“である。つまり、インデックス1のメソッド参照は、名前が”<init>“で型記述子が”()V“であるメソッドへの参照になる。また、インデックス2のCONSTANT_FieldRefはこのコンスタントプール302がフィールドへの参照であることを表している。インデックス2は、クラス”Sample“で定義された、名前が”field“で、型記述子が”I“のフィールドを参照している。
図13は、クラス1100のクラス構造情報301の一部である。this_class1301はクラス1100の名前への参照である。クラスの名前はコンスタントプール302のインデックス15に記録されている。super_class1302は、クラス1100の親クラスである。filed_count1303は、クラス1100で定義されているフィールドの数を表す。フィールドは、メソッドの処理結果などを記憶させることができる領域である。フィールド情報1304は、クラス1100で定義されているフィールドの名前、アクセス権などの情報が記録されている。method_count1305は、クラス1100で定義されているメソッドの数を表す。メソッド情報1306は、クラス1100で定義されているメソッドの名前、バイトコードのアドレスなどが記録されている。
図14は、クラス1100で定義されているメソッド1104のバイトコード303である。バイトコード303からは、コンスタントプール302を使いクラス、フィールド、メソッドへアクセスする。たとえば、命令1401ではインデックス3のコンスタントプール302を参照している。
バイトコードインタプリタ201は、バイトコード303の実行時に、コンスタントプール302を参照している命令、つまり図14で#の記号によりコンスタントプール302のインデックスを指定している命令があると、メタ情報管理部131にコンスタントプール解決処理を依頼し、コンスタントプール解決処理により得られた情報を用いて命令の処理をする。バイトコードインタプリタ201は、コンスタントプール302のインデックスを指定していない命令は独自に実行する。ここで、コンスタントプール解決処理とは、コンスタントプール302において文字列で表現されているクラス、フィールド、メソッドが第1RAM125内のどのアドレスに記憶されているかを調べる処理のことである。
図15は、図14の命令1401を実行する処理のフローチャートである。
図15において、バイトコードインタプリタ201は、命令1401をフェッチする。命令1402は、コンスタントプール302のインデックス3の位置に記憶されているクラス型のオブジェクトを生成する命令である。コンスタントプール302は、第2RAM135が記憶しているため、バイトコードインタプリタ201はコンスタントプール302へアクセスできない。そのため、バイトコードインタプリタ201はメタ情報管理部131へ、命令1401の内容を通知する。(S1501)。メタ情報管理部131は、命令1401を読み出し、命令1401が参照するインデックス3で、第2RAM135が記憶するコンスタントプール302を検索する(S1502)。本実施の形態では、クラス名“Sample”が得られる。
次に、メタ情報管理部131は、“Sample”クラスのクラス構造情報301からオブジェクトのサイズを計算する。(S1503)。ここで、オブジェクトのサイズは、そのクラスが宣言するフィールドの数と型記述子から計算される。たとえば“Sample”クラスの場合int型のフィールドを1つ持つため、オブジェクトサイズは4(バイト)になる。
次に、メタ情報管理部131は“Sample”クラスを表すクラスIDを生成する(S1504)。クラスIDは、生成されたオブジェクトがどのクラスから生成されたのかを識別するために用いる情報である。クラスIDはたとえば32ビットの整数値を用いて実現できる。メタ情報管理部131は、クラスIDと、クラス名で代表するクラス構造情報301との対応関係を、第2RAM134が記憶するクラスID対応テーブルに記憶させる。
図16は、クラスID対応テーブルの一例を示す図である。列1610はクラス名を表しており、列1611はクラスIDを表している。たとえば行1601の例では“Sample”のクラス名で代表するクラス構造情報301は、クラスIDが1と対応付けられていることを表している。
図15に戻って、メタ情報管理部131は、S1503で計算したオブジェクトサイズと、S1504で生成したクラスIDを第1RAM125へ記憶させ、バイトコードインタプリタ201へ通知する(S1505)。その後、バイトコードインタプリタ201は通知されたオブジェクトサイズ分のメモリを確保し(S1506)、オブジェクトヘッダに通知されたクラスIDを記録する(S1507)。ここで、オブジェクトヘッダは、オブジェクトに関する様々な情報を記録する領域である。
以上の処理により、バイトコードインタプリタ201は、メタ情報を知ることなく、命令1401を実行することができる。この時、悪意のある第三者がコンスタントプール302の内容の盗聴を試みても、コンスタントプール302は第2RAM135に記録されているため盗聴することができない。また、悪意のある第三者がバイトコードインタプリタ201とメタ情報管理部131間の通信内容を盗聴したとしても、コンスタントプール302のインデックスと、確保すべきオブジェクトサイズが得られるだけであり、コンスタントプールの内容は漏洩しない。つまり、悪意のある第三者からコンスタントプール302の内容を秘匿することができる。
なお、クラスID対応テーブル1600において、クラスIDとクラス構造情報301の対応は必ずしも1対1である必要はない。
図17は、ひとつのクラス構造情報301に対し複数のクラスIDが対応する例を示す図である。このように構成することにより、デバッガなどのツールが第1RAM125を盗聴したときに、どのオブジェクトがどのクラスに対応するものか解析することが困難になる。
続いて、命令1402〜命令1403は、コンスタントプール302への参照を含まないため、バイトコードインタプリタ201はメタ情報管理部131を呼び出すことなく命令を実行することができる。命令1404は、コンスタントプール302への参照を伴う命令である。命令1404は、第2RAM135が記憶するコンスタントプール302のインデックス2の位置に記憶されているクラス名、メソッド名で表されるメソッドのバイトコードを呼び出す命令である。
図18は、バイトコードインタプリタ201が、命令1404を実行する処理のフローチャートである。
バイトコードインタプリタ201は、命令1404をフェッチし、命令1404の内容と、レシーバオブジェクトのアドレスをメタ情報管理部131へ通知する(S1801)。
ここで、レシーバオブジェクトとは、メソッドを実行する対象のオブジェクトのことである。Java(登録商標)言語では、メソッドの処理はレシーバオブジェクトが記憶するフィールドを用いて行われる。メタ情報管理部131は、レシーバオブジェクトのオブジェクトヘッダに記憶されているクラスIDを、第2RAM134が記憶するクラスID対応テーブル1600から検索し、クラスIDに対応するクラス構造情報301を検索する(S1802)。図16に示すように、クラスIDは「1」であるので、図13のクラス構造情報301が検索される。
次に、メタ情報管理部131は、コンスタントプール302からインデックス4を検索し、メソッド名“<init>”と型記述子”()V“を得る(S1803)。次に、メタ情報管理部131は、S1802で検索したクラス構造情報301に含まれるメソッド情報1306から、S1803で検索したメソッド名と型記述子を持つメソッドを検索し、そのバイトコードアドレスを得る(S1804)。次に、メタ情報管理部131は、S1804で得たバイトコードアドレスをインタプリタ201へ通知する(S1805)。バイトコードインタプリタ201は、メタ情報管理部131から通知されたバイトコードアドレスを実行する(S1806)。
以上の動作によりバイトコードインタプリタ201は、メタ情報を知ることなく命令1404を実行することができる。この時、悪意のある第三者がコンスタントプール302の内容の盗聴を試みても、コンスタントプール302は第2RAM135に記録されているため盗聴することができない。また、悪意のある第三者がバイトコードインタプリタ201とメタ情報管理部131間の通信内容を盗聴したとしても、コンスタントプール302のインデックスと、次に実行すべきバイトコードアドレスが得られるだけであり、コンスタントプールの内容は漏洩しない。つまり、悪意のある第三者からコンスタントプール302の内容を秘匿することができる。
続いて、命令1405〜命令1406は、コンスタントプール302への参照を含まないため、バイトコードインタプリタ201はメタ情報管理部131を呼び出すことなく命令を実行することができる。
命令1407は、コンスタントプール302への参照を伴う命令である。命令1407は、第2RAM135が記憶するコンスタントプール302のインデックス2の位置に記憶されている、クラス名、フィールド名で表されるフィールドを読み出す命令である。コンスタントプール302は、第2RAM135が記憶しているため、バイトコードインタプリタ201はコンスタントプール302へアクセスできない。図19は、バイトコードインタプリタ201が、命令1407を実行する処理のフローチャートである。
バイトコードインタプリタは命令1407をフェッチすると、メタ情報管理部131を呼び出し、命令1407の内容と、命令1407の実行直前のJava(登録商標)スタックの最上位にあるオブジェクトのアドレスを通知する(S1901)。
ここで、Java(登録商標)スタックについては「Java(登録商標) Virtual Machine Specification」を参照されたい。
メタ情報管理部131は、通知されたオブジェクトのオブジェクトヘッダに記憶されているクラスIDを、第2RAM134が記憶するクラスID対応テーブル1600から検索し、クラスIDに対応するクラス構造情報301を検索する。(S1902)本実施の形態では、クラスIDは「1」であるので、クラス構造情報301が検索される。
次に、メタ情報管理部131は、コンスタントプール302からインデックス2を検索し、フィールド名“field”と型記述子”I“を得る。(S1903)次に、メタ情報管理部131は、S1902で検索したクラス構造情報301に含まれるフィールド情報1304から、S1903で検索したフィールド名と型記述子を持つフィールドを検索し、そのフィールドのアドレスを得る。(S1904)次に、メタ情報管理部131は、第1RAM125へ、S1904で得たフィールドアドレスを記憶させ、バイトコードインタプリタ201へそのアドレスを通知する(S1905)。バイトコードインタプリタ201は、メタ情報管理部131から通知されたフィールドアドレスを読み取る(S1906)。
以上の動作により、バイトコードインタプリタ201は、メタ情報を知ることなく命令1407を実行することができる。この時、悪意のある第三者がコンスタントプール302の内容の盗聴を試みても、コンスタントプール302は第2RAM135に記録されているため盗聴することができない。また、悪意のある第三者がバイトコードインタプリタ201とメタ情報管理部131間の通信内容を盗聴したとしても、コンスタントプール302のインデックスと、データを読み出すためのフィールドのアドレスが得られるだけであり、コンスタントプールの内容は漏洩しない。つまり、悪意のある第三者からコンスタントプール302の内容を秘匿することができる。
以上に説明したように、メタ情報(クラス構造情報301、コンスタントプール302)はデバッガからアクセスすることができない第2RAM134のみが記憶するため、悪意のある第三者がデバッガなどのツールを使ってJava(登録商標)アプリケーションの不正コピーを試みても、メタ情報が取得できない。また、Java(登録商標)アプリケーションの実行時に、データの盗聴、改ざんを試みても、メタ情報を読み出すことができないため、どのメソッドやデータを盗聴、改ざんすればよいかが分からず、攻撃が非常に困難になる。
なお、アプリ取得プログラム121、Java(登録商標)仮想マシン122は、第1CPU124で実行されるソフトウェアで実現されるとしたけれども、LSI等のハードウェアで実現されてもよいのは勿論である。
(実施の形態2)
上記実施の形態1では、クラスローダ202やベリファイヤ203はJava(登録商標)仮想マシン122のサブプログラムとして通常実行部120で動作している。このため、図10に示したクラスロード処理のS1001完了後から、S1005までの間にデバッガ等のツールで第1RAM125を盗聴することで、メタ情報が漏洩する課題がある。本実施の形態2では、クラスローダ202、ベリファイヤ203を安全な実行部130で動作させることによりこの課題を解決する。
図20は、実施の形態2におけるアプリケーション実行装置の構成を示すブロック図である。
本実施の形態におけるアプリケーション実行装置2010は、実施の形態1におけるアプリケーション実行装置110と比べ、第1Java(登録商標)仮想マシン2022、第2Java(登録商標)仮想マシン2032、復号処理部2034が異なる。その他の構成要素については、実施の形態1と同様であるため説明を省略する。
図21は、第1Java(登録商標)仮想マシン2022、第2Java(登録商標)仮想マシン2032のサブプログラムの構成を示す図である。
クラスローダ2106、ベリファイヤ2107は、安全な実行部2030で実行するため第2Java(登録商標)仮想マシン2032のサブプログラムとする。
また、図22に示すように、第1ROM2026は、第1Java(登録商標)仮想マシン2201、第2Java(登録商標)仮想マシン2202を記憶している。
図23は、Java(登録商標)仮想マシンローダ2033が、第1Java(登録商標)仮想マシン2022、第2Java(登録商標)仮想マシン2032をロードする処理手順を示すフローチャートである。
図23のS2301で、Java(登録商標)仮想マシンローダ2033は、復号処理部2034へ、第1Java(登録商標)仮想マシン2201を復号し、結果を第1RAM2036へ出力するよう指示する。
そして、Java(登録商標)仮想マシンローダ2033は、復号処理部2034に対し、第2Java(登録商標)仮想マシン2202を復号し、結果を第2RAM2036へ出力するよう指示する(S2302)。最後に、OS2023へロードの完了を通知する(S2303)。
以上でJava(登録商標)仮想マシンをロードすることができる。
クラスのロード処理は、クラスローダ2106、ベリファイヤ2107の動作を安全な実行部2010で実行すること以外は、実施の形態1と同様のため説明を省略する。また、クラスの実行処理も、実施の形態1と同様であるため説明を省略する。
以上のように構成することにより、クラスのロード処理の処理中のときでも、復号されたメタ情報のデバッガなどのツールによる盗聴、改ざんを防ぐことができる。
なお、実施の形態1および実施の形態2ではJava(登録商標)アプリケーションを実行するアプリケーション実行装置を例に説明したが、本発明はメタ情報を持つ他の言語で記述されたアプリケーションにも適用が可能である。たとえば、ECMAで標準化されているC#言語は、CIL(Common Intermediate Language)と呼ばれる中間言語(Java(登録商標)におけるバイトコードに相当)をCLI(Common Laguage Infrastructure)と呼ばれる仮想マシン(Java(登録商標)におけるJava(登録商標)仮想マシンに相当)が実行する方式をとる。C#言語におけるメタ情報はECMA−355規格のPartition IIで定義されている。
なお、実施の形態1、実施の形態2では、クラスファイルに含まれるすべてのメタ情報を、第2RAM135のみへ記憶させたが、一部のメタ情報を第1RAM125へ記憶させてもよい。この場合、第1RAM125へ記憶させた情報については、デバッガなどのツールにより解析される恐れがあるが、通常の実行部120と安全な実行部130とのインタラクションを削減できるため、より速くアプリケーションを実行できるようになる。
一部のメタ情報だけでは完全なクラスを復元することはできないが、入手したメタ情報から他のメタ情報を推定することで完全なクラスを復元することができる可能性がある。どれだけのメタ情報を隠蔽すれば十分であるかは、実行プログラムに求められる保護要件に基づき決定すればよい。
本発明に係るアプリケーション実行装置は、アプリケーションの実行、解析に不可欠なメタ情報を、盗聴、改ざんが困難な安全実行部へと隠蔽することで、アプリケーションを実行時の盗聴、改ざんから保護することができ、アプリケーションのダウンロード配信ビジネスにおいて、コンテンツ作成者の権利を保護することができる。
本発明に係るアプリケーション実行装置の実施の形態1の構成図である。 上記実施の形態のJava(登録商標)仮想マシンの構成を示す図である。 上記実施の形態のJava(登録商標)クラスファイルの構造図である。 上記実施の形態の第1ROMに記憶されている情報の一例の構成図である。 上記実施の形態のアプリ取得プログラムの構成の一例の構造図である。 上記実施の形態のメタ情報の処理手順を示すフローチャートである。 上記実施の形態の第2ROMに記憶されている情報の一例の構成図である。 上記実施の形態のJava(登録商標)仮想マシンをロードする処理手順を示すフローチャートである。 上記実施の形態の復号の処理手順を示すフローチャートである。 上記実施の形態のクラスをロードする処理手順を示すフローチャートである。 上記実施の形態のJava(登録商標)クラスの一例を示す図である。 上記実施の形態のコンスタントプールの一例を示す図である。 上記実施の形態のクラス構造情報の一例を示す図である。 上記実施の形態のバイトコードの一例を示す図である。 上記実施の形態のバイトコードのnew命令の処理手順を示すフローチャートである。 上記実施の形態のクラスID対応テーブルの一例を表す図である。 上記実施の形態のクラスID対応テーブルの別の一例を表す図である。 上記実施の形態のinvokespecial命令を実行する際のバイトコードインタプリタおよびメタ情報管理部のフローチャートである。 上記実施の形態のgetfield命令を実行する際のバイトコードインタプリタおよびメタ情報管理部のフローチャートである。 本発明に係るアプリケーション実行装置の実施の形態2の構成図である。 上記実施の形態の仮想マシンの構成を示す図である。 上記実施の形態の第1ROMに記憶されている情報の一例を示す図である。 上記実施の形態のJava(登録商標)仮想マシンをロードする処理手順を示すフローチャートである。
符号の説明
100,2000 ダウンロード可能なプログラム
110,2010 アプリケーション実行装置
120,2020 通常実行部
121,2021 アプリ取得プログラム
122 Java(登録商標)仮想マシン
123,2023 OS
124,2024 第1CPU
125,2025 第1RAM
126,2026 第1ROM
130,2030 安全な実行部
131,2031 メタ情報管理部
132,2033 Java(登録商標)仮想マシンローダ
133,2034 復号処理部
134,2035 第2CPU
135,2036 第2RAM
136,2037 第2ROM
201,2101 バイトコードインタプリタ
202,2106 クラスローダ
203,2107 ベリファイヤ
204,2103 Java(登録商標)ヒープ管理部
205,2104 Java(登録商標)ネイティライブラリ
206,2105 JITコンパイラ
300 クラスファイル
301 クラス構造情報
302 コンスタントプール
303 バイトコード
401 暗号化されたJava(登録商標)仮想マシン
402 暗号化されたアプリ取得プログラム
403 暗号化されたメタ情報管理部
404 起動クラス名
501 暗号化されたサブクラス
701 復号鍵
1100 Java(登録商標)言語によるクラス定義ファイル
1600 クラスID対応テーブル(例1)
1700 クラスID対応テーブル(例2)
2022 第1Java(登録商標)仮想マシン
2032 第2Java(登録商標)仮想マシン

Claims (9)

  1. 取得したアプリケーションをクラス単位で実行するアプリケーション実行装置であって、
    クラスファイルに含まれるメタ情報を記憶するメタ情報記憶手段と、
    クラスファイルに含まれる命令列を記憶する命令列記憶手段と、
    参照すべき情報のない命令を実行し、参照すべき第1情報があるとき要求し、通知された第2情報を用いて命令を実行する命令実行手段と、
    前記命令実行手段の要求に応じて前記メタ情報から第2情報を生成し、前記命令実行手段に通知するメタ情報実行手段とを備え、
    前記メタ情報記憶手段に記憶されたメタ情報は、前記メタ情報実行手段だけが読み出すことができ、前記メタ情報実行手段は、前記命令実行手段の要求だけを受け付けることを特徴とするアプリケーション実行装置。
  2. 前記メタ情報記憶手段は、インデックスとコンスタントプールの型とその値とを記載したコンスタントプールと、項目とその値とを記載したクラス構造情報とを記憶し、
    前記命令列記憶手段は、クラスで定義されているメソッドのバイトコードを記憶し、
    前記メタ情報実行手段は、前記命令実行手段がバイトコードに第1情報であるコンスタントプールのインテックスが指定されている命令を実行するとき、その命令の種類に応じて前記コンスタントプールとクラス構造情報とを参照して第2情報を生成することを特徴とする請求項1記載のアプリケーション実行装置。
  3. 前記命令実行手段が実行するバイトコードが新しいオブジェクトの生成であるとき、
    前記メタ情報実行手段は、指定されたインデックスに対応するコンスタントプールの型を前記コンスタントプールから検索し、前記クラス構造情報を参照して、メモリサイズを生成することを特徴とする請求項2記載のアプリケーション実行装置。
  4. 前記命令実行手段が実行するバイトコードがメソッドの呼び出しであるとき、
    前記メタ情報実行手段は、指定されたインデックスに対応するコンスタントプールの型を前記コンスタントプールから検索し、前記クラス構造情報を参照して前記メソッドのアドレスを生成することを特徴とする請求項2記載のアプリケーション実行装置。
  5. 前記命令実行手段が実行するバイトコードがオブジェクトのフィールド参照であるとき、
    前記メタ情報実行手段は、指定されたインデックスに対応するコンスタントプールの型を前記コンスタントプールから検索し、前記クラス構造情報を参照して、前記フィールドのアドレスを生成することを特徴とする請求項2記載のアプリケーション実行装置。
  6. 前記取得されたアプリケーションは暗号化されており、
    前記暗号化されたアプリケーションを復号し、復号された命令列を前記命令列記憶手段に記憶させ、復号されたメタ情報を前記メタ情報記憶手段に記憶させる復号手段を更に備えることを特徴とする請求項1記載のアプリケーション実行装置。
  7. 前記復号手段は、
    外部から直接アクセスできない鍵記憶手段に記憶された復号鍵を用いて前記アプリケーションを復号することを特徴とする請求項6記載のアプリケーション実行装置。
  8. 前記アプリケーションは、Java(登録商標)アプリケーションであることを特徴とする請求項1記載のアプリケーション実行装置。
  9. 取得したアプリケーションをクラス単位で実行するアプリケーション実行装置のアプリケーション実行方法であって、
    クラスファイルに含まれるメタ情報を記録するメタ情報記録ステップと、
    クラスファイルに含まれる命令列を記録する命令列記録ステップと、
    参照すべき情報のない命令を実行し、参照すべき第1情報があるとき要求し、通知された第2情報を用いて命令を実行する命令実行ステップと、
    前記命令実行ステップの要求に応じて前記メタ情報から第2情報を生成し、前記命令実行ステップに通知するメタ情報実行ステップとを有し、
    前記メタ情報記録ステップに記録されたメタ情報は、前記メタ情報実行ステップだけが読み出すことができ、前記メタ情報実行ステップは、前記命令実行ステップの要求だけを受け付けることを特徴とするアプリケーション実行装置のアプリケーション実行方法。
JP2006529155A 2004-07-16 2005-07-14 アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法 Withdrawn JPWO2006009081A1 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2004210764 2004-07-16
JP2004210764 2004-07-16
PCT/JP2005/013069 WO2006009081A1 (ja) 2004-07-16 2005-07-14 アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法

Publications (1)

Publication Number Publication Date
JPWO2006009081A1 true JPWO2006009081A1 (ja) 2008-05-01

Family

ID=35785194

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006529155A Withdrawn JPWO2006009081A1 (ja) 2004-07-16 2005-07-14 アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法

Country Status (4)

Country Link
US (1) US20070271446A1 (ja)
JP (1) JPWO2006009081A1 (ja)
CN (1) CN100465982C (ja)
WO (1) WO2006009081A1 (ja)

Families Citing this family (156)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8566946B1 (en) 2006-04-20 2013-10-22 Fireeye, Inc. Malware containment on connection
US8793787B2 (en) 2004-04-01 2014-07-29 Fireeye, Inc. Detecting malicious network content using virtual environment components
US8584239B2 (en) 2004-04-01 2013-11-12 Fireeye, Inc. Virtual machine with dynamic data flow analysis
US8549638B2 (en) 2004-06-14 2013-10-01 Fireeye, Inc. System and method of containing computer worms
US8898788B1 (en) 2004-04-01 2014-11-25 Fireeye, Inc. Systems and methods for malware attack prevention
US7587537B1 (en) 2007-11-30 2009-09-08 Altera Corporation Serializer-deserializer circuits formed from input-output circuit registers
US9027135B1 (en) 2004-04-01 2015-05-05 Fireeye, Inc. Prospective client identification using malware attack detection
US8881282B1 (en) 2004-04-01 2014-11-04 Fireeye, Inc. Systems and methods for malware attack detection and identification
US8171553B2 (en) 2004-04-01 2012-05-01 Fireeye, Inc. Heuristic based capture with replay to virtual machine
US9106694B2 (en) 2004-04-01 2015-08-11 Fireeye, Inc. Electronic message analysis for malware detection
US8375444B2 (en) 2006-04-20 2013-02-12 Fireeye, Inc. Dynamic signature creation and enforcement
US8539582B1 (en) 2004-04-01 2013-09-17 Fireeye, Inc. Malware containment and security analysis on connection
US8528086B1 (en) 2004-04-01 2013-09-03 Fireeye, Inc. System and method of detecting computer worms
US8302188B2 (en) 2006-07-18 2012-10-30 Panasonic Corporation Instruction generation apparatus for generating a computer program resistant to unauthorized analyses and tampering
JP2009258772A (ja) * 2006-08-09 2009-11-05 Panasonic Corp アプリケーション実行装置
US8997219B2 (en) * 2008-11-03 2015-03-31 Fireeye, Inc. Systems and methods for detecting malicious PDF network content
US8850571B2 (en) 2008-11-03 2014-09-30 Fireeye, Inc. Systems and methods for detecting malicious network content
US8832829B2 (en) 2009-09-30 2014-09-09 Fireeye, Inc. Network-based binary file extraction and analysis for malware detection
US9519782B2 (en) 2012-02-24 2016-12-13 Fireeye, Inc. Detecting malicious network content
US10572665B2 (en) 2012-12-28 2020-02-25 Fireeye, Inc. System and method to create a number of breakpoints in a virtual machine via virtual machine trapping events
US9367681B1 (en) 2013-02-23 2016-06-14 Fireeye, Inc. Framework for efficient security coverage of mobile software applications using symbolic execution to reach regions of interest within an application
US9009822B1 (en) 2013-02-23 2015-04-14 Fireeye, Inc. Framework for multi-phase analysis of mobile applications
US9824209B1 (en) 2013-02-23 2017-11-21 Fireeye, Inc. Framework for efficient security coverage of mobile software applications that is usable to harden in the field code
US9159035B1 (en) 2013-02-23 2015-10-13 Fireeye, Inc. Framework for computer application analysis of sensitive information tracking
US9009823B1 (en) 2013-02-23 2015-04-14 Fireeye, Inc. Framework for efficient security coverage of mobile software applications installed on mobile devices
US8990944B1 (en) 2013-02-23 2015-03-24 Fireeye, Inc. Systems and methods for automatically detecting backdoors
US9195829B1 (en) 2013-02-23 2015-11-24 Fireeye, Inc. User interface with real-time visual playback along with synchronous textual analysis log display and event/time index for anomalous behavior detection in applications
US9176843B1 (en) 2013-02-23 2015-11-03 Fireeye, Inc. Framework for efficient security coverage of mobile software applications
US9104867B1 (en) 2013-03-13 2015-08-11 Fireeye, Inc. Malicious content analysis using simulated user interaction without user involvement
US9626509B1 (en) 2013-03-13 2017-04-18 Fireeye, Inc. Malicious content analysis with multi-version application support within single operating environment
US9565202B1 (en) 2013-03-13 2017-02-07 Fireeye, Inc. System and method for detecting exfiltration content
US9355247B1 (en) 2013-03-13 2016-05-31 Fireeye, Inc. File extraction from memory dump for malicious content analysis
US9430646B1 (en) 2013-03-14 2016-08-30 Fireeye, Inc. Distributed systems and methods for automatically detecting unknown bots and botnets
US9311479B1 (en) 2013-03-14 2016-04-12 Fireeye, Inc. Correlation and consolidation of analytic data for holistic view of a malware attack
WO2014145805A1 (en) 2013-03-15 2014-09-18 Mandiant, Llc System and method employing structured intelligence to verify and contain threats at endpoints
US9251343B1 (en) 2013-03-15 2016-02-02 Fireeye, Inc. Detecting bootkits resident on compromised computers
US10713358B2 (en) 2013-03-15 2020-07-14 Fireeye, Inc. System and method to extract and utilize disassembly features to classify software intent
US9495180B2 (en) 2013-05-10 2016-11-15 Fireeye, Inc. Optimized resource allocation for virtual machines within a malware content detection system
US9635039B1 (en) 2013-05-13 2017-04-25 Fireeye, Inc. Classifying sets of malicious indicators for detecting command and control communications associated with malware
US10133863B2 (en) 2013-06-24 2018-11-20 Fireeye, Inc. Zero-day discovery system
US9536091B2 (en) 2013-06-24 2017-01-03 Fireeye, Inc. System and method for detecting time-bomb malware
US9300686B2 (en) 2013-06-28 2016-03-29 Fireeye, Inc. System and method for detecting malicious links in electronic messages
US9888016B1 (en) 2013-06-28 2018-02-06 Fireeye, Inc. System and method for detecting phishing using password prediction
US9294501B2 (en) 2013-09-30 2016-03-22 Fireeye, Inc. Fuzzy hash of behavioral results
US10192052B1 (en) 2013-09-30 2019-01-29 Fireeye, Inc. System, apparatus and method for classifying a file as malicious using static scanning
US10089461B1 (en) 2013-09-30 2018-10-02 Fireeye, Inc. Page replacement code injection
US9690936B1 (en) 2013-09-30 2017-06-27 Fireeye, Inc. Multistage system and method for analyzing obfuscated content for malware
US9736179B2 (en) 2013-09-30 2017-08-15 Fireeye, Inc. System, apparatus and method for using malware analysis results to drive adaptive instrumentation of virtual machines to improve exploit detection
US9628507B2 (en) 2013-09-30 2017-04-18 Fireeye, Inc. Advanced persistent threat (APT) detection center
US9171160B2 (en) 2013-09-30 2015-10-27 Fireeye, Inc. Dynamically adaptive framework and method for classifying malware using intelligent static, emulation, and dynamic analyses
US10515214B1 (en) 2013-09-30 2019-12-24 Fireeye, Inc. System and method for classifying malware within content created during analysis of a specimen
US9921978B1 (en) 2013-11-08 2018-03-20 Fireeye, Inc. System and method for enhanced security of storage devices
US9189627B1 (en) 2013-11-21 2015-11-17 Fireeye, Inc. System, apparatus and method for conducting on-the-fly decryption of encrypted objects for malware detection
US9747446B1 (en) 2013-12-26 2017-08-29 Fireeye, Inc. System and method for run-time object classification
US9756074B2 (en) 2013-12-26 2017-09-05 Fireeye, Inc. System and method for IPS and VM-based detection of suspicious objects
US9740857B2 (en) 2014-01-16 2017-08-22 Fireeye, Inc. Threat-aware microvisor
US9262635B2 (en) 2014-02-05 2016-02-16 Fireeye, Inc. Detection efficacy of virtual machine-based analysis with application specific events
US9241010B1 (en) 2014-03-20 2016-01-19 Fireeye, Inc. System and method for network behavior detection
US10242185B1 (en) 2014-03-21 2019-03-26 Fireeye, Inc. Dynamic guest image creation and rollback
US9591015B1 (en) 2014-03-28 2017-03-07 Fireeye, Inc. System and method for offloading packet processing and static analysis operations
US9432389B1 (en) 2014-03-31 2016-08-30 Fireeye, Inc. System, apparatus and method for detecting a malicious attack based on static analysis of a multi-flow object
US9223972B1 (en) 2014-03-31 2015-12-29 Fireeye, Inc. Dynamically remote tuning of a malware content detection system
US9973531B1 (en) 2014-06-06 2018-05-15 Fireeye, Inc. Shellcode detection
US9438623B1 (en) 2014-06-06 2016-09-06 Fireeye, Inc. Computer exploit detection using heap spray pattern matching
US9594912B1 (en) 2014-06-06 2017-03-14 Fireeye, Inc. Return-oriented programming detection
US10084813B2 (en) 2014-06-24 2018-09-25 Fireeye, Inc. Intrusion prevention and remedy system
US10805340B1 (en) 2014-06-26 2020-10-13 Fireeye, Inc. Infection vector and malware tracking with an interactive user display
US9398028B1 (en) 2014-06-26 2016-07-19 Fireeye, Inc. System, device and method for detecting a malicious attack based on communcations between remotely hosted virtual machines and malicious web servers
US10002252B2 (en) 2014-07-01 2018-06-19 Fireeye, Inc. Verification of trusted threat-aware microvisor
TWI502400B (zh) * 2014-07-30 2015-10-01 Elan Microelectronics Corp 微處理器及其資料保密方法
US9363280B1 (en) 2014-08-22 2016-06-07 Fireeye, Inc. System and method of detecting delivery of malware using cross-customer data
US10671726B1 (en) 2014-09-22 2020-06-02 Fireeye Inc. System and method for malware analysis using thread-level event monitoring
US9773112B1 (en) 2014-09-29 2017-09-26 Fireeye, Inc. Exploit detection of malware and malware families
US10027689B1 (en) 2014-09-29 2018-07-17 Fireeye, Inc. Interactive infection visualization for improved exploit detection and signature generation for malware and malware families
US9690933B1 (en) 2014-12-22 2017-06-27 Fireeye, Inc. Framework for classifying an object as malicious with machine learning for deploying updated predictive models
US10075455B2 (en) 2014-12-26 2018-09-11 Fireeye, Inc. Zero-day rotating guest image profile
US9934376B1 (en) 2014-12-29 2018-04-03 Fireeye, Inc. Malware detection appliance architecture
US9838417B1 (en) 2014-12-30 2017-12-05 Fireeye, Inc. Intelligent context aware user interaction for malware detection
US10148693B2 (en) 2015-03-25 2018-12-04 Fireeye, Inc. Exploit detection system
US9690606B1 (en) 2015-03-25 2017-06-27 Fireeye, Inc. Selective system call monitoring
US9438613B1 (en) 2015-03-30 2016-09-06 Fireeye, Inc. Dynamic content activation for automated analysis of embedded objects
US10474813B1 (en) 2015-03-31 2019-11-12 Fireeye, Inc. Code injection technique for remediation at an endpoint of a network
US10417031B2 (en) 2015-03-31 2019-09-17 Fireeye, Inc. Selective virtualization for security threat detection
US9483644B1 (en) 2015-03-31 2016-11-01 Fireeye, Inc. Methods for detecting file altering malware in VM based analysis
US9654485B1 (en) 2015-04-13 2017-05-16 Fireeye, Inc. Analytics-based security monitoring system and method
US9594904B1 (en) 2015-04-23 2017-03-14 Fireeye, Inc. Detecting malware based on reflection
US10642753B1 (en) 2015-06-30 2020-05-05 Fireeye, Inc. System and method for protecting a software component running in virtual machine using a virtualization layer
US10726127B1 (en) 2015-06-30 2020-07-28 Fireeye, Inc. System and method for protecting a software component running in a virtual machine through virtual interrupts by the virtualization layer
US10454950B1 (en) 2015-06-30 2019-10-22 Fireeye, Inc. Centralized aggregation technique for detecting lateral movement of stealthy cyber-attacks
US11113086B1 (en) 2015-06-30 2021-09-07 Fireeye, Inc. Virtual system and method for securing external network connectivity
US10715542B1 (en) 2015-08-14 2020-07-14 Fireeye, Inc. Mobile application risk analysis
US10176321B2 (en) 2015-09-22 2019-01-08 Fireeye, Inc. Leveraging behavior-based rules for malware family classification
US10033747B1 (en) 2015-09-29 2018-07-24 Fireeye, Inc. System and method for detecting interpreter-based exploit attacks
US10817606B1 (en) 2015-09-30 2020-10-27 Fireeye, Inc. Detecting delayed activation malware using a run-time monitoring agent and time-dilation logic
US10706149B1 (en) 2015-09-30 2020-07-07 Fireeye, Inc. Detecting delayed activation malware using a primary controller and plural time controllers
US10210329B1 (en) 2015-09-30 2019-02-19 Fireeye, Inc. Method to detect application execution hijacking using memory protection
US9825976B1 (en) 2015-09-30 2017-11-21 Fireeye, Inc. Detection and classification of exploit kits
US10601865B1 (en) 2015-09-30 2020-03-24 Fireeye, Inc. Detection of credential spearphishing attacks using email analysis
US9825989B1 (en) 2015-09-30 2017-11-21 Fireeye, Inc. Cyber attack early warning system
US10284575B2 (en) 2015-11-10 2019-05-07 Fireeye, Inc. Launcher for setting analysis environment variations for malware detection
US10846117B1 (en) 2015-12-10 2020-11-24 Fireeye, Inc. Technique for establishing secure communication between host and guest processes of a virtualization architecture
US10447728B1 (en) 2015-12-10 2019-10-15 Fireeye, Inc. Technique for protecting guest processes using a layered virtualization architecture
US10108446B1 (en) 2015-12-11 2018-10-23 Fireeye, Inc. Late load technique for deploying a virtualization layer underneath a running operating system
US10133866B1 (en) 2015-12-30 2018-11-20 Fireeye, Inc. System and method for triggering analysis of an object for malware in response to modification of that object
US10621338B1 (en) 2015-12-30 2020-04-14 Fireeye, Inc. Method to detect forgery and exploits using last branch recording registers
US10565378B1 (en) 2015-12-30 2020-02-18 Fireeye, Inc. Exploit of privilege detection framework
US10050998B1 (en) 2015-12-30 2018-08-14 Fireeye, Inc. Malicious message analysis system
US11552986B1 (en) 2015-12-31 2023-01-10 Fireeye Security Holdings Us Llc Cyber-security framework for application of virtual features
US10581874B1 (en) 2015-12-31 2020-03-03 Fireeye, Inc. Malware detection system with contextual analysis
US9824216B1 (en) 2015-12-31 2017-11-21 Fireeye, Inc. Susceptible environment detection system
US10671721B1 (en) 2016-03-25 2020-06-02 Fireeye, Inc. Timeout management services
US10476906B1 (en) 2016-03-25 2019-11-12 Fireeye, Inc. System and method for managing formation and modification of a cluster within a malware detection system
US10601863B1 (en) 2016-03-25 2020-03-24 Fireeye, Inc. System and method for managing sensor enrollment
US10785255B1 (en) 2016-03-25 2020-09-22 Fireeye, Inc. Cluster configuration within a scalable malware detection system
US10893059B1 (en) 2016-03-31 2021-01-12 Fireeye, Inc. Verification and enhancement using detection systems located at the network periphery and endpoint devices
US10169585B1 (en) 2016-06-22 2019-01-01 Fireeye, Inc. System and methods for advanced malware detection through placement of transition events
US10462173B1 (en) 2016-06-30 2019-10-29 Fireeye, Inc. Malware detection verification and enhancement by coordinating endpoint and malware detection systems
US10592678B1 (en) 2016-09-09 2020-03-17 Fireeye, Inc. Secure communications between peers using a verified virtual trusted platform module
US10491627B1 (en) 2016-09-29 2019-11-26 Fireeye, Inc. Advanced malware detection using similarity analysis
US10795991B1 (en) 2016-11-08 2020-10-06 Fireeye, Inc. Enterprise search
US10587647B1 (en) 2016-11-22 2020-03-10 Fireeye, Inc. Technique for malware detection capability comparison of network security devices
US10552610B1 (en) 2016-12-22 2020-02-04 Fireeye, Inc. Adaptive virtual machine snapshot update framework for malware behavioral analysis
US10581879B1 (en) 2016-12-22 2020-03-03 Fireeye, Inc. Enhanced malware detection for generated objects
US10523609B1 (en) 2016-12-27 2019-12-31 Fireeye, Inc. Multi-vector malware detection and analysis
US10904286B1 (en) 2017-03-24 2021-01-26 Fireeye, Inc. Detection of phishing attacks using similarity analysis
US10902119B1 (en) 2017-03-30 2021-01-26 Fireeye, Inc. Data extraction system for malware analysis
US10848397B1 (en) 2017-03-30 2020-11-24 Fireeye, Inc. System and method for enforcing compliance with subscription requirements for cyber-attack detection service
US10791138B1 (en) 2017-03-30 2020-09-29 Fireeye, Inc. Subscription-based malware detection
US10798112B2 (en) 2017-03-30 2020-10-06 Fireeye, Inc. Attribute-controlled malware detection
US10601848B1 (en) 2017-06-29 2020-03-24 Fireeye, Inc. Cyber-security system and method for weak indicator detection and correlation to generate strong indicators
US10855700B1 (en) 2017-06-29 2020-12-01 Fireeye, Inc. Post-intrusion detection of cyber-attacks during lateral movement within networks
US10503904B1 (en) 2017-06-29 2019-12-10 Fireeye, Inc. Ransomware detection and mitigation
US10893068B1 (en) 2017-06-30 2021-01-12 Fireeye, Inc. Ransomware file modification prevention technique
US10747872B1 (en) 2017-09-27 2020-08-18 Fireeye, Inc. System and method for preventing malware evasion
US10805346B2 (en) 2017-10-01 2020-10-13 Fireeye, Inc. Phishing attack detection
US11108809B2 (en) 2017-10-27 2021-08-31 Fireeye, Inc. System and method for analyzing binary code for malware classification using artificial neural network techniques
US11005860B1 (en) 2017-12-28 2021-05-11 Fireeye, Inc. Method and system for efficient cybersecurity analysis of endpoint events
US11271955B2 (en) 2017-12-28 2022-03-08 Fireeye Security Holdings Us Llc Platform and method for retroactive reclassification employing a cybersecurity-based global data store
US11240275B1 (en) 2017-12-28 2022-02-01 Fireeye Security Holdings Us Llc Platform and method for performing cybersecurity analyses employing an intelligence hub with a modular architecture
US10826931B1 (en) 2018-03-29 2020-11-03 Fireeye, Inc. System and method for predicting and mitigating cybersecurity system misconfigurations
US11003773B1 (en) 2018-03-30 2021-05-11 Fireeye, Inc. System and method for automatically generating malware detection rule recommendations
US11558401B1 (en) 2018-03-30 2023-01-17 Fireeye Security Holdings Us Llc Multi-vector malware detection data sharing system for improved detection
US10956477B1 (en) 2018-03-30 2021-03-23 Fireeye, Inc. System and method for detecting malicious scripts through natural language processing modeling
US11075930B1 (en) 2018-06-27 2021-07-27 Fireeye, Inc. System and method for detecting repetitive cybersecurity attacks constituting an email campaign
US11314859B1 (en) 2018-06-27 2022-04-26 FireEye Security Holdings, Inc. Cyber-security system and method for detecting escalation of privileges within an access token
US11228491B1 (en) 2018-06-28 2022-01-18 Fireeye Security Holdings Us Llc System and method for distributed cluster configuration monitoring and management
US11316900B1 (en) 2018-06-29 2022-04-26 FireEye Security Holdings Inc. System and method for automatically prioritizing rules for cyber-threat detection and mitigation
US11182473B1 (en) 2018-09-13 2021-11-23 Fireeye Security Holdings Us Llc System and method for mitigating cyberattacks against processor operability by a guest process
US11763004B1 (en) 2018-09-27 2023-09-19 Fireeye Security Holdings Us Llc System and method for bootkit detection
US11368475B1 (en) 2018-12-21 2022-06-21 Fireeye Security Holdings Us Llc System and method for scanning remote services to locate stored objects with malware
US11258806B1 (en) 2019-06-24 2022-02-22 Mandiant, Inc. System and method for automatically associating cybersecurity intelligence to cyberthreat actors
US11556640B1 (en) 2019-06-27 2023-01-17 Mandiant, Inc. Systems and methods for automated cybersecurity analysis of extracted binary string sets
US11392700B1 (en) 2019-06-28 2022-07-19 Fireeye Security Holdings Us Llc System and method for supporting cross-platform data verification
US11886585B1 (en) 2019-09-27 2024-01-30 Musarubra Us Llc System and method for identifying and mitigating cyberattacks through malicious position-independent code execution
US11637862B1 (en) 2019-09-30 2023-04-25 Mandiant, Inc. System and method for surfacing cyber-security threats with a self-learning recommendation engine
CN111159662A (zh) * 2019-12-25 2020-05-15 郑州阿帕斯数云信息科技有限公司 一种数据的处理方法和装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3683031B2 (ja) * 1996-04-17 2005-08-17 株式会社リコー プログラム保護装置
US5940820A (en) * 1996-09-24 1999-08-17 Fujitsu Limited GUI apparatus for generating an object-oriented database application
JP4739465B2 (ja) * 1997-06-09 2011-08-03 インタートラスト テクノロジーズ コーポレイション ソフトウェアセキュリティを増強するための混乱化技術
FR2790844B1 (fr) * 1999-03-09 2001-05-25 Gemplus Card Int Procede et dispositif de surveillance du deroulement d'un programme, dispositif programme permettant la surveillance de son programme
JP4698182B2 (ja) * 2003-09-16 2011-06-08 株式会社リコー 電子装置、ネットワーク機器、管理方法、ソフトウェア更新方法、管理プログラム、ソフトウェア更新プログラム及び記録媒体
US7823197B2 (en) * 2004-06-30 2010-10-26 Panasonic Corporation Program execution device and program execution method
JP4718560B2 (ja) * 2005-01-13 2011-07-06 サムスン エレクトロニクス カンパニー リミテッド デジタル著作権管理装置及び方法

Also Published As

Publication number Publication date
CN100465982C (zh) 2009-03-04
CN101014959A (zh) 2007-08-08
WO2006009081A1 (ja) 2006-01-26
US20070271446A1 (en) 2007-11-22

Similar Documents

Publication Publication Date Title
JPWO2006009081A1 (ja) アプリケーション実行装置及びアプリケーション実行装置のアプリケーション実行方法
JP5821034B2 (ja) 情報処理装置、仮想マシン生成方法及びアプリ配信システム
US6052780A (en) Computer system and process for accessing an encrypted and self-decrypting digital information product while restricting access to decrypted digital information
Wang et al. Steal This Movie: Automatically Bypassing DRM Protection in Streaming Media Services.
JPWO2007011001A1 (ja) 実行装置
US20080216071A1 (en) Software Protection
US20080270806A1 (en) Execution Device
WO2005098570A1 (ja) 実行装置
KR20070001893A (ko) 탬퍼-레지스턴트 트러스티드 가상 머신
JP4892167B2 (ja) ディジタル・データ保護構成
WO1998011690A9 (en) Self-decrypting digital information system and method
JP2007226277A (ja) 仮想マシン改ざん検査方法、および仮想マシン改ざん検査装置
US9256756B2 (en) Method of encryption and decryption for shared library in open operating system
WO2011134207A1 (zh) 软件保护方法
JP4664055B2 (ja) プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法
KR20110013188A (ko) 분리형 ro 관리를 위한 호스트 단말 및 저장 장치, 그의 분리형 ro 관리 방법 그리고, 이를 수행하는 프로그램을 기록한 기록매체
JP2008040853A (ja) アプリケーション実行方法およびアプリケーション実行装置
KR101749209B1 (ko) 애플리케이션의 정보 은닉 방법 및 장치, 및 애플리케이션 실행 방법 및 장치
WO2016188134A1 (zh) 一种实现应用加固的方法及装置
JP6698775B2 (ja) 共有オブジェクトのコード保護のための保安提供装置と方法、及び保安実行装置と方法
JP4930982B2 (ja) ダウンロードシステム
US20080141368A1 (en) Method for Protecting a Digital Rights File Description
WO2001008345A1 (en) A computer system and process for accessing an encrypted and self-decrypting digital information product

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080417

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20100430