(57)【要約】本発明にかかる不正処理方法、データ処理装置、コンピュータプログラム、及び記録媒体は、バッファメモリに記憶させたデータをバイト単位で読出し、読出し位置がそれぞれ異なる複数の命令系列について、順次的にどのような命令コードが含まれているか解析してゆく。そして、解析した命令系列に、ｉｎｔ命令が含まれており、即値をスタックへプッシュした回数が１より大きく、仮想スタック上に”／”に対応した文字コードが含まれている場合、当該命令系列に不正コードが含まれていると判定する。
2004077294.tif 000002
【特許請求の範囲】
【請求項１】
異なるバイト長の命令コードを複数含んだデータを受信する受信手段と、受信したデータを記憶する記憶手段とを備えるデータ処理装置を用いて、前記データに含まれる命令コードにより不正処理が実行されるか否かを判定する不正処理判定方法において、前記記憶手段に記憶したデータをバイト単位で順次的に読出し、夫々が連続したバイト列からなり、各バイト列の先頭バイトが異なる読出し位置に対応した複数のデータ系列について、各データ系列に含まれる命令コードが、不正処理を実行する際に用いる文字列を構成する複数の文字コードを生成するか否かを検出し、検出した結果に基づいて前記外部コマンドが実行されるか否かを判定することを特徴とする不正処理判定方法。
【請求項２】
異なるバイト長の命令コードを複数含んだデータを受信する受信手段と、受信したデータを記憶する記憶手段と、前記データに含まれる命令コードにより不正処理が実行されるか否かを判定する判定手段とを備えるデータ処理装置において、前記記憶手段に記憶したデータをバイト単位で順次的に読出す手段と、夫々が連続したバイト列からなり、各バイト列の先頭バイトが異なる読出し位置に対応した複数のデータ系列について、各データ系列に含まれる命令コードが、不正処理を実行する際に用いる文字列を構成する複数の文字コードを生成するか否かを検出する検出手段とを備え、前記判定手段は、前記検出手段の検出結果に基づいて前記外部コマンドが実行されるか否かを判定すべくなしてあることを特徴とするデータ処理装置。
【請求項３】
命令コードの１バイト目のデータと該命令コードのバイト長との対応関係を記憶したテーブルを更に備えることを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
前記文字コードを生成する命令コードの後にシステムコールを起動する命令コードが含まれているか否かを検出する手段を更に備え、前記命令コードを検出した場合、前記判定手段は、不正処理が実行されると判定すべくなしてあることを特徴とする請求項２に記載のデータ処理装置。
【請求項５】
前記文字コードに所定の文字コードが含まれているか否かを検出する手段を更に備え、前記所定の文字コードを検出した場合、前記判定手段は、不正処理が実行されると判定すべくなしてあることを特徴とする請求項４に記載のデータ処理装置。
【請求項６】
データ系列に含まれる命令コードが生成する文字コードは、前記データに含まれる即値に対応していることを特徴とする請求項２に記載のデータ処理装置。
【請求項７】
不正処理が実行されると前記判定手段が判定した場合、外部へその旨の情報を報知する手段を更に備えることを特徴とする請求項２に記載のデータ処理装置。
【請求項８】
コンピュータに、入力された異なるバイト長の命令コードを複数含んだデータに基づいて、不正処理が実行されるか否かを判定させるステップを有するコンピュータプログラムにおいて、コンピュータに、夫々が連続したバイト列からなり、各バイト列の先頭バイトが異なる読出し位置に対応させて読出した複数のデータ系列について、各データ系列に含まれる命令コードが、不正処理を実行する際に用いる文字列を構成する複数の文字コードを生成するか否かを検出させるステップを有することを特徴とするコンピュータプログラム。
【請求項９】
コンピュータに、入力された異なるバイト長の命令コードを複数含んだデータに基づいて、不正処理に係る外部コマンドが実行されるか否かを判定させるステップを有するコンピュータプログラムが記録されているコンピュータでの読取りが可能な記録媒体において、コンピュータに、夫々が連続したバイト列からなり、各バイト列の先頭バイトが異なる読出し位置に対応させて読出した複数のデータ系列について、各データ系列に含まれる命令コードが、不正処理を実行する際に用いる文字列を構成する複数の文字コードを生成するか否かを検出させるステップを有するコンピュータプログラムが記録されていることを特徴とするコンピュータでの読取りが可能な記録媒体。
【発明の詳細な説明】
【技術分野】  本発明は、不正処理を実行するデータを検出する不正処理判定方法、データ処理装置、該データ処理装置を実現するためのコンピュータプログラム、及び該コンピュータプログラムが記録されているコンピュータでの読取りが可能な記録媒体に関する。
【背景技術】    インターネット網の普及に伴い、各種の情報処理装置がコンピュータウィルス、クラッキング等の攻撃の対象となり、それらの脅威に晒される可能性が高くなってきている。例えば、近年、「ニムダ」、「コードレッド」等のコンピュータウィルスに代表されるように、システムプログラム又はウェブブラウザのようなアプリケーションプログラムの脆弱性（セキュリティホール）を利用して自己増殖させ、甚大な被害を与えたケースが存在する。
前述のようなコンピュータウィルス、クラッキング等による攻撃では、不正な処理を行う命令コード（以下、不正コードという）を含む攻撃データを攻撃対象であるサーバ装置、パーソナルコンピュータ等の情報処理装置に対して送信し、その情報処理装置にて前記命令コードが実行されるように構成されている。このような攻撃手法は様々なものが存在し、その１つとしてバッファオーバフローによる攻撃手法が知られている。バッファオーバフローでは、スタック内に確保されたバッファにおいて、確保されたバッファ以上のスタックエリアに書込みが行われている状態であり、バッファオーバフローの状態に陥った場合、予期せぬ変数破壊を招き、プログラムの誤動作の原因となり得る。バッファオーバフローによる攻撃では、プログラムの誤動作を意図的に引き起し、例えばシステムの管理者権限を取得することが行われる。
これらのコンピュータウィルス、クラッキング等の攻撃に対処するため、例えば、特開平９−３１９５７４号公報に記載されているように、不正コードにみられるような特定のビットパターンの有無を受信したデータに対して検出する処理が実行されていた。そして、そのようなビットパターンが受信したデータに含まれている場合には、不正コードを含んだ攻撃データであると判定し、データの受信拒否、ユーザへの報知等を行うようにしていた。
そのため、従来の手法により様々なコンピュータウィルス、クラッキング等の攻撃に対処するためには、各コンピュータウィルス、クラッキングに対応した特定のビットパターンをデータベースに記憶させて予め用意しておく必要があり、新種のコンピュータウィルス、クラッキング手法が発見された場合には、前記データベースを更新して対処しなければならない。
ところで、攻撃データに対する従来の検出方法では、前述のように既知のビットパターンを検出するか、又はＮＯＰ命令（ＮＯＰ：ｎｏｎ−ｏｐｅｒａｔｉｏｎ）の単純な繰り返しといった攻撃処理にとって、本質的とはいえない部分の構造を検出するようにしてきた。そのため、攻撃データのバリエーションに弱く、未知の攻撃データが現れる毎に、検出に用いるビットパターンのデータベースを更新する必要があり、データベースが更新されるまでのタイムラグが問題になっていた。
本発明は斯かる事情に鑑みなされたものであり、その目的とするところは、夫々が連続したバイト列からなり、各バイト列の先頭バイトが異なる読出し位置に対応した複数のデータ系列について、各データ系列が外部コマンドのコマンド名を構成する複数の文字コードを生成するか否かを検出し、その検出結果に基づいて各データ系列による処理が不正処理であるか否かを判定する構成とすることにより、不正な処理を行う命令コード群を検出するためのビットパターン等を予め用意する必要がなく、不正な処理を行う未知の命令コード群に対しても検出可能な不正処理判定方法、データ処理装置、該データ処理装置を実現するためのコンピュータプログラム、及び該コンピュータプログラムが記録されているコンピュータでの読取りが可能な記録媒体を提供することである。
【発明の開示】
第１発明に係る不正処理判定方法は、異なるバイト長の命令コードを複数含んだデータを受信する受信手段と、受信したデータを記憶する記憶手段とを備えるデータ処理装置を用いて、前記データに含まれる命令コードにより不正処理が実行されるか否かを判定する不正処理判定方法において、前記記憶手段に記憶したデータをバイト単位で順次的に読出し、夫々が連続したバイト列からなり、各バイト列の先頭バイトが異なる読出し位置に対応した複数のデータ系列について、各データ系列に含まれる命令コードが、不正処理を実行する際に用いる文字列を構成する複数の文字コードを生成するか否かを検出し、検出した結果に基づいて前記外部コマンドが実行されるか否かを判定することを特徴とする。
第２発明に係るデータ処理装置は、異なるバイト長の命令コードを複数含んだデータを受信する受信手段と、受信したデータを記憶する記憶手段と、前記データに含まれる命令コードにより不正処理が実行されるか否かを判定する判定手段とを備えるデータ処理装置において、前記記憶手段に記憶したデータをバイト単位で順次的に読出す手段と、夫々が連続したバイト列からなり、各バイト列の先頭バイトが異なる読出し位置に対応した複数のデータ系列について、各データ系列に含まれる命令コードが、不正処理を実行する際に用いる文字列を構成する複数の文字コードを生成するか否かを検出する検出手段とを備え、前記判定手段は、前記検出手段の検出結果に基づいて前記外部コマンドが実行されるか否かを判定すべくなしてあることを特徴とする。
第３発明に係るデータ処理装置は、第２発明に係るデータ処理装置において、命令コードの１バイト目のデータと該命令コードのバイト長との対応関係を記憶したテーブルを更に備えることを特徴とする。
第４発明に係るデータ処理装置は、第２発明に係るデータ処理装置において、前記文字コードを生成する命令コードの後にシステムコールを起動する命令コードが含まれているか否かを検出する手段を更に備え、前記命令コードを検出した場合、前記判定手段は、不正処理が実行されると判定すべくなしてあることを特徴とする。
第５発明に係るデータ処理装置は、第４発明に係るデータ処理装置において、前記文字コードに所定の文字コードが含まれているか否かを検出する手段を更に備え、前記所定の文字コードを検出した場合、前記判定手段は、不正処理が実行されると判定すべくなしてあることを特徴とする。
第６発明に係るデータ処理装置は、第２発明に係るデータ処理装置において、各データ系列に含まれる命令コードが生成する文字コードは、前記データに含まれる即値に対応していることを特徴とする。
第７発明に係るデータ処理装置は、第２発明に係るデータ処理装置において、不正処理が実行されると前記判定手段が判定した場合、外部へその旨の情報を報知する手段を更に備えることを特徴とする。
第８発明に係るコンピュータプログラムは、コンピュータに、入力された異なるバイト長の命令コードを複数含んだデータに基づいて、不正処理が実行されるか否かを判定させるステップを有するコンピュータプログラムにおいて、コンピュータに、夫々が連続したバイト列からなり、各バイト列の先頭バイトが異なる読出し位置に対応させて読出した複数のデータ系列について、各データ系列に含まれる命令コードが、不正処理を実行する際に用いる文字列を構成する複数の文字コードを生成するか否かを検出させるステップを有することを特徴とする。
第９発明に係るコンピュータでの読取りが可能な記録媒体は、コンピュータに、入力された異なるバイト長の命令コードを複数含んだデータに基づいて、不正処理に係る外部コマンドが実行されるか否かを判定させるステップを有するコンピュータプログラムが記録されているコンピュータでの読取りが可能な記録媒体において、コンピュータに、夫々が連続したバイト列からなり、各バイト列の先頭バイトが異なる読出し位置に対応させて読出した複数のデータ系列について、各データ系列に含まれる命令コードが、不正処理を実行する際に用いる文字列を構成する複数の文字コードを生成するか否かを検出させるステップを有するコンピュータプログラムが記録されていることを特徴とする。
第１発明、第２発明、第８発明、及び第９発明にあっては、記憶手段からデータをバイト単位で順次的に読出して不正処理を実行する命令コードが含まれているか否かを判定する際、読出し位置が異なる複数のデータ系列について、例えば、外部コマンド及びシステムコールに引き渡すパラメータ等の不正処理を実行する際に用いる文字列を生成するか否かを検出するようにしている。したがって、通常のデータ（実行コード）には見られないような普遍的構造に着目して検出を行うことで、未知の不正コードが現れたときでも、不正コードの本質的な処理内容が変わらない限り対処することが可能となる。また、本発明では命令コード毎に検出を行うため、検出の開始位置をどこに設定するかによって検出結果が異なる場合が生じるが、読出し位置を順次異ならせた複数のデータ系列について検出するようにしているため、誤った判定が少なくなり、検出精度を高めることができる。
第３発明にあっては、命令コードの１バイト目のデータと、命令コードのバイト長との対応関係を記憶したテーブルを備えているため、データの読出し位置がある命令系列において命令コードの先頭バイト以外に位置しているときには、不正コードの検出を行わないようにすることができ、処理速度の向上が図れる。
第４発明にあっては、文字コードを生成する処理を実行する命令コードの後に、システムコールを起動する命令コードが含まれているか否かを検出するようにしているため、生成した文字コードからなるパラメータをシステムコールに引き渡している蓋然性が高く、不正処理を実行させる命令コードが含まれていると判定することができる。
第５発明にあっては、生成された文字コードに所定の文字コードを含んでいるか否かを判定するようにしているため、検出精度を高めることができる。
第６発明にあっては、生成する文字コードをデータ中の即値に対応させているため、レジスタ領域及びスタック領域を監視することで、容易に不正コードの有無を検出することが可能となり、検出精度を高めることができる。
第７発明にあっては、検出したデータ系列が不正処理を実行するデータであると判定した場合、外部へその旨を報知するようにしている。したがって、不正コードを検出した時点で通信の遮断等を行って、当該不正コードにより生じる不具合を防止することが可能となる。
【図面の簡単な説明】  第１図は、本実施の形態に係るデータ処理装置のブロック図である。
第２図は、データ処理装置が実行する処理を説明する模式図である。
第３図は、解析対象データの構成を説明する模式図である。
第４図は、データ処理装置による不正コードの検出手順を説明するフローチャートである。
第５図は、データ処理装置による不正コードの検出手順を説明するフローチャートである。
第６図は、解析・判定処理ルーチンの手順を説明するフローチャートである。
第７図は、不正コードの一例を説明する模式図である。
第８図は、不正コードの他の例を説明する模式図である。
第９図は、解析処理ルーチンの処理手順を説明するフローチャートである。
第１０図は、解析処理ルーチンの処理手順を説明するフローチャートである。
第１１図は、解析処理ルーチンの処理手順を説明するフローチャートである。
第１２図は、判定処理ルーチンの処理手順を説明するフローチャートである。
第１３図は、本実施の形態に係るデータ処理装置の構成を説明する模式図である。
【発明を実施するための最良の形態】  以下、本発明をその実施の形態を示す図面を参照して具体的に説明する。
（第１実施の形態）
第１図は本実施の形態に係るデータ処理装置のブロック図である。図中１０は、データ処理装置であり、ＣＰＵ１１、外部ネットワークへ接続するための通信インタフェース１５ａ、及び内部ネットワークへ接続するための通信インタフェース１５ｂを備えている。データ処理装置１０は、具体的にはルータ、ブロードバンドルータ、スイッチ等の通信ネットワーク上で送受信されるデータを中継するための装置であり、通信インタフェース１５ａには通信相手となる情報処理装置及び通信装置等が外部ネットワークを介して接続され、通信インタフェース１５ｂにはユーザが利用する情報処理装置及び通信装置等が内部ネットワークを介して接続される。前記情報処理装置には、パーソナルコンピュータ、ワークステーション、サーバ装置、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）等が含まれ、前記通信装置には携帯電話機等が含まれる。
ＣＰＵ１１には、メモリ１２、バッファメモリ１３、及びルーティング部１４等のハードウェアが接続されており、ＣＰＵ１１がメモリ１２に予め格納された制御プログラムを読込んで実行することにより前述の各ハードウェアを制御し、外部ネットワークと内部ネットワークとの間で送受信される各種データを中継する装置として動作させる。また、メモリ１２には、各ハードウェアを動作させるための制御プログラムの他、通信経路を定めるために送信先のネットワークアドレスを記憶したルーティングテーブル、及び本発明のコンピュータプログラムが格納されている。
内部ネットワーク側から外部ネットワーク側へデータを送信する際にデータ処理装置１０の通信インタフェース１５ｂが当該データを受信した場合、ＣＰＵ１１はメモリ１２内に格納されたルーティングテーブルを参照して通信経路を定め、定めた通信経路に従ってルーティング部１４を制御する。そして、通信インタフェース１５ａを介して送信先の情報処理装置又は通信装置へデータを送信する。
また、外部ネットワーク側から内部ネットワーク側へ送信するデータは、前述と同様の手順に従ってデータ処理装置１０により中継される。このときデータ処理装置１０は、通信インタフェース１５ａにて受信した外部ネットワーク側からのデータを一時的にバッファメモリ１３に記憶させ、記憶させたデータについて解析することにより、ある特定のＣＰＵ（以下、保護対象ＣＰＵという）について不正処理を実行させるような命令コード（以下、不正コードという）がそのデータに含まれているか否かを判定する。バッファメモリ１３に記憶させたデータを解析・判定するにあたって、ＣＰＵ１１は、本発明のコンピュータプログラムをメモリ１２から読込んで実行し、自身の内部にデータを解析・判定するための環境を与える仮想ＣＰＵ実行環境部１１ａを作成する。仮想ＣＰＵ実行環境部１１ａは、保護対象ＣＰＵが用いるレジスタ、スタックに対応する仮想レジスタ、仮想スタック等を備えており、解析対象のデータを保護対象ＣＰＵの命令コードと解釈して仮想的にデコードし、そのときに生成されたパラメータ等を記憶する。そして、ＣＰＵ１１は、仮想ＣＰＵ実行環境部１１ａが備える仮想レジスタ及び仮想スタックの状態等を監視することで不正コードの有無を判定する。
なお、本実施の形態では、ＣＰＵ１１、メモリ１２、及びバッファメモリ１３を夫々個別に設ける構成としたが、バッファメモリ及び本発明のコンピュータプログラムを記憶したＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）を１つのチップに実装したＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｅｄ  ＩＣ）等を設ける構成としても良い。
第２図はデータ処理装置１０が実行する処理を説明する模式図である。データ処理装置１０が実行する処理は、大別して（１）外部ネットワークからのデータの受信、（２）解析対象とするデータの抽出、（３）解析対象のデータから派生させた複数の命令系列に対する解析、（４）各命令系列における不正コードの検出、に分かれる。以下では各処理について説明する。
（１）データの受信
データ処理装置１０の通信インタフェース１５ａは、接続された外部ネットワークの通信規格に準拠した通信手順に従って所定の単位（例えば、パケット単位）でデータを受信する。受信するデータの各単位は所定のバイト長を有しており、送信元及び送信先のアドレス情報を含んだ通信ヘッダ、並びにユーザが任意に作成したユーザデータから構成される。ユーザデータには、ユーザが所望する処理を実行させるための命令コードが含まれており、当該命令コードによって不正処理が実行される虞がある。
（２）解析対象データの抽出
そこで、データ処理装置１０は、受信したデータをバイト単位で順次的に抽出し、バッファメモリ１３に記憶させて解析を行う。データの抽出を開始する位置、すなわち解析開始位置は予め定められた任意の位置とすることができる。例えば、受信したデータの先頭バイトを解析開始位置としても良く、通信ヘッダを除いたユーザデータの先頭バイトを解析開始位置としても良い。また、解析対象として抽出したデータを記憶させるバッファメモリ１３のバッファサイズは予め定められており、保護対象ＣＰＵがデコードすることができる命令コードの内、最大の命令長を有する命令コードが少なくとも１つ以上記憶されるようなサイズに予め設定されている。
（３）複数の命令系列の解析
次いで、バッファメモリ１３に記憶させた解析対象データについて複数の命令系列を派生させながら解析を行う。ここで、命令系列とは解析対象データについて指定した位置から始まる保護対象ＣＰＵの命令コードの並びをいう。
ＣＰＵ１１は、解析対象データについて解析を行うにあたり、バッファメモリ１３の先頭バイトから順次的に１バイトずつデータを読込む。ＣＰＵ１１は、読込んだ１バイトのデータが保護対象ＣＰＵにおいてどのような命令コードの先頭バイトに該当するかを解釈し、その解釈結果に基づいて命令の種類、次の命令の開始位置、及び当該命令で使用されるパラメータを記憶する。実際には本発明のコンピュータプログラム中に保護対象ＣＰＵで使用される命令コードの先頭バイトの文字コードと、当該命令コードの命令長及び使用されるパラメータ等との間の対応関係を規定したテーブル（以下、命令テーブルという）を有しており、ＣＰＵ１１が本発明のコンピュータプログラムをロードした際に前記命令テーブルがメモリ１２上に格納される。ＣＰＵ１１は、当該命令テーブルを参照することによって、バッファメモリ１３から読込んだ１バイトのデータの解釈を行う。
読込んだ１バイトのデータの解釈を終えた後、バッファメモリ１３からの読出し位置に対応する解析開始バッファ位置を１バイトずらして更にデータを１バイト読込み、読込んだデータの読出し位置を先頭バイトとした命令系列について解析を行う。このような処理を解析開始バッファ位置を順次的にずらしながら繰返して実行することにより、読出し位置が異なる複数の命令系列について解析を行う。
また、解析を終えたバッファメモリ１３の解析開始バッファ位置には、受信したデータから次の読込みデータ位置のデータが記憶される
（４）不正コードの検出
次いで、データ処理装置１０のＣＰＵ１１は、仮想ＣＰＵ実行環境部１１ａが備える仮想レジスタ及び仮想スタックの状態等に基づいて、外部コマンドの文字列又はシステムコールに引き渡すパラメータ等を生成させるような命令コードを含んだ命令系列を検出するようにしており、前記命令系列を検出した場合、不正コードを検出したと判定する。以下では、外部コマンドのコマンド名を構成する文字列を生成するような不正コードについて説明を行う。
攻撃者が実行させたい外部コマンドのコマンド名の文字列をスタック上に作成する場合、例えば、即値をスタック上へ直接プッシュして前記文字列をスタック上に組上げる手法、レジスタに一度書込んだ即値をスタック上へプッシュして、前記文字列をスタック上に組上げる手法、又はレジスタに書込んだ即値を利用して演算処理を行い、その演算結果をスタックへプッシュして前記文字列をスタック上に組上げる手法等が採られる。
第２図に示した例では、ｍｏｖ命令によってレジスタａｘに即値Ａを書込み、書込んだ即値Ａをｐｕｓｈ命令によってスタック上にプッシュしている。また、同様に、ｍｏｖ命令によってレジスタｂｘに即値Ｂを書込み、書込んだ即値Ｂをｐｕｓｈ命令によってスタック上にプッシュしている。即値Ａ及び即値Ｂを何らかの文字コードに対応させることによって、スタック上に所望の文字列を作成することが可能となり、作成した文字列を外部コマンドとして実行するようにしている。
したがって、前述のような処理を実行する命令コード群をデータ処理装置１０により検出する場合は、レジスタ及びスタックの状態を監視することによって、不正処理を実行する外部コマンドの文字列がスタック上に作成されようとしているか否かを検出することができる。なお、本実施の形態では、受信したデータを保護対象ＣＰＵの命令コードであると解釈し、実際のレジスタ及びスタックの状態を、仮想ＣＰＵ実行環境部１１ａ内の仮想スタック及び仮想レジスタに反映させることによって監視するようにしている。
そして、前述のような命令コード群はコンパイラによって生成される一般的なコードではないため、データ処理装置１０がこのような命令コード群を検出した場合、不正コードが含まれている蓋然性が高いと判定する。
第３図は解析対象データの構成を説明する模式図である。保護対象ＣＰＵで使用される命令コードの命令長は必ずしも一定ではなく、様々な命令長の命令コードを使用する場合がある。また、受信するデータには、例えば、画像データ、文書データ等の命令コードではない単なるデータが含まれている場合もある。したがって、解析対象とするデータの読出し位置を適切に設定しないときは、命令コードを正しく解釈できない虞があり、不正コードの有無についての判定を誤る場合が生じる。
そこで、本実施の形態では、単なるデータと命令コードとの境界及び２つの命令コード間の境界（命令境界）を正しく把握するために、バッファメモリ１３に記憶させた解析対象のデータを１バイトずつ読込み、それをある命令コードの先頭バイトとみなしてデータの解析を進める。前述した命令テーブルを参照することにより、読込んだ１バイトのデータから次の命令コードの位置が分かるため、順次的に命令コードを把握することが可能となり、解析対象データを複数の命令コードが連続した１つの並び（命令系列）と解釈することができる。また、１バイトずつデータの読込み位置をずらしながら解釈を行うため、先頭バイトの位置がそれぞれ異なる複数の命令系列を順次的に派生させることができ、それらの命令系列の中に含まれることとなる正しい命令境界を持つ命令系列について解析を行うことが可能となる。
以下、第３図を用いて具体的に説明する。第３図に示した解析対象データは、先頭から４バイトの単なるデータ、２バイトの命令コード（命令１）、４バイトの命令コード（命令２）、４バイトの命令コード（命令３）、１バイトの命令コード（命令４）…が連続したデータである。まず、解析開始バッファ位置をｂ１に設定して１バイトのデータを読込み、命令内容、次の命令コードの位置、及びその命令コードで使用されるパラメータ等の情報を取得するとともに、ｂ１を先頭バイトとした命令系列１についての解析を始める。そして、解析開始バッファ位置をｂ２，ｂ３，ｂ４…と順次的にずらしながら、各読込み位置が先頭バイトとなる命令系列２、命令系列３、命令系列４…についての解析を同時並行して行う。第３図に示した例では、ｂ５の位置を先頭バイトとした命令系列５が正しい命令コードの並びとなり、命令系列５を解析したときに外部コマンドの文字列を生成させるような命令コード群が検出された場合に、不正コードを検出したと判定する。
なお、ｂ７から始まるデータ系列７、ｂ１１から始まるデータ系列１１、及びｂ１５から始まるデータ系列１５等はデータ系列５の一部として含まれているため、データの解析を省略することができる。
以下では、データ処理装置１０による不正コードの検出手順について説明する。第４図及び第５図はデータ処理装置１０による不正コードの検出手順を説明するフローチャートである。外部ネットワークからのデータを通信インタフェース１５ａにて受信した場合、まず、読込みデータ位置、及び解析開始位置を初期化し（ステップＳ１）、バッファメモリ１３へデータを読込む（ステップＳ２）。この初期段階での読込みでは、バッファメモリ１３のバッファサイズ分だけデータを読込む。そして、読込データ位置にバッファサイズを加算した位置を次の読込データ位置として設定する（ステップＳ３）。また、解析中の命令系列がある場合には、その命令系列の集合を初期化する（ステップＳ４）。
そして、解析開始バッファ位置のデータが受信したデータの終端であるか否かを判断する（ステップＳ５）。解析開始バッファ位置のデータが終端した場合（Ｓ５：ＹＥＳ）、本フローチャートによる不正コードの検出処理を終了し、解析開始バッファ位置のデータが終端していない場合（Ｓ５：ＮＯ）、解析開始バッファ位置のデータを１バイト読込む（ステップＳ６）。次いで、読込んだ１バイトのデータに基づいて次の命令開始位置、命令の種類、及びパラメータを取得し、それらをメモリ１２に記憶させる（ステップＳ７）。
次いで、ＣＰＵ１１は、解析中の命令系列の中で、現在位置が記憶させた次の開始位置に一致する命令系列があるか否かを判断する（ステップＳ８）。現在位置と記憶させた次の開始位置とが一致する命令系列がある場合（Ｓ８：ＹＥＳ）、それらすべての命令系列について後述する解析・判定処理を実行する（ステップＳ１０）。
現在位置が記憶させた次の開始位置に一致する命令系列がない場合（Ｓ８：ＮＯ）、現在位置から始まる命令系列を解析・判定処理の対象とするために新しい命令系列として追加した上で（ステップＳ９）、解析・判定処理を実行する（Ｓ１０）。
次いで、書込みバッファ位置を解析開始バッファ位置とし（ステップＳ１１）、読込みデータ位置を１つだけ増加させる（ステップＳ１２）。そして、読込みデータ位置からバッファメモリ１３上の書込みバッファ位置へデータを１バイト読込む（ステップＳ１３）。次いで、解析バッファ位置を１つだけ増加させた値をバッファサイズで除算したときの余りを次の解析開始バッファ位置として設定し（ステップＳ１４）、処理をステップＳ５へ戻し、解析を繰返し行う。
第６図は解析・判定処理ルーチンの手順を説明するフローチャートである。バッファメモリ１３から読込んだ１バイトのデータが命令コードの先頭バイトに該当するものを含んだ命令系列の全てについて後述の解析処理を行う（ステップＳ２１）。解析処理については後に詳述することとするが、ここでは、読込んだ１バイトのデータを元に命令テーブルを参照して、命令の内容及び使用するパラメータ、並びに次の命令の位置等を記憶するとともに、仮想ＣＰＵ実行環境部１１ａ内の仮想スタック内の状態を監視して解析を行う。
解析処理が終了した場合、ＣＰＵ１１は解析した命令系列が終端したか否かを判断し（ステップＳ２２）、また、命令系列が終了していない場合（Ｓ２２：ＮＯ）、本解析・判定処理ルーチンを終了して、第５図のステップＳ１１の処理へ移行させる。
また、命令系列が終端したと判定した場合（Ｓ２２：ＹＥＳ）、後述する判定処理を行う（ステップＳ２３）。そして、ＣＰＵ１１は、その判定処理の結果を受けて不正コードを検出したか否かを判断し（ステップＳ２４）、不正コードを検出していないと判断した場合（Ｓ２４：ＮＯ）、現在の命令系列を削除し（ステップＳ２６）、不正コードを検出したと判断した場合（Ｓ２４：ＹＥＳ）、不正コードを検出した旨の情報を出力する（ステップＳ２５）。情報の出力は、通信インタフェース１５ｂを介して内部ネットワークに接続された情報処理装置へ送信する構成であってもよく、また、データ処理装置１０に文字情報として表示する表示部、又は光を放出して報知する表示灯を設けて出力する構成であってもよい。また、不正コードを検出した場合には通信を遮断するような処理を行う構成としても良い。
第７図は不正コードの一例を示す模式図である。第７図（ａ）は実際の不正コードの一部を示している。ここで、注目すべき点は、ラベル＜Ｓｈｅｌｌｃｏｄｅ＋２１１＞の処理でスタック上に即値（０ｘ６８７３２ｆ６ｅ）をプッシュしていること、及びラベル＜Ｓｈｅｌｌｃｏｄｅ＋２１６＞の処理でスタック上に即値（０ｘ６９６２２ｆ２ｆ）をプッシュしていることである。
すなわち、第７図（ｂ）に示したように、ラベル＜Ｓｈｅｌｌｃｏｄｅ＋２１１＞の処理が実行された段階で、スタックの低位側から順に”ｎ”，”／”，”ｓ”，”ｈ”という４バイトの文字列が作成され、ラベル＜Ｓｈｅｌｌｃｏｄｅ＋２１６＞の処理が実行された段階で、スタックの低位側から順に”／”，”／”，”ｂ”，”ｉ”，”ｎ”，”／”，”ｓ”，”ｈ”という８バイトの文字列が作成されることとなる。
そして、ラベル＜Ｓｈｅｌｌｃｏｄｅ＋２３１＞の処理において、続くｉｎｔ命令で使用される機能番号が指定され、ラベル＜Ｓｈｅｌｌｃｏｄｅ＋２３３＞の処理でシステムコールが呼出され、作成した文字列（／／ｂｉｎ／ｓｈ）で指定されるプログラム（外部コマンド）が実行される構成となっている。
第８図は不正コードの他の例を示す模式図である。第８図（ａ）は実際の不正コードの一部を示している。この例では、ラベル＜ｂｓｄｃｏｄｅ＋１１＞及びラベル＜ｂｓｄｃｏｄｅ＋１８＞の処理によって２つの即値をそれぞれレジスタに書込み、ラベル＜ｂｓｄｃｏｄｅ＋２２＞の処理でそれら２つの即値の論理演算を行い、ラベル＜ｂｓｄｃｏｄｅ＋２４＞の処理でスタックへ論理演算の結果をプッシュしている。この段階でスタックへプッシュするレジスタの値は０ｘ６８７３２ｆ２ｆであり、スタックの低位側から順に”／”，”／”，”ｓ”，”ｈ”という４バイトの文字列が作成されることとなる（第８図（ｂ）参照）。
また、ラベル＜ｂｓｄｃｏｄｅ＋２５＞の処理によって３つ目の即値（０ｘ６１ａ０ｂ４９）をレジスタに書込み、ラベル＜ｂｓｄｃｏｄｅ＋３０＞の処理において、ラベル＜ｂｓｄｃｏｄｅ＋１１＞の処理で書込んだ即値との論理演算を行い、ラベル＜ｂｓｄｃｏｄｅ＋３２＞の処理でスタックへ論理演算の結果をプッシュしている。この段階でスタックへプッシュするレジスタの値は０ｘ６ｅ６９６２２ｆであり、スタックの低位側から順に”／”，”ｂ”，”ｉ”，”ｎ”，”／”，”／”，”ｓ”，”ｈ”という８バイトの文字列が作成されることとなる（第８図（ｂ）参照）。
そして、ラベル＜ｂｓｄｃｏｄｅ＋４０＞の処理において、続くｉｎｔ命令で使用される機能番号が指定され、ラベル＜ｂｓｄｃｏｄｅ＋４３＞の処理でシステムコールが呼出され、作成した文字列（／ｂｉｎ／／ｓｈ）によるプログラム（外部コマンド）が実行される構成となっている。
第７図及び第８図に示した命令コード群に共通した特徴は、（１）即値を直接的に、又は間接的にスタック上へ２回以上プッシュしていること、（２）ｃａｌｌ命令が実行されることなくｉｎｔ命令が実行されていることである。すなわち、（１）によって、攻撃者が実行させたい外部コマンド名の文字列をスタック上に作成し、（２）によってシステムコールを呼び出して当該外部コマンドを実行させるようにしている。また、外部コマンド名にはパスの区切りを示す”／”が含まれていることが多いため、その文字コードが外部コマンド名の文字列に含まれているか否かという条件を課すことによって誤検出率を小さくして、検出精度を高めることも可能である。また、ｉｎｔ命令で使用される機能番号に０ｘ３ｂが使われているか否かという条件を更に課して、検出精度を更に高める構成であっても良い。
なお、（２）において、ｉｎｔ命令が実行される前にｃａｌｌ命令が実行された場合には、作成した文字列は呼出し先の関数へ引渡すパラメータと解釈できるため、不正コードであると判定することは出来ない。
第９図〜第１１図は解析処理ルーチンの処理手順を説明するフローチャートである。データ処理装置１０のＣＰＵ１１は、前述の命令テーブルを参照することにより、バッファメモリ１３から読込んだ１バイトのデータから始まる命令コードがｍｏｖ命令であるか否かを判断する（ステップＳ３１）。ｍｏｖ命令であると判断した場合（Ｓ３１：ＹＥＳ）、当該ｍｏｖ命令で使用されるパラメータを参照し、レジスタへの即値の読込みであるか否かを判断する（ステップＳ３２）。レジスタへの即値の読込みであると判断した場合（Ｓ３２：ＹＥＳ）、仮想ＣＰＵ実行環境部１１ａの仮想レジスタに即値を記憶させ（ステップＳ３３）、処理を解析・判定処理ルーチンへ戻す。
レジスタへの即値の読込みでないと判断した場合（Ｓ３２：ＮＯ）、レジスタへのメモリの値の読込みであるか否かを判断する（ステップＳ３４）。レジスタへのメモリの値の読込みであると判断した場合（Ｓ３４：ＹＥＳ）、対応する仮想レジスタに０を記憶させ（ステップＳ３５）、処理を解析・判定処理ルーチンへ戻す。
レジスタへのメモリの値の読込みでないと判断した場合（Ｓ３４：ＮＯ）、レジスタへのレジスタの値の読込みか否かを判断する（ステップＳ３６）。レジスタへのレジスタの値の読込みであると判断した場合（Ｓ３６：ＹＥＳ）、対応する仮想レジスタに仮想レジスタの値を記憶させ（ステップＳ３７）、処理を解析・判定処理ルーチンへ戻す。また、レジスタの値の読込みでないと判断した場合も（Ｓ３６：ＮＯ）、処理を解析・判定処理ルーチンへ戻す。
ステップＳ３１において、ｍｏｖ命令でないと判断した場合（Ｓ３１：ＮＯ）、バッファメモリ１３から読込んだ１バイトのデータから始まる命令コードがｌｅａ命令であるか否かを判断する（ステップＳ３８）。ここで、ｌｅａ命令とは有効なアドレスをロードするための命令である。ｌｅａ命令であると判断した場合（Ｓ３８：ＹＥＳ）、当該ｌｅａ命令によって即値を読込む結果となるか否かを判断する（ステップＳ３９）。即値を読込む結果となる場合（Ｓ３９：ＹＥＳ）、対応する仮想レジスタへ即値を記憶させ（ステップＳ４０）、処理を解析・判定処理ルーチンへ戻す。また、即値を読込む結果とならない場合（Ｓ３９：ＮＯ）、処理を解析・判定処理ルーチンへ戻す。
ステップＳ３８において、ｌｅａ命令でないと判断した場合（Ｓ３８：ＮＯ）、バッファメモリ１３から読込んだ１バイトのデータから始まる命令コードがｐｕｓｈ命令であるか否かを判断する（ステップＳ４１）。ｐｕｓｈ命令であると判断した場合（Ｓ４１：ＹＥＳ）、当該ｐｕｓｈ命令で使用されるパラメータを参照することにより、レジスタの値をプッシュするか否かを判断する（ステップＳ４２）。レジスタの値をプッシュする場合（ステップＳ４２：ＹＥＳ）、対応する仮想レジスタの値は０であるか否かを判断する（ステップＳ４３）。対応する仮想レジスタの値が０である場合（Ｓ４３：ＹＥＳ）、処理を解析・判定処理ルーチンへ戻す。また、対応する仮想レジスタの値が０でない場合（Ｓ４３：ＮＯ）、仮想レジスタの値を仮想スタックへプッシュする（ステップＳ４４）。そして、プッシュカウンタを１だけ増加させ（ステップＳ４５）、処理を解析・判定処理ルーチンへ戻す。ここで、プッシュカウンタとは、仮想スタックへプッシュする回数を数えるためのカウンタである。
また、ステップＳ４２において、レジスタの値をプッシュしないと判断した場合（Ｓ４２：ＮＯ）、即値をプッシュするか否かを判断する（ステップＳ４６）。即値をプッシュする場合（Ｓ４６：ＹＥＳ）、プッシュされる値を仮想スタックへプッシュし（ステップＳ４７）、プッシュカウンタを１だけ増加させる（ステップＳ４８）。そして、処理を解析・判定処理ルーチンへ戻す。また、即値をプッシュしないと判断した場合（Ｓ４６：ＮＯ）、処理を解析・判定処理ルーチンへ戻す。
ステップＳ４１において、ｐｕｓｈ命令でないと判断した場合（Ｓ４１：ＮＯ）、バッファメモリ１３から読込んだ１バイトのデータから始まる命令コードがｃａｌｌ命令であるか否かを判断する（ステップＳ４９）。ｃａｌｌ命令であると判断した場合（Ｓ４９：ＹＥＳ）、仮想スタック及びプッシュカウンタを初期化して（ステップＳ５０）、処理を解析・判定処理ルーチンへ戻す。
ステップＳ４９でｃａｌｌ命令でないと判断した場合（Ｓ４９：ＮＯ）、バッファメモリ１３から読込んだ１バイトのデータから始まる命令コードが演算命令であるか否かを判断する（ステップＳ５１）。検出すべき演算命令には、算術演算に関する命令、及び論理演算に関する命令が含まれる。演算命令であると判断した場合（Ｓ５１：ＹＥＳ）、当該演算命令による演算結果をレジスタへ書込むか否かを判断する（ステップＳ５２）。演算結果をレジスタへ書込むと判断した場合（Ｓ５２：ＹＥＳ）、対応する演算命令を仮想レジスタを用いて実行し（ステップＳ５３）、処理を解析・判定処理ルーチンへ戻す。また、演算結果をレジスタに書込まない場合（Ｓ５２：ＮＯ）、処理を解析・判定処理ルーチンへ戻す。
ステップＳ５１において、演算命令でないと判断した場合（Ｓ５１：ＮＯ）、バッファメモリ１３から読込んだ１バイトのデータから始まる命令コードがｉｎｔ命令であるか否かを判断する（ステップＳ５４）。ｉｎｔ命令であると判断した場合（Ｓ５４：ＹＥＳ）、ｉｎｔ命令を検出した旨をメモリ１２に記憶させ（ステップＳ５５）、処理を解析・判定処理ルーチンへ戻す。
なお、プッシュカウンタが１より大きい状態でｉｎｔ命令が検出された場合には、前述のシェルコード又はシステムコールに引き渡すパラメータを表す文字コードが生成されている蓋然性が高くなるので、続く解析・判定処理ルーチンのステップＳ２２の判断において命令系列が終端したものとみなし、判定処理（Ｓ２３）を行わせる。
ステップＳ５４においてｉｎｔ命令でないと判断した場合（Ｓ５４：ＮＯ）、バッファメモリ１３から読込んだ１バイトのデータから始まる命令コードがｒｅｔ命令、ｌｒｅｔ命令、ｉｎｔ３命令、又はｉｒｅｔ命令の何れかであるか否かを判断する（ステップＳ５６）。これらの命令は何れも呼出先のルーチンから呼出元のルーチンへ制御を戻すための命令を表している。前述の何れかの命令である場合には（Ｓ５６：ＹＥＳ）、現在解析している命令系列を終端させ（ステップＳ５７）、処理を解析・判定処理ルーチンへ戻す。また、前述の何れの命令でもないと判断した場合（Ｓ５６：ＮＯ）、命令系列を終端させることなく、処理を解析・判定処理ルーチンへ戻す。
第１２図は判定処理ルーチンの処理手順を説明するフローチャートである。データ処理装置１０のＣＰＵ１１は、前述の解析処理ルーチンによって終端した命令系列にｉｎｔ命令が検出されているか否かを判断する（ステップＳ６１）。ｉｎｔ命令が検出されていない場合（Ｓ６１：ＮＯ）、割込み処理によりシステムコールが呼出されて外部コマンドが実行されることがないため、不正コード無しと判定する（ステップＳ６２）。
解析処理により終端した命令系列にｉｎｔ命令が検出されている場合（Ｓ６１：ＹＥＳ）、ＣＰＵ１１は、プッシュカウンタが１より大きいか否かを判断する（ステップＳ６３）。プッシュカウンタが０又は１であると判断した場合（Ｓ６３：ＮＯ）、攻撃者が実行させたい外部コマンド名の文字列が生成されていないとみなすことができるため、不正コード無しと判定する（Ｓ６２）。
プッシュカウンタが１よりも大きいと判断した場合（Ｓ６３：ＹＥＳ）、仮想スタックにパスの区切りを表す”／”に対応する文字コードがあるか否かを判断する（ステップＳ６４）。仮想スタックに前記文字コードがない場合（Ｓ６４：ＮＯ）、不正コード無しと判定する（Ｓ６４）。また、仮想スタックに前記文字コードがある場合（Ｓ６４：ＹＥＳ）、割込み処理によってシステムコールが呼出されて外部コマンドが実行される蓋然性が高いと判断し、不正コード有りと判定する（ステップＳ６５）。
なお、本実施の形態では、不正コードの検出精度を高めるために外部コマンドにパスの区切りを示す”／”が仮想スタックに含まれているか否かを判断して傍証を行っているが、ステップＳ６３において、プッシュカウンタが１よりも大きいことを検出した段階で何らかの外部コマンド名の文字列が生成されたと判断し、不正コード有りと判定するようにしても良い。したがって、検出精度が要求されるような環境での使用が予定されている場合にはステップＳ６４による傍証まで行い、検出精度が要求されないような環境での使用が予定されている場合にはステップＳ６４による傍証を省略することも可能である。
また、本実施の形態では、パスの区切りを表す文字コードの例として”／”を挙げたが、異なる種類の保護対象ＣＰＵでは、パスの区切りを示す文字コードとして”￥”が使用されている場合もあり、傍証に用いる文字コードは必ずしも”／”に限定されず、保護対象ＣＰＵの種類に応じて予め設定しておくことが必要となる。
（第２実施の形態）
実施の形態１では、ルータ、ブロードバンドルータ、スイッチ等のデータ通信で利用される中継装置に本発明を適用した形態について説明したが、パーソナルコンピュータ、サーバ装置、携帯電話機、ＰＤＡ等の通信機能を有した情報処理装置に適用することも可能である。
第１３図は本実施の形態に係るデータ処理装置の構成を説明する模式図である。図中１００は、パーソナルコンピュータのような情報処理装置であり、情報処理装置１００は、ＣＰＵ１０１を備えており、バス１０２を介して、ＲＯＭ１０３、ＲＡＭ１０４、操作部１０５、表示部１０６、通信部１０７、内部記憶装置１０８、及び補助記憶装置１０９等の各種ハードウェアに接続されている。ＣＰＵ１０１は、ＲＯＭ１０３に格納された制御プログラムに従って、それらのハードウェアを制御する。ＲＡＭ１０４は、ＳＲＡＭ又はフラッシュメモリ等で構成され、ＲＯＭ１０３に格納された制御プログラムの実行時に発生するデータ、通信部１０７を介して受信した外部ネットワークからの各種のデータを受信する。
操作部１０５は、キーボード、マウス等の入力装置であり、表示部１０６は、ＣＲＴ、液晶ディスプレイ等の表示装置である。操作部１０５及び表示部１０６は、例えば、送信すべきデータの入力及び表示をする際に利用される。通信部１０７は、モデム等の回線終端装置を備えており、外部ネットワークとの間でやり取りされる各種データの送受信を制御する。
補助記憶装置１０９は、本発明のコンピュータプログラム等を記録したＦＤ、ＣＤ−ＲＯＭ等の記録媒体Ｍからコンピュータプログラム等を読取るＦＤドライブ、ＣＤ−ＲＯＭドライブ等からなり、読取られたコンピュータプログラム等は、内部記憶装置１０８に格納される。内部記憶装置１０８に格納されたコンピュータプログラムは、ＣＰＵ１０１からの指示に応じて適宜ＲＡＭ１０４に読込まれて実行される。ＣＰＵ１０１が本発明のコンピュータプログラムを実行することで情報処理装置１００は、通信部１０７にて受信したデータから不正コードを検出する装置として機能する。
前述のコンピュータプログラムは、情報処理装置１００の起動時に自動的にＲＡＭ１０４に読込まれる常駐型のプログラムであることが望ましく、通信部１０７にて外部からデータを受信した際に、自動的に不正コードを検出するようにしておくとよい。なお、不正コードの検出手順については、実施の形態１で説明した通りであるので説明を省略する。
なお、本発明のコンピュータプログラムは、記録媒体Ｍにより提供される形態として説明したが、通信部１０７を介した通信手段によって提供される形態であってもよい。
本実施の形態では、パーソナルコンピュータのような情報処理装置１００を利用して不正コードを検出する構成としたが、パーソナルコンピュータの他、携帯電話機、ＰＤＡ、コンピュータゲーム機、車載通信装置、各種の情報家電に適用できることは勿論である。
また、本発明のコンピュータプログラムをＦＤ、ＣＤ−ＲＯＭ等の記録媒体に記録させて提供することにより、コンピュータウィルスを検出するアプリケーションソフトウェアのパッケージとして提供することも可能である。
【産業上の利用可能性】  第１発明、第２発明、第８発明、及び第９発明による場合は、記憶手段からデータをバイト単位で順次的に読出して不正処理を実行する命令コードが含まれているか否かを判定する際、読出し位置が異なる複数のデータ系列について、例えば、外部コマンド及びシステムコールに引き渡すパラメータ等の不正処理を実行する際に用いる文字列を生成するか否かを検出するようにしている。したがって、通常のデータ（実行コード）には見られないような普遍的構造に着目して検出を行うことで、未知の不正コードが現れたときでも、不正コードの本質的な処理内容が変わらない限り対処することが可能となる。また、本発明では命令コード毎に検出を行うため、検出の開始位置をどこに設定するかによって検出結果が異なる場合が生じるが、読出し位置を順次異ならせた複数のデータ系列について検出するようにしているため、誤った判定が少なくなり、検出精度を高めることができる。
第３発明による場合は、命令コードの１バイト目のデータと、命令コードのバイト長との対応関係を記憶したテーブルを備えているため、データの読出し位置がある命令系列において命令コードの先頭バイト以外に位置しているときには、不正コードの検出を行わないようにすることができ、処理速度の向上が図れる。
第４発明による場合は、文字コードを生成する処理を実行する命令コードの後に、システムコールを起動する命令コードが含まれているか否かを検出するようにしているため、生成した文字コードからなるパラメータをシステムコールに引き渡している蓋然性が高く、不正処理を実行させる命令コードが含まれていると判定することができる。
第５発明による場合は、生成された文字コードに所定の文字コードを含んでいるか否かを判定するようにしているため、検出精度を高めることができる。
第６発明による場合は、生成する文字コードをデータ中の即値に対応させているため、レジスタ領域及びスタック領域を監視することで、容易に不正コードの有無を検出することが可能となり、検出精度を高めることができる。
第７発明による場合は、検出したデータ系列が不正処理を実行するデータであると判定した場合、外部へその旨を報知するようにしている。したがって、不正コードを検出した時点で通信の遮断等を行って、当該不正コードにより生じる不具合を防止することが可能である。
【図１】
2004077294.tif 000003
【図２】
2004077294.tif 000004
【図３】
2004077294.tif 000005
【図４】
2004077294.tif 000006
【図５】
2004077294.tif 000007
【図６】
2004077294.tif 000008
【図７】
2004077294.tif 000009
【図８】
2004077294.tif 000010
【図９】
2004077294.tif 000011
【図１０】
2004077294.tif 000012
【図１１】
2004077294.tif 000013
【図１２】
2004077294.tif 000014
【図１３】
2004077294.tif 000015
【国際調査報告】
2004077294.tif 000016
2004077294.tif 000017
2004077294.tif 000018
2004077294.tif 000019