(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024004974
(43)【公開日】2024-01-17
(54)【発明の名称】認証装置、認証方法及び認証プログラム
(51)【国際特許分類】
G06F 21/14 20130101AFI20240110BHJP
【FI】
G06F21/14
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2022104911
(22)【出願日】2022-06-29
(71)【出願人】
【識別番号】000208891
【氏名又は名称】KDDI株式会社
(74)【代理人】
【識別番号】100106002
【弁理士】
【氏名又は名称】正林 真之
(74)【代理人】
【識別番号】100120891
【弁理士】
【氏名又は名称】林 一好
(72)【発明者】
【氏名】田淵 純一
(57)【要約】
【課題】端末で実行させる認証用のプログラムに対して、実行環境に応じた適切な難読化を施せる認証装置を提供すること。
【解決手段】サーバ10は、端末20の種別を示す難読化フラグ毎に、正常に実行可能なプログラムが使用するスタックメモリの最大スタック数を記憶するフラグ情報記憶部121と、難読化のためのプログラムコードの変換ルールと増加するスタック数とを対応付けて記憶する変換ルール記憶部122と、端末20から難読化フラグを受信するフラグ受信部111と、認証用プログラムを変換ルールに従って難読化しつつ、増加するスタック数をカウントし、受信した難読化フラグに対応する最大スタック数を超えないように制御する難読化処理部112と、難読化された認証用プログラムを、端末20へ送信するプログラム送信部113と、認証用プログラムの実行結果を受信し、実行結果の正当性を検証する検証部114と、を備える。
【選択図】
図2
【特許請求の範囲】
【請求項1】
端末の種別を示す難読化フラグ毎に、正常に実行可能なプログラムが使用するスタックメモリの最大スタック数を記憶するフラグ情報記憶部と、
難読化のためのプログラムコードの変換ルールと前記スタックメモリにおいて増加するスタック数とを対応付けて記憶する変換ルール記憶部と、
通信相手の端末から前記難読化フラグを受信するフラグ受信部と、
認証用プログラムを前記変換ルールに従って難読化しつつ、前記スタックメモリにおいて増加するスタック数をカウントし、受信した前記難読化フラグに対応する前記最大スタック数を超えないように制御する難読化処理部と、
前記難読化処理部により難読化された認証用プログラムを、前記通信相手の端末へ送信するプログラム送信部と、
前記認証用プログラムの実行結果を受信し、当該実行結果の正当性を検証する検証部と、を備える認証装置。
【請求項2】
前記フラグ情報記憶部は、前記難読化フラグ毎に、最大メモリ使用量を記憶し、
前記変換ルール記憶部は、前記変換ルールと増加するメモリ使用量とを対応付けて記憶し、
前記難読化処理部は、前記認証用プログラムを前記変換ルールに従って難読化しつつ、増加するメモリ使用量をカウントし、受信した前記難読化フラグに対応する前記最大メモリ使用量を超えないように制御する請求項1に記載の認証装置。
【請求項3】
前記フラグ情報記憶部は、前記難読化フラグ毎に、システムコールの利用可否を記憶し、
前記難読化処理部は、前記システムコールの利用可否に基づいて前記変換ルールを選択する請求項1に記載の認証装置。
【請求項4】
前記フラグ情報記憶部は、前記難読化フラグ毎に、変数のオーバーフローの利用可否を記憶し、
前記難読化処理部は、前記オーバーフローの利用可否に基づいて前記変換ルールを選択する請求項1に記載の認証装置。
【請求項5】
端末の種別を示す難読化フラグ毎に、正常に実行可能なプログラムが使用するスタックメモリの最大スタック数を記憶するフラグ情報記憶ステップと、
難読化のためのプログラムコードの変換ルールと前記スタックメモリにおいて増加するスタック数とを対応付けて記憶する変換ルール記憶ステップと、
通信相手の端末から前記難読化フラグを受信するフラグ受信ステップと、
認証用プログラムを前記変換ルールに従って難読化しつつ、前記スタックメモリにおいて増加するスタック数をカウントし、受信した前記難読化フラグに対応する前記最大スタック数を超えないように制御する難読化処理ステップと、
前記難読化処理ステップにおいて難読化された認証用プログラムを、前記通信相手の端末へ送信するプログラム送信ステップと、
前記認証用プログラムの実行結果を受信し、当該実行結果の正当性を検証する検証ステップと、をコンピュータが実行する認証方法。
【請求項6】
請求項1から請求項4のいずれかに記載の認証装置としてコンピュータを機能させるための認証プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、特定のプログラムにより生成されたデータを受信して正当性を検証する認証システムに関する。
【背景技術】
【0002】
従来、フィッシング対策を行う際に、サーバが意図したプログラムを通信相手の端末が利用していることを検証するために、このプログラムが生成するデータを端末からサーバへ送信させ、サーバがその値を検証し、正しい値を送信してきたか否かをチェックすることがある。この検証により、通信相手が正しいプログラムを実行していれば、このプログラムにおける他の動作、例えば、端末が不正な挙動をしていないことをチェックするといった機能も動作していることを推定することができる。
【0003】
このとき、サーバが端末へ提供するプログラムを、攻撃者による解析から保護するために、様々な難読化技術が提案されている。難読化とは、プログラムの実行結果を変化させること無くプログラムを複雑に変換することで、プログラムの解析コストを増大させる技術である(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、プログラムを保護する際に、難読化を動的に行うことは、難読化の強度向上にとって有効な手法の一つである。しかしながら、対象端末の実行環境によっては、難読化手法への制約があるため、様々な端末に対して強度の高い難読化を安定的に適用することは難しかった。
【0006】
本発明は、端末で実行させる認証用のプログラムに対して、実行環境に応じた適切な難読化を施せる認証装置、認証方法及び認証プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明に係る認証装置は、端末の種別を示す難読化フラグ毎に、正常に実行可能なプログラムが使用するスタックメモリの最大スタック数を記憶するフラグ情報記憶部と、難読化のためのプログラムコードの変換ルールと前記スタックメモリにおいて増加するスタック数とを対応付けて記憶する変換ルール記憶部と、通信相手の端末から前記難読化フラグを受信するフラグ受信部と、認証用プログラムを前記変換ルールに従って難読化しつつ、前記スタックメモリにおいて増加するスタック数をカウントし、受信した前記難読化フラグに対応する前記最大スタック数を超えないように制御する難読化処理部と、前記難読化処理部により難読化された認証用プログラムを、前記通信相手の端末へ送信するプログラム送信部と、前記認証用プログラムの実行結果を受信し、当該実行結果の正当性を検証する検証部と、を備える。
【0008】
前記フラグ情報記憶部は、前記難読化フラグ毎に、最大メモリ使用量を記憶し、前記変換ルール記憶部は、前記変換ルールと増加するメモリ使用量とを対応付けて記憶し、前記難読化処理部は、前記認証用プログラムを前記変換ルールに従って難読化しつつ、増加するメモリ使用量をカウントし、受信した前記難読化フラグに対応する前記最大メモリ使用量を超えないように制御してもよい。
【0009】
前記フラグ情報記憶部は、前記難読化フラグ毎に、システムコールの利用可否を記憶し、前記難読化処理部は、前記システムコールの利用可否に基づいて前記変換ルールを選択してもよい。
【0010】
前記フラグ情報記憶部は、前記難読化フラグ毎に、変数のオーバーフローの利用可否を記憶し、前記難読化処理部は、前記オーバーフローの利用可否に基づいて前記変換ルールを選択してもよい。
【0011】
本発明に係る認証方法は、端末の種別を示す難読化フラグ毎に、正常に実行可能なプログラムが使用するスタックメモリの最大スタック数を記憶するフラグ情報記憶ステップと、難読化のためのプログラムコードの変換ルールと前記スタックメモリにおいて増加するスタック数とを対応付けて記憶する変換ルール記憶ステップと、通信相手の端末から前記難読化フラグを受信するフラグ受信ステップと、認証用プログラムを前記変換ルールに従って難読化しつつ、前記スタックメモリにおいて増加するスタック数をカウントし、受信した前記難読化フラグに対応する前記最大スタック数を超えないように制御する難読化処理ステップと、前記難読化処理ステップにおいて難読化された認証用プログラムを、前記通信相手の端末へ送信するプログラム送信ステップと、前記認証用プログラムの実行結果を受信し、当該実行結果の正当性を検証する検証ステップと、をコンピュータが実行する。
【0012】
本発明に係る認証プログラムは、前記認証装置としてコンピュータを機能させるためのものである。
【発明の効果】
【0013】
本発明によれば、端末に対して認証用のプログラムを、実行環境に応じた適切な難読化を施して提供できる。
【図面の簡単な説明】
【0014】
【
図1】実施形態の認証システムにおける通信フローを示す図である。
【
図2】実施形態におけるサーバの機能構成を示す図である。
【発明を実施するための形態】
【0015】
以下、本発明の実施形態の一例について説明する。
図1は、本実施形態の認証システム1における通信フローを示す図である。
【0016】
認証システム1は、認証装置としてのサーバ10と端末20とを備え、端末20が特定のプログラムを実行したことをサーバ10が検証するために、サーバ10が端末20に難読化した認証用プログラムを送信して実行させ、このプログラムの実行結果をサーバ10が受け取り正当性を検証する。
【0017】
まず、端末20は、サーバ10に対してプログラムの難読化手法を決定するためのフラグを送信する(ステップS1)。このフラグは、端末20の実行環境を示すデータであり、サーバ10は、取得したフラグに応じて、難読化プログラムで使用するスタックメモリのスタック数を制限する。
【0018】
続いて、サーバ10は、難読化したプログラムを端末20へ送信する(ステップS2)。端末20は、受信したプログラムを実行し、実行結果として得られるデータをサーバ10へ送信する(ステップS3)。
【0019】
図2は、本実施形態におけるサーバ10の機能構成を示す図である。
サーバ10は、制御部11及び記憶部12の他、各種の入出力インタフェース等を備えた情報処理装置(コンピュータ)である。
【0020】
制御部11は、サーバ10の全体を制御する部分であり、記憶部12に記憶された各種プログラムを適宜読み出して実行することにより、本実施形態における各機能を実現する。制御部11は、CPUであってよい。
【0021】
記憶部12は、ハードウェア群をサーバ10として機能させるための各種プログラム、及び各種データ等の記憶領域であり、ROM、RAM、フラッシュメモリ又はハードディスクドライブ(HDD)等であってよい。
具体的には、記憶部12は、本実施形態の認証方法を実現するための認証プログラムを記憶する他、フラグ情報記憶部121と、変換ルール記憶部122とを備える。
【0022】
フラグ情報記憶部121は、端末の種別を示す難読化フラグ毎に、正常に実行可能なプログラムが使用するスタックメモリの最大スタック数を記憶する。
さらに、フラグ情報記憶部121は、難読化フラグ毎に、最大メモリ使用量、システムコールの利用可否、オーバーフローの利用可否等を記憶してもよい。
【0023】
変換ルール記憶部122は、難読化のためのプログラムコードの変換ルールと、スタックメモリにおいて増加するスタック数とを対応付けて記憶する。
さらに、変換ルール記憶部122は、変換ルールと増加するメモリ使用量とを対応付けて記憶してもよい。
【0024】
制御部11は、フラグ受信部111と、難読化処理部112と、プログラム送信部113と、検証部114とを備える。
【0025】
フラグ受信部111は、認証の対象である通信相手の端末から事前に難読化フラグを受信する。なお、難読化フラグは、複数の端末20それぞれに対して、その種別に応じて予め割り当てられており、サーバ10は、このフラグにより端末20の機種情報を判定可能である。
【0026】
難読化処理部112は、認証用プログラムを変換ルールに従って難読化しつつ、スタックメモリにおいて増加するスタック数をカウントし、端末20から受信した難読化フラグに対応する最大スタック数を超えないように制御する。
さらに、難読化処理部112は、認証用プログラムを変換ルールに従って難読化しつつ、増加するメモリ使用量をカウントし、受信した難読化フラグに対応する最大メモリ使用量を超えないように制御してもよい。
また、難読化処理部112は、難読化フラグに紐づくシステムコールの利用可否、若しくは変数のオーバーフローの利用可否に基づいて変換ルールを選択してもよい。
【0027】
ここで、例えば、次のような変数を定義するプログラム(ただし、__NEXT__は、後続のプログラムを意味する):
i = "Hello"
__NEXT__
を、次のように置き換える難読化を考える。
for (i in {"Hello":0}) {__NEXT__}
【0028】
この場合、実行結果は変わらないものの、難読化によりソースコード上の記載が変化するだけでなく、実行時にforループによるスコープが追加されるため、スタックメモリのスタックが新たに利用されるようになる。
【0029】
通常、こうした実行時のスタックメモリのスタック数は十分な数が用意されるが、難読化のように自動化されたソースコード変換により大量のスタックが必要なプログラムを生成すると、実行環境によっては、スタックオーバーフローが発生する可能性がある。特に、この問題は、IoT機器等の性能面で余裕を持たない機器において顕著である。
一方で、IoT機器は、インターネットに接続された付加価値を訴求するために高性能なパソコン等と同様の機能を保持することがあり、このため、セキュリティ対策が求められることがある。
【0030】
なお、前述の難読化は、例えば、
i = "Hel" + "lo"
といった変換や、あるいは、
i = "Hello World".substring(0, 5)
のような変換方法も考えられる。
このように、難読化の変換ルールは様々であり、スタックメモリのスタック数、メモリ使用量、あるいは、システムコールの利用の有無、オーバーフローの利用の有無等に違いがある。
【0031】
難読化処理部112は、端末20毎の難読化フラグに合わせて、難読化プログラムで使用するスタックメモリのスタック数等を変化させることにより、端末20に適した難読化のレベルで難読化プログラムを生成する。
【0032】
具体的には、難読化処理部112は、まず、難読化フラグに応じたスタックメモリの最大スタック数をフラグ情報記憶部121から取得する。
また、変換ルール記憶部122には、難読化のためのソースコードの変換ルール毎にスタックメモリにおいて増加スタック数が保持されており、難読化処理部112は、ソースコードを変換する際に増加するスタック数をカウントする。そして、難読化処理部112は、最大スタック数を超える場合にはスタック数を増加させる変換を行わないようにすることで、スタック数が最大スタック数を超えることを回避する。あるいは、難読化処理部112は、最大スタック数を超えないように、難読化に関する変換の一部を行わないようにしてもよい。
【0033】
プログラム送信部113は、難読化処理部112により難読化された認証用プログラムを、通信相手の端末20へ送信する。
【0034】
検証部114は、認証用プログラムの実行結果を端末20から受信し、この実行結果の正当性、すなわち期待通りの値であることを検証する。
【0035】
以上のように、本実施形態によれば、サーバ10は、端末20毎のプログラム実行環境に応じた難読化フラグを事前に取得することにより、認証用プログラムを難読化して端末20へ提供する際に、プログラムが使用するスタックメモリのスタック数が正常に実行可能な最大スタック数を超えないように適切な難読化を施すことができる。
【0036】
従来の難読化は、事前にプログラムに対して適用し、難読化されたプログラムが各種機器で正しく動作するかを事前にテストすることが通常であった。これは、こうした難読化されたプログラムが難読化前のプログラムと完全に同じ動作をするとは限らないためである。しかしながら、動的に難読化を行う際には、こうした動作差分が起こらないようにする必要があり、これまでは、こうした動作差分が少ない難読化手法のみを適用するようなことが行われてきた。
一方で、スタックメモリで使用するスタック数を増加させるようなソースコード変換は、プログラムの構造そのものを変化させることを意味することから、難読化強度を飛躍的に向上させる可能性がある。こうした難読化強度の高い変換を利用するためには、実行環境の特性に応じた変換が必要であり、本実施形態によれば、最大スタック数を上限としてスタック数を増加させる動的な難読化の仕組みを提供できる。
【0037】
また、サーバ10は、スタックメモリで使用するスタック数の他に、メモリ使用量を制御することもできる。
難読化の変換手法には、大量のメモリを使用するようなソースコードの変換ルールが存在する。したがって、サーバ10は、大量のメモリを使用する変換ルールに対しメモリ使用量を保持し、ソースコードの変換時にメモリ使用量をカウントすることで、難読化フラグに応じた最大メモリ使用量を超える場合には、そのようなメモリ使用量を要求する変換を行わないようにすることで、端末20におけるメモリ不足を回避できる。
【0038】
さらに、サーバ10は、特殊なシステムコールの利用可否、あるいは、変数のオーバーフローの利用可否を難読化フラグから判定し、利用可能な端末20の場合にのみ、このような動作を利用した変換を実施してもよい。
これにより、端末20の環境に応じて、難読化強度をさらに高めることができる。
【0039】
なお、本実施形態によれば、例えば、機器毎に認証用プログラムの難読化強度を適切に設定でき、フィッシングを受けにくいサイト構築が可能となることから、国連が主導する持続可能な開発目標(SDGs)の目標9「レジリエントなインフラを整備し、持続可能な産業化を推進すると共に、イノベーションの拡大を図る」に貢献することが可能となる。
【0040】
以上、本発明の実施形態について説明したが、本発明は前述した実施形態に限るものではない。また、前述した実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、実施形態に記載されたものに限定されるものではない。
【0041】
サーバ10(認証装置)による認証方法は、ソフトウェアにより実現される。ソフトウェアによって実現される場合には、このソフトウェアを構成するプログラムが、情報処理装置(コンピュータ)にインストールされる。また、これらのプログラムは、CD-ROMのようなリムーバブルメディアに記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。さらに、これらのプログラムは、ダウンロードされることなくネットワークを介したWebサービスとしてユーザのコンピュータに提供されてもよい。
【符号の説明】
【0042】
1 認証システム
10 サーバ(認証装置)
11 制御部
12 記憶部
20 端末
111 フラグ受信部
112 難読化処理部
113 プログラム送信部
114 検証部
121 フラグ情報記憶部
122 変換ルール記憶部