JP2010507165A - ソースコード内のセキュリティ脆弱性の検出 - Google Patents

ソースコード内のセキュリティ脆弱性の検出 Download PDF

Info

Publication number
JP2010507165A
JP2010507165A JP2009532956A JP2009532956A JP2010507165A JP 2010507165 A JP2010507165 A JP 2010507165A JP 2009532956 A JP2009532956 A JP 2009532956A JP 2009532956 A JP2009532956 A JP 2009532956A JP 2010507165 A JP2010507165 A JP 2010507165A
Authority
JP
Japan
Prior art keywords
data flow
flow diagram
node
control
nodes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009532956A
Other languages
English (en)
Other versions
JP5042315B2 (ja
JP2010507165A5 (ja
Inventor
サイマン、マティ
Original Assignee
チェックマークス リミテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by チェックマークス リミテッド filed Critical チェックマークス リミテッド
Publication of JP2010507165A publication Critical patent/JP2010507165A/ja
Publication of JP2010507165A5 publication Critical patent/JP2010507165A5/ja
Application granted granted Critical
Publication of JP5042315B2 publication Critical patent/JP5042315B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases
    • G06F16/285Clustering or classification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Stored Programmes (AREA)

Abstract

コンピュータプログラムの応用プログラム段階のセキュリティ脆弱性を解明するために、応用プログラムの応用ソースコード(16)を自動的に分析するツール(22)。このツールはソフトウェア開発過程を継ぎ目なく統合しているため、脆弱性はソフトウェア開発の早い時点で発見される。欠陥部分を除く場合も、生産後の時期に比べてはるかに低コストで除去できる。このツールの動作は静的分析に基づいているが、例えば難読化されたコードを扱う手法など、種々の技術を活用している。
【選択図】図1

Description

関連出願の参照
本出願は、ここに参照文献として取り入れられている2006年10月19日出願のアメリカ仮出願No.60/853,349の利益を要求するものである。
1.本発明の技術分野
本発明は、コンピュータ・ソフトウェアの脆弱性評価に関するものである。特に、応用プログラムのソースコードを自動的にスキャンし、応用プログラムレベルの脆弱性を検出することに関するものである。
2.従来技術の記載
企業のセキュリティ対策は、歴史的にネットワークとホストの安全対策に、即ち「前線防衛」技術に集中してきた。これらの努力にも関わらず、応用プログラムレベルの脆弱性はいまだに重大な危機として残されている。そのような脆弱性の検出のためにはソースコードの構文解析が試みられてきた。この結果、典型的に多数の誤った積極的示唆がもたらされた。1行毎のコード解析も提案されてきた。しかしながらこの方法は、現在のソフトウェアが一般的に数千行のコードで作られるため、非実用的と実証されている。実際、J2EE(Java2標準版、登録商標)のような比較的コンパクトな環境でも、実行モジュールには数千のクラスを含む。
「ソフトウェア解析フレームワーク」と題した特許文献2により、脆弱性の検出のための1つの技術が例示されている。この技術は実行コードを説明するために逆コンパイルを使用している。データフローを同定し、かつ再帰的にモデル化し、また、制御フローを同定し、かつ再帰的にモデル化し、これらのモデルを最小単位の完全なモデルが出来上がるまで繰り返し校正する。
「静的解析による応用ソフトウェアの誤謬低減」と題した特許文献3により、プログラムコードの静的解析が開示されている。一組の解析がプログラムコード上を移動し、プログラミングの安全性、そして/または、私的情報モデルのコード作成の誤りを特定する。更に、制御フローとデータフローの解析を使用してプログラムの評価が行われる。
「ソースコードの競合状態脆弱性の検出のための方法およびシステム」と題した特許文献4により、別のアプローチが提案されている。ソースコードは構文解析され、中間表現となる。コードに対してモデルが導出され、ルーチンについての既定の規則について分析され、ルーチンが1つ以上の既定の脆弱性を有しているか否かを決定する。
ソースコードを検査するいくつかの試みもなされた。「ソースコード解析システムおよび方法」と題した特許文献5は、応用ソフトウェアに伴うデータベースを生成することを提案している。閲覧ソフトはデータベースの内容へアクセスする。次に、モジュール間通信、データベースや外部ファイルに対する呼び出し、および応用プログラム上の変数の使用などの関連情報が表示される。恐らく、操作者はその表示から脆弱性を特定できる。
米国特許仮出願 No.60/853,349 米国特許出願公報 No.2006/0253841 米国特許出願公報 No.2005/0015752 米国特許出願公報 No.2004/0255277 米国特許出願公報 No.2003/0056192
本発明の1側面では、自動ツールが応用プログラムレベルの脆弱性に対し応用プログラムのソースコードを分析する。このツールはソフトウェア開発過程を継ぎ目なく統合しているため、脆弱性はソフトウェア開発過程の早い時点で発見される。欠陥部分を除くときも、生産後に比べてはるかに低コストとなる。このツールの動作は静的解析に基づいているが、例えば難読化されたコードを扱うなど、種々の技術を利用している。
本発明の実施形態によれば、コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、コンピュータプログラムの命令を内蔵する記憶装置と、入出力装置と、記憶装置にアクセスし命令を読む演算処理装置と、からなり、命令は、演算処理装置に対し、分析対象のソースコードを入出力装置経由で受け取るようにさせ、ここにソースコードはコード要素と文からなり、文の少なくとも一部は変数を参照し、変数は要素変数を有するデータ構造からなるシステムを提供する。
演算処理装置は、ソースコードのオブジェクト指向モデルを、夫々の識別子を要素変数に割り当てることにより生成するように動作することができる。
演算処理装置は、モデルを使用し、ノードから構成される制御フロー図を生成し、制御フロー図からデータフロー図を導出し、制御フロー図より制御依存図を導出し、制御フロー図、データフロー図及び制御依存図を分析し、夫々の識別子を使用して既定の要素変数に対する参照を同定することにより、セキュリティ脆弱性を有するソースコードの部位を同定し、ここに既定の要素変数の要素名は、もう一つの要素変数の要素名と同じであり、セキュリティ脆弱性を報告する、ように動作することができる。
データ処理システムの一側面では、演算処理装置は、セキュリティ脆弱性を除去するためにソースコードを変更するように動作可能である。
データ処理システムの他の側面では、演算処理装置は、ソースコードの、単一アクションのみが行われる原子要素を表す、制御依存図のブロックを定義するために、制御依存図をコード切削するように動作可能である。
データ処理システムの又別の側面では、演算処理装置は、入力データが有効とされる前記データフロー図のデータフローノードを同定し、入力データが同定されたデータフローノードにおいて既定の仕様に従って有効とされたことを証明する、ように動作可能である。
データ処理システムの更なる側面では、演算処理装置がソフトウェア故障の木解析をソースコードに適用するように動作可能である。
データ処理システムの一つの側面では、演算処理装置は、データ評価関数が誤りとなるシナリオを同定するために、データ評価関数に対しテストケースを生成するように動作可能である。
本発明の実施形態によれば、コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、コンピュータプログラムの命令を内蔵する記憶装置と、入出力装置と、記憶装置にアクセスし前記命令を読む演算処理装置と、からなり、命令は、演算処理装置に対し、分析対象のソースコードを入出力装置経由で受け取るようにさせ、ここにソースコードはコード要素と文からなり、文の少なくとも一部は変数を参照するシステムを提供する。
演算処理装置は、ソースコードのオブジェクト指向モデルを生成し、ここにコード要素は夫々オブジェクトを表し、モデルを使用して、ノードから構成される制御フロー図を生成し、制御フロー図からデータフロー図を導出し、制御フロー図より制御依存図を導出し、制御フロー図、データフロー図及び制御依存図を分析し、制御依存図の第1部位を1回目に横断処理して制御依存図の処理済部分に標識を付け、その後2回目に標識の付いた部分を含む制御依存図の第2部位を、標識の付いた部分を飛ばして横断処理することにより、セキュリティ脆弱性を有するソースコードの部位を同定し、セキュリティ脆弱性を報告する、ように動作可能である。
本発明の実施形態によれば、コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、コンピュータプログラムの命令を内蔵する記憶装置と、入出力装置と、記憶装置にアクセスし命令を読む演算処理装置と、からなり、命令は、演算処理装置に対し、分析対象のソースコードを前記入出力装置経由で受け取るようにさせ、ここに前記ソースコードはコード要素と文からなり、文の少なくとも一部は変数を参照するシステムを提供する。
演算処理装置は、ソースコードのオブジェクト指向モデルを生成し、ここにコード要素は夫々オブジェクトを表し、モデルを使用して、ノードから構成される制御フロー図を生成し、制御フロー図からデータフロー図を導出し、制御フロー図、データフロー図及び制御依存図を分析し、データフロー図内に、入力が受入れられた第1データフローノード、データが有効とされた第2データフローノード、およびデータが使用された第3データフローノードを同定する工程と、データフロー図から第2データフローノードを削除する工程と、その後第3データフローノードの1つと第1データフローノードの1つがデータフローエッジの1つにより繋がっていることを判定する工程とにより、第3データフローノードの1つが、未評価入力の脆弱性を有することを報告する、ように動作可能である。
本発明の実施形態によれば、コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、コンピュータプログラムの命令を内蔵する記憶装置と、入出力装置と、記憶装置にアクセスし命令を読む演算処理装置と、からなり、命令は、演算処理装置に対し、分析対象のソースコードを前記入出力装置経由で受け取るようにさせ、ここにソースコードはコード要素と文からなり、文の少なくとも一部は変数を参照するシステムを提供する。
演算処理装置は、モデルを使用して、ノードから構成される制御フロー図を生成し、ここに制御フロー図は、ソースコードにおける複数の関数を記述し、変数はさらにグローバル変数からなり、グローバル変数は、関数に、グローバル変数をデータ要素として有する、超グローバル変数として渡され、制御フロー図よりデータフロー図を導出し、制御フロー図より制御依存ノードを有する制御依存図を導出し、制御フロー図、データフロー図及び制御依存図を分析し、セキュリティ脆弱性を有するソースコードの部位を同定して、セキュリティ脆弱性を報告する、ように動作可能である。
本発明の実施形態によれば、コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、コンピュータプログラムの命令を内蔵する記憶装置と、入出力装置と、記憶装置にアクセスし命令を読む演算処理装置と、からなり、
命令は、演算処理装置に対し、分析対象のソースコードを入出力装置経由で受け取るようにさせ、ここにソースコードはコード要素と文からなり、文の少なくとも一部は変数を参照するシステムを提供する。
演算処理装置は、ソースコードのオブジェクト指向モデルを生成し、
ここに前記コード要素は夫々オブジェクトを表し、モデルを使用して、制御フロー図を生成し、制御フロー図からデータフロー図を導出し、ここにデータフロー図は、データフローノードと、データフローノードを繋ぐデータフローエッジとからなる、ように動作可能である。
演算処理装置は、第1配列と第2配列を前記データフローノードの夫々に随伴させることにより、データフロー図を導出し、ここに前記第1配列は、随伴されたデータフローノードが依存する変数に関する静的情報を有し、第2配列は、随伴されたデータフローノードに影響を与える他の変数を同定する情報を有し、他の変数はデータフローノードのその他に随伴されている、ように動作可能である。
演算処理装置は、制御フロー図を横断処理し、ノードの夫々において、情報に応じて、データフロー図の対応するデータフローノードの第2配列内に情報を確立し、データフローエッジをデータフローノードと他のデータフローノードと夫々繋ぐことにより生成し、制御フロー図より制御依存ノードを有する制御依存図を導出し、制御フロー図、データフロー図及び制御依存図を分析し、セキュリティ脆弱性を有するソースコードの部位を同定して、セキュリティ脆弱性を報告する、ように動作可能である。
本発明の実施形態によれば、コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、コンピュータプログラムの命令を内蔵する記憶装置と、入出力装置と、記憶装置にアクセスし命令を読む演算処理装置と、からなり、 命令は、演算処理装置に対し、分析対象のソースコードを入出力装置経由で受け取るようにさせ、ここにソースコードはコード要素と文からなり、文の少なくとも一部は変数を参照し、変数は要素変数からなり、要素変数は要素名を有し、ソースコードのオブジェクト指向モデルを生成させ、ここにおいてコード要素は夫々のオブジェクトによって表される、システムを提供する。
演算処理装置は、モデルを使用して、ノードから構成される制御フロー図を生成し、 ここに各ノードは制御フロー図上で位相順序を有し、ノードの一部は少なくとも1つの子ノードを有し、制御フロー図からデータフロー図を導出し、ここにデータフロー図は、データフローノードと、データフローノードを繋ぐデータフローエッジと、からなり、制御フロー図より制御依存ノードを有する制御依存図を導出するように動作可能である。
演算処理装置は、制御フロー図のノードに対し先天性値を与え、ここに先天性値は、少なくとも1つの子ノードによって平等に継承値として継承され、各ノードで継承値の合計が先天性値に等しい時はその継承値を削除し、ノードの継承値の各継承記録を維持し、ここに継承記録は各継承値の継承元を示すノードの同定番号を含み、制御フロー図の入口ノードを同定し、ノードの最初の1組のノード群を同定し、ここに最初の1組のノード群の構成ノードは継承値を持たず、夫々第1エッジを最初の1組のノード群と入口ノードとの間に確立し、ノードの第2組のノード群を同定し、ここに第2組のノード群の構成ノードは継承値を有し、継承記録において、第2組のノード群間に継承元ノードの近接位相順序を設定し、そして、第2のエッジを第2組のノード群の構成ノードと最接位相順序の継承元ノードとの間に夫々生成する、ことにより制御依存図を導出するように動作可能である。
演算処理装置は、制御フロー図、データフロー図及び制御依存図を分析し、セキュリティ脆弱性を有するソースコードの部位を同定して、セキュリティ脆弱性を報告する、
ように動作可能である。
本発明のその他の実施形態は、このデータ処理システムの機能を実施するための方法、コンピュータ・ソフトウェア製品を提供する。
本発明をより良く理解できるように、発明の詳細な説明に対して、以下の図を参照して読まれる実施形態を提供する。図の要素は参照番号を与えられている。
本発明の開示された実施形態に基づく、コンピュータ・プログラムのコードを処理するシステムのブロック図である。
本発明の開示された実施形態に基づく、図1に示されたソースコード分析エンジンの詳細なブロック図である。
本発明の開示された実施形態に基づく、図1に示されたソースコード分析エンジンを使用するソースコード分析の側面を示す複合図である。
本発明の開示された実施形態に基づく、単一ソースコード文を表わす制御フロー図である。
本発明の開示された実施形態に基づく、呼出知覚の単一メソッド制御フロー図を生成する方法のフローチャートである。
本発明の開示された実施形態に基づく、呼出知覚の単一メソッドの制御フロー図の典型的事例である。
本発明の開示された実施形態に基づき生成されたデータフロー図である。
本発明の開示された実施形態に基づく、データフロー図を生成する方法のフローチャートである。
本発明の開示された実施形態に基づく、図8に示された方法によるデータフロー図の生成を示す図である。
本発明の開示された実施形態に基づく、データフロー図を生成する工程を示す図である。
本発明の開示された実施形態に基づく、制御依存図を生成するために使用される制御フロー図のノードのポテンシャルを設定する方法のフローチャートである。
本発明の開示された実施形態に基づく、図11の方法の更なる詳細を示すフローチャートである。
本発明の開示された実施形態に基づく、図11と図12を参照して開示された方法による制御依存図の生成を示す複合図である。
本発明の開示された実施形態に基づく、制御フロー図内のスタブ交換を示す図である。
本発明の開示された実施形態に基づく、囲い込み計算を説明する一連の制御依存図である。
本発明の開示された実施形態に基づく、コンピュータプログラムの未評価入力の可能性を検証する方法のフローチャートである。
本発明の開示された実施形態に基づく、未評価入力の脆弱性を判定するためのデータフロー図の処理を示す図である。
本発明の開示された実施形態に基づく、典型的な独自のデータ検証関数の処理を示す図である。
以下の文では、多くの特定の詳細説明が、本発明の完全な理解のために提供される。しかし、本発明がこれらの特定の詳細内容無しで実現できることは、当業者には明らかである。また、公知の回路、制御論理および従来技術の計算式や工程についてのコンピュータプログラム命令の詳細などは、不必要に本発明を不明瞭にしないため示していない。
本発明の開示された実施例としてのソフトウェア・プログラミングコードはコンピュータ読み込み可能媒体のような永久記録媒体で通常維持される。クライアント/サーバ環境ではそのようなソフトウェア・プログラミングコードはクライアントあるいはサーバに保存される。ソフトウェア・プログラミングコードはデータ処理システムで使用される、ディスケット、ハードドライブ、またはCD−ROMなどのさまざまの公知のメディアのどれかで実体化される。コードは、そのようなメディアに入れて配布されるか、ネットワークの上のあるコンピュータシステムの記憶装置か記憶装置からネットワークを介して他のコンピュータシステムに他のユーザに使用されるため流通されうる。

用語の定義
「脆弱性」とは、実行時に、外部入力が不適切又は不望の動作を引き起こすことを許す可能性のあるプログラム・ソースコードの一部分を指す。脆弱性の例としては、バッファ溢れ、競合状態、特権増大がある。
「制御フロー」とはプログラム命令の論理的な実行順序を表す。それは論理的に開始点から始まり、種々のループや制御移動文(分岐)を横断処理し、プログラムの端か終了点で終わる。
「制御フロー図」(CFG)とは、プログラムの実行時に、プログラムで横断処理される経路の図的表現である。図の各ノードは基本ブロック、即ちジャンプやジャンプ先のない一直線の1つのコードを表す。ジャンプ先からブロックが始まり、他へのジャンプでブロックが終わる。制御フローにおけるジャンプを表すのに有向エッジが使用される。
「データフロー」は、変数およびデータ要素、即ち何らかの外部記憶装置上のプログラム記憶装置に動的または静的に保存されるデータ、が記憶装置から読み出されるか、または書き込みされる、プログラム内のプロセスを示す。データフローはプロセスを含む。そのプロセスでは、変数あるいは、データの入力または出力が名前と内容で定義され、プログラム実行で使用されそして/あるいは、変更される。データフローは「データフロー図」として図的に表現される。
システム概要
今から図を使用する。最初に図1を参照するが、これは本発明の開示された実施形態にもとづく、コンピュータ・プログラムコードを処理するためのシステム10のブロック図である。システム10は典型的には、汎用か組込型コンピュータ12であり、通常の記憶装置と入出力装置が備えられ、以下に説明される機能を実行する適切なソフトウェアでプログラムされる。したがって、システム10の一部が多くの別々の機能ブロックを含むよう示されるが、これらのブロックは必ず別々の物理的実体というわけではない。むしろ演算処理装置にアクセス可能な記憶装置に保存される、異なった演算業務かデータオブジェクトを表す。これらの業務は単一の演算処理装置または複数の演算処理装置で動くソフトウェア上で実行される。ソフトウェアはCD−ROMか非揮発性記憶装置などの形のあるメディアで、またはデータ網の上の記憶装置から取り込んで提供される。または、代わりに、さらに、システム10はディジタル信号演算処理装置か配線論理で構成される。システム10は操作者がグラフィカル・ユーザ・インターフェースでシステムと対話するのを可能にするため、ディスプレイ14を含んでもよい。
システム10は応用プログラム・ソースコード16を受ける。それは、実行コードに変換される予定である。典型的には変換はコンパイルで行われ、オブジェクトコードが生成され、オブジェクトコードはライブラリコードとリンクされる。しかし、本発明の原理は中間表現が採用されているソフトウェア開発システム、またはソースコード・インタプリタを使用する開発環境に適用可能である。
システム10はソースコード分析ソフト18(SCA)を含む。これは、応用プログラムレベル脆弱性を検出するため、自動的にソースコード16をスキャンするモジュールである。ソースコード分析ソフト18は独立して変換されうる、複数の異なった層から構成される。それぞれの層は隣接している層だけと結合され、結合されない層が多数残される。一般に、ある層の変更は、変更された層から入力を受け取る次の層にだけ影響する。1つの層は、以下詳細に議論する各種タイプのセキュリティ脆弱性を検出する1組の問い合わせを保持する、セキュリティ関連の層20である。他の層全体でセキュリティ関連の層20によって利用される、SCAエンジン22を形成する。モジュール構造は高い柔軟性を提供する。例えば、可能であれば、SCAエンジン22に接する別のモジュールとセキュリティ関連層20を交換する。SCAエンジン22を形成する層は、文析される応用プログラムに関連する種々の機能を果たす、例えば信頼性の評価、性能、および、仕様や規格にたいする適合度など。
次に図2を参照する。図2は開示された本発明の実施形態による、SCAエンジン22(図1)のブロック図である。SCAエンジン22は以下の層および要素で構成され、それらは後ほどさらに詳しく説明される。
層24(分類モジュール26および逆コンパイラ28を含む)
層30(パーサ32)
層34(ASTモジュール36)
層38(DOMビルダ40、浅いDOMソルバ42および深いDOMソルバ44を含む)
層46(CFGモジュール48)
層50(DFDモジュール52)
層54(CDGモジュール56)
層58(CDG+DFGモジュール60)
層62(オブジェクトデータベース64)
層66(SFTAエンジン68)
層70(ユニット試験エンジン72)

ソースコード解析プログラム―分類
ソースコード16はSCAエンジン22の主要入力である。ソースコード16は分類モジュール26に渡される。SCAエンジン22の現行版はJava(登録商標)、C#、.NET、およびサーバ側スクリプト言語JSP(Javaサーバページ)言語、およびASPX(アクティブサーバ・ページフレームワーク)で書かれたソースコードをスキャンできる。しかし、ここに開示される発明の原理はこれら特定の言語に制限されないことに注意するべきである。SCAエンジン22が他のコンピュータ言語を処理出来るようにするコンバータが当業者により生成されてもよい。分類モジュール26は、どの言語がソースコード16に適用されるかを決定する。ソースコード16が異常であるか、SCAエンジン22が対応しない言語を渡された場合、分類モジュール26は誤りを報告する。
SCAエンジン22は公知の逆コンパイルの技術を使用して、ソースコードを中間表現に変える環境で開発されたプログラムをスキャンできる。例えば、.NET TMフレームワークとJavaプラットホームの両方は、ソースコードを、機械コードではなく中間言語に変えことにより動作する。SCAエンジン22がソースコード16を中間言語で受け取ったことを認識すると、逆コンパイラ28が呼び出される。それは、中間コードをSCAエンジン22で解析できる高水準の言語に変える。米国特許 No.5,881,290、5,586,330、5,586,328、および7,210,133で教えられるような、公知の技術を使用することで逆コンパイラ28と分類モジュール26の要素を構成できる。適切な逆コンパイラである「Reflector for .NET」はインターネットを通してLutz Roederから利用可能である。
コード難読化のようなプログラミング手法は従来のコード分析プログラムに混乱をもたらす。しかし、SCAエンジン22はコード論理の評価を指向しているため、コード難読化によって破壊されない。そのうえ、SCAエンジン22は、リバースエンジニアリングされたプログラムコードで生成される、しばしば不鮮明な識別子にもトラブルを起こさない。
.NETのような新しいプログラム言語は、イベント駆動プログラムをサポートする。そのようなプログラムの呼び出し図は、実行時まで関数呼び出しの順番を延期されるので、しばしば不十分に定義される。SCAエンジン22は、ASPXとJSPコードで起こるウェブイベントを含む、様々なイベントを上げる順番に関する仮定を全くしない。そのようなイベントは適切なメタループとセレクトケース・スイッチの導入でそれぞれC#とJavaコードに変換される。分類モジュール26と逆コンパイラ28が最初の層、層24を形成する。

構文解析
図2をさらに参照する。分類された、必要に応じて逆コンパイルされたソースコードは層30の中でパーサ32に処理される。それが個々のトークンに分解される。トークンは次に、層34の中に渡されて特定の言語の文法に基づき処理され、ASTモジュール36内の抽象構文木(AST)になる。このステップは公知である。例えば、インターネットでantlr.orgから利用可能なツールであるANTLRは、ASTモジュール36としての使用に適する。

DOMビルダ
層38のDOMビルダ40は、抽象構文木の各コード要素を適合するオブジェクトで表す、文書オブジエクトモデル(DOM)を生成する。
DOMビルダ40は、2つの主要モジュールから構成される。浅いDOMソルバ42(AST2DOM)は、言語依存の抽象構文木を受けて、ほぼ言語中立の文書オブジェクトモデルを返す。浅いDOMソルバ42の出力は「浅い」言語であり、離れたオブジェクト間の論理的接続はまだ確立されていない。深いDOMソルバ44はその言語の関連仕様に基づきこれらを接続し、完全に言語中立である文書オブジェクトモデルを作成する。含意は、文書オブジェクトモデルを利用するその後の層が言語を意識する必要がないということである。したがって、新しい言語をサポートするためには、せいぜい層24、30、34、38だけが変更の要がある。層38を引き継ぐ層は、ソースコード言語を関知しない。
深いDOMソルバ44の動作は、プログラムリスト1を閲覧することで理解できる。
ソースコードの分析には、符号「i」が同じ変数を示すか、または同じ符号を共有する2つの異なった変数を示すか、を判定する必要がある。2つの行が同じブロックにあるなら、「i」の2つの符号が1つの変数を示す。しかしながら、行が2つの異なったブロックにあるなら、変数の見え方、宣言された位置、内包するクラスの継承した順位により、判定は変わる。浅いDOMソルバ42は変数を認識する。それらの間の接続は、DOMビルダ40によって参照された各変数が「インスタンスID」という名前のデータ要素を割り当てられる、深いDOMソルバ44によって確立される。浅いDOMソルバ42は、たとえ同じ変数を参照していても、参照された各変数に要素「インスタンスID」用の異なった値を割り当てる。したがって、プログラムリスト1では、「i」に対する2つの参照の結果は、たとえ両方が同じ変数を参照してしても要素「インスタンスID」の違う値を受けとる。深いDOMソルバ44では、同じ変数への全ての参照は同じ値が要素「インスタンスID」に割り当てられる。メソッドは、同様のメカニズムを持っているが、要素「インスタンスID」にかわって、メソッド宣言、および呼出しに対し「定義ID」という要素が割り当てられる。

実施形態1
図3を参照する。図3は、本発明の実施形態に基づく、SCAエンジン22(図2)を使用したソースコード分析の側面を示す複合図である。典型的ソースコード76を処理して抽象構文木78を形成している。抽象構文木78の2番目の行の「NAMESPACENODE」というノード80には、「QUALIDENT」( QUALified IDENTifier)という子ノード82がある。ノード82には、ソースコード76の最初の行の識別子84に対応する「CheckmarxNamespace」の値がある。これは名前空間の名前であるが、抽象構文木78に関する限り、それは、識別子を表す文字列に過ぎない。識別子84が名前空間を特定するという知識は、DOMビルダ40(図2)の浅いDOMソルバ42によって利用される。この知識は文書オブジェクトモデルにおいて獲得され、その一部はDOM断片86として図示されている。本実施形態では、DOMオブジェクト88「NamespaceDecl」が作成される、そして、データ要素「Name」は、値「CheckmarxNamespace」で初期化される。いくつかの要素がDOMオブジェクト88の下流に示されている。
再度、図2を参照して、以下の事項が深いDOMソルバ44で処理される。これらは公知の技術であり、ここでは簡略化のため検討はしない。
型の決定。
継承の決定。
変数の決定。
メソッドの過負荷の決定。
メソッドの超越の決定。
過負荷の決定。
多態性の決定
データ要素の決定(公的/私的/保護対象)。
コンストラクタの決定。
「This」の決定。
チェーン化。
ベース呼び出し。
さらに、「要素変数インスタンス」として知られる手続が実行される。要素変数はC++クラスのようなデータ構造内のフィールドである。通常、要素変数は異なった関数あるいはメソッド内で使われるが、それらの関数あるいはメソッドの外側で定義される。DOMビルダ40では、各要素変数はユニークなID番号を受け取る。したがって、似た要素名を持ち、似たデータ型の親を持つ異なる要素変数(例えば、要素変数a.x、b.x中の要素名「.x」)は、お互いと区別されて、異なった変数であるとみなされる。従来の総合的開発環境、たとえばVisual Studio(登録商標)は、ある変数にたいする全ての参照を見つける機能を持っている。プログラムリスト2を参照し、変数「j」(13行目)の「要素変数インスタンス」を呼び出すと、9行目の変数jの宣言と13行目の割当という2つの参照箇所が発見される。今度は、14行目の変数「a.x」に対する参照を考える。宣言(3行目)と割当(14行目)という2つの参照箇所を見つける可能性がある。しかしながら、Visual Studioは要素変数b.x(15行目)の割当という追加の参照箇所を返す。この不望の結果はVisual Studioがa.xやb.xなどの名前の共通部分を持っている要素変数を区別しないことに起因する。しかしDOMビルダ40は、それらを区別できる。深いDOMソルバ44は要素変数a.xとb.xの「インスタンスID」に異価を割り当てる。要素「定義ID」と要素「インスタンスID」は共に要素変数が区別されることを許容する。
制御フロー図
制御フロー図は、CFGモジュール48を使用し、層46に生成される(図2)。SCAエンジン22により生成された制御フロー図の各ノードは、単一の文を表す。さらにほとんどの場合、単一の文が複数の表現を含むとき、各表現は其々のノードによって表わされる。図4は制御フロー図90の本発明に従った単一ソースコード文、「for」の文である。制御フロー図90は文の各要素が複数のノードに作り込まれる様子を示している。
CFGモジュール48は、最初に単一メソッドのモジュラー制御フロー図を演算する。他のメソッドの呼出しには手をつけず、複雑な文は表現の論理を保持しつつ、複数の原子表現に分割される。このステージの効率はO(n)である。ここにnはコード内のサブ表現の数である。例えば制御フロー図90では呼出し「Write()」はさらに分析されない。
CFGモジュール48の操作の次の段階は、制御フロー図90を呼出知覚の単一メソッド制御フロー図に変形することである。複数のメソッドを統合するためには、呼出されたメソッド用の保管場所が必要である。スタブが用意される。ソースコードが有れば最終的にスタブを置き換える。さらに実務的には、呼出しメソッドが呼出しの準備を行い、戻りの後に「消去作業」を行う。同様に呼出されたメソッドは最初に準備を行い、呼出しの終了後消去作業を行わなければならない。
次に図5を参照する。図5は本発明に基づく、呼出知覚の単一メソッド制御フロー図の生成方法のフローチャートである。最初のステップ92では、単一メソッド制御フロー図が図4で述べたとおり準備される。
次に、ステップ94で、制御フロー図のステップ92で記述された呼出しメソッドが、呼出されたメソッドに送るパラメータを初期化する。パラメータには呼出しの間操作される「this」オブジェクトおよびグローバル変数を含む。グローバル変数の運搬のための箱が準備されることが好ましい。
次にステップ96において、呼び出されたメソッドはそのパラメータを暫定変数に複写する。これらは「prolog」 という名前のセクションに配置される。
次にステップ98に進む。暫定スタブが制御フロー図の中に保管場所として生成される。呼出されたメソッドのソースコードが無いときは、呼出されたメソッドにより送られたパラメータの使用について想定をしなければならない。ステップ98で生成されるスタブには主要な2つのタイプがある。第1のタイプでは、呼出されたメソッドはそのパラメータを使用するが、それら変数の更新はしないと想定する。第2のタイプではパラメータは「this」オブジェクトに影響を及ぼすと仮定する。各スタブの使用は、メソッド名、パラメータ名、返還値の数値や使用といった幾つかの検索容易性に基づいている。変換する関数名が「set*」,「add*」または「append*」で始まる場合は第2のタイプが使用される。ここで「*」はワイルドカード操作子である。第1のスタブはこれ以外に使用される。
ステップ98のつぎにステップ100が実行される。呼出されたメソッドは、典型的な「参考」パラメータである、変更するパラメータを(「出パラメータ」)、「epilog」という名称の暫定変数に複写する。
次に最後のステップ102で呼出しメソッドは、暫定変数内の新データにより「出」パラメータを更新する。単一メソッドの制御フロー図の結果は、「prolog」と「epilog」に装飾され、呼び出されたメソッドに対するスタブを有している。

実施形態2
図6を参照する。図6は本発明に基づく典型的な呼出知覚の単一メソッド制御フロー図104である。制御フロー図104は「prolog」と「epilog」に対応するノード106,108をそれぞれ有する。この事例ではfunc2()に対するソースコードが無いため、呼出される関数 func2()のスタブ110が含まれる。

データフロー図
再度、図2を参照する。データフロー図がDFGモジュール52を使用し層50に生成される。次に図7を参照する。図7は、本発明に基づくデータフロー図112である。データフロー図は単一メソッド内のデータフローを記述している。変数にある値が割り当てられる都度、影響を与えるオブジェクトと割り当てが行われた位置が記録される。結果的に、データフローノードは特定の位置の変数であり、連結は依存性を表すことを示す図が生成される。図では処理が下流に行われる。このように特定の位置で演算された後方に流れる囲い込みは、全ての影響する変数を取り戻す。各ノードからはそのノードに影響を与えるノードに矢印が向けられている。例えば、ノード114では、変数cに割当てられた値はノード116における変数aの割当てに影響されている。
図8を参照する。図8は本発明に基づくデータフロー図を生成する方法のフローチャートである。各ステップは明確化のため直線的な順序で示されている。しかしこれらステップは、並列に、非同期で、また異なった順序で実行されうることは明らかである。
最初のステップ118でメソッドが選択され、上記図5で述べたように、そのメソッドに対する制御フロー図が生成される。データフロー図は制御フロー図に基づく。固有の識別子が少なくとも複製制御フロー図における各ノードに割り当てられる
つぎにステップ120において、最初のステップ118において準備された制御フロー図の各ノードが複製される。複製されたノードは適正なエッジを確立することにより、制御フロー図の生成に使用される。元の制御フロー図は通常CSAエンジンにより他の目的に使用される(図2)。もちろん、応用ソフトによっては制御フロー図の複製は不必要であり、その場合は複製されず、元の制御フロー図が使用される。ノードの複製は、ノードがデータオブジェクトである電算機演算業務として典型的に実行され、それは必要に応じて操作者を補助するため表示される。
次にステップ122において複製ノードから一つのノードが選択される。このステップではデータに関係しないノードは無視され、おそらく廃棄される。
次にステップ124において2つの配列が選択され、現在選択されている複製ノードを随伴する。これら配列は其々「このブロックが依存する変数」、「位置を変更する変数」と命名される。前者は現在のノードが依存する変数に関する静的情報を、後者は現在の複製ノードに影響を与えることが現在知られている変数に関する動的情報を、それぞれ含む。下記の記述から判るように、動的情報はデータフロー図の横断処理の中で生成される。
次にステップ126において、配列は初期化される。配列「このブロックが依存する変数」は、現在の複製ノードに保存された情報により初期化される。この配列は一度記入されると、変わることはない。例えば、文a=bに対応する複製ノードが、複製ノードにたいする配列「このブロックが依存する変数」の1つの要素を数値「b」で初期化する。ステップ126は説明的に「自己状態生成」と呼ばれることもある。配列「位置を変更する変数」が初期化される。配列「位置を変更する変数」は現在のノードに関係するデータにより初期化される。現在のノードに影響を与えるデータを有するノードとのリンクは後のステージで起こる。上記の例において、文a=bは配列「位置を変更する変数」がキー「a」、数値「1」で初期化されるという結果を生む。
次にステップ128に進み、追加の複製ノードが制御フロー図において処理される必要があるか決定される。ステップ128の判定が肯定の場合はステップ122に戻り次の複製ノードを選択する。
ステップ128の判定が否定の場合、ノード毎の処理が始まる。この処理は元々の制御フロー図における幅優先探索とほぼ同じである。厳密な意味では、幅優先探索は階層木構造に適用される。制御フロー図は完全には階層化していない可能性があるため、検索は当初親ノードについて解決し、親ノードから先は幅優先探索される。次にステップ130に進み、1つの複製ノードが選択される。
次にステップ132において、現在の複製ノードに影響を及ぼす可能性のある全ての変数情報を包含することにより、配列「位置を変更する変数」を現在の複製ノード用に更新する試みがなされる。これは配列「値による」よりむしろ配列「参照による」を更新関数に渡すことにより行われる。このことは電算機資源の節約につながる。このステップの効率性はO(1)である。場合によっては、この処理を行うのに十分な情報が現時点で存在しないことがあり、その場合当該複製ノードはステップ132終了後、次世代のノードのために再度遡って取り扱わなければならない。再取扱のノードは標識がつけられる。標識付きノードは「深さ優先探索法」の順番で再度取り扱われる。
次に決定ステップ134に進み、現在の複製ノードにたいする配列がステップ132で正しく更新されたか否かを判定する。決定ステップ134の判定が否定の場合は、下記の決定ステップ136に進む。
決定ステップ134の判定が肯定の場合は、ステップ138に進む。当該ノードは評価済みとして分類される。関連するエッジは、全てのノードが評価された後に現在のノードと、現在のノードが依存する、他の複製ノードとの間で確立される。
ステップ138終了後、決定ステップ134の判定が否定である場合は、決定ステップ136にすすむ。そこでは、追加の複製ノードを取り扱う、または再度取り扱う必要があるか否か判定される。決定ステップ136の判定が肯定の場合、ステップ130に戻る。
決定ステップ136の判定が肯定の場合、最終ステップ140に進む。関連するエッジは上記ステップ138の議論で述べたとおり今やノード間で生成される。これはまず第1に配列「このブロックが依存する変数」を参照して行われ、次に配列「位置を変更する変数」に基づいてエッジを追加する。これでデータフロー図は完成し、処理は終了する。

実施形態3
図9は、本発明の開示された実施形態に基づき、図8を参照しながら記述された方式によるデータフロー図の生成を示す図である。図9の上側部分に示されたとおり、データフロー図はソースコード142の一部から生成される。
制御フロー図144と複製制御フロー図146が準備され、後に割り当てされる固有の識別子(1,2,3,4)が準備される。複製制御フロー図146の下側部分では、各ノードがそれぞれの変数テーブル、即ち列148の「本ブロックが依存する変数」という配列を含むテーブルと、複製制御フロー図146の各ノードのランクによって分岐している一組のテーブル150を伴うことが示されている。例えばノード152は固有の識別子「1」が割り当てられており、テーブル154,156を伴っている。ここでそれぞれのノードは単一ソースコード文に対応していることが想起される。テーブル154の目的は、ノード152に対応するソースコード142の文が依存するこれら変数を識別することである。
同様にノード158はテーブル160,162を伴い、ノード159はテーブル164,166を伴い、ノード168はテーブル170,172を伴う。
複製制御フロー図146の最上部から始め、下流に進み、各変数が最後に変化したノードが確定され、実データフロー図が生成される。
テーブルの組150では、各関連変数はその関連するノードへの指示子を伴っている。例えば制御フロー図144のノード174に対応するノード158は、文「B=A」に対応している。ノード158は識別子「2」を有する。この識別子は、ノード158において変化した変数Bと共に、テーブル162において見出すことが出来る。
変数AとBは共にノード158に関連している。ノード158はテーブル160に示されたとおり、変数Aにのみ依存している。テーブル162では変数Aはテーブル162の上段の行に入力され、最後に変化したノード152に対応して「1」とコード化されている。下段の行では、変数Bが最後に変化したのはノード158なので、「2」とコード化されている。変数Cはソースコード文「B=A」では記述されていないので、ノード158には関係しないと見なされている。変数Cはテーブル160,162では入力されない。
図10は本発明の開示された実施形態に基づいて、データフロー図を生成する工程を図示したものである。この工程は図9から続いている。複製制御フロー図146を下流に行く。
変数Aは部分データフロー図176に示すようにノード152において変化する。
変数Bはノード158において変化する。ノード158はノード152において変化した変数Aに依存する。このことは部分データフロー図178の生成およびテーブル160,162への入力で表示されている。
変数Aは再びノード159で変化する。ノード159はテーブル164に示されるとおり、最後にノード158にアクセスした変数Aに依存する。これを反映した新しい部分データフロー図182が生成される。
変数Cはノード168で変化する。ノード168はテーブル172に示されるように、ノード158において前に変化した変数Bに依存する。これで完全なデータフロー図184が生成される。
最終のデータフロー図を生成するにあたり、各ノードはデフォルトにより一度評価される。さらにテーブル150の組が追加的に生成されたという事実のため、各ノードは、変数が出現するソースコードのネストレベルにおいて、依存する変数について一度だけ評価する必要がある。例えば、もし文が「for」文内部にネストされていたらそれは次に「if」文に起こり、文に対応するノードは最大3回解かれることとなる。効率はO(n*m)である。ここにnはノードの数で、mは最深のソースコードのネストレベルである。

メタコンストラクタ
従来は、C++のようなオブジェクト指向言語は、クラスコンストラクタが実行される以前のデータ要素の初期化は許されていなかった。「.NET」のようなより新しい言語ではデータ要素の早期、即ち宣言時の初期化が許されている。従って、旧言語を使用する場合、データフロー図の生成のためには、関連する割り当て作業や初期化を行うメタコンストラクタを生成することが役に立つ。早期の初期化を確実にするためには、クラスコンストラクタは定常の関数を実行する前にメタコンストラクタを呼び出すように記述されなければならない。
プログラムリスト3にて、その点を説明するためのソースコード例を示す。変数「i」と「j」は宣言時に初期化されるのであって、コンストラクタにて初期化されない。メタコンストラクタを加えれば、変数が初期化されないというあらゆる問題を避けることができ、データフロー図をより正確に作ることができる。プログラムリスト3のコードにメタコンストラクタを加えたものをプログラムリスト4に示す。
制御依存図
制御依存図はSCAエンジン22(図2)によって開発されたソフトウェア技術において周知の図である。データフロー図に相似して、制御依存図(CDG)は文相互間の依存性を示し、しかしながら依存性とはデータ依存ではなく、むしろ制御に依存する。それぞれ文Aは、文Aを実行すべきか制御する従前の文Bに繋がっている。制御依存図では、ノードまたはバーチクルは実行可能な文を表し、エッジは直接制御依存性を表す。制御依存図の生成は電算機のネックとなる問題点であり、本発明の側面により緩和される。
再度、図2を参照する。制御依存図は層54にCDGモジュールを使用して生成される。ここで制御依存図は上記CFGモジュール48により生成される制御フロー図から導かれる。
制御依存図の生成は内容に関してよりは、むしろ形状に関する洞察、即ち制御フロー図の位相空間論から導かれる。制御フロー図の各ノードはソースコードの一行に対応するものと見做される。しかし、今最も興味があるのは制御フロー図の構造である。
各ノードはここでは「ポテンシャル」と呼ばれ、数値を有し、下位のノードに継承する属性を与えられる。ポテンシャルは数量で、ノード間の互いの制御的影響を反映している。制御フロー図を通じてポテンシャルの継承を追跡することにより、制御依存情報を抽出することが可能となり、それにより正確な制御依存図の生成が可能となる。図の一般的な位相空間や個々のノードの位相順序だけがこの工程では重要である。
ポテンシャルの継承の結果、継承の経路と出発点の記録が保存されている場合、ノードは先天性および継承したポテンシャルの多くの組合せを有することが出来、其々の構成要素は別々に扱われることが明らかとなる。ノード間のポテンシャルの継承に関し、幾つかの法則が適用できる。
第1法則。各ノードは初期状態では数値「1.0」を有するポテンシャルを与えられる。これは「先天性」ポテンシャルと呼ばれる。
第2法則。ノードは保有する全てのポテンシャルを子ノードに継承する。ポテンシャルの数値は直接の子ノード間で均等に配分される。親ノードから子ノードに継承されたポテンシャルは「継承」ポテンシャルと呼ばれる。例えば、制御フロー図186において、ノード1は2つの子ノード、ノード2とノード15を有する。各子ノードはノード1よりポテンシャルの配分0.5を受け取る。ノード2は先天性ポテンシャル1.0と継承ポテンシャル0.5を有する。
第3法則。子ノードに対する親ノードの先天性ポテンシャルの継承および継承ポテンシャルの継承は、異なった処理として扱われる。
第4法則。継承されたポテンシャルはその継承元の標識が付けられる。ノードが複数のポテンシャルを複数の継承元から継承した場合、複数のポテンシャルの子孫ノードに対する継承は個別に取り扱われ、個別に計数される。上記のノード2の例では、継承ポテンシャル0.5がノード1から継承したと標識づけされる。
第5法則。ノードが継承したポテンシャルがちょうど1.0のときその継承したポテンシャルは無効となる。これはノードが子ノードを1つしか持たない場合、のような例で起こる。制御フロー図186において、ノード2は子ノードを子ノード4の1つしか持たない。ノード4は第1法則により先天性ポテンシャル1.0を持つ。最初の処理において、第3法則に基づき、ノード2の先天性ポテンシャルはノード4に継承される。ノード4はこのように数値1.0のポテンシャルを継承する。しかしその値は無効となる。第2の処理でノード4はノード2の継承ポテンシャル0.5を継承する。その結果ノード4は先天性ポテンシャル1.0と継承ポテンシャル0.5を有し、後者には継承元ノード1の標識が付けられる。ここに「第1の処理」「第2の処理」という言い方は二つの処理を区別するため任意に決められ、実際の処理の順序には無関係である。
第6法則。継承ポテンシャルは第5法則の目的のために、加算的である。例えばあるノードが2つの親ノードからポテンシャル0.5を継承するとする。合計は1.0となり、継承ポテンシャルは無効となる。これは実際制御フロー図186のノード13でおこり、以下で記述される。
制御フロー図のポテンシャルを評価するにあたり、処理は幅方向に横断的に行われる。しかし、すぐに解を与えられないノードは無視され、後で処理される。あるノードに対し一度演算処理すると、そのノードは再度処理されない。ノードが複数の親ノードを有する可能性を考慮して、横断的処理は深さ優先法で行われる。
次に図11を参照する。図11は本発明に基づいて、制御依存図を作成する第1段階として、制御フロー図のポテンシャルを設定する方法についてのフローチャートである。
工程の各ステップは典型的な順番で図示されているが、当業者の実施上の選択により
多くの異なる順序に変更することができる。
最初のステップ188では、ソースコードが選択され、制御フロー図が上述のように準備される。ステップ190で 一つのノードが選択される。
次にステップ192において、現在のノードが初期化される。先天性ポテンシャルが現在のノードに割り当てられる。本実施形態では与えられる数値は1.0である。しかしその値は、継承されたポテンシャルが先天性ポテンシャルに合計されるか否か、判定できるのであれば他の値であってもよい。
次に決定ステップ194に進む。ここではさらに新しくノードが初期化される必要があるか判断される。答えが肯定であればステップ190に戻る。
決定ステップ194の答えが否定であれば、そのノードの初期化が完成され、そのポテンシャルの評価が始まる。次にステップ196に進み制御フロー図の未評価のノードが選択される。
次にステップ198に進み、全ての親ノードが評価されたか判定される。親ノードの無い根ノードの場合は、この判定は肯定となる。
決定ステップ198の判定が肯定の場合、以下で記述するステップ200に進む。
決定ステップ198の判定が否定の場合、現在のノードの評価は全ての親ノードの評価が終わるまで延期される。次にステップ202に進む。現在のノードは再処理と標識が付けられる。そしてステップ204において現在のノードの未評価の親ノードが選択され、決定ステップ198に戻る。
決定ステップ198の判定が肯定の場合、ステップ200の処理が行われる。全ての継承されたポテンシャルについて、その数値および元のノード名が記録される。後に必要とされる可能性があるので、元のノードの位相順序が記録されることが望ましい。
次に決定ステップ206に進み、現在のノードの先天性ポテンシャル値に継承ポテンシャルの組み合わせのいずれかが合算されるか否か判断される。
決定ステップ206の判定が肯定の場合、ステップ208に進む。特定の継承ポテンシャルの組合せは決定ステップ198で準備された記録から削除される。次に決定ステップ206に戻り、残った継承ポテンシャルを使用してテストが繰り返される。
決定ステップ206の判定が否定の場合、ステップ210に進む。現在のノードの全てのポテンシャルは子ノードへの継承のためこの後反復処理され、第2法則に従って分割される
次にステップ212において、評価済みと標識を付けられ、再度処理されることが無いようにされる。
次に決定ステップ214に進み、未評価のノードが残っていないか判断される。判定が肯定の場合、ステップ196にもどり新しいノードを選択する。
決定ステップ214の判定が肯定の場合、最終ステップ216に進む。ここでは制御フロー図のノードのポテンシャルが制御依存図を作成するのに使われる。詳細は以下で述べる。
制御フロー図のノードのポテンシャルが確立すると、制御依存図を作成することが出来る。以下の法則が制御依存図の作成に適用される。
第7法則。ノードが先天性ポテンシャル、値1.0のみを有する場合、そのノードは入口ノードに依存する。(即ち、制御依存図218の「入口」ノード)
第8法則。ノードが異なるノードを元とする複数の継承ポテンシャルを有する場合、対応する制御フロー図の元ノードの内、現在のノードに位相順序が最も近いノードに依存する。
第9法則。ノードが単一の継承ポテンシャルを有する場合、継承ポテンシャルの継承元ノードに依存する。第9法則は第8法則の平凡なケースである。
次に図12を参照する。図12は本発明に基づき制御依存図を作成する、図11の詳細フローチャートである。図11を参照して記述された方式は処理済と仮定する。以下の文はステップ216(図11)の続きである。
最初のステップ220で、制御依存図の入口ノードが確立される。
つぎにステップ222で、制御フロー図の1つのノードが選択される。有解の親ノードへの処理手順は深さ優先順序が適している。
次に決定ステップ224に進み、現在のノードが継承ポテンシャルを有するか判断される。
決定ステップ224の判定が否定の場合、現在のノードは先天性ポテンシャルのみを有すると結論され、第7法則が適用される。現在のノードは直接エントリーノードに依存する。次にステップ226に進む。1つのエッジがエントリーノードと現在のノードとの間に確立される。次に以下に述べる決定ステップ228に進む。
決定ステップ224の判定が肯定の場合、ステップ230に進む。ステップ200(図11)において、各継承ポテンシャルの継承元のノード名が記録されたことを思い出す。ステップ221では、継承元ノードの位相順序が比較され、継承元ノードか現在のノードに位相順序が最も近いノードが選択される。
単一の継承ポテンシャルのみの場合は、第9法則が適用される。継承元のノードが選択される。そうでない場合は第8法則が適用される。位相順序が最も近いノードが複数選択された場合は、これら全てのノードが選択される。
次に、ステップ232において、元ノードまたはステップ230で選択されたノードと、現在のノードとの間にエッジが確立される。
次に決定ステップ228にすすみ、制御フロー図の他のノードが処理されるべきか否か判断される。決定ステップ228の判定が肯定の場合、ステップ222に戻り、新たなノードを選択する。
決定ステップ228の判定が否定の場合、最後のステップ234に進む。制御依存図は完成し、処理は終了する。

実施形態4
次に図13を参照する。図13は図11,12を参照した手法にもとづき、本発明の実施形態による、制御依存図の作成を図示した複合図である。典型的なソースコード236は制御フロー図186に展開される。制御用の記号法では、依存図218上のノードは制御フロー図186上の同等ノードと区別するため付属記号「d」により区別される。
ノードのポテンシャルの割り当てを、制御フロー図186を参照しながら述べる。
ノード1は最初に処理される。(表1、行1)
Figure 2010507165
ノード1は2つの子ノードを有するため(ノード2およびノード15)、ノード1はそのポテンシャルを子ノード間で分割する。このようにステップ2ではノード2とノード15はそれぞれポテンシャル値0.5をノード1より継承する。ノード15は後述する。ノード2は継承ポテンシャル0.5(表1、行2)と先天性ポテンシャル1.0(表1、行3)を有する。ノード2は1つの子ノードを有する。
ノード4が処理される。ノード2から継承される2つのポテンシャルは別々に処理される。ここで第5法則の議論においてノード4はノード2の先天性ポテンシャルを継承するが、値が1.0だったので削除されたことを思い出す。この処理は表1から省略される。ノード4はノード2からその前の先祖ノード1から伝わる継承ポテンシャル0.5を継承する(表1、行4)。さらにノード4は先天性ポテンシャル1.0を有する(表1、行5)。
ノード4はすべての継承ポテンシャルを唯一の子ノードであるノード5に継承する(表1、行6)。ノード4は先天性ポテンシャル1.0を有する(表1、行7)。
ノード5はノード7,11の2つの子ノードを有し第2法則に従ってそのポテンシャルを配分する。ノード7から述べる。第1の処理でノード5の継承ポテンシャル(表1、行6)の50%、値0.25がノード7に継承される。(表1、行8)第2の処理で、ノード5の先天性ポテンシャル(表1、行7)の50%、値0.5でノード1から継承されて来たもの、がノード7に継承される(表1、行9)。ノード7は先天性ポテンシャル1.0を有する(表1、行10)。
次にノード13が処理される。制御フロー図186における処理の順番は必須ではない。ここに記述されている特殊な順序は典型である。しかし親の1つ、ノード11からの必要情報はまだ決められていないことは明らかである。ノード13は今のところ評価できず、延期される。
ノード11が処理される。処理内容はノード7と同じである。
ノード13が再度処理される。ノード13は同一の第1継承ポテンシャルをノード7(表1、行8)とノード11(表1、行11)より、それぞれ値0.25を継承する。このどちらも元々ノード1より継承したものである。簡便のため、これらは1行に一体化される(表1、行14)。ノード13は先天性ポテンシャル1.0を有する(表1、行15)。さらにノード13は同一の第2継承ポテンシャルをノード7(表1、行9)とノード11(表1、行12)より、それぞれ値0.5を継承する。第2継承ポテンシャルはそれらの共通の親ノード5より継承された。その合計は1.0となり、第2法則により削除される。(表1、行16)
最後にノード15が処理される。第1の処理で親ノードの一つであるノード1の先天性ポテンシャルの50%、値0.5(表1、行17)を継承する。第2の処理で、もう一つの親ノード13から、継承元を同じノード1とする継承ポテンシャル(表1、行14)がノード15に継承される(表1、行18)。これらの2つの継承されたポテンシャルの合計は1.0なので、第5法則により削除される。ノード15には先天性ポテンシャル1.0が残される。(表1、行19)。
制御依存図218の作成は説明された。
ノード1は先天性ポテンシャル、値1.0のみを有する。これは制御依存図218のノード1dに示され、第7法則によれば、ノード「入り口」に依存する。
ノード2はノード1より継承した1つの継承ポテンシャル(表1、行2)を有する。結果的にノード2dは第9法則により、ノード1dに依存する。
ノード4はノード1より継承した1つの継承ポテンシャル(表1、行4)を有する。したがってノード4dもノード1dに依存する。
ノード5は1つの継承ポテンシャル(表1、行6)を有する。したがってノード5dもノード1dに依存する。
ノード7は、ノード1とノード5からの2つの継承ポテンシャル(表1、行8,9)を有する。第8法則が適用される。制御フロー図186を参照すると、ノード5は位相順序がノード1より数値が大きい。したがってノード7dはノード5dに依存する。同様に11dは5dに依存する。
ノード13はノード1を継承元とする1つの残った継承ポテンシャル(表1、行14)を有する。ここでノード7を継承元とする2つの継承ポテンシャル(表1、行16)が削除されたことを特記するとノード7dが依存先の候補から抹消されることになる。ノード13は、第9法則にしたがいノード1に依存する。
ノード15は先天性ポテンシャル、値1.0のみを有し(表1、行19)、継承ポテンシャル(表1、行17,18)は削除された。ノード15は、第7法則によりノード「入口」に依存する。
制御フロー図186および制御依存図218を作成するにあたり、各ノードは一度しか評価されない。解を表1のようなハッシュ表に保存することにより、nを図のノード数として、総合効率O(n)が得られる。

システム依存図
データフローと制御依存をシステム全体に渡って見てゆくために、両図は繋がっている。図2を再び参照して、本工程は層58において、「CDG+DFGモジュール」60を使用して実行される。システム依存図(SDG)はより大きな、応用プログラムも包含する制御フロー図と考えてもよい。システム依存図は制御フロー図と同じ構成要因を有するが、CFGモジュール48がスタブを生成するかわりに、「CDG+DFGモジュール」60は呼出されたメソッドの単一方式制御フロー図にエッジを加える。1つのメソッドは1回以上呼ばれるので呼出し、返戻に際しコードが付帯する。コードは多様な方法で供給される。図は説明の場合を除いて一般的には表示されない。多態性システムでは、全ての可能な経路が形成される。
データフローと制御依存を応用プログラム全体に渡って見てゆくためには、単一メソッド図にリンクする必要がある。制御依存図の場合は、呼出しメソッドの呼出しノードと呼出されたメソッドの入口ノードとの間にリンクが確立する。このことは、呼出されたメソッドの全てのソースコード文は呼び出し文に制御上依存するということを意味する。
データフロー図は、とくにオブジェクト指向言語を使用する場合より複雑である。以下の3つの課題に対処する必要がある:
第1に、オブジェクト指向言語では、パラメータは複数のデータ要素を含み、そのデータ要素はさらに別なデータ要素を循環的に含む可能性がある。データフローを追跡するには、各データ要素、ステップを個別に取り扱う必要がある。実際には、単一のパラメータを受け取る単純関数では、データフロー図において多くのパラメータが処理されるように、データ構造の拡張が必要となることがある。
第2に、オブジェクト指向言語では、現在活性化しているオブジェクトを意味する「THIS」オブジェクトが存在する。「this」オブジェクトに関する情報は、メソッド呼出しの間で処理され正確にデータフローを記述しなければならない。この課題は「this」オブジェクトを各呼び出されたメソッドに対する第1パラメータとして取り扱うことにより解決する。
第3に、このグローバル変数は、応用プログラムのどこからでもアクセスされるので、もう一つの複雑な問題を提起する。このことは序列的なオブジェクト指向プログラム作成において例外である。この問題は、全てのメソッドにパラメータとして作用する「超グローバル」変数を定義することにより、グローバル変数は「超グローバル」変数のデータ要素として登録される。「超グローバル」変数が他のパラメータと共に展開される場合、そこに含まれるグローバル変数も呼出されるメソッドに渡される。
リスト5は以上3つの課題を取り扱うリストである。最初に単一のパラメータが関数 func()に渡されるように見える:
Public void func(myClass ins)
第1ステップで、「this」オブジェクトと「超グローバル」変数が加えられる。ここで関数は次のように表示される:
Public void func(THIS,SuperGlobal,myClass
ins)
第2ステップで、各パラメータのデータ要素が展開される。「this」オブジェクトは1つのデータ要素(var3)を含み、「超グローバル」変数は1つのデータ要素(セッション「ハロー」)を含み、「ins」は2つのデータ要素(var1,var2)を含む。展開の後、関数は次のように表示される:
Public void func(THIS, THIS.VAR3, SuperGlobal, SuperGlobal.Session−Hello, myClass ins, ins.var1, ins.var2).
次に図14を参照する。図14は、本発明の実施形態における、ソースコード239による制御フロー図のスタブ交換を図示したものである。パラメータの展開後、単一メソッド制御フロー図の関連ノードがもう一つの単一メソッド制御フロー図の開始部と連結する。同様の連結が終結部でも行われ、変数を戻す。図14では呼出し関数、func1()は左側のノードグローバル列238として表示され、呼出される関数、func2()は右側のノード列240として表示される。エッジ242,244はそれぞれ呼び出しと返却の時点でこれらの関数を繋ぐ。上記のように、これら連結の色はCDG+DEGモジュール60(図2)によりオペレータの便利のため割り当てられる。連結工程は繰り返され、より大きな、システム依存図のような応用プログラムにまで及ぶ図を作成することができる。

DOM操作
オブジェクト指向データベースに文書オブジェクトモデルが内包されることが好ましい。この目的のための好適なデータベースにはdb4o社(1900 South Norfolk Street, Suite 350, San Mateo, CA, 94403)製モデルdb4o、およびVersant Corporation社(255 Shoreline Drive, Suite 450, Redwood City, CA 94065)製VersantTMオブジェクトデータベースがある。
この手法の利点は文書オブジェクトモデルの保存と回収が早いため再演算の必要性が無いことがあげられる。データベースの保存により、静的特性のソースコードの問い合わせ、即ち、OQLのような照会言語を使用することが可能になる。さらにオブジェクトデータベースの助けにより、コードの自動更新が可能となることがある。
次に再度図2を参照する。層62はオブジェクト指向データベース64を含む。プログラムリスト6はデータベース64を使用した保存と回収の工程を示す。プログラムリスト7は、公的データ要素が私的データ要素に変換される、文書オブジェクトモデルの取り扱い事例である。

コード図照会
これまでの記述はソースコードについての生の情報の開発についてであった。その情報を処理可能な知識に変換するため、データマイニングが必要となる。この要求を満たすには2つの方法がある:
第1の方法は、埋め込み式でカスタム化された関数を使用することである。このような関数はひとたび開発されると簡単に使えるが、柔軟性に欠け、特定の応用プログラムや特定の顧客の要求に適用するのが困難である。
他の方法は、照会言語の使用である。この言語は柔軟で必要となる可能性のある静的、動的な知識をデータから回収することができる。しかし効果的に使用するためには使用者の記述能力が必要となる。
SCAエンジン22は特殊な組み込み関数により拡張された照会言語を使用している。これは上記2つの方式の利点の全てを有している。使用が容易で、高度な構成が可能である。熟練ユーザは特殊な必要性に対し、「ポイントとクリック」するだけで、照会方法を自作でき、最初から照会文を作成できる。
照会言語で開発された構文は、構成保存か意味保存の方式により、コード切削に使用可能である。コード切削は複雑さを削減し、デバッグやプログラムの理解を助ける。プログラム切削の要点は、焦点となっている場所で、変数の値に影響を与えないプログラムの文を削除することである。プログラム切削はよく知られた技術である。

実施形態5
この実施形態は、プログラムリスト8のコード部分に従ってのコード切削を図示している。何が4行目の「Write」文に影響を与えるかを学習することが望ましい。コードは分析されるか、構成を保存して「後方切削」される。「切削」工程は焦点となっている場所において特定の変数に影響を与える全ての構文を探し出し、焦点となっている場所から後戻りして演算される。「構成保存」型切削では、原プログラムの構成は大きく変更されない。無関係の構文は切削により単に削除される。
文「a++」(3行目)、「a−3」(1行目)は明らかに関連がある。切削の結果はプログラムリスト9に示す。削除されたコードは破線で表示される。しかし結果は正確にコンパイルしない。3行目では変数「b」の値が設定されている。しかし変数「b」は一度も宣言されていない。このプログラム部分は純粋な構成保存型切削を使用することの欠点を示している。構文は関連する表現と関連しない表現が混在する可能性があり、その場合、この処理結果はコンパイルしない。
解決法は、よく知られた「意味保存型」切削を使用することであり、そこでは意味が保存される変換しか許容されない。これは制御フロー図のブロックを切り離して、単一アクションを表す原子要素にすることにより達成される。この技術を適用することによりプログラムリスト10のコード断片が得られる。
本実施形態の照会言語は表2に示すコマンドを含む。ここにXとYはオブジェクトの配列である。
Figure 2010507165

Figure 2010507165
表2のコマンドを使用することにより、どんな型の被依存要素(データ、制御)または実行(制御フロー)でも、どの順序(「By」、「On」)でも容易に演算される。

実施形態6
表2のコマンドを使用した次の問い合わせは、ブール値を真から偽に変更する応用プログラムにおける効果を明らかにしている:
Result=All.InfluencedBy (All.FindByName(「namespace1.class1.booll」)).
変数Aまたは変数Bにより影響され、但し両方に影響されないデータの場所全てを検索するために、次の問い合わせを使用する:
Result=All.DataInfluencedBy (A) / All.DataInfluencedBy (B);
オブジェクト#3に影響を与え、オブジェクト#5に影響される全ての場所を探すためには、問い合わせは繋いだものとなり:
Result=All.InfluencingOn(All.FindByID(3)).InfuencedBy(All.FindByID(5)).
問い合せの供給
問い合わせを行うにあたって大変な労力が費やされるのは、大きな図において特定のオブジェクトを探すことである。問い合わせ、特に表2にあるような問い合わせをするための様々な方法が用いられてきた。これらの方式は一般的には異なる型のオブジェクトを検索するものである。共通検索方法は前向き/後ろ向きの終止符を特定の位置から返す。特定の問い合わせに関わった各メソッドは、終止符の結果を読み取る。異なる色により識別されず、一つの同じノードを無限に処理することを避けるため、上記の処理が行われる。
次に図15を参照する。図15は、典型的な制御依存図246,248,250であり、本発明の実施形態による「「蛙飛び」囲い込み計算」アルゴリズムを示す。
図15では、サブ図250で一番判りやすいが、エッジ252,272(赤)エッジ254,256(緑)がそれぞれ判りやすい表示をされ、それぞれ関数への、または、からの呼び出しまたは返戻を表している。エッジ258,260(青)が色表示されているのも同様の理由である。
処理のための横断は、以下の法則により、標識を付けられるか、色を付けられる。
第10法則。図は初期は標識付けされない。
第11法則。図の無標識部分は、スタブが、関数のソースコードに繋がる部分により置換されたことを表して、標識付けされるか色付けされる可能性がある。
第12法則。図の標識付き部分はその後の横断において飛び越される可能性がある。
各々の部分の境界部分だけが標識付け、色付けされれば、中間部分は標識付けされていると見做されるので、十分である。スタック法では、この境界標識は先入れ後出し操作と相互に関連する。
サブ図246の検索操作または終了操作における最初の横断処理はノード262(a)から264(e)に向かって行われる。ほとんどのノードは無標識である。しかし最初の横断処理においてノード262が選択された。ノード262はソースコードの幾つかの関数への入り口である。エッジ252は第11法則に基づいて「赤」に塗られる。関数からの戻り発生した場合、適合部分に標識付けする準備として、「赤」がスタックの上に置かれる。
サブ図248において、横断処理はノード266とノード268に囲まれた部分に至る。これらのノードはそれぞれ、もう一つの関数からの呼び出しと、返戻を表す。ノード266において、表示「青」がスタックの上に置かれる。
ノード268を出るときに、エッジ260の「青」表示とノード268との相互関連で表示「青」がスタックから取り出される。
第1関数の返戻が起こっているノード270の1つの枝において、エッジ272は「赤」に塗られる。表示「赤」はスタックから取り出される。このようにして、ノード262からノード264(e)への横断処理は特別な処理なく終了した。
結果的に第2の横断処理はノード274(b)から276(f)までとなる。エッジ254は、最初は第10法則に基づいて無標識であるが、第1関数が他の場所から再び呼び出され、表示「緑」がスタック上に置かれる。この処理は上記のエッジ252の処理と同じであるが、エッジ252とエッジ254の表示は識別可能である。
横断処理はノード266に至る。しかし、以前のノード266、エッジ258、ノード278、ノード280の横断処理および第2関数の呼び出しが再度確認される。この処理の部分、破線282で示された部分の処理は第12法則により跳び越し処理される。
図のこのような収縮は、多くの横断処理を飛び越し、またはコードの大きな部分表す可能性の有る従前に標識の付いた部分、を「蛙飛び」することを可能にする。ノード280,278とその入出エッジを含み、ノード266とノード268間の収縮は完成した。いまやノード274とノード276との間の処理をする場合、「青」のエッジで表示された部分は跳び越され、処理されない。この部分は既に囲われているので、情報は失われない。演算処理はこの「蛙飛び」処理によりコードのある部分を跳び越すことにより加速される。第2の横断処理は破線282に従う。
ノード270を出て、第1関数の二度目の呼び出しからの返戻に対応して、表示「緑」がスタックから取り出され、エッジ256は緑に着色される。次の横断処理(不図示)がエッジ254,256に繋がる経路の場合は、ノード284,286で囲まれる部分が収縮され、この部分は破線282より大きい。

脆弱性問い合わせ
再び図2を参照する。上述のSCAエンジン22の層はコード問い合わせの基盤を提供する。以下ではコードの脆弱性の探索のための応用プログラムについて説明する。
リストに掲載されていないものも含め、以下の脆弱性およびその問題は検出可能である:未評価入力、継続的攻撃、最小特権、論理的誤謬、GUI無しの頁、機密情報の表示、仮想ディレクトリからの入出力、データ有効性、破壊されたアクセス制御、保護メソッド、源感受型ウィザード

未評価入力
未評価入力は入口点を有する応用プログラムへの攻撃者を明らかにする。ユーザからの入力の無い、入口点の無い応用プログラムは攻撃されることは少ない。入力評価はユーザからの入力が既定のルールに従っているかを評価する。しかしこの課題は開発者が時々無視しまたは、必要な要素を提供し忘れることがある。
SCAエンジン22はデータフロー図を使用し、未評価の入力サイトを発見する。この目的で、データフロー図の各ノードは3つの分類に分けられ、[1],[2],[3]と表示される。応用プログラムの入口点は分類[1]。この点は安全でない入力を含む可能性がある。分類[2]は、入力評価関数で入力データを除菌する。分類[3]はデータが使用される場所である。SCAエンジン22は、分類[3]において評価を行い、受け入れ可能なデータのみ処理される。
次に図16を参照する。図16は、本発明の実施形態に従った、コンピュータプログラムの中で未評価の入力が無いかを探す手法についてのフローチャートである。以下に示す方法では、複数のノードを除去するフロー図の囲い込みが存在する。このような囲い込みは、ある条件文の評価の必要を無くし、図の横断処理の効率を向上させる。最初のステップ288では、例えば図8を参照して記述されたような、データフロー図が用意される。前述の「蛙飛び」法を適用して、図の横断処理が始まる。
ステップ290では、1つのノードが選択され上記により分類される。
次に決定ステップ292に進み、現在のノードが入力評価関数であるか判定される。
決定ステップ292の判定が肯定なら、ステップ294に進む。現在のノード及び入りエッジ、出エッジはデータフロー図から削除される。
ステップ294終了後、または決定ステップ292の判定が否定なら、決定ステップ294に進み、データフロー図で処理すべきノードがまだあるか判定される。決定ステップ294の判定が否定なら、ステップ290に戻る。
決定ステップ294の判定が否定なら、処理の第1段階は終了した。データフロー図には分類[1]と[3]のノードのみ残される。
ステップ298に進み、分類[1]のノードが選択される。
次にステップ300に進み、現在のノードから離れたエッジが選択される。
次に決定ステップ302に進み、入力が使用されるノード(分類[3])に現在のエッジが届いているか判定する。決定ステップ302の判定が肯定なら、ステップ304に進む。現在の経路は非安全と分類される。
ステップ304終了後、または決定ステップ302の判定が否定なら、決定ステップ306に進み、現在のノードから出ているエッジがまだあるか判定される。
決定ステップ306の判定が肯定なら、ステップ300に戻る。
決定ステップ306の判定が否定なら、決定ステップ308に進み、データフロー図内に分類[1]のノードがまだあるか判定される。決定ステップ308の判定が肯定なら、ステップ298に戻り、新しいノードが選択される。
決定ステップ308の判定が否定なら、データフロー図は全て評価済みである。最後のステップ310に進み、処理は終了する。
この方法の別の実施形態では、分類[3]のノードがステップ298で選択され、分類[1]のノードと分類[3]のノードの繋がりが、分類[3]のノードに入るエッジの評価により決定される可能性がある。

実施形態7
図17を参照する。図17は、本発明の実施形態に従って、データフロー図を処理し、未評価入力の脆弱性を判定することを示す。データフロー図312,314はコード316に対応している。分類[1],[2],[3]のノードが表示されている。
図16のメソッドが終了したとき、分類[2]ノード318が見つけられ、サブ図314のとおり削除される。サブ図312では、エッジ320は分類[1]ノード322とノード318を繋げる。サブ図314ではエッジ320は終了しているのが明らかである。
ステップ298(図16)から始まる処理が行われるとき、エッジ324,326は分類[1]ノード328と分類[3]のノードを繋げていることが判り、従って非安全と報告される。分類[1]ノード328は安全性に脆弱性を有すると判定される。表3に示すように、この技術の変形により、複数の型のウィルス注入による脆弱性を発見することが出来る。図3はノードの分類とそれに対応する注入ウィルスの型を対応させている。
Figure 2010507165

連続攻撃
連続攻撃は2つの段階でおこる。第1段階はサーバに危険な荷物を保存する。第2段階では、典型的には潜伏後、その荷物が実行される。影響が潜伏しているため手動により脆弱性をみつけるのは困難である。図16および17におけるメソッドは、保存関数を(入口点の代わりに)分類[1]に分類することに変更すれば、このような脆弱性を発見することが出来る。
当業者にとって明白な変更により、未評価入力の議論であった相互入力を取り扱う代わりに、データをデータベースより直接引き取ることで、その方法は次の脆弱性を検知することが出来る:第2段階SQL注入、連続的SQL注入、システム間攻撃、連続サイト間スクリプト攻撃(XSS攻撃)。

実施形態8
プログラムリスト11のコード部分を考える。そのコードはデータベースに対し、3のidを持つ人物の名前を問い合わせる。そして、第2の問い合わせで入手した名前でその人物の階級を入手する。たとえ名前がデータベースに保管される以前に殺菌されていても、即ち、二重引用符で囲われていても、1つの引用名(「「O」Brian」)はデータベースより取り出される。応用プログラムの性質により、保存データの引渡しや実行のやり方により、2度目の問い合わせはある様式の攻撃、時に「第2段階SQL注入」と呼ばれる攻撃に晒される。

最小特権
最小特権はITの安全対策ではよく知られた言葉である。その考えの背景は、いかなる実体、ユーザであれ、応用プログラムであれ、サービスであれ、それが正しく働くために必要な権限のみを有し、それ以上は有しない、という考えである。考えは単純だが、その実行は手間がかかる。この困難さは、表2を参照して説明された上記照会言語を使用し、特権を特定して、その特権を特定する構成ファイルを自動生成することにより軽減される。
コードをスキャンし、応用プログラムや有権限ユーザからのアクセスが不要なプログラムオブジェクトへのアクセスを拒否することにより、無権限使用をも防ぐ。

実施形態9
次の文は最小特権構成ファイルへの入り込みで、保存された手順「xp..cmdshell」へのアクセス許可を取り消す。そのようなアクセス許可はデータベースサーバーに遠隔アクセスを許容する可能性を有し、脆弱性となる。
If (!Code.Execute(SQLStoredProcedure(「xp..cmdshell」)))
SQLScript.Add(RemovePermissions(「xp..cmdshell」)
上の問い合わせは次の内容を含む.SQL構成ファイルを作成する。
Figure 2010507165
これは保存された手順「xp..cmdshell」を削除する。

最小特権
よく知られているファイルシステムNTFS(NT File System)は、特定のファイルとフォルダーに定義されるのを容認する。上記照会言語を使用して、コードを質問することにより、応用プログラムでどのファイルとフォルダーにアクセスされるか、そして、どういうアクセスが必要であるかを学ぶことが出来る。それ以外は全て拒否される。SCAエンジン22(図2)はオペレータが手動で許可を構成できるダイアログボックスを提示する。NTFS以外のファイルシステムにも同じアプローチが適用できる。

論理欠陥
論理欠陥はある特定の応用プログラムに固有である。これらはコード化の誤りで、応用プログラムの規格に準拠していない。そのような欠点は上述の照会言語とSCAエンジン22(図2)を使用することにより検出できる。
この技術は、例えば、応用プログラムで指定されたビジネス論理に違反するなど、論理的な欠陥から由来する多くの型の脆弱性を検知する。明確な事例は、パスワードや、クレジットカード番号や、社会保険番号などの秘密情報の表示である。他の例は忘れられたデバッグコード、負数の注文、および裏口などである。

実施形態10
以下の文は、管理者でもないのに、管理特権の無いユーザが、別のユーザの注文を見ることが許可されるという論理的な脆弱性を見つけるために、オープンソース書店で実行された問い合わせである。
Result=FindPlacesWhere(OrdersRetrievedFromDB&&
pagePermission!=Administrator&&
dataNotInfluencedBy(userId).

GUIアクセスの無い頁
インターネットからはアクセスできるが、GUIからアクセスできない頁とは、通常、「不鮮明によるセキュリティ」技術の使用であり、即ち、デザインの秘密または、セキュリティ提供上の行為に起因する。このアプローチは、応用プログラムのセキュリティ脆弱性の可能性を認め、欠点が知られておらず、したがって、攻撃者がそれを発見しないと信ずることに依拠する。この不人気なアプローチは、ある応用プログラムが隠れたセキュリティの脆弱性を有し、特定の精査の必要があることをオペレータに警告する。

実施形態11
次の問い合わせは上記のタイプの脆弱性を検知する。
FindAllPages − FindUIPageAccessCommand.AccessedPage

機密情報の表示
パスワードやクレジットカード番号など幾つかの変数はユーザから常に引き出され、表示されない。1つの脆弱性では、ウェブページの「隠された」分野は、ブラウザの「ソースを見る」オプションを使用することで表示可能である。

実施形態12
以下の問い合わせは、秘密情報の表示を可能にする脆弱性を検知する。:
All.FindSensitiveVariables().DataInfluencingOn(Find_Outputs()).

仮想ディレクトリからの入出力
仮想ディレクトリに適用された入出力操作は、データを露出する可能性がある。何故ならば、別の方法で構成されない限り、仮想ディレクトリはすべてのユーザによる読み出しを可能にする傾向があるからである。

実施形態13
以下の問い合わせはこの脆弱性を検知する。:
Find_File_Access().NotDataInfluencedBy(AbsolutePath.

データ合法化関数
データ合法化関数はよく知られた技術である。その有用性にもかかわらず、あるプログラマは独占的に入力承認関数を開発する可能性がある。SCAエンジン22(図2)はよく知られている、ソフトウェア故障の木解析(SFTA)を使用する。SFTAは例えば、つぎのドキュメントで議論されている。A Software Fault Tree Approach to Requirements Analysis of an Intrusion Detection System、Guy Helmer et al. (2001),
インターネット出版。
再び図2を参照して、層66のSFTAエンジン68は、コードで見つかる可能性のあるデータ承認関数の能力を評価する。
図18を参照する。図18は本発明の実施形態に基づいた、典型的な独自のデータ承認関数の処理を図式的に示す。これは層66(図2)に起こる。ソースコード330として表示された関数は、文字「アポストロフィ」のストリングsでの発生を代替することを目的とする。ソースコード330は1つの「for」ループ、1つの「if」ブロック、および割り当て文を含む。
ソースコードを実行する前にストリングsがN番目の位置に引用符を含むと仮定する。引用符がソースコード330の「for」ループの完成後も残るか否か決定するのが望ましい。コードを通じて3つの可能な経路があるのを確認することから始める:
1.プログラムは「for」ループには入らない。
2.プログラムは「for」ループには入るが、「if」文はある理由で決して「真」とは評価しない。
3.プログラムは「for」ループにも「if」ブロックにも入るが、割り当てられる表現は引用符を適所に残す。
これらの可能性はサブ図332に示されている。3番目の可能性は、サブ図332のブロック334によって示されるように、不可能であり、SCAエンジン22の目的のため更に考慮する必要は無い。
最初の可能な経路に対応している、ブロック336に示されていたオプションを考慮する。「for」ループは「if」ブロック即ち、「ストリングの長さが2未満であれば」を実行しない。「s」が引用符だけを含む単一文字ストリングであれば、この関数は「誤」となる。
2番目の可能な経路はブロック338で表わされる。プログラムは「for」ループに入ったが、「if」文はストリングがN番目の位置に引用符を含んでいても「虚偽」を戻す。これは「i」が「N」に決して達しない場合にだけ起こり、即ち以下の式で起こる。
言い換えれば、引用符が長さで1文字を超えるストリングの端にあると、関数は「誤」となる。
Figure 2010507165
全工程は合成グラフ340に示される。そこでは、2つの欠陥342、344が円で囲われている。

自動ユニット試験
再び図2を参照して、例えば図17のデータ承認関数を、層70のユニット試験エンジン72に挿入することで、自動的に試験して、データ合法化が失敗するシナリオが特定される。従来のテスト発生プログラムを使用し、被評価関数はテスト応用プログラムに埋め込まれ、テストケースが生成する。テスト応用プログラムが実行されるとき、出力は評価エンジンに提供され、結果はセキュリティの脆弱性を示すことができる。

壊れたアクセス制御
この脆弱性では、認証されたユーザの処理可能事項に関する制限は適切に実行されない。例えば、攻撃者は、他の使用者口座へのアクセス、機密のファイルの閲覧、無権限の関数の使用といった脆弱性を利用できる。そのような脆弱性の場所を見つける際に、上記の照会言語を使用し、ある評価基準の規則遵守が必要であるとき、例えばユーザ承認の時、にだけ呼ばれるページを特定するが、ユーザがその頁を使用中は検査しないように、問い合わせを設計することが出来る。

実施形態14
この例では、「 /アドミン」という名の頁は変数「IsAdmin」が「1」のときのみ呼び出される。しかし、ページ自体はその状態をチェックしない。そして、明白にその頁を呼ぶと、アクセス制御は破壊される。プログラムリスト12で示される処理にある問い合わせが、その脆弱性を検出する。

保護手段の自動発見
前記の問い合わせのいくつかは、ユーザが、応用プログラムの何らかの情報、例えば、入力を殺菌するのにどの関数が使用されるか、主要な暗号情報はどこに保存されるか、を提供するのを必要とする。自動的にこれらの質問の答えを見つけるのにいわゆる「問い合わせのお助け」を使用できる。例えば、データ・アクセス層(DAL)の方法論を明らかにする質問は、ユーザがDAL方法論を定義する必要なく、SQL注入脆弱性の識別において役に立つ。
細部最適化問題
SCAエンジン22(図2)は、ソースに敏感なウィザードを使用して問い合わせを生成する脆弱性発見プロセスを補助する。基本情報に加えて、SCAエンジン22の内蔵の問い合わせには、問い合わせが実行されるべきか否かを決定する条件を具備している。このウィザードはソースコードに敏感なウィザードで、そのため、特定のソースコードに対し条件が満たされているかを判定するため、関連した質問をする。例えば、応用プログラムがデータベースにアクセスしない場合、すべてのデータベースに関連した質問を削除する。
本発明は上記で特に示され、説明されたことに限定されないことは、当業者によって理解される。むしろ、本発明の範囲は、上記の説明を読めば当業者が想到できる、従来技術に無い、上記で説明された様々な特徴の変化形や修正形のみならず、組み合わせとサブ組み合わせ含む。

プログラムリスト
プログラムリスト1
Figure 2010507165
プログラムリスト2
Figure 2010507165
プログラムリスト3
Figure 2010507165
プログラムリスト4
Figure 2010507165
プログラムリスト5
Figure 2010507165
プログラムリスト6
Figure 2010507165
プログラムリスト7
Figure 2010507165
プログラムリスト8
Figure 2010507165
プログラムリスト9
Figure 2010507165
プログラムリスト10
Figure 2010507165
プログラムリスト11
Figure 2010507165
プログラムリスト12
Figure 2010507165
10 システム 12 コンピュータ
14 ディスプレイ 16 ソースコード
18 ソースコード分析ソフト
20 セキュリティ関連層 22 SCAエンジン

Claims (66)

  1. コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、
    コンピュータプログラムの命令を内蔵する記憶装置と、
    入出力装置と、
    前記記憶装置にアクセスし前記命令を読む演算処理装置と、
    からなり、
    前記命令は、前記演算処理装置に対し、
    分析対象のソースコードを前記入出力装置経由で受け取るようにさせ、
    ここに前記ソースコードはコード要素と文からなり、前記文の少なくとも一部は変数を参照し、
    前記変数は要素変数を有するデータ構造からなり、
    前記要素変数は要素名を有し、
    前記命令は前記演算処理装置に対し、
    前記ソースコードのオブジェクト指向モデルを生成するようにさせ、
    ここに前記コード要素は夫々オブジェクトを表し、
    また、前記モデルの生成は、夫々の識別子を前記要素変数に割り当てるステップからなり、
    前記演算処理装置は、
    前記モデルを使用して、ノードから構成される制御フロー図を生成し、
    前記制御フロー図からデータフロー図を導出し、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出し、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、前記夫々の識別子を使用して既定の要素変数に対する参照を同定することにより、セキュリティ脆弱性を有する前記ソースコードの部位を同定し、
    ここに前記既定の要素変数の前記要素名は、もう一つの要素変数の前記要素名と同じであり、
    前記セキュリティ脆弱性を報告する、
    ように動作可能であることを特徴とするシステム。
  2. 前記演算処理装置は、前記セキュリティ脆弱性を除去するために前記ソースコードを変更するように動作可能である、ことを特徴とする請求項1に記載のデータ処理システム。
  3. 前記演算処理装置は、前記ソースコードの、単一アクションのみが行われる原子要素を表す、前記制御依存図のブロックを定義するために、前記制御依存図をコード切削するように動作可能である、ことを特徴とする請求項1に記載のデータ処理システム。
  4. 前記演算処理装置は、入力データが有効とされる前記データフロー図のデータフローノードを同定し、前記入力データが前記同定されたデータフローノードにおいて既定の仕様に従って有効とされたことを証明する、ように動作可能であることを特徴とする請求項1に記載のデータ処理システム。
  5. 前記演算処理装置は、前記ソースコードにソフトウェア故障の木解析を適用するように動作可能である、ことを特徴とする請求項1に記載のデータ処理システム。
  6. 前記演算処理装置は、前記データ評価関数が誤りとなるシナリオを同定するために、
    データ評価関数に対しテストケースを生成するように動作可能である、ことを特徴とする請求項1に記載のデータ処理システム。
  7. コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、
    コンピュータプログラムの命令を内蔵する記憶装置と、
    入出力装置と、
    前記記憶装置にアクセスし前記命令を読む演算処理装置と、
    からなり、
    前記命令は、前記演算処理装置に対し、
    分析対象のソースコードを前記入出力装置経由で受け取るようにさせ、
    ここに前記ソースコードはコード要素と文からなり、前記文の少なくとも一部は変数を参照し、
    前記ソースコードのオブジェクト指向モデルを生成するようにさせ、
    ここに前記コード要素は夫々オブジェクトを表し、
    前記演算処理装置は、
    前記モデルを使用して、ノードから構成される制御フロー図を生成し、
    前記制御フロー図からデータフロー図を導出し、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出し、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、
    前記制御依存図の第1部位を1回目に横断処理して前記制御依存図の処理済部分に標識を付け、その後2回目に前記標識の付いた部分を含む前記制御依存図の第2部位を、前記標識の付いた部分を飛ばして横断処理することにより、
    セキュリティ脆弱性を有する前記ソースコードの部位を同定して、
    前記セキュリティ脆弱性を報告する、
    ように動作可能であることを特徴とするシステム。
  8. 前記演算処理装置は、前記変数の既定の1つに影響を与える前記制御依存ノードのみを同定するため、前記制御依存図をコード切削するように動作可能であり、前記制御依存図には意味を保存する処理だけが行われる、ことを特徴とする請求項7に記載のデータ処理システム。
  9. コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、
    コンピュータプログラムの命令を内蔵する記憶装置と、
    入出力装置と、
    前記記憶装置にアクセスし前記命令を読む演算処理装置と、
    からなり、
    前記命令は、前記演算処理装置に対し、
    分析対象のソースコードを前記入出力装置経由で受け取るようにさせ、
    ここに前記ソースコードはコード要素と文からなり、
    前記ソースコードのオブジェクト指向モデルを生成するようにさせ、
    ここに前記コード要素は夫々オブジェクトを表し、
    前記演算処理装置は、
    前記モデルを使用して、ノードから構成される制御フロー図を生成し、
    前記制御フロー図からデータフロー図を導出し、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出し、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し
    前記データフロー図内に、入力が受入れられた第1データフローノード、データが有効とされた第2データフローノード、およびデータが使用された第3データフローノードを同定する工程と、前記データフロー図から前記第2データフローノードを削除する工程と、その後前記第3データフローノードの1つと前記第1データフローノードの1つが前記データフローエッジの1つにより繋がっていることを判定する工程とにより、
    第3データフローノードの1つが、未評価入力の脆弱性を有することを報告する、
    ように動作可能であることを特徴とするシステム。
  10. 前記演算処理装置は、前記データフロー図のデータフローノードを同定し、前記入力データが前記同定されたデータフローノードにおいて既定の仕様に従って有効とされたことを証明する、ように動作可能であることを特徴とする請求項9に記載のデータ処理システム。
  11. コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、
    コンピュータプログラムの命令を内蔵する記憶装置と、
    入出力装置と、
    前記記憶装置にアクセスし前記命令を読む演算処理装置と、
    からなり、
    前記命令は、前記演算処理装置に対し、
    分析対象のソースコードを前記入出力装置経由で受け取るようにさせ、
    ここに前記ソースコードはコード要素と文からなり、前記文の少なくとも一部は変数を参照し、
    前記ソースコードのオブジェクト指向モデルを生成するようにさせ、
    ここに前記コード要素は夫々オブジェクトを表し、
    前記演算処理装置は、
    前記モデルを使用して、ノードから構成される制御フロー図を生成し、
    ここに前記制御フロー図は、前記ソースコードにおける複数の関数を記述し、
    前記変数はさらにグローバル変数からなり、
    前記グローバル変数は、前記制御フロー図からデータフロー図を導出するため、前記関数に、前記グローバル変数をデータ要素として有する、超グローバル変数として渡され、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出し、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、
    セキュリティ脆弱性を有する前記ソースコードの部位を同定して、
    前記セキュリティ脆弱性を報告する、
    ように動作可能であることを特徴とするシステム。
  12. コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、
    コンピュータプログラムの命令を内蔵する記憶装置と、
    入出力装置と、
    前記記憶装置にアクセスし前記命令を読む演算処理装置と、
    からなり、
    前記命令は、前記演算処理装置に対し、
    分析対象のソースコードを前記入出力装置経由で受け取るようにさせ、
    ここに前記ソースコードはコード要素と文からなり、前記文の少なくとも一部は変数を参照し、
    前記ソースコードのオブジェクト指向モデルを生成するようにさせ、
    ここに前記コード要素は夫々オブジェクトを表し、
    前記モデルを使用して、ノードから構成される制御フロー図を生成し、
    前記制御フロー図からデータフロー図を導出し、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    ここに前記演算処理装置は、
    第1配列と第2配列を前記データフローノードの夫々に随伴させることにより、前記データフロー図を導出し、
    ここに前記第1配列は、随伴されたデータフローノードが依存する前記変数に関する
    静的情報を有し、
    前記第2配列は、前記随伴されたデータフローノードに影響を与える他の変数を同定する情報を有し、
    前記他の変数は前記データフローノードのその他のノードに随伴されており、
    前記制御フロー図を横断処理し、
    前記ノードの夫々において、前記情報に応じて、前記データフロー図の対応するデータフローノードの前記第2配列内に情報を設定し、
    前記データフローエッジを前記データフローノードと前記他のデータフローノードと夫々繋ぐことにより生成し、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出し、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、
    セキュリティ脆弱性を有する前記ソースコードの部位を同定して、
    前記セキュリティ脆弱性を報告する、
    ように動作可能であることを特徴とするシステム。
  13. コンピュータプログラムのセキュリティ脆弱性を検出するためのデータ処理システムであって、
    コンピュータプログラムの命令を内蔵する記憶装置と、
    入出力装置と、
    前記記憶装置にアクセスし前記命令を読む演算処理装置と、
    からなり、
    前記命令は、前記演算処理装置に対し、
    分析対象のソースコードを前記入出力装置経由で受け取るようにさせ、
    ここに前記ソースコードはコード要素と文からなり、前記文の少なくとも一部は変数を参照し、
    前記変数は要素変数からなり、
    前記要素変数は要素名を有し、
    前記ソースコードのオブジェクト指向モデルを生成させ、
    ここにおいて前記コード要素は夫々のオブジェクトによって表され、
    前記演算処理装置は、
    前記モデルを使用して、ノードから構成される制御フロー図を生成し、
    ここに前記各ノードは前記制御フロー図上で位相順序を有し、
    前記ノードの一部は少なくとも1つの子ノードを有し、
    前記制御フロー図からデータフロー図を導出し、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出し、
    ここに前記演算処理装置は、
    前記制御フロー図の前記ノードに対し先天性値を与えることにより前記制御依存図を導出し、
    ここに前記先天性値は、前記少なくとも1つの子ノードによって平等に継承値として継承され、
    前記各ノードで継承値の合計が先天性値に等しい時はその継承値を削除し、
    前記ノードの前記継承値の各継承記録を維持し、
    ここに前記継承記録は前記各継承値の継承元を示す前記ノードの同定番号を含み、
    前記制御フロー図の入口ノードを同定し、
    前記ノードの最初の1組のノード群を同定し、
    ここに前記最初の1組のノード群の構成ノードは前記継承値を持たず、
    夫々第1エッジを最初の1組のノード群と前記入口ノードとの間に確立し、
    前記ノードの第2組のノード群を同定し、
    ここに前記第2組のノード群の構成ノードは前記継承値を有し、
    前記継承記録において、前記第2組のノード群間に継承元ノードの近接位相順序を同定し、
    第2のエッジを前記第2組のノード群の前記構成ノードと最接位相順序の前記継承元ノードとの間に夫々生成し、
    ここにおいて前記演算処理装置は、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、
    セキュリティ脆弱性を有する前記ソースコードの部位を同定して、
    前記セキュリティ脆弱性を報告する、
    ように動作可能であることを特徴とするシステム。
  14. コンピュータプログラムのセキュリティ脆弱性を検出するための、コンピュータにより実現される方法であって、
    解析対象のソースコードを受領する工程と、
    ここに前記ソースコードはコード要素と文でできており、
    前記文の少なくとも一部は変数を参照し、
    前記変数は要素変数を有するデータ構造からなり、
    前記要素変数は要素名を有し、
    前記ソースコードのオブジェクト指向モデルを生成する工程と、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記モデルを生成する工程は前記要素変数に夫々識別子を割当ることからなり、
    前記モデルを使用しノードを有する制御フロー図を生成する工程と、
    前記制御フロー図からデータフロー図を導出する工程と、
    ここに前記データフロー図はデータフローノードおよび前記データフローノードを接続するデータフローエッジより構成され、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出する工程と、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、前記夫々の識別子を使用して、既定の要素変数に対する参照を同定することにより、セキュリティ脆弱性を有する前記ソースコードの部位を同定する工程と、
    ここに前記既定の要素変数の前記要素名は、もう1つの要素変数の前記要素名と同一であり、
    前記セキュリティ脆弱性を報告する工程と、
    からなることを特徴とする方法。
  15. 前記ソースコードはオブジェクト指向言語で記述されていることを特徴とする請求項14に記載の方法。
  16. 前記オブジェクト指向言語は、現在活性化しているオブジェクトから成り、前記データフロー図は呼び出されるメソッド群から成り、データフロー図を導出する前記工程は、前記現在活性化しているオブジェクトを、前記呼び出されるメソッド群へのパラメータとして使用する工程であることを特徴とする請求項15に記載の方法。
  17. 前記セキュリティ脆弱性を除去するため、前記ソースコードを変更する工程をさらに含むことを特徴とする請求項14に記載の方法。
  18. 前記分析工程は、前記ソースコードの、単一アクションのみが行われる原子要素を表わす前記制御依存図のブロックを定義するため、前記制御依存図をコード切削する工程を含むことを特徴とする請求項14に記載の方法。
  19. 前記分析工程は、問合せ言語を使用して行われることを特徴とする請求項14に記載の方法。
  20. 前記分析工程は、入力データが有効とされる前記データフロー図のデータフローノードを同定する工程と、前記入力データが前記同定されたデータフローノードにおいて既定の仕様に従って有効とされたことを証明する工程と、を含むことを特徴とする請求項14に記載の方法。
  21. 前記セキュリティ脆弱性は、前記ソースコードの一部が仕様に従っていないという論理的誤りを含むことを特徴とする請求項14に記載の方法。
  22. 前記セキュリティ脆弱性は、ユーザのアクセスに対する非強制制限を含むことを特徴とする請求項14に記載の方法。
  23. 前記分析工程は、データアクセス層の方法論の新しい開示を含むことを特徴とする請求項14に記載の方法。
  24. 前記セキュリティ脆弱性は、ユーザがウェブページの隠し分野を表示する能力を含むことを特徴とする請求項14に記載の方法。
  25. 前記セキュリティ脆弱性は、仮想ディレクトリ上で入出力操作が可能であることを含むことを特徴とする請求項14に記載の方法。
  26. 前記分析工程は、前記ソースコードに対しソフトウェア故障の木解析を適用する工程を含むことを特徴とする請求項14に記載の方法。
  27. データ検証関数が誤りとなるシナリオを同定するため、前記データ検証関数に対しテストケースを生成する工程をさらに含むことを特徴とする請求項14に記載の方法。
  28. 前記コンピュータプログラムのオブジェクトに対する、アクセス特権を特定する構成ファイルを自動的に準備する工程をさらに含むことを特徴とする請求項14に記載の方法。
  29. 前記制御フロー図、前記データフロー図及び前記制御依存図は前記コンピュータプログラムの単一関数に対応することを特徴とする請求項14に記載の方法。
  30. 前記ソースコードは難読化されていることを特徴とする請求項14に記載の方法。
  31. コンピュータプログラムのセキュリティ脆弱性を検出するための、コンピュータにより実現される方法であって、
    解析対象のソースコードを受領する工程と、
    ここに前記ソースコードはコード要素と文でできており、
    前記文の少なくとも一部は変数を参照し、
    前記ソースコードのオブジェクト指向モデルを生成する工程と、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記モデルを使用し、ノードから構成される制御フロー図を生成する工程と、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出する工程と、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、セキュリティ脆弱性を有する前記ソースコードの部位を同定する工程と、
    ここにおいて前記分析工程は、前記制御依存図の第1部位を1回目に横断処理して前記制御依存図の処理済部分に標識を付け、その後2回目に前記標識の付いた部分を含む前記制御依存図の第2部位を、前記標識の付いた部分を飛ばして横断処理する工程を含み、
    前記セキュリティ脆弱性を報告する工程と、
    からなることを特徴とする方法。
  32. 前記セキュリティ脆弱性を除去するため、前記ソースコードを変更する工程をさらに含むことを特徴とする請求項31に記載の方法。
  33. 前記分析工程は、前記変数の既定の1つに影響を与える前記制御依存ノードのみを同定するため、前記制御依存図をコード切削する工程を含み、前記制御依存図には意味を保存する処理だけが行われる、ことを特徴とする請求項31に記載の方法。
  34. 前記分析工程は、問合せ言語を使用して行われることを特徴とする請求項31に記載の方法。
  35. 前記制御フロー図、前記データフロー図及び前記制御依存図は前記コンピュータプログラムの単一関数に対応することを特徴とする請求項31に記載の方法。
  36. コンピュータプログラムのセキュリティ脆弱性を検出するための、コンピュータにより実現される方法であって、
    解析対象のソースコードを受領する工程と、
    ここに前記ソースコードはコード要素と文でできており、
    前記モデルを使用し、ノードから構成される制御フロー図を生成する工程と、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出する工程と、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、セキュリティ脆弱性を有する前記ソースコードの部位を同定する工程と、
    ここにおいて前記分析工程は、前記データフロー図内に、入力が受入れられた第1データフローノード、データが有効とされた第2データフローノード、およびデータが使用された第3データフローノードを同定する工程を含み、
    前記データフロー図から前記第2データフローノードを削除する工程と、
    その後前記第3データフローノードの1つと前記第1データフローノードの1つが前記データフローエッジの1つにより繋がっていることを判定する工程と、
    前記第3データフローノードが未評価入力の脆弱性を有することを報告する工程と、
    からなることを特徴とする方法。
  37. 前記分析工程は、入力データが有効とされる前記データフロー図のデータフローノードを同定する工程と、前記入力データが前記同定されたデータフローノードにおいて既定の仕様に従って有効とされたことを証明する工程と、を含むことを特徴とする請求項36に記載の方法。
  38. 前記セキュリティ脆弱性を除去するため、前記ソースコードを変更する工程をさらに含むことを特徴とする請求項36に記載の方法。
  39. 前記分析工程は、問合せ言語を使用して行われることを特徴とする請求項36に記載の方法。
  40. 前記制御フロー図、前記データフロー図及び前記制御依存図は前記コンピュータプログラムの単一関数に対応することを特徴とする請求項36に記載の方法。
  41. コンピュータプログラムのセキュリティ脆弱性を検出するための、コンピュータにより実現される方法であって、
    解析対象のソースコードを受領する工程と、
    ここに前記ソースコードはコード要素と文でできており、
    前記文の少なくとも一部は変数を参照し、
    前記ソースコードのオブジェクト指向モデルを生成する工程と、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記モデルを使用し、ノードから構成される制御フロー図を生成する工程と、
    ここに前記制御フロー図は、前記ソースコードにおける複数の関数を記述し、
    前記変数はさらにグローバル変数からなり、
    前記グローバル変数は、前記関数に、前記グローバル変数をデータ要素として有する、超グローバル変数として渡され、
    前記制御フロー図からデータフロー図を導出する工程と、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出する工程と、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析する工程と、
    セキュリティ脆弱性を有する前記ソースコードの部位を同定する工程と、
    前記セキュリティ脆弱性を報告する工程と、
    からなることを特徴とする方法。
  42. 前記セキュリティ脆弱性を除去するため、前記ソースコードを変更する工程をさらに含むことを特徴とする請求項41に記載の方法。
  43. 前記分析工程は、問合せ言語を使用して行われることを特徴とする請求項41に記載の方法。
  44. 前記制御フロー図、前記データフロー図及び前記制御依存図は前記コンピュータプログラムの単一関数に対応することを特徴とする請求項41に記載の方法。
  45. コンピュータプログラムのセキュリティ脆弱性を検出するための、コンピュータにより実現される方法であって、
    解析対象のソースコードを受領する工程と、
    ここに前記ソースコードはコード要素と文でできており、
    前記文の少なくとも一部は変数を参照し、
    前記ソースコードのオブジェクト指向モデルを生成する工程と、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記モデルを使用し、ノードから構成される制御フロー図を生成する工程と、
    前記制御フロー図からデータフロー図を導出する工程と、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    ここに前記データフロー図の導出は、
    第1配列と第2配列を前記データフローノードの夫々に随伴させる工程からなり、
    ここに前記第1配列は、随伴されたデータフローノードが依存する前記変数に関する
    静的情報を有し、
    前記第2配列は、前記随伴されたデータフローノードに影響を与える他の変数を同定する情報を有し、
    前記他の変数は前記データフローノードのその他のノードに随伴されており、
    前記制御フロー図を横断処理する工程と、
    前記ノードの夫々において、前記情報に応じて、前記データフロー図の対応するデータフローノードの前記第2配列内に前記情報を設定する工程と、
    前記データフローエッジを前記データフローノードと前記他のデータフローノードと夫々繋ぐことにより生成する工程と、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出する工程と、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析する工程と、
    セキュリティ脆弱性を有する前記ソースコードの部位を同定する工程と、
    前記セキュリティ脆弱性を報告する工程と、
    からなることを特徴とする方法。
  46. 前記セキュリティ脆弱性を除去するため、前記ソースコードを変更する工程をさらに含むことを特徴とする請求項45に記載の方法。
  47. 前記分析工程は、問合せ言語を使用して行われることを特徴とする請求項45に記載の方法。
  48. 前記制御フロー図、前記データフロー図及び前記制御依存図は前記コンピュータプログラムの単一関数に対応することを特徴とする請求項45に記載の方法。
  49. コンピュータプログラムのセキュリティ脆弱性を検出するための、コンピュータにより実現される方法であって、
    解析対象のソースコードを受領する工程と、
    ここに前記ソースコードはコード要素と文でできており、
    前記文の少なくとも一部は変数を参照し、
    前記変数は要素変数からなり、
    前記要素変数は要素名を有し
    前記ソースコードのオブジェクト指向モデルを生成する工程と、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記モデルを使用し、ノードから構成される制御フロー図を生成する工程と、
    ここに前記各ノードは前記制御フロー図上で位相順序を有し、
    前記ノードの一部は少なくとも1つの子ノードを有し、
    前記制御フロー図からデータフロー図を導出する工程と、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出する工程と、
    ここに制御依存図を導出する工程は、
    前記制御フロー図の前記ノードに対し先天性値を与えるステップと、
    ここに前記先天性値は、前記少なくとも1つの子ノードによって平等に継承値として継承され、
    前記各ノードで継承値の合計が先天性値に等しい時はその継承値を削除するステップと、
    前記ノードの前記継承値の各継承記録を維持するステップと、
    ここに前記継承記録は前記各継承値の継承元を示す前記ノードの同定番号を含み、
    前記制御フロー図の入口ノードを同定するステップと、
    前記ノードの最初の1組のノード群を同定するステップと、
    ここに前記最初の1組のノード群の構成ノードは前記継承値を持たず、
    夫々第1エッジを最初の1組のノード群と前記入口ノードとの間に確立するステップと、
    前記ノードの第2組のノード群を同定するステップと、
    ここに前記第2組のノード群の構成ノードは前記継承値を有し、
    前記継承記録において、前記第2組のノード群間に継承元ノードの近接位相順序を設定するステップと、
    第2のエッジを前記第2組のノード群の前記構成ノードと前記最接位相順序の前記継承元ノードとの間に夫々生成するステップと、からなり、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、セキュリティ脆弱性を有する前記ソースコードの部位を同定する工程と、
    前記セキュリティ脆弱性を報告する工程と、
    からなることを特徴とする方法。
  50. 前記セキュリティ脆弱性を除去するため、前記ソースコードを変更する工程をさらに含むことを特徴とする請求項49に記載の方法。
  51. 前記分析工程は、問合せ言語を使用して行われることを特徴とする請求項49に記載の方法。
  52. 前記制御フロー図、前記データフロー図及び前記制御依存図は前記コンピュータプログラムの単一関数に対応することを特徴とする請求項49に記載の方法。
  53. コンピュータプログラムのセキュリティ脆弱性を検出するためのコンピュータソフトウエァ製品であって、コンピュータプログラム命令を保管し接触可能でコンピュータ読込み可能な媒体を含み、
    前記命令は、コンピュータに読込まれた場合、コンピュータに対しコード要素と文からなるソースコードを受け取らせ、
    前記文の少なくとも一部は変数を参照し、
    前記変数は要素変数を有するデータ構造からなり、
    前記要素変数は要素名を有し、
    前記コンピュータはさらに、
    前記ソースコードのオブジェクト指向モデルを生成することと、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記モデルを生成する工程は前記要素変数に夫々識別子を割当ることからなり、
    前記モデルを使用しノードを有する制御フロー図を生成することと、
    前記制御フロー図からデータフロー図を導出することと、
    ここに前記データフロー図はデータフローノードおよび前記データフローノードを接続するデータフローエッジより構成され、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出することと、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、前記夫々の識別子を使用して、既定の要素変数に対する参照を同定することにより、セキュリティ脆弱性を有する前記ソースコードの部位を同定することと、
    ここに前記既定の要素変数の前記要素名は、もう1つの要素変数の前記要素名と同一であり、
    前記セキュリティ脆弱性を報告することと、
    を命令されることを特徴とする製品。
  54. 前記セキュリティ脆弱性を除去するため、前記ソースコードを変更する工程をさらに含むことを特徴とする請求項53に記載のコンピュータソフトウエァ製品。
  55. 前記コンピュータはさらに、前記ソースコードの、単一アクションのみが行われる原子要素を表す、前記制御依存図のブロックを定義するために、前記制御依存図をコード切削するように命令されることを特徴とする請求項53に記載のコンピュータソフトウエァ製品。
  56. 前記コンピュータはさらに、入力データが有効とされる前記データフロー図のデータフローノードを同定し、前記入力データが前記同定されたデータフローノードにおいて既定の仕様に従って有効とされたことを証明するように命令されることを特徴とする請求項53に記載のコンピュータソフトウエァ製品。
  57. 前記コンピュータはさらに、前記ソースコードに対しソフトウェア故障の木解析を適用するように命令されることを特徴とする請求項53に記載のコンピュータソフトウエァ製品。
  58. 前記コンピュータはさらに、データ検証関数が誤りとなるシナリオを同定するため、前記データ検証関数に対しテストケースを生成するように命令されることを特徴とする請求項53に記載のコンピュータソフトウエァ製品。
  59. 前記コンピュータはさらに、前記コンピュータプログラムのオブジェクト群に対する、アクセス特権を特定する構成ファイルを自動的に準備し、前記アクセス特権が前記オブジェクト群の既定のオブジェクトに対し存在するか否か判定するよう前記構成ファイルに問合わせし、前記オブジェクト群の既定のオブジェクトに対する前記特権を削除するように命令されることを特徴とする請求項53に記載のコンピュータソフトウエァ製品。
  60. コンピュータプログラムのセキュリティ脆弱性を検出するためのコンピュータソフトウエァ製品であって、コンピュータプログラム命令を保管し接触可能でコンピュータ読込み可能な媒体を含み、
    前記命令は、コンピュータに読込まれた場合、コンピュータに対し、
    コード要素と文からなるソースコードを受け取らせ、
    ここに前記文の少なくとも一部は変数を参照し、
    前記ソースコードのオブジェクト指向モデルを生成させ、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記コンピュータはさらに、
    前記モデルを使用し、ノードから構成される制御フロー図を生成し、
    前記制御フロー図からデータフロー図を導出し、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出し、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析して、セキュリティ脆弱性を有する前記ソースコードの部位を同定し、
    ここにおいて前記分析は、前記制御依存図の第1部位を1回目に横断処理して前記制御依存図の処理済部分に標識を付け、その後2回目に前記標識の付いた部分を含む前記制御依存図の第2部位を、前記標識の付いた部分を飛ばして横断処理することにより行われ、
    前記セキュリティ脆弱性を報告する、ように命令されることを特徴とする製品。
  61. 前記コンピュータはさらに、前記変数の既定の1つに影響を与える前記制御依存ノードのみを同定するため、前記制御依存図をコード切削するように命令され、ここにおいて前記制御依存図には意味を保存する処理だけが行われる、ことを特徴とする請求項60に記載のコンピュータソフトウエァ製品。
  62. コンピュータプログラムのセキュリティ脆弱性を検出するためのコンピュータソフトウエァ製品であって、コンピュータプログラム命令を保管し接触可能でコンピュータ読込み可能な媒体を含み、
    前記命令は、コンピュータに読込まれた場合、コンピュータに対し、
    コード要素と文からなるソースコードを受け取らせ、
    前記ソースコードのオブジェクト指向モデルを生成させ、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記コンピュータはさらに、
    前記モデルを使用し、ノードから構成される制御フロー図を生成し、
    前記制御フロー図からデータフロー図を導出し、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出し、
    セキュリティ脆弱性を有する前記ソースコードの部位を同定するために、前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、
    ここに前記分析は、
    前記データフロー図内に、入力が受入れられた第1データフローノード、データが有効とされた第2データフローノード、およびデータが使用された第3データフローノードを同定するステップと、
    前記データフロー図から前記第2データフローノードを削除するステップと、
    その後前記第3データフローノードの1つと前記第1データフローノードの1つが前記データフローエッジの1つにより繋がっていることを判定するステップと、により行われ、
    前記第3データフローノードが未評価入力の脆弱性を有することを報告する、
    ように命令されることを特徴とする製品。
  63. 前記コンピュータはさらに、入力データが有効とされる前記データフロー図のデータフローノードを同定し、前記入力データが前記同定されたデータフローノードにおいて既定の仕様に従って有効とされたことを証明するように命令されることを特徴とする
    請求項62に記載のコンピュータソフトウエァ製品。
  64. ンピュータプログラムのセキュリティ脆弱性を検出するためのコンピュータソフトウエァ製品であって、コンピュータプログラム命令を保管し接触可能でコンピュータ読込み可能な媒体を含み、
    前記命令は、コンピュータに読込まれた場合、コンピュータに対し、
    コード要素と文からなるソースコードを受け取らせ、
    ここに前記文の少なくとも一部は変数を参照し、
    前記ソースコードのオブジェクト指向モデルを生成させ、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記コンピュータはさらに、
    前記モデルを使用し、ノードから構成される制御フロー図を生成し、
    ここに前記制御フロー図は、前記ソースコードにおける複数の関数を記述し、
    前記変数はさらにグローバル変数からなり、
    前記グローバル変数は、前記関数に、前記グローバル変数をデータ要素として有する、超グローバル変数として渡され、
    前記制御フロー図からデータフロー図を導出し、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出し、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、
    セキュリティ脆弱性を有する前記ソースコードの部位を同定し、
    前記セキュリティ脆弱性を報告する、
    ことを命令されることを特徴とする製品。
  65. コンピュータプログラムのセキュリティ脆弱性を検出するためのコンピュータソフトウエァ製品であって、コンピュータプログラム命令を保管し接触可能でコンピュータ読込み可能な媒体を含み、
    前記命令は、コンピュータに読込まれた場合、コンピュータに対し、
    コード要素と文からなるソースコードを受け取らせ、
    ここに前記文の少なくとも一部は変数を参照し、
    前記ソースコードのオブジェクト指向モデルを生成させ、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記コンピュータはさらに、
    記モデルを使用し、ノードから構成される制御フロー図を生成し、
    前記制御フロー図からデータフロー図を導出し、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    ここに前記データフロー図の導出は、
    第1配列と第2配列を前記データフローノードの夫々に随伴させる工程からなり、
    ここに前記第1配列は、随伴されたデータフローノードが依存する前記変数に関する
    静的情報を有し、
    前記第2配列は、前記随伴されたデータフローノードに影響を与える他の変数を同定する情報を有し、
    前記他の変数は前記データフローノードのその他のノードに随伴されており、
    前記制御フロー図を横断処理し、
    前記ノードの夫々において、前記情報に応じて、前記データフロー図の対応するデータフローノードの前記第2配列内に前記情報を設定し、
    前記データフローエッジを前記データフローノードと前記他のデータフローノードと夫々繋ぐことにより生成し、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出し、
    前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、
    セキュリティ脆弱性を有する前記ソースコードの部位を同定し、
    前記セキュリティ脆弱性を報告する、
    ことを命令されることを特徴とする製品。
  66. コンピュータプログラムのセキュリティ脆弱性を検出するためのコンピュータソフトウエァ製品であって、コンピュータプログラム命令を保管し接触可能でコンピュータ読込み可能な媒体を含み、
    前記命令は、コンピュータに読込まれた場合、コンピュータに対し、
    コード要素と文からなるソースコードを受け取らせ、
    ここに前記文の少なくとも一部は変数を参照し、
    前記変数は要素変数からなり、
    前記要素変数は要素名を有し
    前記ソースコードのオブジェクト指向モデルを生成させ、
    ここに前記コード要素は夫々オブジェクトにて表わされ、
    前記コンピュータはさらに、
    前記モデルを使用し、ノードから構成される制御フロー図を生成し、
    ここに前記各ノードは前記制御フロー図上で位相順序を有し、
    前記ノードの一部は少なくとも1つの子ノードを有し、
    前記制御フロー図からデータフロー図を導出し、
    ここに前記データフロー図は、データフローノードと、前記データフローノードを繋ぐデータフローエッジと、からなり、
    前記制御フロー図より制御依存ノードを有する制御依存図を導出するように命令され、、
    前記コンピュータは、
    前記制御フロー図の前記ノードに対し先天性値を与えるステップと、
    ここに前記先天性値は、前記少なくとも1つの子ノードによって平等に継承値として継承され、
    前記各ノードで継承値の合計が先天性値に等しい時はその継承値を削除するステップと、
    前記ノードの前記継承値の各継承記録を維持するステップと、
    ここに前記継承記録は前記各継承値の継承元を示す前記ノードの同定番号を含み、
    前記制御フロー図の入口ノードを同定するステップと、
    前記ノードの最初の1組のノード群を同定するステップと、
    ここに前記最初の1組のノード群の構成ノードは前記継承値を持たず、
    夫々第1エッジを最初の1組のノード群と前記入口ノードとの間に確立するステップと、
    前記ノードの第2組のノード群を同定するステップと、
    ここに前記第2組のノード群の構成ノードは前記継承値を有し、
    前記継承記録において、前記第2組のノード群間に継承元ノードの近接位相順序を同定するステップと、
    第2のエッジを前記第2組のノード群の前記構成ノードと最接位相順序の前記継承元ノードとの間に夫々生成するステップと、
    の各ステップにより前記制御依存図を導出するように命令され、
    前記コンピュータは、
    セキュリティ脆弱性を有する前記ソースコードの部位を同定するため、前記制御フロー図、前記データフロー図及び前記制御依存図を分析し、
    前記セキュリティ脆弱性を報告する、
    ように命令されることを特徴とする製品。
JP2009532956A 2006-10-19 2007-10-15 ソースコード内のセキュリティ脆弱性の検出 Active JP5042315B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US85334906P 2006-10-19 2006-10-19
US60/853,349 2006-10-19
PCT/IL2007/001233 WO2008047351A2 (en) 2006-10-19 2007-10-15 Locating security vulnerabilities in source code

Publications (3)

Publication Number Publication Date
JP2010507165A true JP2010507165A (ja) 2010-03-04
JP2010507165A5 JP2010507165A5 (ja) 2010-10-07
JP5042315B2 JP5042315B2 (ja) 2012-10-03

Family

ID=39314446

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009532956A Active JP5042315B2 (ja) 2006-10-19 2007-10-15 ソースコード内のセキュリティ脆弱性の検出

Country Status (4)

Country Link
US (3) US20100083240A1 (ja)
EP (1) EP2092424B1 (ja)
JP (1) JP5042315B2 (ja)
WO (1) WO2008047351A2 (ja)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101097105B1 (ko) * 2010-12-23 2011-12-22 한국저작권위원회 Sw 소스코드 난독화와 버전 관리시스템과의 연동 방법 및 시스템
JP2013061843A (ja) * 2011-09-14 2013-04-04 Fujifilm Corp コンピュータ・ソフトウエア解析システムならびにクライアント・コンピュータ,その動作制御方法およびその動作プログラム
JP2013536522A (ja) * 2010-08-24 2013-09-19 チェックマークス リミテッド プログラミングルール違反に対するソースコードマイニング
JP2014507718A (ja) * 2011-01-31 2014-03-27 インターナショナル・ビジネス・マシーンズ・コーポレーション 権限昇格攻撃へのコンピュータ・ソフトウェア・アプリケーションの脆弱性を判定するための方法、コンピュータ・プログラム、およびシステム
WO2014050431A1 (ja) 2012-09-26 2014-04-03 三菱電機株式会社 プログラム検証装置、プログラム検証方法およびプログラム検証プログラム
JP2014174577A (ja) * 2013-03-05 2014-09-22 Ntt Data Corp 検証装置、検証方法、及びプログラム
KR101640479B1 (ko) * 2015-08-28 2016-07-18 (주)엔키소프트 소스코드기반 소프트웨어 취약점 공격행위 분석시스템
KR101696694B1 (ko) * 2015-08-17 2017-01-18 (주)트리니티소프트 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치
US9654491B2 (en) 2012-11-13 2017-05-16 Fujitsu Limited Network filtering apparatus and filtering method
KR20190052447A (ko) * 2017-11-08 2019-05-16 한국전력공사 Cfg를 이용한 패턴 기반의 소프트웨어 절차변경 동작 감시 장치 및 그 방법
US10296746B2 (en) 2013-07-26 2019-05-21 Fujitsu Limited Information processing device, filtering system, and filtering method
KR20190084468A (ko) * 2018-01-08 2019-07-17 국방과학연구소 함수 정보 요약 장치 및 방법
WO2019142335A1 (ja) * 2018-01-19 2019-07-25 三菱電機株式会社 セキュリティ設計装置、セキュリティ設計方法およびセキュリティ設計プログラム
US10628140B2 (en) 2016-11-17 2020-04-21 Mitsubishi Electric Corporation Program code generation apparatus

Families Citing this family (164)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7051322B2 (en) * 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US8108826B2 (en) * 2004-09-29 2012-01-31 Avaya Inc. Code-coverage guided prioritized test generation
EP2092424B1 (en) 2006-10-19 2015-12-30 Checkmarx Ltd. Locating security vulnerabilities in source code
US8429637B2 (en) * 2008-09-02 2013-04-23 Apple Inc. System and method for conditional expansion obfuscation
US8869111B2 (en) * 2009-01-15 2014-10-21 Infosys Limited Method and system for generating test cases for a software application
US8589884B2 (en) * 2009-01-15 2013-11-19 Infosys Limited Method and system for identifying regression test cases for a software
JP5228943B2 (ja) * 2009-01-27 2013-07-03 富士通株式会社 最小権限違反検出プログラム
CA2750279C (en) 2009-02-13 2019-03-26 Ab Initio Technology Llc Managing task execution
JP5186443B2 (ja) 2009-06-30 2013-04-17 インターナショナル・ビジネス・マシーンズ・コーポレーション 文字列の妥当性を判定するシステム、方法及びプログラム
CN101964025B (zh) * 2009-07-23 2016-02-03 北京神州绿盟信息安全科技股份有限公司 Xss检测方法和设备
US8612954B2 (en) * 2009-08-17 2013-12-17 International Business Machines Corporation Fine slicing: generating an executable bounded slice for program
US8397300B2 (en) 2009-09-22 2013-03-12 International Business Machines Corporation Detecting security vulnerabilities relating to cryptographically-sensitive information carriers when testing computer software
US8448139B2 (en) * 2009-10-05 2013-05-21 International Business Machines Corporation Automatic correction of application based on runtime behavior
US8584246B2 (en) 2009-10-13 2013-11-12 International Business Machines Corporation Eliminating false reports of security vulnerabilities when testing computer software
US8468512B2 (en) * 2009-10-30 2013-06-18 International Business Machines Corporation Abstracting benefit rules from computer code
JP5381649B2 (ja) * 2009-11-26 2014-01-08 富士通株式会社 検証対象抽出プログラム、検証対象抽出装置、および検証対象抽出方法
US8468605B2 (en) 2009-11-30 2013-06-18 International Business Machines Corporation Identifying security vulnerability in computer software
US8359584B2 (en) * 2009-12-18 2013-01-22 Microsoft Corporation Debugging from a call graph
US9210184B2 (en) 2009-12-29 2015-12-08 International Business Machines Corporation Determining the vulnerability of computer software applications to attacks
US8843902B2 (en) * 2010-03-12 2014-09-23 XMOS Ltd. Program flow route constructor
US10025688B2 (en) * 2010-03-14 2018-07-17 Virtual Forge GmbH System and method for detecting data extrusion in software applications
US8589898B2 (en) * 2010-03-29 2013-11-19 GM Global Technology Operations LLC Method and apparatus for analyzing software including a calibrated value
US8584108B2 (en) * 2010-03-29 2013-11-12 GM Global Technology Operations LLC Method and apparatus for analyzing software
US8910133B2 (en) * 2010-06-07 2014-12-09 Microsoft Corporation Library conformity checker
EP3287896B1 (en) 2010-06-15 2023-04-26 Ab Initio Technology LLC Dynamically loading graph-based computations
US8528095B2 (en) 2010-06-28 2013-09-03 International Business Machines Corporation Injection context based static analysis of computer software applications
US20120102474A1 (en) * 2010-10-26 2012-04-26 International Business Machines Corporation Static analysis of client-server applications using framework independent specifications
US8572747B2 (en) * 2010-11-19 2013-10-29 International Business Machines Corporation Policy-driven detection and verification of methods such as sanitizers and validators
US8667584B2 (en) 2010-12-15 2014-03-04 International Business Machines Corporation Formal analysis of the quality and conformance of information flow downgraders
US8407242B2 (en) * 2010-12-16 2013-03-26 Microsoft Corporation Temporal binding for semantic queries
IL210169A0 (en) 2010-12-22 2011-03-31 Yehuda Binder System and method for routing-based internet security
US20120192280A1 (en) * 2011-01-20 2012-07-26 Board Of Trustees Of The University Of Illinois Apparatus for enhancing web application security and method therefor
US8606866B2 (en) 2011-02-10 2013-12-10 Kaspersky Lab Zao Systems and methods of probing data transmissions for detecting spam bots
JP5654944B2 (ja) * 2011-05-02 2015-01-14 Kddi株式会社 アプリケーション解析装置およびプログラム
US8539466B2 (en) 2011-05-23 2013-09-17 International Business Machines Corporation Determining suitable insertion points for string sanitizers in a computer code
US8516443B2 (en) * 2011-05-26 2013-08-20 Oracle International Corporation Context-sensitive analysis framework using value flows
US8949992B2 (en) * 2011-05-31 2015-02-03 International Business Machines Corporation Detecting persistent vulnerabilities in web applications
US8666999B2 (en) * 2011-08-02 2014-03-04 Rockwell Automation Technologies, Inc. Search utility program for software developers
US8875109B2 (en) * 2011-08-26 2014-10-28 Fujitsu Limited Tracking variables in javascript software using a control flow graph
US8793665B2 (en) * 2011-08-26 2014-07-29 Fujitsu Limited Performing taint analysis for javascript software using a control flow graph
US8769696B2 (en) 2011-09-29 2014-07-01 International Business Machines Corporation Automated detection of flaws and incompatibility problems in information flow downgraders
US9098624B1 (en) 2011-12-22 2015-08-04 Dell Software Inc. Deep type parsing
US8856935B2 (en) 2012-02-07 2014-10-07 International Business Machines Corporation Automatic synthesis of unit tests for security testing
US8806464B2 (en) * 2012-04-26 2014-08-12 Hewlett-Packard Development Company, L.P. Process flow optimized directed graph traversal
CA2777434C (en) 2012-05-18 2019-09-10 Ibm Canada Limited - Ibm Canada Limitee Verifying application security vulnerabilities
CN102693396B (zh) * 2012-06-11 2014-09-17 中南大学 一种基于虚拟执行模式的Flash漏洞检测方法
EP2877926A4 (en) * 2012-07-26 2016-01-27 Hewlett Packard Development Co SAFETY TESTING OF AN APPLICATION
CN107979612A (zh) 2012-08-18 2018-05-01 赋格有限公司 提供安全的计算机环境的系统和方法
WO2014049504A1 (en) * 2012-09-25 2014-04-03 Checkmarx Ltd. Detecting malicious advertisements using source code analysis
US9032530B2 (en) 2012-09-28 2015-05-12 International Business Machines Corporation Correcting workflow security vulnerabilities via static analysis and virtual patching
US9141807B2 (en) * 2012-09-28 2015-09-22 Synopsys, Inc. Security remediation
US9292693B2 (en) 2012-10-09 2016-03-22 International Business Machines Corporation Remediation of security vulnerabilities in computer software
US8966636B2 (en) * 2012-10-16 2015-02-24 International Business Machines Corporation Transforming unit tests for security testing
US10521288B2 (en) * 2012-11-07 2019-12-31 International Business Machines Corporation Collaborative application testing
US10108521B2 (en) 2012-11-16 2018-10-23 Ab Initio Technology Llc Dynamic component performance monitoring
US9507682B2 (en) 2012-11-16 2016-11-29 Ab Initio Technology Llc Dynamic graph performance monitoring
CN103108044B (zh) * 2013-02-04 2015-08-19 南京大学 一种基于依赖图约减和QoS保持的Web服务组合方法
US9384354B2 (en) * 2013-02-20 2016-07-05 International Business Machines Corporation Rule matching in the presence of languages with no types or as an adjunct to current analyses for security vulnerability analysis
US9372785B2 (en) * 2013-03-07 2016-06-21 Microsoft Technology Licensing, Llc Identifying implicit assumptions associated with a software product
US9569334B2 (en) * 2013-03-14 2017-02-14 Whitehat Security, Inc. Techniques for traversing representations of source code
WO2014171950A1 (en) 2013-04-19 2014-10-23 Hewlett-Packard Development Company, L.P. Unused parameters of application under test
US9158922B2 (en) 2013-05-29 2015-10-13 Lucent Sky Corporation Method, system, and computer-readable medium for automatically mitigating vulnerabilities in source code
US9471286B2 (en) * 2013-06-04 2016-10-18 Microsoft Technology Licensing, Llc System and method for providing code completion features for code modules
US9426177B2 (en) * 2013-07-15 2016-08-23 Tencent Technology (Shenzhen) Company Limited Method and apparatus for detecting security vulnerability for animation source file
WO2015016901A1 (en) * 2013-07-31 2015-02-05 Hewlett-Packard Development Company, L.P. Signal tokens indicative of malware
US9459986B2 (en) 2013-08-28 2016-10-04 International Business Machines Corporation Automatic generation of analysis-equivalent application constructs
US20150095894A1 (en) * 2013-09-30 2015-04-02 International Business Machines Corporation Detecting race condition vulnerabilities in computer software applications
CA3128713C (en) 2013-12-05 2022-06-21 Ab Initio Technology Llc Managing interfaces for dataflow graphs composed of sub-graphs
US11057416B2 (en) * 2013-12-19 2021-07-06 Micro Focus Llc Analyze code that uses web framework using local parameter model
US10019567B1 (en) * 2014-03-24 2018-07-10 Amazon Technologies, Inc. Encoding of security codes
US20150278526A1 (en) * 2014-03-25 2015-10-01 Wipro Limited Computerized systems and methods for presenting security defects
WO2015155028A1 (en) * 2014-04-11 2015-10-15 Arima Software Design S.L.L. Detection of manipulation of applications
WO2015195125A1 (en) * 2014-06-19 2015-12-23 Hewlett-Packard Development Company, L.P. Install runtime agent for security test
US9852294B1 (en) * 2014-06-24 2017-12-26 Symantec Corporation Systems and methods for detecting suspicious applications based on how entry-point functions are triggered
US10599852B2 (en) 2014-08-15 2020-03-24 Securisea, Inc. High performance software vulnerabilities detection system and methods
US9454659B1 (en) 2014-08-15 2016-09-27 Securisea, Inc. Software vulnerabilities detection system and methods
US9824214B2 (en) 2014-08-15 2017-11-21 Securisea, Inc. High performance software vulnerabilities detection system and methods
CN105487966B (zh) * 2014-09-17 2023-07-25 深圳市雅阅科技有限公司 程序测试方法、装置及系统
US10657262B1 (en) * 2014-09-28 2020-05-19 Red Balloon Security, Inc. Method and apparatus for securing embedded device firmware
WO2016108162A1 (en) 2015-01-01 2016-07-07 Checkmarx Ltd. Code instrumentation for runtime application self-protection
US10282550B1 (en) * 2015-03-12 2019-05-07 Whitehat Security, Inc. Auto-remediation workflow for computer security testing
US9792443B1 (en) * 2015-03-12 2017-10-17 Whitehat Security, Inc. Position analysis of source code vulnerabilities
CN106295346B (zh) * 2015-05-20 2022-08-30 深圳市腾讯计算机系统有限公司 一种应用漏洞检测方法、装置及计算设备
US10095734B2 (en) * 2015-06-10 2018-10-09 International Business Machines Corporation Source code search engine
KR102414250B1 (ko) * 2015-07-30 2022-06-29 삼성전자주식회사 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체
US10657134B2 (en) 2015-08-05 2020-05-19 Ab Initio Technology Llc Selecting queries for execution on a stream of real-time data
US10341194B2 (en) 2015-10-05 2019-07-02 Fugue, Inc. System and method for building, optimizing, and enforcing infrastructure on a cloud based computing environment
US10229612B2 (en) 2015-10-07 2019-03-12 Coursera Inc. Secure computer-implemented execution and evaluation of programming assignments for on demand courses
CN105389194B (zh) * 2015-10-19 2019-02-01 华为技术有限公司 一种确定应用程序计算逻辑的方法及装置
US11218510B2 (en) * 2015-10-28 2022-01-04 Qomplx, Inc. Advanced cybersecurity threat mitigation using software supply chain analysis
CA3005263C (en) 2015-12-21 2021-06-15 Ab Initio Technology Llc Sub-graph interface generation
US11593249B2 (en) * 2015-12-23 2023-02-28 Oracle International Corporation Scalable points-to analysis via multiple slicing
KR101645019B1 (ko) 2016-01-15 2016-08-02 지티원 주식회사 소프트웨어 보안취약점 검출을 위한 규칙명세언어
US10366213B2 (en) * 2016-02-09 2019-07-30 International Business Machines Corporation Protecting an application via an intra-application firewall
US9959097B2 (en) * 2016-03-09 2018-05-01 Bank Of America Corporation SVN interface system for heterogeneous development environments
US10387656B2 (en) 2016-03-21 2019-08-20 Checkmarx Ltd. Integrated interactive application security testing
US10210336B2 (en) * 2016-03-29 2019-02-19 International Business Machines Corporation Precision-tuned runtime monitoring
US20170329691A1 (en) * 2016-05-12 2017-11-16 Synopsys, Inc. Systems and methods for using semantic queries to analyze software
US10210077B2 (en) 2016-05-18 2019-02-19 International Business Machines Corporation Using multiple sequence alignment to identify security vulnerability code paths
CN105959335B (zh) * 2016-07-19 2019-11-19 腾讯科技(深圳)有限公司 一种网络攻击行为检测方法及相关装置
US10325097B2 (en) * 2016-07-19 2019-06-18 Oracle International Corporation Static detection of context-sensitive cross-site scripting vulnerabilities
KR20180010053A (ko) * 2016-07-20 2018-01-30 주식회사 이븐스타 보안 취약점 점검을 위한 위험성 코드 검출 시스템 및 그 방법
US10176074B2 (en) * 2016-09-21 2019-01-08 Lenvio Inc. Computed call/jump target resolution via behavior computation
US10339320B2 (en) 2016-11-18 2019-07-02 International Business Machines Corporation Applying machine learning techniques to discover security impacts of application programming interfaces
CN108614695A (zh) * 2016-12-06 2018-10-02 北京奇虎科技有限公司 快速定位安卓应用代码文件中的指定内容的方法和装置
US10581879B1 (en) * 2016-12-22 2020-03-03 Fireeye, Inc. Enhanced malware detection for generated objects
EP3566166B1 (en) * 2017-01-04 2022-03-02 Checkmarx Ltd. Management of security vulnerabilities
US10437714B2 (en) * 2017-01-25 2019-10-08 Wipro Limited System and method for performing script-less unit testing
EP3401827A1 (en) 2017-05-10 2018-11-14 Checkmarx Ltd. Method and system of static and dynamic data flow analysis
US10740470B2 (en) 2017-05-31 2020-08-11 Shiftleft Inc. System and method for application security profiling
CN109214188B (zh) * 2017-06-30 2022-05-27 阿里巴巴集团控股有限公司 一种漏洞分析方法和装置及数据处理方法和装置
US10796240B2 (en) * 2017-07-22 2020-10-06 QC Ware Corp. Performing fault tree analysis on quantum computers
US10872156B2 (en) * 2017-08-11 2020-12-22 Jpmorgan Chase Bank, N.A. Typescript security scanner
US20190052602A1 (en) * 2017-08-14 2019-02-14 Onapsis, lnc. Generating rules to detect security vulnerabilities based on vulnerability primitives with entry point finder
US10275235B2 (en) 2017-09-18 2019-04-30 International Business Machines Corporation Adaptable management of web application state in a micro-service architecture
US10956574B2 (en) 2017-10-07 2021-03-23 Shiftleft Inc. System and method for securing applications through an application-aware runtime agent
US10365905B1 (en) * 2017-10-26 2019-07-30 Facebook, Inc. Systems and methods for evaluating application performance changes via comparative call graphs
US10540255B2 (en) * 2017-10-31 2020-01-21 Oracle International Corporation Staged refinement for static analysis
US10572367B2 (en) * 2017-11-21 2020-02-25 Accenture Global Solutions Limited Intelligent code quality monitoring
US11074362B2 (en) 2017-12-04 2021-07-27 ShiftLeft, Inc. System and method for code-based protection of sensitive data
US10133871B1 (en) 2017-12-13 2018-11-20 Booz Allen Hamilton Inc. Method and system for identifying functional attributes that change the intended operation of a compiled binary extracted from a target system
US10740469B2 (en) 2017-12-28 2020-08-11 Fmr Llc Automated secure software development management, risk assessment, and risk remediation
US10198250B1 (en) * 2018-01-04 2019-02-05 Accenture Global Solutions Limited Partitioning based migration of systems to container and microservice based platforms
US10606570B2 (en) * 2018-03-08 2020-03-31 Fujitsu Limited Representing software with an abstract code graph
US10678916B2 (en) * 2018-03-20 2020-06-09 Didi Research America, Llc Malicious program detection
US11087001B2 (en) 2018-04-04 2021-08-10 Red Hat, Inc. Determining location of speculation denial instructions for memory access vulnerabilities
US10261784B1 (en) * 2018-06-20 2019-04-16 Terbium Labs, Inc. Detecting copied computer code using cryptographically hashed overlapping shingles
US11144840B2 (en) * 2018-07-26 2021-10-12 International Business Machines Corporation Completing decision logic to avoid a side effect
US20200042712A1 (en) * 2018-07-31 2020-02-06 Veracode, Inc. Open-source software vulnerability analysis
US11036866B2 (en) 2018-10-18 2021-06-15 Denso Corporation Systems and methods for optimizing control flow graphs for functional safety using fault tree analysis
US10534912B1 (en) * 2018-10-31 2020-01-14 Capital One Services, Llc Methods and systems for multi-tool orchestration
US10754628B2 (en) * 2018-11-02 2020-08-25 Microsoft Technology Licensing, Llc Extracting web API endpoint data from source code to identify potential security threats
US11514172B2 (en) 2018-11-15 2022-11-29 Grabango Co. System and method for information flow analysis of application code
US11741196B2 (en) 2018-11-15 2023-08-29 The Research Foundation For The State University Of New York Detecting and preventing exploits of software vulnerability using instruction tags
US11265292B1 (en) * 2019-01-28 2022-03-01 Amazon Technologies, Inc. Graph based management of virtualized infrastructures
US11163888B2 (en) * 2019-02-15 2021-11-02 Oracle International Corporation Detecting second-order security vulnerabilities via modelling information flow through persistent storage
CN111611149B (zh) * 2019-02-22 2023-03-31 上海信息安全工程技术研究中心 基于代码行为单位的程序变量有效定义检测方法及装置
US11599644B2 (en) * 2019-05-17 2023-03-07 Walmart Apollo, Llc Blocking insecure code with locking
CN110221973B (zh) * 2019-05-22 2022-12-16 湖南泛联新安信息科技有限公司 面向c程序缺陷检测的靶向式并行符号执行方法
US11636211B2 (en) 2019-06-27 2023-04-25 Blackberry Limited Binary static analysis of application structure to identify vulnerabilities
US11650905B2 (en) 2019-09-05 2023-05-16 International Business Machines Corporation Testing source code changes
CN111027073B (zh) * 2019-11-28 2022-03-22 深信服科技股份有限公司 漏洞检测方法、装置、设备及存储介质
CN110825650B (zh) * 2019-11-29 2023-04-11 北京网聘咨询有限公司 单元测试覆盖精度检测方法及装置
US11440190B1 (en) * 2020-02-26 2022-09-13 Trend Micro Incorporated Detecting unsecure data flow in automation task programs
CN111460450B (zh) * 2020-03-11 2023-02-10 西北大学 一种基于图卷积网络的源代码漏洞检测方法
EP3882782A1 (en) * 2020-03-20 2021-09-22 Tata Consultancy Services Limited System and method for sql query extraction in an application
CN111488582B (zh) * 2020-04-01 2023-09-29 杭州云象网络技术有限公司 一种基于图神经网络的智能合约重入性漏洞检测的方法
EP3945441A1 (en) 2020-07-28 2022-02-02 Checkmarx Ltd. Detecting exploitable paths in application software that uses third-party libraries
US11714615B2 (en) 2020-09-18 2023-08-01 International Business Machines Corporation Application migration using cost-aware code dependency graph
US11610000B2 (en) 2020-10-07 2023-03-21 Bank Of America Corporation System and method for identifying unpermitted data in source code
US11366901B2 (en) * 2020-10-07 2022-06-21 Bank Of America Corporation System and method for identifying insider threats in source code
US11568060B2 (en) * 2020-12-08 2023-01-31 Oracle International Corporation Modular taint analysis with access paths
US20220300615A1 (en) * 2021-02-12 2022-09-22 Tata Consultancy Services Limited Method and system for identifying security vulnerabilities
US11968224B2 (en) 2021-03-22 2024-04-23 International Business Machines Corporation Shift-left security risk analysis
US11550569B2 (en) * 2021-05-14 2023-01-10 Cyberark Software Ltd. Discovering and remediating hidden secrets in code files
CN113467983A (zh) * 2021-07-16 2021-10-01 中国银行股份有限公司 故障的处理方法、装置、设备及可读存储介质
US20230130649A1 (en) * 2021-10-21 2023-04-27 Dazz, Inc. Techniques for semantic analysis of cybersecurity event data and remediation of cybersecurity event root causes
CN113722721B (zh) * 2021-11-03 2022-03-11 北京鸿渐科技有限公司 一种基于值依赖图的源库模式Java安全漏洞检测方法
US20230205496A1 (en) * 2021-12-23 2023-06-29 OutSystems - Software em Rede, S.A. Declarative visual programming language code search
US20230237161A1 (en) * 2022-01-26 2023-07-27 Microsoft Technology Licensing, Llc Detection of and protection against cross-site scripting vulnerabilities in web application code
CN114707152A (zh) * 2022-02-23 2022-07-05 北京邮电大学 联盟链智能合约的安全漏洞检测方法及装置
CN114595148B (zh) * 2022-03-02 2024-04-16 北京大学 一种基于数据流传播分析的Java空指针引用检测方法及系统
US20230376603A1 (en) * 2022-05-20 2023-11-23 Dazz, Inc. Techniques for identifying and validating security control steps in software development pipelines
CN114996149B (zh) * 2022-06-16 2024-05-28 南京邮电大学 一种基于程序切片度量的代码缺陷预测方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08190475A (ja) * 1995-01-05 1996-07-23 Fujitsu Ltd プログラム解析装置
JP2003050722A (ja) * 2001-08-03 2003-02-21 Sony Corp プログラム解析システムとプログラム解析方法
WO2005121953A1 (en) * 2004-06-04 2005-12-22 Fortify Software, Inc. Apparatus and method for developing, testing and monitoring secure software

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ATE182014T1 (de) * 1989-09-01 1999-07-15 Amdahl Corp Programmierbarer rechner mit automatischer übersetzung zwischen quell - und zielkode mit versionüberwachung
US5107418A (en) * 1990-06-11 1992-04-21 Supercomputer Systems Limited Partnership Method for representing scalar data dependences for an optimizing compiler
US5485616A (en) * 1993-10-12 1996-01-16 International Business Machines Corporation Using program call graphs to determine the maximum fixed point solution of interprocedural bidirectional data flow problems in a compiler
US5790858A (en) * 1994-06-30 1998-08-04 Microsoft Corporation Method and system for selecting instrumentation points in a computer program
US5586328A (en) * 1994-10-21 1996-12-17 Microsoft Corporation Module dependency based incremental compiler and method
US5701489A (en) * 1995-06-06 1997-12-23 International Business Machines Corporation System for partial in-line expansion of procedure calls during program compilation
US5742811A (en) 1995-10-10 1998-04-21 International Business Machines Corporation Method and system for mining generalized sequential patterns in a large database
US5875334A (en) * 1995-10-27 1999-02-23 International Business Machines Corporation System, method, and program for extending a SQL compiler for handling control statements packaged with SQL query statements
US5778233A (en) * 1996-10-11 1998-07-07 International Business Machines Corporation Method and apparatus for enabling global compiler optimizations in the presence of exception handlers within a computer program
US5881290A (en) * 1996-12-09 1999-03-09 Allen-Bradley Company, Llc Industrial controller decompiler accommodating an expandable instruction set
CA2200812A1 (en) * 1997-03-24 1998-09-24 Archambault, Roch George Optimizing compilation of pointer variables
US5978588A (en) * 1997-06-30 1999-11-02 Sun Microsystems, Inc. Method and apparatus for profile-based code placement using a minimum cut set of the control flow graph
ATE457492T1 (de) * 1998-10-10 2010-02-15 Ibm Programmkodekonvertierung mit verringerter übersetzung
US6442748B1 (en) * 1999-08-31 2002-08-27 Accenture Llp System, method and article of manufacture for a persistent state and persistent object separator in an information services patterns environment
US9525696B2 (en) 2000-09-25 2016-12-20 Blue Coat Systems, Inc. Systems and methods for processing data flows
US7284274B1 (en) * 2001-01-18 2007-10-16 Cigital, Inc. System and method for identifying and eliminating vulnerabilities in computer software applications
US7137103B2 (en) * 2001-03-08 2006-11-14 International Business Machines Corporation Coverage analysis of message flows
US20030056192A1 (en) * 2001-05-24 2003-03-20 Burgess Allen G. Source code analysis system and method
US7392545B1 (en) 2002-01-18 2008-06-24 Cigital, Inc. Systems and methods for detecting software security vulnerabilities
US7299458B2 (en) * 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations
US7051322B2 (en) * 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US7398516B2 (en) * 2003-04-18 2008-07-08 Ounce Labs, Inc. Method and system for detecting race condition vulnerabilities in source code
US20050015752A1 (en) * 2003-07-15 2005-01-20 International Business Machines Corporation Static analysis based error reduction for software applications
CA2453714A1 (en) * 2003-12-19 2005-06-19 Ibm Canada Limited - Ibm Canada Limitee Method, system and product for indentifying and executing locked read regions and locked write regions in programming languages that offer synchronization without explicit means to distinguish between such regions
JP3966518B2 (ja) * 2004-03-12 2007-08-29 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム解析装置、その解析方法及びプログラム
US7447666B2 (en) 2004-04-09 2008-11-04 The Boeing Company System and method for analyzing a pattern in a time-stamped event sequence
US7975306B2 (en) * 2004-06-04 2011-07-05 Hewlett-Packard Development Company, L.P. Apparatus and method for monitoring secure software
US7565631B1 (en) * 2004-07-02 2009-07-21 Northwestern University Method and system for translating software binaries and assembly code onto hardware
US7363616B2 (en) 2004-09-15 2008-04-22 Microsoft Corporation Systems and methods for prioritized data-driven software testing
US8108826B2 (en) * 2004-09-29 2012-01-31 Avaya Inc. Code-coverage guided prioritized test generation
US20060085156A1 (en) * 2004-10-18 2006-04-20 Kolawa Adam K Method and system for predicting memory leaks from unit testing
US7555778B2 (en) * 2004-10-19 2009-06-30 George Mason Intellectual Properties, Inc. Minimum-cost network hardening
JP4183192B2 (ja) * 2004-12-28 2008-11-19 インターナショナル・ビジネス・マシーンズ・コーポレーション アプリケーション・プログラムの開発支援方法、プログラム、情報処理装置
EP1684151A1 (en) 2005-01-20 2006-07-26 Grant Rothwell William Computer protection against malware affection
US7860842B2 (en) * 2005-03-16 2010-12-28 Oracle International Corporation Mechanism to detect and analyze SQL injection threats
US7698694B2 (en) * 2005-06-08 2010-04-13 Cisco Technology, Inc. Methods and systems for transforming an AND/OR command tree into a command data model
US7526758B2 (en) * 2005-06-30 2009-04-28 Microsoft Corporation Execution failure investigation using static analysis
US8239939B2 (en) * 2005-07-15 2012-08-07 Microsoft Corporation Browser protection module
US7849509B2 (en) * 2005-10-07 2010-12-07 Microsoft Corporation Detection of security vulnerabilities in computer programs
US20070143759A1 (en) 2005-12-15 2007-06-21 Aysel Ozgur Scheduling and partitioning tasks via architecture-aware feedback information
US7886272B1 (en) * 2006-03-16 2011-02-08 Avaya Inc. Prioritize code for testing to improve code coverage of complex software
US7720835B2 (en) 2006-05-05 2010-05-18 Visible Technologies Llc Systems and methods for consumer-generated media reputation management
US8365286B2 (en) * 2006-06-30 2013-01-29 Sophos Plc Method and system for classification of software using characteristics and combinations of such characteristics
US7971193B2 (en) * 2006-07-14 2011-06-28 Hewlett-Packard Development Company, L.P. Methods for performining cross module context-sensitive security analysis
EP2092424B1 (en) 2006-10-19 2015-12-30 Checkmarx Ltd. Locating security vulnerabilities in source code
US8468244B2 (en) * 2007-01-05 2013-06-18 Digital Doors, Inc. Digital information infrastructure and method for security designated data and with granular data stores
US20100011441A1 (en) 2007-05-01 2010-01-14 Mihai Christodorescu System for malware normalization and detection
JP2009205269A (ja) 2008-02-26 2009-09-10 Osaka Univ 頻出変化パターン抽出装置
JP5011234B2 (ja) 2008-08-25 2012-08-29 株式会社日立情報システムズ 攻撃ノード群判定装置およびその方法、ならびに情報処理装置および攻撃対処方法、およびプログラム
US20100088770A1 (en) 2008-10-08 2010-04-08 Raz Yerushalmi Device and method for disjointed computing
IL197477A0 (en) 2009-03-08 2009-12-24 Univ Ben Gurion System and method for detecting new malicious executables, based on discovering and monitoring of characteristic system call sequences
US8689172B2 (en) 2009-03-24 2014-04-01 International Business Machines Corporation Mining sequential patterns in weighted directed graphs
WO2010126412A1 (en) 2009-04-28 2010-11-04 Telefonaktiebolaget Lm Ericsson (Publ) Predicting presence of a mobile user equipment
WO2012025865A1 (en) 2010-08-24 2012-03-01 Checkmarx Ltd. Mining source code for violations of programming rules
US8510237B2 (en) 2011-03-15 2013-08-13 Qualcomm Incorporated Machine learning method to identify independent tasks for parallel layout in web browsers
US8949271B2 (en) 2012-10-23 2015-02-03 Liebherr-Werk Nenzing Gmbh Method for monitoring a number of machines and monitoring system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08190475A (ja) * 1995-01-05 1996-07-23 Fujitsu Ltd プログラム解析装置
JP2003050722A (ja) * 2001-08-03 2003-02-21 Sony Corp プログラム解析システムとプログラム解析方法
WO2005121953A1 (en) * 2004-06-04 2005-12-22 Fortify Software, Inc. Apparatus and method for developing, testing and monitoring secure software
JP2008502046A (ja) * 2004-06-04 2008-01-24 フォーティファイ ソフトウェア, インコーポレイテッド セキュアーソフトウェアを開発し、テストし、監視するための装置および方法

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013536522A (ja) * 2010-08-24 2013-09-19 チェックマークス リミテッド プログラミングルール違反に対するソースコードマイニング
KR101097105B1 (ko) * 2010-12-23 2011-12-22 한국저작권위원회 Sw 소스코드 난독화와 버전 관리시스템과의 연동 방법 및 시스템
JP2014507718A (ja) * 2011-01-31 2014-03-27 インターナショナル・ビジネス・マシーンズ・コーポレーション 権限昇格攻撃へのコンピュータ・ソフトウェア・アプリケーションの脆弱性を判定するための方法、コンピュータ・プログラム、およびシステム
JP2013061843A (ja) * 2011-09-14 2013-04-04 Fujifilm Corp コンピュータ・ソフトウエア解析システムならびにクライアント・コンピュータ,その動作制御方法およびその動作プログラム
WO2014050431A1 (ja) 2012-09-26 2014-04-03 三菱電機株式会社 プログラム検証装置、プログラム検証方法およびプログラム検証プログラム
US9501646B2 (en) 2012-09-26 2016-11-22 Mitsubishi Electric Corporation Program verification apparatus, program verification method, and computer readable medium
US9654491B2 (en) 2012-11-13 2017-05-16 Fujitsu Limited Network filtering apparatus and filtering method
JP2014174577A (ja) * 2013-03-05 2014-09-22 Ntt Data Corp 検証装置、検証方法、及びプログラム
US10296746B2 (en) 2013-07-26 2019-05-21 Fujitsu Limited Information processing device, filtering system, and filtering method
KR101696694B1 (ko) * 2015-08-17 2017-01-18 (주)트리니티소프트 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치
WO2017039136A1 (ko) * 2015-08-28 2017-03-09 (주)엔키소프트 소스코드기반 소프트웨어 취약점 공격행위 분석시스템
KR101640479B1 (ko) * 2015-08-28 2016-07-18 (주)엔키소프트 소스코드기반 소프트웨어 취약점 공격행위 분석시스템
US10628140B2 (en) 2016-11-17 2020-04-21 Mitsubishi Electric Corporation Program code generation apparatus
KR20190052447A (ko) * 2017-11-08 2019-05-16 한국전력공사 Cfg를 이용한 패턴 기반의 소프트웨어 절차변경 동작 감시 장치 및 그 방법
KR102392642B1 (ko) 2017-11-08 2022-04-29 한국전력공사 Cfg를 이용한 패턴 기반의 소프트웨어 절차변경 동작 감시 장치 및 그 방법
KR20190084468A (ko) * 2018-01-08 2019-07-17 국방과학연구소 함수 정보 요약 장치 및 방법
KR102092192B1 (ko) * 2018-01-08 2020-03-23 국방과학연구소 함수 정보 요약 장치 및 방법
WO2019142335A1 (ja) * 2018-01-19 2019-07-25 三菱電機株式会社 セキュリティ設計装置、セキュリティ設計方法およびセキュリティ設計プログラム
JP6608569B1 (ja) * 2018-01-19 2019-11-20 三菱電機株式会社 セキュリティ設計装置、セキュリティ設計方法およびセキュリティ設計プログラム

Also Published As

Publication number Publication date
EP2092424A4 (en) 2011-11-02
US20100083240A1 (en) 2010-04-01
WO2008047351A3 (en) 2009-05-07
WO2008047351A2 (en) 2008-04-24
EP2092424B1 (en) 2015-12-30
US20130167241A1 (en) 2013-06-27
JP5042315B2 (ja) 2012-10-03
EP2092424A2 (en) 2009-08-26
US20150332055A1 (en) 2015-11-19
US9128728B2 (en) 2015-09-08

Similar Documents

Publication Publication Date Title
JP5042315B2 (ja) ソースコード内のセキュリティ脆弱性の検出
US11216256B2 (en) Determining based on static compiler analysis that execution of compiler code would result in unacceptable program behavior
CN109426722B (zh) Sql注入缺陷检测方法、系统、设备及存储介质
US9298924B2 (en) Fixing security vulnerability in a source code
Sheard Languages of the future
Anderson et al. Design and implementation of a fine-grained software inspection tool
Alhuzali et al. Chainsaw: Chained automated workflow-based exploit generation
CN110383238A (zh) 用于基于模型的软件分析的系统和方法
Kim et al. DAPP: automatic detection and analysis of prototype pollution vulnerability in Node. js modules
Abi-Antoun et al. Analyzing security architectures
JP4951416B2 (ja) プログラム検証方法、プログラム検証装置
Zhang et al. Blockaid: Data access policy enforcement for web applications
Arasteh et al. Forensic memory analysis: From stack and code to execution history
Ko et al. Weakly sensitive analysis for JavaScript object‐manipulating programs
Pati et al. A survey report of enhancements to the visitor software design pattern
Raad et al. DOM: specification and client reasoning
Letarte et al. Security model evolution of PHP web applications
Afonin et al. Validation of safety-like properties for entity-based access control policies
Sarkar et al. Flow-insensitive static analysis for detecting integer anomalies in programs
Rodrigues et al. Towards a structured specification of coding conventions
Melnik et al. Enforcing secure coding rules for the C programming language using the eclipse development environment
Nicolay et al. Static detection of user-specified security vulnerabilities in client-side javascript
Xiao et al. Performing high efficiency source code static analysis with intelligent extensions
Tu On navigation and analysis of software architecture evolution
Liu et al. An approach for the maintenance of input validation

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100813

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100813

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120321

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120528

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120620

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120710

R150 Certificate of patent or registration of utility model

Ref document number: 5042315

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150720

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250