(57)【要約】【課題】従来、不正コード混入に対し、ソフトウェア開発工程時のデバッグや、試験工程での動的解析で予防する事は不可能で、静的解析での予防はプログラムのソースコードが全て必要で、ソースコードが存在しないバイナリコードに対する不正コード検出は不可能であった。【解決手段】バイナリコードに対しバイナリコード分析器及び関数呼出し・システムコール抽出器で静的解析をし、呼出される関数やシステムコール、ＡＰＩの呼出しと呼出し時の引数値及び条件を抽出し、一方で内部仕様書では内部仕様から、外部仕様書、機能定義書、マニュアルでは、これらとファンクションデータベースから外部仕様や機能定義から呼出される関数やシステムコール、ＡＰＩの呼出しと呼出し時の引数値及び条件を仕様書・定義書解読器で抽出、両抽出結果を正／不正コード判別器で比較し、結果を元に不正コードの検出結果を出力する。【選択図】図１
2009098851.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行コード（以降バイナリコードと記載する）を以降の処理に適合する形式に変換処理するバイナリコード分析器と、前記バイナリコード分析器の出力データから関数やシステムコール、ＡＰＩ（アプリケーションプログラミングインタフェース）の呼び出しと呼び出し時の引数値、呼び出し時の条件を抽出する関数呼び出し・システムコール抽出器と、外部仕様や機能定義から呼び出され得る関数やシステムコール、ＡＰＩと呼び出し時に取り得る引数値、呼び出し時の条件のファンクションデータを保有したファンクションデータベースと、内部仕様書の場合は内部仕様書から、外部仕様書、機能定義書、マニュアルの場合は、外部仕様書、機能定義書、マニュアルとファンクションデータベースのファンクションデータとから関数やシステムコール、ＡＰＩの呼び出しと呼び出し時の引数値、呼び出し時の条件を抽出する仕様書・定義書解読器と、前記関数呼び出し・システムコール抽出器による抽出結果と前記仕様書・定義書解読器による抽出結果を比較し、仕様外の関数やシステムコール、ＡＰＩ呼び出しが行われていないかの正／不正コードを判別する正／不正コード判別器と、前記正／不正コード判別器による判別結果を出力する出力器を具備する事を特徴とする不正コード検出システム。
【請求項２】
不正と判断され得るが、実際には不正ではない関数やシステムコール、ＡＰＩの呼び出しと呼び出し時の引数値、呼び出し時の条件のホワイトリストを蓄積したホワイトリストデータベースを具備し、前記正／不正コード判別器は正／不正コードを判別する際にホワイトリストを参照する事を特徴とする請求項１に記載の不正コード検出システム。
【請求項３】
不正である関数やシステムコール、ＡＰＩの呼び出しと呼び出し時の引数値、呼び出し時の条件のブラックリストを蓄積したブラックリストデータベースを具備し、前記正／不正コード判別器は正／不正コードを判別する際に前記ブラックリストを参照する事を特徴とする請求項１又は２に記載の不正コード検出システム。
【請求項４】
前記ファンクションデータベースをイントラネットまたはインターネット上に配置し多数の開発者間で共有してファンクションデータの登録や更新を可能し、仕様書・定義書解読器が外部仕様書、機能定義書、マニュアルとファンクションデータとから関数やシステムコール、ＡＰＩの呼び出しと呼び出し時の引数値、呼び出し時の条件を抽出する際はイントラネットまたはインターネット上の前記ファンクションデータベースからファンクションデータを取得する構成にされた事を特徴とする請求項１に記載の不正コード検出システム。
【請求項５】
前記ホワイトリストデータベースをイントラネットまたはインターネット上に配置し、多数の開発者間で共有してホワイトリストデータの登録や更新を可能し、前記正／不正コード判別器が正／不正コードを判別する際に参照するホワイトリストデータは、イントラネットまたはインターネット上の前記ホワイトリストデータベースから取得する構成にされた事を特徴とする請求項２に記載の不正コード検出システム。
【請求項６】
前記ブラックリストデータベースをイントラネットまたはインターネット上に配置し、多数の開発者間で共有してブラックリストデータの登録や更新を可能し、前記正／不正コード判別器が正／不正コードを判別する際に参照するブラックリストデータは、イントラネットまたはインターネット上の前記ブラックリストデータベースから取得する構成にされた事を特徴とする請求項３に記載の不正コード検出システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、オペレーティングシステムにおけるアプリケーションプログラム等を開発する際の評価試験時等に不正コードを検出する不正コード検出システムに関するものである。
【背景技術】
【０００２】
従来のバックドアやロジックボム等の不正コードに対する対策は、プログラムを実行し、プログラムの挙動を監視し、不正なリソースへのアクセス［不正なシステムコールやＡＰＩ(アプリケーションプログラミングインタフェース)呼び出し］を検出する事によって、不正コードの実行を防止していた。その為、従来技術は、事前に正当なリソースへのアクセスリストを作成しておき、実行時にアクセスリストと比較しながら、正当なリソースへのアクセスであるか、不当なリソースへのアクセスであるかを判断していた。その為、プログラム開発者が、正当なリソースへのアクセスリストを作成する必要があった。そこで、従来技術は、正当なリソースへのアクセスリストを高精度に作成する為に、一度正常なプログラムを実行し、リソースへのアクセスを行う際のシステムコールやＡＰＩ呼び出しと、呼び出し時の０個以上の引数を抽出、蓄積していた（例えば、特許文献１）。
【０００３】
その他、Ｗｅｂアプリケーションに対して従来技術は、関数呼び出し時の引数の定義情報を作成し、関数呼び出しが行われる度に実引数と引数の定義情報の比較をする事によって、不正な関数呼び出しが行われないようにしていた。さらには、Ｗｅｂアプリケーション監視プログラムがプロセスの挙動を監視し、引数の比較が正常に行われずにプロセス内で異常が発生した際には、Ｗｅｂアプリケーション監視プログラムがプロセスを自動的に再起動していた（例えば、特許文献２）。
【０００４】
また、プログラムを実行し、プログラムの挙動を関しする動的解析とは別に、静的解析による不正コードに対する対策も存在する。ソースコードを独自の中間言語にコンパイルし、中間コードに対してデータフロー解析や制御フロー解析などの静的解析を行い、予め定められた脆弱性ルール（但し、カスタマイズは可能）に従ってプログラムの脆弱性を発見する事によって、セキュリティリスクを軽減する方法も提案されている（例えば、非特許文献１）。
【０００５】
【特許文献１】特開2003-330736号公報  第4頁〜5頁
【特許文献２】特開2004-126958号公報  第2頁  請求項3・5
【非特許文献１】“FORTIFY SECURE CODE ANALYSIS”,フォーティファイ・ソフトウェア株式会社, http://www.fortifysoftware.co.jp/product.html
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来のプログラムを実行し、プログラムの挙動を監視する事によって不正コードを検出する方法は、ソフトウェアをリリースした後に不正コードを検知し、不正コードの実行を防止する方法である。その為、従来の技術では、ソフトウェア開発工程のデバッグや試験工程において不正コードを検出する事ができず、不正コードの混入を予防する事が不可能であるという問題点がある。つまり、従来技術では不正コードの混入に対して事後処理的な対応しか取れず、事前処理的な対応を取れないと言う問題点がある。
一方、ソースコードに対して静的解析を行う事によってプログラムの不正コードや脆弱性を発見する方法は、必ずソースコードを必要とする。しかし、近年は外部委託開発やオフショア開発、さらには市販のソフトウェアコンポーネントの利用やオープンライブラリの利用により、バイナリコードのみを入手でき、ソースコードを入手できないケースが発生している。そのため、バイナリコードに不正コードを埋め込まれた状態で提供される場合には、不正コードの検出が不可能であるという問題がある。今後、ソフトウェアの高機能化に伴い、開発を要するプログラム量が増加し、必然的に外部委託開発やオフショア開発、市販のソフトウェアコンポーネントの利用、オープンライブラリの利用が進み、バイナリコードしか入手できない状況が増加する。その為、ソースコードを必要とする方法では、今後のソフトウェア開発に対応していけないと言う問題点がある。
【０００７】
この発明は上記のような問題点を解決するためになされたもので、プログラムのバイナリコードに対して静的解析を行い、仕様書や定義書で定義されていない関数やシステムコール、ＡＰＩの呼び出しや、仕様書や定義書で定義されていない引数値で関数やシステムコール、ＡＰＩの呼び出しが行われていないかをチェックする事によって不正コードの検出を行う事を目的とする。この発明により、外部委託開発やオフショア開発、市販のソフトウェアコンポーネントの利用、オープンライブラリの利用が進み、バイナリコードしか入手できない状況においても不正コードを、プログラムの開発工程中に検出する事を可能とする事を目的とする。
【課題を解決するための手段】
【０００８】
この発明に係る不正コード検出システムは、
バイナリコードを以降の処理に適合する形式に変換処理するバイナリコード分析器と、前記バイナリコード分析器の出力データから関数やシステムコール、ＡＰＩの呼び出しと呼び出し時の引数値、呼び出し時の条件を抽出する関数呼び出し・システムコール抽出器と、外部仕様や機能定義から呼び出され得る関数やシステムコール、ＡＰＩと呼び出し時に取り得る引数値、呼び出し時の条件のファンクションデータを保有したファンクションデータベースと、内部仕様書の場合は内部仕様書から、外部仕様書、機能定義書、マニュアルの場合は、外部仕様書、機能定義書、マニュアルとファンクションデータベースのファンクションデータとから関数やシステムコール、ＡＰＩの呼び出しと呼び出し時の引数値、呼び出し時の条件を抽出する仕様書・定義書解読器と、前記関数呼び出し・システムコール抽出器による抽出結果と前記仕様書・定義書解読器による抽出結果を比較し、仕様外の関数やシステムコール、ＡＰＩ呼び出しが行われていないかの正／不正コードを判別する正／不正コード判別器と、前記正／不正コード判別器による判別結果を出力する出力器を具備する。
【発明の効果】
【０００９】
この発明に係る不正コード検出システムによれば、
バイナリコードに対して関数呼び出し・システムコール抽出器が、静的解析を行って、関数やシステムコール、ＡＰＩの呼び出しと呼び出し時の引数値、呼び出し時の条件を抽出し、仕様書・定義書解読器が、機能定義書や外部仕様書は、外部仕様や機能定義から呼び出され得る関数やシステムコール、ＡＰＩと呼び出し時に取り得る引数値、呼び出し時の条件のファンクションデータを保有したファンクションデータベースを参照し、内部仕様書からは関数やシステムコール、ＡＰＩの呼び出しと呼び出し時の引数値、呼び出し時の条件を抽出して、仕様書・定義書解読器の抽出内容と、関数呼び出し・システムコール抽出器の抽出内容とを比較する事によって不正コードの検出を行うようにしているので、ソフトウェア開発工程のデバッグや試験工程において不正コードを検出する事ができ、不正コードの混入を予防する事ができる。さらに、外部委託開発やオフショア開発、市販のソフトウェアコンポーネントの利用、オープンライブラリの利用が促進する事によってソースコードが入手できない状況においても不正コードの検出を行うことができる。
【発明を実施するための最良の形態】
【００１０】
実施の形態１．
図１は本発明の基本機能を示す機能構成図である。
図１において、バイナリコード分析器１０１は、プログラムの実行コードであるバイナリコード１１２を入力とし、バイナリコード１１２を以降の処理に都合の良いデータ形式に変換し、処理結果（以降バイナリコード分析結果と記載する）を関数呼び出し・システムコール抽出器１０２に引き渡す装置や機能部である。具体的には、逆アセンブルやデコンパイル（逆コンパイル）などの処理が前記バイナリコード分析器１０１において行われる。関数呼び出し・システムコール抽出器１０２は、前記バイナリコード分析器１０１によって処理された結果を元に、構造解析や、データフロー解析、制御フロー解析などを行い、「どのような条件で」、「どのような引数値を伴って」、関数やシステムコール、ＡＰＩが呼び出されるかを解析し、解析した結果（以降関数呼び出し・システムコール解析結果と記載する）を正／不正コード判別器１０３に引き渡す装置や機能部である。
【００１１】
ファンクションデータベース１０９は、ある特定の機能を実現する際に「どのような条件で」、「どのような引数値を伴って」、「どのような関数やシステムコール、ＡＰＩが呼び出されるか」に関する情報（以降ファンクションデータと記載する）が蓄積されたデータベースであり、ファンクションデータベースマネージャ１０６が前記ファンクションデータベース１０９の検索や管理をする。仕様書・定義書解読器１０５は、内部仕様書や外部仕様書、機能定義書等１１４を入力とし、内部仕様書や外部仕様書、機能定義書等１１４を解読し、仕様上「どのような条件で」、「どのような引数値を伴って」、「どのような関数やシステムコール、ＡＰＩが呼び出されるか」を分析し、分析結果（以降関数呼び出し・システムコール仕様と記載する）を正／不正コード判別器１０３に引き渡す装置や機能部である。前記仕様書・定義書解読器１０５は、必要に応じて前記ファンクションデータベース１０９に対してある特定の機能を実現する際の前記ファンクションデータを問い合わせる。
【００１２】
ホワイトリストデータベース１１０は、正当な条件で、正当な引数値を伴って、正当な関数やシステムコール、ＡＰＩを呼び出しているにも関わらず、不正な条件で、不正な引数値を伴って、不正な関数やシステムコール、ＡＰＩを呼び出していると判断されうる情報（ホワイトリスト）を蓄積したデータベースであり、ホワイトリストデータベースマネージャ１０７が、前記ホワイトリストデータベース１１０の検索や管理をする。また、ブラックリストデータベース１１１は、明らかに不正な条件で、不正な引数値を伴った、不正な関数やシステムコール、ＡＰＩの呼び出しである情報（ブラックリスト）を蓄積したデータベースであり、ブラックリストデータベースマネージャ１０８が、前記ブラックリストデータベース１１１の検索や管理をする。
【００１３】
正／不正コード判別器１０３は、前記関数呼び出し・システムコール抽出器１０２の解析である結果関数呼び出し・システムコール解析結果と前記仕様書・定義書解読器１０５の分析結果である関数呼び出し・システムコール仕様を比較し、不正な条件化での関数やシステムコール、ＡＰＩ呼び出しや不正な引数を伴った関数やシステムコール、ＡＰＩ、不正な関数やシステムコール、ＡＰＩが存在しないかを判別し、判別結果を出力器１０４に引き渡す。前記正／不正コード判別器１０３は、必要に応じて前記ホワイトリストデータベースマネージャ１０７やブラックリストデータベースマネージャ１０８に対して問い合わせを行い、前記ホワイトリストや前記ブラックリストを判別処理時の判別材料として活用する。出力器１０４は、前記正／不正コード判別器１０３による判別結果を入力とし、ユーザに分かりやすい表現形式に変換し、判別結果１１３を出力、表示する。
【００１４】
次に動作について説明する。
図２は、処理の流れとデータの流れを示したフローチャート図である。
まず前記バイナリコード分析器１０１に前記バイナリコード１１２が取り込まれ、前記バイナリコード分析器１０１で前記バイナリコード１１２に対して逆アセンブルやデコンパイル（逆コンパイル）などのバイナリコード分析処理２０２が行われ、バイナリコード分析結果２１６が生成される。前記バイナリコード分析結果２１６は、逆アセンブルによって生成されたアセンブラコードやデコンパイルによって生成されたソースコード、独自の中間コードなどを対象とする。そして、前記バイナリコード分析結果２１６に対して、前記関数呼び出し・システムコール抽出器１０２によって、構造解析や、データフロー解析、制御フロー解析などの関数呼び出し・システムコール抽出処理２０３が行われ、関数呼び出し・システムコール解析結果２１７が生成される。
【００１５】
一方、独自開発や外注受け入れ開発などにより（レビュー済みの）内部仕様書１１４ａを保有している場合には、前記仕様書・定義書解読器１０５によって前記内部仕様書１１４ａから「どのような条件で」、「どのような引数値で」、「どのような関数やシステムコール、ＡＰＩが呼び出されるか」を示す関数呼び出し・システムコール仕様２１８を生成する内部仕様書解読処理２０８が行われる。この時、前記内部仕様書１１４ａには、呼び出される関数やシステムコール、ＡＰＩや呼び出し時に取り得る引数や呼び出される条件が記載されていなければならない。そして、前記内部仕様書１１４ａが自然言語で記述されている場合には、前記仕様書・定義書解読器１０５による前記内部仕様書解読処理２０８は、自然言語処理をも行う。
【００１６】
また、オフショア開発や外注委託開発、オープンソースの利用、オープンライブラリの利用、市販のソフトウェアコンポーネントの利用により、前記内部仕様書１１４ａが存在しない場合には、前記仕様書・定義書解読器１０５によって（レビュー済みの）外部仕様書や機能定義書、さらにはマニュアル等１１４ｂと前記ファンクションデータベース１０９に蓄積されたファンクションデータ２１３（例えば図３）とから前記関数呼び出し・システムコール仕様２１８を生成する外部仕様書・定義書解読処理２０９が行われる。この時、前記外部仕様書・機能定義書等１１４ｂには、実現されるべき機能や機能の呼び出し手段が記載されていなければならない。そして、前記外部仕様書・機能定義書等１１４ｂが自然言語で記述されている場合には、前記仕様書・定義書解読器１０５による前記外部仕様書・定義書解読処理２０９は、自然言語処理をも行う。同時に、前記ファンクションデータ２１３には、ある機能を実現する際に「どのような条件で」、「どのような引数値を伴って」、「どのような関数やシステムコール、ＡＰＩが呼び出されるか」が記載されている。そして、前記ファンクションデータ２１３は、前記仕様書・定義書解読器１０５によって前記ファンクションデータベースマネージャ１０６を介して前記ファンクションデータベース１０９から取得される。
【００１７】
前記関数呼び出し・システムコール解析結果２１７と前記関数呼び出し・システムコール仕様２１８とが揃った時点で、前記正／不正コード判別器１０３によって、前記関数呼び出し・システムコール解析結果２１７と前記関数呼び出し・システムコール仕様２１８との比較が行われ、正／不正コード判断処理２０４が行われ、正／不正コード判断結果２１９が生成される。前記ホワイトリスト２１５（例えば図４）や前記ブラックリスト２１４（例えば図５）が存在する場合には、前記ホワイトリスト２１５や前記ブラックリスト２１４が前記正／不正コード判断処理２０４時に正／不正コード判断材料として利用される。
【００１８】
前記ホワイトリスト２１５には、正当な条件で、正当な引数値を伴った、正当な関数やシステムコール、ＡＰＩ呼び出しに関する情報が記載されている。そして、前記ホワイトリスト２１５は、前記正／不正コード判別器１０３によって前記ホワイトリストデータベースマネージャ１０７を介して前記ホワイトリストデータベース１１０から取得される。前記ブラックリスト２１４には、不正な条件で、不正な引数値を伴った、不正な関数やシステムコール、ＡＰＩの呼び出しに関する情報が記載されている。そして、前記ブラックリスト２１４は、前記正／不正コード判別器１０３によって前記ブラックリストデータベースマネージャ１０８を介して前記ブラックリストデータベース１１１から取得される。
【００１９】
前記正／不正コード判別器１０３による正／不正コード判断処理２０４では、前記関数呼び出し・システムコール解析結果２１７にも前記関数呼び出し・システムコール仕様２１８にも記載されている関数やシステムコール、ＡＰＩ呼び出しを正当なコードと判断し、前記関数呼び出し・システムコール解析結果２１７に記載されているにも関わらず、前記関数呼び出し・システムコール仕様２１８に記載されていない関数やシステムコール、ＡＰＩ呼び出しを不正コードと判断する。ただし、前記ブラックリスト２１４が存在する場合には、前記正／不正コード判断処理２０４は、前記関数呼び出し・システムコール解析結果２１７と前記関数呼び出し・システムコール仕様２１８とを比較する前に、前記ブラックリスト２１４に記載されている関数やシステムコール、ＡＰＩ呼び出しが存在しないかを確認し、存在する場合には当該関数やシステムコール、ＡＰＩ呼び出しを不正コードとして判断する。
【００２０】
また、前記ホワイトリスト２１５が存在する場合には、前記正／不正コード判断処理２０４は、前記関数呼び出し・システムコール解析結果２１７と前記関数呼び出し・システムコール仕様２１８との比較結果で不正なコードと判断されたものの内、前記ホワイトリスト２１５に記載されている関数やシステムコール、ＡＰＩ呼び出しを不正コードとは判断しない。
そして、前記出力器１０４は、前記正／不正コード判断結果２１９をユーザの見やすい形式に変換する正／不正コード判断結果校正処理２０５によって出力情報２２０を生成し、正／不正コード判断結果表示・出力処理２０６を行う。
【００２１】
以上のように、バイナリコードに対して静的解析を行い、機能定義書や外部仕様書、内部仕様書の内容と比較する事によって不正コードの検出を行うようにしているので、ソフトウェア開発工程のデバッグや試験工程において不正コードを検出する事ができ、不正コードの混入を予防する事ができる。さらに、外部委託開発やオフショア開発、市販のソフトウェアコンポーネントの利用、オープンライブラリの利用が促進する事によってソースコードが入手できない状況においても不正コードの検出を行うことができる。
また、ブラックリストやホワイトリストを用いる事によってフォールスポジティブやフォールスネガティブと言った誤検知を低減させる事によって、不正コードの検出精度を向上させる事ができる。
【００２２】
実施の形態２．
以上の実施の形態１では、前記ファンクションデータベース１０９や前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１がローカルホスト上に存在し、不正コード検出システム及び装置の供給者が前記ファンクションデータベース１０９や前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１を提供し、必要に応じてユーザが前記ファンクションデータベース１０９や前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１をカスタマイズして単独で利用ようにしたものであるが、次にインターネットやイントラネット６０１上に前記ファンクションデータベース１０９や前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１が存在するような場合に、前記ファンクションデータベース１０９や前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１を開発者間で共有するする実施の形態を示す。
図６は、本実施の形態の機能構成図である。
【００２３】
前記ファンクションデータベース１０９や前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１は、前記インターネットやイントラネット６０１上に存在し、前記ファンクションデータベースマネージャ１０６や前記ホワイトリストデータベースマネージャ１０７、前記ブラックリストデータベースマネージャ１０８を介して、前記イントラネットやインターネット６０１上の開発者と前記ファンクションデータベース１０９や前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１を共有する。そして、前記イントラネットやインターネット６０１上の開発者は、適宜前記ファンクションデータベースマネージャ１０６や前記ホワイトリストデータベースマネージャ１０７、前記ブラックリストデータベースマネージャ１０８を介して前記イントラネットやインターネット６０１上のファンクションデータベース１０９や前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１への登録や更新（場合によっては削除）を行う。
【００２４】
よって、このような構成を取る場合には、外部仕様書・定義書解読処理２０９を実施する前に、前記ファンクションデータベースマネージャ１０６を介して前記インターネットやイントラネット６０１上に存在する前記ファンクションデータベース１０９から前記ファンクションデータ２１３を取得する。また、正／不正コード判断処理２０４を実施する前に、前記ホワイトリストデータベースマネージャ１０７や前記ブラックリストデータベースマネージャ１０８を介して前記インターネットやイントラネット６０１上に存在する前記ホワイトリストデータベース１１０や前記ブラックリストデータベース１１１から前記ホワイトリスト２１５や前記ブラックリスト２１４を取得する。前記ファンクションデータ２１３や前記ホワイトリスト２１５、前記ブラックリスト２１４を取得するタイミングは、必要とする前であれば良く、本システム及び装置の起動時に取得する事も可能であるし、使用する直前に取得する事も可能である。
【００２５】
上記記載の処理以外は、図２に記載の実施の形態１における動作と同じである。ただし、本実施の形態では前記ファンクションデータベース１０９及び前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１全てが前記イントラネットやインターネット６０１上に存在する場合の動作を述べたが、前記ファンクションデータベース１０９及び前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１全てが前記イントラネットやインターネット６０１上に存在する必要はない。ローカルホスト上に存在する前記ファンクションデータベース１０９や前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１と、前記イントラネットやインターネット６０１上に存在する前記ファンクションデータベース１０９や前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１とを自由に組み合せて動作させる事が可能である。
【００２６】
以上のようにファンクションデータベースやホワイトリストデータベース、ブラックリストデータベースを開発者間で共有し、適宜ファンクションデータベースやホワイトリストデータベース、ブラックリストデータベースに対し登録、更新（場合によっては削除）を行う事によって、多くの開発者の知識や経験を集約し、膨大な情報を収集する事ができ、不正コードの検出精度を向上させる事ができる。同時に、適宜ファンクションデータベースやホワイトリストデータベース、ブラックリストデータベースに対する登録、更新（場合によっては削除）が行われる事により、最新の情報を蓄積する事ができ、不正コードの検出精度を向上させる事ができる。また、多くの開発者がファンクションデータベースやホワイトリストデータベース、ブラックリストデータベースのメンテナンスに関わる事により、ファンクションデータベースやホワイトリストデータベース、ブラックリストデータベースの精度が向上し、不正コードの検出精度を向上させる事ができる。
【００２７】
実施の形態３．
上記の実施の形態では、バイナリコード中に混入された不正コードを検出するものであるが、バイナリコード中の関数やシステムコール、ＡＰＩ呼び出しの一覧を抽出し、バイナリコードから仕様書の修正・作成や、ユーザの目視により不正コード混入の確認をする事が可能となる実施の形態について説明する。
図７は、本実施の形態の機能構成図である。
本実施の形態による機能構成は、前記正／不正コード判別器１０３を本システム及び装置から除去もしくは機能停止する。また、前記仕様書・定義書解読器１０５及び前記ホワイトリストデータベースマネージャ１０７、前記ブラックリストデータベースマネージャ１０８（、場合により前記ファンクションデータベースマネージャ１０６）を本システム及び装置から除去もしくは機能停止する。さらに前記内部仕様書・外部仕様書・機能定義書等１１４及び前記ホワイトリストデータベース１１０、前記ブラックリストデータベース１１１（、場合により前記ファンクションデータベース１０９）からの入力を無くす。
【００２８】
このような機能構成により、前記関数呼び出し・システムコール抽出器１０２による関数呼び出し・システムコール抽出処理よって生成される前記関数呼び出し・システムコール解析結果２１７（図２参照）は、前記正／不正コード判別器１０３による前記正／不正コード判断処理２０４を実行せずに、前記正／不正コード判断結果２１９（図２参照）として前記出力器１０４に引き渡される。この事によって、前記出力器１０４による前記正／不正コード判断結果校正処理２０５及び前記正／不正コード判断結果表示・出力処理２０６の処理を介して前記バイナリコード１１２中の関数やシステムコール、ＡＰＩ呼び出しに関する情報全てが関数呼び出し・システムコール一覧７０１として表示、出力される。
【００２９】
以上のように正／不正コード判断処理を無効化する事によって、バイナリコード中の関数やシステムコール、ＡＰＩ呼び出しに関する情報全てを入手可能となり、ユーザ自身による不正コード混入の確認やバイナリコードと仕様書との整合性の確認及び仕様書の修正などを行う事ができ、開発工程における作業効率を向上させることができる。
【産業上の利用可能性】
【００３０】
この発明はアプリケーションプログラムの開発工程において利用され、開発工程における評価試験時にバイナリコードに対して静的的解析を実施し、仕様書通りに関数やシステムコール，ＡＰＩ呼び出しが成されているかを確認することによってセキュアなアプリケーションの提供を可能とする。
【図面の簡単な説明】
【００３１】
【図１】本発明の実施の形態１を示す機能構成図である。
【図２】実施の形態１による処理とデータの流れを示すフローチャート図である。
【図３】ファンクションデータベースに蓄積されたファンクションデータの説明図である。
【図４】ホワイトリストデータベースに蓄積されたホワイトリストデータの説明図である。
【図５】ブラックリストデータベースに蓄積されたブラックリストデータの説明図である。
【図６】実施の形態２の機能構成図である。
【図７】実施の形態３の機能構成図である。
【符号の説明】
【００３２】
１０１；バイナリコード分析器、１０２；システムコール抽出器、１０３；正／不正コード判別器、１０４；出力器、１０５；仕様書・定義書解読器、１０６；ファンクションデータベースマネージャ、１０７；ホワイトリストデータベースマネージャ、１０８；ブラックリストデータベースマネージャ、１０９；ファンクションデータベース、１１０；ホワイトリストデータベース、１１１；ブラックリストデータベース、１１２；バイナリコード、１１３；判別結果、１１４；内部仕様書や外部仕様書、機能定義書等、６０１；インターネット・イントラネット、７０１；関数呼び出し・システムコール一覧。
【図１】
2009098851.tif 000003
【図２】
2009098851.tif 000004
【図３】
2009098851.tif 000005
【図４】
2009098851.tif 000006
【図５】
2009098851.tif 000007
【図６】
2009098851.tif 000008
【図７】
2009098851.tif 000009