JP5689472B2 - 悪意ある実行環境内での静的および動的攻撃からJavaバイトコードを保護するシステムおよび方法 - Google Patents

悪意ある実行環境内での静的および動的攻撃からJavaバイトコードを保護するシステムおよび方法 Download PDF

Info

Publication number
JP5689472B2
JP5689472B2 JP2012538154A JP2012538154A JP5689472B2 JP 5689472 B2 JP5689472 B2 JP 5689472B2 JP 2012538154 A JP2012538154 A JP 2012538154A JP 2012538154 A JP2012538154 A JP 2012538154A JP 5689472 B2 JP5689472 B2 JP 5689472B2
Authority
JP
Japan
Prior art keywords
bytecode
java
protection
security module
protected
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.)
Expired - Fee Related
Application number
JP2012538154A
Other languages
English (en)
Other versions
JP2013511077A (ja
Inventor
ユエン シャン グ
ユエン シャン グ
アダムス ガーネイ
アダムス ガーネイ
ロン ジャック
ロン ジャック
Original Assignee
イルデト カナダ コーポレーション
イルデト カナダ コーポレーション
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 イルデト カナダ コーポレーション, イルデト カナダ コーポレーション filed Critical イルデト カナダ コーポレーション
Publication of JP2013511077A publication Critical patent/JP2013511077A/ja
Application granted granted Critical
Publication of JP5689472B2 publication Critical patent/JP5689472B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • 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/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Description

本発明は、一般にコンピュータソフトウェアに関し、かつより詳細には、コンピュータソフトウェアに、悪意ある実行環境内での静的および動的攻撃に対する耐性をつける方法及びシステムに関する。
コンピュータプログラミング産業においては、Javaプログラミング言語は、あらゆる主要な産業分野で使用され、広範なデバイス、コンピュータおよびネットワーク内に存在する。Javaアプリケーションは、Javaプログラミング言語で書かれ、Javaヴァーチャルマシン(JVM)上で実行される機種既存性のないバイトコードにコンパイルされる。JVMは、ホストのオペレーティグシステム(OS、Operating System)およびホストのコンピュータプロセッシングユニット(CPU、Computer Processing Unit)インストラクションセットアーキテクチャ(ISA、Instruction Set Archtecture)上に展開される。Java技術は、その汎用性、効率、プラットフォームポータビリティおよびセキュリティにより、ネットワークコンピューティングのための理想的技術となっている。Javaプログラミング言語は、ラップトップからデータセンター、ゲームコンソールから科学系スーパーコンピュータ、また携帯電話からインターネットまであらゆる分野に使用される。実際、可搬性、拡張性、汎用性および信頼性がJavaの主要な強みである。しかしながら、このような遍在性はまたハッカーや関連のコンピュータ攻撃に対して十分な機会を与えてしまう。
信頼できないアプリケーションによるJava環境への攻撃や不正アクセスを防止するために、Java技術は、ウィルスやマルウェアなどの汚染されたソフトウェアが違法にダウンロードされたりインストールされたりする可能性があるホストマシンまたはデバイスの実行環境を保護するための、サンドボックスセキュリティモデルを含む。このような悪意ある攻撃を防止することは、電気通信システム、運輸システム、防衛システム、産業オートメーションシステムおよび電力管理システム等の高度に保護された環境およびシステム上で通常実行される重要なアプリケーションを設計する上で必須である。毎年、Javaプログラミング言語を用いてこれら重要なシステムが、次々に設計実現される。
同様に、消費者向け電子機器産業も新しい時代を迎え、先進技術および製品、急激なメディアのデジタル化に対する要求および下落が続く消費者向け電子機器の価格に、新興市場での可処分所得の増大があいまって、前例のないスピードと範囲で消費者向け電子機器市場の成長に拍車がかかっている。これら消費者向け電子機器製品の多くは、ソフトウェアアプリケーションに依存して機能する。いくつかのJavaプログラミング言語の強み(可搬性、拡張性、汎用性、信頼性および簡便性等)によって、消費者向け電子機器製品の全体的な開発およびデプロイにかかるコストが下がるため、より多くのJava系プラットフォームおよびアプリケーションが新たな消費者向け製品に必ずデプロイされるようになっている。
ほとんどすべての消費者向け電子機器が、信用できない環境でも機能することを必要とする。信用できない環境で、消費者向け電子機器内のソフトウェアは、有益な理由(必要なサービスを受ける等)から望ましくない理由(機器をハッキングするため等)まで様々な目的で直接アクセスされ得る。その結果、以前にもまして多くのコンピュータアプリケーションが、相対的に悪意ある環境で実行される。たとえば、携帯装置(携帯メディアプレイヤーまたはスマートホン等)、ホームネットワーキング(セットトップボックス、メディアプレイヤーまたはパソコン等)およびウェブ系環境という領域は、攻撃者が長時間多くのリソースを費やすことが多い領域である。したがって、攻撃してくるソフトウェアから正当なソフトウェアを守ることは、激化する軍備拡張競争のようになりつつある。その上、高性能ハードウェアと複雑な攻撃ツールにより、侵入者は多くの新しい有利点を備える。
ソフトウェアのディストリビュータは、ソフトウェアが攻撃に対して堅牢で耐性が必ずあるようにする必要がある。しかしながら、所与のプラットフォームおよびソフトウェアは、時間、リソース、ツールおよび自由に使えるウェブ上の専門家をすべて備えている攻撃者には周知であることが多い。このような悪意ある攻撃の環境をよく「ホワイトボックス」環境と呼び、このような環境では、内容のすべてが丸見えで、したがって直接のアクセスおよびタンパリングの対象となる。これは、内容が隠されるか、または攻撃から保護されている、信頼があり保護された環境である「ブラックボックス」環境とは逆である。主流となっているホワイトボックス環境の悪意ある環境において、ソフトウェア系への直接かつ自動的な攻撃を防止または止めることが、セキュリティ上の最も厳しい課題の1つになりつつある。さらに、ホワイトボックス攻撃のための強固な防御を行い、適正かつセキュアな装置機能を確保する必要がある。Javaプログラミング言語は、このようなセキュリティ上の問題および課題に取り組むために十分な設計になっていない。これに関しては、実際のところ、いくつかのJavaの強みが、CまたはC++によるプログラミングに比較して、セキュリティ上の脆弱性を引き起こしている。
C/C++コードを生のバイナリデータに働きかつ目的のハードウェア(×86またはパワーPC等)に特定の低レベルの命令セットにコンパイルするC/C++コンパイラとは違い、Javaコンパイラは、Javaソースコードを、JVMが実行時に翻訳できるクラスおよびプリミティブなタイプに働くより高いレベルのポータブルバイトコードにコンパイルする。プラットフォーム依存性は、JVM内にカプセル化し、Javaアプリケーションからは切り離される。
その上、標準的なJavaコンパイラは、C/C++コンパイラに共通してかつ通常みられるコンパイル時最適化を実行しない。その代り、Javaは、より良い性能のために実行プロファイルを考慮に入れながら実行時にすべての最適化を行うジャストインタイム(JIT、Just−In−Time)コンパイルに依存する。主なC/C++コード最適化は、コンパイル時に実行される。たとえばインラインサブスティチューションによりバイナリ画像の周辺に散乱する所与の(メンバー)機能のコピーが得られる。すなわち、プリプロセッサを表現のコンパイル時評価と組み合わせて使用すれば、ソースコードに規定される定数の痕跡を残さないかも知れない等である。一般に、複雑に最適化されたコードをリバースエンジニアするのはより困難である。
さらに、Javaプログラム依存性は、クラスがロードされる実行時に解決される。したがって、クラスの名称ならびにそのメソッドおよびフィールドの名称は、すべてのインポートされたクラス、呼び出されたメソッドおよびアクセスされたフィールドの名称とともに、クラスファイルの中に存在するはずである。一方で、C/C++プログラムは静的にリンクされる。したがって、動的ライブラリからエクスポートされた名称を除いては、クラスの名称、メンバーおよび変数は、コンパイルされかつリンクされるプログラム内に存在する必要がない。
最後に、Javaアプリケーションは、Javaアーカイブ(JAR、Java Archive)ファイルのセットとして送付される。JARフォーマットにより、複数のファイルを、本質的に非暗号化アーカイブで個別のクラスを比較的容易に取り出せる単独のアーカイブファイルにバンドルすることができる。これに比べて、C/C++アプリケーションは、いくつかの動的ライブラリとリンクし得るモノリシックな実行可能ファイルとして配布されるので、プログラム情報および個別のコードを識別するのはそれほど容易ではない。
したがって、JavaバイトコードをJavaソースへデコンパイルすることは、C/C++をディスアセンブルするより簡単かつ容易で、したがって完全に自動化することも可能である。クラスヒエラルキー、ステートメント、クラスの名称、メソッドおよびフィールド等のプログラム情報をバイトコードからすべて回収することができる。多くのフリーウェアおよび商用のJava難読化ツールが入手可能だが、いずれもバイトコードの実行に対する直接攻撃を阻止する保護を提供しない。結果として、現在のところ、Javaリバースエンジニアリングは、日常茶飯事となっている。
さらに、JVMは、Javaアプリケーションのためのオープンな実行時環境を提供する。JVMを保護し、JVM自体を堅牢にするビルトインセキュリティはほとんどない。JVM自体に添付するか、JVMを使用して攻撃を着手することは比較的ありふれたことである。したがって、Javaアプリケーションコードに適用される保護の強度にかかわらず、JVMの脆弱性のため、ホワイトボックス攻撃を実行するために、ハッカーは常にJVMを最弱のリンクとして使用し得る。より信頼度の高い、堅牢なJVMなら、Javaアプリケーションを保護し、ホワイトボックス攻撃を阻止する可能性はあるが、この場合、現在のJavaセキュリティモデルに大きな変更が必要になり、これに関連してかなりの産業のサポートと順応が必要になる。したがって、アプリケーションをホワイトボックス環境で保護する工業規格のJVM内に信頼度の高い堅牢な要素を有することが好ましいと考えられる。
2009年3月17日発行、「タンパリングに耐性のあるソフトウェア符号化および分析」と題するチョウ他の米国特許第7506177号(Patent No. 7,506, 177 issued on 17 MAR 2009 to Chow et al. and titled TAMPER RESISTANT SOFTWARE ENCODING AND ANALYSIS)。 2008年12月9日発行、「デジタルメディアを扱い配布するための安全な方法およびシステム」と題するジョンソン他の米国特許第7464269号(Patent No. 7,464,269 issued on 09 DEC 2008 to Johnson et al. and titled SECURE METHOD AND SYSTEM FOR HANDLING AND DISTRIBUTING DIGITAL MEDIA)。 2008年7月8日発行、「ホワイトボックス攻撃からコンピュータソフトウェアを保護するためのシステムおよび方法」と題するジョンソン他の米国特許7397916号(Patent No. 7,397,916 issued on 08 JUL 2008 to Johnson et al. and titled SYSTEM AND METHOD FOR PROTECTING COMPUTER SOFTWARE FROM A WHITE BOX ATTACK)。 2008年7月1日発行、「持続可能なデジタルウォーターマーキングのための方法およびシステム」と題するチョウ他の米国特許第7395433号(Patent No. 7,395,433 issued on 01 JUL 2008 to Chow et al. and titled METHOD AND SYSTEM FOR SUSTAINABLE DIGITAL WATERMARKING)。 2008年3月25日発行、「タンパリング耐性のあるソフトウェアマスデータ符号化」と題するジョンソン他の米国特許第7350085号(Patent No. 7,350,085 issued on 25 MAR 2008 to Johnson et al. and titled TAMPER RESISTANT SOFTWARE-MASS DATA ENCODING)。 2008年1月29日発行、「セキュアなアクセスのための方法およびシステム」と題するチョウ他の米国特許第7325141号(Patent No. 7,325, 141 issued on 29 JAN 2008 to Chow et al. and titled METHOD AND SYSTEM FOR SECURE ACCESS)。 2005年1月11日発行の「タンパリング耐性のあるソフトウェア符号化」と題するチョウ他の米国特許第6842862号(Patent No. 6,842,862 issued on 1 1 JAN 2005 to Chow et al. and titled TAMPER RESISTANT SOFTWARE ENCODING)。 2004年8月17日発行、「タンパリング耐性のあるソフトウェア制御フロー符号化」と題するチョウ他の米国特許第6779114号(Patent No. 6,779, 1 14 issued on 17 AUG 2004 to Chow et al. and titled TAMPER RESISTANT SOFTWARE-CONTROL FLOW ENCODING)。 2003年7月15日発行、「タンパリング耐性のあるソフトウェア符号化」と題するチョウの米国特許第6594761号(Patent No. 6,594,761 issued on 15 JUL 2003 to Chow et al. and titled TAMPER RESISTANT SOFTWARE ENCODING)。
本発明の目的は、これまでのJavaプラットフォーム構成の主要な欠点を除去または緩和することである。
本明細書では、Javaプラットフォームの脆弱性に対処しかつ実行時のJavaバイトコードを保護することができるセキュアなモジュールを提供する発明を開示する。セキュアなモジュールは、例としてC/C++で実現されるものである。発明のセキュリティモジュールの構成がC/C++によるものであるため、C/C++ソフトウェアコードを安全にするセキュリティ技術を使用することができる。本発明の目的のための適切な技術は、カナダ、オンタリオ州、オタワ(Ottawa,Ontario,Canada)のクロークウェア社(Cloakware Inc)により提供されるものである。このように適切な目的のセキュリティ技術については、同一所有者の先行技術である特許文献1から9に詳しく記載されており、これらの特許の各々について、全文をここに引用により援用する。
上記の引用特許およびクロークウェア社からの関連製品により開示される既存のソフトウェアセキュリティ技術は、合法なアプリケーションに対するホワイトボックス攻撃を阻止するため、これらアプリケーションを、悪意ある(信頼性のない)実行環境で動作するアプリケーションの機能性と知的財産とともに保護するために使用される。これら既存のソフトウェアセキュリティ技術は、C/C++のアプリケーションをネィティブな編集コードとともに保護し、伝統的なアプリケーション構築プロセスを強化することによってソフトウェアとセキュリティを不可分にする実用的なソースコードおよびバイナリ保護ツールを含む。
第1の実施例において、本発明は、Javaバイトコードのタンパリング耐性を向上させるための装置を提供し、この装置は、構築時、Javaバイトコードにセキュリティを適用するための保護ツールと、保護ツールから安全なJavaバイトコードを受け、実行時に安全なJavaバイトコードを起動するセキュリティモジュールと、保護ツールおよびセキュリティモジュールと統合された1以上の保護機構とを含み、1以上の保護機構が、Javaバイトコードに対する静的および動的攻撃に対抗するよう動作する。
本発明のさらなる実施例において、この装置はまた被保護Javaアプリケーションバイトコードスタブと、被保護アプリケーションペイロードと、暗号化されたクラスバイトコードフレームとを含む安全なJavaバイトコードを含み、その各々が、構築時、保護ツールにより形成される。
本発明の他の実施例において、セキュリティモジュールが、Javaヴァーチャルマシン環境への機能的拡張として独立に配布され、被保護Javaアプリケーションの信頼の基礎を提供し、かつ安全なJavaバイトコードが、ユーザの要望ごとに別々に配布される。
本発明の他の実施例において、保護ツールが、被保護アプリケーションペイロードが、被保護Javaアプリケーションバイトコードスタブを介して起動されるよう命令する機構を含む。
本発明の他の実施例において、セキュリティモジュールが、被保護バイトコードクラスローダを含み、かつ保護ツールが、被保護アプリケーションペイロードが、被保護バイトコードクラスローダを用いて、暗号化されたクラスバイトコードフレームを介して起動されるよう命令する機構を含む。
他の実施例において、装置が、C、C++、およびJavaのうち1以上を含むプログラミング言語で実現されるプログラミングエンジンから構成される。
他の実施例において、装置が、Javaヴァーチャルマシンと対話することができるプログラミング言語で実現されるプログラミングエンジンから構成される。
他の実施例において、1以上の保護機構が、コンフィギュレーションオプションにより選択可能である。これらの保護機構が、保護ツールに形成される静的セキュリティハンドラおよびセキュリティモジュールで形成される動的セキュリティハンドラを含む。
他の実施例において、静的セキュリティハンドラが、ユーザからの暗号キーを含む暗号情報を受けるためのホワイトボックス(WB)静的セキュリティハンドラを含み、それにより、他の静的セキュリティハンドラの1以上により使用されるWB暗号化キーデータならびに各々セキュリティモジュールの動的実行時保護の際に1以上の動的セキュリティハンドラにより使用されるWB復号化キーデータおよびWBセキュリティモジュールユーティリティを生成する。
他の実施例において、静的セキュリティハンドラは、保護マーキング情報に応答して安全なJavaバイトコードに対してハッシュコード保護を適用するためのバイトコード完全性検証(BIV)静的セキュリティハンドラを含んでもよく、動的セキュリティハンドラが、実行時、ハッシュコード保護を検証するためのBIV動的セキュリティハンドラを含み、セキュリティモジュールが、検証失敗の際にタンパリングに対する対抗策を起動する。
他の実施例において、装置は、静的セキュリティハンドラを含み、その静的セキュリティハンドラが、構築時、被保護Javaアプリケーションバイトコードスタブ、被保護アプリケーションペイロード、および暗号化クラスバイトコードフレームを形成するためのセキュアローディングバイトコード(SLB)静的セキュリティハンドラを含んでもよく、かつ動的セキュリティハンドラが、メモリバッファ内へ、安全なJavaアプリケーションバイトコードに対応する暗号化クラスバイトコードフレームをロードし、暗号化クラスに対応するWB復号化キーデータを介して暗号化クラスバイトコードフレーム内に含まれる暗号化クラスの各々を復号化し、セキュリティモジュールクラスローダを介してアプリケーション作業空間内へ、各復号化されたクラスバイトコードをロードして、それによりアプリケーション作業空間内でJavaアプリケーションバイトコードを実行するためのSLB動的セキュリティハンドラを含む。
本発明の他の局面および特徴については、以下の発明の特定の実施例の記載を添付の図面とともに読めば、当業者には明らかになるであろう。
本発明の実施例について添付の図面を参照して説明するが、説明は例示目的のみのものである。
JavaアプリケーションとネィティブコードをブリッジするJNIの既知の概略を示す図である。
Javaアプリケーションバイトコードに対する静的攻撃の既知の機構を示す図である。
Javaアプリケーションバイトコードに対する動的攻撃の既知の機構を示す図である。
本発明によるJavaバイトコード保護システムの概略を示す図である。
図4の上部に示す構築時プロセスの図であって、本発明による構築時のJavaアプリケーションバイトコードを保護するプロセスを示す図である。
図4の下部に示す実行時プロセスの図であって、本発明による実行時のJavaアプリケーションバイトコードを保護するプロセスを示す図である。
本発明によるスタートアップ時および実行時のアンチデバッグ能力を示す図である。
本発明による外部ホワイトボックス(WB)暗号ライブラリを示す図である。
本発明による内部WB暗号ファシリティを示す図である。
本発明によるバイトコード保護ツールのプリプロセスを示す図である。
本発明によるバイトコード完全性検証(BIV)静的セキュリティハンドラの作業フローを示す図である。
本発明によるBIV動的セキュリティハンドラの作業フローを示す図である。
本発明によるセキュアローディングバイトコード(SLB)静的セキュリティハンドラの作業フローを示す図である。
本発明によるSLB動的セキュリティハンドラの作業フローを示す図である。
本発明によるクロークされたJavaアプリケーションのブートストラップインタフェースおよびセキュアなローディングを示す図である。
本発明による動的バイトコード復号化(DBD)静的セキュリティハンドラの作業フローを示す図である。
本発明によるDBDシーケンス図である。
本発明によるDBD動的セキュリティハンドラの作業フローを示す図である。
図1からわかるとおり、Javaプラットフォーム100は、Javaワールド(JVM104、Javaアプリケーション106およびJVM内にロードされるバイトコードのライブラリ108を含む)とネィティブコードワールド110(そのアプリケーションまたは共有ライブラリがC/C++/アセンブラ等の他の言語で書かれかつホストCPUISAにコンパイルされる)との間の双方向相互運用および対話をブリッジするためのファシリティを提供するJavaネィティブインターフェース(JNI)102をさらに含む。Javaプログラミング言語およびC/C++/アセンブラコードのJNIアプリケーションプログラミングインターフェース(API)を使用することにより、C/C++/アセンブラネィティブバイナリコードがJavaから呼び出し可能になりかつまたJavaバイトコードを起動することができる。対話には二種類あり、すなわち、Javaアプリケーションコードがネィティブメソッドを呼びだす場合の「ダウンコール」と、ネィティブメソッドがデータにアクセスするかまたはJNI環境を介して所与のJavaアプリケーションのメソッドを起動する場合の「アップコール」の2種類である。
実行時、本発明のセキュリティモジュールが、JNIを介してJVM内で同時に実行可能であり、それにより所与のJavaアプリケーションが、発明のセキュリティモジュール内のセキュアなオペレーションを起動でき、このセキュアなオペレーションがJavaアプリケーションおよびJVM内にロードされる他のJavaライブラリコードにアクセスし、保護を実行することができるようになっている。
本発明のアプローチは、JNI機構を介してJVM内で完全に保護され信頼されるセキュリティモジュールを導入することにより既存のJVMに対する効果的なセキュリティアドオンである。実行時、セキュリティモジュールは、信頼の基礎としてかつJVM内の保護「トランポリンおよびエンジン」として作用して、Javaバイトコードの様々な保護を起動し実行する。このように、本発明は既存のJavaプラットフォームに何らの広域な変更を要求するものではない。むしろ、既存と新しくデプロイされるシステムおよび装置の両方がこの解決法から直ちに恩恵を受けることができる。言い換えれば、本発明を、既存のJavaインフラに対するセキュリティの拡張部分として扱い、現在のJavaアプリケーションが直面するセキュリティの課題に対処することができる。こうして、本発明は、Javaアプリケーションに対する静的および動的攻撃に応答して、実行時にバイトコードにアクセスしかつJavaバイトコードの保護メソッドを実行する能力を活用するJavaバイトコード保護セキュリティモジュールを提供する。
本発明は、信頼度の高い保護ツールおよびセキュリティモジュールをJavaバイトコード保護システム内に提供する。本発明は、JVMおよびJavaセキュリティにのみに基づくJavaアプリケーション保護には依存しない。むしろ、本発明は、JNIを介してJVMと協働することができる信頼されるゾーンであるJavaバイトコード保護セキュリティモジュール(SM)を導入して、実行時にJavaバイトコード保護を起動、実行および管理する。セキュリティモジュールの信頼性は既知の有効なセキュリティ保護を、そのプログラミング言語で保護ツールおよびセキュリティモジュールが書かれるC/C++コードに適用ことにより保障される。この信頼度の高いSMでは、以下に説明するSMにより提供されるいくつかの保護により、信頼性はSMからJavaアプリケーションおよびJVMにまで拡大される。
図2および図3は、Javaバイトコードに対する典型的な静的および動的攻撃を示す。一般に、いずれか所与のJavaアプリケーションをJavaソースフォーム202で展開し、その後Javaコンパイラ206によりJavaバイトコード204にコンパイルするが、これは、配布前にアーカイバーユーティリティ210を用いて、アーカイブファイル208(すなわちJARファイル)上にストアされる。この配布は、コンパクトディスク(CD)等の媒体またはダウンロード可能なファイルを含む多くの形式で行われ得る。
静的攻撃者212は、通常、リバースエンジニアリングツール(Javaデコンパイラ等)を使用して、配布媒体からのコードから価値のある知的財産情報214(すなわち財産価値のあるデータまたはソフトウェアアルゴリズム)を抽出する。その場合、攻撃者は、コードに違法な変更を加えるかさもなければ基礎となるコード216を傷つけ得る。所与のJavaアプリケーション配布中に、Javaバイトコードに対するこのような静的攻撃を阻止するため、本発明はアプリケーションバイトコードに対してあるレベルの保護を適用する。この保護は、配布の前に行われ、確実に静的攻撃が極めて困難な作業になるようにする。本発明により有効な保護が適用された後、アプリケーションバイトコード内に埋め込まれた知的財産は、簡単にリバースエンジニアされず、かつ保護されるバイトコードのタンパリングは非実用的な行為となる。さらに、本発明の静的保護は、タンパリングされたバイトコードが、適正なJVMによってロードされたり実行されたりできないという利点がある。
アプリケーションバイトコードに対する静的攻撃と違い、動的攻撃者302は、JVMがJavaアプリケーションをロードおよび実行している間に動的攻撃ツールを用いてJavaバイトコードに対して攻撃を実行する。動的攻撃ツールおよびメソッドを使用することにより、攻撃者はJVM304およびアプリケーションバイトコード306にアクセスができ、攻撃目的で、バイトコード308を観察かつ修正して直接的に元の指定された挙動および重要な値を理解または/および変更することができる。さらに、攻撃者は、元のバイトコード306のリフティングを含め、価値ある知的財産310およびバイトコードからの秘密を確かめることができる。実行時にJavaコードに対するこのような動的攻撃を阻止するため、本発明は、配布前にアプリケーションのバイトコードに対して保護を構成しインプラントする。さらに、本発明は、実行時に、いかなる動的攻撃も必ず非現実的になるようにこれらの保護を実現する。本発明によれば、動的攻撃が防止されるのみならず、被保護アプリケーションに対して、動的攻撃を検出しこれを軽減する能力を付加し、またいかなる潜在的攻撃者にとってもこれらの攻撃が時間およびリソースの面から非常に費用のかかるものにする。
図4は、本発明によるバイトコード保護システム400および関連のメソッドの概略図である。ここで、Javaバイトコード保護システムは、2つの部分からなる。すなわち、構築時保護ツール402および実行時セキュリティモジュール404である。上記のとおり、バイトコード保護システムおよび関連のメソッドは、上記のカナダ、オンタリオ州、オタワのクロークウェア社から入手可能な技術を用いてC/C++で実現される。
Javaバイトコード保護ツール402を用いて、デプロイ前のJavaバイトコード406にセキュリティ(すなわち「クローク」)を適用する。このJavaバイトコード保護ツール402により、構築時に、セキュリティの設定と保護機構とを指定することができる。このツールは、元のJavaアプリケーションのバイトコード406、セキュリティ仕様およびWB暗号キーを入力として受け、Javaバイトコード保護セキュリティモジュール404と関連して実行される「クロークされた」Javaバイトコードを生成する。Javaバイトコード保護ツール402は、バイトコードの起動法を指定する選択肢(被保護アプリケーションバイトコードスタブ(Protected Application Bytecode Stub)または被保護バイトコードクラスローダ(Protected Byetcode Class Loader)を介して等)およびデプロイ済の安全なJavaバイトコード用セキュリティ技術を指定するための選択肢を含む。Javaアプリケーションのクロークされたバイトコードは、2つにわけて配布される。すなわち、1)被保護Javaアプリケーションバイトコードスタブ408(これは、標的JVM環境410へロードされる)および2)被保護データファイル412とホワイトボックスセキュリティモジュール(WBSM)ユーティリティ414であり、これらはロードされ、実行時に別々にSMによりアクセスされる。発明のJavaバイトコード保護セキュリティモジュール404は、アプリケーションの準備アプローチの段階まで、これら2つの部分とともにまたは単独で配布することができる。一般に、セキュリティモジュール404は、一度インストールするといずれのJavaアプリケーションのクロークされたバイトコードにも適用できると言う点で汎用である。
本件のJavaバイトコード保護システム400と関連して使用する、発明のバイトコード保護のための様々なメソッドが有効である。このバイトコード保護メソッドは、各々、バイトコード形式のJavaアプリケーションに対する静的および動的攻撃に対処する。
バイトコード保護の一メソッドは、ホワイトボックス暗号または「WB暗号」を含み、これは、これらのオペレーションが、暗号キーおよび他の暗号値を漏洩せずに悪意ある環境内で実行できるよう、暗号アルゴリズムを保護する独自の暗号技術である。言い換えれば、WB暗号法は、直接攻撃に対しても実行可能である。本発明は、外部WB暗号ライブラリおよび内部WB暗号ファシリティを含む2種類のWB暗号技術を取り入れる。
外部WB暗号ライブラリは、Cで実現し、かつWB暗号オペレーションを被保護Javaアプリケーションが使用でき、かつキーを含む価値のある情報を全く解放することなく実行できるように、隠し暗号キーおよび他の暗号情報による耐タンパリング特性で保護される。本発明の内部WB暗号ファシリティは、暗号情報およびキーを受け入れる構築時保護ツール402の機能要素であり、発明の保護ツールおよびセキュリティモジュール404が様々な形式のJavaアプリケーションのバイトコードおよび関連情報を暗号化しかつ復号化するために使用するWBキーデータおよびにユーティリティを生成する。
発明によるバイトコード保護の他のメソッドは、バイトコード完全性検証(BIV、Bytocode Integrity Verification)を含む。BIVを介する保護により、Javaクラスまたはメソッドのコードに対する静的および動的タンパリング攻撃を検出しかつ弱めることができる一方で、クラスまたは実行されるJavaメソッドをロードすることができる。構築時、本発明のメソッドは、元のアプリケーションのアーカイブファイルからJARファイル、クラスおよびメソッドのバイトコードの静的ハッシュ値を計算する。ロードおよび実行時、発明のメソッドは、JVM410でロードされるクラスおよびメソッドのバイトコードにアドレスすることにより動的ハッシュ値を計算しかつ動的ハッシュ値を静的ハッシュ値に対して照合することで完全性の検証を行う。
発明によるバイトコード保護の他のメソッドは、アンチデバッグ(AD、Anti−Debug)を含み、これについては、図7を参照して後述する。ADは、図4に示す動的セキュリティハンドラ416の1つである。AD保護により実行時にデバッガを使用する動的攻撃を阻止しかつ検出することができる。ADは、スタートアップおよび実行時のシステム環境の内部および外部状態をモニタすることによって攻撃を検出する技術から構成される。アンチデバッグ攻撃が検出されると適切な対抗手段が起動される。
発明によるバイトコード保護の他のメソッドは、セキュアローディングバイトコード(SLB,Secure Loading Bytecode)である。このSLB保護法は、JVM410にロードされる前のアーカイブファイルおよびJavaクラスコードに対する静的リバースエンジニアおよびタンパリング攻撃を阻止しかつ検出する。構築時、SLB保護法は、もとのアプリケーションアーカイブファイルからのJARファイルおよび選択されたクラスファイルを暗号化しアプリケーションスタブクラスを導入する。JVM410が被保護アプリケーションをロードする時、JVM410は、まずアプリケーションスタブクラスをロードし、次に被保護アプリケーションのロードをトリガする。以下でさらに説明するSLB動的セキュリティハンドラ416は、実行時実行の際にJNI418を介してJVM410と接続する発明のJavaバイトコード保護セキュリティモジュール404の機能要素である。SLB動的セキュリティハンドラ416は、JVM410の作業空間への被保護Javaアプリケーションバイトコードのロードを管理かつ制御する。
発明によるバイトコード保護の他のメソッドは、動的バイトコード復号化(DBD,Dynamic Bytecode Decryption)である。DBD保護法により実行時のJavaクラスまたはメソッドのコードに対する動的攻撃が阻止および軽減される。
発明によるバイトコード保護の他のメソッドは、転送実行および部分実行の両方を含む。これらの保護法は両方とも元の実行の一部をセキュリティモジュール404へ移動させ、JVM410内で実行の一部のみが晒されて、確実に実行時の動的コードリフティング攻撃の阻止および軽減を行う。たとえば、あるJavaバイトコードは、セキュリティモジュール404内で保護実行できるCコード(J2C)に変換することができる。
発明による他のバイトコード保護メソッドは、バイトコード変換を含む。この種の保護は、データフロー変換および制御フロー変換を含む技術により達成できる。バイトコード変換は、元の機能性を維持したまま、もとのバイトコードを別のコード構造に変換することができる。変換されたバイトコードは、リバースエンジニアすることがより難しくかつタンパリング耐性を有する。
図5を参照して、Javaバイトコード保護ツール402は、元のアプリケーションのバイトコードに対して様々な保護技術を適用する。Javaバイトコード保護ツール402はこうして、保護されたバイトコードおよび関連のデータならびに実行時にJavaバイトコードセキュリティモジュールとともに作用して、Javaバイトコードに対するこれら指定された保護技術を適用するユーティリティを生成する。Javaバイトコード保護ツール402は、ユーザインタフェース518を介して暗号情報およびキー502、元のJARファイル504ならびにコンフィギュレーションオプション506の3つの入力を受け、この3種類のオペレーションを実行する。
第1の基本的オペレーションは、WBキーデータおよびユーティリティの生成を含む。暗号情報およびキー502を使用して、WB静的ハンドラ508は、様々な静的セキュリティハンドラ(それぞれ詳細については後述)およびツール自体により使用されるWB暗号化キーデータ510を生成する。また、保護ツール402の構築時プロセスにより、データ保護フォルダ514における実行時データ512の一部として記憶されるWB復号化キーデータが生成される。WBセキュリティモジュール(SM)ユーティリティ516が提供され、WB復号化キーデータを使用して実行時に動的セキュリティハンドラにより起動されるWB復号化オペレーションが実行される。
第2の基本オペレーションは、保護技術の適用を含む。コンフィギュレーションオプションによれば、Javaバイトコード保護ツール402は、様々な静的セキュリティハンドラを適用して、アプリケーションバイトコードを元の形式から保護された形式に修正する。そうする上で、このオペレーションは、被保護Javaアプリケーションバイトコードスタブ408と、様々な保護形式で保護されたアプリケーションバイトコードおよび重要な実行時データを含む関連保護データファイルを生成する。
第3の基本的オペレーションは、被保護Javaバイトコードのデプロイ可能な形態のパッケージングを含む。プロセスの終了時に、Javaアプリケーションバイトコードスタブ408がJVM410によりロードできるように、Javaバイトコード保護ツール402は、適正にすべての出力ファイルを構築かつパックする。このJavaアプリケーションバイトコードスタブ408は、クロークされたJavaアプリケーション起動へのエントリポイントであり、様々な形式を取りうる。すなわち、その中には、外部プログラムにより起動可能なクラスファイル、他のJavaクラスによって起動されるクラスファイル、またはJavaクラスローダが含まれる。Javaバイトコード保護ツール402も、WBSMユーティリティ516が、Javaバイトコードセキュリティモジュールの機能要素により起動され得るように、すべての出力ファイルを適正に構築しパックする。さらに、Javaバイトコード保護ツール402も、すべての保護データファイルを、Javaバイトコードセキュリティモジュール404のいくつかの機能要素によりによりアクセスできるように、すべての出力ファイルを適正に構築しかつパックする。
図5は、Javaアプリケーションバイトコードを保護する上記の構築時プロセスの概略図である。図5に関連して、主な機能要素およびデータファイルについてここで説明する。
Javaバイトコード保護ツール402は、ユーザコマンドおよび主な入力を受けるため、ユーザとのインタフェースをとるためのユーザインタフェース518を含む。コマンドおよび入力には、暗号アルゴリズムセレクションおよび元のキー材料を含む暗号情報およびキー502、保護対象の非保護バイトコードを含む元のアプリケーションバイトコードアーカイブファイル504およびたとえばユーザが特定のJavaクラスおよびメソッドを保護対象にするか否か指定できる等、アプリケーションバイトコードを保護するため、何に対しかつどのようにJavaバイトコード保護ツール402を運用するかというユーザのオプションを含むコンフィギュレーションオプション506を含む。
Javaバイトコード保護ツール402も、保護マネジャ520を含む。保護マネジャ520は、コンフィギュレーションオプション506を解釈し、様々な保護技術を依存順位でコーディネートして、それらを組み合わせ、結果として得られる全体的保護が、各個別の保護より強化されたものになるように設けられる。また、マネジャ520は、Javaバイトコード保護ツール402の他の機能要素により共通に使用されるユーティリティを含む。
Javaバイトコード保護ツール402も、静的セキュリティハンドラ522を含む。各個々の静的ハンドラは、保護マネジャ520により起動されて、それぞれ予め定められた保護技術を実行する。実施例では、WB静的ハンドラ508、BIV静的ハンドラ524、AD静的ハンドラ526、SLB静的ハンドラ528、DBD静的ハンドラ530、転送実行静的ハンドラ532、部分実行静的ハンドラ534、コード変換ツール536を示す。各静的セキュリティハンドラについては、以下の項でより詳細に説明する。保護マネジャ520および静的セキュリティハンドラ522は、それらが協働して、容易に更なる新しいセキュリティハンドラと保護ツールを統合することにより、セキュリティ能力および新たな保護を付加かつ拡張するプラグイン機構を提供するよう設計されている。
Javaバイトコード保護ツール402も、WB静的セキュリティハンドラ508が生成するWB暗号化キーデータ510を含む。WB暗号キーデータ510は、マネジャ520および静的セキュリティハンドラ522により使用され、いくつかの形式のバイトコードおよび保護データを暗号化する。
Javaバイトコード保護ツール402はまたWB静的セキュリティハンドラ510が生成するWBSMユーティリティ516を含む。WBSMユーティリティ516は、セキュリティモジュール404内で、動的セキュリティハンドラ(後に詳説)により使用される。
Javaバイトコード保護ツール402はまた被保護Javaアプリケーションバイトコードスタブ408を含む。スタブ408は、セキュアなバイトコードローダ機能をまずロードし次にトリガして、保護データファイルから真の被保護バイトコードをロードするためのJVM410用被保護Javaアプリケーションのブートストラップのみを含む。
Javaバイトコード保護ツール402はまたツールが生成する被保護J2Cライブラリ538を含む。被保護J2Cライブラリ538は、Javaバイトコードから変換された、Cの様々な被保護コードを含む。このライブライリは、Javaバイトコードセキュリティモジュールにより動的にリンクされ起動される。
Javaバイトコード保護ツール402はまた被保護バイトコードデータ540を含む。この被保護バイトコードデータ540は、ツールが生成する一種の保護データファイルであり、様々な被保護バイトコードを含む。
Javaバイトコード保護ツール402はまた実行時データ512を含む。この実行時データ512は、これに限定されるわけではないが、WB復号化キーデータ、完全性検証静的ハッシュ値、被保護クラスおよびメソッドの情報ならびに表等の各種セキュリティ関連情報を含む。
なお、Javaバイトコード保護ツール402は、ダウンロード性を示す。このように、この保護ツールからのすべての出力(被保護Javaアプリケーションバイトコードスタブ408、被保護J2Cライブラリ538、被保護バイトコードデータ540および実行時データ512を含む)は、実行時にダウンロード可能である。
図6は、図4に示すJavaバイトコード保護セキュリティモジュール404に関する、本発明によるJavaバイトコードを保護する実行時プロセスを示す概略図である。上記のとおり、Javaバイトコード保護セキュリティモジュール404は、Cプログラミング言語で展開し、それ自体はカナダ、オンタリオ州、オタワのクロークウェア社が提供するような、耐タンパリング技術により保護され、堅牢でタンパリング耐性がある。なお、Javaバイトコード保護ツール402およびセキュリティモジュール404の基礎となるプログラミングエンジンは、他のプログラミング言語で展開されるエンジンでもよい。実際、この発明の基礎となるセキュリティモジュール404は、その言語がJavaヴァーチャルマシン(Java Virtual Machine)とインタフェースできる限り、他の言語で展開することができる。
実行時を開始する際に、JVM410が、通常のJavaアプリケーションをロードする際と同様、被保護Javaアプリケーションバイトコードスタブ408をロードする。これにより、Javaアプリケーションバイトコードスタブ408がトリガされて、JNI602を介してセキュリティモジュール404とインタフェースをとることにより信用できかつ保護されるJavaアプリケーションバイトコードをブートストラップする。実行時、セキュリティモジュール404は、Javaアプリケーションバイトコードおよび実行を確保しかつ保護し、それによりバイトコードおよび実行に対する動的攻撃を阻止するように、データフローを管理制御する役割をする。
さらに図6を参照して、ここで、主な機能要素およびデータファイルについて説明する。セキュリティモジュール404へ/からのデータおよびフローの制御は、Javaアプリケーションバイトコード作業空間604を介して行われる。作業空間604は、JVM410内のJavaアプリケーションのための仮想作業空間である。アプリケーションをロードしかつ実行することを含む実行時の様々な状態で、JVM410に存在する実際のアプリケーションバイトコードは、様々に管理される。作業空間の各状態には、合法で完全に機能的だが、完璧ではないアプリケーションバイトコードを含む。随意には、これらバイトコードのいくつかの部分は、JavaおよびC実行オプションで転送実行を有効にする等の構築時のコンフィギュレーション設定によって保護された状態に常に保つことができる。バイトコードのこの部分を実行する必要があれば、セキュリティモジュール404は、作業空間内のこれらをジャストインタイムで、JVM410内へロードし復元し、実行が終わればこれらを除去する。また、いくつかの元のメソッドバイトコードが、JVM410からは直接的に可視的でないC機能に変換されており、セキュリティモジュール404によってのみ起動することができる。このメソッドでは、攻撃者は、実行時、どの瞬間においても、元のアプリケーションバイトコードの部分しか見ることができず、アプリケーションバイトコード全体をリバースエンジニアすることは極めて難しくなる。
セキュリティモジュール404(SM)は、また、JNISMブリッジ418と呼ぶ図6に示すブリッジ機構を含む。JNISMブリッジ機構418は、JVM410とセキュリティモジュール404との間でJNI602を介して接続および相互機能を可能にする対話要素である。JNISMブリッジ418のサブ要素は、JVM410とネィティブコードとの間に唯一の対話機構を提供するJNI602を含む。また、サブ要素には、ダウンコールスタブ612およびアップコールスタブ608が含まれる。これらのスタブは、JVM410のJavaアプリケーションバイトコード作業空間604からのダウンコールを、ネィティブプログラミングコードのセキュリティモジュール404を介して動的セキュリティハンドラ611へリディレクトしかつセキュリティモジュール404からのアップコールをJVM610へりディレクトするアプリケーションプログラミングインターフェースを提供する。図示の第3のサブ要素は、SMマネジャ610である。SMマネジャ610は、セキュリティモジュール404のためのコントローラでありかつコーディネータである。Javaアプリケーションバイトコードに対する各種の指定された保護を管理維持するのみならず、セキュリティモジュール404自体についても管理維持を行う。また、セキュリティモジュール404の他の機能要素により共通に使用されるユーティリティも含む。
セキュリティモジュール404は、複数の動的セキュリティハンドラ611を含む。各個別の動的セキュリティハンドラ611を起動して独自の保護技術を実行する。図示の通り、いくつかの実施例による動的セキュリティハンドラは、WB動的セキュリティハンドラ614と、バイトコード完全性検証動的セキュリティハンドラ616と、アンチデバッグ動的セキュリティハンドラ618と、SLB動的セキュリティハンドラ620と、DBD動的セキュリティハンドラ622と、転送実行動的セキュリティハンドラ624と、部分実行動的セキュリティハンドラ626と、コード変換628とを含む。動的セキュリティハンドラ611の詳細については、後述する。
構築時Javaバイトコード保護ツール402によるコーディネートで、SMマネジャ610および動的セキュリティハンドラ611は、協働して、セキュリティモジュールと追加の新たな動的セキュリティハンドラを容易に統合することによりセキュリティ能力および新たな保護を追加拡張するプラグイン機構を提供するよう設計される。
図7において、外部アンチデバッグモニタリングのための発明のメソッドの実施例を示す。ここで、Javaプラットフォームデバッグアーキテクチャ(JPDA、Java Platform Debug Architecture)によりJavaアプリケーションのデバッグ能力を促進する。発明のメソッドは、JPDAに基づくデバッグの有効化およびそれに続くデバッグ活動の検知に焦点を当てる。図示の通り、多層による防御戦略を用いて、実行中のJVMプロセス内での静的および動的デバッグ活動を捕捉する可能性を最大限にする。図7に示すADのメソッドにおける3つのエージェントは、通常のまたは合法のデバッグ活動が実行できるよう構成することができる。3つのエージェントは、カーネルモニタエージェント(KMA、Kernel Monitor Agent)702、デバッガアタッチメントモニタエージェント(DAMA、Debugger Attachment Agent)710およびデバッギングプロシージャモニタエージェント(DPMA、Debugging Procedure Monitor Agent)718を含む。
カーネルスペース701にアクセスするKMA702に関して、JVMプロセスが、なんらかのデバッグ機能が実行できる前にそのメモリ空間にデバッギングライブラリ705をロードすることが必要である。KMA702は、Javaアプリケーション開始時に生成される。KMA702は、カーネルからのそれ自身のプロセスマップ703を定期的にチェックして、JDPAに関連するライブラリがそのメモリ空間にロードされるかどうか決定する。これらのライブラリが見つかれば、適正な関連動作を行う。
DAMA710に関連して、このエージェントは、防御の第2のラインの役割をする。DAMA710は、Javaヴァーチャルマシーンツールインターフェース(JVMTI、Java Virtual Machine Tool Interface)能力で促進されかつJVMが700を開始するときにロードされる。コールバック機能を設けて、実行時に創出されるすべてのスレッドについて定常的にスレッド開始スクリーンをモニタする。デバッギングを行うのに必須と考えられるいくつかのスレッドをJVMがロードするたびに、Javaアプリケーションにおける添付されたJDPAデバッガの活動を捕捉することができる。これに関して、AMAは、スレッド開始リスナ707を有効化し、新たなスレッド開始709を検出しかつJDPA関連のスレッド711を検出する。
DPMA718に関しては、このエージェントは、防護の第3のラインとして設けられる。DPMA718も、JVMTI環境下で動作する。デバッギングプロシージャ(ブレークポイントラインにヒットする等)を監視するコールバック機能は、そのような行為があるたびにトリガされる。スレッドとブレーキングポイントの位置等の詳細なメッセージを収集することができる。これに関して、DMPAは、ラインブレークリスナ713を有効化し、デバッギング動作715を検出して、なんらかのスレッドおよびメソッド情報717をレポートする。KMA、DAMAおよびDPMAの各々が、動作をトリガでき、JVM726を無効化する。
上記の静的および動的セキュリティハンドラについてここで詳細に説明する。WBセキュリティハンドラは、図8に示す外部WB暗号ライブラリおよび図9に示す内部WB暗号ファシリティを含む。
WB動的セキュリティハンドラ614が提供する図8の外部WB暗号ライブラリは、JNIセキュリティモジュールインターフェース804を介してWB暗号化および復号化のためのJavaアプリケーションにより使用されるライブラリを提供する。WB静的ハンドラ508は、ユーザから暗号情報およびオリジナルキー502を受けかつ必要に応じて配布かつロールが可能なWBキーデータ803を生成し、これを暗号ライブラリがセキュアな暗号オペレーションのために使用できる。
内部WB暗号ファシリティは、WB静的ハンドラ508を含み、いくつかの静的および動的要素について図9に示す。WB静的ハンドラ508は、ユーザからの暗号情報およびオリジナルキー502を受け、かつWB暗号化キーデータ904を生成するが、これを他の静的セキュリティハンドラ906が、様々な保護技術の一部として様々な形式のアプリケーションバイトコードに対する暗号化オペレーションのために使用する。WB静的ハンドラ508はまたWB復号キーデータ908を生成して、各々動的セキュリティハンドラ611が使用するWBセキュリティモジュールユーティリティ630を提供して、セキュリティモジュール914が動的保護を実行する一方で復号化オペレーションを実行する。
Javaバイトコード保護ツール402はまた図10に示す前処理メソッドを含む。前処理ツール1001は、もとのJavaアプリケーションバイトコードアーカイブファイル1005を受け、これらをもとのアプリケーションバイトコードのインターナルプレゼンテーション(IR、Internal Representation)に翻訳する。特定のクラスおよびメソッドについては、その後、保護およびユーザオプション1003によるそれらの保護の態様についてマークする。こうして保護マーク情報1004が生成される。IR形式のもとのアプリケーションバイトコード1000および保護マーク情報1004は、必要な保護のために各々静的セキュリティハンドラ522により使用される。
Java保護ツール402の各静的セキュリティハンドラ内には、バイトコード完全性検証(BIV)が存在する。図11は、BIV静的セキュリティハンドラ524の作業フローを示す図である。また、図12は、BIV動的セキュリティハンドラ616の作業フローを示す図である。ここで、BIVは、実行時にJavaバイトコードの動的完全性検証能力を導入することにより独自のタンパリング耐性保護を提供する。一般に、構築時、ツールを使って、BIVデータ1202が生成されその後保護されるBIV保護を必要とするクラスおよびメソッドに署名し、かつBIVアクションがJavaバイトコードに構築される。実行時、BIVアクションは、それぞれのバイトコードについて、動的セキュアハッシュ値がジャストインタイムで計算されるBIV被保護クラスおよびメソッドのためのJavaバイトコード保護セキュリティモジュール404を介してトリガされる。静的および動的セキュアなハッシュ値は、セキュアな形式で表現され、タンパレジスタンスゲートキーパー(TRGK、Tamper Resistance Gate Keeper)1216へ成功および/または失敗コールバック機能をフィードする。TRGK1216は、静的セキュアハッシュ値と動的セキュアハッシュ値を明示的に比較せずに、BIVチェックが成功したか否かを判別する。これは、特別に設計された数学的計算の形で適切なアルゴリズムを介して行うことができる。静的セキュアハッシュ値および動的セキュアハッシュ値が同じの場合は、一般にBIVチェックが通りかつ成功のコールバック機能が起動され得ることを示す。そうでない場合、静的セキュアハッシュ値および動的セキュアハッシュ値が同じでない場合は、特定のクラスまたはメソッドのタンパリングが検出され、BIVチェックが失敗であることを示す。こうして、失敗のコールバック機能を起動することができる。これらコールバック機能は、検出されるタンパリング攻撃に対するユーザ定義の対抗手段である。
本発明において、Javaバイトコードの動的セキュアハッシュ値1214を計算するプロセスは、計算が、実行可能なものに割り当てられたメモリから直接ネィティブコードを選ぶに過ぎない、通常のネーティブバイナリコードに対する計算の典型的処理とは異なる。通常、アプリケーションコードは、Java実行時にはメモリから直接コードセグメントを得ることはできない。その代り、アプリケーションコードは、JVM410機構を通じてクラスまたはメソッドのバイトコードを入手する。この発明にでは、JVM410へのアップコールを使用してバイトコードを回収し、その後セキュアな動的ハッシュ値1214を計算しかつ回収したバイトコードを予め登録されているハッシュ値と照合して完全性検証チェックを行うことにより、セキュリティモジュールが、この能力およびJNIインタフェースを強化する。
図11に関連して、バイトコード完全性検証静的セキュリティハンドラ524は、バイトコード署名を含むことがわかる。BIV静的セキュリティハンドラ524の主要な機能の1つは、アプリケーションバイトコードをウォークスルーして保護マーク情報1105を使用してクラスおよびメソッドの各々をチェックして、どのクラスまたはメソッドがBIV保護を必要とするかを判別することである。あるクラスまたはメソッドがBIV保護を必要とする場合、特定のハッシュ値を、セキュアなハッシュ計算をその特定のクラスまたはメソッドのバイトコード1106または1107に適用することにより計算する。一般には、計算技術において知られるセキュアなハッシュ計算アルゴリズムを使用する。これら結果として得られるハッシュ値は、実行時に効果的に使用できるよう組織化され構造化されたメソッドで、BIVデータ1108として記憶される。
バイトコード完全性検証静的セキュリティハンドラのBIVデータ1108は、クラスおよびメソッドの静的ハッシュ値のデータおよびWBBIV暗号キーデータ等の他の情報を含むデータ容器である。これらデータは、動的BIVセキュリティハンドラにより実行時に使用される。より効果的に使用するために、BIVデータ1108は、保護対象のクラスおよびメソッドの各々についての対応の情報およびそれらの静的ハッシュ値で構成される。
バイトコード完全性検証静的セキュリティハンドラ524はまたBIVデータ1108を変換および暗号化する役割をする。BIVデータ1108の完全性を維持することは大変重要である。BIVデータは、ネットワーク経由で転送またはダウンロード可能である。したがって、本発明はこれらに対して、使用のためのパッキングの一部として変換と暗号化とを適用する。このような保護がなければ、BIVデータのタンパリングは、BIV保護を破壊するステップとなり得る。パッケージの際、BIV静的セキュリティハンドラは、敏感なBIVデータに対する静的攻撃を防ぐようにBIVデータに対する二重の保護を行う。まず、静的ハッシュ値を実行時に動的BIVセキュリティハンドラ616で変換された形式で演算できるように、BIV静的セキュリティハンドラ524がこれら値に対するデータの変換を行う。これにより、確実に実際の単純な値が暴露されないようになる。次に、BIV静的セキュリティハンドラ524は、これら変換された値の暗号化を行い、動的に使用される前にこれらの変換された値になんらのタンパリングも発生しないようにする。
なお、BIVデータ1108は、動的セキュリティハンドラ611により実行時に使用される一種の実行時データである。実行時データは、ユーザオプションにより単一のファイルまたは複数のファイルに組織化され記憶される。複数の実行時データファイル形式には、より細かい粒度でデータ情報をアップデートおよびダウンロードできるなどいくつか利点がある。たとえば、BIVデータ1108が、保護対象のJavaクラスの各々について構成され得る。このように、BIV保護は、より実際的にクラスごとに行うことができる。
バイトコード完全性検証静的セキュリティハンドラ524は、また、独自のBIVトリガを提供する。実行時トリガBIVへの2つのアプローチは、外部BIVAPIおよび内部BIVトリガを介して提供される。本発明のシステムの一部である第1のアプローチとして、いくつかの外部BIVAPIが提供され、ユーザは、BIVチェックを行う明確なアイディアを有する適切な場所でそれらを使用する。ユーザは、どのJavaクラスまたはメソッドがBIVチェックを必要とするか示すことができる。ユーザは、コールバック機能を使用することにより軽減アクションの完全なコントロールを有する。他のメソッドは、ユーザが外部のAPIを起動することによりトリガすることへの代替メソッドである。その代りに、BIVトリガをJavaバイトコード保護セキュリティモジュールのいくつかの機能内に予め構築することができる。Javaアプリケーションがこれらの機能を起動するたびに、予め決められ態様で、内部のBIVアクションがトリガされる。いくつかの軽減アクションは、予め規定されており、セキュリティモジュールにより内部に取り込まれる。しかしながら、ユーザは依然として、軽減アクションに対する部分的コントロールを有する。これは設定に従って行動するよう、予め設定されたAPIを提供して、セキュリティモジュールが取る軽減アクションを予めユーザに設定してもらうことにより有効となる。一般に、ユーザは、外部BIVAPIを使用するかどうかおよび使用する場所に対して完全なコントロールを有し、かつ構築時内部BIVトリガを使用するかどうかについて間接的コントロールを有する。セキュリティモジュールにより隠されかつ制御されるので、内部BIVをトリガする場所に対しては、ユーザはなんらのコントロールも持たない。
図12に関して、バイトコード完全性検証動的セキュリティハンドラ616が、BIV初期化を含むことがわかる。BIV初期化が行われて、WBBIV復号化キーデータ1203を使用してセキュアな静的BIVデータ1202がロードされ復号化され、その後、これらはセキュアな形式でメモリ内にロードされる。BIV初期化を2つのメソッドで実行することができる。すなわち、セキュリティモジュールの初期化の一部としてまたは動的BIVの際のオンデマンドである。第1のメソッドについては、被保護Javaアプリケーションをロードする際にSM初期化の一部として一度実行することができる。第2のメソッドについては、動的BIVの際にオンデマンドで必要とされるものをロードすることにより実行できる。これは、BIVがクラスについて必要とされる場合にできる。BIVデータファイルは、クラスレベルで組織化することができる。特定のクラスでは、BIVデータがこのクラスについてのみロードされかつ復号化される。この第2のメソッドは、ユーザに対してより自由度を与えて、クラスバイトコードが変化する場合にはBIVデータに必要な小さな変化を与えることができる。
バイトコード完全性検証動的セキュリティハンドラはまた動的BIV1210を行う。上記のとおり、クラスまたはメソッドの動的BIVを、外部BIVAPIコールまたは被保護Javaアプリケーションから予め決まった内部BIVトリガを含むセキュリティモジュールへの他の機能コールにより起動される。動的BIVは、少なくとも以下のキーアクションを含む、すなわち、最新のバイトコードの入手、動的セキュアハッシュ値の計算およびタンパリング耐性ゲートキーパ(TRGK)1216を設けることである。
最新のバイトコードの入手はアップコールによって行われる。セキュリティモジュール内のクラスまたはメソッドのためのセキュアな動的ハッシュ値を安全に計算するため、クラスまたはメソッドの最新のバイトコードを、JNIを介するJVM410へのアップコールにより得る必要がある。JVM410へロードされるクラスまたはメソッドを実行しながら、同じバイトコード自体をバイナリに翻訳またはコンパイルする必要がある。バイトコードに対してタンパリング攻撃がない場合には、バイトコードは静的にセキュアなハッシュ値が計算された同じバイトコードのはずである。
動的にセキュアなハッシュ値の計算アクションには、典型的で知られたハッシングの計算を含み、結果として得られる値は保護された形式であり、保護された形式で使用される。
TRGK1216の提供には、2つの入力が含まれる。TRGK1216は、特定のクラスまたはメソッドについての静的および動的セキュアハッシュ値(SSHV1212、DSHV1214)の両方を使用し、クラスまたはメソッドのバイトコードの完全性が傷つけられているかどうかを検証する。バイトコードにタンパリングが起こっていれば、そのDSHV1214は、そのSSHV1212とは同じになり得ない。TRGK1216は、バイトコードに対するタンパリングを検出する。BIV検証が通れば、TRGK1216は、成功のコールバック機能をトリガするかまたは元のBIVトリガへ戻るか、そうでない場合はTGRK1216は、ユーザの軽減アクションとして失敗コールバック機能をトリガすることになる。
バイトコード完全性動的セキュリティハンドラ616は、また、BIV終了という形の終了ステップを含む。セキュリティモジュールの一部としてのBIV終了により、メモリ空間およびBIV動的セキュアハンドラにより使用される他の情報のクリーンアップが行われる。
図13は、セキュアローディングバイトコード(SLB、Secure Loading Bytecode)静的セキュリティハンドラ528を示す。SLB静的セキュリティハンドラ528が、元のJavaアプリケーションバイトコード1301の内部表現をWB暗号化1302と復号化キーデータ1304ならびに保護マーキング情報1306とともに受ける。
SLBセキュリティハンドラ528の重要な出力がアプリケーションスタブ1308である。アプリケーションスタブ1308は、実行時セキュリティモジュールを介するロードのプロセスを起動するブートストラッピングクラスを含む。アプリケーションスタブ1308は、JVM410によりロードされる。アプリケーションスタブ1308は、独立してまたは他のJavaアプリケーションにより起動されるアプリケーションを有効にするのに必要な各パブリックAPIを含む。アプリケーションスタブ1308は、セキュリティモジュールに対するダウンコール機能を起動するメソッドを含み、これは、次にJavaアプリケーションをJVMに復号化してロードし、実行する。
アプリケーションスタブを準備するため、SLB静的セキュリティハンドラ528は、アプリケーションバイトコード作業フレーム1310および暗号化されたアプリケーションバイトコード作業フレーム1312を含む。アプリケーションバイトコード作業フレーム1310は、もとのアプリケーションバイトコード1301とは異なる。一般に、アプリケーションバイトコード作業フレーム1310内のクラスは、保護を必要とせず、元のものと同じになる。クラスが安全にロードする必要がある場合、クラススタブは、元のクラスバイトコードを置き換え、それによりクラスバイトコードはもとのバイトコードとなる。暗号化されたフレーム1312は、構築時、静的セキュリティハンドラ528を介してアプリケーション暗号化キーデータ1302を使用してアプリケーションバイトコード作業フレーム1310を暗号化することにより得られ、かつ実行時、動的セキュリティハンドラ620を介してWB復号化キーデータ1304を使用して復号化される。
アプリケーションスタブ1308に加えて、アプリケーションペイロード1314が生成される。アプリケーションペイロード1314は、暗号化されたアプリケーション作業フレーム1312およびアプリケーションWB復号化キーデータ1316を含む。被保護アプリケーションペイロードにおけるアプリケーションWB復号化キーデータ1316は、WB静的セキュリティハンドラ508により生成されるキーデータであり、WB復号化キーデータ1302の一部としてSLB静的セキュリティハンドラ528に伝達される。実行時、暗号化されたアプリケーションバイトコード作業フレーム1312を復号化するために使用される。
図13に示す通り、基礎となるコードは、クラスバイトコード1318、クラススタブ1320または暗号化されたクラスバイトコード1322として形成され得る。クラスバイトコード1318は、元のバイトコードである。クラススタブ1320は、必要な場合暗号化されたクラスバイトコード1322をロードする実行時のセキュリティモジュールを介して信頼できるクラスローディングプロセスを起動するブートストラップ法を含む。パッケージの際に、クラスバイトコード1318が分析される。マークされたメソッドが、セキュリティモジュールにダウンコール法を起動するメソッドにより置換され、その場合セキュリティモジュールは、パッケージの際に指定されたセキュリティハンドラメソッドを介して元のバイトコード機能性を起動する。暗号化されたクラスバイトコード1322は、構築時、静的セキュリティハンドラ528によりクラスWB暗号化キーデータ1302を使用してクラスバイトコード1318を暗号化することにより得られ、実行時、動的セキュリティハンドラ620を介してクラスWB復号化キーデータを使用することにより復号化される。
暗号化クラスバイトコードフレーム1324は、SLB静的セキュリティハンドラ528により生成される。1以上のクラスについて暗号化クラスバイトコードおよびクラスWB復号化キーを含む。ユーザは、暗号化されたクラスバイトコード1322内にフレームが含むことができるクラスの数を制御する選択肢を有する。ユーザは、これらを実行時ともにまたは別々にロードする選択肢を有する。クラスWB復号化キーデータは、WB静的セキュリティハンドラ508により生成され、かつWB復号化キーデータ1304の一部としてSLB静的セキュリティハンドラ528へ伝達される。実行時、クラスWB復号化キーデータ1304を使用して、暗号化されたクラスバイトコード1322を復号化する。ユーザは、クラスWB暗号化および復号化キーは1つまたは複数のいずれを生成するかという選択肢を有する。
図14に、SLB動的セキュリティハンドラ620の作業フローを示す。SLB動的セキュリティハンドラ620は、バイトコード実行の際にJNIによりJVM410と接続されるセキュリティモジュールの機能要素である。SLB動的セキュリティハンドラ620は、JavaアプリケーションバイトコードのJVM410における作業空間内へのロードを管理制御する。この能力により元のJavaアプリケーションバイトコードが保護され、同様に保護された形式で配布され、JVM410へロードされる前のアプリケーションバイトコードに対するいかなる静的攻撃をも確実に阻止することができる。SLBD-ハンドラ620は、セキュアなアプリケーションのロードおよびセキュアなクラスのロードを含む2つの主要機能要素を含む。
セキュアなアプリケーションのロードには、クラスパスに存在しかつ通常JVM410によりロードされる被保護アプリケーションスタブ1404を含む。ロードの後、メインブートストラップメソッドを実行し、その後アプリケーションブートストラップメソッド1403を、JNISMブリッジ418経由でダウンコールAPIを介して起動する。これにより、SLB動的セキュリティハンドラ620の次のアプリケーションロードアクションがトリガされる。まず、被保護アプリケーションペイロード1408が保護データフォルダからロードされる。これは、暗号化されたアプリケーショバイトコード作業フレーム1410をペイロード1408からメモリバッファ内へロードすることと、次に、アプリケーションWB復号化キーデータ1304を使用することによりジャストインメモリで、暗号化されたアプリケーションバイトコード作業フレーム1410を復号化することとを含む。次に、復号化されたアプリケーションバイトコード作業フレーム1412をウォークスルーして、特殊なSMクラスローダ1414を用いることによりアプリケーション作業空間へ作業フレームから各クラスバイトコードおよびクラススタブをロードする。SMクラスローダ1414は、セキュリティモジュールを使用して暗号化されたバイトコードをロードし、このバイトコードを復号化しJVM410へロードする。追加のセキュリティチェックを組み込んで、SMクラスローダ1414にBIV保護を加えかつロードおよび実行時のクラスローダのヒエラルキーおよび完全性についてチェックする。最後に、実行は、作業空間内のメインアプリケーションクラスのメインメソッドへ渡される。
セキュアなクラスロードには、図15に示すクラスブーストラップメソッドのトリガを含む。一般には、実行の際に、保護されるアプリケーションを実行する前に装置上に暗号化されたクラスバイトコードフレームをプリインストールまたはダウンロードすることができる。これは、アプリケーションの機能的性質に依存する。クラススタブを有するクラスは、被保護アプリケーションの実行の際に必要な場合、クラスブートストラップメソッドがトリガされ、暗号化されたクラスバイトコードフレームから必要なクラスをロードする次のステップ1500がJNISMブリッジを介して実行される。まず、対応する暗号化されたクラスバイトコードフレームをメモリバッファにロードする。次に、フレームのジャストインメモリに含まれる暗号化されたクラスの各々を、特定のクラスWB復号化キーデータを用いることにより復号化する。復号化したクラスバイトコードを、SMクラスローダを用いてアプリケーション作業空間内へロードする。その後、アプリケーションの実行は、作業空間内で継続する。
なお、すべてのコードをまずロードする必要があるネィティブアプリケーションを実行する場合と異なり、JVMが進行中に新たなクラスのロードを許可する。こうして、必要な場合にのみクラスをロードすることにより動的にアプリケーションを拡張する。その上、Javaのこの特徴により、コードリフティング攻撃に対抗してSLBセキュアクラスローディングを使用する良い機会が提供される。まず、被保護クラスがSLBで安全にロードされ実行された後、本発明が、そのクラススタブに復元することによってクラスを保護状態に維持するオプションを提供できる。このように、まさに実行時のみに、クラスのオリジナルバイトコードがJVM画像内で入手可能な一方、それ以外の時には保護された形式のままである。
ダイナミックバイトコードデクリプション(DBD、Dynamic Bytecode Decryption)には、暗号化されたメソッドが、実行中のJavaプログラムにより起動される場合にのみ被保護メソッドのバイトコードの復号化を含む。これにより、アプリケーションの暗号化されていないバイトコードのすべてが、一度にメモリに存在しないことが確実になる。
図16は、DBD静的セキュリティハンドラ530の構築時作業フローを示す。構築時、各保護されていないクラスバイトコードファイル1602が、内部バッファへロードされ、新しいクラスバイトコード作業フレームが、保護マーキング情報1306を使用してDBDにより保護されるクラスについて構築され、マークされたメソッドが、実行時にDBD動的セキュリティハンドラ530の起動をトリガするダウンコールメソッドを起動するメソッドスタブ1604と置き換えられる。保護対象の各Javaメソッドについて、そのバイトコードはメソッドのWB暗号化キーを使用して保護されたバイトコードデータの一部として配布するためのWB復号化キーデータ1608と共にパッケージされた被暗号化メソッドを被暗号化メソッドバイトコードフレーム1606に記憶することにより暗号化される。オリジナルバイトコードクラスは被保護クラスバイトコード作業フレーム1610により置き換えられて配布される。
図18は、DBD動的セキュリティハンドラ622の実行時間作業フローである。JVM上で、被保護Javaアプリケーションを実行中に暗号化されたDBDJavaメソッドが起動されると、メソッドスタブがまず実行されて、その後ダウンコールが行われ、メソッドブートストラッピング1802が、DBD動的セキュリティハンドラ622内で起動される。これは、WBメソッド復号化キーデータを使用することにより被暗号化メソッドを被暗号化メソッドバイトコードフレーム1804から識別しかつ復号化し、その真のバイトコードをJVMへ復元する例を含む。JVMへクラスバイトコードを復元するための実現例には、JVMネームスペース内での名称の混乱を避けるためクラスを再命名して、JVMへクラスのコピーを再構成する。図17にこの例を示す。図中、部分的に復号化されたクラスが新たなクラス名とともにJVMにロードされる。
図18において、必要であれば、オリジナルのバイトコードがJVMに復元されると、DBD動的セキュリティハンドラ622が、実バイコードインスタンスにクラスの状態をコピーすることができ、このオプションは、構築時に決定される。DBD動的セキュリティハンドラ622は、そこでJVM410における非暗号化メソッドを起動する。メソッドの起動が終了すると、セキュリティハンドラ622は、非暗号化クラスインスタンスからの実状態を暗号化インスタンスに復元し、制御は起点のダウンコールメソッドへ戻る。図17は、非暗号化メソッドを呼び出す前のサンプルのメソッド起動および状態コピーオペレーション1700を示す。非暗号化メソッドが実行を終えると、その状態をDBD動的セキュリティハンドラ622により被保護メソッドスタブでクラスインスタンスへ再びコピーする。制御は、被保護メソッドへ戻り、一方セキュリティハンドラは非暗号化クラスおよびインスタンスをJVM410から削除する。
本発明の上記の実施例は、例示目的のみのものである。当業者においては、添付の特許請求の範囲によってのみ規定される発明の範囲から逸脱することなく、特定の実施例には変更、修正および変形が可能である。

Claims (49)

  1. Javaバイトコードのタンパリング耐性を向上させるためのシステムであって、
    1つまたは複数のプロセッサと、
    前記1つまたは複数のプロセッサの少なくとも1つに操作可能に結合され、前記1つまたは複数のプロセッサの少なくとも1つに実行された際に、前記1つまたは複数のプロセッサの少なくとも1つに、以下の処理を実行させる命令を格納した、1つまたは複数のメモリと、
    前記処理は、
    安全なJavaバイトコードと対応するセキュリティ情報を生成するために、構築時、Javaバイトコードに対して保護を適用することと
    前記安全なJavaバイトコードの少なくとも一部をJavaヴァーチャルマシン(JVM)にロードすることと、
    前記安全なJavaバイトコードのロード時と実行時にJavaネイティブインタフェース(JNI)ブリッジを介して前記JVMと通信するために、デプロイ時に実行するよう構成されたソフトウエアモジュールを含むセキュリティモジュールに、前記対応するセキュリティ情報をロードすることと、
    1つまたは複数の保護機構を介して、前記Javaバイトコードのローディングと実行の間、前記Javaバイトコードへの静的および動的攻撃に対抗すること、とを含み、
    前記1つまたは複数の保護機構の少なくとも1つは、前記セキュリティモジュールに組み込まれ、前記静的および動的攻撃は、前記セキュリティモジュールにロードされた前記対応するセキュリティ情報の少なくとも一部に基づいて対抗され、前記セキュリティモジュールは、前記JVMと共に前記JNIブリッジを介して前記安全なJavaバイトコードと共に実行されるよう構成されている、システム。
  2. 前記Javaバイトコードが、構築時、複数の部分に分けられ、実行時、前記複数の部分が前記JVMの異なる部分におよび前記セキュリティモジュールに対して実行される、請求項に記載のシステム。
  3. 前記安全なJavaバイトコードが、被保護Javaアプリケーションバイトコードスタブ、被保護アプリケーションペイロード、および暗号化されたクラスバイトコードフレームを含、請求項に記載のシステム。
  4. 記被保護Javaアプリケーションバイトコードスタブを介して、前記被保護アプリケーションペイロードが起動され、請求項に記載のシステム。
  5. 前記セキュリティモジュールが、被保護バイトコードクラスローダを含み、
    記被保護バイトコードクラスローダを使用して前記暗号化クラスバイトコードフレームにより前記被保護アプリケーションペイロードが起動される請求項3または4に記載のシステム。
  6. 前記セキュリティモジュールが、JVM環境への機能的延長部であり、被保護Javaアプリケーションの信頼の基礎を提供するよう構成され、かつ、複数の異なる安全なJavaバイトコードに整合するよう構成されている、請求項に記載のシステム。
  7. 前記セキュリティモジュールがローカルハードウェアごとの保護技術およびシステムを適用するネィティブプログラミング言語で書かれる、請求項1からのいずれかに記載のシステム。
  8. 前記セキュリティモジュールが、ローカルネィティブソフトウェアごとの保護技術およびシステムを適用するネィティブプログラミング言語で書かれる請求項1からのいずれかに記載のシステム。
  9. 前記セキュリティモジュールが、ホワイトボックスセキュリティ技術を用いて保護される、請求項1からのいずれかに記載のシステム。
  10. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構のパラメータが、ユーザの好みにより構成可能で、かつ、前記ユーザの好みに従って前記安全なJavaバイトコードが生成される、請求項1からのいずれかに記載のシステム。
  11. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が前記Javaバイトコードの実行の一部を前記セキュリティモジュールへ移動させ、それにより前記JVMが実行時に前記Javaバイトコードのすべてを実行するわけではなくなり、元のJavaバイトコードが、JVM上で完全に観察可能にはならない、請求項10に記載のシステム。
  12. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が、前記Javaバイトコードの選択されたメソッドを、JVMには直接可視的でなく、セキュリティモジュールによってのみ起動可能であるネィティブ形式の機能に変換する、請求項10に記載のシステム。
  13. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が前記Javaバイトコードに対してデータフロー変換を行い、機能性を変更することなしに、前記Javaバイトコードのコード構造を変換する、請求項10に記載のシステム。
  14. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が、前記Javaバイトコードに対する制御フロー変換を行い、機能性を変更することなく前記Javaバイトコードのコード構造を変換する、請求項10に記載のシステム。
  15. 記セキュリティモジュールが、実行されるべきJavaバイトコードを、JVMの作業空間内にジャストインタイムでロードしかつ復元し、かつその後実行後の復元したJavaバイトコードを除去する、請求項10に記載のシステム。
  16. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が、アンチデバッギングモニタリングを行う、請求項1から10のいずれかに記載のシステム。
  17. 前記少なくとも1つの保護機構が、
    カーネルからのそれ自らのプロセスマップを周期的にチェックし、
    防御アクションをトリガすることによりそのメモリ空間内へロードされるJavaのデバッギングに関連するライブラリに応答する、請求項16に記載のシステム。
  18. 前記応答が
    防御アクションをトリガすることにより、そのメモリ空間内へロードされるJDPA(Java Platform Debug Architecture)に関連するライブラリに応答するステップを含む、請求項17に記載のシステム。
  19. 前記応答が
    防御アクションをトリガすることにより、そのメモリ空間内へロードされるJVMTI(Java Virtual Machine Tool Interface)に関連するライブラリに応答するステップを含む、請求項17に記載のシステム。
  20. 前記少なくとも1つの保護機構が、デバッギングスレッドの起動を監視し、かつ
    防御アクションをトリガすることにより起動されるデバッギングスレッドに応答する、請求項16に記載のシステム。
  21. 前記少なくとも1つの保護機構が、デバッギングツールにより実行されるラインブレークメッセージを監視し、かつ
    防御アクションをトリガすることによりラインブレークメッセージの検出に応答する、請求項16に記載のシステム。
  22. 前記1つまたは複数の保護機構は、ホウイトボックス(WB)静的セキュリティハンドラを含み、
    前記WB静的セキュリティハンドラは、
    ユーザからの暗号キーを含む暗号情報を受けて、
    構築時使用されるWB暗号化キーデータと、
    実行時、前記セキュリティモジュールにより使用されるWB復号化キーデータおよびWBセキュリティモジュールユーティリティとを生成するものである、請求項1から10のいずれかに記載のシステム。
  23. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が、バイトコード完全性検証(BIV)システムを含み、
    構築時に前記安全なJavaバイトコードのハッシュ値が計算され、かつ、
    前記タンパリング耐性セキュリティモジュールが、前記構築時ハッシュ値が実行時に計算される前記ハッシュ値に等しいかどうか決定し、前記セキュリティモジュールが、検証失敗に応答してタンパリング対抗策を起動する、請求項1から10のいずれかに記載のシステム。
  24. 記セキュリティモジュールが、
    前記JVMで、インタフェースを介してJavaバイトコードを入手し、
    前記バイトコードの動的ハッシュ値を計算し、
    前記構築時ハッシュ値が実行時に計算した前記ハッシュ値に等しいかどうか決定し、等しくない場合にはタンパリング抵抗策を起動するよう動作することができる、請求項23に記載のシステム。
  25. 前記ハッシュ値検証が、タンパリング耐性ゲートキーパーにより行われる、請求項24に記載のシステム。
  26. 前記ハッシュ値検証が、構築時と実行時のハッシュ値を明示的に比較することなしに行われる、請求項24に記載のシステム。
  27. 前記ハッシュ値検証が、前記Javaバイトコードの選択されたクラスおよびメソッドに対してのみ行われる、請求項25に記載のシステム。
  28. 前記ハッシュ値検証ならびに選択されたクラスおよびメソッドに関連するデータが暗号化される、請求項27に記載のシステム。
  29. 静的ハッシュ値が、異なるキーデータを使用したWBサイファーにより暗号化される、請求項27に記載のシステム。
  30. BIVシステムが閉じる際に、前記セキュリティモジュールが、BIVシステムにより使用された関連のメモリ空間および他の情報をクリーンにする、請求項27に記載のシステム。
  31. 前記1つまたは複数の保護機構が、構築時、被保護Javaアプリケーションバイトコードスタブ、被保護アプリケーションペイロード、および暗号化クラスバイトコードフレームを生成するためのセキュアローディングバイトコード(SLB)ツールを含み、
    記セキュリティモジュールが、SLB動的セキュリティハンドラを含み、このSLB動的セキュリティハンドラが、
    前記安全なJavaアプリケーションバイトコードに対応する前記暗号クラスバイトコードフレームをメモリバッファへロードし、
    前記暗号化クラスに対応するホワイトボックス被保護復号化キーデータを介して前記暗号化クラスバイトコードフレーム内に含まれる各暗号化クラスを復号化し、かつ
    各復号化したクラスバイトコードを、セキュリティモジュールクラスローダーによりアプリケーション作業空間へロードして、前記アプリケーション作業空間内の前記Javaアプリケーションバイトコードを実行するためのものである、請求項1から10のいずれかに記載のシステム。
  32. 前記安全なJavaバイトコードの実行時のどの時点においても、当該安全なJavaバイトコードの一部のみが、復号された形式で格納される、
    請求項1から10のいずれかに記載のシステム。
  33. Javaバイトコードのタンパリング耐性を向上させるために、1つまたは複数のコンピュータデバイスで実行される方法であって、
    前記1つまたは複数のコンピュータデバイスの少なくとも1つにより、構築時に、Javaバイトコードに保護を適用し安全なJavaバイトコードと対応するセキュリティ情報とを生成するステップと、
    前記1つまたは複数のコンピュータデバイスの少なくとも1つにより、前記安全なJavaバイトコードの少なくとも一部をJavaヴァーチャルマシン(JVM)にロードするステップと、
    前記安全なJavaバイトコードのロード時と実行時にJavaネイティブインタフェース(JNI)ブリッジを介して前記JVMと通信するために、前記1つまたは複数のコンピュータデバイスの少なくとも1つにより、デプロイ時に実行するよう構成されたソフトウエアモジュールを含むセキュリティモジュールに、前記対応するセキュリティ情報をロードするステップと、
    前記1つまたは複数のコンピュータデバイスの少なくとも1つにより、1つまたは複数の保護機構を介して、前記Javaバイトコードのローディングと実行の間、前記Javaバイトコードへの静的および動的攻撃に対抗するステップ、とを含み、
    前記1つまたは複数の保護機構の少なくとも1つは、前記セキュリティモジュールに組み込まれ、前記静的および動的攻撃は、前記セキュリティモジュールにロードされた前記対応するセキュリティ情報の少なくとも一部に基づいて対抗され、前記セキュリティモジュールは、前記JVMと共に前記JNIブリッジを介して前記安全なJavaバイトコードと共に実行されるよう構成されている、方法。
  34. 前記Javaバイトコードが、構築時、複数の部分に分けられ、実行時、前記複数の部分が前記JVMの異なる部分におよび前記セキュリティモジュールに対して実行される、請求項33に記載の方法。
  35. 前記安全なJavaバイトコードが、被保護Javaアプリケーションバイトコードスタブ、被保護アプリケーションペイロード、および暗号化されたクラスバイトコードフレームを含む、請求項33に記載の方法。
  36. 前記被保護Javaアプリケーションバイトコードスタブを介して、前記被保護アプリケーションペイロードが起動される、請求項35に記載の方法。
  37. 前記セキュリティモジュールが、被保護バイトコードクラスローダを含み、
    前記被保護バイトコードクラスローダを使用して前記暗号化クラスバイトコードフレームにより前記被保護アプリケーションペイロードが起動される、請求項35または36に記載の方法。
  38. 前記セキュリティモジュールが、JVM環境への機能的延長部であり、被保護Javaアプリケーションの信頼の基礎を提供するよう構成され、かつ、複数の異なる安全なJavaバイトコードに整合するよう構成されている、請求項33に記載の方法。
  39. 前記セキュリティモジュールがローカルハードウェアごとの保護技術およびシステムを適用するネィティブプログラミング言語で書かれる、請求項33から38のいずれかに記載の方法。
  40. 前記セキュリティモジュールが、ローカルネィティブソフトウェアごとの保護技術およびシステムを適用するネィティブプログラミング言語で書かれる、請求項33から38のいずれかに記載の方法。
  41. 前記セキュリティモジュールが、ホワイトボックスセキュリティ技術を用いて保護される、請求項33から38のいずれかに記載の方法。
  42. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構のパラメータが、ユーザの好みにより構成可能で、かつ、前記ユーザの好みに従って前記安全なJavaバイトコードが生成される、請求項33から41のいずれかに記載の方法。
  43. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が前記Javaバイトコードの実行の一部を前記セキュリティモジュールへ移動させ、それにより前記JVMが実行時に前記Javaバイトコードのすべてを実行するわけではなくなり、元のJavaバイトコードが、JVM上で完全に観察可能にはならない、請求項42に記載の方法。
  44. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が、前記Javaバイトコードの選択されたメソッドを、JVMには直接可視的でなく、セキュリティモジュールによってのみ起動可能であるネィティブ形式の機能に変換する、請求項42に記載の方法。
  45. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が前記Javaバイトコードに対してデータフロー変換を行い、機能性を変更することなしに、前記Javaバイトコードのコード構造を変換する、請求項42に記載の方法。
  46. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が、前記Javaバイトコードに対する制御フロー変換を行い、機能性を変更することなく前記Javaバイトコードのコード構造を変換する、請求項42に記載の方法。
  47. 前記セキュリティモジュールが、実行されるべきJavaバイトコードを、JVMの作業空間内にジャストインタイムでロードしかつ復元し、かつその後実行後の復元したJavaバイトコードを除去する、請求項42に記載の方法。
  48. 前記1つまたは複数の保護機構中の少なくとも1つの保護機構が、アンチデバッギングモニタリングを行う、請求項33から42のいずれかに記載の方法。
  49. 少なくとも1つのコンピュータ読取り可能な記録媒体であって、1つまたは複数のコンピュータデバイスで実行されたときに、前記1つまたは複数のコンピュータデバイスの少なくとも1つに、請求項33から48のいずれかに記載の方法を実行させるコンピュータ読取り可能な命令を記録した、記録媒体。
JP2012538154A 2009-11-13 2010-11-12 悪意ある実行環境内での静的および動的攻撃からJavaバイトコードを保護するシステムおよび方法 Expired - Fee Related JP5689472B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US26088709P 2009-11-13 2009-11-13
US61/260,887 2009-11-13
PCT/CA2010/001761 WO2011057393A1 (en) 2009-11-13 2010-11-12 System and method to protect java bytecode code against static and dynamic attacks within hostile execution environments

Publications (2)

Publication Number Publication Date
JP2013511077A JP2013511077A (ja) 2013-03-28
JP5689472B2 true JP5689472B2 (ja) 2015-03-25

Family

ID=43991129

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012538154A Expired - Fee Related JP5689472B2 (ja) 2009-11-13 2010-11-12 悪意ある実行環境内での静的および動的攻撃からJavaバイトコードを保護するシステムおよび方法

Country Status (8)

Country Link
US (1) US9213826B2 (ja)
EP (2) EP2467800B1 (ja)
JP (1) JP5689472B2 (ja)
KR (1) KR20130018642A (ja)
CN (1) CN102598017B (ja)
CA (1) CA2774728C (ja)
IN (1) IN2012DN02458A (ja)
WO (1) WO2011057393A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210094300A (ko) * 2020-01-21 2021-07-29 주식회사 행복소프트 응용프로그램의 동적 변조 탐지 방법 및 장치

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8424082B2 (en) 2008-05-08 2013-04-16 Google Inc. Safely executing an untrusted native code module on a computing device
EP2402880A1 (en) * 2010-07-01 2012-01-04 Aladdin Europe GmbH Method and device for selectively protecting one of a plurality of methods of a class of an application written in an object-orientated language
FR2967275B1 (fr) * 2010-11-10 2012-12-28 Oberthur Technologies Procede, programme d'ordinateur et dispositif de securisation de code intermediaire de programmation pour son execution par une machine virtuelle
US8812868B2 (en) 2011-03-21 2014-08-19 Mocana Corporation Secure execution of unsecured apps on a device
US8955142B2 (en) * 2011-03-21 2015-02-10 Mocana Corporation Secure execution of unsecured apps on a device
US9473485B2 (en) 2011-03-21 2016-10-18 Blue Cedar Networks, Inc. Secure single sign-on for a group of wrapped applications on a computing device and runtime credential sharing
US9396325B2 (en) 2011-03-21 2016-07-19 Mocana Corporation Provisioning an app on a device and implementing a keystore
US9460281B2 (en) * 2011-03-31 2016-10-04 Irdeto B.V. Method of securing non-native code
WO2013049841A1 (en) * 2011-09-30 2013-04-04 Newman Infinite, Inc. Apparatus, method and computer-readable storage medium for securing javascript
US9021271B1 (en) * 2011-12-27 2015-04-28 Emc Corporation Injecting code decrypted by a hardware decryption module into Java applications
KR101944010B1 (ko) * 2012-02-24 2019-01-30 삼성전자 주식회사 애플리케이션의 변조 감지 방법 및 장치
WO2013142947A1 (en) 2012-03-30 2013-10-03 Irdeto Canada Corporation Secured execution of a web application
WO2014133528A1 (en) * 2013-02-28 2014-09-04 Hewlett-Packard Development Company, L.P. Determining coverage of dynamic security scans using runtime and static code analyses
US9141823B2 (en) * 2013-03-15 2015-09-22 Veridicom, Sa De Cv Abstraction layer for default encryption with orthogonal encryption logic session object; and automated authentication, with a method for online litigation
KR101500512B1 (ko) * 2013-05-15 2015-03-18 소프트캠프(주) 데이터 프로세싱 시스템 보안 장치와 보안방법
US9378034B2 (en) 2013-05-16 2016-06-28 Sap Se Dynamic bytecode modification of classes and class hierarchies
US8943592B1 (en) 2013-07-15 2015-01-27 Eset, Spol. S.R.O. Methods of detection of software exploitation
KR101350390B1 (ko) * 2013-08-14 2014-01-16 숭실대학교산학협력단 코드 난독화 장치 및 그 방법
KR101471589B1 (ko) * 2013-08-22 2014-12-10 (주)잉카엔트웍스 공통중간언어 기반 프로그램을 위한 보안 제공 방법
KR101490047B1 (ko) * 2013-09-27 2015-02-04 숭실대학교산학협력단 자가변환 기반 애플리케이션 코드 난독화 장치 및 그 방법
US9483549B2 (en) 2013-09-30 2016-11-01 Microsoft Technology Licensing, Llc Persisting state at scale across browser sessions
US9740854B2 (en) * 2013-10-25 2017-08-22 Red Hat, Inc. System and method for code protection
KR101556908B1 (ko) * 2013-11-14 2015-10-02 (주)잉카엔트웍스 프로그램 보호 장치
GB201405754D0 (en) * 2014-03-31 2014-05-14 Irdeto Bv Protecting an item of software comprising conditional code
KR101566142B1 (ko) * 2014-10-21 2015-11-06 숭실대학교산학협력단 사용자 단말기 및 그것을 이용한 응용 프로그램의 핵심코드 보호 방법
CN104375938B (zh) * 2014-11-20 2017-09-05 工业和信息化部电信研究院 安卓应用程序的动态行为监测方法及系统
EP3026559A1 (en) * 2014-11-28 2016-06-01 Thomson Licensing Method and device for providing verifying application integrity
WO2016112338A1 (en) * 2015-01-08 2016-07-14 Intertrust Technologies Corporation Cryptographic systems and methods
EP3265945A1 (en) * 2015-03-02 2018-01-10 Inventio AG Protecting a computer program against reverse engineering
US9460284B1 (en) * 2015-06-12 2016-10-04 Bitdefender IPR Management Ltd. Behavioral malware detection using an interpreter virtual machine
KR101740133B1 (ko) * 2015-08-10 2017-05-26 라인 가부시키가이샤 어플리케이션의 코드를 보호하기 위한 시스템 및 방법
KR101740134B1 (ko) 2015-08-10 2017-05-26 라인 가부시키가이샤 어플리케이션의 코드 난독화를 위한 시스템 및 방법
WO2017056194A1 (ja) * 2015-09-29 2017-04-06 株式会社 東芝 情報機器または情報通信端末および、情報処理方法
JP6890589B2 (ja) * 2015-12-15 2021-06-18 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 計算デバイス及び方法
EP3188063A1 (en) * 2015-12-29 2017-07-05 GuardSquare NV A build system
MA44905A (fr) * 2016-04-05 2018-05-09 Mi Group B V Système et procédé d'informations de vol
US10073975B2 (en) 2016-08-11 2018-09-11 International Business Machines Corporation Application integrity verification in multi-tier architectures
US10394554B1 (en) * 2016-09-09 2019-08-27 Stripe, Inc. Source code extraction via monitoring processing of obfuscated byte code
US11423140B1 (en) * 2017-03-27 2022-08-23 Melih Abdulhayoglu Auto-containment of guest user applications
US10951644B1 (en) 2017-04-07 2021-03-16 Comodo Security Solutions, Inc. Auto-containment of potentially vulnerable applications
CN107294702B (zh) * 2017-07-17 2020-04-28 四川长虹电器股份有限公司 基于Hybrid APP自身特征的前端代码加密方法
WO2019028547A1 (en) 2017-08-08 2019-02-14 Crypto4A Technologies Inc. METHOD AND SYSTEM FOR DEPLOYING AND EXECUTING EXECUTABLE CODE BY SECURE MACHINE
CN107480478B (zh) * 2017-08-14 2019-08-13 钟尚亮 一种java应用程序的加密方法及运行方法
EP3861469B1 (en) 2018-10-23 2023-05-31 Huawei Technologies Co., Ltd. Device and method for validation of virtual function pointers
EP3709560A1 (en) * 2019-03-14 2020-09-16 Thales Dis France SA Method for provisioning white-box assets and corresponding device, server and system
US11468881B2 (en) * 2019-03-29 2022-10-11 Samsung Electronics Co., Ltd. Method and system for semantic intelligent task learning and adaptive execution
KR102243378B1 (ko) * 2019-04-02 2021-04-22 (주)드림시큐리티 자바 라이브러리의 무결성을 보장하기 위한 방법 및 장치
US11150915B2 (en) 2019-09-13 2021-10-19 International Business Machines Corporation Deferred bytecode class verification in managed runtime environments
CN110826031B (zh) * 2019-10-31 2022-08-02 望海康信(北京)科技股份公司 加密方法、装置、计算机设备及存储介质
US10963275B1 (en) 2019-10-31 2021-03-30 Red Hat, Inc. Implementing dependency injection via direct bytecode generation
US11403075B2 (en) 2019-11-25 2022-08-02 International Business Machines Corporation Bytecode verification using class relationship caching
CN111143029B (zh) * 2019-12-19 2024-03-22 浪潮软件股份有限公司 基于Gitlab-CI回调集成实现虚拟机一致、自动伸缩的持续构建环境的方法
KR20210112923A (ko) 2020-03-06 2021-09-15 삼성전자주식회사 시스템 온 칩 및 이의 동작 방법
US11550883B2 (en) * 2020-09-08 2023-01-10 Assured Information Security, Inc. Code protection
CN113239330A (zh) * 2021-06-10 2021-08-10 杭州安恒信息技术股份有限公司 一种基于散列算法的反调试方法及相关装置

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5692047A (en) 1995-12-08 1997-11-25 Sun Microsystems, Inc. System and method for executing verifiable programs with facility for using non-verifiable programs from trusted sources
CA2293650C (en) 1997-06-09 2012-09-25 Christian Sven Collberg Obfuscation techniques for enhancing software security
US6594761B1 (en) 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6779114B1 (en) * 1999-08-19 2004-08-17 Cloakware Corporation Tamper resistant software-control flow encoding
CA2304433A1 (en) 2000-04-05 2001-10-05 Cloakware Corporation General purpose access recovery scheme
CA2305078A1 (en) 2000-04-12 2001-10-12 Cloakware Corporation Tamper resistant software - mass data encoding
US7020882B1 (en) * 2000-09-14 2006-03-28 International Business Machines Corporation Method, system, and program for remotely manipulating a user interface over a network
GB0024918D0 (en) * 2000-10-11 2000-11-22 Sealedmedia Ltd Method of providing java tamperproofing
CA2327911A1 (en) 2000-12-08 2002-06-08 Cloakware Corporation Obscuring functions in computer software
US7039814B2 (en) * 2001-03-07 2006-05-02 Sony Corporation Method for securing software via late stage processor instruction decryption
CA2348355A1 (en) 2001-05-24 2002-11-24 Cloakware Corporation General scheme of using encodings in computations
CA2350029A1 (en) 2001-06-08 2002-12-08 Cloakware Corporation Sustainable digital watermarking via tamper-resistant software
CA2354470A1 (en) 2001-07-30 2003-01-30 Cloakware Corporation Active content for secure digital media
US7516331B2 (en) * 2003-11-26 2009-04-07 International Business Machines Corporation Tamper-resistant trusted java virtual machine and method of using the same
JP2005293109A (ja) * 2004-03-31 2005-10-20 Canon Inc ソフトウェア実行管理装置、ソフトウェア実行管理方法、及び制御プログラム
US20100146304A1 (en) * 2005-07-22 2010-06-10 Kazufumi Miyatake Execution device
US7788730B2 (en) * 2006-01-17 2010-08-31 International Business Machines Corporation Secure bytecode instrumentation facility
WO2007147495A2 (en) * 2006-06-21 2007-12-27 Wibu-Systems Ag Method and system for intrusion detection
JP2009258772A (ja) * 2006-08-09 2009-11-05 Panasonic Corp アプリケーション実行装置
DE102007045743A1 (de) * 2007-09-25 2009-04-02 Siemens Ag Verfahren und System zum Schutz gegen einen Zugriff auf einen Maschinencode eines Gerätes
EP2240857A4 (en) * 2007-12-21 2013-12-25 Univ Virginia Patent Found SYSTEM, METHOD AND COMPUTER PROGRAM FOR PROTECTING SOFTWARE THROUGH ANTI-FALSIFICATION AND OBSCURING TRANSFORMATIONS
KR20100120671A (ko) * 2008-01-31 2010-11-16 이르데토 비.브이. 스마트 카드의 보안
EP2196934A1 (en) * 2008-12-09 2010-06-16 Gemalto SA Method for securing java bytecode

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210094300A (ko) * 2020-01-21 2021-07-29 주식회사 행복소프트 응용프로그램의 동적 변조 탐지 방법 및 장치
KR102338885B1 (ko) 2020-01-21 2021-12-14 주식회사 행복소프트 응용프로그램의 동적 변조 탐지 방법 및 장치

Also Published As

Publication number Publication date
EP3923165A1 (en) 2021-12-15
EP2467800A4 (en) 2016-03-16
JP2013511077A (ja) 2013-03-28
IN2012DN02458A (ja) 2015-08-21
CA2774728C (en) 2019-02-12
CN102598017B (zh) 2016-03-09
CN102598017A (zh) 2012-07-18
EP2467800B1 (en) 2021-06-30
US9213826B2 (en) 2015-12-15
KR20130018642A (ko) 2013-02-25
WO2011057393A1 (en) 2011-05-19
CA2774728A1 (en) 2011-05-19
US20120246487A1 (en) 2012-09-27
EP2467800A1 (en) 2012-06-27

Similar Documents

Publication Publication Date Title
JP5689472B2 (ja) 悪意ある実行環境内での静的および動的攻撃からJavaバイトコードを保護するシステムおよび方法
US10255414B2 (en) Software self-defense systems and methods
US20020144153A1 (en) Systems and methods for preventing unauthorized use of digital content
US20170024230A1 (en) Method, apparatus, and computer-readable medium for ofuscating execution of an application on a virtual machine
WO2013170724A1 (zh) 安卓系统中java应用程序的保护方法
JP2004038966A (ja) セキュアな変数データ保護を提供するセキュアで不明瞭なタイプライブラリ
Shioji et al. Code shredding: byte-granular randomization of program layout for detecting code-reuse attacks
CN105608391A (zh) 多elf文件保护方法及系统
Götzfried et al. Soteria: Offline software protection within low-cost embedded devices
Cappaert et al. Self-encrypting code to protect against analysis and tampering
US7444677B2 (en) Intentional cascade failure
Gelbart et al. CODESSEAL: Compiler/FPGA approach to secure applications
AU2002219852B2 (en) Systems and methods for preventing unauthorized use of digital content
AU2002219852A1 (en) Systems and methods for preventing unauthorized use of digital content
Buckwell et al. Execution at RISC: Stealth JOP Attacks on RISC-V Applications
Epifani Control-Flow Integrity for Embedded Systems: Study Case of an FPGA-Based Solution
Togan et al. Virtual machine for encrypted code execution
Cloosters et al. Salsa: SGX Attestation for Live Streaming Applications
Aelterman Exploitation of synergies between software protections
Gerstmayer et al. Binary protection framework for embedded systems
Shonia et al. ANALYSIS OF WINDOWS PORTABLE EXECUTABLE SOFTWARE PROTECTION SYSTEMS
AU2010202883A1 (en) Systems and Methods for Preventing Unauthorized Use of Digital Content

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131025

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140716

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140805

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20141104

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20141111

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20141201

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20141208

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150105

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150127

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150128

R150 Certificate of patent or registration of utility model

Ref document number: 5689472

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R360 Written notification for declining of transfer of rights

Free format text: JAPANESE INTERMEDIATE CODE: R360

R371 Transfer withdrawn

Free format text: JAPANESE INTERMEDIATE CODE: R371

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees