(57)【要約】【課題】流出した新種、または変種の不正プログラム（コンピュータウイルスなど）を検出するのは難しい。【解決手段】本発明は、コンパイラ手段１２とその中に設けた不正プログラム段階１４で構成される。コンパイラ手段１２は、ソースプログラム１０で計算機で実行可能なオブジェクトプログラム１６に変換する。不正プログラム検出段階１４は、コンパイラ手段１２の１つの機能として設けられ、通常のソースプログラム１０は正常と診断されるが、不正プログラムであればエラーと診断され、オブジェクトプログラム１６は生成されない。【選択図】図１
2005222361.tif 000002
【特許請求の範囲】
【請求項１】
本発明である不正プログラム検出段階がコンパイル段階である字句解析、構文解析、中間コード生成段階、コード最適化段階、コード生成段階のいずれかもしくは複数に含まれるシステム、及び方法。
【請求項２】
請求項１において、不正プログラム検出段階では、不正プログラム特有のコードを集めたデータベースを参照し診断を行い、通常は正常と診断されるが、不正と診断された場合、エラーとなり、オブジェクトプログラムは生成されない。
【請求項３】
請求項１において、正常と診断されたプログラムには署名をつけ、信頼できるオブジェクトプログラムであることを保証する。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータウイルス（ここでは広義にワームも含める）など不正プログラムの作成防止に関する分野である。不正プログラムとはユーザの意図に反する「悪意ある行為」を実行するプログラムである。
【背景技術】
【０００２】
近年、ウイルスの被害が増加している。情報処理振興事業協会（ＩＰＡ）が公表している国内のウイルス被害届出状況によると２００１年では２４，２６１件、２００２年では２０，３５２件と被害件数は多い。現在主流の対策方法として、ワクチンソフトをインストールすることでウイルス感染を防止している。
【特許文献１】特開２００３−２４１９８９号
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来のワクチンソフトを用いたウイルスの感染防止の手法は、新種または亜種のウイルスが発生すると、ワクチンの開発にある程度の時間がかかってしまうため、その間にウイルスに感染する恐れがあった。またウイルスに感染していても、その被害に気付くことはほとんどなく、ウイルス感染に気付くまでに被害が拡大してしまう問題があった。
【０００４】
本発明の目的は、コンパイラによるオブジェクトプログラムへの翻訳段階の中に不正プログラム検出段階を加え、プログラムとして実行されるオブジェクトプログラムを作成する前に、不正プログラムかどうかの診断をし、不正プログラム作成を防止することである。
【課題を解決するための手段】
【０００５】
第１図は、本発明による不正プログラム検出機能を持つシステムを例にとった原理説明図である。本発明の不正プログラム検出機能を持つシステムは、コンパイル手段１２とその中に設けた不正プログラム検出段階１４で構成される。コンパイル手段１２は、ソースプログラム１０を計算機で実行可能なオブジェクトプログラム１６に変換する。
【０００６】
不正プログラム検出段階１４は、コンパイラ手段１２の１つの機能として設けられ、通常のソースプログラム１０は正常と診断されるが、不正プログラムであればエラーと診断され、オブジェクトプログラム１６は生成されない。
【発明の効果】
【０００７】
本発明により、不正プログラムを作成することが困難になる。従ってウイルス等の不正プログラムによる被害を最小限に抑え、適切なウイルス感染防止対策をとることができる。
【０００８】
また、不正プログラム検出がコンパイラ段階で自動的に行われるため、ソースプログラムの製造段階で意図しない不正プログラムの生成を意識する必要がなく、ソースプログラムの製造行程に負担を与えない。
【０００９】
また、全てのソースプログラムのコンパイルにより、オブジェクトプログラム作成前に不正プログラム診断するため、不正プログラムを早期に発見して、且つ被害の拡大を確実に防止できる。
【発明を実施するための最良の形態】
【００１０】
以下、図面を参照して、本発明の一実施形態によるシステム、及び方法について不正プログラム検出段階が、構文解析段階に含まれる場合を例をとし、詳細に説明する。
【実施例１】
【００１１】
図２は本発明による不正プログラム検出段階を含むオブジェクトプログラムの作成に使用されるコンパイラマシンのハードウエア構成を示している。図２において、主記憶装置２００にはオペレーティングシステムが格納され、電源投入時にコンパイラを実現するプログラムが展開される。主記憶装置２００に対しては主記憶制御装置２０２が設けられる。主記憶制御装置２０２にはＣＰＵ２０４およびチャネルプロセッサ２０８が設けられる。
【００１２】
ＣＰＵ２０４は主記憶装置２００に転換されたコンパイラプログラムに従って、ソースプログラムを計算機で実行可能なアセンブラ言語や機械語で表現されたオブジェクトプログラムに変換するコンパイルを行う。チャネルプロセッサ２０６のチャネル装置２０８には、チャネルバス２１０を介して磁気ディスクユニットなどを用いたファイル装置２２０、２３０、２５０、２６０、２８０が接続される。
【００１３】
ファイル装置２２０にはコンパイルを行うソースプログラム１０が格納されている。ファイル装置２３０にはコンパイルの処理過程ごとに生成される中間ファイル２４０が格納されている。ファイル装置２５０にはコンパイルが済んだオブジェクトプログラム１６が格納されている。ファイル装置２６０にはコンパイルの処理過程で生成されるシンボルテーブル２７０が格納されている。更にファイル装置２８０には、不正プログラム検出段階で参照する不正プログラム特有のコードを集めたシグニチャテーブル２９０が格納されている。ここでは不正プログラム特有のコードをシグニチャと定義する。
【００１４】
チャネルプロセッサ２０６の他のチャネル装置には図示しないＣＲＴ、プリンタ、キーボードなどの他の入出力機器が接続される。
【００１５】
図３は図１の不正プログラム検出段階１４を備えたコンパイラ部１２の機能構成を示した説明図である。このコンパイラとしての機能は、図２のＣＰＵ２０４によるプログラムの実行の形で実現される。図３において、コンパイラは字句解析段階２６、構文解析段階３０、中間コード生成段階３４、コード最適化段階３８、コード生成段階４４および不正プログラム検出段階１４で構成される。
【００１６】
字句解析段階２６にはソースプログラム１０が入力される。字句解析段階２６、構文解析段階３０、中間コード生成段階３４およびコード最適化段階にあたっては、中間ファイル２８、３２、３６、４２の各々が生成される。字句解析段階２６はＣやＣＯＢＯＬ、ＦＯＲＴＲＡＮなどの所定のプログラミング言語で書かれたソースプログラム１０を入力し、プログラム言語の字句を解析する。即ち、プログラミング言語で書かれたソースプログラム１０をトークンと呼ばれる単位ごとに区切り、その単語の正当性をチェックする。
【００１７】
このトークンの代表例はキーワード、演算子、変数、名、定数、区切り記号などがある。字句解析段階２６は全てのソースプログラム１０の字句の正当性をチェックした後で、トークンの集合で構成される中間ファイル２８を出力し、次の構文解析段階３０に引き渡す。
【００１８】
構文解析段階３０は、字句解析段階で２６で生成された中間ファイル２８を入力し、ソースプログラム１０が使用しているプログラミング言語の文法規則に合致しているか否かチェックする。文法規則に合致していればソースプログラム１０を実行する手順を決め、同様に中間ファイル３２として出力する。この構文解析段階３０による構文解析は、一般的には２つの機能を備えている。１つの機能はソースプログラム１０上の各トークンが文法的に正しい位置にあるか否かのチェックである。
【００１９】
２つ目の機能はソースプログラム１０上の全トークンの存在意味を解析した後にこれらの実行手順を決め、その手続きをトークンの流れやグループ化として表現することである。一般には各トークンの実行順序の分析結果を表現するのに木構造（パースツリー）が使用される。中間コード生成段階３４は構文解析段階３０で作成された中間ファイル３２の木構造（パースツリー）を入力し、コンパイラが持っている固有の中間コードに変換して、中間ファイル３６を出力する。代表的な中間コードとしては３オペランド方式が知られている。
【００２０】
コード最適化段階３８は中間コード生成段階３４で得られた中間ファイル３６の中間コードを入力し、ターゲットとなる計算機上で最も少ない容量でかつ最も早い速度で実行可能な中間言語に変換し、中間ファイル４２を出力する。一般的な最適化の手法としては、ローカルな最適化とループの最適化がある。ローカルな最適化とは余分な命令を減らすことである。またループの最適化とはループを毎回実行するごとに同じ値を示すような場合は、これは無条件にループの外に追い出して最初の１回だけを実行するような方法にある。
【００２１】
コード生成段階４４はコード最適化が済んだ中間ファイル４２の中間コードまたは中間言語をコード生成段階４４に入力し、ターゲットとなる計算機の命令セットに変換する。これらは加えて本発明にあたっては、更に不正プログラム検出段階１４を設けており、この段階は字句解析段階２６、構文解析段階３０、中間コード生成段階３４、コード最適化段階３８、コード生成段階４４のいずれかもしくは複数に含まれる。
【００２２】
図４は不正プログラム検出段階１４を示した図である。不正プログラム検出段階は含まれる各段階に対して同じ動作を行う。シグニチャテーブル２９０にはシグニチャが集められており、不正プログラムかどうかの判定時に参照される。少なくとも１つがシグニチャと同様のコードであった場合、不正プログラムと判定され、エラーとなる。シグニチャが含まれなかった場合は正常とみなし、次の段階に進む。
【００２３】
構文解析段階３０に不正プログラム段階が含まれている場合を例にあげる。シグニチャテーブル２９０は、不正プログラム特有の木構造（パースツリー）を集めたデータベースになっている。中間ファイル３２に木構造（パースツリー）を出力する際に不正プログラム検出段階１４に移行する。ステップＳ１で出力する木構造（パースツリー）がシグニチャであるか否かをシグニチャテーブル２９０を参照して、判断する。一致すれば不正プログラムであると判断し、エラーを返す。一致しなければ正常とみなし、次の段階に進む。
【００２４】
本発明により、コンパイラ手段の中に不正プログラム検出段階を加えると同時に、必要あらばシグニチャテーブル更新段階を設けておくこと、また、信頼できるオブジェクトプログラムであることを保証するために、正常と判断されたオブジェクトプログラムに署名を付ける段階を設けておくことも不正プログラムによる被害を防ぐためには望ましい。
【産業上の利用可能性】
【００２５】
本発明は、コンピュータウイルスの感染を予防するための不正プログラム作成防止システムと作成防止方法並びに不正プログラム検出段階と検出方法に関する分野に利用可能である。
【図面の簡単な説明】
【００２６】
【図１】本発明の原理説明図。
【図２】本発明で用いるコンパイラのハードウエア構成部
【図３】コンパイラ機能構成を示した説明図
【図４】不正プログラム検出段階を示した図
【符号の説明】
【００２７】
１０    ソースプログラム
１２    コンパイラ手段
１４    不正プログラム検出段階
１６    オブジェクトプログラム
２６    字句解析段階
２８，３２，３６，４２    中間ファイル
３０    構文解析段階
３４    中間コード生成段階
３８    コード最適化段階
４４    コード生成段階
２００    主記憶装置
２０２    主記憶制御装置
２０４    CPU
２０６    チャネルプロセッサ
２０８    チャネル装置
２１０    チャネルバス
２２０，２３０，２５０，２６０，２８０    ファイル装置
２４０    中間ファイル
２７０    シンボリテーブル
２８０    シグニチャテーブル
【図１】
2005222361.tif 000003
【図２】
2005222361.tif 000004
【図３】
2005222361.tif 000005
【図４】
2005222361.tif 000006