JP5689472B2

System and method to protect java bytecode code against static and dynamic attacks within hostile execution environments

Abstract

This record has no abstract on file.

Term

Projected expiry 12 November 2030.

  1. Priority
  2. Filed
  3. Granted
  4. Today
  5. Projected expiry

49 claims: 17 independent, 32 dependent

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