(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6227772
(24)【登録日】2017年10月20日
(45)【発行日】2017年11月8日
(54)【発明の名称】動的ライブラリを保護する方法及び装置
(51)【国際特許分類】
G06F 21/12 20130101AFI20171030BHJP
G06F 21/44 20130101ALI20171030BHJP
G06F 21/60 20130101ALI20171030BHJP
G06F 21/14 20130101ALI20171030BHJP
G06F 9/54 20060101ALI20171030BHJP
【FI】
G06F21/12
G06F21/44
G06F21/60 320
G06F21/14
G06F9/06 640B
【請求項の数】17
【全頁数】16
(21)【出願番号】特願2016-521281(P2016-521281)
(86)(22)【出願日】2014年10月2日
(65)【公表番号】特表2016-540282(P2016-540282A)
(43)【公表日】2016年12月22日
(86)【国際出願番号】KR2014009307
(87)【国際公開番号】WO2015053509
(87)【国際公開日】20150416
【審査請求日】2016年4月27日
(31)【優先権主張番号】10-2013-0120845
(32)【優先日】2013年10月10日
(33)【優先権主張国】KR
(73)【特許権者】
【識別番号】516046972
【氏名又は名称】インカ・エントワークス・インコーポレイテッド
【氏名又は名称原語表記】INKA ENTWORKS, INC.
(74)【代理人】
【識別番号】100108855
【弁理士】
【氏名又は名称】蔵田 昌俊
(74)【代理人】
【識別番号】100103034
【弁理士】
【氏名又は名称】野河 信久
(74)【代理人】
【識別番号】100153051
【弁理士】
【氏名又は名称】河野 直樹
(74)【代理人】
【識別番号】100179062
【弁理士】
【氏名又は名称】井上 正
(74)【代理人】
【識別番号】100189913
【弁理士】
【氏名又は名称】鵜飼 健
(74)【代理人】
【識別番号】100199565
【弁理士】
【氏名又は名称】飯野 茂
(72)【発明者】
【氏名】ナム、ゼ・ミン
(72)【発明者】
【氏名】パク、ジョン・グン
(72)【発明者】
【氏名】ホン、ジュン・ホ
(72)【発明者】
【氏名】オー、ジュン・ソク
(72)【発明者】
【氏名】キム、ジョン・ス
【審査官】
岸野 徹
(56)【参考文献】
【文献】
特開2012−185535(JP,A)
【文献】
特表2008−503014(JP,A)
【文献】
特開2008−234248(JP,A)
【文献】
米国特許出願公開第2013/0166921(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/54
G06F 21/12
G06F 21/14
G06F 21/44
G06F 21/60
(57)【特許請求の範囲】
【請求項1】
動的ライブラリ(Dynamic Library)を保護するための方法において、
前記動的ライブラリを使用する応用プログラムをメインメモリにロードする過程と、
セキュリティ担当動的ライブラリを前記メインメモリにロードする過程と、
前記セキュリティ担当動的ライブラリに保管された暗号化された動的ライブラリを復号化して、保護対象の動的ライブラリを生成する過程と、
前記応用プログラムから前記保護対象の動的ライブラリの内部に含まれている特定のモジュールを呼び出す過程とを含むことを特徴とする動的ライブラリを保護するための方法。
【請求項2】
前記保護対象の動的ライブラリ生成過程は、前記保護対象の動的ライブラリを保存装置にファイルとして保存する過程と、前記保護対象の動的ライブラリを前記メインメモリにロードする過程とをさらに含むことを特徴とする請求項1に記載の動的ライブラリを保護するための方法。
【請求項3】
前記セキュリティ担当動的ライブラリは、セキュリティ強化静的(static)ライブラリと動的にリンク(dynamic link)され、前記保護対象の動的ライブラリは、前記セキュリティ強化静的ライブラリと静的にリンク(static link)されることを特徴とする請求項1に記載の動的ライブラリを保護するための方法。
【請求項4】
前記セキュリティ強化静的ライブラリは、前記セキュリティ担当動的ライブラリ内の少なくとも一つ以上のモジュールを呼び出すことを特徴とする請求項3に記載の動的ライブラリを保護するための方法。
【請求項5】
前記保護対象の動的ライブラリは、前記セキュリティ強化静的ライブラリ内の少なくとも一つ以上のモジュールを呼び出すことを特徴とする請求項3に記載の動的ライブラリを保護するための方法。
【請求項6】
前記セキュリティ強化静的ライブラリのコード(code)が難読化(Obfuscation)されていることを特徴とする請求項3に記載の動的ライブラリを保護するための方法。
【請求項7】
前記セキュリティ担当動的ライブラリは、アンチデバッグ(anti-debugging)またはアンチダンプ(anti-dump)を含み、前記応用プログラムまたは前記保護対象の動的ライブラリへの攻撃を検知するか、あるいは攻撃することができないように環境を設定するセキュリティロジックを含むことを特徴とする請求項1に記載の動的ライブラリを保護するための方法。
【請求項8】
前記応用プログラムは、前記保護対象の動的ライブラリと同じファイル名の偽装動的ライブラリを含むことを特徴とする請求項1に記載の動的ライブラリを保護するための方法。
【請求項9】
前記応用プログラム、前記セキュリティ担当動的ライブラリ、前記保護対象の動的ライブラリを必ず含み、偽装動的ライブラリを前記メインメモリにロードしたか否かに応じて、選択的に、前記偽装動的ライブラリを含む、前記応用プログラムの実行に必要なファイルに対するファイルごとのハッシュコードを含むハッシュレジストリを生成することを特徴とする請求項1に記載の動的ライブラリを保護するための方法。
【請求項10】
前記応用プログラムの実行に必要なファイルに対するファイルごとのハッシュコードを利用して前記応用プログラムの実行に必要なファイルのいずれかの無欠性を検証する無欠性検証過程と、
前記無欠性検証過程でいずれか一つ以上のファイルが変形されたと判断された場合、前記応用プログラムの実行を中断する過程をさらに含むことを特徴とする請求項9に記載の動的ライブラリを保護するための方法。
【請求項11】
前記無欠性検証過程は、前記セキュリティ担当動的ライブラリで実行することを特徴とする請求項10に記載の動的ライブラリを保護するための方法。
【請求項12】
動的ライブラリ(Dynamic Library)を保護するための装置において、
応用プログラム、および前記動的ライブラリを保存するための補助記憶装置と、
前記補助記憶装置と連結されて、前記応用プログラムと前記動的ライブラリがロードされるメインメモリと、
前記メインメモリにロードされたセキュリティ担当動的ライブラリの内部に保管された暗号化された動的ライブラリを復号化して、保護が必要な保護対象の動的ライブラリを生成する動的ライブラリ生成部と、
前記応用プログラムから前記保護対象の動的ライブラリの内部に含まれている特定のモジュールを呼び出す動的ライブラリ呼び出し部とを含むことを特徴とする動的ライブラリ保護装置。
【請求項13】
前記動的ライブラリ生成部は、前記保護対象の動的ライブラリを保存する動的ライブラリ保存部をさらに含むことを特徴とする請求項12に記載の動的ライブラリ保護装置。
【請求項14】
前記セキュリティ担当動的ライブラリとセキュリティ強化静的(static)ライブラリとを動的にリンク(dynamic link)させて、前記保護対象の動的ライブラリと前記セキュリティ強化静的ライブラリとを静的にリンク(static link)させるセキュリティ強化部をさらに含むことを特徴とする請求項12に記載の動的ライブラリ保護装置。
【請求項15】
前記応用プログラムは、
前記保護対象の動的ライブラリと同じ名称の偽装動的ライブラリを含むことを特徴とする請求項12に記載の動的ライブラリ保護装置。
【請求項16】
前記応用プログラム、前記セキュリティ担当動的ライブラリ、前記保護対象の動的ライブラリを必ず含み、偽装動的ライブラリを前記メインメモリにロードしたか否かに応じて、選択的に、前記偽装動的ライブラリを含む、前記応用プログラムの実行に必要なファイルに対してファイルハッシュを用いて無欠性を検証する無欠性検証部をさらに含むことを特徴とする請求項12に記載の動的ライブラリ保護装置。
【請求項17】
前記無欠性検証部は、
前記応用プログラムの実行に必要なファイルに対するファイルごとのハッシュコードを含むハッシュレジストリを保存しているハッシュレジストリ保存部と、
前記応用プログラムの実行に必要なファイルに対するファイルごとのハッシュコードを抽出するファイルハッシュ抽出部と、
前記抽出されたハッシュコードが前記ハッシュレジストリのハッシュコードのいずれか一つと一致するか否かを判断して、一致するハッシュコードがないと判断された場合は、前記応用プログラムの実行を中断するファイル変形判断部とを含むことを特徴とする請求項16に記載の動的ライブラリ保護装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、動的ライブラリ(Dynamic Library)を、分析ツールを利用した分析と攻撃から保護する方法に関するものである。
【背景技術】
【0002】
以下に記述される内容は、単に本実施例に係る背景情報のみを提供するだけで、従来技術を構成するものではないことを明らかにして置く。
【0003】
プログラムで、ライブラリ(Library)とは、再利用(reuse)が可能なように予め作成されたコンパイルされた関数を意味する。プログラムでライブラリを使用する理由は、関数を再利用する際に便利に使用することができ、ライブラリで配布すれば、関数の具体的な具現を隠すことができ、予めコンパイルされた関数を必要に応じて使用することができるため、メンテナンスが便利であるという点からである。
【0004】
ライブラリには、プログラムをコンパイルする過程で、応用プログラムのオブジェクトファイルに含ませて使用する静的ライブラリ(Static Library)とコンピュータプログラムを実行するときに含ませる動的ライブラリ(Dynamic Library)がある。静的ライブラリは、コンパイル時に応用プログラムのオブジェクトと結合して1つの実行ファイルを形成する。これに対し、動的ライブラリは、いくつかのプログラムが共通して必要な機能を応用プログラムから分離して、ランタイム(run-time)で呼び出された場合にのみ、メモリにロードするように製作したものである。静的ライブラリは、コンパイル時に応用プログラムのオブジェクトと結合されるため、静的ライブラリを多く含む応用プログラムであるほど、実行ファイルのサイズが大きくなる。同じ静的ライブラリを使用する複数の応用プログラムが同時に実行される場合、同じ夫々のコードがメモリにロードされて、メモリを効率的に使用するのが難しい。しかし、動的ライブラリを使用する場合は、複数の応用プログラムが一つの動的ライブラリを共有して使用することができるため、メモリを効率的に使用することができる。
【0005】
プログラムの中核的な機能を実行するため、保護が必要なプログラムのコードは、複数のプログラムで共通して使用されるため、動的ライブラリに製作される場合が多い。このような場合、動的ライブラリのセキュリティが必要であり、応用プログラムの内部の情報を外部に露出せずに動的ライブラリを安全に実行できる方法が問題となる。特に、デバッガやIDA(Interactive DisAssembler)などの静的分析ツール(Static Analyzer)を利用すれば、動的ライブラリを分析することができ、内容を変更するか、あるいは新しい機能を挿入することも可能である。このIDAのようなツールを利用すれば、マシンコード(machine code)をソースコードレベルまで分析することができる。
【0006】
静的分析ツールから動的ライブラリを保護するために、従来は、動的ライブラリを暗号化して、プログラムのリソースに追加して保管しておき、必要な時に復号化してファイルに保存して、このファイルをメモリにロードして使用し、ファイルは削除する方法を利用した。動的ライブラリを保護するための従来の技術については、
図2で詳細に説明する。
【0007】
しかし、従来の動的ライブラリを保護する方法は、動的ライブラリを暗号化して、静的分析ツールで分析することを防止することはできたが、外部に露出されており、重要なファイルであることが分かりやすい。そして、パスワードが解かれた動的ライブラリが流出された場合は、復号化の過程が無力化されるため、パスワードが解かれた動的ライブラリをロードするようにすれば、比較的少ないコードの修正だけで迂回することができるという問題がある。結局、従来の技術は、動的ライブラリを静的分析ツールから保護して問題を解決する根本的な手段にはなれなかった。
【発明の開示】
【発明が解決しようとする課題】
【0008】
本実施例は、プログラムの中核的な機能を行う動的ライブラリを静的分析ツールから保護するための方法を提供することを主な目的としている。
【課題を解決するための手段】
【0009】
本実施例の一側面によれば、動的ライブラリ(Dynamic Library)を保護するための方法において、前記動的ライブラリを使用する応用プログラムをメインメモリにロードする過程と、セキュリティ担当動的ライブラリを前記メインメモリにロードする過程と、前記セキュリティ担当動的ライブラリの内部に保管された暗号化された動的ライブラリを復号化して、保護対象の動的ライブラリを生成する過程と、前記応用プログラムから前記保護対象の動的ライブラリの内部に含まれている特定のモジュールを呼び出す過程とを含むことを特徴とする動的ライブラリを静的分析ツールから保護するための方法を提供する。
【0010】
また、本実施例の他の側面によれば、動的ライブラリ(Dynamic Library)を保護するための装置において、応用プログラム、および前記動的ライブラリを保存するための補助記憶装置と、前記補助記憶装置と連結されて、前記応用プログラムと前記動的ライブラリがロードされるメインメモリと、前記メインメモリにロードされた前記セキュリティ担当動的ライブラリの内部に保管された暗号化された動的ライブラリを復号化して、保護対象の動的ライブラリを生成する動的ライブラリ生成部と、前記応用プログラムから前記保護が必要な動的ライブラリの内部に含まれている特定のモジュールを呼び出す動的ライブラリ呼び出し部とを含むことを特徴とする動的ライブラリを静的分析ツールから保護するための装置を提供する。
【発明の効果】
【0011】
以上で説明したように、本実施例によれば、動的ライブラリを暗号化して、静的分析ツールからプログラムの中核的な機能を担当している動的ライブラリを安全に保護することができる。本発明の実施例によれば、プログラムの中核的な機能を担当する保護が必要な保護対象の動的ライブラリは、セキュリティを担当するセキュリティ担当動的ライブラリの内部に保管されるので、外部に露出されず、プログラムに対する攻撃を避けることができ、また、暗号化して保管するため、静的分析ツールを利用して、これを分析することができないので、保護対象の動的ライブラリにセキュリティを提供することができる。セキュリティを担当する動的ライブラリには、セキュリティロジックが含まれている。セキュリティロジックには、セキュリティ担当動的ライブラリがメモリにロードされると、自動的に実行され、攻撃者の攻撃を検知したり、攻撃をすることができないように事前に環境を設定する機能が含まれている。
【0012】
また、本発明の実施例によれば、保護対象の動的ライブラリとセキュリティを担当する動的ライブラリとの間のセキュリティを強化するために、別途製作した静的ライブラリに連結することにより、保護対象の動的ライブラリは、セキュリティ担当動的ライブラリなしでは駆動することができないようにして、中核的な機能を提供する保護対象の動的ライブラリのセキュリティをさらに強化する効果がある。セキュリティ担当動的ライブラリは、保護対象の動的ライブラリまたは応用プログラムのセキュリティのために、メモリにロードされた後、自動的に実行され、攻撃者の攻撃を検知したり、防止するアンチデバッグ(antidebugging)、アンチダンプ(anti-dump)などのセキュリティ機能を行うセキュリティロジックを含んでいる。もし、保護対象の動的ライブラリが静的分析ツールによって分析され、保護対象の動的ライブラリが変形されたとしても、ファイルの無欠性の検証を介してファイルが変形されたか否かを判断することができ、ファイルが変形された場合は、応用プログラムの実行を中断することができる。
【発明を実施するための最良の形態】
【0013】
以下、本実施例を添付された図面を参照して詳細に説明する。
【0014】
本実施例に係る動的ライブラリを静的分析ツールから保護するための方法を実施するシステムは、Windows(登録商標)、MAC OS、Linux(登録商標)、Unix(登録商標)、IOS、Android、Unity、その他の動的ライブラリを支援するOS、または仮想マシン(Virtual Machine)などのプラットフォームを含むが、いずれか一つのシステムに限定されない。ここで、動的ライブラリは、動的リンクライブラリ(Dynamic Link Library)、共有ライブラリ(Shared Library)、ランタイムライブラリ(Run Time Library)、ActiveXコントロールなど、様々な名称で呼称することができる。
【0015】
図1は、動的ライブラリを含むプログラムを実行するコンピュータ装置の例示図である。
【0016】
補助記憶装置130に保管された応用プログラムをメインメモリ120にロードして、中央処理装置110で応用プログラムを実行する。応用プログラムは、実行に必要なデータを入力装置150から入力を受け、実行の結果をディスプレイ装置140に出力する。メインメモリ120にロードされた応用プログラムは、自分が必要な動的ライブラリを補助記憶装置130からメインメモリ120にロードして使用する。このとき、ロードされた動的ライブラリは、自分をメインメモリにロードした応用プログラムだけでなく、メインメモリ120で実行されている他の応用プログラムでも使用することができる。複数の応用プログラムで、メインメモリ120にロードされた一つの動的ライブラリを使用することにより、物理的なメインメモリの使用を減らし、効率的なメモリ管理が可能である。動的ライブラリのエラーが発見され、パッチが必要な場合は、動的ライブラリを使用する応用プログラムに関係なく、動的ライブラリのみを再作成して配布すればよい。もし、静的ライブラリを使用する場合には、静的ライブラリを使用するすべての応用プログラムを再作成して再配布しなければならない。さらに、動的ライブラリに含まれている機能の変更が必要な場合は、動的ライブラリのみ修正すれば、複数の応用プログラムが変更される必要がなく、適用されることができ、メンテナンスコストを削減することもできる。
【0017】
図2は、動的ライブラリを保護するための方法の例示図である。
【0018】
補助記憶装置130に保存されていた応用プログラム210と、リソースタイプの暗号化された動的ライブラリ220をメインメモリ120にロードする。暗号化された動的ライブラリは、応用プログラムの中核的な機能を担当し、保護が必要な保護対象の動的ライブラリである。応用プログラム210または応用プログラムで使用する動的ライブラリから保護対象の動的ライブラリ内に含まれている特定のモジュールを呼び出すためには、暗号化された動的ライブラリ220を復号化して補助記憶装置130に動的ライブラリ230をファイルで保存し、この動的ライブラリ230をメインメモリ120にロードしなければならない。保護対象の動的ライブラリがメインメモリ120にロードされた後、応用プログラム210または動的ライブラリから特定の関数を呼び出すことができる。
【0019】
従来技術である動的ライブラリを応用プログラムと分離して暗号化し、リソースに作って保存しておき、応用プログラムで動的ライブラリが必要とされる時に復号化する方法は、動的ライブラリを静的分析ツールで分析できないようにすることはできるが、動的ライブラリを悪意を持って攻撃しようとする者に発見されやすく、これだけでは、動的ライブラリを保護するには不十分である。プログラムを悪意を持って攻撃しようとする者が応用プログラムで復号化を担当し、動的ライブラリをロードする部分を無力化させ、暗号化が解かれた動的ライブラリファイルを変形してロードすれば、応用プログラムが実行されるしかないというセキュリティ上の問題点がある。
【0020】
図3aは、本実施例に係る応用プログラムとセキュリティを担当する動的ライブラリがメインメモリにロードされた状態の例示図である。
【0021】
応用プログラム310をメインメモリ120にロードして実行すると、保護対象の動的ライブラリ内の特定のモジュールを呼び出し、このときに、セキュリティ担当動的ライブラリ320をメインメモリ120にロードする。
図3aは、セキュリティ担当動的ライブラリ320が、自分の内部にセキュリティが必要な動的ライブラリを暗号化された動的ライブラリ330として保管し、外部の攻撃者からプログラムを保護するためのセキュリティロジック335を含んでいる状態を見せている。セキュリティ担当動的ライブラリ320の内部に暗号化された動的ライブラリ330として保管することにより、静的分析ツールを使用してプログラムを悪意を持って分析したり、攻撃しようとする者から保護対象の動的ライブラリを隠すことができる。したがって、従来技術で保護対象の動的ライブラリが外部に露出されて発生する問題を改善することができる。セキュリティロジック335は、セキュリティ担当動的ライブラリ320がメインメモリ120にロードされた直後に自動的に実行され、アンチデバッグ(anti-debugging)とアンチダンプ(anti-dump)とともに、応用プログラムまたは動的ライブラリに対する攻撃を検知するか、あるいは攻撃することができないように事前に環境を設定する機能を行う。
【0022】
図3bは、本実施例に係る応用プログラム、セキュリティ担当動的ライブラリと保護対象の動的ライブラリがメインメモリにロードされた状態の例示図である。
【0023】
図3bは、
図3aの応用プログラム310と、セキュリティ担当動的ライブラリ320をメインメモリ120にロードした状態で、セキュリティ担当動的ライブラリ320の内部の暗号化された動的ライブラリ330を復号化して保護対象の動的ライブラリ340をファイルにして補助記憶装置130に保存した後、保護対象の動的ライブラリ340をメインメモリ120にロードした状態を見せている。保護対象の動的ライブラリ340をメインメモリ120にロードした後、静的分析ツールを使用してプログラムを分析しようとする者に保護対象の動的ライブラリ340が露出されないように補助記憶装置130からファイルを削除することができる。
【0024】
保護対象の動的ライブラリ340は、セキュリティをさらに強化するために、セキュリティ強化静的ライブラリ342を含んでいる。セキュリティ強化静的ライブラリ342は、事前に静的ライブラリの形で製作され、保護対象の動的ライブラリ340を作成する際に静的にリンクし、セキュリティ担当動的ライブラリ320と動的にリンクする。このように、ライブラリの相互間を連結して、保護対象の動的ライブラリ340でセキュリティ強化静的ライブラリ342内の少なくとも一つ以上の関数を呼び出し、セキュリティ強化静的ライブラリ342でセキュリティ担当動的ライブラリ320内の少なくとも一つ以上の関数を呼び出すようにして、保護対象の動的ライブラリ340がセキュリティ担当動的ライブラリ320なしに使用することができないようにして、セキュリティをさらに強化する。
図4でライブラリの相互間の連結について詳しく説明する。
【0025】
また、セキュリティ強化静的ライブラリ342は、事前に製作して使用することができ、セキュリティ強化静的ライブラリのコードを難読化(Obfuscation)処理をして、静的分析ツールを使用したリバースエンジニアリング(Reverse Engineering)分析を困難にすることができる。これにより、セキュリティ強化静的ライブラリ342がする役割を分析できないようにし、悪意を持ってプログラムを分析しようとする者から保護対象の動的ライブラリ340を保護することができる。
【0026】
図4は、本実施例に係る応用プログラムと動的ライブラリ間の連結関係の例示図である。
【0027】
図3bは、応用プログラム310と動的ライブラリがメインメモリ120にロードされた状態の例を見せており、
図4は、応用プログラム310と、保護対象の動的ライブラリ340、セキュリティ強化静的ライブラリ342、セキュリティ担当動的ライブラリ320の相互間の連結関係を見せている。応用プログラム310が保護対象の動的ライブラリ340内の特定の関数を呼び出すためには、セキュリティ担当動的ライブラリ320を動的にメインメモリ120にロードして、セキュリティ担当動的ライブラリ320は、内部に暗号化されて保存されている動的ライブラリを復号化して補助記憶装置130にファイルにして保存する。
【0028】
応用プログラム310またはセキュリティ担当動的ライブラリ320は、補助記憶装置130に保存された保護対象の動的ライブラリ340を動的にメインメモリ120にロードする。このとき、保護対象の動的ライブラリ340内に静的にリンクされたセキュリティ強化静的ライブラリ342内の少なくとも一つ以上の関数を呼び出して、セキュリティ強化静的ライブラリ342は、セキュリティ担当動的ライブラリ320内の少なくとも一つ以上の関数を呼び出して、保護対象の動的ライブラリ340がセキュリティ担当動的ライブラリ320なしに使用されることができないようにする。つまり、保護対象の動的ライブラリ340でセキュリティ強化静的ライブラリ342内の関数を呼び出して、呼び出された関数から、また、セキュリティ担当動的ライブラリ320を呼び出して、セキュリティ担当動的ライブラリ320が先にメインメモリ120にロードされていることを確認する。セキュリティ担当動的ライブラリ320は、メインメモリ120にロードされた直後にセキュリティのための機能を行うことになるので、このような確認の過程は、セキュリティ機能が設定されていることを保障する機能をする。
【0029】
図5は、本実施例に係る応用プログラム、セキュリティ担当動的ライブラリ、保護対象の動的ライブラリ、偽装動的ライブラリとハッシュレジストリがメインメモリにロードされた状態の例示図である。
【0030】
図5は、
図3bの応用プログラム310、セキュリティ担当動的ライブラリ320と、セキュリティが必要な保護対象の動的ライブラリ340がメインメモリ120にロードされた状態で、偽装動的ライブラリ510とハッシュレジストリ520を追加でメインメモリ120にロードした状態を見せている。偽装動的ライブラリ510は、応用プログラムを悪意を持って攻撃しようとする者から、セキュリティ担当動的ライブラリ320の内部に保護対象の動的ライブラリ340が暗号化され保管されていることを偽装するために、保護対象の動的ライブラリと同じ名称で作成されたものである。これにより、攻撃者は偽装動的ライブラリ510がプログラムの中核的な機能を行う動的ライブラリだと認識するようになる。偽装動的ライブラリ510は、セキュリティ担当動的ライブラリ320のようにセキュリティロジックを含むことがあり、偽装動的ライブラリ510のコードを難読化することもできる。
【0031】
ハッシュレジストリ520は、応用プログラム310、セキュリティ担当動的ライブラリ320、セキュリティが必要な保護対象の動的ライブラリ340、偽装動的ライブラリ510およびその他に応用プログラムで使用するファイルをハッシュ関数に入力して抽出されたファイルごとのハッシュコードを含んでいる。応用プログラム310、セキュリティ担当動的ライブラリ320、セキュリティが必要な動的ライブラリ340に対するハッシュコードは必須であるが、偽装動的ライブラリ510などに対するハッシュコードは、メインメモリにロードされた場合にのみ、選択的に必要である。ハッシュレジストリ520は、
図5の例示のように別途保存されてメインメモリ120にロードされることができるのはもちろんのこと、応用プログラム310や動的ライブラリの内部に含まれて保存されることもできる。
【0032】
以下、ファイルの無欠性を検証する方法について説明する。応用プログラム310が保護対象の動的ライブラリ340の特定の関数を呼び出す場合、セキュリティ担当動的ライブラリ320がメインメモリ120にロードされると、セキュリティ機能が実行され、保護対象の動的ライブラリ340を生成して補助記憶装置130に保存し、続いて、保護対象の動的ライブラリ340、偽装動的ライブラリ510とハッシュレジストリ520をメインメモリ120にロードする。無欠性検証を行うファイルは、セキュリティ担当動的ライブラリ320に限定されず、応用プログラム310、保護対象の動的ライブラリ340、偽装動的ライブラリ510のいずれかである。無欠性検証の対象ファイルも保護対象の動的ライブラリ340に限定されず、応用プログラム310、セキュリティ担当動的ライブラリ320、偽装動的ライブラリ510などである。もし、静的分析ツールによって応用プログラムが分析されて、変形された保護対象の動的ライブラリ340をメインメモリにロードしても、ファイルの無欠性を検証することにより、セキュリティ損傷を防止することができる。ファイルの無欠性を検証するために、検証しようとするファイルをハッシュ関数(MD5、SHA、Checksumなど)に入力してハッシュコードを抽出し、抽出されたハッシュコードがハッシュレジストリに含まれているいずれかのハッシュコードと一致するか否かを判断し、一致するハッシュコードがないと判断された場合に、応用プログラム310の実行を中断する。
【0033】
図6は、本実施例に係る応用プログラムから保護対象の動的ライブラリ内の特定のモジュールを呼び出す過程のフローチャートである。
【0034】
応用プログラム310を実行すると、メインメモリ120には応用プログラム310がロードされる(S610)。応用プログラム310が実行されている間に、保護対象の動的ライブラリ340の内部の特定のモジュールを呼び出すときに、まずセキュリティ担当動的ライブラリ320を補助記憶装置130からメインメモリ120にロードし(S620)、セキュリティ担当動的ライブラリ320のセキュリティ機能が活性化され、セキュリティ担当動的ライブラリ320の内部に暗号化されて保管されている動的ライブラリを復号化して、保護対象の動的ライブラリ340を生成し(S630)、生成された保護対象の動的ライブラリ340を補助記憶装置130にファイルとして保存すると、セキュリティ担当動的ライブラリ320または応用プログラム310で保護対象の動的ライブラリ340ファイルの無欠性を検証する(S640)。ファイルの無欠性検証でファイルが変形されていないことが確認されたら、保護対象の動的ライブラリをロードする(S650)。ファイルが変形されたことが確認された場合は、プログラムの実行を中断する。また、プログラムを悪意を持って攻撃しようとする者に、保護対象の動的ライブラリ340であるかのように装った偽装動的ライブラリ510をメインメモリ120にロードする(S660)。そして、応用プログラム310は、応用プログラムの実行に中核的な機能を担当する保護対象の動的ライブラリ340内の特定のモジュールを呼び出す(S670)。
【0035】
図7は、静的分析ツールから動的ライブラリを保護するためのセキュリティを提供する過程の例示図である。
【0036】
開発段階でセキュリティ担当動的ライブラリ320であるHardening.so、保護対象の動的ライブラリ340であるGame.so、セキュリティ担当動的ライブラリ320と保護対象の動的ライブラリ340との間でセキュリティを強化するセキュリティ強化静的ライブラリ342であるSDK.aが開発される。Game.soとSDK.aは静的に連結されて、Game.soはSDK.aを含む。このファイルのセキュリティを強化する動的ライブラリセキュリティ強化段階を経ることで、SDK.aを含むGame.soがHardening.soの内部に暗号化されて保管される。
【0037】
Game.soを復号化するための暗号化キーをHardening.so内に保管する。ただし、本発明の技術的思想は、暗号化キーをHardening.soに保管することに限らず、他の場所に保管することもできる。
【0038】
Game.soファイルが暗号化されHardening.so内に暗号化されていることを隠すために、同じ名前の偽装動的ライブラリ510であるGame'.soを使用する(Game'.soはGame.soと同じ名前であるが、説明のために両者を区別して表記した。)。ユーザーには、応用プログラムとセキュリティが適用されたHardening.soとGame'.soが配布される。
【0039】
ユーザーが配布された応用プログラムを実行し、Game.soに含まれている特定のモジュールを呼び出すために、まずHardening.soをメインメモリにロードし、Hardening.soに暗号化されて保管されているGame.soを復号化して、Game.soをメインメモリにロードする。Game.soをメインメモリにロードした後は、Game.soファイルを削除し、Game.soを保護するための偽装動的ライブラリであるGame'.soをメインメモリにロードする。
【0040】
図8は、本実施例に係る静的分析ツールから動的ライブラリを保護するための装置の構成図である。
【0041】
補助記憶装置130は、応用プログラム310、セキュリティ担当動的ライブラリ320、偽装動的ライブラリ510などの応用プログラムの実行に必要なファイルを含むことができる。
図8は、補助記憶装置130に保存された応用プログラム310、セキュリティ担当動的ライブラリ320、偽装動的ライブラリ510がメインメモリ120にロードされた例を見せている。応用プログラム310、セキュリティ担当動的ライブラリ320は必須的に含まれるが、偽装動的ライブラリ510は、選択的に含むことができる。応用プログラム310は、動的ライブラリ呼び出し部810を介してセキュリティが必要な動的ライブラリを呼び出し、それ以前に、動的ライブラリ生成部820は、セキュリティ担当動的ライブラリ320から保護対象の動的ライブラリ340を生成し、動的ライブラリ保存部830に保存する。
【0042】
セキュリティ強化部840は、動的ライブラリ保存部830に保存された保護対象の動的ライブラリと動的にリンクされ、セキュリティ担当動的ライブラリ320と静的にリンクされて、保護対象の動的ライブラリ340がセキュリティ担当動的ライブラリ320なしに動作しないようにする。
【0043】
無欠性検証部850は、ファイルハッシュ抽出部852、ハッシュレジストリ854、ファイル変形判断部856で構成されている。無欠性検証部850のファイルハッシュ抽出部852は、応用プログラム310、セキュリティ担当動的ライブラリ320、動的ライブラリ830に保存されている保護対象の動的ライブラリ340とその他の応用プログラムの実行に必要なファイルをハッシュ関数に入力して、ファイルごとのハッシュコードを抽出する。ただし、応用プログラム310、セキュリティ担当動的ライブラリ320、セキュリティが必要な保護対象の動的ライブラリ340に対するハッシュコードは必須であるが、偽装動的ライブラリ510などに対するハッシュコードは、メインメモリにロードされた場合にのみ、選択的に必要である。ファイル変形判断部856は、抽出されたハッシュコードがハッシュレジストリ保存部854に保存されたハッシュレジストリのハッシュコードのいずれかと一致するか否かを判断して、一致するハッシュコードがないものと判断された場合は、応用プログラムの実行を中断する。
【0044】
本発明の実施例に係る静的分析ツールから動的ライブラリを保護するための装置800は、パーソナルコンピュータ(PC:Personal Computer)、ノートブックコンピュータ、タブレット、個人携帯端末(PDA:Personal DigitalAssistant)、ゲームコンソール、携帯型マルチメディアプレーヤー(PMP:Portable Multimedia Player)、プレイステーションポータブル(PSP:PlayStation Portable)、無線通信端末(Wireless Communication Terminal)、スマートフォン(Smart Phone)、TV、メディアプレーヤーなどのユーザー端末である。本発明の実施例に係る静的分析ツールから動的ライブラリを保護するための装置800は、応用サーバーとサービスサーバーなどのサーバー端末である。本発明の実施例に係る静的分析ツールから動的ライブラリを保護するための装置800は、それぞれ、(i)各種機器や有線・無線通信網との通信を行うための通信モデムなどの通信装置、(ii)プログラムを実行するためのデータを保存するためのメモリ、(iii)プログラムを実行して演算および制御を行うためのマイクロプロセッサなどを備える様々な装置を意味することができる。少なくとも一実施例によれば、メモリはラム(Random Access Memory:RAM)、ロム(Read Only Memory:ROM)、フラッシュメモリ、光ディスク、磁気ディスク、ソリッドステートディスク(Solid State Disk:SSD)などのコンピュータで読み取り可能な記録/保存媒体である。少なくとも一実施例によれば、マイクロプロセッサは、明細書に記載された動作と機能を1つ以上選択的に実行するようにプログラムすることができる。少なくとも一実施例によれば、マイクロプロセッサは、全体または部分的に特定の構成の特定用途向け半導体(application specific integrated circuit:ASIC)などのハードウェアで具現される。
【0045】
以上の説明は、本実施例の技術思想を例示的に説明したにすぎないものであって、本実施例の属する技術分野で通常の知識を有する者であれば、本実施例の本質的な特性から逸脱しない範囲で様々な修正および変形が可能である。したがって、本実施例は、本実施例の技術思想を限定するためのものではなく説明するためのものであり、これらの実施例により、本実施例の技術思想の範囲が限定されるものではない。本実施例の保護範囲は、特許請求の範囲によって解釈されるべきであり、それと同等の範囲内にあるすべての技術思想は、本実施例の権利範囲に含まれるものと解釈されるべきである。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[1]動的ライブラリ(Dynamic Library)を保護するための方法において、
前記動的ライブラリを使用する応用プログラムをメインメモリにロードする過程と、
セキュリティ担当動的ライブラリを前記メインメモリにロードする過程と、
前記セキュリティ担当動的ライブラリに保管された暗号化された動的ライブラリを復号化して、保護対象の動的ライブラリを生成する過程と、
前記応用プログラムから前記保護対象の動的ライブラリの内部に含まれている特定のモジュールを呼び出す過程とを含むことを特徴とする動的ライブラリを保護するための方法。
[2]前記保護対象の動的ライブラリ生成過程は、前記保護対象の動的ライブラリを保存装置にファイルとして保存する過程と、前記保護対象の動的ライブラリを前記メインメモリにロードする過程とをさらに含むことを特徴とする[1]に記載の動的ライブラリを保護するための方法。
[3]前記セキュリティ担当動的ライブラリは、セキュリティ強化静的(static)ライブラリと動的にリンク(dynamic link)され、前記保護対象の動的ライブラリは、前記セキュリティ強化静的ライブラリと静的にリンク(static link)されることを特徴とする[1]に記載の動的ライブラリを保護するための方法。
[4]前記セキュリティ強化静的ライブラリは、前記セキュリティ担当動的ライブラリ内の少なくとも一つ以上のモジュールを呼び出すことを特徴とする[3]に記載の動的ライブラリを保護するための方法。
[5]前記保護対象の動的ライブラリは、前記セキュリティ強化静的ライブラリ内の少なくとも一つ以上のモジュールを呼び出すことを特徴とする[3]に記載の動的ライブラリを保護するための方法。
[6]前記セキュリティ強化静的ライブラリのコード(code)が難読化(Obfuscation)されていることを特徴とする[3]に記載の動的ライブラリを保護するための方法。
[7]前記セキュリティ担当動的ライブラリは、アンチデバッグ(anti-debugging)またはアンチダンプ(anti-dump)を含み、前記応用プログラムまたは前記保護対象の動的ライブラリへの攻撃を検知するか、あるいは攻撃することができないように環境を設定するセキュリティロジックを含むことを特徴とする[1]に記載の動的ライブラリを保護するための方法。
[8]前記応用プログラムは、前記保護対象の動的ライブラリと同じファイル名の偽装動的ライブラリを含むことを特徴とする[1]に記載の動的ライブラリを保護するための方法。
[9]前記応用プログラム、前記セキュリティ担当動的ライブラリ、前記保護対象の動的ライブラリを必ず含み、偽装動的ライブラリを前記メインメモリにロードしたか否かに応じて、選択的に、前記偽装動的ライブラリを含む、前記応用プログラムの実行に必要なファイルに対するファイルごとのハッシュコードを含むハッシュレジストリを生成することを特徴とする[1]に記載の動的ライブラリを保護するための方法。
[10]前記応用プログラムの実行に必要なファイルに対するファイルごとのハッシュコードを利用して前記応用プログラムの実行に必要なファイルのいずれかの無欠性を検証する無欠性検証過程と、
前記無欠性検証過程でいずれか一つ以上のファイルが変形されたと判断された場合、前記応用プログラムの実行を中断する過程をさらに含むことを特徴とする[9]に記載の動的ライブラリを保護するための方法。
[11]前記無欠性検証過程は、前記セキュリティ担当動的ライブラリで実行することを特徴とする[10]に記載の動的ライブラリを保護するための方法。
[12]動的ライブラリ(Dynamic Library)を保護するための装置において、
応用プログラム、および前記動的ライブラリを保存するための補助記憶装置と、
前記補助記憶装置と連結されて、前記応用プログラムと前記動的ライブラリがロードされるメインメモリと、
前記メインメモリにロードされたセキュリティ担当動的ライブラリの内部に保管された暗号化された動的ライブラリを復号化して、保護が必要な保護対象の動的ライブラリを生成する動的ライブラリ生成部と、
前記応用プログラムから前記保護対象の動的ライブラリの内部に含まれている特定のモジュールを呼び出す動的ライブラリ呼び出し部とを含むことを特徴とする動的ライブラリ保護装置。
[13]前記動的ライブラリ作成部は、前記保護対象の動的ライブラリを保存する動的ライブラリ保存部をさらに含むことを特徴とする[12]に記載の動的ライブラリ保護装置。
[14]前記セキュリティ担当動的ライブラリとセキュリティ強化静的(static)ライブラリとを動的にリンク(dynamic link)させて、前記保護対象の動的ライブラリと前記セキュリティ強化静的ライブラリとを静的にリンク(static link)させるセキュリティ強化部をさらに含むことを特徴とする[12]に記載の動的ライブラリ保護装置。
[15]前記応用プログラムは、
前記保護対象の動的ライブラリと同じ名称の偽装動的ライブラリを含むことを特徴とする[12]に記載の動的ライブラリ保護装置。
[16]前記応用プログラム、前記セキュリティ担当動的ライブラリ、前記保護対象の動的ライブラリを必ず含み、偽装動的ライブラリを前記メインメモリにロードしたか否かに応じて、選択的に、前記偽装動的ライブラリを含む、前記応用プログラムの実行に必要なファイルに対してファイルハッシュを用いて無欠性を検証する無欠性検証部をさらに含むことを特徴とする[12]に記載の動的ライブラリ保護装置。
[17]前記無欠性検証部は、
前記応用プログラムの実行に必要なファイルに対するファイルごとのハッシュコードを含むハッシュレジストリを保存しているハッシュレジストリ保存部と、
前記応用プログラムの実行に必要なファイルに対するファイルごとのハッシュコードを抽出するファイルハッシュ抽出部と、
前記抽出されたハッシュコードが前記ハッシュレジストリのハッシュコードのいずれか一つと一致するか否かを判断して、一致するハッシュコードがないと判断された場合は、前記応用プログラムの実行を中断するファイル変形判断部とを含むことを特徴とする[16]に記載の動的ライブラリ保護装置。
【図面の簡単な説明】
【0046】
【
図1】
図1は、動的ライブラリを含むプログラムを実行するコンピュータ装置の例示図である。
【
図2】
図2は、動的ライブラリを保護するための方法の例示図である。
【
図3a】
図3aは、本実施例に係る応用プログラムとセキュリティ担当動的ライブラリがメインメモリにロードされた状態の例示図である。
【
図3b】
図3bは、本実施例に係る応用プログラム、セキュリティ担当動的ライブラリと保護対象の動的ライブラリがメインメモリにロードされた状態の例示図である。
【
図4】
図4は、本実施例に係る応用プログラムと動的ライブラリとの間の連結関係の例示図である。
【
図5】
図5は、本実施例に係る応用プログラム、セキュリティ担当動的ライブラリ、保護対象の動的ライブラリ、偽装動的ライブラリとハッシュレジストリがメインメモリにロードされた状態の例示図である。
【
図6】
図6は、本実施例に係る応用プログラムから保護対象の動的ライブラリ内の特定のモジュールを呼び出す過程のフローチャートである。
【
図7】
図7は、本実施例に係る静的分析ツールから動的ライブラリを保護するためのセキュリティを提供する過程の例示図である。
【
図8】
図8は、本実施例に係る静的分析ツールから動的ライブラリを保護するための装置の構成図である。