IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ KDDI株式会社の特許一覧

特開2024-13375認証装置、認証方法、認証プログラム及び認証用難読化プログラム
<>
  • 特開-認証装置、認証方法、認証プログラム及び認証用難読化プログラム 図1
  • 特開-認証装置、認証方法、認証プログラム及び認証用難読化プログラム 図2
  • 特開-認証装置、認証方法、認証プログラム及び認証用難読化プログラム 図3
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024013375
(43)【公開日】2024-02-01
(54)【発明の名称】認証装置、認証方法、認証プログラム及び認証用難読化プログラム
(51)【国際特許分類】
   G06F 21/12 20130101AFI20240125BHJP
   G06F 21/14 20130101ALI20240125BHJP
   G06F 21/44 20130101ALI20240125BHJP
【FI】
G06F21/12 350
G06F21/14
G06F21/12 380
G06F21/44
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022115424
(22)【出願日】2022-07-20
(71)【出願人】
【識別番号】000208891
【氏名又は名称】KDDI株式会社
(74)【代理人】
【識別番号】100106002
【弁理士】
【氏名又は名称】正林 真之
(74)【代理人】
【識別番号】100120891
【弁理士】
【氏名又は名称】林 一好
(72)【発明者】
【氏名】田淵 純一
(57)【要約】
【課題】難読化されたプログラムへの攻撃を検知できる認証装置、認証方法及び認証プログラムを提供すること。
【解決手段】サーバ10は、端末20に実行させるための認証用プログラムに含まれる一つ以上の関数の名称を、認証値を含む文字列に設定する認証値設定部111と、関数により実行されるコードの中で、所定のエラーを発生させ、当該エラー発生時のスタックトレース文字列を取得するように構成するエラー設定部112と、認証用プログラムを、認証値を除いて難読化し、難読化プログラムを生成する難読化処理部113と、難読化プログラムを端末20に送信するプログラム送信部114と、難読化プログラムの実行結果、及びスタックトレース文字列の少なくとも一部を確認可能なデータを受信し、実行結果が期待データと合致すること、及びスタックトレース文字列に認証値が含まれることを検証する検証部115と、を備える。
【選択図】図2
【特許請求の範囲】
【請求項1】
端末に実行させるための認証用プログラムに含まれる一つ以上の関数の名称を、認証値を含む文字列に設定する認証値設定部と、
前記関数により実行されるコードの中で、所定のエラーを発生させ、当該エラー発生時のスタックトレース文字列を取得するように構成するエラー設定部と、
前記認証用プログラムを、前記認証値を除いて難読化し、難読化プログラムを生成する難読化処理部と、
前記難読化プログラムを前記端末に送信するプログラム送信部と、
前記難読化プログラムの実行結果、及び前記スタックトレース文字列の少なくとも一部を確認可能なデータを受信し、前記実行結果が期待データと合致すること、及び前記スタックトレース文字列に前記認証値が含まれることを検証する検証部と、を備える認証装置。
【請求項2】
前記難読化プログラムの中で、前記認証値が記述されている位置情報を取得する位置取得部を備え、
前記検証部は、前記スタックトレース文字列から前記関数の位置情報を抽出し、前記位置取得部により取得された位置情報と合致することを、さらに検証する請求項1に記載の認証装置。
【請求項3】
前記位置情報は、前記難読化プログラムにおける行数又は行先頭からの文字数の少なくとも一方である請求項2に記載の認証装置。
【請求項4】
前記スタックトレース文字列の少なくとも一部を確認可能なデータは、前記スタックトレース文字列に前記認証値が含まれるか否かを示す値であり、
前記エラー設定部は、取得した前記スタックトレース文字列に前記認証値が含まれるか否かを判定し、結果をサーバに返すよう前記認証用プログラムを構成する請求項1に記載の認証装置。
【請求項5】
サーバが端末を認証する認証システムにおいて、
前記サーバが、一つ以上の関数の名称を、認証値を含む文字列に設定し、前記関数により実行されるコードの中で、所定のエラーを発生させ、当該エラー発生時のスタックトレース文字列を取得するように構成した認証用プログラムを、前記認証値を除いて難読化して端末に送信し、
前記端末が、受信したプログラムの実行結果、及び前記スタックトレース文字列の少なくとも一部を確認可能なデータを前記サーバに送信し、
前記サーバが、受信した前記実行結果が期待データと合致すること、及び前記スタックトレース文字列に前記認証値が含まれることを検証する認証方法。
【請求項6】
請求項1から請求項4のいずれかに記載の認証装置としてコンピュータを機能させるための認証プログラム。
【請求項7】
サーバが端末に実行させるための認証用難読化プログラムであって、
前記認証用難読化プログラムに含まれる、一つ以上の関数の名称が認証値を含む文字列に設定され、当該認証値を除いて難読化されており、
前記関数により実行されるコードの中で、所定のエラーを発生させ、当該エラー発生時のスタックトレース文字列を取得させることにより、前記サーバにおいて、前記認証用難読化プログラムの実行結果、及び前記スタックトレース文字列の少なくとも一部を確認可能なデータを受信し、前記実行結果が期待データと合致すること、及び前記スタックトレース文字列に前記認証値が含まれることを検証させるための認証用難読化プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、特定のプログラムにより生成されたデータを受信して正当性を検証する認証システムに関する。
【背景技術】
【0002】
従来、フィッシング対策を行う際に、サーバが意図したプログラムを通信相手の端末が利用していることを検証するために、このプログラムが生成するデータを端末からサーバへ送信させ、サーバがその値を検証し、正しい値を送信してきたか否かをチェックすることがある。この検証により、通信相手が正しいプログラムを実行していれば、このプログラムにおける他の動作、例えば、端末が不正な挙動をしていないことをチェックするといった機能も動作していることを推定することができる。
【0003】
このとき、サーバが端末へ提供するプログラムを、攻撃者による解析から保護するために、様々な難読化技術が提案されている。難読化とは、プログラムの実行結果を変化させること無くプログラムを複雑に変換することで、プログラムの解析コストを増大させる技術である(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2011-018119号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、プログラムの難読化による保護を行った際に、この難読化を解除せずにプログラムを誤動作させる手法が知られており、例えば、プログラムの一部を関数内にコピーして攻撃用の変数スコープ内で実行させる攻撃がある。この攻撃に対しては、プログラム内で利用している変数を発見され難くする等の対策が行われていたが、対策としては十分ではなく、攻撃された場合にこれを発見することはできなかった。
【0006】
本発明は、難読化されたプログラムへの攻撃を検知できる認証装置、認証方法及び認証プログラムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明に係る認証装置は、端末に実行させるための認証用プログラムに含まれる一つ以上の関数の名称を、認証値を含む文字列に設定する認証値設定部と、前記関数により実行されるコードの中で、所定のエラーを発生させ、当該エラー発生時のスタックトレース文字列を取得するように構成するエラー設定部と、前記認証用プログラムを、前記認証値を除いて難読化し、難読化プログラムを生成する難読化処理部と、前記難読化プログラムを前記端末に送信するプログラム送信部と、前記難読化プログラムの実行結果、及び前記スタックトレース文字列の少なくとも一部を確認可能なデータを受信し、前記実行結果が期待データと合致すること、及び前記スタックトレース文字列に前記認証値が含まれることを検証する検証部と、を備える。
【0008】
前記認証装置は、前記難読化プログラムの中で、前記認証値が記述されている位置情報を取得する位置取得部を備え、前記検証部は、前記スタックトレース文字列から前記関数の位置情報を抽出し、前記位置取得部により取得された位置情報と合致することを、さらに検証してもよい。
【0009】
前記位置情報は、前記難読化プログラムにおける行数又は行先頭からの文字数の少なくとも一方であってもよい。
【0010】
前記スタックトレース文字列の少なくとも一部を確認可能なデータは、前記スタックトレース文字列に前記認証値が含まれるか否かを示す値であり、前記エラー設定部は、取得した前記スタックトレース文字列に前記認証値が含まれるか否かを判定し、結果をサーバに返すよう前記認証用プログラムを構成してもよい。
【0011】
本発明に係る認証方法は、サーバが端末を認証する認証システムにおいて、前記サーバが、一つ以上の関数の名称を、認証値を含む文字列に設定し、前記関数により実行されるコードの中で、所定のエラーを発生させ、当該エラー発生時のスタックトレース文字列を取得するように構成した認証用プログラムを、前記認証値を除いて難読化して端末に送信し、前記端末が、受信したプログラムの実行結果、及び前記スタックトレース文字列の少なくとも一部を確認可能なデータを前記サーバに送信し、前記サーバが、受信した前記実行結果が期待データと合致すること、及び前記スタックトレース文字列に前記認証値が含まれることを検証する。
【0012】
本発明に係る認証プログラムは、前記認証装置としてコンピュータを機能させるためのものである。
【0013】
本発明に係る認証用プログラムは、サーバが端末に実行させるためのプログラムであって、前記認証用難読化プログラムに含まれる、一つ以上の関数の名称が認証値を含む文字列に設定され、当該認証値を除いて難読化されており、前記関数により実行されるコードの中で、所定のエラーを発生させ、当該エラー発生時のスタックトレース文字列を取得させることにより、前記サーバにおいて、前記認証用難読化プログラムの実行結果、及び前記スタックトレース文字列の少なくとも一部を確認可能なデータを受信し、前記実行結果が期待データと合致すること、及び前記スタックトレース文字列に前記認証値が含まれることを検証させるためのものである。
【発明の効果】
【0014】
本発明によれば、難読化されたプログラムへの攻撃を検知できる。
【図面の簡単な説明】
【0015】
図1】実施形態の認証システムにおける通信フローを示す図である。
図2】実施形態におけるサーバの機能構成を示す図である。
図3】実施形態におけるエラー発生時に取得されるスタックトレース文字列を例示する図である。
【発明を実施するための形態】
【0016】
以下、本発明の実施形態の一例について説明する。
本実施形態の認証方法では、予め関数名として認証用の値を設定しておき、プログラムを実行した際のエラー時に出力されるスタックトレースをプログラム内で取得させる。認証装置は、このスタックトレースの中に認証用の値が含まれているか否かを確認することで、プログラムが意図しないスコープ内で実行されていないかを検証し、これにより攻撃を発見する。
【0017】
図1は、本実施形態の認証システム1における通信フローを示す図である。
認証システム1は、認証装置としてのサーバ10と端末20とを備える。
【0018】
端末20が特定のプログラムを実行したことをサーバ10が検証するために、サーバ10が端末20に難読化した認証用プログラムを送信して実行させ(ステップS1)、このプログラムの実行結果として生成した値をサーバ10が受け取り、期待データと合致することを確認することで正当性を検証する(ステップS2)。
【0019】
このとき、サーバ10は、端末20から、プログラムが生成した値に加えて、スタックトレースに基づいて生成されたデータを受信し、このデータ中に予め設定しておいた認証用の値が含まれることを確認し、プログラムが正しく実行されたことを検証する。
【0020】
図2は、本実施形態におけるサーバ10の機能構成を示す図である。
サーバ10は、制御部11及び記憶部12の他、各種の入出力インタフェース等を備えた情報処理装置(コンピュータ)である。
【0021】
制御部11は、サーバ10の全体を制御する部分であり、記憶部12に記憶された各種プログラムを適宜読み出して実行することにより、本実施形態における各機能を実現する。制御部11は、CPUであってよい。
【0022】
記憶部12は、ハードウェア群をサーバ10として機能させるための各種プログラム、及び各種データ等の記憶領域であり、ROM、RAM、フラッシュメモリ又はハードディスクドライブ(HDD)等であってよい。
【0023】
制御部11は、認証値設定部111と、エラー設定部112と、難読化処理部113と、プログラム送信部114と、検証部115とを備える。制御部11は、さらに、位置取得部116を備えてもよい。
【0024】
認証値設定部111は、端末20が実行することで期待データを出力させるための認証用プログラムに含まれる一つ以上の関数の名称を、認証値を含む文字列に設定する。
具体的には、認証値設定部111は、認証用プログラムに含まれるいずれかの関数を選択し、ランダムに生成した認証値が例えば「561」の場合、選択した関数の名称を「function auth561()」等とする。あるいは、認証値そのものを関数名としてもよい。
【0025】
エラー設定部112は、認証値設定部111が選択した関数により実行されるコードの中で、所定のエラーを発生させ、このエラー発生時のスタックトレース文字列を取得するように認証用プログラムを構成する。
【0026】
具体的には、エラー設定部112は、選択された関数の内部、又は関数から呼び出されるプログラムの実行コードの中でエラーを故意に発生させる。発生させるエラーは、例えば、null値からの参照、存在しない関数の呼び出し等、実際のエラーでもよいし、「new Error()」のように自ら発生させるものでもよい。
このエラーは、「try{…}catch(e){…}」ブロック、又は変数により直接参照され、エラー発生時のスタックトレース文字列が取得される。
【0027】
難読化処理部113は、認証用プログラムを、認証値設定部111が設定した認証値を除いて難読化し、難読化プログラムを生成する。
例えば、難読化処理部113は、認証値設定部111により選択された関数名を対象外として難読化を行った後、この関数名を、認証値を含む文字列に置換する。
【0028】
プログラム送信部114は、難読化処理部113により生成された難読化プログラムを、端末20に送信して実行させる。
端末20は、受信した難読化プログラムを実行すると、プログラムの指示に従い、エラー発生時のスタックトレース文字列の全体、又はスタックトレース文字列に基づいて生成されたデータ(認証値、又は認証値のハッシュ等、認証値の存在を確認可能な値を含むデータ)をサーバ10に送信する。
【0029】
なお、スタックトレース文字列の少なくとも一部を確認可能なデータ、すなわち、認証値の存在を確認可能な値とは、例えば、スタックトレース文字列に認証値が含まれる場合に1、含まれない場合に0となるフラグ等の値であってよい。
この場合、エラー設定部112は、取得したスタックトレース文字列に認証値が含まれるか否かを判定し、判定結果をサーバに返すよう認証用プログラムを構成する。
【0030】
検証部115は、端末20から難読化プログラムの実行結果、及びスタックトレース文字列の少なくとも一部を確認可能なデータを受信し、実行結果が期待データと合致すること、及びスタックトレース文字列に認証値が含まれることを検証する。
【0031】
図3は、本実施形態におけるエラー発生時に取得されるスタックトレース文字列を例示する図である。
ここで、認証値は、「cl38fe24ny」であり、スタックトレースの階層の中に、関数名として認証値が存在している。
これにより、サーバ10が生成した認証用プログラム(kick.js)が指定された順序で、すなわち、load.jsの関数HTMLScriptElement.d.onloadから呼び出されて実行されていることを検証できる。
【0032】
位置取得部116は、難読化プログラムの中で、認証値が記述されている位置情報を取得する。
この位置情報は、例えば、難読化プログラムにおける先頭からの行数、又は行の先頭からの文字数の少なくとも一方である。
【0033】
サーバ10が位置取得部116を備える場合、検証部115は、スタックトレース文字列から、認証値を含む関数の位置情報を抽出し、位置取得部116により取得された位置情報と合致することを、さらに検証する。
具体的には、例えば図3のスタックトレース文字列からは、関数「cl38fe24ny」がプログラムkick.jsの33行目、7273文字目で呼び出されたことを抽出できる。したがって、難読化プログラムの中で該当の関数を呼び出している位置を予め記憶しておき、照合することにより、認証値が指定の階層に存在することを検証できる。
【0034】
本実施形態によれば、認証システム1は、端末20で故意に発生させたエラー時のスタックトレース文字列の中に、予め設定した認証値としての関数名が含まれることを確認することにより、この関数が指定した経路で正しく呼び出されたことを高い確率で検証できる。これにより、認証システム1は、難読化されたプログラムへの攻撃を検知できる。
この結果、端末20で実行された難読化プログラムが出力した値の確らしさを向上させることができる。
【0035】
さらに、認証システム1は、認証値の存在のみでなく、位置情報を用いて、この認証値が指定の階層にあることを確認することにより、単に認証値を含む関数から呼び出されたことだけでなく、他に意図しないスコープが含まれていないことを確認できるため、さらに厳密に検証を行うことができる。
【0036】
なお、例えば、複数の認証用プログラムが多段に実行される構成であれば、後段のスコープ内の変数を改変することは困難であることから、この後段のスコープで使用される関数名を認証値とすることで、スタックトレース文字列内にその存在を確認することで、正しく認証用プログラムが実行されたことを検証できる。
また、例えば、認証用プログラムの一部をコピーして利用された場合には、認証値である呼び出し元の関数名が存在しなくなることから、やはり、スタックトレース文字列内に認証値の存在を確認することで、正しく認証用プログラムが実行されたことを検証できる。
【0037】
さらに、認証システム1は、認証値そのものではなく、認証値を確認できるデータ、特に、存在の有無を示す値を端末20からサーバ10に送信することで、検証内容を秘匿できる。また、たとえ、スタックトレース文字列そのものが送信されたとしても、これは通常のエラーログであるため、ここから認証手順を判別することは難しい。したがって、フィッシング攻撃を抑制することができる。
【0038】
なお、本実施形態によれば、例えば、端末の認証強度を向上でき、フィッシングを受けにくいサイト構築が可能となることから、国連が主導する持続可能な開発目標(SDGs)の目標9「レジリエントなインフラを整備し、持続可能な産業化を推進すると共に、イノベーションの拡大を図る」に貢献することが可能となる。
【0039】
以上、本発明の実施形態について説明したが、本発明は前述した実施形態に限るものではない。また、前述した実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、実施形態に記載されたものに限定されるものではない。
【0040】
サーバ10(認証装置)による認証方法は、ソフトウェアにより実現される。ソフトウェアによって実現される場合には、このソフトウェアを構成するプログラムが、情報処理装置(コンピュータ)にインストールされる。また、これらのプログラムは、CD-ROMのようなリムーバブルメディアに記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。さらに、これらのプログラムは、ダウンロードされることなくネットワークを介したWebサービスとしてユーザのコンピュータに提供されてもよい。
【符号の説明】
【0041】
1 認証システム
10 サーバ(認証装置)
11 制御部
12 記憶部
20 端末
111 認証値設定部
112 エラー設定部
113 難読化処理部
114 プログラム送信部
115 検証部
116 位置取得部
図1
図2
図3