JP2022505340A - データ引数を動的に識別し、ソースコードを計装するためのシステムと方法 - Google Patents

データ引数を動的に識別し、ソースコードを計装するためのシステムと方法 Download PDF

Info

Publication number
JP2022505340A
JP2022505340A JP2021521323A JP2021521323A JP2022505340A JP 2022505340 A JP2022505340 A JP 2022505340A JP 2021521323 A JP2021521323 A JP 2021521323A JP 2021521323 A JP2021521323 A JP 2021521323A JP 2022505340 A JP2022505340 A JP 2022505340A
Authority
JP
Japan
Prior art keywords
data
source code
control flow
program
graph
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
JP2021521323A
Other languages
English (en)
Other versions
JP7201078B2 (ja
Inventor
ゴパラクリシュナン アイアー
アミア キャシャニー
錬磨 竹内
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Denso Corp
Original Assignee
Denso Corp
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 Denso Corp filed Critical Denso Corp
Publication of JP2022505340A publication Critical patent/JP2022505340A/ja
Application granted granted Critical
Publication of JP7201078B2 publication Critical patent/JP7201078B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • 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
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

Figure 2022505340000001
本明細書に記載のシステム、方法、及び他の実施形態は、プログラム内のデータインスを検証することに関する。一実施形態において、方法は、電子的要求に応答して、プログラムのソースコードのコードセグメント内のデータ引数を識別することを含む。データ引数は、プログラムの1つ以上の関数間で渡される非制御データである。この方法は、ソースコードから導出される制御フローグラフ内のデータ引数に関するデータ特性を格納することを含む。制御フローグラフは、プログラム内の実行パスを表す。データ特性は、データ引数の状態と、データ引数に関連付けられた少なくとも1つの関係を示す。この方法は、ソースコードの調整を容易にするため、電子的出力として制御フローグラフを提供することを含む。

Description

関連出願の相互参照
この出願は、2018年10月18日に出願された米国特許出願第16/164132号の利益を主張し、その開示全体が参照により本明細書に組み込まれる。
本明細書に記載される主題は、概して、プログラムのデータ引数を動的に抽出するためのシステムおよび方法に関し、特に、プログラムの自動計装を容易にするため、制御フローグラフが生成される制御データ引数と同時に、非制御データ引数を動的に識別することに関する。
悪意のある攻撃からソフトウェアプログラムを保護することは、非常に困難なことでありえる。例えば、プログラムは、様々なデータ型およびそれらのデータ型が実装される方法に関連して様々な脆弱性を含みえる。悪意のある攻撃者は、これらの脆弱性を悪用してデータ値を操作する可能性がある。この悪意のある操作により、ランタイムエラー、データ破壊、データ公開など、プログラムによる意図しないアクションが起こり得る。一般的に、攻撃は、リターンアドレス、関数ポインタ、またはその他のセキュリティ上重要なデータを変更するため、バッファオーバーフローや、制御データ及び/又は非制御データに関連するその他の脆弱性を悪用することにフォーカスしている。
さらに、このような悪意のある攻撃を防ぐために、プログラムがフォーマット、セキュリティ、およびその他の規格に関して望ましい標準に準拠していることを保証することは、特にプログラムが比較的堅牢及び/又は複雑である場合、かなりの困難を伴うことがありえる。一般的に、開発者は、プログラムを最適化し、及び/又はプログラム内の異なる関数/セグメント間の関係をよりよく理解しようとして、制御フローグラフ及び/又は他のツールを参照する場合がある。しかし、現在のアプローチは、開発者が解釈するのが現実的ではない可能性のある大きく複雑なグラフを生成し、また、通常、プログラムを最初に作成するときに役立つようにタイムリーに利用することができない。
同様に、悪意のある攻撃に対するセキュリティを提供するために、プログラムのソースコードに計装を追加すると、開発をさらに複雑にする可能性がある。例えば、計装として具現化される追加のソースコードは、不正確にコード化されたり、一般的にプログラム内に含まれ、その後に検証される多くの多様な計装のセグメントを考慮する際に、意図せずに除外されたりするかもしれない。その結果、プログラムフロー及び/又は非制御データの引数を保護することが、プログラムをさらなる悪意のある攻撃にさらす、セキュリティホールなどのさらなる難題につながる、不適切な計装に煩わされる可能性がある
一実施形態では、データ引数を動的に検証することに関連する例示的なシステム及び方法が開示される。前述のように、ソースコードでデータ引数を識別して計装する現在のアプローチは、そのアプローチが情報の複雑さとタイムリーな利用可能性の問題に悩まされるので、一般的には不十分である。
そのため、一実施形態では、非制御データ引数に関する情報を含む、プログラムの制御フローグラフをリアルタイムで生成するデータ制御システムが開示される。さらに、データ制御システムは、一実施形態において、データフローの完全性およびプログラムフローの完全性を確保するために、プログラムのソースコードを自動的に計装するなどの追加の機能を提供するように、制御フローグラフを使用する。1つのアプローチにおいて、開示されるデータ制御システムは、コードセグメントが、後にプログラムにコンパイルされるソースコードに追加されるときに、コードセグメントの統合開発環境を監視する。フロー制御システムは、例えば、セグメントの追加を検出することに応答して、コードセグメントの制御フロー特性とともに、データ引数のデータ特性を識別する。
通常、データ特性には、データ引数がインスタンス化されたとき、使用されたとき、変更されたときなどのように、関連付けられたデータ引数の状態に関連する態様が含まれる。さらに、データ特性には、データ引数が渡される関数、どの関数がデータ引数を変更することができるかなどのように、データ引数に関連する関係が含まれてもよい。
さらに、制御フロー特性には、例えば、関数呼び出し、リターンアドレス、スタックポインタなどのような、プログラムの工程内及び/又は工程間の制御フロー(例えば、制御データ)に影響を与える態様が含まれる。制御フロー特性とデータ特性の知識があれば、プログラムの非制御データを記述するデータ特性も統合しながら、システムは制御フローグラフのセクションを動的に生成/更新してプログラムフローを表すことができる。例えば、追加のコードセグメントがソースコードに統合されたとき、データ制御システムは、新たに統合されたコードセグメントのさまざまな態様に関するノード、有向エッジ、およびノード内のタグ/メーカーを生成する。1つのアプローチでは、データ制御システムは、ソースコードが変更されると(例えば、追加される、修正されるなど)、システムは、制御データと非制御データの両方をさらに表すために、制御フローグラフに新しいセグメントの追加、及び/又は既存のセグメントの変更も行うように、制御フローグラフをリアルタイムで動的に更新する。
その結果、制御フローグラフは、単一の洗練されたデータ構造内にプログラムの様々な重要な態様を具体化する。かくして、データ制御システムは、一実施形態において、制御フローグラフをさらなるモジュール/システムに提供し、追加の機能を容易にする。例えば、一実施形態において、データ制御システムは、ソースコードを自動的に計装するメカニズムとして制御フローグラフを使用する。データ制御システムは、例えば、プログラムフロー及びデータ引数の保護を容易にするために計装を含むべき、グラフ内の制御の観点及び非制御の観点の両方を識別する。かくして、システムは、ソースコードの特定の態様とともに計装が自動的に含まれるように、計装をリアルタイムで統合する。このようにして、データ制御システムは、プログラムフローとデータの完全性をより確実にすることにより、プログラムの開発と最終的な機能を向上させる。
一実施形態において、プログラム内のデータ引数を検証するためのデータ制御システムが開示される。データ制御システムは、1つ以上のプロセッサと、1つ以上のプロセッサに通信可能に結合されたメモリとを含む。メモリは、1つ以上のプロセッサによって実行されるとき、1つ以上のプロセッサに、電子的要求に応答して、プログラムのソースコードのコードセグメント内のデータ引数を識別させる命令を含む分析モジュールを格納する。データ引数は、プログラムの1つ以上の関数間で渡される非制御データである。メモリは、1つ以上のプロセッサによって実行されるとき、1つ以上のプロセッサに、ソースコードから導出された制御フローグラフ内のデータ引数に関するデータ特性を格納させる命令を含むグラフモジュールを格納する。制御フローグラフは、プログラム内の実行パスを表す。データ特性は、データ引数の状態と、データ引数に関連付けられた少なくとも1つの関係を示す。グラフモジュールには、ソースコードの調整を容易にするため、電子的出力として制御フローグラフを提供するための命令が含まれる。
一実施形態において、非一時的なコンピュータ可読媒体が開示される。コンピュータ可読媒体は、1つ以上のプロセッサによって実行されたとき、1つ以上のプロセッサに、開示された機能を実行させる命令を格納する。命令には、電子的要求に応答して、プログラムのソースコードのコードセグメント内のデータ引数を識別するための命令が含まれる。データ引数は、プログラムの1つ以上の関数間で渡される非制御データである。命令には、ソースコードから導出された制御フローグラフ内のデータ引数に関するデータ特性を格納するための命令が含まれている。制御フローグラフは、プログラム内の実行パスを表す。データ特性は、データ引数の状態と、データ引数に関連付けられた少なくとも1つの関係を示す。命令には、ソースコードの調整を容易にするため、電子的出力として制御フローグラフを提供する命令が含まれる。
一実施形態において、プログラム内のデータ引数を検証する方法が開示される。この方法は、電子的要求に応答して、プログラムのソースコードのコードセグメント内のデータ引数を識別することを含む。データ引数は、プログラムの1つ以上の関数間で渡される非制御データである。この方法は、ソースコードから導出された制御フローグラフ内のデータ引数に関するデータ特性を格納することを含む。制御フローグラフは、プログラム内の実行パスを表す。データ特性は、データ引数の状態と、データ引数に関連付けられた少なくとも1つの関係を示す。この方法は、ソースコードの調整を容易にするため、電子的出力として制御フローグラフを提供することを含む。
本明細書に組み込まれ、その一部を構成する添付図面は、本開示の様々なシステム、方法、および他の実施形態を示す。図中に示された要素の境界(例えば、ボックス、ボックスのグループ、または他の形状)は、境界の一実施形態を表すことが理解されよう。いくつかの実施形態では、1つの要素が複数の要素として設計されてもよく、または複数の要素が1つの要素として設計されてもよい。いくつかの実施形態では、別の要素の内部コンポーネントとして示される要素は、外部コンポーネントとして実現されてもよく、その逆もあり得る。さらに、要素は縮尺どおりに描かれない場合がある。
図1は、制御フローグラフの生成及びプログラムのソースコードに関連する他の機能の実行に関連付けられたデータ制御システムの一実施形態を示す。 図2は、プログラムのソースコードの一例を示す。 図3は、図1のシステムが図2のソースコードから導出する制御フローグラフの一例を示す。 図4は、制御フローグラフのさらなる例を示す。 図5は、制御フローグラフの追加の例を示す。 図6は、ソースコードと、それから導出されたデータ引数のデータ特性の例を示す。 図7は、メモリ内のデータ引数の操作の一例を示している。 図8は、リアルタイムで制御フローグラフを生成することに関連する方法の一実施形態を示す。 図9は、データ引数を識別し、制御フローグラフ内にデータ引数を統合することに関連する方法の一実施形態を示す。 図10は、ソースコードを自動的に計装することに関連する方法の一実施形態を示す。
データ引数を動的に検証することに関連するシステム、方法、および他の実施形態が開示される。前述のように、ソースコードでデータ引数を識別して計装する現在のアプローチは、そのアプローチが情報の複雑さとタイムリーな利用可能性の問題に煩わされるので、一般的には不十分である。従って、結果として得られるプログラムは、データフローの不十分な保護に悩まされる可能性がある。
それゆえ、一実施形態において、プログラムの制御フローグラフをリアルタイムで生成するデータ制御システムが開示される。さらに、データ制御システムは、一実施形態において、制御フローグラフを使用して、制御フローグラフ内に具体化された制御及び非制御データ引数の両方に関連して定義されたポリシーにより、ソースコードを自動的に計装するなどの追加機能を提供する。そして、プログラムの自動計装を提供することにより、プログラムの適切な実行(例えば、プログラムフローおよびデータの完全性)を確保することが容易になり得る。
1つのアプローチにおいて、開示されるデータ制御システムは、例えば、コードセグメントのための統合開発環境内の電子的データストリームを監視する。データ制御システムがコードセグメント又は既存のコードセグメントへの変更を検出すると、データ制御システムは、例えば、コードセグメント、及び、もしあれば、既存のソースコードとコードセグメントがどのように統合されているかを分析し、コードセグメントの特性を識別する(つまり、様々なデータ引数を識別する観点)。
概して、特性には、例えば、少なくとも非制御データ引数が含まれるが、制御フロー引数も含まれる場合がある。非制御の側面は、変数の使用に関連する(例えば、プログラムの実行パスに影響しないメモリ位置の変更)一方で、制御フローの側面は、関数呼び出し、リターンアドレスなどのような、プログラムの工程内及び/又は工程間の制御フローに影響を与える。様々な特性の知識により、システムは、プログラムの様々なポイントでアクセスされ、変更され、そして開始されるプログラムフローとデータ引数の両方に関連して、制御フローグラフのセクションを動的に生成/更新することができる。
例えば、追加のコードセグメントがソースコードに統合されると、データ制御システムは、新たに統合されたコードセグメントに関する、ノード、有向エッジ、データ引数の状態、及び制御フローグラフの他の特徴を生成/変更する。一態様において、データ制御システムは、ソースコードが変更されると(例えば、追加される、修正されるなど)、システムが制御フローグラフに新しいセグメントを追加もする、及び/又は既存のセグメントを変更もするように、制御フローグラフをリアルタイムで動的に更新する。データ制御システムは、ソースコードが開発されるときにリアルタイムで動作するものとして説明されているが、データ制御システムは、完了時に全体として、断続的に、要求に応じてなど、ソースコードを処理するように機能してもよいことを理解されたい。
従って、データ制御システムは、プログラムを改善するために、基礎となるソースコードの多くの態様を具体化する、生成された制御フローグラフを使用することができる。すなわち、一実施形態において、データ制御システムは、制御フローグラフを使用して、実行の様々な段階でのデータ引数の状態とともに、プログラムの実行フローの視覚的表現を生成する。換言すると、データ制御システムは、1つのアプローチにおいて、プログラムが開発されている間、プログラムについて開発者に知らせる方法として、リアルタイムの更新を伴う、統合開発環境(IDE)内での制御フローグラフの視覚的表現を電子的に表示する。このように、制御フローグラフをリアルタイムで提供することにより、制御フローデータ引数、及び非制御データ引数の両方に関連する、プログラムの適切なプログラム構造を確保することが容易になる。このようにして、データ制御システムは、開発中にプログラムの重要な観点のより良い認識を促進することにより、プログラムの機能を向上させる。
さらに、データ制御システムは、制御フローグラフをメカニズムとして使用して、ソースコードを自動的に計装する。データ制御システムは、例えば、プログラムフローの完全性とデータの完全性を確保するために計装を含める必要があるソースコードのセグメントに関連付けられているグラフ内の態様を識別する。制御フローグラフは、例えば、ソースコードの重要な態様を本質的に識別するデータ特性と制御フロー特性を格納するので、データ制御システムは、この属性を活用して、ソースコードがランタイムチェックの計装方法を改善する。
かくして、データ制御システムは、ソースコードの特定の態様とともに計装が自動的に含まれるように、そして、1つのアプローチでは、開発者がプログラムを開発している最中に、計装を含めることをはっきりと覚えていなくても、作業中に計装を検証できるようにリアルタイムで、計装を統合する。このようにして、データ制御システムは、データの完全性とプログラムフローの完全性を改善する。
図1を参照すると、データ制御システム100の一実施形態が示されている。本明細書では、データ制御システム100に関して構成を説明するが、実施形態は、図示のような単一のシステムに限定されないことが理解されよう。いくつかの実装形態において、データ制御システム100は、クラウドコンピューティングシステム、クラスタコンピューティングシステム、分散コンピューティングシステム、ソフトウェア-アズ-ア-サービス(SaaS)システムなどとして具現化され得る。従って、データ制御システム100は、説明の目的のため単一のデバイスとして図示され、説明されるが、開示されるコンポーネントが構成することができる全体的な可能な構成を制限するように解釈されるべきではない。例えば、別個のモジュール、メモリ、データベースなどは、様々な組み合わせで様々なコンピューティングシステムに分散されても良い。
データ制御システム100はまた、様々な要素を含む。様々な実施形態では、データ制御システム100が図1に示されるすべての要素を有する必要がない場合があることが理解されよう。データ制御システム100は、図1に示される様々な要素の任意の組み合わせを有することができる。さらに、データ制御システム100は、図1に示されるものに対して追加の要素を有することができる。いくつかの構成では、データ制御システム100は、図1に示される1つ以上の要素なしで実現されても良い。さらに、様々な要素が図1のデータ制御システム100内に配置されているように示されているが、これらの要素のうちの1つ以上は、データ制御システム100の外部に配置することができることが理解されよう。さらに、示されている要素は、大きな距離で物理的に隔てられても良い。
加えて、図のシンプルさと分かり易さのため、適宜、対応するまたは類似の要素を示すために、異なる図の間で参照番号が繰り返されることが理解されよう。さらに、説明は、本明細書に記載された実施形態の完全な理解を提供するために、多くの特定の詳細を概説する。しかしながら、当業者は、本明細書に記載の実施形態が、これらの要素の様々な組み合わせを使用して実施され得ることを理解するであろう。
いずれの場合も、データ制御システム100は、プログラムのデータ完全性の改善に関連する、本明細書に開示される方法および他の機能を実行するように実現される。言及された機能と方法は、図のさらなる説明でより明らかになるであろう。さらに、データ制御システム100は、プロセッサ110を含むものとして示されている。このように、様々な実施例において、プロセッサ110は、データ制御システム100の一部であっても良いし、データ制御システム100は、データバスまたは別の通信経路を介してプロセッサ110にアクセスしても良いし、プロセッサ110は、データ制御システム100によってアクセス可能なリモートコンピューティングリソースであっても良い。いずれの場合も、プロセッサ110は、他の電子デバイスを制御する、または他の電子デバイスの制御を引き起こすために使用され得る様々な電子的出力を生成するようにマシン可読命令を実行することができる、マイクロプロセッサ、ASIC、または別のコンピューティングコンポーネントなどの電子デバイスである。
一実施形態において、データ制御システム100は、分析モジュール130、グラフモジュール140、および計装モジュール150を格納するメモリ120を含む。メモリ120は、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、ハードディスクドライブ、フラッシュメモリ、またはモジュール130、140、および150を格納するための他の適切なメモリである。モジュール130、140、および150は、例えば、プロセッサ110によって実行されるとき、プロセッサ110に本明細書に開示される様々な機能を実行させるコンピュータ可読命令である。様々な実施形態では、モジュール130、140、および150は、限定されないが、ハードウェアロジック、ASIC、プロセッサ110のコンポーネント、電子メモリ内に埋め込まれた命令などを含むことができる、異なる形態で実現することができる。
データ制御システム100を引き続き参照すると、一実施形態では、システム100はデータベース160を含む。データベース160は、一実施形態では、メモリ120、分散メモリ、クラウドベースメモリ、または別のデータストアに格納された電子データ構造であり、格納されたデータを分析する、格納されたデータを提供する、格納されたデータを整理するなどのため、プロセッサ110によって実行され得るルーチンで構成される。例えば、一実施形態では、データベース160は、様々な決定を実行する際にモジュール130、140、および150によって使用されるデータを格納する。一実施形態では、データベース160は、制御フローグラフ170を格納する。さらなる実施形態では、データ制御システム100は、グラフ170を、メモリ120、特化型データ構造、プロセッサ110のキャッシュメモリ、または別の適切なデータストレージコンポーネントに格納する。
本明細書で使用されるように、プログラムは、ソースコードから導出されるコンパイルされたマシンコードを指す。例えば、一実施形態において、プログラムは、マシンコードであるコンパイル済みのプログラムまたはその一部である。本明細書で使用される「マシンコード」という語句は、一般的に、例えば、プロセッサ110などのマイクロプロセッサによって実行することができる機械語命令で表されるプログラムを指す。さらに、マシンコードは、一般的に、関連するハードウェアによって実行される命令セットによって定義されるオペコードで構成される、原始言語またはハードウェア依存言語であると理解される。さらに、マシンコード自体は、データ値、レジスタアドレス、メモリアドレスなどでさらに構成される。もちろん、プログラムはマシンコードであると説明されているが、さらなる実施形態では、プログラムは、アセンブリコードまたはソースコードから導出される別の中間表現である。
プログラムのコンパイル元となるソースコードは、例えば、関数、データ構造、オブジェクト、ステートメントなどで構成される。ソースコードの一部として含まれている計装は、さらに同じ要素(例えば、オブジェクト、ステートメントなど)で構成される。一般的に、プログラムは一連の関数として編成されている。様々な表現において、関数は、サブ関数として互いに入れ子にされ得る。さらに、関数は、通常、一連のステートメント(ループ、I/Oステートメントなど)から構成され、典型的には特定の機能にフォーカスされている。つまり、各個別の関数は、通常、特定のタスクを行うために実行される。例えば、サブ関数は、親関数のより広範な機能をサポートするサブルーチンを実行することができる。いずれの場合も、関数は、関数自体を形成するステートメントを定義し、その関数に関連付けられた機能の実現を提供するソースコードを含む。
さらに、本明細書で説明されるように、記載されたモジュール130、140、150は、統合開発環境へのプラグインとして、またはスタンドアロン機能として機能し得る。統合開発環境(IDE)は、ソフトウェア開発のための便宜を提供するプログラムまたはプログラムの集合である。例えば、IDEは、ソースコードエディタ、ビルドツール、デバッガ、コンパイラ、インタプリタ、グラフィカルユーザーインターフェイス(GUI)などを含むことができる。一般的に、IDEは、プログラムの作成を容易にするツールやその他の特徴を備える総合的な環境を提供することを通じて、開発者(つまり、プログラマ)の効率を向上させる仕組みである。例えば、前述のように、1つ以上の構成では、モジュール130、140、150は、追加の機能を提供するためにIDEと統合するプラグインである。そして、1つのアプローチでは、モジュール130、140、150は、例えば、IDEに電子的に提供されるコードセグメントを含む、電子的入力および出力ストリームを含む、IDEの電子データにアクセスする。モジュール130、140、および150は、アクセスを容易にするために、IDEのアプリケーションプログラムインターフェース(API)を活用することができる。さらに、そのようなアクセスは、モジュール130、140、150の統合を自動化する(例えば、直接的な統合アクセスを提供する)アプリケーションフックの形態で提供されてもよい。いずれの場合も、システム100およびモジュール130、140、150は、通常、IDEと協調して機能する。例えば、IDEは、実行時に、通常、プログラムのコンパイル元のソースコードを管理し、実際にソースコードをプログラムにコンパイルする機能を提供することもある。
データベース160の要素について続けると、グラフ170は、プログラムを通じて、実行パスを表す制御フローグラフである。その上、グラフ170は、さらにデータ引数およびグラフ170内の異なるノードでのデータ引数の関連状態を表す。一実施形態において、分析モジュール130及びグラフモジュール140は、ソースコードが動的にIDEに提供されるときに、ソースコードからグラフ170を導出するように一緒に機能する。代替の実施形態では、分析モジュール130及びグラフモジュール140は、特定の要求に応答して、断続的に、またはソースコードがコンパイルされる前に、記載された機能を実行するように動作する。
グラフモジュール140は、1つのアプローチにおいて、ノード、及びノード間の有向エッジを使用してグラフ170を形成する。ノードはソースコードのブロックを表し、一方、ノード間の有向エッジはブロック間の遷移を表す。ブロックは、コードの原子セグメント(例えば、中断されない)または少なくとも一体的に関連するソースコードのセグメントである。一実施形態では、有向エッジは、ブロック/セグメント間の工程内および/または工程間の制御フロー転送を示す。つまり、エッジは、ハンドオーバー、関数呼び出し、関数の引数などを表す。概して、有向エッジは、個別のブロック間のプログラム実行における転送を示す。
さらに、一実施形態において、グラフモジュール140は、非制御データ引数に関するデータ特性を使用して、制御フローグラフ170に注釈を付ける。例えば、グラフモジュール140は、ソースコード内のデータ引数に関する注釈を含むようにグラフ170を生成する。データ引数は、関数間で渡される変数などの非制御データ引数である。対照的に、ノード及び有効エッジを生成するためにグラフモジュール140によって使用される制御フロー特性は、プログラムの実行パスに影響を与える制御フローデータ引数を表す。いずれの場合も、グラフモジュール140は、少なくともノード/エッジに関連するデータ引数の関連状態を識別するデータ特性を含むように、ノード及び/又は有向エッジに注釈を付ける。このようにして、グラフモジュール140は、悪意のある攻撃を受けやすい可能性があるプログラムの潜在的に脆弱な態様のより分かりやすい表現を有するようにグラフ170を生成する。
別の実施形態では、ノードおよび有向エッジは、本明細書に記載されているものとは異なって定義され得ることを理解されたい。例えば、1つのアプローチにおいて、ノードと、有効エッジを定義する状態とを含むセグメント/ブロックは、グラフポリシーに従って指定される。グラフポリシーは、それぞれノート及びエッジを形成するブロック/セグメント及び遷移を識別するためのテンプレート、例示的なセグメント/状態、及び/又はメトリクスを定義する。例えば、システム100は、別々の実施形態に従って、グラフ170の特徴を柔軟に定義するように実現され得る。同様に、システムは、特定の実施形態に従って変化するように、グラフポリシー内の非制御データ引数を定義するデータ特性を定義することができる。
例として、図2は、プログラムのソースコードのサンプルセグメントを示す。さらに、図3は、例示的な制御フローグラフ300を示す。制御フローグラフ300は、分析モジュール130を介して提供される入力からグラフモジュール140によって生成され得るグラフの例示である。そして、グラフ300は、ソースコード200からのコードのセグメント/ブロックに対応するノード305、310、315、320、325、330、335、340、及び345を含む。グラフ300は、ソースコード200のセグメント間の関係に対応するノード間の有向エッジをさらに示す。さらなる態様において、グラフ300には明示的に示されていないが、グラフモジュール140は、グラフ300内に非制御データ引数のデータ特性を含む。例えば、分析モジュール130は、文字列charを非制御データ引数として識別することができる。従って、文字列charのデータ特性は、PrintfやPutcなどの1つ以上の関数による変更を示す一方で、グラフ170内の追加の注釈として、文字列がどこで/いつ初期化され得るかを示すこともできる。
さらに、個々のノード及び有向エッジは、例えば、ソースコードの制御フロー特性に従って定義される。つまり、ソースコードのブロック/セグメントが相互に関連する方法と、ブロック/セグメント自体の間の画定とが、ソースコードの制御フロー特性に従って定義される。後でさらに説明されるように、グラフモジュール140は、概して、プログラムのソースコードから制御フロー特性とデータ特性を識別し、システム100内で定義されたグラフポリシーに従ってそのようにしてもよい。
いずれの場合も、図4及び5は、ソースコードの様々なセグメントに対応する制御フローグラフ400及び500のさらなる例を示している。例えば、図4に示されるように、グラフ400は、対応する有向エッジによって示されるように、if-then-elseステートメントを介して別々のパスで互いに関係するソースコードの別々のセグメントに対応する4つの別々のノード410、420、430、440を含む。さらに、図5は、関連するブロック/関数内のコードのセグメントを表すノード510、520、530、540を含むグラフ500を示している。図示のように、グラフ500は、出口ノード540につながる別々の有向エッジによって示される2つの別個の退出状態を含むループを表す。このように、グラフ170は、プログラムの実行フローを表すために、ソースコードの多くの異なる構成を描写することができる。
さらに、提供される例は、比較的短いコードセグメントに関するものであり、一般的な傾向として、グラフ170は、複数のノードおよびそれらの間の有向エッジを含むことを理解されたい。一例として、例示的なグラフ400および500に示されるような「出口」ノードは、様々な実施例において、通常、実際のプログラム出口ではなく、別個のコードセグメントへの遷移を示す。さらに、グラフ400および500は、非制御データ引数と一緒に示されていないが、グラフ400及び500を有する別個のノードは、関連する非制御データ引数の態様をさらに指定するために注釈を付けられ得ることを理解されたい。このように、グラフ170は、視覚的な形式で表現されたとき、開発者によるより良い理解を容易にし、また、様々なモジュールにプログラムフローおよびデータ特性の理解を提供することにより、さらなる自動化機能を促進するためのものでもある。
分析モジュール130およびグラフモジュール140が、グラフ170に含めるために非制御データ引数に関する情報を抽出する方法のさらなる例として、図6を検討する。図6は、分析モジュール130によってソース600から抽出され得るデータ特性605に伴う、ソースコード600のサンプルセクションを示す。図6に示されるように、データ特性605は、ソースコード600の実行中の様々な段階での整数“パス”のデータ引数の注釈を含む。すなわち、データ特性605は、610及び615でのデータ引数のインスタンス化および設定、620及び625でのデータ引数の使用、630及び635での、データ引数を設定するための条件付きエントリ、および最後に640でのifステートメント内でのデータ引数のさらなる使用を含む、パスデータ引数の状態を示す。従って、データ特性605は、データ引数へのプログラムアクセスがいつ、どの局面で適切であるか/許容されるかを示す。かくして、グラフモジュール140は、ソースコードに関するさらなる詳細を提供するために、グラフ170内にデータ特性を格納することができる。
追記として、データ引数は、一般的にソースコード内で記述されている変数で、文字列、整数、文字など様々なタイプのものがある。さらに、ソースコードは、複数のそのような非制御データ引数を含むことができるが、分析モジュール130は、1つのアプローチにおいて、グラフポリシーによって示される条件に従って、特定のデータ引数のデータ特性を選択的に識別する。従って、グラフ170内にデータ引数を含めることは、分析モジュール130がデータ引数は包含の条件を満たすと決定することに左右され得る。条件は実施形態に応じて変わり得るが、概して、グラフポリシーは、操作にさらされる可能性のあるデータ引数、または含まれるべきデータ引数としてより機密性の高いデータ引数(例えば、パスワード)を示す。
図7は、図6のデータ引数が悪意を持って操作される可能性がある方法の一例を示している。例えば、図7は、メモリ120内に格納されたソースコード600からの文字列「データ」と、整数「パス」を示している。このように、整数パスは、文字列データの直後のメモリアドレスで発生する。そして、メモリ120の変更ビュー700に示されるように、ソースコード600が文字列0から499内の500の場所に対して実行されるときに、文字列charの値が調整される。しかしながら、文字列の悪意のある操作は、710に示されるように、文字列データを超えて拡大し、整数パスを上書きしようとする。
整数パスなどのデータ引数に対するこのタイプの悪意のある攻撃は、データ引数のランタイムチェックを提供する計装を含めることで防ぐことができるものである。
図1のデータベース160について続けると、計装ポリシー180は、後でより詳細に説明されるように、計装モジュール150がソースコード内に計装を含める対象とする、様々な状態及び/又はソースコードのセグメントを定義する。概して、計装は、特定の実装例に応じて異なる目的を果たすことができる。例えば、計装は関数内に統合されて、プログラムフローを制御する(例えば、プログラムが誤った方向に向かわないことを確認する)、デバッグする、データ引数を検証する(例えば、データ値の操作を防止する)、I/Oを検証する、などを提供することができる。例えば、プログラムが先進運転支援システム(ADAS)を制御して、道路上で車両がどのように制御されるかを自動的に調整する例において、計装は、プログラムが悪意のある攻撃によって操作された場合に、事故や乗員の負傷をもたらし得るプログラムフロー及び/又はデータ値の悪意のある操作を防ぐためのセキュリティ計装を含むことができる。
さらなる態様では、計装ポリシー180はまた、計装閾値又は少なくとも計装閾値を生成するためのメトリクスを定義する。1つのアプローチでは、計装ポリシー180は、多様なクラスの関数、データ引数などの計装閾値を定義する。例えば、計装ポリシー180は、一実施形態において、開発者によってタグ付けされ得るか、またはコードセグメントに関連付けられ、定義されたメトリクスに従って導出され得るセキュリティレベルに従って関数/引数のクラスを定義する。従って、計装ポリシー180は、第1のクラスの第1の閾値、第2のクラスの第2の閾値、第3のクラスの第3の閾値などを示すことができる。概して、セキュリティレベルの個別のクラス及び関連する閾値は、特定の関数/引数の脆弱性(例えば、操作への露出)又は他の観点に関連する場合がある。そのため、計装ポリシー180は、計装の包含を最適化するために、セグメントが計装されるべきである異なる閾値を示し得る。従って、実際には、計装モジュール150が、例えば、コードセグメントを評価し、注目された閾値が満たされると、評価に従って計装を自動的に含める。
さらに、コードセグメント内に含まれる実際の計装そのものは、一実施形態において、前述のグラフポリシー内のテンプレートとして定義される。例えば、テンプレートは、プログラムフローの制御、I/Oの検証、追加の機能のフックの提供、データ引数へのデータ完全性の提供などに関連してさまざまな機能を実行する一連の標準化された計装を定義する。さらに、テンプレートは、1つのアプローチにおいて、例えば、計装が包含される特定のコードセグメントに従って計装モジュール150によってカスタマイズされる変数をさらに示す。すなわち、計装モジュール150は、一例では、関数のリターンアドレスを確かめるため、又は変数へのアクセスを制御するために計装を含むことができる。このように、計装モジュール150は、関連するソースコードに対応するように、及びテンプレートをベースとして使用することによって、関連するソースコードセグメントにセキュリティまたは他の機能を提供するように、テンプレートからの関連する計装ステートメントの変数を変更する。計装ポリシー180および計装モジュール150のさらなる特徴は、後に説明される。
図1について続けると、分析モジュール130は、一実施形態において、プロセッサ110によって実行されるとき、コードセグメントがソースコードに追加されていると、プロセッサに、コードセグメントを検出させるコンピュータ可読命令を含む。1つのアプローチにおいて、分析モジュール130は、アプリケーションプログラムインターフェース(API)または他のプログラムフックを介して内部的にIDEにアクセスして、IDE内の電子的入力ストリームにアクセスする。電子的入力ストリームは、通常、関連するコンピューティングデバイスの他のシステムコンポーネントを介してIDEに提供されるなんらかの電子的入力を含む。例えば、分析モジュール130は、プロセッサ110上で実行する他のプロセスからの電子的入力、ネットワーク通信インターフェースを介して受信される電子的通信、プロセス内(すなわち、IDE内)通信、コンピューティングデバイス(例えば、キーボード)と接続されたマシンインターフェースデバイスからのI/O入力、などを監視する。
そして、分析モジュール130は、1つのアプローチにおいて、プログラムのソースコードへの追加及び/又は変更のための注目すべき電子的入力を監視する。すなわち、分析モジュール130は、新しいコードセグメント、既存のコードセグメントを変更する入力などについて、IDEへの入力ストリームを監視する。
さらに、分析モジュール130は、一実施形態において、ソースコードを分析して、ソースコードの制御フロー特性及びデータ特性を識別するための命令も含む。すなわち、ソースコード内で変更が行われると、分析モジュール130は、変更が生じたときにリアルタイムで変更をアクティブに検出し、そして、ソースコード全体に関して変更を分析して、それに関連する制御フロー/データ特性を識別する。一実施形態において、制御フロー特性は、関数呼び出しなどのプログラムの工程内及び/又は工程間制御フロー転送、及び、呼び出し規約と一緒に、記号名、関数引数および戻り値を伴うリターンアドレスなどを含む。より一般的には、制御フロー特性は、プログラムの実行に影響を与え、ハンドオーバー、終了、遷移などをもたらす態様に関連する。
さらに、制御フロー特性には、通常、ソースコード内の様々なポイントでのデータ引数の現在の状態、データ引数に関連付けられた関係(例えば、変数が渡される、及び/又は変数を操作することができる関数)などが含まれる。より一般的には、データ特性は、変数及び変数の許可された使用/アクセスを識別する。このように、分析モジュール130は、一実施形態において、制御フロー/データ特性を識別するために、注目すべき監視および分析をリアルタイムで実施し、その結果、グラフモジュール140は、ソースコードの様々な態様に関して更新されたフォームにグラフ170を維持することができる。
そして、グラフモジュール140は、一実施形態において、プロセッサ110によって実行されるとき、プロセッサ110に、制御フロー/データ特性に従って制御フローグラフ170を生成/更新させるコンピュータ可読命令を含む。グラフモジュール140は、概して、非制御データ引数についての注釈/タグとともに、ノードおよび有向エッジを表すためのプログラム要素を含む電子データ構造としてグラフ170を生成することに留意されたい。最初に、グラフモジュール140は、ヌル値またはエントリノードだけを含むグラフ170を生成し、そこから、グラフモジュール140は、ソースコードが開発されるときに、注目される更新を通じてグラフ170を構築する。
このように、グラフモジュール140は、グラフ170に調整/変更が行われると、グラフ170をリアルタイムで更新する。あるいは、前述のように、グラフモジュール140は、例えば、間欠的、ソースコードの完了時、ソースコードをコンパイルする前などに、電子的要求を受信すると、グラフ170を生成してもよい。従って、グラフモジュール140は、一実施形態において、制御フロー特性を積極的に使用して、ソースコードの態様を変更する。例えば、グラフモジュール140は、一実施形態において、ソースコードによって定義されるプログラムのリアルタイム評価を提供するために、修正/追加が行われる区分的にグラフ170を開発する。さらに、グラフモジュール140は、通常、分析モジュール130からの制御フロー特性と並行して提供されるデータ特性も使用して、制御フローグラフ170に非制御データ引数に関する情報をさらに含める。
さらなる態様として、グラフモジュール140は、一実施形態において、制御フローグラフ170を電子的に提供するための命令をさらに含み、計装の包含などのソースコードの調整を容易にする。1つの態様において、グラフモジュール140は、変更/追加が発生したときにリアルタイムで変更/追加を含めることによってグラフ170を積極的に開発する。グラフ170は、プログラムが実行されたとき、起こり得る実行パス、及びプログラムにわたるデータ引数などの関連状態を表す。従って、グラフ170は、ソースコード内の潜在的なエラー(例えば、無限ループ、露出される関数、安全でないデータなど)についての見識を提供し、それは、様々なモジュールやシステムによって、コンパイルされたプログラムにおける難題(例えば、セキュリティホール、プログラム障害など)を回避するべく、ソースコードを改善するために活用され得る。
このように、グラフモジュール140は、一実施形態において、制御フローグラフ170の視覚的表現を生成し、統合開発環境(IDE)内で視覚的表現を動的に表示することによってグラフ170を提供する。従って、コードセグメントが生成されてIDEに提供されると、分析モジュール130は、ソースコード全体への影響とともに、コードセグメントを識別して分析し、制御フロー特性およびデータ特性を提供する。制御フロー特性から、グラフモジュール140は、変更の効果が開発者にリアルタイムで視覚的に描写されるように、グラフ170および視覚的表現をプログラムのリアルタイム表現として生成する。1つ以上の実施形態では、視覚的表現は、IDE内のウィンドウに電子的に表示され、グラフ170への変更/更新を示す識別子を含む。
例えば、例として、図2、3、4を参照し、コード200がif-then-elseステートメントを含むように変更されたとする。すると、分析モジュール130は、ソースコードへの変更を検出し、変更されたコードを分析して、存在する可能性のある任意のデータ引数の制御フロー特性およびデータ特性を生成する。次に、グラフモジュール140は、制御フロー特性およびデータ特性に従って、新たに追加されたステートメントのデータ引数のノード、有向エッジ、および注釈を生成し、これらは、グラフモジュール140によって使用されて、例えばノード325で、グラフ400を含むようにグラフ300を変更する。従って、グラフモジュール140は、新たに追加されたセグメントを収容するように元のグラフを調整しながら、変更をグラフィカルに示すために、視覚的表現内でこの調整を描写することがさらに可能である。
さらに、代替の実施形態では、グラフモジュール140は、システム100内のさらなるモジュール/コンポーネント、またはグラフモジュール140から離れたシステム/モジュールにもグラフ170を提供する。例えば、一実施形態において、データ制御システム100は、計装モジュール150を含む。計装モジュール150は、プロセッサによって実行されるとき、プロセッサ(例えば、プロセッサ110)に、制御フローグラフ170に従って、ソースコード内に計装を統合させる命令を含む。例えば、1つのアプローチでは、計装モジュール150は、リアルタイムに、かつグラフ170によって反映されるようにソースコードの変更に応じて、ソースコードに計装を追加する。従って、計装モジュール150は、グラフ170の変化、ソースコードの新しいコードセグメントの包含、既存のコードセグメントへの変更などの特定の条件を監視することができ、これらは、例えば、IDEのAPI又は別の適切なメカニズムを通じて、計装モジュール150への電子的要求として機能する。電子的要求は、一実施形態において、計装モジュール150に、プログラムフローの完全性及び/又はデータの完全性が保証されるべき所に、及び/又は計装がソースコードの特定のコードセグメントに関して別個の機能を提供することになっている所に、計装を含ませる。
前述のように、計装ポリシー180は、ソースコードのどの態様が計装されるべきかを(例えば、計装の場所およびタイプを特定するためのメトリクス又は他の条件を介して)識別するための様々なメカニズムを示す。様々な態様において、計装モジュール150によって含められる計装は、プログラムの実行が制御フローグラフ170に従うことを保証し、及び/又はグラフ170で識別される特定のデータ引数の完全性を保証することによって、プログラム内のランタイムチェックを強化するためのものである。このように、計装モジュール150は、通常プログラムフローとデータとの両方に関して、プログラムの完全性を強化するための計装を含める方法を知るために、グラフ170を介して伝達される制御引数及び非制御引数の知識を使用する。
さらに、計装モジュール150は、さらなる態様において、データフロー、データ使用/アクセス、およびプログラム内で計装される他の態様を理解するために、グラフ170も参照する。このようにして、計装モジュール150は、プログラムフローおよびデータの完全性を強化するランタイムチェックを自動的に含めることによって、プログラムのセキュリティを改善する。さらに、計装モジュール150は、一実施形態において、アドレスチェック(例えば、データおよびプログラムフローのメモリアドレス)、変数/関数の戻り型チェック、データバインドチェック、オペコードチェック、コール-リターンペアの一致(例えば、非単一クラス)などを実行する計装を含める。
もちろん、計装モジュール150は、開発者が新しいコードセグメントを提供する、及び既存のコードセグメントを調整するとき、リアルタイムでソースコード内に計装を動的に含めるものとして説明されているが、代替の構成では、計装モジュール150は、ソースコードの完成バージョンまたは初期バージョン上で、計装を含むように実行される。1つのアプローチでは、計装モジュール150は、ソースコードをプログラムにコンパイルする要求と並行して開始されたときに、計装を自動的に追加する。
いずれの構成においても、計装モジュール150は、ソースコードおよび制御フローグラフ170を分析して、計装をソースコード内に統合する。特に、計装モジュール150は、グラフ170の有効エッジによって特定されるソースコード内の工程遷移、グラフ170内で識別されるデータ引数が使用/変更される場所などの、制御フローグラフ170とソースコードとの間の相関関係に従って、計装されるべきソースコードのセグメントを識別する。さらに、計装モジュール150は、ソースコードに従ってテンプレートの定義された計装をカスタマイズするように、定義された計装のテンプレートを修正することによって、識別されたセグメントに従い計装を自動的に追加する。このようにして、追加された計装が希望どおりに機能することを確実にするために、例えば、定義された計装のセットを事前テストし、検証することができる。
さらに別の態様では、計装モジュール150は、ソースコードのタグ付け/ラベル付けされたセクションに従った計装を含む。すなわち、例えば、一実施形態において、計装モジュール150は、IDE内、特に、計装されるべきソースコードの部分として、特定のステートメント、関数、データ引数、又は他の部分を識別する、ソースコードの特定のステートメント、関数、データ引数、又は他の部分内の電子的入力を監視する。様々なアプローチにおいて、電子的入力は、計装の基本的な必要性を示すために、ソースコードの部分にコメント識別子または他のラベルをタグ付けし、一方、さらなる態様においては、入力は、含まれるべき特定の計装、又は少なくとも含まれるべき計装の特性を指定する。例えば、提供されるラベルは、計装されるべき機密性の高い/高価値の関数またはデータ引数を示し得る一方で、さらなる態様では、提供されるラベル/タグは、計装の特性を指定せず、コードの部分が、自動的に計装されるために計装モジュール150によって分析されることが必要であることを単に示す。
いずれの場合においても、計装モジュール150は、その後の計装の生成をさらに知らせるために、電子的入力に従ってソースコードの部分にラベル付け/タグ付けすることができる。電子的入力の元々の形式は実施形態によって異なり得るが、通常、ソースコードの一部にタグを提供するものとして、その後の入力の特性を指定するIDEのGUIの要素の選択を含む。例えば、1つ以上の属性選択が、GUI内で有効化されることができ、その後、選択されたソースコードの一部は、計装モジュール150によって自動的にその属性でタグ付けされる。
制御フローグラフを生成し、そこからさらなる機能を提供する追加の態様が、図8に関連して説明される。図8は、リアルタイムで制御フローグラフを生成することに関連する方法800を示している。方法800は、図1のデータ制御システム100の観点から説明される。方法800は、データ制御システム100と組み合わせて説明されるが、方法800はデータ制御システム100内で実行されることに限定されず、むしろ、方法800を実行することができるシステムの一例であることを理解されたい。
810で、分析モジュール130は、プログラムのソースコードに追加されているコードセグメントを監視して、周期的に検出する。本明細書で使用される場合、810でコードセグメントを追加することは、概して、新しいコードセグメントを追加すること、及びプログラムのソースコード内の既存のコードセグメントを変更することも指すことに留意されたい。より普遍的には、分析モジュール130は、ソースコードへの変更を伴う入力(例えば、コード、コマンドなど)について、コンピューティングデバイス内の統合開発環境(IDE)への電子入力ストリームを監視する。従って、分析モジュール130は、一実施形態において、例えば、APIを介したIDEへの入力ストリームを継続的に監視して、いつソースコードが変更されている(すなわち、追加又は変更されている)かを識別する。結果として、注目すべき変更を検出すると、分析モジュール130は、制御フロー特性を識別するためにブロック820に進む。
820で、分析モジュール130は、グラフ170の制御フロー特性を識別する。一実施形態では、分析モジュール130は、深さ優先探索を使用してソースコードを分析し、ソースコード内のステートメントを考察する。さらなる態様では、分析モジュール130は、ソースコードを考察し、理解され得るように特性を識別するための他の適切なアプローチを実施する。分析モジュール130がソースコードを考察しているとき、モジュール130は、少なくとも関数呼び出し、関数戻りアドレス、関数引数、関数戻り値、および制御フロー特性としてのステートメント間の関係を識別するために、ソースコード内のステートメントを解析する。
様々な実装形態において、分析モジュール130は、810で検出されたコードセグメント/変更に関連するソースコードの影響を受けた部分を分析し、一方、さらなる態様では、分析モジュール130は、変更に応答して、制御フロー特性を識別するためにソースコード全体を再分析する。概して、実行されるアプローチは、ソースコードの全サイズ、変更のサイズ、および分析を実行するために利用可能なリソースに関連する。例えば、一実施形態では、分析モジュール130は、示された選好に従って制御フロー特性を決定するために、部分的または完全なレビューを選択的に行う。分析モジュール130によって実行されるアプローチがどちらであっても、制御フロー特性は、グラフ170に表されるプログラムの工程内及び/又は工程間制御フロー転送に関する情報を提供する。
さらに、分析モジュール130は、一実施形態において、制御フロー特性をグラフポリシーと比較することによって、ソースコードのどのステートメントが脆弱性を含むかをさらに識別する。一実施形態では、グラフポリシーは、セキュリティの脆弱性およびパフォーマンスのボトルネックを示す条件を定義する。従って、情報が、その後、グラフ170と統合されて、ソースコードの様々な部分の特性に関するさらなる指標を提供するように、脆弱性およびボトルネックに関する追加情報も制御フロー特性内に含めることができる。さらに、様々なアプローチにおいて、分析モジュール130は、グラフポリシーによって指定されたさらなる情報を使用して、脆弱性およびボトルネックを識別する。このように、グラフポリシーは、脆弱性と相関するデータフロー、制御データ引数、データ公開、およびプログラムフローに関連するプログラムの条件をさらに指定することができる。いずれの場合も、分析モジュール130は、グラフ170への包含のために、制御フロー特性内のプログラムフローに直接的および間接的に関連する態様を含めることができる。
830で、グラフモジュール140は、制御フローグラフ170を更新する。一実施形態では、グラフモジュール140は、グラフ170のノードおよび有向エッジを形成するために、820で識別される制御フロー特性を使用する。制御フローグラフは、概してプログラムにわたる実行パスを表すことを考慮し、そのため、グラフモジュール140は、制御フロー特性を使用して、グラフ170が形成される元となる異なるコードセグメント(例えば、ノード)間のパス(例えば、有向エッジ)を識別する。このように、グラフモジュール140は、コードセグメントに適用させるように制御フローグラフの既存のノードおよびエッジを変更しながら、検出されたコードセグメントに対応する制御フロー特性を追加することによって、制御フローグラフ170を更新する。つまり、例えば、既存の有向エッジは、追加のノードが追加され、既存のノードが変更され、示される状態が変更され、又は新たな状態が追加されるなどと同時に、再ルーティングされ得る。
さらに、前述のように、グラフモジュール140は、グラフ170を更新するためコードセグメントがソースコードに追加されると、リアルタイムで機能する。かくして、グラフモジュール140は、プログラムの開発を容易にするためにグラフ170を直接参照することができるように、グラフ170を更新された形式に維持する。
さらに、グラフモジュール140はまた、前述のように、追加の特性でグラフ170を更新する。すなわち、グラフモジュール140は、ノードに関連するコードセグメントの脆弱性、様々なノードに関連するボトルネック、および他の注目すべき特性について、グラフ170でタグを付けるか、さもなければ注釈を提供する。従って、グラフモジュール140は、ソースコードが書かれているようにグラフ170を積極的に開発するだけでなく、グラフモジュール140は、例えば、特定の特性を目立たせることによって脆弱性及びボトルネックの軽減を容易にするために、対応するノードのデータ構造内にコードセグメントに関する追加情報も提供する。
840で、グラフモジュール140は、ソースコードの調整を容易にすることによってプログラムの機能を改善するために、制御フローグラフ170を提供する。前に説明したように、制御フローグラフ170は、プログラムの実行がどのように進行するかの表現を提供し、さもなければ、一般的には識別できないソースコードに関する見識を提供する。このため、様々なシステムは、グラフ170を活用して、ソースコードを操作し、及び/又は開発者にさらなる機能を提供することができる。
840で制御フローグラフ170を提供する一態様として、グラフモジュール140は、制御フローグラフの視覚的表現を生成し、プログラムのリアルタイム表現を提供するために、コードセグメントが生成されると、統合開発環境(IDE)内で視覚的表現を動的に表示する。視覚的表現は、例えば、図3から5のグラフと同様の方法で、ソースコードのノード、有向エッジ、および他の記号表現を含むインタラクティブなグラフィックとして提供される。
制御フローグラフを生成すること、特に、非制御データ引数を識別することの追加の態様が、図9に関連して説明される。図9は、非制御データ引数のデータ特性を制御フローグラフに統合することによって、データ引数を検証することに関連する方法900を示している。方法900は、図1のデータ制御システム100の観点から説明される。方法900は、データ制御システム100と組み合わせて説明されるが、方法900は、データ制御システム100内で実施されることに限定されず、むしろ、方法900を実施することができるシステムの一例であることを理解されたい。さらに、方法900は、概して、方法800とは分けて説明されるが、方法800と方法900の両方は、1つのアプローチにおいて、その後、追加機能を容易にするために、計装モジュール150及び/又は他のシステムによって使用される関連情報を用いて制御フローグラフ170を事前設定するために、並行して実行されることを理解されたい。
910で、分析モジュール130は、要求を監視する。一実施形態では、要求は、コードセグメントがソースコードに追加されるときに生成される電子的要求である。方法800に関連して説明したように、本明細書で使用される場合、910でコードセグメントを追加することは、概して、新しいコードセグメントを追加すること、及びプログラムのソースコード内の既存のコードセグメントを変更することも指す。より普遍的には、分析モジュール130は、ソースコードへの変更を伴う入力(例えば、コード、コマンドなど)について、コンピューティングデバイス内の統合開発環境(IDE)への電子入力ストリームを監視する。1つのアプローチでは、分析モジュール130は、例えば、APIを介したIDEへの入力ストリームを継続的に監視して、いつソースコードが変更されている(すなわち、追加又は変更されている)かを識別する。かくして、分析モジュール130は、ブロック810及び910で説明された機能を、分析すべきソースコード内の情報がいつ利用可能となったかを識別するため、実行されるプロセスを監視する単一のチェックとして実行することができる。結果として、注目すべき変更を検出すると、分析モジュール130は、制御フロー特性を識別するためにブロック920に進む。
920で、分析モジュール130は、コードセグメント内の1つ以上のデータ引数を識別する。一実施形態では、ブロック920での非制御データ引数の識別は、方法800のブロック820での制御フロー特性の識別と並行して行われる。分析モジュール130は、例えば、データ引数が制御データ引数であるか又は非制御データ引数であるかを定義するデータ型およびデータ型の関連などの、グラフポリシーによって指定される指標に従ってデータ引数を識別する。
いずれの場合も、分析モジュール130は、コードセグメントでソースコードを解析して、データ引数を識別し、そこからデータ特性を収集する。一実施形態において、データ特性は、制御フローグラフの様々なポイントでのデータ引数の状態、およびデータ引数に関連する少なくとも1つの関係(例えば、データ引数が渡される関数)を示す。さらに、状態は、データ引数との許容される相互作用を識別するために、設定/開始、使用、および変更の少なくとも1つを含むことができる、アクセスまたは使用のタイプを示す。
様々な実施形態において、分析モジュール130は、910での検出されたコードセグメント/変更と関連する、ソースコードの影響される部分を分析し、一方、さらなる態様では、分析モジュール130は、変更に応答して、ソースコード全体を再分析して制御フロー特性を識別する。概して、実行されるアプローチは、ソースコードの全サイズ、変更のサイズ、及び分析を実行するために利用可能なリソースに関連する。例えば、一実施形態において、分析モジュール130は、示された選好に従って制御フロー特性を決定するために、部分的または完全なレビューを選択的に行う。分析モジュール130によって実行されるアプローチがどちらであっても、データ特性は、グラフ170に表されるプログラムのデータフローに関する情報を提供する。
追加的に、分析モジュール130は、一実施形態において、データ特性をグラフポリシーと比較することによって、ソースコードのどのステートメントが脆弱性を含むかをさらに識別する。一実施形態では、グラフポリシーは、プログラム内で処理されるデータの特定の態様に関連するセキュリティの脆弱性を示す条件を定義する。従って、脆弱性に関する追加情報も、その後、グラフ170と統合されて、ソースコードの様々な部分の特性に関するさらなる指標を提供するように、グラフ170内に含まれるデータ特性内に含めることができる。
930で、グラフモジュール140は、識別されたデータ引数のデータ特性を制御フローグラフ170に格納する。一実施形態では、グラフモジュール140は、データ引数に関する情報をグラフ170のノードに統合するために、920で識別されたデータ特性を使用する。ブロック920と同様に、ブロック930で説明されている機能は、方法800と並行して、特に、方法800のブロック830とともに説明されている機能と並行して発生し得る。
このように、グラフモジュール140は、データ引数と関連する状態がデータ引数への様々なアクセスを示すグラフ170の関連ノードに、検出されたコードセグメントに対応するデータ特性を格納することによって、検出されたデータ引数に従って制御フローグラフ170を更新する。すなわち、例えば、グラフ170のノードは、与えられたデータ引数のデータ特性の少なくとも一部がグラフ170のそれぞれのノード内に格納されるように、データ特性で注釈付け/タグ付けされる。かくして、特定のコードブロックを表し、データアクセスに従ってデータ引数に関連する、または関数間でデータを渡すノードに対して、グラフモジュール140は、アクセスの関係および特性を示すために、関連する注釈をノードに追加する。
さらに、グラフモジュール140はまた、前述のように、追加の特性でグラフ170を更新する。すなわち、グラフモジュール140は、特定のデータ引数の脆弱性についてタグ付けするか、そうでなければグラフ170に注釈を提供して、例えば、注目される非制御データ引数の計装を確実にする。従って、グラフモジュール140は、グラフ170を積極的に開発するだけでなく、グラフモジュール140は、脆弱性の軽減を容易にするために、対応するノードのデータ構造内のコードセグメントに関する追加情報も提供する。
940で、グラフモジュール140は、電子的出力として制御フローグラフ170を提供する。以前に説明したように、制御フローグラフ170は、実行の様々なステップでのデータ引数の使用に関する特徴付けとともに、プログラムの実行がどのように進行するかについての表現を提供する。このように、グラフ170は、一般的に他では識別できないソースコードに関する見識を提供する。このため、様々なシステムは、グラフ170を活用して、ソースコードを操作し、及び/又はさらなる機能を提供することができる。
940で制御フローグラフ170を提供する1つの態様として、グラフモジュール140は、非制御データ引数のデータ完全性及び制御データ引数の制御フロー完全性の両方を確保するために、制御フローグラフ170内で識別されたソースコードのセグメントが計装され得るように、グラフ170を計装モジュール150に電子的に通信する。
図10は、プログラムのソースコードを自動的に計測することに関連する方法1000を示している。図8、9に関連して説明したのと同様の方法で、方法1000が、図1のデータ制御システム100の観点から説明される。方法1000は、データ制御システム100と組み合わせて説明されるが、方法1000は、データ制御システム100内で実施されることに限定されず、むしろ、方法1000を実施することができるシステムの一例であることを理解されたい。
最初の注意点として、方法1000は、ブロック1010、1020、1030を含むものとして示され、これらは、概して、並行に実行されるブロック810、820、830、および910、920、および930と相関すると理解されるべきである。例えば、ブロック1010は、並行に実行されるブロック810および910に関連する機能を表す。さらに、ブロック1020は、並列に実行されるブロック820および920を表し、ブロック1030は、並列に実行されるブロック830および930を表す。かくして、記載されたブロックの説明は繰り返されないが、代わりに、方法800および方法900の両方からの態様の並列実行を含むと理解されるべきである。さらに、グラフ170は、通常、機能の電子的出力として、ブロック1010~1030からブロック1040で方法1000に提供されることを理解されたい。
1040で、計装モジュール150は、ソースコードを計装する要求を監視および検出する。様々な実施形態では、要求は異なる形式をとることができる。例えば、1つのアプローチでは、要求は、グラフ170も変更されるソースコードへの変更と同時に行われる。すなわち、グラフ170がソースコードへの変更に従って更新されるとき、計装モジュール150も、その変更に対してリアルタイムでソースコードを計装するように機能する。
あるいは、計装要求は、ソースコードが完了すると、またはさらなる態様では、ソースコードがプログラムにコンパイルされるときに、システム100によって生成される。従って、ソースコードを計装する要求は、一実施形態において、IDE内で生成されたソースコードをコンパイルする要求に応答してシステム100によって生成され、コンパイルの前に処理される。このように、計装モジュール150は、ソースコードが変更されるとき、またはソースコードがコンパイルされる準備ができたときに、リアルタイムで機能して、ソースコードを計装する。
1050で、計装モジュール150は、計装されるべきソースコードのコードセグメントを識別する。一実施形態では、計装モジュール150は、ソースコードのセグメントに配置された既存のタグに従って、コードセグメントに関連付けられたグラフ170内のラベル付けされた特性に従って、グラフ170に表される識別された制御フローに従って、グラフ170内の識別された非制御データ引数に従って、及び/又は、計装ポリシー180によって定義されるさらなるメトリクス/特性に従って、コードセグメントを識別する。概して、計装モジュール150は、実行中のプログラムのプログラムフローの完全性及びデータの完全性を保証するためにソースコードを計装している。従って、計装モジュール150は、機能間で制御を直接的または間接的に転送し、プログラムフローアドレスを調整し、データ引数を操作し、および他のそのようなコードセグメントに関与する、コードセグメントを識別する。概して、注目されるコードセグメントは、グラフ170内のノードおよび有向エッジ、または有向エッジによって具体化された転送に関連する条件に関連付けられる。
従って、さらなる態様では、計装モジュール150は、制御フローグラフ170に従ってソースコードを分析する。計装モジュール150はまた、1つ以上の実施形態において、コードセグメントが計装を含むために実装される計装ポリシー180を満たすかどうかを決定するために、個々のコードセグメントを分析することができる。つまり、機能内にいつ計装を含めるべきかを決定するために、重要度レベル、セキュリティレベルなどに応じた閾値のような様々な条件が、識別され得る。このようにして、プログラムのパフォーマンスとセキュリティを考慮し、必要とされないかもしれない場合に不必要に計装を含めることを避けるように、計装をインテリジェントな方法で含めることができる。
いずれの場合も、ソースコード内のすべてのコードセグメント/機能が計装される必要はないので、1050でのチェックは、コードセグメントが計装されるべきかを評価することを含むことができる。すなわち、例えば、計装モジュール150は、新たに追加/調整されたコードセグメントの特性を評価して、コードセグメントが計装を含む必要があるかを決定する。計装モジュール150が、コードセグメントは計装を含む必要があると決定すると、計装モジュール150は、ブロック1060で説明するように計装の統合を継続する。そうでなければ、変更されたセグメントのみが考慮される場合、または他のセグメント全体は考慮されない場合、計装モジュール150は終了し得る。
1060で、計装モジュール150は、計装をソースコード内に統合する。以前に述べたように、一実施形態では、計装モジュール150は、プログラムのセキュリティを改善する、プログラム内のランタイムチェックを強化するために、制御フローグラフ170の制御データ引数及び非制御データ引数の両方に従った計装を含める。つまり、ソースコードに追加される計装は、プログラムがグラフ170によって表されるパスの範囲外に導かれ得ないことを保証し、また、データ(すなわち、変数)が、ソースコードから識別される許容される使用/変更の範囲外で悪意を持って変更され得ないことを保証する。
さらに、計装を統合するプロセスは、一実施形態において、計装モジュール150が、ソースコードに従って、定義された計装のテンプレートを修正することによって、識別されたセグメントに応じた計装を自動的に追加することを含む。以前に説明したように、計装モジュール150は、計装が統合されているコードセグメントに適合するようにテンプレートの変数を調整する。従って、計装モジュール150は、含まれる計装をカスタマイズして、特定の機能を達成すると同時に、例えば、事前に承認され、一般に正しく機能することが知られている計装も使用する。このようにして、計装モジュール150は、グラフ170を使用して、計装を介して実施されるデータランタイムチェックおよび制御ランタイムチェックの両方を通じて、結果として生じるプログラムを究極的に改善する追加の機能を提供する。このように、結果として得られるプログラムは、悪意のある攻撃からプログラムのセキュリティを保証するより優れた計装によって改善される。
さらに、図1のデータ制御システム100は、個別の集積回路及び/又はチップを用いて様々な配置で構成できることを理解されたい。そのような実施形態では、図1の分析モジュール130は、別個の集積回路として具現化される。さらに、グラフモジュール140は、個々の集積回路上に具現化される。さらに、計装モジュール150は、別個の集積回路上に具現化される。回路は、個別の回路間で信号の通信を提供するために、接続経路を介して接続される。もちろん、別個の集積回路が説明されるが、様々な実施形態では、回路は、共通の集積回路基板に統合されてもよい。さらに、集積回路は、より少ない集積回路に組み合わせられるか、またはより多くの集積回路に分割されてもよい。別の実施形態では、モジュール130、140、150は、分離された特定用途向け集積回路に組み合わされてもよい。さらなる実施形態では、モジュール130、140、150に関連する機能の一部は、プロセッサによって実行可能なファームウェアとして具現化され、非一時的メモリに格納されてもよい。さらに別の実施形態では、モジュール130、140、150は、プロセッサ110のハードウェアコンポーネントとして統合される。
別の実施形態では、説明された方法及び/又はそれらの均等物は、コンピュータ実行可能命令で実現することができる。従って、一実施形態では、非一時的なコンピュータ可読媒体が、マシン(例えば、プロセッサ、コンピュータなど)によって実行されるとき、マシン(及び/又は関連するコンポーネント)にその方法を実行させる、格納されたコンピュータ実行可能命令を有して構成される。
説明を簡単にするために、図に示された方法は一連のブロックとして示され、説明されているが、いくつかのブロックは、図示及び説明されたものから異なる順序で、及び/又は他のブロックと同時に発生し得るため、方法はブロックの順序によって限定されないことを理解されたい。さらに、図示されたすべてのブロックよりも少ないブロックを使用して、例示の方法を実行してもよい。ブロックは組み合わされ、または複数のコンポーネントに分離されてもよい。さらに、追加及び/又は代替の方法は、図示されていない追加のブロックを使用することができる。
データ制御システム100は、1つ以上のプロセッサ110を含むことができる。1つ以上の構成では、プロセッサ110は、データ制御システム100のメインプロセッサであり得る。例えば、プロセッサ110は、電子制御ユニット(ECU)であり得る。データ制御システム100は、1つ以上のタイプのデータを格納するための1つ以上のデータストアを含むことができる。データストアは、揮発性及び/又は不揮発性メモリを含むことができる。適切なデータストアの例には、RAM(ランダムアクセスメモリ)、フラッシュメモリ、ROM(リードオンリーメモリ)、PROM(プログラム可能リードオンリーメモリ)、EPROM(消去可能プログラム可能リードオンリーメモリ)、EEPROM(電気的消去可能プログラム可能リードオンリーメモリ)、レジスタ、磁気ディスク、光ディスク、ハードドライブ、分散メモリ、クラウドベースのメモリ、開示されたデータを格納するのに適した他の記憶媒体、またはそれらの任意の組み合わせが含まれる。データストアは、プロセッサ110の構成要素であり得るか、またはデータストアは、プロセッサによる使用のためにプロセッサ110に動作可能に接続され得る。この説明全体で使用される「動作可能に接続される」という用語は、直接的な接続、又は直接の物理的接触のない接続を含む、間接的な接続を含み得る。
詳細な実施形態が本明細書に開示される。しかし、開示された実施形態は例としてのみ意図されていることを理解されたい。従って、本明細書で開示される特定の構造および機能の詳細は、限定として解釈されるべきではなく、単に特許請求の範囲の基礎として、および、実質的に任意の適切な詳細構造において本明細書の態様を様々に採用することを当業者に教示するための代表的な基礎として解釈されるべきである。さらに、本明細書で使用される用語および語句は、限定することを意図するものではなく、可能な実施例の理解可能な説明を提供することを意図している。種々の実施形態が図1から図10に示されているが、実施形態は、図示された構造または用途に限定されない。
図中のフローチャートおよびブロック図は、様々な実施形態によるシステム、方法、およびコンピュータプログラム製品の可能な実施例のアーキテクチャ、機能、および動作を示している。これに関して、フローチャートまたはブロック図の各ブロックは、特定の論理機能を実行するための1つ以上の実行可能な命令を含むモジュール、セグメント、またはコードの一部を表すことができる。いくつかの代替の実施例では、ブロックに示された機能が、図に記載されている順序以外で発生する可能性があることにも注意されたい。例えば、連続して示された2つのブロックが、実際には、実質的に同時に実行されても良く、またはそれらのブロックが、関連する機能に応じて、ときには逆の順序で実行されても良い。
上述したシステム、コンポーネント、及び/又はプロセスは、ハードウェア又はハードウェアとソフトウェアの組み合わせで実現でき、1つの処理システムにおいて中央集権方式で、または相互接続された複数の処理システムに異なる要素が分散された分散方式で実現することができる。本明細書に記載の方法を実行するように適合されたあらゆる種類の処理システムまたは別の装置が適している。ハードウェアおよびソフトウェアの組み合わせは、ロードされ、実行されたときに、本明細書に記載の方法を実行するように処理システムを制御するコンピュータで使用可能なプログラムコードを備えた処理システムであり得る。システム、コンポーネント、及び/又はプロセスは、本明細書に記載された方法およびプロセスを実行するためにマシンによって実行可能な命令のプログラムを目に見える方法で具体化した、マシンによって読み取り可能な、コンピュータプログラム製品または他のデータプログラムストレージデバイスなどのコンピュータ読み取り可能なストレージに埋め込むこともできる。これらの要素は、本明細書で説明した方法の実行を可能にするすべての特徴を備えた、処理システムにロードされたときにこれらの方法を実行することができるアプリケーション製品に組み込むこともできる。
さらに、本明細書で説明された構成は、例えば記憶されるなどして、具体化されたコンピュータ可読プログラムコードを有する1つ以上のコンピュータ可読媒体に具現化されるコンピュータプログラム製品の形をとることができる。1つ以上のコンピュータ可読媒体
の任意の組み合わせが利用されてもよい。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であり得る。「コンピュータ可読記憶媒体」という語句は、非一時的な記憶媒体を意味する。コンピュータ可読媒体は、限定されるものではないが、不揮発性媒体および揮発性媒体を含む、形態をとることができる。不揮発性媒体には、たとえば、光ディスク、磁気ディスクなどが含まれる。揮発性媒体には、例えば、半導体メモリ、ダイナミックメモリなどが含まれる。そのようなコンピュータ可読媒体の例には、限定されるものではないが、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、他の磁気媒体、ASIC、CD、他の光学媒体、RAM、ROM、メモリチップまたはカード、メモリスティック、および、コンピュータ、プロセッサ、または他の電子デバイスが読み取ることが可能な他の媒体が含まれる。この明細書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによって、またはそれに関連して使用するためのプログラムを含む、または格納できる任意の有形の媒体であってもよい。
以下は、本明細書で使用される選択された用語の定義を含む。定義には、用語の範囲内にあり、様々な実施例に使用できるコンポーネントの様々な例、および/または形式が含まれる。これらの例は限定することを意図していない。用語の単数形と複数形の両方が定義内に含まれる場合がある。
「1つの実施形態」、「一実施形態」、「1つの例」、「一例」などへの言及は、そのように記載された実施形態または例が、特定の特徴、構造、特性、特質、要素、または限定を含むかもしれないが、すべての実施形態または例が、必ずしも、その特定の特徴、構造、特性、特質、要素、または限定を含むわけではない。さらに、「1つの実施形態では」という語句の繰り返しの使用は、同じ実施形態を指す場合もあるが、必ずしもそうとは限らない。
本明細書で使用される「モジュール」には、コンピュータまたは電気ハードウェアコンポーネント、ファームウェア、命令を保存する非一時的なコンピュータ可読媒体、及び/又は、機能またはアクションを実行するように構成された、及び/又は、別のロジック、方法、及び/又はシステムから機能またはアクションを引き起こすように構成された、これらのコンポーネントの組み合わせが含まれる。モジュールには、アルゴリズムによって制御されるマイクロプロセッサ、ディスクリートロジック回路(ASICなど)、アナログ回路、デジタル回路、プログラムされたロジックデバイス、実行時にアルゴリズムを実行する命令を含むメモリデバイスなどが含まれてもよい。モジュールは、1つ以上の実施形態において、1つ以上のCMOSゲート、ゲートの組み合わせ、または他の回路部品を含む。複数のモジュールが説明されている場合、1つ以上の実施形態は、複数のモジュールを1つの物理的なモジュールコンポーネントに組み込むことを含む。同様に、単一のモジュールが説明されている場合、1つ以上の実施形態は、単一のモジュールを複数の物理的コンポーネントに分散してもよい。
さらに、本明細書で使用されるモジュールには、特定のタスクを実行したり、特定のデータタイプを実現したりするルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。さらなる態様において、メモリは一般に、言及されたモジュールを格納する。モジュールに関連付けられたメモリは、プロセッサ内に埋め込まれたバッファまたはキャッシュ、RAM、ROM、フラッシュメモリ、または別の適切な電子記憶媒体であってもよい。さらに別の態様では、本開示によって想定されるモジュールは、特定用途向け集積回路(ASIC)、システムオンチップ(SoC)のハードウェアコンポーネント、プログラマブルロジックアレイ(PLA)、または開示された機能を実行するための定義された設定セット(たとえば、命令)が埋め込まれた別の適切なハードウェアコンポーネントとして実現される。
1つ以上の構成において、本明細書に記載のモジュールの1つ以上は、人工または計算知能要素、例えばニューラルネットワーク、ファジー論理または他の機械学習アルゴリズムを含むことができる。さらに、1つ以上の構成において、モジュールの1つ以上は、本明細書で説明する複数のモジュールに分散させることができる。1つ以上の構成では、本明細書に記載のモジュールの2つ以上が、単一のモジュールに組み合わせることができる
コンピュータ可読媒体に具現化されるプログラムコードは、限定されるものではないが、無線、有線、光ファイバー、ケーブル、RFなど、またはこれらの任意の適切な組み合わせを含む、任意の適切な媒体を使用して送信されてもよい。本構成の態様の動作を実行するためのコンピュータプログラムコードは、Java(登録商標)、Smalltalk、C ++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで記述されてもよい。プログラムコードは、スタンドアロンソフトウェアパッケージとして、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、あるいは、一部をユーザのコンピュータ上でかつ一部を遠隔コンピュータ上で、もしくは、完全に遠隔コンピュータまたはサーバ上で実行されてもよい。後者のシナリオでは、遠隔コンピュータは、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよいし、または、その接続は、外部コンピュータになされてもよい(例えば、インターネットサービスプロバイダを使用したインターネット経由)。
本明細書で使用される「a」および「an」という用語は、1つではなく、1つ以上として定義される。本明細書で使用される「複数」という用語は、2つではなく、2つ以上として定義される。本明細書で使用される「別の」という用語は、少なくとも2番目またはそれ以上として定義される。本明細書で使用される「含む」および/または「有する」という用語は、包含する(すなわち、オープン言語)と定義される。本明細書で使用される「...および...の少なくとも1つ」というフレーズは、関連する列挙されたアイテムの1つ以上の任意のおよび全ての可能な組み合わせを指し、包含する。例として、「A、B、およびCの少なくとも1つ」というフレーズは、Aのみ、Bのみ、Cのみ、またはそれらの任意の組み合わせ(たとえば、AB、AC、BCまたはABC)を含む。
本明細書の態様は、その主旨または本質的な特質から逸脱することなく、他の形態で具現化することができる。したがって、本明細書の範囲を示すものとして、前述の明細書ではなく、以下の特許請求の範囲を参照すべきである。

Claims (20)

  1. プログラム内のデータ引数を検証するためのデータ制御システムであって、
    1つ以上のプロセッサ(110)と、
    1つ以上のプロセッサに通信可能に結合され、1つ以上のプロセッサによって実行されるとき、1つ以上のプロセッサに、電子的要求に応答して、プログラムのソースコードのコードセグメント内のデータ引数を識別させる命令を含み、データ引数は、プログラムの1つ以上の関数間で渡される非制御データである分析モジュール(130)と、1つ以上のプロセッサによって実行されるとき、1つ以上のプロセッサに、ソースコードから導出される制御フローグラフ内のデータ引数に関するデータ特性を格納させる命令を含み、制御フローグラフは、プログラム内の実行パスを表し、データ特性は、データ引数の状態と、データ引数に関連付けられた少なくとも1つの関係を示すグラフモジュール(140)と、を格納するメモリ(120)と、を備え、
    グラフモジュールには、ソースコードの調整を容易にするため、電子的出力として制御フローグラフを提供するための命令が含まれるデータ制御システム。
  2. グラフモジュールは、データ引数の識別と並行して、ソースコードの制御フロー特性に従って制御フローグラフを生成する命令をさらに含み、
    分析モジュールは、コードセグメントがソースコードに追加されたことに基づく電子的要求を受信することを含む、電子的要求に応答してデータ引数を識別する命令を含み、電子的要求は、コードセグメントのソースコードへの追加の検出に応答して生成される、請求項1のデータ制御システム。
  3. 制御フローグラフは、ソースコードのブロックを表すノードと、ブロック間の遷移を表すノード間の有向エッジとから構成され、
    グラフモジュールは、データ引数が、アクセスされる又は関数間で渡される制御フローグラフ内の関連ノードにデータ特性を統合する命令を含んだ、制御フローグラフのデータ特性を格納する命令を含む、請求項1のデータ制御システム。
  4. 分析モジュールは、データ引数との許容される相互作用を識別するために、データ引数が設定される、使用される、及び変更されるの中の少なくとも1つである別々のポイントで、制御フローグラフにおけるデータ引数の状態を決定する命令を含んだ、データ特性を識別する命令を含み、データ引数はソースコード内で定義された変数である、請求項1乃至3のいずれか1項のデータ制御システム。
  5. グラフモジュールは、コードセグメントがソースコードに追加されたことに基づき、コードセグメントに対応する制御フロー特性を制御フローグラフに追加することによって、制御フローグラフを漸増的に更新する命令を含んだ、制御フローグラフを生成する命令を含む、請求項2のデータ制御システム。
  6. 分析モジュールは、データフロー、データ公開、及び、制御データと非制御データのプログラムフローと関連付けられたソースコード内の脆弱性を示す条件を定義するグラフポリシーに従って、ソースコードの制御フロー特性とデータ特性とを同時に識別する命令を含む、請求項5のデータ制御システム。
  7. データ引数のためのデータランタイムチェックによってデータフローの完全性を保証し、プログラムの制御フロー特性のための制御ランタイムチェックによってプログラムフローの完全性を保証するために、1つ以上のプロセッサによって実行されるとき、1つ以上のプロセッサに、プログラムを計装する要求に応答して、制御フローグラフに従ってソースコード内に計装を統合させる命令を含む計装モジュール(150)をさらに備え、
    データランタイムチェックは、識別された許容される相互作用を許可する一方で、許容されない相互作用を拒否するように、データ引数との相互作用を監視する、請求項1乃至6のいずれか1項のデータ制御システム。
  8. 計装モジュールは、i)制御フローグラフにおいて識別された制御引数およびデータ引数に従って、計装されるべきソースコードのセグメントを識別する命令、及びii)制御フローグラフに従ってデータランタイムチェック及び制御ランタイムチェックを提供する定義された計装のテンプレートを修正することによって、識別されたセグメントに応じた計装を自動的に追加する命令を含んだ、ソースコード内に計装を統合する命令を含む、請求項7のデータ制御システム。
  9. プログラム内のデータ引数を検証するための命令を格納するものであって、
    その命令は、1つ以上のプロセッサ(110)によって実行されたとき、1つ以上のプロセッサに、
    電子的要求に応答して、プログラムのソースコードのコードセグメント内のデータ引数を識別させ、データ引数は、プログラムの1つ以上の関数間で渡される非制御データであり、
    ソースコードから導出される制御フローグラフ内のデータ引数に関するデータ特性を格納させ、制御フローグラフは、プログラム内の実行パスを表し、データ特性は、データ引数の状態と、データ引数に関連付けられた少なくとも1つの関係を示し、そして、
    ソースコードの調整を容易にするため、電子的出力として制御フローグラフを提供させる、非一時的なコンピュータ可読媒体。
  10. 命令は、データ引数の識別と並行して、ソースコードの制御フロー特性に従って制御フローグラフを生成する命令を含み、
    電子的要求に応答してデータ引数を識別する命令は、コードセグメントがソースコードに追加されたことに基づく電子的要求を受信する命令を含み、電子的要求は、コードセグメントのソースコードへの追加の検出に応答して生成される、請求項9の非一時的なコンピュータ可読媒体。
  11. 制御フローグラフは、ソースコードのブロックを表すノードと、ブロック間の遷移を表すノード間の有向エッジとから構成され、
    制御フローグラフのデータ特性を格納する命令は、データ引数が、アクセスされる又は関数間で渡される制御フローグラフ内の関連ノードにデータ特性を統合する命令を含む、請求項9又は10の非一時的なコンピュータ可読媒体。
  12. データ特性を識別する命令は、データ引数との許容される相互作用を識別するために、データ引数が設定される、使用される、及び変更されるの中の少なくとも1つである別々のポイントで、制御フローグラフにおけるデータ引数の状態を決定する命令を含み、データ引数はソースコード内で定義された変数である、請求項9乃至11のいずれか1項の非一時的なコンピュータ可読媒体。
  13. データ引数のためのデータランタイムチェックによってデータフローの完全性を保証し、プログラムの制御フロー特性のための制御ランタイムチェックによってプログラムフローの完全性を保証するために、プログラムを計装する要求に応答して、制御フローグラフに従ってソースコード内に計装を統合する命令をさらに備え、
    データランタイムチェックは、識別された許容される相互作用を許可する一方で、許容されない相互作用を拒否するように、データ引数との相互作用を監視する、請求項9乃至12のいずれか1項の非一時的なコンピュータ可読媒体。
  14. プログラム内のデータ引数を検証する方法であって、
    電子的要求に応答して、プログラムのソースコードのコードセグメント内のデータ引数を識別すること、
    データ引数は、プログラムの1つ以上の関数間で渡される非制御データであり、
    ソースコードから導出される制御フローグラフ内のデータ引数に関するデータ特性を格納すること、
    制御フローグラフは、プログラム内の実行パスを表し、データ特性は、データ引数の状態と、データ引数に関連付けられた少なくとも1つの関係を示し、及び
    ソースコードの調整を容易にするため、電子的出力として制御フローグラフを提供すること、を備える方法。
  15. データ引数の識別と並行して、ソースコードの制御フロー特性に従って制御フローグラフを生成することをさらに備え、
    電子的要求に応答してデータ引数を識別することは、コードセグメントがソースコードに追加されたことに基づく電子的要求を受信することを含み、電子的要求は、コードセグメントのソースコードへの追加の検出に応答して生成される、請求項14の方法。
  16. 制御フローグラフは、ソースコードのブロックを表すノードと、ブロック間の遷移を表すノード間の有向エッジとから構成され、
    制御フローグラフのデータ特性を格納することは、データ引数が、アクセスされる又は関数間で渡される制御フローグラフ内の関連ノードにデータ特性を統合することを含む、請求項14又は15の方法。
  17. データ特性を識別することは、データ引数との許容される相互作用を識別するために、データ引数が設定される、使用される、及び変更されるの中の少なくとも1つである別々のポイントで、制御フローグラフにおけるデータ引数の状態を決定することを含み、データ引数はソースコード内で定義された変数である、請求項14乃至16のいずれか1項の方法。
  18. 制御フローグラフを生成することは、コードセグメントに対応する制御フロー特性を制御フローグラフに追加することによって、制御フローグラフを漸増的に更新することを含み、
    制御フローグラフを生成することは、データフロー、データ公開、及び、制御データと非制御データのプログラムフローと関連付けられたソースコード内の脆弱性を示す条件を定義するグラフポリシーに従って、ソースコードの制御フロー特性とデータ特性とを同時に識別することを含む、請求項15の方法。
  19. データ引数のためのデータランタイムチェックによってデータフローの完全性を保証し、プログラムの制御フロー特性のための制御ランタイムチェックによってプログラムフローの完全性を保証するために、プログラムを計装する要求に応答して、制御フローグラフに従ってソースコード内に計装を統合することをさらに備え、
    データランタイムチェックは、識別された許容される相互作用を許可する一方で、許容されない相互作用を拒否するように、データ引数との相互作用を監視する、請求項14乃至18のいずれか1項の方法。
  20. ソースコード内に計装を統合することは、i)制御フローグラフにおいて識別された制御引数およびデータ引数に従って、計装されるべきソースコードのセグメントを識別すること、及びii)制御フローグラフに従ってデータランタイムチェック及び制御ランタイムチェックを提供する定義された計装のテンプレートを修正することによって、識別されたセグメントに応じた計装を自動的に追加することを含む、請求項19の方法。
JP2021521323A 2018-10-18 2019-10-18 データ引数を動的に識別し、ソースコードを計装するためのシステムと方法 Active JP7201078B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/164,132 2018-10-18
US16/164,132 US10657025B2 (en) 2018-10-18 2018-10-18 Systems and methods for dynamically identifying data arguments and instrumenting source code
PCT/JP2019/041074 WO2020080518A1 (en) 2018-10-18 2019-10-18 Systems and methods for dynamically identifying data arguments and instrumenting source code

Publications (2)

Publication Number Publication Date
JP2022505340A true JP2022505340A (ja) 2022-01-14
JP7201078B2 JP7201078B2 (ja) 2023-01-10

Family

ID=68426777

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021521323A Active JP7201078B2 (ja) 2018-10-18 2019-10-18 データ引数を動的に識別し、ソースコードを計装するためのシステムと方法

Country Status (3)

Country Link
US (1) US10657025B2 (ja)
JP (1) JP7201078B2 (ja)
WO (1) WO2020080518A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7450681B1 (ja) 2022-09-27 2024-03-15 楽天グループ株式会社 情報処理装置、情報処理方法およびプログラム

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11010495B1 (en) * 2018-10-23 2021-05-18 Architecture Technology Corporation Systems and methods for runtime enforcement of data flow integrity
US10908883B2 (en) * 2018-11-13 2021-02-02 Adobe Inc. Voice interaction development tool
US10847156B2 (en) 2018-11-28 2020-11-24 Adobe Inc. Assembled voice interaction
US11308214B2 (en) * 2018-12-28 2022-04-19 Intel Corporation Binary translation for hardened software security
US11017771B2 (en) 2019-01-18 2021-05-25 Adobe Inc. Voice command matching during testing of voice-assisted application prototypes for languages with non-phonetic alphabets
US10964322B2 (en) 2019-01-23 2021-03-30 Adobe Inc. Voice interaction tool for voice-assisted application prototypes
US11269762B2 (en) * 2019-03-25 2022-03-08 Aurora Labs Ltd. Using line-of-code behavior and relation models to anticipate impact of hardware changes
US11139983B2 (en) * 2019-07-11 2021-10-05 Cyber Armor Ltd. System and method of verifying runtime integrity
US11531763B1 (en) * 2019-12-10 2022-12-20 Amazon Technologies, Inc. Automated code generation using analysis of design diagrams
US11440190B1 (en) * 2020-02-26 2022-09-13 Trend Micro Incorporated Detecting unsecure data flow in automation task programs
US11928422B1 (en) * 2023-01-24 2024-03-12 Arista Networks, Inc. Explanatory configuration function annotation
CN117195205B (zh) * 2023-11-06 2024-01-26 西安热工研究院有限公司 可信dcs上位机程序动态验证方法、系统、设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015072505A (ja) * 2013-10-01 2015-04-16 トヨタ自動車株式会社 ソフトウェア検証装置
JP2017004282A (ja) * 2015-06-11 2017-01-05 日本電気通信システム株式会社 プログラム表示装置、プログラム表示システム、プログラム表示方法、及びプログラム表示プログラム
US20170316212A1 (en) * 2012-09-27 2017-11-02 International Business Machines Corporation Customizing a security report using static analysis
JP2018120341A (ja) * 2017-01-24 2018-08-02 株式会社日立製作所 業務仕様分析支援装置、業務仕様分析支援方法、及びプログラム

Family Cites Families (13)

* 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
KR101150653B1 (ko) 2004-06-04 2012-05-29 포티파이 소프트웨어 엘엘씨 보안 소프트웨어 개발, 테스팅 및 모니터링 장치 및 방법
US20090328185A1 (en) 2004-11-04 2009-12-31 Eric Van Den Berg Detecting exploit code in network flows
US7577992B2 (en) 2005-01-14 2009-08-18 Microsoft Corporation Software security based on control flow integrity
CA2626993A1 (en) * 2005-10-25 2007-05-03 The Trustees Of Columbia University In The City Of New York Methods, media and systems for detecting anomalous program executions
US8510827B1 (en) 2006-05-18 2013-08-13 Vmware, Inc. Taint tracking mechanism for computer security
EP1870829B1 (en) * 2006-06-23 2014-12-03 Microsoft Corporation Securing software by enforcing data flow integrity
US8135994B2 (en) * 2006-10-30 2012-03-13 The Trustees Of Columbia University In The City Of New York Methods, media, and systems for detecting an anomalous sequence of function calls
US8613080B2 (en) 2007-02-16 2013-12-17 Veracode, Inc. Assessment and analysis of software security flaws in virtual machines
US9021589B2 (en) * 2012-06-05 2015-04-28 Los Alamos National Security, Llc Integrating multiple data sources for malware classification
US9390260B2 (en) * 2014-06-09 2016-07-12 Lehigh University Methods for enforcing control flow of a computer program
EP2958044B1 (en) * 2014-06-20 2019-09-18 Secure-IC SAS A computer implemented method and a system for controlling dynamically the execution of a code
US9729569B2 (en) 2015-04-21 2017-08-08 International Business Machines Corporation Solution-centric reporting of security warnings

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170316212A1 (en) * 2012-09-27 2017-11-02 International Business Machines Corporation Customizing a security report using static analysis
JP2015072505A (ja) * 2013-10-01 2015-04-16 トヨタ自動車株式会社 ソフトウェア検証装置
JP2017004282A (ja) * 2015-06-11 2017-01-05 日本電気通信システム株式会社 プログラム表示装置、プログラム表示システム、プログラム表示方法、及びプログラム表示プログラム
JP2018120341A (ja) * 2017-01-24 2018-08-02 株式会社日立製作所 業務仕様分析支援装置、業務仕様分析支援方法、及びプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7450681B1 (ja) 2022-09-27 2024-03-15 楽天グループ株式会社 情報処理装置、情報処理方法およびプログラム

Also Published As

Publication number Publication date
US10657025B2 (en) 2020-05-19
WO2020080518A1 (en) 2020-04-23
US20200125475A1 (en) 2020-04-23
JP7201078B2 (ja) 2023-01-10

Similar Documents

Publication Publication Date Title
JP7201078B2 (ja) データ引数を動的に識別し、ソースコードを計装するためのシステムと方法
JP7164017B2 (ja) フォールトツリー分析を使用して機能安全のため制御フローグラフを最適化するシステム及び方法
JP7218793B2 (ja) プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法
US20160357519A1 (en) Natural Language Engine for Coding and Debugging
US20120304153A1 (en) Context-sensitive analysis framework using value flows
US20110271258A1 (en) Software Development Tool
US20110271250A1 (en) Software Development Tool
CN109101237A (zh) 代码的加密编译方法及装置
JP7047969B2 (ja) 障害保護のための並列実行および関連プロセスの比較のためのシステムおよび方法
KR102118236B1 (ko) 컨트랙트에 대한 운영 체제 지원 기법
US20210405980A1 (en) Long method autofix engine
US20210004470A1 (en) Automatic Generation Of Patches For Security Violations
US11868465B2 (en) Binary image stack cookie protection
Lawall et al. WYSIWIB: exploiting fine‐grained program structure in a scriptable API‐usage protocol‐finding process
US7458063B2 (en) Method and apparatus for supporting functionality documentation
KR102341137B1 (ko) 중간언어 기반 코드 변환 방법 및 이를 포함하는 전자 장치
Kuter et al. HACKAR: helpful advice for code knowledge and attack resilience
Yan et al. Conservative signed/unsigned type inference for binaries using minimum cut
Shi et al. Automatic Repair for Network Programs
KR20190084468A (ko) 함수 정보 요약 장치 및 방법
EP2329375A1 (en) Method of analyzing a computer program
Panda et al. Hierarchical regression test case selection using slicing
CN116974946A (zh) 一种源代码分析方法、装置、电子设备及存储介质
Ponomarev et al. Source Code Analysis: Current and Future Trends & Challenges
Tun et al. Recovering Problem Structures from Execution Traces

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210416

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220621

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220811

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: 20221122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20221205

R151 Written notification of patent or utility model registration

Ref document number: 7201078

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151