(57)【要約】  本発明のプログラム検証システムは、セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、検証対象のプログラムもしくはその動作元であるセキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証するプログラム検証手段５１と、プログラム検証手段５１による検証の結果に基づいて、プログラムに署名を付与する署名手段５２とを備える。
2019026137.tif 000002
【特許請求の範囲】
【請求項１】
セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、前記検証対象のプログラムもしくはその動作元である前記セキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証するプログラム検証手段と、
前記プログラム検証手段による検証の結果に基づいて、前記プログラムに署名を付与する署名手段とを備えた
ことを特徴とするプログラム検証システム。
【請求項２】
前記プログラム検証手段は、
セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうかを検証するプログラム実行機能検証手段と、
前記検証対象のプログラムまたはその動作元である前記セキュア環境の保護機構に、プログラム実行中の外部からの不正なデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証する外部入力攻撃防御機能検証手段とを含み、
前記署名手段は、前記プログラム実行機能検証手段による検証結果と、前記外部入力攻撃防御機能検証手段による検証結果に基づき、いずれの検証結果も検証ＯＫであった場合に、署名を付与する
請求項１に記載のプログラム検証システム。
【請求項３】
前記プログラム実行機能検証手段は、前記検証対象のプログラムに、機械に新たなプログラムを実行させるシステムコールが含まれていないことを確認する
請求項２に記載のプログラム検証システム。
【請求項４】
前記外部入力攻撃防御機能検証手段は、前記検証対象のプログラムにスタック保護機能が含まれていること、または、前記検証対象のプログラムもしくはその動作元である前記セキュア環境の保護機構に、プログラムの動作中に書き換えが許可されている領域である動的領域内でのコードの実行を防止する機能である外部コード実行防止機能が含まれていることを確認する
請求項２に記載のプログラム検証システム。
【請求項５】
前記外部入力攻撃防御機能検証手段は、前記スタック保護機能または前記外部コード実行防止機能が含まれている場合に、検証ＯＫとする
請求項４に記載のプログラム検証システム。
【請求項６】
前記スタック保護機能は、スタックへの外部入力に対する事後的な保護を含む
請求項４または請求項５に記載のプログラム検証システム。
【請求項７】
前記プログラム検証手段は、少なくとも実行前のコード、ユースケースおよび／または運用方法に対する所定の検証によって安全性が確認されたプログラムを対象に前記検証を行う
請求項１から請求項６のうちのいずれかに記載のプログラム検証システム。
【請求項８】
検証対象のプログラムのソースコードを入力するソース入力手段と、
前記ソースコードに対して、外部入力攻撃防御機能を付与する外部入力攻撃機能付与手段と、
前記ソースコードを、機械語である実行コードに変換するビルド手段とを備え、
前記プログラム検証手段は、前記ソースコードに対して検証を行い、
前記外部入力攻撃機能付与手段は、前記プログラム検証手段による検証の結果、前記ソースコードに外部入力攻撃機能が含まれていなかった場合に、外部入力攻撃機能を付与し、
前記署名手段は、前記プログラム検証手段による検証の結果に基づいて、前記ビルド手段によるビルド後の実行コードに署名を付与する
請求項１から請求項７のうちのいずれかに記載のプログラム検証システム。
【請求項９】
情報処理装置が、
セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、前記検証対象のプログラムもしくはその動作元である前記セキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証し、
前記検証の結果に基づいて、前記プログラムに署名を付与する
ことを特徴とするプログラム検証方法。
【請求項１０】
コンピュータに、
セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、前記検証対象のプログラムもしくはその動作元である前記セキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証する処理、および
前記検証の結果に基づいて、前記プログラムに署名を付与する処理
を実行させるためのプログラム検証プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セキュア環境下での悪意あるプログラムからの攻撃を防止するためのプログラム検証システム、プログラム検証方法およびプログラム検証プログラムに関する。
【背景技術】
【０００２】
近年、ＩｏＴのセキュリティ解決策として、ＴＥＥ（Trusted Execution Environment）技術と呼ばれるような、ハードウェアやソフトウェアを用いてアプリケーションの安全な実行環境を実現するための技術が注目されている。【０００３】
ＴＥＥの一例として、プログラム等の実行環境を、通常の実行環境（以下、非セキュア環境という）と、所定の安全策がとられた実行環境（以下、セキュア環境という）とに分離して、セキュア環境に置かれるプログラム（以下、セキュアプログラムという）を規制したり、非セキュア環境からセキュア環境へのアクセスを禁止することなどが行われている（例えば、特許文献１）。このような制限を課すことで、外部の攻撃からセキュア環境下に置かれた秘密情報やプログラムを保護する。【０００４】
また、例えば、特許文献２には、スクリプトプログラムに対して、予め所定の安全ポリシーに基づいてコードの安全性を判定し、安全でない場合にコードを拒否することや、そのスクリプトプログラムが実行された際に安全ポリシーの違反が生じた場合に実行を防止することが記載されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−０８９６５２号公報
【特許文献２】特開２００９−５２１７３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
図１４は、安全な実行環境の概念図である。図１４に示すように、多くのＴＥＥでは、非セキュア環境とセキュア環境とに分離し、提供元等において安全が保障されたセキュアプログラムのみをセキュア環境に配置した上で、非セキュア環境からセキュア環境へのアクセスを禁止することにより、安全な実行環境を構築する。仮に非セキュア環境に悪意あるプロセス（マルウェア等）が配置されても、セキュア環境下のプロセスやデータはそこからの攻撃を受けないため、正常動作を維持できる。【０００７】
このように、多くのセキュアプログラムの安全性は、技術面での静的な検証と法的な保障とで賄っている。しかし、契約やｏｎ−ｂｏａｒｄｉｎｇといった法的な抑止力は、悪意を持った人間には通用しない可能性が高い。【０００８】
図１５に示すように、一度、悪意のあるプログラムがセキュア環境に配置されてしまうと、以降、外部から悪意を検知したり、該プログラムを排除することは困難である。上述したＴＥＥのように、セキュア環境の保護機構により、外部からの干渉を受け難くいからである。このため、検証時には悪意が見受けられないが、運用時に悪意が顕在化したセキュアプログラムが配置されてしまった場合、一方的に攻撃されるおそれがある。したがって、このような検証時に顕在化していなくてもセキュア環境下で悪意を持ち得るセキュアプログラムをセキュア環境下で動作させない（配置させないまたは実行許可を与えない）ことが重要である。【０００９】
検証時に未顕在の悪意の例としては、Ｄｒｉｖｅ  ｂｙ  ｄｏｗｎｌｏａｄ攻撃が挙げられる。図１６に示すように、配置前の検証時には悪意が見受けられないが、運用過程で外部からのデータ入力等により悪意のあるセキュアプログラムに変異して、攻撃を与えることが考えられる。図１６に示す例は、検証時には、端末とサーバ間で通信を行い、サーバから得た機密情報を端末内に安全に保持するプログラムであるように見受けられたが、運用時に、悪意のあるプログラムに変異する例である。本例では、事前に検証をクリアしたプログラムが、運用時に、所定のサーバから機密情報としてマルウェアの実行データの一部をダウンロードし、セキュアプログラムやセキュア環境の保護機構の脆弱性を利用して該実行データをセキュアプログラムに取り込ませる（該実行データに制御を渡させる）などして、マルウェアに変異する。【００１０】
また、図１７に示すように、配置前の検証時には悪意が見受けられないが、運用過程で外部からのデータ入力等により悪意のあるセキュアプログラムを新たに起動して、攻撃を与えることが考えられる。図１７に示す例は、検証時には、端末とサーバ間で通信を行い、サーバから得た機密情報を端末内に安全に保持するプログラムであるように見受けられたが、運用時に、悪意のあるプログラムをダウンロードして起動する例である。本例は、事前に検証をクリアしたプログラムが、運用時に、所定のサーバから機密情報としてマルウェアの実行データをダウンロードしてファイル化しておき、セキュアプログラムやセキュア環境の保護機構の脆弱性を利用してあたかも正当な実行ファイルとして該実行データを起動させる。【００１１】
法的な抑止力では、このような故意に未顕在の悪意を含むプログラムを配置もしくは実行させようとする、悪意ある攻撃者の行動を物理的に制限できないため、より強固な技術的な抑止力が求められる。しかし、外部入力により動的に悪意の有無が変化するようなセキュアプログラムに対して、特許文献１や特許文献２に記載の方法で悪意の検知または攻撃の防御をすることは困難である。【００１２】
本発明は、上記課題に鑑み、セキュア環境下で顕在化する悪意による攻撃を防止できるプログラム検証システム、プログラム検証方法およびプログラム検証プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明によるプログラム検証システムは、セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、検証対象のプログラムもしくはその動作元であるセキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証するプログラム検証手段と、プログラム検証手段による検証の結果に基づいて、プログラムに署名を付与する署名手段とを備えたことを特徴とする。【００１４】
また、本発明によるプログラム検証方法は、情報処理装置が、セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、検証対象のプログラムもしくはその動作元であるセキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証し、検証の結果に基づいて、プログラムに署名を付与することを特徴とする。【００１５】
また、プログラム検証プログラムは、コンピュータに、セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、検証対象のプログラムもしくはその動作元であるセキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証する処理、および検証の結果に基づいて、プログラムに署名を付与する処理を実行させることを特徴とする。
【発明の効果】
【００１６】
本発明によれば、セキュア環境下で顕在化する悪意による攻撃を防止できる。
【図面の簡単な説明】
【００１７】
【図１】第１の実施形態のプログラム検証システム１０の構成例を示すブロック図である。
【図２】第１の実施形態のプログラム検証システム１０の動作の一例を示すフローチャートである。
【図３】第２の実施形態のプログラム検証システム１０の構成例を示すブロック図である。
【図４】外部入力攻撃防御機能検証部１３の構成例を示すブロック図である。
【図５】第２の実施形態のプログラム検証システム１０の動作の一例を示すフローチャートである。
【図６】第３の実施形態のプログラム検証システム１０の構成例を示すブロック図である。
【図７】第３の実施形態のプログラム検証システム１０の動作の一例を示すフローチャートである。
【図８】プログラム検証システム１０のプログラム実行端末への適用例を示すブロック図である。
【図９】プログラム検証システム１０の他の構成例を示すブロック図である。
【図１０】図９に示すプログラム検証システム１０の動作の一例を示すフローチャートである。
【図１１】本発明の各実施形態にかかるコンピュータの構成例を示す概略ブロック図である。
【図１２】本発明のプログラム検証システム５０の概要を示すブロック図である。
【図１３】本発明のプログラム検証システム５０の他の構成例を示すブロック図である。
【図１４】安全な実行環境の概念図である。
【図１５】安全でない実行環境（セキュアプログラムに悪意があった場合）の概念図である。
【図１６】検証時に未顕在の悪意が運用時に顕在化する例を示す説明図である。
【図１７】検証時に未顕在の悪意が運用時に顕在化する例を示す説明図である。
【発明を実施するための形態】
【００１８】
実施形態１．
以下、本発明の実施形態を図面を参照して説明する。図１は、第１の実施形態のプログラム検証システム１０の構成例を示すブロック図である。図１に示すプログラム検証システム１０は、悪意検証部１１と、プログラム実行機能検証部１２と、署名部２とを備える。
【００１９】
悪意検証部１１は、検証対象のプログラムに悪意が含まれていないことを検証する。プログラムは、機械に対する命令を記述したもの（データ）である。一般に、そのうち機械が読める形式のものは実行コードと呼ばれ、人間が読める形式のものがソースコードと呼ばれる。また、「悪意」は、表示や予めされた説明とは異なる動作をしたり、機械に対して該動作をする命令を出すなどして、故意に攻撃や不正なアクセスや情報流出などを行うコード、ユースケース、運用方法などである。
【００２０】
例えば、悪意検証部１１は、既知の方法を用いて悪意の有無を判定することが可能である。具体的には、悪意検証部１１は、検証対象のプログラムとして実行コード（の集合）を入力し、該実行コードに対して既存のウィルスチェックを行ってもよい。この場合、悪意検証部１１は、ウィルスが検出された場合には、検証ＮＧ（悪意あり）と判定し、それ以外の場合に、検証ＯＫ（悪意なし）と判定してもよい。
【００２１】
また、悪意検証部１１は、例えば、検証対象のプログラムに対して、ユーザがその配布元からユースケースや運用方法についての説明を受けたか否かおよびそのときの確認結果を入力させ、その入力に基づき悪意の有無を判定してもよい。この場合、悪意検証部１１は、ユーザがユースケースや運用方法についての説明を受けていない場合や、その結果安全性が確認されなかった場合には、検証ＮＧ（悪意あり）と判定し、それ以外の場合に、検証ＯＫ（悪意なし）と判定してもよい。
【００２２】
また、悪意検証部１１は、例えば、検証対象のプログラムに対して、技術窓口（開発者等）とのｏｎ−ｂｏａｒｄｉｎｇを実施したか否かおよびそのときの確認結果を入力させ、その入力に基づき悪意の有無を判定してもよい。この場合、悪意検証部１１は、ｏｎ−ｂｏａｒｄｉｎｇを実施していない場合や、その結果安全性が確認されなかった場合には、検証ＮＧ（悪意あり）と判定し、それ以外の場合に、検証ＯＫ（悪意なし）と判定してもよい。
【００２３】
なお、悪意検証部１１は、上記の検証方法を複数組み合わせて実施することも可能である。その場合、悪意検証部１１は、１つでも検証ＮＧであれば、検証ＮＧ（悪意あり）とし、全て検証ＯＫであれば検証ＯＫ（悪意なし）とする。
【００２４】
プログラム実行機能検証部１２は、検証対象のプログラムに、プログラム実行機能が含まれていないことを検証する。ここで、プログラム実行機能は、当該プログラム内で、他のプログラムまたは自身を起動するなどして、当該プログラム内の命令により、同じ環境下（すなわちセキュア環境下）に新たなプログラムを実行させる機能（コード）である。そのようなプログラム実行機能の例としては、Ｃ言語のｅｘｅｃ系システムコールなどが挙られる。
【００２５】
セキュア環境下で、セキュアプログラムによって派生的に新たなプログラムが実行できるとなると、セキュアプログラム自体には悪意が含まれない場合にも、該セキュアプログラムが生成した実行ファイル等からマルウェアを起動して攻撃をすることが可能になる。本実施形態では、このような外部（セキュア領域以外の領域）からのデータ入力等を利用して、後に（運用時に）悪意あるプログラムが実行される可能性があるコードの有無を確認する。そして、そのようなコードがあった場合には、悪意を持つ可能性があるとして検証ＮＧ（プログラム実行機能あり）と判定し、それ以外の場合に、検証ＯＫ（プログラム実行機能なし）と判定する。
【００２６】
プログラム実行機能の有無の確認方法の例としては、逆アセンブルによる解析が挙げられる。プログラム実行機能検証部１２は、例えば、検証対象のプログラムの実行コードを逆アセンブルして、システムコール実行時に、実行先の情報が格納される所定のレジスタ（例えば、システムコール番号が格納されるＡＸレジスタ等）を確認し、禁止されているシステムコールが呼ばれていないかを確認してもよい。
【００２７】
署名部２は、悪意検証部１１による検証結果と、プログラム実行機能検証部１２による検証結果とに基づいて、署名を行う。署名部２は、いずれの検証結果も検証ＯＫであった場合に、検証対象のプログラムに対して署名を行う。
【００２８】
次に、本実施形態の動作を説明する。図２は、本実施形態のプログラム検証システム１０の動作の一例を示すフローチャートである。図２に示す例では、まず、図示しない入力部が、検証対象のプログラム（実行コード等）を入力する（ステップＳ１０１）。
【００２９】
次いで、悪意検証部１１が、入力された検証対象のプログラムに対して、悪意の検証を行う（ステップＳ１０２）。悪意の検証の結果、悪意ありと判定された場合（ステップＳ１０３のＹｅｓ）、ステップＳ１０４に移行し。そうでなければ（ステップＳ１０３のＮｏ）、ステップＳ１０５に移行する。
【００３０】
ステップＳ１０４では、検証結果を検証ＮＧすなわち署名ＮＧとして、ステップＳ１０９に移行する。
【００３１】
ステップＳ１０５では、プログラム実行機能検証部１２が、入力された検証対象のプログラムに対して、プログラム実行機能の検証を行う。プログラム実行機能の検証の結果、プログラム実行機能ありと判定された場合（ステップＳ１０６のＹｅｓ）、ステップＳ１０４に移行し、そうでなければ（ステップＳ１０６のＮｏ）、ステップＳ１０７に移行する。
【００３２】
ステップＳ１０７では、最終的に検証ＯＫすなわち署名ＯＫとして、ステップＳ１０８に移行する。
【００３３】
ステップＳ１０８では、署名部２が、署名ＯＫと判定されたプログラムに署名を付与する。
【００３４】
最後に、図示しない出力部が、検証結果（検証ＯＫ／ＮＧ）を出力する（ステップＳ１０９）。ここで、該出力部は、検証結果とともに、検証対象とされたプログラム（検証ＯＫの場合は、署名付きプログラム）や、検証ＮＧであった場合にはその詳細（どの部分がどの検証方法によりＮＧとなったか等）を出力してもよい。
【００３５】
なお、本実施形態の署名は、セキュア環境への配置の可否およびセキュア環境下での実行の可否を判定するために使用される。ユーザもしくはセキュア環境の保護機構は、例えば、署名部２による署名がある実行コードのみをセキュア環境に配置する、またセキュア環境下での実行を許可する。
【００３６】
なお、上記の例では、悪意の検証（ステップＳ１０２）の後に、プログラム実行機能の検証ステップＳ１０５）を行う例を示したが、これらの検証は順不同である。すなわち、プログラム実行機能の検証を先に行ったり、両者を並列に行うことも可能である。
【００３７】
以上のように、本実施形態によれば、検証対象のプログラム自体に含まれる（顕在化している）悪意の有無だけでなく、顕在化しない悪意の１つとなりうるプログラム実行機能の有無を判定し、両方の点で安全性が確認された場合にのみ署名を行う。セキュア環境への配置の可否およびセキュア環境下での実行の可否を判定する際に、当該署名を利用することにより、顕在化している悪意を含むプログラムだけでなく、プログラム自体には悪意が見られないが、外部からのデータ入力等を利用して後に悪意あるプログラムを実行される可能性があるコードを含むプログラムがセキュア環境に置かれたり、セキュア環境で実行されることを事前に防ぐことができる。したがって、セキュア環境下で顕在化する悪意による攻撃を防止できる。
【００３８】
なお、プログラム検証システム１０は、一般的な手法に基づき悪意なしと判定されたプログラムを、本実施形態の検証対象のプログラムとすることも可能である。その場合、悪意検証部１１は省略可能である。そのような場合、署名部２は、悪意検証部１１の検証結果の判定に代えて、一般的な手法に基づき悪意なしと判定されたプログラムに付与される第三機関等による所定の署名の有無を判定すればよい。他の実施形態においても同様である。
【００３９】
実施形態２．
次に、本発明の第２の実施形態を説明する。図３は、第２の実施形態のプログラム検証システム１０の構成例を示すブロック図である。図３に示すプログラム検証システム１０は、悪意検証部１１と、外部入力攻撃防御機能検証部１３と、署名部２とを備える。
【００４０】
悪意検証部１１は、第１の実施形態と同様である。
【００４１】
外部入力攻撃防御機能検証部１３は、セキュア環境の保護機構や検証対象のプログラムに、脆弱性緩和技術として、外部入力攻撃防御機能が有効に存在していることを検証する。ここで、外部入力攻撃防御機能は、プログラム実行中の外部からのデータ入力（特に、不正なデータ入力）に起因する攻撃（悪意あるコードの実行、領域破壊等）を防御する機能である。外部入力攻撃防御機能の例としては、スタック保護機能や、外部コード実行防止機能が挙げられる。
【００４２】
スタック保護機能は、外部からの入力に対してスタックを保護する機能である。ここで、スタックは、次に実行するコードに影響するデータ（ジャンプ先）を保持する領域である。なお、スタック保護機能は、事前の保護（スタックの外部入力による書き換え禁止等）であっても事後の保護（外部入力によってスタックが破壊された場合にプログラムを停止させる等）であってもよい。
【００４３】
外部入力攻撃防御機能検証部１３は、例えば、不正なコードや予期せぬアドレスへのジャンプ（制御の明け渡し）を防止するために、検証対象のプログラムにスタック保護機能が含まれているか否かを判定する。この場合、外部入力攻撃防御機能検証部１３は、スタック保護機能が含まれていない場合に、検証ＮＧ（外部入力攻撃防御機能、特にスタック保護機能なし）と判定し、それ以外の場合に、検証ＯＫ（外部入力攻撃防御機能、特にスタック保護機能あり）と判定してもよい。
【００４４】
具体的に、外部入力攻撃防御機能検証部１３は、検証対象のプログラムとして実行コード（の集合）を入力し、該実行コードに対して、カナリアなどの所定のスタック保護機能が実装されているか否かを確認してもよい。また、外部入力攻撃防御機能検証部１３は、検証対象のプログラムに、スタック保護機能として、スタックの破壊を検知した際のハンドリング関数（例えば、＿＿Ｓｔａｃｋ＿ｃｈｋ＿ｆａｉｌ関数（）など）が含まれているか否かを確認してもよい。
【００４５】
また、外部コード実行防止機能は、スタックやヒープ領域等の、プログラムの動作中に書き換えが許可されている領域（以下、動的領域という）内でのコードの実行を防止する機能である。ここで、動的領域に対する書き換えは、直接的であるか間接的であるかは問わない。すなわち、プログラム（より具体的にはプログラムに従って動作する情報処理装置）が直接その領域を指定して書き換えることができる領域だけでなく、外部からの入力に基づいてプログラムが間接的に書き換えることができる領域も、動的領域に含まれる。
【００４６】
外部入力攻撃防御機能検証部１３は、例えば、外部から入力された不正なコードが実行されないように、検証対象のプログラムまたはセキュア環境の保護機構に対して、外部コード実行防止機能が含まれているか否かを判定する。この場合、外部入力攻撃防御機能検証部１３は、検証対象のプログラムまたはセキュア環境の保護機構に外部コード実行防止機能が含まれていない場合に、検証ＮＧ（外部入力攻撃防御機能、特に外部コード実行防止機能なし）と判定し、それ以外の場合に、検証ＯＫ（外部入力攻撃防御機能、特に外部コード実行防止機能あり）と判定してもよい。
【００４７】
具体的に、外部入力攻撃防御機能検証部１３は、検証対象のプログラムがＥＬＦ形式のバイナリである場合、プログラムヘッダのフラグ等を参照し、動的領域として宣言された領域に実行許可がないことを確認してもよい。また、外部入力攻撃防御機能検証部１３は、セキュア環境の保護機構に、ＮＸ  ｂｉｔ（Ｎｏ  ｅｘｅｃｕｔｅ  ｂｉｔ），ＤＥＰ（Ｄａｔａ  Ｅｘｅｃｕｔｉｏｎ  Ｐｒｅｖｅｎｔｉｏｎ），Ｅｘｅｃ−ｓｈｉｅｌｄなどの動的領域を保護または動的領域でのデータ実行を防止する技術が適用されていることを確認してもよい。
【００４８】
以下は、Ｌｉｎｕｘ（登録商標）で動作するセキュア環境の保護機構に対する確認の具体例である。
・起動ログに、“NX (Ececute Disable) protection:qctive”と記載されていることを確認する。
・“/proc/sys/kernerl/exec-shield”ファイルを参照して、“有効”となっていることを確認する。
【００４９】
なお、セキュア環境の保護機構に対する確認は、該保護機構が稼働しているコンピュータ上で実施されることが好ましい。例えば、プログラム検証システム１０は、検証対象のプログラムが配置されるセキュア環境を備えた端末（以下、プログラム実行端末という）上で動作するシステムであってもよい。その場合において、プログラム検証システム１０の外部入力攻撃防御機能検証部１３は、検証対象のプログラムがセキュア環境に配置される前またはセキュア環境に配置された後実行される前に、外部入力攻撃防御機能の検証を行う。なお、セキュア環境の保護機構に対する確認は、例えば、プログラム実行端末以外のコンピュータが、プログラム実行端末に接続して遠隔操作により行ったり、ユーザに、該保護機構が稼働しているコンピュータ上での実施結果を入力させ、それに基づいて行うことも可能である。
【００５０】
また、外部入力攻撃防御機能検証部１３は、上記の検証方法を複数組み合わせて実施することも可能である。その場合、外部入力攻撃防御機能検証部１３は、例えば、少なくとも１つのスタック保護機能と、少なくとも１つの外部コード実行防止機能とが含まれている場合に、検証ＯＫ（外部入力攻撃防御機能あり）とし、そうでなければ検証ＮＧ（外部入力攻撃防御機能なし）としてもよい。また、外部入力攻撃防御機能検証部１３は、例えば、スタック保護機能と外部コード実行防止機能のうち少なくとも１つが含まれていれば、検証ＯＫとし、そうでなければ検証ＮＧとしてもよい。また、例えば、検証方法の組み合わせに対して検証ＯＫとする条件を予め設定しておき、外部入力攻撃防御機能検証部１３は、実施する検証の組み合わせに応じた該条件に基づいて、最終的な検証ＯＫ／検証ＮＧを判定してもよい。
【００５１】
図４は、外部入力攻撃防御機能検証部１３の構成例を示すブロック図である。図４に示すように、外部入力攻撃防御機能検証部１３は、スタック保護機能検証部１３１と、外部コード実行防止機能検証部１３２とを含んでいてもよい。
【００５２】
スタック保護機能検証部１３１は、上述したスタック保護機能の検証を行う。外部コード実行防止機能検証部１３２は、上述した外部コード実行防止機能の検証を行う。
【００５３】
署名部２は、悪意検証部１１による検証結果と、外部入力攻撃防御機能検証部１３による検証結果とに基づいて、署名を行う。署名部２は、いずれの検証結果も検証ＯＫであった場合に、検証対象のプログラムに対して署名を行う。
【００５４】
次に、本実施形態の動作を説明する。図５は、本実施形態のプログラム検証システム１０の動作の一例を示すフローチャートである。なお、本例のステップＳ１０１〜ステップＳ１０４、ステップＳ１０９は、第１の実施形態と同じである。
【００５５】
図５に示す例では、まず図示しない入力部が、検証対象のプログラム（実行コード等）を入力すると（ステップＳ１０１）、悪意検証部１１が、入力された検証対象のプログラムに対して、悪意の検証を行う（ステップＳ１０２）。悪意の検証の結果、悪意ありと判定された場合（ステップＳ１０３のＹｅｓ）、ステップＳ１０４に移行し。そうでなければ（ステップＳ１０３のＮｏ）、ステップＳ１１５に移行する。
【００５６】
ステップＳ１０４では、検証結果を検証ＮＧすなわち署名ＮＧとして、ステップＳ１０９に移行する。
【００５７】
ステップＳ１１５では、外部入力攻撃防御機能検証部１３が、入力された検証対象のプログラムおよび／またはセキュア環境の保護機構に対して、外部入力攻撃防御機能の検証を行う。外部入力攻撃防御機能の検証の結果、外部入力攻撃防御機能ありと判定された場合（ステップＳ１１６のＹｅｓ）、ステップＳ１１７に移行し、そうでなければ（ステップＳ１１６のＮｏ）、ステップＳ１０４に移行する。
【００５８】
ステップＳ１１７では、最終的に検証ＯＫすなわち署名ＯＫとして、ステップＳ１１８に移行する。
【００５９】
ステップＳ１１８では、署名部２が、署名ＯＫと判定されたプログラムに署名を付与する。
【００６０】
最後に、図示しない出力部が、検証結果（検証ＯＫ／ＮＧ）や署名付きプログラムや検証結果の詳細等を出力する（ステップＳ１０９）。
【００６１】
なお、本実施形態の署名も、セキュア環境への配置の可否およびセキュア環境下での実行の可否を判定するために使用される。
【００６２】
また、上記の例では、悪意の検証（ステップＳ１０２）の後に、外部入力攻撃防御の検証ステップＳ１１５）を行う例を示したが、これらの検証は順不同である。すなわち、外部入力攻撃防御の検証を先に行ったり、両者を並列に行うことも可能である。また、第１の実施形態同様、悪意の検証を省略することも可能である。
【００６３】
以上のように、本実施形態によれば、検証対象のプログラム自体に含まれる（顕在化している）悪意の有無だけでなく、顕在化しない悪意の１つである外部入力による攻撃があるとして、そのような攻撃を防御する機能（外部入力攻撃防御機能）の有無を判定し、両方の点で安全性が確認された場合にのみ署名を行う。セキュア環境への配置の可否およびセキュア環境下での実行の可否を判定する際に、当該署名を利用することにより、顕在化している悪意を含むプログラムだけでなく、プログラム自体には悪意が見られないが、外部からのデータ入力により悪意が顕在化して攻撃を加える可能性のあるプログラムがセキュア環境に置かれたり、セキュア環境で実行されることを事前に防ぐことができる。したがって、セキュア環境下で顕在化する悪意による攻撃を防止できる。
【００６４】
実施形態３．
次に、本発明の第３の実施形態を説明する。図６は、第３の実施形態のプログラム検証システム１０の構成例を示すブロック図である。図６に示すプログラム検証システム１０は、悪意検証部１１と、プログラム実行機能検証部１２と、外部入力攻撃防御機能検証部１３と、署名部２とを備える。なお、本例は、第１の実施形態と第２の実施形態と組み合わせた例である。
【００６５】
悪意検証部１１およびプログラム実行機能検証部１２は、第１の実施形態と同様である。また、外部入力攻撃防御機能検証部１３は、第２の実施形態と同様である。
【００６６】
本実施形態の署名部２は、悪意検証部１１による検証結果と、プログラム実行機能検証部１２による検証結果と、外部入力攻撃防御機能検証部１３による検証結果とに基づいて、署名を行う。署名部２は、いずれの検証結果も検証ＯＫであった場合に、検証対象のプログラムに対して署名を行う。
【００６７】
次に、本実施形態の動作を説明する。図７は、本実施形態のプログラム検証システム１０の動作の一例を示すフローチャートである。なお、本例のステップＳ１０１〜ステップＳ１０４、ステップＳ１０９は、第１の実施形態と同じであり、ステップＳ１１５，Ｓ１１６は、第２の実施形態と同じであるため、説明を省略する。
【００６８】
本実施形態では、検証対象のプログラム（実行コード等）が入力されると、まず、悪意検証部１１が、入力された検証対象のプログラムに対して、悪意の検証を行う（ステップＳ１０２〜）。その後、プログラム実行機能検証部１２が、入力された検証対象のプログラムに対して、プログラム実行機能の検証を行う（ステップＳ１０５〜）。その後、外部入力攻撃防御機能検証部１３が、入力された検証対象のプログラムおよび／またはセキュア環境の保護機構に対して、外部入力攻撃防御機能の検証を行う（ステップＳ１１５〜）。
【００６９】
そして、それらの結果を受けて、署名部２が、署名ＯＫとされたプログラムに署名を付与する（ステップＳ１２７，Ｓ１２８）。具体的には、署名部２は、悪意の検証、プログラム実行機能の検証および外部入力攻撃防御の検証のいずれの検証結果も検証ＯＫであった場合に、検証ＯＫとし（ステップＳ１２７）、検証対象のプログラムに署名を付与する（ステップＳ１２８）。
【００７０】
最後に、図示しない出力部が、検証結果（検証ＯＫ／ＮＧ）や署名付きプログラムや検証結果の詳細等を出力する（ステップＳ１０９）。
【００７１】
なお、上記の例では、悪意の検証（ステップＳ１０２）の後に、プログラム実行機能の検証ステップＳ１０５）を行い、その後に、外部入力攻撃防御の検証を行う例を示したが、これらの検証は順不同である。また、プログラム検証システム１０は、例えば、ユーザ指示や設定ファイル等に応じて、実施する検証方法を選択することも可能である。
【００７２】
以上のように、本実施形態によれば、検証対象のプログラム自体に含まれる（顕在化している）悪意の有無だけでなく、顕在化しない悪意の１つとなりうるプログラム実行機能の有無および／または顕在化しない悪意の１つである外部入力による攻撃を防御する機能の有無を判定し、判定を行ったものすべてで安全性が確認された場合にのみ署名を行う。セキュア環境への配置の可否およびセキュア環境下での実行の可否を判定する際に、当該署名を利用することにより、顕在化している悪意を含むプログラムだけでなく、プログラム自体には悪意が見られないが、外部からのデータ入力等を利用して後に悪意あるプログラムを実行される可能性があるコードを含むプログラムがセキュア環境に置かれたり、セキュア環境で実行されることを事前に防ぐことができる。したがって、セキュア環境下で顕在化する悪意による攻撃を防止できる。
【００７３】
また、図８は、本実施形態のプログラム検証システム１０を、プログラム実行端末に適用した例である。図８に示すプログラム実行端末３００は、セキュア環境３１０を備え、該セキュア環境３１０内に、プログラム検証部１０Ａとして、悪意検証部１１、プログラム実行機能検証部１２および外部入力攻撃防御機能検証部１３を含むとともに、署名部２と、配置・実行部３とを含む。
【００７４】
配置・実行部３は、セキュア環境３１０にプログラムを配置する際、またはセキュア環境３１０でプログラムを実行する際、署名部２による署名が付与されているか否かを判定し、署名があれば配置または実行する。
【００７５】
また、図９は、本実施形態のプログラム検証システム１０の他の構成例である。図９に示すプログラム検証システム１０は、第３の実施形態のプログラム検証システム１０の各要素に加えて、ソース入力部４１、判定部４２、外部入力攻撃防御機能付与部４３、ビルド部４４および実行コード出力部４５を備える。
【００７６】
ソース入力部４１は、検証対象のプログラムとして、コンパイル前のソースコードを入力する。
【００７７】
悪意検証部１１およびプログラム実行機能検証部１２は、第１の実施形態と同様である。また、外部入力攻撃防御機能検証部１３は、第２の実施形態と同様である。なお、各検証において検証対象のプログラムとして実行コードが必要な場合、ソースコードをビルド部４４に入力し、コンパイルを含む一連の処理（前処理、コンパイル、リンク等）をさせて実行コードを得ればよい。
【００７８】
判定部４２は、悪意検証部１１による検証結果、プログラム実行機能検証部１２による検証結果および外部入力攻撃防御機能検証部１３による検証結果を判定し、いずれの検証結果も検証ＯＫであれば、署名ＯＫとして、ソースコードをビルド部４４に入力して、実行コードを生成させる。なお、すでに実行コードが生成されている場合には、該実行コードを署名部２に入力して、署名をさせる。なお、署名ＯＫか否かの判断は、第１〜第３の実施形態の署名部２の判断処理と同様でよい。
【００７９】
また、判定部４２は、上記判定の結果、外部入力攻撃防御機能検証部１３による検証結果が検証ＮＧであれば、ソースコードを外部入力攻撃防御機能付与部４３に入力して、外部入力攻撃防御機能を付与させる。
【００８０】
また、判定部４２は、他に検証結果が検証ＮＧの検証方法があった場合には、検証ＮＧである旨およびそれら検証結果の詳細を出力してもよい。
【００８１】
外部入力攻撃防御機能付与部４３は、入力されたソースコードに、外部入力攻撃防御機能を付与する。外部入力攻撃防御機能付与部４３は、例えば、入力されたソースコードに、上記で示したようなスタック保護機能や、外部コード実行防止機能を追加実装して、出力する。具体的に、外部入力攻撃防御機能付与部４３は、ソースコードにそのようなスタック保護機能を実装するためのコードを挿入してもよい。また、外部入力攻撃防御機能付与部４３は、例えば、検証対象のプログラムが配置されるセキュア環境の保護機構において、外部コード実行防止機能が無効になっている場合には、それを有効にしてもよい。
【００８２】
ビルド部４４は、入力されたソースコードに対して、コンパイルを含む一連のビルド処理を行う。ビルド部４４は、より具体的には、入力されたソースコードを解析し、機械語に変換して、実行コードを生成する。
【００８３】
署名部２は、判定部４２によって署名ＯＫと判定されたソースコードから得られた実行コードに、署名を付与する。
【００８４】
実行コード出力部４５は、署名部２が署名を付与した実行コードを出力する。
【００８５】
図１０は、図９に示す実施形態のプログラム検証システム１０の動作の一例を示すフローチャートである。図１０に示す例では、まず、ソース入力部４１が、検証対象のプログラムのソースコードを入力する（ステップＳ２０１）。
【００８６】
次いで、悪意検証部１１が、入力された検証対象のプログラム（ソースコード）に対して、悪意の検証を行う（ステップＳ２０２）。悪意の検証方法は上記の実施形態と同様でよい。悪意の検証の結果、悪意ありと判定された場合（ステップＳ２０３のＹｅｓ）、ステップＳ２０４に移行し。そうでなければ（ステップＳ２０３のＮｏ）、ステップＳ２０５に移行する。
【００８７】
ステップＳ２０４では、ビルド失敗（エラーコード：検証ＮＧ）として、その詳細を出力して終了する。
【００８８】
ステップＳ２０５では、プログラム実行機能検証部１２が、プログラム実行機能の検証を行う。プログラム実行機能の検証方法は上記の実施形態と同様でよい。プログラム実行機能の検証の結果、プログラム実行機能ありと判定された場合（ステップＳ２０６のＹｅｓ）、ステップＳ２０４に移行し、そうでなければ（ステップＳ２０６のＮｏ）、ステップＳ２０７に移行する。
【００８９】
ステップＳ２０７では、外部入力攻撃防御機能検証部１３が、外部入力攻撃防御機能の検証を行う。学部入力攻撃防御機能の検証方法は上記の実施形態と同様でよい。外部入力攻撃防御機能の検証の結果、外部入力攻撃防御機能ありと判定された場合（ステップＳ２０８のＹｅｓ）、ステップＳ２１０に移行し、そうでなければ（ステップＳ２０８のＮｏ）、ステップＳ２０９に移行する。
【００９０】
なお、本例では、ステップＳ２０３、ステップＳ２０６およびステップＳ２０８の判定を、判定部４２が行う。
【００９１】
ステップＳ２０９では、外部入力攻撃防御機能付与部４３が、入力されたソースコードに、外部入力攻撃防御機能を付与する。その後、ステップＳ２０７に戻る。
【００９２】
ステップＳ２１０では、ビルド部４４が、入力されたソースコードを解析し、実行コードを生成する。
【００９３】
次いで、署名部２が、生成された実行コードに署名を付与する（ステップＳ２１１）。
【００９４】
最後に、実行コード出力部４５が、署名付きの実行コードを出力する（ステップＳ２１２）。
【００９５】
図９に示す構成のように、プログラム検証システム１０は、検証だけでなく、検証の結果、足りない機能を付与することも可能である。
【００９６】
なお、図８および図９では、プログラム検証部１０Ａとして、プログラム検証部１０Ａとして、悪意検証部１１、プログラム実行機能検証部１２および外部入力攻撃防御機能検証部１３を含む例を示したが、プログラム検証部１０Ａは、少なくともプログラム実行機能検証部１２および外部入力攻撃防御機能検証部１３を含めばよい。
【００９７】
次に、本発明の各実施形態にかかるコンピュータの構成例を示す。図１１は、本発明の各実施形態にかかるコンピュータの構成例を示す概略ブロック図である。コンピュータ１０００は、ＣＰＵ１００１と、主記憶装置１００２と、補助記憶装置１００３と、インタフェース１００４と、ディスプレイ装置１００５と、入力デバイス１００６とを備える。
【００９８】
上述の各実施形態のネットワーク制御システムの各ノードは、コンピュータ１０００に実装されてもよい。その場合、各ノードの動作は、プログラムの形式で補助記憶装置１００３に記憶されていてもよい。ＣＰＵ１００１は、プログラムを補助記憶装置１００３から読み出して主記憶装置１００２に展開し、そのプログラムに従って各実施形態における所定の処理を実施する。なお、ＣＰＵ１００１は、プログラムに従って動作する情報処理装置の一例であり、ＣＰＵ（Central Processing Unit）以外にも、例えば、ＭＰＵ（Micro Processing Unit）やＭＣＵ（Memory Control Unit）やＧＰＵ（Graphics Processing Unit）などを備えていてもよい。
【００９９】
補助記憶装置１００３は、一時的でない有形の媒体の一例である。一時的でない有形の媒体の他の例として、インタフェース１００４を介して接続される磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等が挙げられる。また、このプログラムが通信回線によってコンピュータ１０００に配信される場合、配信を受けたコンピュータは１０００がそのプログラムを主記憶装置１００２に展開し、各実施形態における所定の処理を実行してもよい。
【０１００】
また、プログラムは、各実施形態における所定の処理の一部を実現するためのものであってもよい。さらに、プログラムは、補助記憶装置１００３に既に記憶されている他のプログラムとの組み合わせで各実施形態における所定の処理を実現する差分プログラムであってもよい。
【０１０１】
インタフェース１００４は、他の装置との間で情報の送受信を行う。また、ディスプレイ装置１００５は、ユーザに情報を提示する。また、入力デバイス１００６は、ユーザからの情報の入力を受け付ける。
【０１０２】
また、実施形態における処理内容によっては、コンピュータ１０００の一部の要素は省略可能である。例えば、ノードがユーザに情報を提示しないのであれば、ディスプレイ装置１００５は省略可能である。例えば、ノードがユーザから情報入力を受け付けないのであれば、入力デバイス１００６は省略可能である。
【０１０３】
また、各装置の各構成要素の一部または全部は、汎用または専用の回路（Circuitry）、プロセッサ等やこれらの組み合わせによって実施される。これらは単一のチップによって構成されてもよいし、バスを介して接続される複数のチップによって構成されてもよい。また、各装置の各構成要素の一部又は全部は、上述した回路等とプログラムとの組み合わせによって実現されてもよい。
【０１０４】
各装置の各構成要素の一部又は全部が複数の情報処理装置や回路等により実現される場合には、複数の情報処理装置や回路等は、集中配置されてもよいし、分散配置されてもよい。例えば、情報処理装置や回路等は、クライアントアンドサーバシステム、クラウドコンピューティングシステム等、各々が通信ネットワークを介して接続される形態として実現されてもよい。
【０１０５】
次に、本発明の概要を説明する。図１２は、本発明のプログラム検証システム５０の概要を示すブロック図である。図１２に示すプログラム検証システム５０は、プログラム検証手段５１と、署名手段５２とを備える。
【０１０６】
プログラム検証手段５１（例えば、プログラム実行機能検証部１２、外部入力攻撃防御機能検証部１３、プログラム検証部１０Ａ）は、セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、検証対象のプログラムもしくはその動作元であるセキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証する。
【０１０７】
署名手段５２（例えば、署名部２）は、プログラム検証手段５１による検証の結果に基づいて、プログラムに署名を付与する。
【０１０８】
このような構成により、セキュア環境下で顕在化する悪意による攻撃を防止することができる。
【０１０９】
また、図１３は、本発明のプログラム検証システム５０の他の構成例を示すブロック図である。図１３に示すように、プログラム検証手段５１は、プログラム実行機能検証手段５１１と、外部入力攻撃防御機能検証手段５１２とを含んでいてもよい。
【０１１０】
プログラム実行機能検証手段５１１（例えば、プログラム実行機能検証部１２）は、セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうかを検証する。
【０１１１】
外部入力攻撃防御機能検証手段５１２（例えば、外部入力攻撃防御機能検証部１３）は、検証対象のプログラムまたはその動作元であるセキュア環境の保護機構に、プログラム実行中の外部からの不正なデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証する。
【０１１２】
以上、本実施形態および実施例を参照して本願発明を説明したが、本願発明は上記実施形態および実施例に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【産業上の利用可能性】
【０１１３】
本発明は、セキュア環境に限らず、堅強な実行環境を実現したい場合に、好適に適用可能である。
【符号の説明】
【０１１４】
１０  プログラム検証システム
１０Ａ  プログラム検証部
１１  悪意検証部
１２  プログラム実行機能検証部
１３  外部入力攻撃防御機能検証部
１３１  スタック保護機能検証部
１３２  外部コード実行防止機能検証部
２  署名部
３００  プログラム実行端末
３１０  セキュア環境
３  配置・実行部
４１  ソース入力部
４２  判定部
４３  外部入力攻撃防御機能付与部
４４  ビルド部
４５  実行コード出力部
１０００  コンピュータ
１００１  ＣＰＵ
１００２  主記憶装置
１００３  補助記憶装置
１００４  インタフェース
１００５  ディスプレイ装置
１００６  入力デバイス
５０  プログラム検証システム
５１  プログラム検証手段
５１１  プログラム実行機能検証手段
５１２  外部入力攻撃防御機能検証手段
５２  署名手段
【図１】
2019026137.tif 000003
【図２】
2019026137.tif 000004
【図３】
2019026137.tif 000005
【図４】
2019026137.tif 000006
【図５】
2019026137.tif 000007
【図６】
2019026137.tif 000008
【図７】
2019026137.tif 000009
【図８】
2019026137.tif 000010
【図９】
2019026137.tif 000011
【図１０】
2019026137.tif 000012
【図１１】
2019026137.tif 000013
【図１２】
2019026137.tif 000014
【図１３】
2019026137.tif 000015
【図１４】
2019026137.tif 000016
【図１５】
2019026137.tif 000017
【図１６】
2019026137.tif 000018
【図１７】
2019026137.tif 000019
【手続補正書】
【提出日】令和2年1月15日(2020.1.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、前記検証対象のプログラムもしくはその動作元である前記セキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証するプログラム検証手段と、
前記プログラム検証手段による検証の結果に基づいて、前記プログラムに署名を付与する署名手段とを備えた
ことを特徴とするプログラム検証システム。
【請求項２】
前記プログラム検証手段は、
セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうかを検証するプログラム実行機能検証手段と、
前記検証対象のプログラムまたはその動作元である前記セキュア環境の保護機構に、プログラム実行中の外部からの不正なデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証する外部入力攻撃防御機能検証手段とを含み、
前記署名手段は、前記プログラム実行機能検証手段による検証結果と、前記外部入力攻撃防御機能検証手段による検証結果に基づき、いずれの検証結果も検証ＯＫであった場合に、署名を付与する
請求項１に記載のプログラム検証システム。
【請求項３】
前記プログラム実行機能検証手段は、前記検証対象のプログラムに、機械に新たなプログラムを実行させるシステムコールが含まれていないことを確認する
請求項２に記載のプログラム検証システム。
【請求項４】
前記外部入力攻撃防御機能検証手段は、前記検証対象のプログラムにスタック保護機能が含まれていること、または、前記検証対象のプログラムもしくはその動作元である前記セキュア環境の保護機構に、プログラムの動作中に書き換えが許可されている領域である動的領域内でのコードの実行を防止する機能である外部コード実行防止機能が含まれていることを確認する
請求項２に記載のプログラム検証システム。
【請求項５】
前記外部入力攻撃防御機能検証手段は、前記スタック保護機能または前記外部コード実行防止機能が含まれている場合に、検証ＯＫとする
請求項４に記載のプログラム検証システム。
【請求項６】
前記スタック保護機能は、スタックへの外部入力に対する事後的な保護を含む
請求項４または請求項５に記載のプログラム検証システム。
【請求項７】
前記プログラム検証手段は、少なくとも実行前のコード、ユースケースおよび／または運用方法に対する所定の検証によって安全性が確認されたプログラムを対象に前記検証を行う
請求項１から請求項６のうちのいずれかに記載のプログラム検証システム。
【請求項８】
検証対象のプログラムのソースコードを入力するソース入力手段と、
前記ソースコードに対して、外部入力攻撃防御機能を付与する外部入力攻撃防御機能付与手段と、
前記ソースコードを、機械語である実行コードに変換するビルド手段とを備え、
前記プログラム検証手段は、前記ソースコードに対して検証を行い、
前記外部入力攻撃防御機能付与手段は、前記プログラム検証手段による検証の結果、前記ソースコードに外部入力攻撃防御機能が含まれていなかった場合に、外部入力攻撃防御機能を付与し、
前記署名手段は、前記プログラム検証手段による検証の結果に基づいて、前記ビルド手段によるビルド後の実行コードに署名を付与する
請求項１から請求項７のうちのいずれかに記載のプログラム検証システム。
【請求項９】
情報処理装置が、
セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、前記検証対象のプログラムもしくはその動作元である前記セキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証し、
前記検証の結果に基づいて、前記プログラムに署名を付与する
ことを特徴とするプログラム検証方法。
【請求項１０】
コンピュータに、
セキュア環境下で動作するプログラムとして入力された検証対象のプログラムに、当該プログラム内の命令により、同じ環境下に新たなプログラムを実行させる機能であるプログラム実行機能が含まれていないかどうか、および／または、前記検証対象のプログラムもしくはその動作元である前記セキュア環境の保護機構に、プログラム実行中の外部からのデータ入力に起因する攻撃を防御する機能である外部入力攻撃防御機能が含まれているかどうかを検証する処理、および
前記検証の結果に基づいて、前記プログラムに署名を付与する処理
を実行させるためのプログラム検証プログラム。
【国際調査報告】
2019026137.tif 000020
2019026137.tif 000021
2019026137.tif 000022
2019026137.tif 000023