JP2016528635A - ハッシュを用いた動的コードの無欠性検証方法 - Google Patents

ハッシュを用いた動的コードの無欠性検証方法 Download PDF

Info

Publication number
JP2016528635A
JP2016528635A JP2016534526A JP2016534526A JP2016528635A JP 2016528635 A JP2016528635 A JP 2016528635A JP 2016534526 A JP2016534526 A JP 2016534526A JP 2016534526 A JP2016534526 A JP 2016534526A JP 2016528635 A JP2016528635 A JP 2016528635A
Authority
JP
Japan
Prior art keywords
hash
code
function
registry
binary
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.)
Pending
Application number
JP2016534526A
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.)
Inka Entworks Inc
Original Assignee
Inka Entworks Inc
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 Inka Entworks Inc filed Critical Inka Entworks Inc
Publication of JP2016528635A publication Critical patent/JP2016528635A/ja
Pending 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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • 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
    • G06F9/44589Program code verification, e.g. Java bytecode verification, proof-carrying code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Quality & Reliability (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)

Abstract

ハッシュを用いた動的コードの無欠性を検証する方法およびその検証のためのハッシュレジストリ生成方法を開示する。プログラムの一部である特定の関数(セキュリティが必要な関数)にのみセキュリティタグを設定する過程と、セキュリティタグが適用された関数を少なくとも一つ以上含むソースコードをコンパイルしてバイナリを生成するバイナリ生成過程と、前記バイナリを検索して前記セキュリティタグが発見されたら、前記セキュリティタグを含む前記特定の関数のコードブロックに対するハッシュコードを抽出するハッシュコード抽出過程と、前記ハッシュコード抽出過程で生成された少なくとも一つ以上の関数のハッシュコードを含むハッシュレジストリを生成するハッシュレジストリ生成過程とを含むことを特徴とするハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法を提供する。【選択図】図3

Description

本発明は、ハッシュを用いた動的コードの無欠性を検証する方法に関するものである。
以下に記述される内容は、単に本実施例に係る背景情報のみを提供するだけで、従来の技術を構成するものではないことを明らかにしておく。
最近になって、他人のコンピュータに侵入して情報を流出したり、逆分析(reverse engineering)技術を利用して、コンピュータプログラムが本来意図された機能とは違う機能を実行するようにコンピュータプログラムのバイナリコードを変形したり、デバッガなどのツールを使用して、コンピュータプログラムが実行されている途中でバイナリコードを変形し、これを悪用する事例が頻繁に起こっている。たとえば、プログラムを変形する者は、オンラインゲームのユーザーPCで動作するクライアントプログラムを逆分析して、クライアントプログラムが自動的に実行されるように変形すれば、非正常的な方法でゲームアイテムを獲得することもできる。コンピュータプログラムが変形されたか否かは、コンピュータプログラムが実行されるまでは把握しにくく、発見したとしても対処することが困難なので、コンピュータプログラムが実行されている途中で、コンピュータプログラムが変形されたか否かを検査し、措置をとる必要がある。
コンピュータプログラムは、バイナリ形態で補助記憶装置に貯蔵されており、実行されるためにメインメモリにロードされる。メインメモリにロードされたバイナリは、元の状態を常に維持することができなければならない。しかし、逆分析を介してバイナリを変形して実行したり、デバッガなどのツールを使用して、コンピュータプログラムが実行されている途中で変形すれば、元の状態を維持することができない。
上記のような問題を解決するために、従来は、コンピュータプログラムのバイナリが補助記憶装置にファイルの形で貯蔵されているときに、ファイル全体に対するハッシュを求めてファイルが変形されたか否かを検証するか、あるいはメインメモリにロードされたバイナリの全部または一部に対してハッシュを求めて、変形されたか否かを周期的にチェックして、バイナリの無欠性を検証した。前者をファイルハッシュによる検査方法といい、後者をメモリハッシュによる検査方法という。メモリハッシュによる検査方法は、一定の時間間隔で繰り返して実行することによって希望の目的が達成される方法である。このため、メモリハッシュによる検査方法は、プログラムの実行性能とハッシュを実行するシステムの性能を低下させる要因として作用する。
したがって、従来のメモリハッシュをバイナリコードの無欠性検証方法として使用する場合、コンピュータプログラムの実行性能やシステムの性能に敏感な場合には、適用しにくいという問題がある。
本実施例は、バイナリの全体または一部を周期的にまたは反復的に無欠性の検証をするのではなく、セキュリティタグが適用された関数が呼び出された場合にのみ、関数単位で無欠性の検証をするようにして、無欠性検証によるプログラム実行の性能低下を防止する方法を提供することに主な目的がある。
本実施例の一側面によれば、プログラムの一部である特定の関数(セキュリティが必要な関数)にのみセキュリティタグを設定する過程と、セキュリティタグが適用された関数を少なくとも一つ以上含むソースコードをコンパイルしてバイナリを生成するバイナリ生成過程と、前記バイナリを検索して前記セキュリティタグが発見されたら、前記セキュリティタグを含む前記特定の関数のコードブロックに対するハッシュコードを抽出するハッシュコード抽出過程と、前記ハッシュコード抽出過程で生成された少なくとも一つ以上の関数のハッシュコードを含むハッシュレジストリを生成するハッシュレジストリ生成過程とを含むことを特徴とするハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法を提供する。
また、本実施例の他の側面によれば、セキュリティタグが適用された関数を少なくとも一つ以上含むバイナリをメインメモリにロードする過程と、前記バイナリが前記メインメモリで実行される過程で、前記セキュリティタグを含む特定の関数が呼び出されて、前記セキュリティタグが発見されたら、前記関数のコードブロックに対するハッシュコードを抽出するハッシュコード抽出過程と、前記抽出されたハッシュコードとハッシュレジストリに貯蔵されている少なくとも一つ以上の関数のハッシュコードを含むハッシュコードテーブルのハッシュコードのうちのいずれかと一致するか否かを確認し、前記特定の関数が変形されたか否かを判断する関数変形判断過程と、前記関数変形判断過程の結果、前記特定の関数が変形されたと判断された場合には、前記バイナリの実行を中止する過程とを含むことを特徴とするハッシュを用いた動的コードの無欠性検証方法を提供する。
本実施例によれば、メインメモリにロードされたコンピュータプログラムのバイナリが変形されたか否かを検査するために、周期的または反復的にバイナリの全体または一部に対してハッシュコードを求める場合、ハッシュ計算の負担によりコンピュータプログラムの実行性能とシステム性能が低下する。さらに実行速度が敏感なコンピュータプログラムの場合は、上記のような方式は、適用するのが困難である。
プログラムの実行性能に敏感ながらバイナリ変形に対するセキュリティが必要なコンピュータプログラムの実行において、メモリハッシュを利用した無欠性検証のために保護が必要な重要な関数にセキュリティタグを適用し、セキュリティタグが適用された関数が呼び出された場合に、関数にのみメモリハッシュを利用してバイナリが変形したか否かを検査すれば、上記のような問題を解決することができる。つまり、周期的または反復的にメモリハッシュを利用して無欠性を検査する方法よりは、セキュリティタグが適用された関数が実行される場合に限って関数の無欠性を検証すれば、検証の有効性が高まり、プログラムの実行性能の低下も最小限に抑えることができる。
たとえセキュリティタグが適用された関数が繰り返して呼び出されても、関数の無欠性検証が行われた後に再び同じ関数が呼び出された場合、一定の時間間隔内では無欠性検査が省略されるようにして、繰り返して関数が呼び出される場合の問題は解決することができる。
しかも、従来のメモリハッシュを用いた無欠性検証方法とは異なり、関数単位のセキュリティタグが適用されたバイナリとハッシュコードで構成されたハッシュレジストリがともに配布されるので、変形したか否かを判断するための別途原本を取得するための過程が必要ではなく、関数が呼び出された場合に関数内で無欠性検査が実行されるので、無欠性検査を実行する別のプログラムが必要ではない。無欠性検証のための別のプログラムが必要な場合、無欠性検証プログラムを無力化させると、変形されたプログラムが実行されることを防止する手段がなくなる。これに比べてセキュリティタグが適用された関数単位で無欠性の検証を行う場合、関数が呼び出されるとともに無欠性の検証も行われるので、上記のような問題が発生しない。
一方、セキュリティタグは、短い時間間隔で繰り返して呼び出される関数よりは、アカウント認証、パスワードの入力、決済関連、セキュリティ関連(ハッシュチェック、アンチデバッギングなど)、暗号化・復号化、認証書の検証、商品購入・販売、初期化、サーバー通信、設定ファイル(セーフファイル)読み書き、演算結果の判定と、プログラムの実行において保護が必要な重要な関数に適している。上記のような関数は、一定の周期で繰り返して呼び出されることはないという特性があり、繰り返して呼び出されても、関数に対する無欠性検証の後、再び同じ関数が呼び出された場合、一定の時間間隔内では検証が省略されるようにすることができる。
以下、本実施例を添付された図面を参照して詳細に説明する。
本実施例に係るハッシュを用いたバイナリの無欠性を検証する方法は、C/C++のようにネイティブコード(native code)を生成することができるプログラム言語であれば、PC、サーバー、スマートフォンなどのハードウェアまたはWindows(登録商標)、UNIX(登録商標)、Linux(登録商標)、OS Xなどの応用ソフトウェアが実行されるオペレーティングシステムに関係なく、同じように適用することができる。つまり、ハードウェアやオペレーティングシステムとは独立して、セキュリティが必要な重要な関数単位で無欠性を検証するので、汎用性があり、有効性が高く、プログラムの実行性能への影響も最小限に抑えることができる無欠性検証方法を提供する。
図1は、本実施例に係る関数単位のメモリハッシュを用いた動的コード無欠性を検証する概念の概要図である。
本実施例に係る関数単位のメモリハッシュを用いたバイナリの無欠性検証方法は、開発用端末100でセキュリティタグが適用された関数を含むバイナリを生成する過程と、バイナリでハッシュレジストリを生成する過程を含む。ただし、バイナリで関数単位のハッシュコードとハッシュレジストリの生成は、単一の装置によって行われる必要はない。セキュリティタグが適用されたバイナリとハッシュレジストリはネットワークやストレージメディアなどの流通手段を介してユーザーに配布され、ユーザー端末200に貯蔵される。ユーザー端末200は、セキュリティタグが適用された関数を少なくとも一つ以上含むバイナリをメインメモリにロードして実行する。この時、セキュリティタグが発見されたら、セキュリティタグを含む関数の無欠性を検証する過程を実行する。
図2は、本実施例に係る関数単位の動的コード無欠性検証を行うことができるプログラムの開発構成図である。
以下、図3の関数単位のセキュリティタグの適用過程を参照して、図2の構成要素を説明する。図2において、コンパイラ110、セキュリティ適用手段120、貯蔵部130は、開発用端末100の内部構成である。セキュリティ適用サーバー400は、セキュリティ適用手段120で実行するハッシュコード抽出過程(S340)と、ハッシュレジストリ生成過程(S360)を開発用端末100に代わって行うことができる。
コンパイラ110は、セキュリティタグが適用された関数を少なくとも一つ以上含むソースコードをコンパイルしてバイナリを生成する。セキュリティ適用手段120は、コンパイラ110が生成したバイナリでセキュリティタグを検索し、セキュリティタグが発見されたら、無欠性検証の開始点を表示する開始タグから終了地点を表示する終了タグまでに対するハッシュコードを生成するハッシュコード抽出過程(S340)を実行し、ハッシュコード抽出過程で抽出された少なくとも一つ以上のハッシュコードを含むハッシュレジストリを生成する(S360)。セキュリティ適用手段120が実行するハッシュコード抽出過程(S340)とハッシュレジストリ生成過程(S360)は、開発用端末100で実行することもできるが、バイナリ全体をセキュリティ適用サーバー400に送信すればセキュリティ適用サーバー400で実行することもできる。だけでなく、セキュリティ適用手段120は、セキュリティタグを発見し(S330)、開始タグから終了タグまでのコードをセキュリティ適用サーバー400に送信して、セキュリティ適用サーバー400にとってハッシュコード抽出過程(S340)とハッシュレジストリ生成過程(S360)を実行するようにすることもできる。セキュリティ適用手段120によって生成されたハッシュレジストリは、バイナリとともにファイルの形で貯蔵部130に貯蔵される(S360)。
図3は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリでハッシュコードを抽出してハッシュレジストリを生成する過程のフローチャートである。
複数の関数を含むコンピュータプログラムのソースコードでアカウントの認証、パスワードの入力、決済関連、セキュリティ関連(ハッシュチェック、アンチデバッギングなど)、暗号化・復号化、認証書の検証、商品購入、販売、初期化、サーバー通信、設定ファイル(セーフファイル)読み書き、演算結果の判定と、プログラムの実行において保護が必要な重要な関数など、少なくとも一つ以上の関数にセキュリティタグを設定する(S300)。上記のような関数は、通常、周期的に繰り返して呼び出されない特性を持っていながらも、コンピュータプログラムを変形しようとする者には主な関心の対象である。したがって、上記のような関数に対してのみ無欠性を検証しても有効性が非常に高く、無欠性の検証によるプログラムの実行性能の低下も最小限に抑えることができる。セキュリティタグが適用された関数を含むソースコードは、コンパイラ110によってコンパイルされ、バイナリ形式になる(S310)。つまり、コンパイラ110によってバイナリファイルが生成される(S310)。
以下、セキュリティ適用手段120で実行される過程と、貯蔵部130で実行される過程について説明する。セキュリティ適用手段120は、バイナリでセキュリティタグを検索する(S320)。セキュリティタグが発見されていない場合は、バイナリの最後に到達したかを確認して(S350)、到達していない場合は、段階S320に戻り、検索を続ける。セキュリティタグが発見されたら、セキュリティタグを含む関数のコードブロック内で無欠性検査の開始を表示する開始タグと終了を表示する終了タグとの間のコードをハッシュ関数(MD5、SHA、Checksumなど)の入力にしてハッシュコードを抽出する(S340)。これをハッシュコード抽出過程という。前記バイナリの最後まで検索を完了したら(S350)、前で抽出した少なくとも一つ以上の関数のハッシュコードから構成されたハッシュコードテーブルを含むハッシュレジストリが生成される(S360)。ハッシュレジストリはバイナリファイルとは別のファイルに保存されることもでき、バイナリファイルの末尾に添付されて保存されることも可能である。
図4は、本実施例に係るハッシュレジストリの無欠性を検証するためのシグネチャーを生成する過程のフローチャートである。
ハッシュレジストリを生成する過程(S360)は、少なくとも一つ以上の関数単位で抽出されたハッシュコードを含むハッシュコードテーブルをハッシュレジストリに保存する(S362)。しかし、ハッシュレジストリに保存されたハッシュコードは、プログラムを変形しようとする者に露出されて変形される可能性がある。つまり、ハッシュレジストリの無欠性の検証をするためにハッシュレジストリに保存された少なくとも一つ以上の関数のハッシュコードで構成されたハッシュコードテーブルをハッシュ関数(MD5、SHA、Checksumなど)の入力にしてテーブルハッシュコードを抽出する(S364)。抽出されたテーブルハッシュコードを暗号化してシグネチャー(signature)を生成する(S366)。シグネチャーは、ハッシュレジストリの無欠性を検証する非常に重要な部分であるため、暗号化アルゴリズム(AES、DES、RSAなど)で暗号化して(S366)、保護されるようにする。シグネチャーは、ハッシュレジストリにハッシュコードテーブルとともに保存することもあるが、これとは別の場所に保存することもできる(S368)。
図5は、本実施例に係るセキュリティタグが設定された関数でハッシュコードを抽出して、ハッシュレジストリを生成する過程の例示図である。
セキュリティタグは、無欠性の検証を開始する地点を表示する開始タグと終了地点を表示する終了タグで構成される。セキュリティタグが適用された関数のコードブロック内で開始タグから終了タグまでのコードをハッシュ関数(MD5、SHA、Checksumなど)の入力にしてハッシュコードを抽出することになる(S340)。図5の例示図でfunction_1関数は開始タグと終了タグで構成されるセキュリティタグを含んでいる。function_1関数の開始タグから終了タグまでのコードをハッシュ関数であるMD5、SHA、Checksumなどの入力にすると、hash1というハッシュコードが抽出される(S340)。
少なくとも一つ以上の関数にセキュリティタグが適用されるため、ハッシュレジストリは少なくとも一つ以上のハッシュコードを含む。図5の例示図では、セキュリティタグが適用されたn個の関数に抽出されたhash1、hash2、…、hash nハッシュコードを含むハッシュコードテーブルをハッシュレジストリに保存して(S362)、ハッシュコードテーブルをハッシュ関数であるMD5、SHA、Checksumなどの入力にして、テーブルハッシュコードを抽出し(S364)、抽出されたテーブルハッシュコードをAES、DES、RSAなどの暗号化アルゴリズムで暗号化してシグネチャーを生成し(S366)、生成されたシグネチャーをハッシュレジストリまたは別の場所に保存する(S368)過程である。
図6は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリを実行するユーザー端末の構成図である。
関数単位のセキュリティタグが適用されたバイナリは配布過程を経てユーザー端末200の補助記憶装置240に保存される。バイナリがユーザー端末200で実行されるときには、まずバイナリがメインメモリ220にロードされ、CPU210によってバイナリの命令が実行され、その結果がディスプレイ装置230に表示される。
本発明の実施例に係るユーザー端末200は、パーソナルコンピュータ(PC:Personal Computer)、ノートブックコンピュータ、タブレット、個人携帯端末(PDA:Personal Digital Assistant)、ゲームコンソール、携帯型マルチメディアプレーヤー(PMP:Portable Multimedia Player)、プレイステーションポータブル(PSP:PlayStation Portable)、無線通信端末(Wireless Communication Terminal)、スマートフォン(Smart Phone)、TV、メディアプレーヤーなどのユーザー端末である。本明細書の実施例に係るユーザー端末200は、応用サーバーとサービスサーバーなどのサーバー端末である。本発明の実施例に係るユーザー端末は、それぞれ、(i)各種機械や有無線通信網との通信を行うための通信モデムなどの通信装置、(ii)ハッシュを用いた動的コード検証方法の実行のためにインターまたはイントラ予測するための各種プログラムやデータを保存するためのメモリ、(iii)プログラムを実行して演算および制御するためのマイクロプロセッサなどを備えるさまざまなデバイスを意味することができる。少なくとも一実施例によれば、メモリはラム(Random Access Memory:RAM)、ロム(Read Only Memory:ROM)、フラッシュメモリ、光ディスク、磁気ディスク、ソリッドステートディスク(Solid State Disk:SSD)などのコンピュータで読み取り可能な記録/保存媒体である。少なくとも一実施例によれば、マイクロプロセッサは、明細書に記載された動作と機能を1つ以上選択的に実行するようにプログラムされる。少なくとも一実施例によれば、マイクロプロセッサは、全体または部分的に特定の構成の特定用途向け半導体(application specific integrated circuit:ASIC)などのハードウェアである。
図7は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリに対する関数単位の無欠性の検証を実行する過程のフローチャートである。
関数単位でセキュリティタグが適用されたバイナリが実行されるためにメインメモリ200にロードされる(S710)。バイナリが実行され、セキュリティタグが適用された関数が呼び出されてセキュリティタグが発見されたら(S720)、関数の無欠性を検証する。
以下、セキュリティタグが発見され、関数単位の無欠性の検証が行われる過程を説明する。セキュリティタグが適用された関数が呼び出され、セキュリティタグが発見されたら、関数に対する無欠性検証をするか否かを判断する(S730)。セキュリティタグが適用される関数は、アカウントの認証、パスワードの入力、決済関連、セキュリティ関連(ハッシュチェック、アンチデバッギングなど)、暗号化・復号化、認証書の検証、商品購入、販売、初期化、サーバー通信、設定ファイル(セーフファイル)読み書き、計算結果の判定と、プログラムの実行において保護が必要な重要な関数にセキュリティタグが適用され、繰り返し呼び出されない特性があるが、場合によっては繰り返し呼び出されて無欠性の検証が行われる懸念がある。上記のような場合に備えるため、関数の無欠性検証が行われた後、一定の時間間隔内では再度関数の無欠性検証を繰り返さないようにする必要がある。したがって、関数に対する無欠性検証が行われた後、一定の時間間隔内で再度関数が呼び出されたら、無欠性の検証を省略して、次の過程を実行するようにする(S730)。
また、ハッシュレジストリの無欠性を検証する必要がある(S740)。ハッシュレジストリを検証する(S740)には、ハッシュレジストリの生成過程(S340)でのハッシュコードテーブルに対するテーブルハッシュコードを抽出する(S364)過程と同じ過程で、ハッシュレジストリに保存されている少なくとも一つ以上の関数単位のハッシュコードを含むハッシュコードテーブルに対するテーブルハッシュコードを抽出する(S364)。そして抽出されたテーブルハッシュコードとハッシュレジストリまたは別の場所で提供されるハッシュコードテーブルに対するテーブルハッシュコードが等しいか否かを確認する(S740)。この場合、ハッシュレジストリまたは別の場所に保存されたシグネチャーは、復号化された後に提供することができる。もし一致しない場合は、ハッシュレジストリが変形されたので、プログラムが実行を終了する過程に転移される(S770)。
関数の無欠性検査過程は(S750)、関数のコードブロック内で無欠性の検証の開始地点を表示する開始タグから終了地点を表示する終了タグまでのコードに対してハッシュ関数(MD5、SHA、Checksumなど)を使用してハッシュコードを抽出するハッシュコード抽出過程を含み、ハッシュコード抽出過程で抽出されたハッシュコードとハッシュレジストリに貯蔵されたハッシュコードテーブルのいずれかのハッシュコードと一致しているか否かを確認して、関数が変形されているか否かを判断し(S750)、関数が変形された場合は、プログラムの終了過程に転移する(S770)。関数の無欠性検査過程(S750)で関数が変形されていないと確認されたら、正常に関数を実行し、これらの過程は、プログラムが終了するまで繰り返す(S760)。プログラムの終了過程(S770)でバイナリが変形されて、もはや実行されなくなった場合、バイナリで使用しているリソースをシステムに返還し、警告メッセージの表示、実行停止、及び実行終了のいずれかを行うことができる。
図8は、本実施例に係る関数単位の無欠性の検証を実行する過程の例示図である。
図8の例示図は、関数単位のセキュリティタグが適用されたバイナリが実行されて(S710)、セキュリティタグが含まれている関数であるfunction_1が呼び出され、function_1でセキュリティタグが発見されて(S720)、開始タグから終了タグまでのコードからハッシュ関数であるMD5、SHA、Checksumなどを利用してハッシュコードのhash1を抽出し、hash1とハッシュレジストリに保存されているhash1、hash2、…、hash nを含むハッシュコードテーブルのハッシュコードのいずれかと一致するか否かを確認してfunction_1が変形されているかを検証する(S750)。この時、ハッシュレジストリを検証するためにhash1、hash2、…、hash nを含むハッシュコードテーブルに対するテーブルハッシュコードを抽出し、抽出されたテーブルハッシュコードがシグネチャーから復号化されたテーブルハッシュコードと一致するか否かを確認して、ハッシュレジストリが変形されているかを検証することができる(S740)。
以上の説明は、本実施例の技術思想を例示的に説明したにすぎないものであって、本実施例の属する技術分野で通常の知識を有する者であれば、本実施例の本質的な特性から逸脱しない範囲で様々な修正および変形が可能である。したがって、本実施例は、本実施例の技術思想を限定するためのものではなく説明するためのものであり、これらの実施例により、本実施例の技術思想の範囲が限定されるものではない。本実施例の保護範囲は特許請求の範囲によって解釈されるべきであり、それと同等の範囲内にあるすべての技術思想は、本実施例の権利範囲に含まれるものと解釈されるべきである。
図1は、本実施例に係る関数単位のメモリハッシュを用いた動的コード無欠性を検証する概念の概要図である。 図2は、本実施例に係る関数単位の動的コード無欠性の検証を行うことができるプログラム開発構成図である。 図3は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリからハッシュコードを抽出し、ハッシュレジストリを生成する過程のフローチャートである。 図4は、本実施例に係るハッシュレジストリの無欠性を検証するためのシグネチャーを生成する過程のフローチャートである。 図5は、本実施例に係るセキュリティタグが設定された関数からハッシュコードを抽出してハッシュレジストリを生成する過程の例示図である。 図6は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリを実行するユーザー端末の構成図である。 図7は、本実施例に係る関数単位のセキュリティタグが適用されたバイナリに対する関数単位の無欠性の検証を実行する過程のフローチャートである。 図8は、本実施例に係る関数単位の無欠性の検証を実行する過程の例示図である。

Claims (9)

  1. プログラムの一部である特定の関数(セキュリティが必要な関数)にのみセキュリティタグを設定する過程と、
    前記セキュリティタグが適用された関数を少なくとも一つ以上含むソースコードをコンパイルしてバイナリを生成するバイナリ生成過程と、
    前記バイナリを検索して前記セキュリティタグが発見されたら、前記特定の関数のコードブロックに対するハッシュコードを抽出するハッシュコード抽出過程と、
    前記ハッシュコード抽出過程で生成された少なくとも一つ以上の関数のハッシュコードを含むハッシュレジストリを生成するハッシュレジストリ生成過程とを含むことを特徴とするハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法。
  2. 前記セキュリティタグは、前記特定の関数のコードブロック内で無欠性検査の開始地点を表示する開始タグと終了地点を表示する終了タグとを含むことを特徴とする請求項1に記載のハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法。
  3. 前記ハッシュコード抽出過程は、
    前記特定の関数のコードブロック内で前記開始タグから前記終了タグまでのコードに対するハッシュコードを抽出する過程を含むことを特徴とする請求項2に記載のハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法。
  4. 前記ハッシュレジストリ生成過程は、
    前記ハッシュコード抽出過程で抽出された少なくとも一つ以上の関数のハッシュコードを含むハッシュコードテーブルを保存する過程と、
    前記ハッシュコードテーブルに対するテーブルハッシュコードを生成し、暗号化してシグネチャー(signature)を生成する過程と、
    前記シグネチャーを保存する過程とを含むことを特徴とする請求項1に記載のハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法。
  5. 前記特定の関数は、パスワードの入力、決済関連、アカウント認証、暗号化・復号化、認証書の検証、商品購入・販売、演算結果の判定と、初期化関数のうちいずれかであることを特徴とする請求項1に記載のハッシュを用いた動的コードの無欠性検証のためのハッシュレジストリ生成方法。
  6. セキュリティタグが適用された関数を少なくとも一つ以上含むバイナリをメインメモリにロードする過程と、
    前記バイナリが前記メインメモリで実行される過程で、前記セキュリティタグを含む特定の関数が呼び出されて、前記セキュリティタグが発見されたら、前記関数のコードブロックに対するハッシュコードを抽出するハッシュコード抽出過程と、
    前記抽出されたハッシュコードとハッシュレジストリに保存されている少なくとも一つ以上の関数のハッシュコードを含むハッシュコードテーブルのハッシュコードのうちのいずれかと一致するか否かを確認し、前記特定の関数が変形されたか否かを判断する関数変形判断過程と、
    前記関数変形判断過程の結果、前記特定の関数が変形されたと判断された場合には、前記バイナリの実行を中止する過程とを含むことを特徴とするハッシュを用いた動的コードの無欠性検証方法。
  7. 前記ハッシュコード抽出過程は、
    前記特定の関数のコードブロック内で無欠性検査の開始地点を表示する開始タグから終了地点を表示する終了タグまでのコードに対するハッシュコードを抽出する過程を含むことを特徴とする請求項6に記載のハッシュを用いた動的コードの無欠性検証方法。
  8. 前記ハッシュコード抽出過程は、
    前記特定の関数に対する無欠性検査の後、再び前記特定の関数が呼び出された場合、既に設定された時間間隔内では、前記特定の関数に対する無欠性検査を省略するようにする過程を含むことを特徴とする請求項6に記載のハッシュを用いた動的コードの無欠性検証方法。
  9. 前記ハッシュコード抽出過程は、
    前記ハッシュレジストリが変形されたか否かを検証するために、前記ハッシュレジストリに貯蔵された前記ハッシュコードテーブルに対するテーブルハッシュコードを抽出する過程と、
    前記抽出されたテーブルハッシュコードと、前記ハッシュレジストリまたは別の場所に保管されたシグネチャーから復号化されたテーブルハッシュコードが一致しない場合、前記バイナリの実行を停止する過程とを含むことを特徴とする請求項6に記載のハッシュを用いた動的コードの無欠性検証方法。
JP2016534526A 2013-08-16 2014-08-11 ハッシュを用いた動的コードの無欠性検証方法 Pending JP2016528635A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
KR10-2013-0097412 2013-08-16
KR20130097412A KR101434860B1 (ko) 2013-08-16 2013-08-16 해시를 이용한 동적코드의 무결성 검증 방법
PCT/KR2014/007444 WO2015023093A1 (ko) 2013-08-16 2014-08-11 해시를 이용한 동적코드의 무결성 검증 방법

Publications (1)

Publication Number Publication Date
JP2016528635A true JP2016528635A (ja) 2016-09-15

Family

ID=51758835

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016534526A Pending JP2016528635A (ja) 2013-08-16 2014-08-11 ハッシュを用いた動的コードの無欠性検証方法

Country Status (6)

Country Link
US (1) US20160162686A1 (ja)
EP (1) EP3035224A4 (ja)
JP (1) JP2016528635A (ja)
KR (1) KR101434860B1 (ja)
CN (1) CN105637516A (ja)
WO (1) WO2015023093A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019537150A (ja) * 2016-12-05 2019-12-19 ナグラビジョン エス アー セルフデバッギング

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160188874A1 (en) * 2014-12-29 2016-06-30 Rubicon Labs, Inc. System and method for secure code entry point control
CN106778272A (zh) * 2016-12-27 2017-05-31 成都三零瑞通移动通信有限公司 一种对调用函数进行动态安全检测的方法
US11755499B2 (en) * 2018-05-31 2023-09-12 Secturion Systems, Inc. Locally-stored remote block data integrity
US11159327B2 (en) * 2018-08-06 2021-10-26 Tyson York Winarski Blockchain augmentation of a material exchange format MXF file
KR102143511B1 (ko) * 2019-01-31 2020-08-11 김종현 스마트 거래의 보안 안정성 관리 서버
KR102310766B1 (ko) * 2019-12-10 2021-10-12 재단법인대구경북과학기술원 어플리케이션의 무결성 검사방법
US11288360B2 (en) 2020-03-04 2022-03-29 Kyndryl, Inc. Preventing untrusted script execution
CN113239330A (zh) * 2021-06-10 2021-08-10 杭州安恒信息技术股份有限公司 一种基于散列算法的反调试方法及相关装置
KR102598510B1 (ko) * 2021-12-16 2023-11-06 주식회사 텔레칩스 소프트웨어의 무결성 검증 방법 및 그 장치
US20240095375A1 (en) * 2022-09-21 2024-03-21 Qualcomm Incorporated Mechanism To Secure An Execution Environment In Processor Cores
US20240303046A1 (en) * 2023-03-12 2024-09-12 Engineer.ai Corp. Systems and methods for a device application with certified building block components

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005165919A (ja) * 2003-12-05 2005-06-23 Fuji Xerox Co Ltd プログラム実行方法、プログラム作成方法、情報処理装置及びプログラム
JP2008293033A (ja) * 2003-09-18 2008-12-04 Apple Inc インクリメンタルなコード署名の方法及び装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030075018A (ko) * 2002-03-15 2003-09-22 주식회사 셈틀로미디어 변조 방지용 소프트웨어 파일 생성 장치와 그 소프트웨어파일의 자가 무결성 검증 방법 및 클라이언트-서버환경에서의 소프트웨어 파일의 자가 무결성 검증 방법
US20040083373A1 (en) * 2002-10-28 2004-04-29 Perkins Gregory M. Automatically generated cryptographic functions for renewable tamper resistant security systems
ES2326175T3 (es) * 2004-06-30 2009-10-02 France Telecom Procedimiento y sistema de votacion electronica en red de alta seguridad.
JP2008176542A (ja) 2007-01-18 2008-07-31 Fuji Xerox Co Ltd 送信装置、送信方法及び送信プログラム
KR101028163B1 (ko) * 2009-12-14 2011-04-08 타임스탬프솔루션 주식회사 원본증명마크 및 임베디드 기술을 이용한 전자문서의 타임스탬프 발급 및 검증방법
EP2378452B1 (en) * 2010-04-16 2012-12-19 Thomson Licensing Method, device and computer program support for verification of checksums for self-modified computer code
US9477834B2 (en) * 2012-02-08 2016-10-25 Arm Limited Maintaining secure data isolated from non-secure access when switching between domains

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008293033A (ja) * 2003-09-18 2008-12-04 Apple Inc インクリメンタルなコード署名の方法及び装置
JP2005165919A (ja) * 2003-12-05 2005-06-23 Fuji Xerox Co Ltd プログラム実行方法、プログラム作成方法、情報処理装置及びプログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019537150A (ja) * 2016-12-05 2019-12-19 ナグラビジョン エス アー セルフデバッギング
JP7042270B2 (ja) 2016-12-05 2022-03-25 ナグラビジョン エス アー セルフデバッギング

Also Published As

Publication number Publication date
US20160162686A1 (en) 2016-06-09
WO2015023093A1 (ko) 2015-02-19
CN105637516A (zh) 2016-06-01
KR101434860B1 (ko) 2014-09-02
EP3035224A1 (en) 2016-06-22
EP3035224A4 (en) 2017-03-29

Similar Documents

Publication Publication Date Title
JP2016528635A (ja) ハッシュを用いた動的コードの無欠性検証方法
JP6570663B2 (ja) フィッシングおよびブランド保護のためのシステムおよび方法
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
US9798866B2 (en) Network information system with license registration and method of operation thereof
US20160275019A1 (en) Method and apparatus for protecting dynamic libraries
CN109669734A (zh) 用于启动设备的方法和装置
CN105453103A (zh) 按照参考平台清单和数据封装的安全操作系统启动
US9256756B2 (en) Method of encryption and decryption for shared library in open operating system
KR101695639B1 (ko) 클라우드 기반의 애플리케이션 보안 서비스 제공 방법 및 시스템
CN105577644A (zh) 一种加密认证方法和系统
US11886350B2 (en) System memory context determination for integrity monitoring and related techniques
CN107077560A (zh) 用于建立安全工作空间的所有权的系统
KR101235517B1 (ko) 메모리에서 실행되는 컴퓨터 프로그램의 변조 탐지 방법
US20140059708A1 (en) Apparatuses and methods for protecting program file content using digital rights management (drm)
KR20210048835A (ko) 전자 장치 및 이의 제어 방법
CN103530169B (zh) 虚拟机文件保护方法和用户终端
US11768922B2 (en) License management device, program execution device and method
JP6215468B2 (ja) プログラム保護装置
JP2009064126A (ja) Icカードシステム、その端末装置、プログラム
US9323951B2 (en) Encrypted warranty verification and diagnostic tool
JPWO2021133503A5 (ja)
CN114329354A (zh) 文件授权方法、装置、计算机设备和存储介质
JP2013025607A (ja) 情報処理装置及び情報処理方法
CN117834627A (zh) 远程证明方法、装置、电子设备及存储介质
CN113420340A (zh) 信息记录装置、计算机设备及信息记录方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170207

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20171121