(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024175588
(43)【公開日】2024-12-18
(54)【発明の名称】コンピュータプログラム、プログラム保護装置及びプログラム保護方法
(51)【国際特許分類】
G06F 21/56 20130101AFI20241211BHJP
【FI】
G06F21/56 360
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2023093487
(22)【出願日】2023-06-06
(71)【出願人】
【識別番号】398055691
【氏名又は名称】株式会社DNPハイパーテック
(74)【代理人】
【識別番号】100114557
【弁理士】
【氏名又は名称】河野 英仁
(74)【代理人】
【識別番号】100078868
【弁理士】
【氏名又は名称】河野 登夫
(72)【発明者】
【氏名】内海 聖木
(72)【発明者】
【氏名】馬場 隆
(72)【発明者】
【氏名】伊吹 友孝
(72)【発明者】
【氏名】菱川 薫
(57)【要約】
【課題】不正プログラムによるデバッガアタッチを防止することができるコンピュータプログラム、プログラム保護装置及びプログラム保護方法を提供する。
【解決手段】コンピュータプログラムは、保護対象プログラムに第1監視プロセスを起動させ、前記保護対象プログラム又は前記第1監視プロセスに第2監視プロセスを起動させ、前記第2監視プロセスに、前記第1監視プロセスの動作を監視させる、処理をコンピュータに実行させる。
【選択図】
図2
【特許請求の範囲】
【請求項1】
保護対象プログラムに第1監視プロセスを起動させ、
前記保護対象プログラム又は前記第1監視プロセスに第2監視プロセスを起動させ、
前記第2監視プロセスに、前記第1監視プロセスの動作を監視させる、
処理をコンピュータに実行させるコンピュータプログラム。
【請求項2】
前記保護対象プログラムに対して前記第1監視プロセスをアタッチさせる、
処理をコンピュータに実行させる請求項1に記載のコンピュータプログラム。
【請求項3】
前記第2監視プロセスが前記第1監視プロセスの異常を検知した場合、前記第2監視プロセスに前記保護対象プログラムの動作を終了させる、
処理をコンピュータに実行させる請求項1に記載のコンピュータプログラム。
【請求項4】
前記第2監視プロセスに、異なるプロセスIDを有する第2監視プロセスを起動させる、
処理をコンピュータに実行させる請求項1から請求項3までのいずれか一項に記載のコンピュータプログラム。
【請求項5】
新たな第2監視プロセスを起動させた場合、直近の古い第2監視プロセスを終了させる、
処理をコンピュータに実行させる請求項4に記載のコンピュータプログラム。
【請求項6】
制御部を備え、
前記制御部は、
保護対象プログラムに第1監視プロセスを起動させ、
前記保護対象プログラム又は前記第1監視プロセスに第2監視プロセスを起動させ、
前記第2監視プロセスに、前記第1監視プロセスの動作を監視させる、
プログラム保護装置。
【請求項7】
保護対象プログラムに第1監視プロセスを起動させ、
前記保護対象プログラム又は前記第1監視プロセスに第2監視プロセスを起動させ、
前記第2監視プロセスに、前記第1監視プロセスの動作を監視させる、
プログラム保護方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータプログラム、プログラム保護装置及びプログラム保護方法に関する。
【背景技術】
【0002】
悪意を持った攻撃者が不正プログラムをコンピュータに侵入させ、アタッチという行為を行うことで保護対象のプログラムの下で実行中のプロセスのメモリ情報の内容を変更し、あるいはメモリ情報をダンプすることが可能である。このような不正プログラムによって、例えば、メモリ上からデータを抜き取られて海賊版が作成され、あるいは有用な情報が漏洩してしまう。
【0003】
特許文献1には、ルーチンが攻撃者からのデバッガアタッチを検出した場合、保護対象のプログラムの実行を停止することにより、プログラムに対する許可されていないアクセスを阻止する方法が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、攻撃者は、プロセスの停止や終了を行う権限を有するため、デバッガアタッチを検出するプロセスの停止や終了を行うことで、不正プログラムがデバッガアタッチを実行して保護対象のプログラムの下で実行中のプロセスのメモリ情報の内容を変更し、あるいはメモリ情報をダンプすることが可能になる。
【0006】
本発明は、斯かる事情に鑑みてなされたものであり、不正プログラムによるデバッガアタッチを防止することができるコンピュータプログラム、プログラム保護装置及びプログラム保護方法を提供することを目的とする。
【課題を解決するための手段】
【0007】
本願は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、コンピュータプログラムは、保護対象プログラムに第1監視プロセスを起動させ、前記保護対象プログラム又は前記第1監視プロセスに第2監視プロセスを起動させ、前記第2監視プロセスに、前記第1監視プロセスの動作を監視させる、処理をコンピュータに実行させる。
【発明の効果】
【0008】
本発明によれば、不正プログラムによるデバッガアタッチを防止することができる。
【図面の簡単な説明】
【0009】
【
図1】本実施形態のプログラム保護装置の構成の一例を示す図である。
【
図2】プログラム保護装置のソフトウェア構成の一例を示す図である。
【
図3】第1監視プロセスによるアタッチの一例を示す図である。
【
図4】第2監視プロセスの動作の第1例を示す図である。
【
図5】攻撃者による攻撃パターンの第1例を示す図である。
【
図6】攻撃者による攻撃パターンの第2例を示す図である。
【
図7】第2監視プロセスの動作の第2例を示す図である。
【
図8】攻撃者による攻撃パターンの第3例を示す図である。
【
図9】プログラム保護装置による処理手順の一例を示す図である。
【発明を実施するための形態】
【0010】
以下、本発明の実施の形態を説明する。
図1は本実施形態のプログラム保護装置50の構成の一例を示す図である。プログラム保護装置50は、装置全体を制御する制御部51、通信部52、表示部53、操作部54、メモリ55、記憶部56、及び記録媒体読取部57を備える。プログラム保護装置50は、例えば、パーソナルコンピュータ(PC)、ワークステーション(WS)、ゲーム用デバイス、タブレット端末などで構成することができる。
【0011】
制御部51は、CPU(Central Processing Unit)、MPU(Micro-Processing Unit)、GPU(Graphics Processing Unit)等が所要数組み込まれて構成されている。また、制御部51は、DSP(Digital Signal Processors)、FPGA(Field-Programmable Gate Arrays)などを組み合わせて構成してもよい。
【0012】
通信部52は、通信モジュールを備え、外部の装置(不図示)との間の通信機能を有する。
【0013】
表示部53は、液晶ディスプレイ又は有機ELディスプレイなどで構成することができる。なお、表示部53に代えて、外部の表示装置をプログラム保護装置50に接続するようにしてもよい。
【0014】
操作部54は、例えば、キーボード、マウス、タッチパッド又はタッチパネル等で構成され、表示部53に表示される情報に対する操作を受け付けることができる。
【0015】
メモリ55は、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ等の半導体メモリで構成することができる。
【0016】
記憶部56は、例えば、ハードディスク又は半導体メモリ等で構成することができ、コンピュータプログラム(プログラム製品)としてのアプリケーション10、OS(オペレーティングシステム)60、及び所要の情報を記憶することができる。OS60は、例えば、Windows、MacOS、Linux(いずれも登録商標)などを含む。
【0017】
コンピュータプログラム(アプリケーション)10、及びOS60は、メモリ55に展開されて、制御部51により実行される。制御部51は、コンピュータプログラム10で定められた処理(具体的には、後述の保護対象プログラム20、第1監視プロセス30及び第2監視プロセス40それぞれの処理)を実行することができる。ここで、アプリケーション10は、保護対象プログラム20、第1監視プロセス30及び第2監視プロセス40の各実行プログラムを総称するものである。すなわち、制御部51による処理は、保護対象プログラム20、第1監視プロセス30及び第2監視プロセス40による処理でもある。
【0018】
コンピュータプログラム10は、通信部52を介して、外部の装置からダウンロードして記憶部56に格納してもよい。また、記録媒体(例えば、CD-ROM等の光学可読ディスク記憶媒体)571に記録されたコンピュータプログラム10を記録媒体読取部57で読み取って記憶部56に格納してもよい。コンピュータプログラム10は、単一のコンピュータ上で、または1つのサイトにおいて配置されるか、もしくは複数のサイトに亘って分散され、通信ネットワークによって相互接続された複数のコンピュータ上で実行されるように展開することができる。
【0019】
図2はプログラム保護装置50のソフトウェア構成の一例を示す図である。
図2に示すように、プログラム保護装置50内では、OS60の制御の下でアプリケーション10が実行される。アプリケーション10は、保護対象プログラム20、第1監視プロセス、及び第2監視プロセス40の各実行プログラムが組み込まれている。保護対象プログラム20は、アプリ本体部に相当し、自身の起動処理モジュール及びアプリ実行モジュールなどを含む。保護対象プログラム20、第1監視プロセス30、及び第2監視プロセス40の間の処理は、OS60が提供する機能を用いて行われる。
【0020】
アプリケーション10が起動すると、保護対象プログラム20が起動するとともに、保護対象プログラム20は、自身の子プロセスとして第1監視プロセス30を起動する。また、保護対象プログラム20は、自身の子プロセスとして第2監視プロセス40を起動する。なお、第1監視プロセス30が、自身の子プロセスとして第2監視プロセス40を起動してもよい。
【0021】
第1監視プロセス30は、親プロセスである保護対象プログラム20に対しアタッチを実行する。
【0022】
図3は第1監視プロセス30によるアタッチの一例を示す図である。第1監視プロセス30は、保護対象プログラム20にアタッチすることで実行中の保護対象プログラム20の挙動を確認することができる。アタッチは、例えば、ptraceというシステムコールを用いて行うことができる。第1監視プロセス30が、保護対象プログラム20に対してメモリ情報要求を出力すると、保護対象プログラム20は、メモリ情報を第1監視プロセス30へ出力する。保護対象プログラム20と第1監視プロセス30との間の信号(シグナル)のやり取りは、OS60を介して実行される。具体的には、OS60から保護対象プログラム20に発行される制御シグナルはアタッチ後、第1監視プロセス30が受信し、第1監視プロセス30は当該制御シグナルにより保護対象プログラム20への制御シグナルを観測する事ができ、OS60を介して当該シグナルを保護対象プログラム20に再送信する事で、保護対象プログラム20の動作を制御する事ができる。第1監視プロセス30が保護対象プログラム20にアタッチした場合、他のプロセス(不正プログラムを含む)は、保護対象プログラム20にアタッチすることはできない。アタッチすることができるプロセスは1個に限定されているからである。
【0023】
保護対象プログラム20は、第1監視プロセス30を起動し、保護対象プログラム20又は第1監視プロセス30は、第2監視プロセス40を起動する。プロセスの起動は、例えば、forkというシステムコールを用いて行うことができる。第2監視プロセス40は、第1監視プロセス30の動作を監視する。第2監視プロセス40は、保護対象プログラム20の動作を監視してもよい。第1監視プロセス30や保護対象プログラム20の動作の監視は、第2監視プロセス40自身の機能、あるいはOS60が備える機能を用いることができる。
【0024】
図4は第2監視プロセス40の動作の第1例を示す図である。第1監視プロセス30は、保護対象プログラム20にアタッチすることで実行中の保護対象プログラム20の挙動を確認することができる。第2監視プロセス40は、第1監視プロセス30の動作を監視する。なお、第2監視プロセス40は、保護対象プログラム20の動作を監視してもよい。第2監視プロセス40が実施する監視は、例えば、OS60のプロセス管理用のファイルを解析して、当該プロセスの動作状態、アタッチ状態を観測することで行うことができる。
【0025】
図5は攻撃者による攻撃パターンの第1例を示す図である。第1監視プロセス30は、実行中の保護対象プログラム20にアタッチ中である。この場合、攻撃者が、実行中の保護対象プログラム20に対してアタッチを実行しようとしても、保護対象プログラム20は既に他のプロセス(第1監視プロセス30)によってアタッチされているため、攻撃者は保護対象プログラムにアタッチすることはできない。これにより、保護対象プログラムを不正なアクセスから保護することができ、メモリ上からデータが不正に抜き取られることを防止できる。
【0026】
図6は攻撃者による攻撃パターンの第2例を示す図である。
図6Aに示すように、保護対象プログラム20は、第1監視プロセス30にアタッチされ、攻撃者は保護対象プログラム20にアタッチすることができない。そこで、攻撃者は、保護対象プログラム20にアタッチしている第1監視プロセスを終了させようとする。しかし、第2監視プロセス40は、第1監視プロセス30の動作を監視しているので、第1監視プロセス30の終了を検知することができる。
図6Bに示すように、第1監視プロセス30の終了を検知した第2監視プロセス40は、保護対象プログラム20の動作を終了させる。
【0027】
上述のように、制御部51は、第2監視プロセス40が第1監視プロセス30の異常(例えば、不正な一時停止や終了)を検知した場合、第2監視プロセス40に保護対象プログラム20の動作を終了させる。また、制御部51は、第2監視プロセス40が保護対象プログラム20の異常(例えば、不正な一時停止や終了)を検知した場合、第2監視プロセス40に保護対象プログラム20の動作を終了させてもよい。
【0028】
これにより、第2監視プロセス40は、第1監視プロセス30及び保護対象プログラム20に対する攻撃を検知することができ、結果として、保護対象プログラム20を不正なアクセスから保護することができる。また、攻撃者が保護対象プログラム20にアタッチしようとしても、保護対象プログラム20は終了しているので、攻撃者は保護対象プログラム20にアタッチすることができず(
図6B参照)、保護対象プログラム20を不正なアクセスから保護することができ、メモリ上からデータが不正に抜き取られることを防止できる。
【0029】
図7は第2監視プロセス40の動作の第2例を示す図である。第2監視プロセス40は、定期または不定期に自身と同じ動作を実行する別プロセス(新たなプロセス)を生成するとともに、現在のプロセスを終了する。これにより、第2監視プロセス40は、自身が一時停止や終了などの攻撃対象として特定されることを防止できる。
【0030】
図7の例では、第2監視プロセス40(プロセスID=01)が動作を実行中に、自身と同じ動作をする新たなプロセスである第2監視プロセス40(プロセスID=10)を生成し、現在実行中の第2監視プロセス40(プロセスID=01)を終了する。
【0031】
次に、第2監視プロセス40(プロセスID=10)が動作を実行中に、自身と同じ動作をする新たなプロセスである第2監視プロセス40(プロセスID=22)を生成し、現在実行中の第2監視プロセス40(プロセスID=10)を終了する。
【0032】
同様に、第2監視プロセス40(プロセスID=22)が動作を実行中に、自身と同じ動作をする新たなプロセスである第2監視プロセス40を生成し、現在実行中の第2監視プロセス40(プロセスID=22)を終了する。以降、同様の処理を繰り返す。なお、プロセスIDの例は、プロセスIDが異なることを便宜上示すためのものでID自体は数字に限定されない。
【0033】
上述のように、制御部51は、第2監視プロセス40に、異なるプロセスIDを有する第2監視プロセス40を起動させる。また、制御部51は、新たな第2監視プロセス40を起動させた場合、直近の古い第2監視プロセス40を終了させる。
【0034】
図8A及び
図8Bは攻撃者による攻撃パターンの第3例を示す図である。第1監視プロセス30は、保護対象プログラム20にアタッチ中であるとする。第2監視プロセス(プロセスID=01)40は、第1監視プロセス30の動作を監視している。攻撃者は、第2監視プロセス(プロセスID=01)40を停止又は終了させるべく、第2監視プロセス40のプロセスIDを特定しようとする。第2監視プロセス(プロセスID=01)40は、自身と同じ動作をする新たな第2監視プロセス(プロセスID=02)40を生成する。
【0035】
新たに生成された第2監視プロセス(プロセスID=02)40は、第1監視プロセス30の動作を監視する。直近の古い第2監視プロセス(プロセスID=01)40は、自身を終了する。前述のようなプロセスの世代交代(新しいプロセスを生成して古いプロセスを終了する)は、攻撃者によるプロセスID特定動作よりも短い(好ましくは十分短い)時間間隔で行うことができる。攻撃者は、既に終了した古い第2監視プロセス40のプロセスID=01のみ特定できるので、新しく生成された第2監視プロセス(プロセスID=02)を停止又は終了させるような介入をすることができない。
【0036】
上述のように、本実施形態によれば、攻撃者は、動作中の第2監視プロセス40のプロセスを特定する情報(プロセスID)を知ることができないので、第2監視プロセス40の停止や終了などの攻撃を困難にする。
【0037】
図9はプログラム保護装置50による処理手順の一例を示す図である。
図9の処理の主体は、保護対象プログラム20、第1監視プロセス30及び第2監視プロセス40であるが、これらの主体を纏めて制御部51としてもよい。保護対象プログラム20が起動し(S11)、保護対象プログラム20は、自身の子プロセスとして第1監視プロセス30を起動する(S12)。第1監視プロセス30が保護対象プログラム20にアタッチする(S13)。アタッチを実行する際には、第1監視プロセス30は、保護対象プログラム20のプロセスIDを取得する。
【0038】
保護対象プログラム20は、自身の子プロセスとして第2監視プロセス40を起動する(S14)。第2監視プロセス40は、第1監視プロセス30のプロセスIDを取得して、第1監視プロセス30の動作を監視する(S15)。なお、第2監視プロセス40に、保護対象プログラム20のプロセスIDを取得させて保護対象プログラム20の動作を監視させてもよい。
【0039】
第2監視プロセス40が第1監視プロセス30の異常(一時停止や終了など)を検知したか否かを判定し(S16)、異常を検知した場合(S16でYES)、保護対象プログラム20を終了させ(S17)、処理を終了する。
【0040】
異常を検知していない場合(S16でNO)、第2監視プロセス40は、第2監視プロセス40のプロセスIDを特定するアクションの有無を判定する(S18)。ここで、第2監視プロセス40のプロセスIDを特定するアクションは、攻撃者によるものとする。プロセスIDを特定するアクションの有無の判定は、第2監視プロセス40自身の機能、あるいはOS60が備える機能を用いることができる。プロセスIDを特定するアクションがある場合(S18でYES)、第2監視プロセス40は、新しいプロセスIDを有する新たな第2監視プロセス40を生成し(S19)、古い第2監視プロセス40を終了し(S20)、後述のステップS21の処理を行う。
【0041】
プロセスIDを特定するアクションがない場合(S18でNO)、第2監視プロセス40は、処理を終了するか否かを判定し(S21)、処理を終了しない場合(S21でNO)、ステップS15以降の処理を続ける。処理を終了する場合(S21でYES)、保護対象プログラム20、第1監視プロセス30及び第2監視プロセス40の処理を終了する。
【0042】
上述のように、本実施形態によれば、保護対象プログラム20及び第1監視プロセス30の動作を監視する新たな第2監視プロセス40を生成し、第2監視プロセス40は、保護対象プログラム20及び第1監視プロセス30の一時停止や終了などの不正な介入を検知した場合、保護対象プログラム20を終了させるので、メモリに対する不正なアクセスによってメモリ上からデータが抜き取られることを防止できる。
【0043】
また、第2監視プロセス40は、自身と同じ動作を実行する別プロセスを生成し、現在実行中のプロセスを終了させるので、第2監視プロセス40自身のプロセスIDが特定されることを防止でき、第2監視プロセス40への攻撃を困難にすることができる。
【0044】
(付記1)コンピュータプログラムは、保護対象プログラムに第1監視プロセスを起動させ、前記保護対象プログラム又は前記第1監視プロセスに第2監視プロセスを起動させ、前記第2監視プロセスに、前記第1監視プロセスの動作を監視させる、処理をコンピュータに実行させる。
【0045】
(付記2)コンピュータプログラムは、付記1において、前記保護対象プログラムに対して前記第1監視プロセスをアタッチさせる、処理をコンピュータに実行させる。
【0046】
(付記3)コンピュータプログラムは、付記1又は付記2において、前記第2監視プロセスが前記第1監視プロセスの異常を検知した場合、前記第2監視プロセスに前記保護対象プログラムの動作を終了させる、処理をコンピュータに実行させる。
【0047】
(付記4)コンピュータプログラムは、付記1から付記3のいずれか一つにおいて、前記第2監視プロセスに、異なるプロセスIDを有する第2監視プロセスを起動させる、処理をコンピュータに実行させる。
【0048】
(付記5)コンピュータプログラムは、付記4において、新たな第2監視プロセスを起動させた場合、直近の古い第2監視プロセスを終了させる、処理をコンピュータに実行させる。
【0049】
(付記6)プログラム保護装置は、制御部を備え、前記制御部は、保護対象プログラムに第1監視プロセスを起動させ、前記保護対象プログラム又は前記第1監視プロセスに第2監視プロセスを起動させ、前記第2監視プロセスに、前記第1監視プロセスの動作を監視させる。
【0050】
(付記7)プログラム保護方法は、保護対象プログラムに第1監視プロセスを起動させ、前記保護対象プログラム又は前記第1監視プロセスに第2監視プロセスを起動させ、前記第2監視プロセスに、前記第1監視プロセスの動作を監視させる。
【0051】
各実施形態に記載した事項は相互に組み合わせることが可能である。また、特許請求の範囲に記載した独立請求項及び従属請求項は、引用形式に関わらず全てのあらゆる組み合わせにおいて、相互に組み合わせることが可能である。さらに、特許請求の範囲には他の2以上のクレームを引用するクレームを記載する形式(マルチクレーム形式)を用いているが、これに限るものではない。マルチクレームを少なくとも一つ引用するマルチクレーム(マルチマルチクレーム)を記載する形式を用いて記載してもよい。
【符号の説明】
【0052】
10 アプリケーション
20 保護対象プログラム
30 第1監視プロセス
40 第2監視プロセス
50 プログラム保護装置
51 制御部
52 通信部
53 表示部
54 操作部
55 メモリ
56 記憶部
57 記録媒体読取部
571 記録媒体
60 OS