IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

特表2024-545197ソフトウェア内の間接関数呼び出しターゲット識別
<>
  • 特表-ソフトウェア内の間接関数呼び出しターゲット識別 図1
  • 特表-ソフトウェア内の間接関数呼び出しターゲット識別 図2
  • 特表-ソフトウェア内の間接関数呼び出しターゲット識別 図3
  • 特表-ソフトウェア内の間接関数呼び出しターゲット識別 図4
  • 特表-ソフトウェア内の間接関数呼び出しターゲット識別 図5
  • 特表-ソフトウェア内の間接関数呼び出しターゲット識別 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-05
(54)【発明の名称】ソフトウェア内の間接関数呼び出しターゲット識別
(51)【国際特許分類】
   G06F 8/72 20180101AFI20241128BHJP
   G06N 3/04 20230101ALI20241128BHJP
   G06N 3/09 20230101ALI20241128BHJP
   G06F 18/2321 20230101ALI20241128BHJP
   G06F 11/36 20060101ALI20241128BHJP
【FI】
G06F8/72
G06N3/04 100
G06N3/09
G06F18/2321
G06F11/36 164
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024534772
(86)(22)【出願日】2022-11-03
(85)【翻訳文提出日】2024-06-11
(86)【国際出願番号】 CN2022129504
(87)【国際公開番号】W WO2023109348
(87)【国際公開日】2023-06-22
(31)【優先権主張番号】17/644,021
(32)【優先日】2021-12-13
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(74)【復代理人】
【識別番号】110000420
【氏名又は名称】弁理士法人MIP
(72)【発明者】
【氏名】ウー、キュウシ
(72)【発明者】
【氏名】グ、ションシュ
(72)【発明者】
【氏名】ジャオジョーム、ハニ、タラル
【テーマコード(参考)】
5B042
5B376
【Fターム(参考)】
5B042HH10
5B376BC38
(57)【要約】
ソフトウェア内の間接関数呼び出しターゲット識別が提供される。明示的データ依存性分析を使用して、プログラムのソフトウェア・モジュール間で関数アドレスを渡す明示的データ・フローのセットが決定される。明示的データ依存性分析およびプログラムの動的実行分析の結果から、間接関数呼び出しターゲットのセットが生成される。グラフ・ニューラル・ネットワークによって生成された特徴埋め込みに基づいて類似のターゲット関数を識別することによって、間接関数呼び出しターゲットのセットが拡大される。
【特許請求の範囲】
【請求項1】
ソフトウェア内の間接関数呼び出しターゲット識別のための方法であって、
明示的データ依存性分析を使用して、プログラムのソフトウェア・モジュール間で関数アドレスを渡す明示的データ・フローのセットを決定することと、
前記明示的データ依存性分析および前記プログラムの動的実行分析の結果から、間接関数呼び出しターゲットのセットを生成することと、
グラフ・ニューラル・ネットワークによって生成された特徴埋め込みに基づいて類似のターゲット関数を識別することによって、間接関数呼び出しターゲットの前記セットを拡大することと
を含む、方法。
【請求項2】
前記プログラムのソース・コードの静的分析に基づく前記プログラムの関数の特徴を含む前記プログラムに対応する関数呼び出しグラフを生成することと、
前記プログラムの前記関数呼び出しグラフを使用して前記プログラムの前記関数の前記特徴を識別するようにグラフ・ニューラル・ネットワークを訓練することと
をさらに含む、請求項1に記載の方法。
【請求項3】
訓練済みのグラフ・ニューラル・ネットワークを使用して、前記プログラムの関数の特徴に対応する前記特徴埋め込みを生成することと、
前記プログラムの前記関数の前記特徴に対応する前記特徴埋め込みに基づく類似の特徴を伴う前記プログラムの類似の関数を同じクラスタ内に置くことと
をさらに含む、請求項1に記載の方法。
【請求項4】
間接関数呼び出しターゲットに対応する前記プログラムのモジュール間のデータ依存性を識別するために、前記プログラムのソース・コードに対して前記明示的データ依存性分析を実施することと、
間接関数呼び出しターゲットを識別するために、前記プログラムのバイナリに対して前記動的実行分析を実施することと、
前記ソース・コードの前記明示的データ依存性分析および前記プログラムの前記バイナリの前記動的実行分析に基づいて、グラウンド・トゥルース間接関数呼び出しターゲットのセットを生成することと
をさらに含む、請求項1に記載の方法。
【請求項5】
グラウンド・トゥルース間接関数呼び出しターゲットの前記セットを伴う類似の特徴を有する類似の関数の1つまたは複数のクラスタを識別するために、類似の関数のクラスタのサーチを実施することと、
間接関数呼び出しターゲットの拡大されたセットを形成するために、前記サーチに基づいて、類似の関数の前記1つまたは複数のクラスタを含めるためにグラウンド・トゥルース間接関数呼び出しターゲットの前記セットを拡大することと
をさらに含む、請求項4に記載の方法。
【請求項6】
間接関数呼び出しターゲットの前記拡大されたセットを使用して、前記プログラムのファズ・テスト、脆弱性検出、またはエクスプロイト発見のうちの少なくとも1つを実施すること
をさらに含む、請求項5に記載の方法。
【請求項7】
関数類似性が、クラスタリング・アルゴリズムによって決定される、請求項1に記載の方法。
【請求項8】
関数埋め込みのセットが、前記プログラムのそれぞれの各関数のために生成される、請求項1に記載の方法。
【請求項9】
コンパイラまたはプログラム分析ツールのうちの1つが、前記明示的データ依存性分析のために使用され、前記プログラムの関数呼び出しグラフおよび関数特徴に基づいて訓練された前記グラフ・ニューラル・ネットワークが、類似のターゲット関数を含めることによって類似の関数をサーチするために使用される、請求項1に記載の方法。
【請求項10】
ソフトウェア内の間接関数呼び出しターゲット識別のためのコンピュータ・システムであって、
バス・システムと、
前記バス・システムに接続されたストレージ・デバイスであって、プログラム命令を格納する、ストレージ・デバイスと、
前記バス・システムに接続されたプロセッサであって、
明示的データ依存性分析を使用して、プログラムのソフトウェア・モジュール間で関数アドレスを渡す明示的データ・フローのセットを決定すること、
前記明示的データ依存性分析および前記プログラムの動的実行分析の結果から、間接関数呼び出しターゲットのセットを生成すること、ならびに
グラフ・ニューラル・ネットワークによって生成された特徴埋め込みに基づいて類似のターゲット関数を識別することによって、間接関数呼び出しターゲットの前記セットを拡大すること
を行うための前記プログラム命令を実行する、プロセッサと
を備える、コンピュータ・システム。
【請求項11】
前記プロセッサが、
前記プログラムのソース・コードの静的分析に基づく前記プログラムの関数の特徴を含む前記プログラムに対応する関数呼び出しグラフを生成すること、および
前記プログラムの前記関数呼び出しグラフを使用して前記プログラムの前記関数の前記特徴を識別するようにグラフ・ニューラル・ネットワークを訓練すること
を行うための前記プログラム命令をさらに実行する、請求項10に記載のコンピュータ・システム。
【請求項12】
前記プロセッサが、
訓練済みのグラフ・ニューラル・ネットワークを使用して、前記プログラムの関数の特徴に対応する前記特徴埋め込みを生成すること、および
前記プログラムの前記関数の前記特徴に対応する前記特徴埋め込みに基づく類似の特徴を伴う前記プログラムの類似の関数を同じクラスタ内に置くこと
を行うための前記プログラム命令をさらに実行する、請求項10に記載のコンピュータ・システム。
【請求項13】
前記プロセッサが、
間接関数呼び出しターゲットに対応する前記プログラムのモジュール間のデータ依存性を識別するために、前記プログラムのソース・コードに対して前記明示的データ依存性分析を実施すること、
間接関数呼び出しターゲットを識別するために、前記プログラムのバイナリに対して前記動的実行分析を実施すること、ならびに
前記ソース・コードの前記明示的データ依存性分析および前記プログラムの前記バイナリの前記動的実行分析に基づいて、グラウンド・トゥルース間接関数呼び出しターゲットのセットを生成すること
を行うための前記プログラム命令をさらに実行する、請求項10に記載のコンピュータ・システム。
【請求項14】
前記プロセッサが、
グラウンド・トゥルース間接関数呼び出しターゲットの前記セットを伴う類似の特徴を有する類似の関数の1つまたは複数のクラスタを識別するために、類似の関数のクラスタのサーチを実施すること、および
間接関数呼び出しターゲットの拡大されたセットを形成するために、前記サーチに基づいて、類似の関数の前記1つまたは複数のクラスタを含めるためにグラウンド・トゥルース間接関数呼び出しターゲットの前記セットを拡大すること
を行うための前記プログラム命令をさらに実行する、請求項13に記載のコンピュータ・システム。
【請求項15】
ソフトウェア内の間接関数呼び出しターゲット識別のためのコンピュータ・プログラム製品であって、プログラム命令を具体化したコンピュータ可読ストレージ媒体を備え、前記プログラム命令が、
明示的データ依存性分析を使用して、プログラムのソフトウェア・モジュール間で関数アドレスを渡す明示的データ・フローのセットを決定すること、
前記明示的データ依存性分析および前記プログラムの動的実行分析の結果から、間接関数呼び出しターゲットのセットを生成すること、ならびに
グラフ・ニューラル・ネットワークによって生成された特徴埋め込みに基づいて類似のターゲット関数を識別することによって、間接関数呼び出しターゲットの前記セットを拡大すること
という方法を前記コンピュータに実施させるようにコンピュータによって実行可能な、コンピュータ・プログラム製品。
【請求項16】
前記プログラムのソース・コードの静的分析に基づく前記プログラムの関数の特徴を含む前記プログラムに対応する関数呼び出しグラフを生成すること、および
前記プログラムの前記関数呼び出しグラフを使用して前記プログラムの前記関数の前記特徴を識別するようにグラフ・ニューラル・ネットワークを訓練すること
をさらに含む、請求項15に記載のコンピュータ・プログラム製品。
【請求項17】
訓練済みのグラフ・ニューラル・ネットワークを使用して、前記プログラムの関数の特徴に対応する前記特徴埋め込みを生成すること、および
前記プログラムの前記関数の前記特徴に対応する前記特徴埋め込みに基づく類似の特徴を伴う前記プログラムの類似の関数を同じクラスタ内に置くこと
をさらに含む、請求項15に記載のコンピュータ・プログラム製品。
【請求項18】
間接関数呼び出しターゲットに対応する前記プログラムのモジュール間のデータ依存性を識別するために、前記プログラムのソース・コードに対して前記明示的データ依存性分析を実施すること、
間接関数呼び出しターゲットを識別するために、前記プログラムのバイナリに対して前記動的実行分析を実施すること、ならびに
前記ソース・コードの前記明示的データ依存性分析および前記プログラムの前記バイナリの前記動的実行分析に基づいて、グラウンド・トゥルース間接関数呼び出しターゲットのセットを生成すること
をさらに含む、請求項15に記載のコンピュータ・プログラム製品。
【請求項19】
グラウンド・トゥルース間接関数呼び出しターゲットの前記セットを伴う類似の特徴を有する類似の関数の1つまたは複数のクラスタを識別するために、類似の関数のクラスタのサーチを実施すること、および
間接関数呼び出しターゲットの拡大されたセットを形成するために、前記サーチに基づいて、類似の関数の前記1つまたは複数のクラスタを含めるためにグラウンド・トゥルース間接関数呼び出しターゲットの前記セットを拡大すること
をさらに含む、請求項18に記載のコンピュータ・プログラム製品。
【請求項20】
間接関数呼び出しターゲットの前記拡大されたセットを使用して、前記プログラムのファズ・テスト、脆弱性検出、またはエクスプロイト発見のうちの少なくとも1つを実施すること
をさらに含む、請求項19に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般に、関数呼び出しに関し、より詳細には、ソフトウェアのソース・コード内の間接関数呼び出しターゲットを識別することに関する。
【背景技術】
【0002】
関数呼び出し(function call)は、プログラムの制御をサブルーチンに渡す呼び出しである。サブルーチンが実行された後、制御はプログラム内の次の命令に返る。関数呼び出しは、関数および後続する関数呼び出し演算子を評価する式(expression)によって形成される。関数呼び出し演算子への引数は、式のコンマ区切りリストから得られる。これらの式の値は、関数に引数として渡される。関数呼び出しに遭遇したときはいつでも、プログラム制御は、この呼び出された関数に移される。
【発明の概要】
【0003】
1つの例証的実施形態によれば、ソフトウェア内の間接関数呼び出しターゲット識別(indirect function call target identification)のためのコンピュータ実行方法が提供される。明示的データ依存性分析(explicit data dependency analysis)を使用して、プログラムのソフトウェア・モジュール間で関数アドレスを渡す明示的データ・フローのセットが決定される。明示的データ依存性分析およびプログラムの動的実行分析の結果から、間接関数呼び出しターゲットのセットが生成される。グラフ・ニューラル・ネットワークによって生成された特徴埋め込みに基づいて類似のターゲット関数を識別することによって、間接関数呼び出しターゲットのセットが拡大される。他の例証的実施形態によれば、ソフトウェア内の間接関数呼び出しターゲット識別のためのコンピュータ・システムおよびコンピュータ・プログラム製品が提供される。
【図面の簡単な説明】
【0004】
図1】例証的実施形態が実装され得るデータ処理システムのネットワークの図的表現である。
図2】例証的実施形態が実装され得るデータ処理システムの図である。
図3】例証的実施形態による関数類似性識別プロセスの例を示す図である。
図4】例証的実施形態による間接関数呼び出しターゲット拡大プロセスの例を示す図である。
図5】例証的実施形態によるソフトウェア内の間接関数呼び出しターゲットを識別するためのプロセスを示すフローチャートである。
図6】例証的実施形態によるグラウンド・トゥルース間接関数呼び出しターゲットのセットを拡大するためのプロセスを示すフローチャートである。
【発明を実施するための形態】
【0005】
本発明は、統合のいずれかの可能な技術詳細レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであってもよい。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体(または複数の媒体)を含み得る。
【0006】
コンピュータ可読ストレージ媒体は、命令実行デバイスで使用するための命令を保持し、記憶することができる有形デバイスであることが可能である。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組合せであってもよいがこれらに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の完全に網羅されていないリストは、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能プログラマブル・リード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(登録商標)・ディスク、命令が記録されたパンチ・カードまたは溝内隆起構造などの機械的にエンコードされたデバイス、および前述の任意の適切な組合せを含む。コンピュータ可読ストレージ媒体は、本明細書で使用されるように、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を通じて伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを通じて伝送される電気信号など、本質的に一時的な信号であると解釈されるべきではない。
【0007】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれの計算/処理デバイスに、あるいは、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せなどの、ネットワークを介して外部コンピュータまたは外部ストレージ・デバイスに、ダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備え得る。各計算/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受け取り、それぞれの計算/処理デバイス内のコンピュータ可読ストレージ媒体に記憶するためにコンピュータ可読プログラム命令を転送する。
【0008】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、インストラクション・セット・アーキテクチャ(ISA)命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路機器のための構成データ、または、Smalltalk(登録商標)、C++、もしくは同様のものなどのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの手続き型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードのいずれかでよい。コンピュータ可読プログラム命令は、スタンド・アロンのソフトウェア・パッケージとして、全面的にユーザのコンピュータ上で、または部分的にユーザのコンピュータ上で実行することができるか、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、または全面的にリモート・コンピュータもしくはサーバ上で実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されてもよく、または、接続は、(例えば、インターネット・サービス・プロバイダを使用したインターネットを通じて)外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラム可能論理回路機器、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路機器は、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路機器を個別化にすることによって、コンピュータ可読プログラム命令を実行することができる。
【0009】
本発明の実施形態による、方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照しながら、本発明の態様が本明細書で説明される。流れ図またはブロック図あるいはその両方の各ブロック、および流れ図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実行できることが理解されよう。
【0010】
これらのコンピュータ可読プログラム命令は、コンピュータのプロセッサ、または他のプログラム可能データ処理装置によって実行する命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為を実行するための手段を作り出すべく、機械を生み出すために、コンピュータのプロセッサ、または他のプログラム可能データ処理装置に提供されてもよい。これらのコンピュータ可読プログラム命令はまた、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為の態様を実行する命令を含む製品を、命令を記憶したコンピュータ可読ストレージ媒体が備えるべく、コンピュータ可読ストレージ媒体に格納されてもよく、特定の様式で機能するように、コンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはその組合せに指示することができる。
【0011】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラム可能装置、または他のデバイス上で実行する命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックで指定された機能/行為を実行するべく、コンピュータ実行プロセスを生み出すように、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを実施させるために、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされてもよい。
【0012】
図中の流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。この点に関して、流れ図またはブロック図の中の各ブロックは、指定の論理機能を実現するための1つまたは複数の実行可能命令を含む命令のモジュール、セグメント、または一部を表すことができる。いくつかの代替実装形態において、ブロックに記された機能は、図に記された順序とは異なる順序で起こり得る。例えば、連続して示された2つのブロックは、実際には、同時に、実質的に同時に、部分的もしくは全面的に時間的に重複するように実行される1つのステップとして実現されてもよく、またはブロックは、時には、含まれる機能に応じて、逆の順序で実行されてもよい。ブロック図または流れ図あるいはその両方の各ブロック、および、ブロック図または流れ図あるいはその両方におけるブロックの組合せは、指定の機能もしくは行為を行うか、または、専用ハードウェアとコンピュータ命令との組合せを実行する専用ハードウェア・ベースのシステムによって実現できることにも留意されたい。
【0013】
図をここで参照すると、また特に図1および図2を参照すると、例証的実施形態が実装され得るデータ処理環境の図が提供されている。図1および図2は単に例であることが意図され、異なる実施形態が実装され得る環境に関して、何らかの限定を主張または示唆することを意図するものではないことを理解されたい。描写された環境に多くの変更が行われてもよい。
【0014】
図1は、例証的実施形態が実装され得るデータ処理システムのネットワークの図的表現を描写する。ネットワーク・データ処理システム100は、例証的実施形態が実装され得るコンピュータ、データ処理システム、および他のデバイスのネットワークである。ネットワーク・データ処理システム100は、ネットワーク102を含み、ネットワーク102は、ネットワーク・データ処理システム100内で一緒に接続されたコンピュータ、データ処理システム、および他のデバイスの間の通信リンクを提供するために使用される媒体である。ネットワーク102は、例えば、ワイヤ通信リンク、ワイヤレス通信リンク、光ファイバ・ケーブル、および同様のものなどの接続を含み得る。
【0015】
描写された例では、サーバ104およびサーバ106は、ストレージ108と共に、ネットワーク102に接続する。サーバ104およびサーバ106は、例えば、ネットワーク102への高速接続を伴うサーバ・コンピュータでよい。また、サーバ104およびサーバ106はそれぞれ、1つまたは複数のデータ・センタ内のサーバのクラスタを表し得る。代替として、サーバ104およびサーバ106はそれぞれ、1つまたは複数のクラウド環境内の複数のコンピューティング・ノードを表し得る。
【0016】
さらに、サーバ104およびサーバ106は、間接関数呼び出しターゲット識別サービスを、登録済みクライアント・デバイスに提供する。間接関数呼び出しは、関数ポインタを介したプログラム内での関数起動(function invocation)のことを言う。実行時に関数ポインタを逆参照することは、参照済みターゲット関数を生ずる。参照済みターゲット関数は、通常の(つまり、直接の)関数呼び出しのような固定アドレスを通じてではなく、変数を通じて間接的に呼び出される。サーバ104およびサーバ106は、コンパイラまたは他のプログラム分析ツールによるプログラムのソース・コードの静的分析に基づいて、プログラムの関数呼び出しグラフを最初に生成することによって、間接関数呼び出しターゲット識別サービスを提供する。プログラムは、例えば、複数のモジュールを備えるオペレーティング・システム・レベルのソフトウェアでもよい。サーバ104およびサーバ106はまた、関数呼び出しグラフおよび関数特徴で訓練されたグラフ・ニューラル・ネットワークを使用して、プログラムの関数の特徴に対応する特徴埋め込みを生成する。プログラムの異なるモジュールによって異なる関数が実施され得ることに留意されたい。
【0017】
さらに、サーバ104およびサーバ106は、クラスタリング・アルゴリズムを利用して、生成された特徴埋め込みに基づいて類似の特徴を有する関数を合わせてクラスタ化し、類似の関数のクラスタを形成する。さらに、サーバ104およびサーバ106は、間接関数呼び出しターゲットに関するプログラムのソフトウェア・モジュール間のデータ依存性を識別するために、関数呼び出しグラフに対して明示的データ依存性分析を実施し、間接関数呼び出しターゲットを識別するためにプログラムの動的実行分析を実施する。さらに、サーバ104およびサーバ106は、明示的データ依存性および動的実行分析に基づいて、間接関数呼び出しターゲットのグラウンド・トゥルース・データセットを生成する。その上、サーバ104およびサーバ106は、間接関数呼び出しターゲットのグラウンド・トゥルース・データセット内のこれらの関数に類似の特徴を有する類似の関数のクラスタ内の関数を使用して、間接関数呼び出しターゲットのグラウンド・トゥルース・データセットを拡大する。サーバ104およびサーバ106は、間接関数呼び出しターゲットの拡大されたグラウンド・トゥルース・データセットを利用して、ファズ・テスト、脆弱性検出、エクスプロイト発見(exploitation discovery)、またはプログラム挙動分析のうちの少なくとも1つをプログラムに対して実施する。
【0018】
グラウンド・トゥルースは、推論によって提供される情報ではなく直接的な観察および測定(つまり、経験的証拠)によって提供される、現実または真実であることが知られている情報である。本明細書で使用されるように、間接関数呼び出しターゲットのグラウンド・トゥルース・データセットは、間接関数呼び出しターゲットが、明示的データ依存性分析および動的実行分析によって正確に識別可能であることを意味する。グラウンド・トゥルース・データセット内のこれらの識別済みの間接関数呼び出しターゲットは常に正しい。グラウンド・トゥルース間接関数呼び出しターゲットは、プログラム内の間接関数呼び出しターゲット全体のサブセットである。ほとんどの間接関数呼び出しターゲットは、実行の終盤まで識別可能ではない。結果として、例証的実施形態は、グラフ・ニューラル・ネットワークを利用して、間接関数呼び出しターゲットのグラウンド・トゥルース・データセットに基づいて、潜在的な間接関数呼び出しターゲットを推論する。
【0019】
クライアント110、クライアント112、およびクライアント114も、ネットワーク102に接続する。クライアント110、112、および114は、サーバ104およびサーバ106の登録済みクライアント・デバイスである。この例では、クライアント110、112、および114は、ネットワーク102へのワイヤ通信リンクを伴うデスクトップまたはパーソナル・コンピュータとして示されている。しかし、クライアント110、112、および114は例にすぎず、ネットワーク102へのワイヤまたはワイヤレス通信リンクを伴う、例えば、ネットワーク・コンピュータ、ラップトップ・コンピュータ、ハンドヘルド・コンピュータ、スマート・フォン、スマート・テレビ、スマート車両、および同様のものなど、他のタイプのデータ処理システムを表し得ることに留意されたい。クライアント110、112、および114のユーザは、クライアント110、112、および114を利用して、クライアント110、112、および114で実施されることになる、サーバ104およびサーバ106によって提供される間接関数呼び出しターゲット識別サービスをリクエストし得る。
【0020】
ストレージ108は、構造化フォーマットまたは非構造化フォーマットで任意のタイプのデータを格納することができるネットワーク・ストレージ・デバイスである。さらに、ストレージ108は、複数のネットワーク・ストレージ・デバイスを表し得る。さらに、ストレージ108は、複数の登録済みクライアント・デバイスの識別子およびネットワーク・アドレス、複数の登録済みクライアント・デバイスに対応する複数のプログラム(例えば、オペレーティング・システム・レベルのソフトウェア)の識別子、複数のプログラムに対応するソース・コード、複数のプログラムに対応する関数呼び出しグラフ、複数のプログラムに対応するソフトウェア・モジュール・データ依存性グラフ、関数の特徴を含む複数のプログラムに対応する関数のリスト、および同様のものを格納し得る。さらに、ストレージ108は、例えば、プログラム開発者、システム・アドミニストレータ、およびクライアント・デバイス・ユーザに関連付けられたユーザ名、パスワード、および同様のものを含み得る認証または資格証明書データなどの、他のタイプのデータを格納し得る。
【0021】
さらに、ネットワーク・データ処理システム100は、図示していない任意の数の追加のサーバ、クライアント、ストレージ・デバイス、および他のデバイスを含み得ることに留意されたい。ネットワーク・データ処理システム100内にあるプログラム・コードは、コンピュータ可読ストレージ媒体またはコンピュータ可読ストレージ媒体のセットに格納され、使用のために、コンピュータまたは他のデータ処理デバイスにダウンロードされてもよい。例えば、プログラム・コードは、サーバ104のコンピュータ可読ストレージ媒体に格納され、クライアント110での使用のために、ネットワーク102を介してクライアント110にダウンロードされてもよい。
【0022】
描写された例では、ネットワーク・データ処理システム100は、例えば、インターネット、イントラネット、ワイド・エリア・ネットワーク、ローカル・エリア・ネットワーク、テレコミュニケーション・ネットワーク、またはその任意の組合せなどの、いくつかの異なるタイプの通信ネットワークとして実装され得る。図1は、単なる一例であることが意図され、異なる例証的実施形態に対する構造的限定を意図するものではない。
【0023】
本明細書で使用されるように、アイテムを参照しながら使用されるとき、「いくつかの」は、アイテムのうちの1つまたは複数を意味する。例えば、「いくつかの異なるタイプの通信ネットワーク」は、1つまたは複数の異なるタイプの通信ネットワークである。同様に、「のセット」は、アイテムを参照しながら使用されるとき、アイテムのうちの1つまたは複数を意味する。
【0024】
さらに、「のうちの少なくとも1つ」という用語は、アイテムのリストと共に使用されるとき、リスト化されたアイテムの1つまたは複数の異なる組合せが使用され得ること、および、リスト内の各アイテムのうちのただ1つが必要とされ得ることを意味する。言い換えれば、「のうちの少なくとも1つ」は、アイテムの任意の組合せおよび任意の数のアイテムがリストから使用され得るが、リスト内のアイテムの全てが必要なわけではないことを意味する。アイテムは、特定のオブジェクト、モノ、またはカテゴリでもよい。
【0025】
例えば、限定することなく、「アイテムA、アイテムB、またはアイテムCのうちの少なくとも1つ」は、アイテムA、アイテムAとアイテムB、またはアイテムBを含み得る。この例は、アイテムAとアイテムBとアイテムC、または、アイテムBとアイテムCも含み得る。当然、これらのアイテムの任意の組合せが存在し得る。いくつかの例証的な例では、「のうちの少なくとも1つ」は、例えば、限定することなく、アイテムAのうちの2つ、アイテムBのうちの1つ、およびアイテムCのうちの10個、または、アイテムBのうちの4つ、およびアイテムCのうちの7つ、または、他の適切な組合せでもよい。
【0026】
図2をここで参照すると、例証的実施形態によるデータ処理システムの図が描写されている。データ処理システム200は、図1のサーバ104などのコンピュータの例であり、この中に、例証的実施形態の間接関数呼び出しターゲット識別プロセスを実行するコンピュータ可読プログラム・コードまたは命令が置かれ得る。この例では、データ処理システム200は通信ファブリック202を含み、通信ファブリック202は、プロセッサ・ユニット204、メモリ206、永続ストレージ208、通信ユニット210、入出力(I/O)ユニット212、およびディスプレイ214の間の通信を提供する。
【0027】
プロセッサ・ユニット204は、メモリ206にロードされ得るソフトウェア・アプリケーションおよびプログラムに関する命令を実行するように機能する。プロセッサ・ユニット204は、特定の実装形態に応じて、1つもしくは複数のハードウェア・プロセッサ・デバイスのセットでもよく、またはマルチコア・プロセッサでもよい。
【0028】
メモリ206および永続ストレージ208は、ストレージ・デバイス216の例である。本明細書で使用されるように、コンピュータ可読ストレージ・デバイスまたはコンピュータ可読ストレージ媒体は、例えば、限定することなく、データ、関数形式のコンピュータ可読プログラム・コード、または他の適切な情報、あるいはその組合せなどの情報を、一時的または永続的に格納することができるハードウェアのいずれかである。さらに、コンピュータ可読ストレージ・デバイスまたはコンピュータ可読ストレージ媒体は、一時的な信号などの伝搬媒体を除外する。さらに、コンピュータ可読ストレージ・デバイスまたはコンピュータ可読ストレージ媒体は、コンピュータ可読ストレージ・デバイスのセット、またはコンピュータ可読ストレージ媒体のセットを表し得る。メモリ206は、これらの例では、例えば、ランダム・アクセス・メモリ(RAM)、または、フラッシュ・メモリなどの任意の他の適切な揮発性もしくは不揮発性ストレージ・デバイスでよい。永続ストレージ208は、特定の実装形態に応じて、様々な形をとってもよい。例えば、永続ストレージ208は、1つまたは複数のデバイスを収めてもよい。例えば、永続ストレージ208は、ディスク・ドライブ、ソリッド・ステート・ドライブ、書換え可能光ディスク、書換え可能磁気テープ、または上記のいくつかの組合せでよい。永続ストレージ208によって使用される媒体は取外し可能でよい。例えば、永続ストレージ208のために取外し可能ハード・ドライブが使用されてもよい。
【0029】
この例では、永続ストレージ208は、間接関数呼び出しターゲット識別器218を格納している。しかし、間接関数呼び出しターゲット識別器218が、永続ストレージ208に常駐しているように示されていても、代替の例証的実施形態では、間接関数呼び出しターゲット識別器218は、データ処理システム200の別々の構成要素でもよいことに留意されたい。例えば、間接関数呼び出しターゲット識別器218は、通信ファブリック202に連結されたハードウェア構成要素、または、ハードウェア構成要素およびソフトウェア構成要素の組合せでもよい。別の代替の例証的実施形態では、間接関数呼び出しターゲット識別器218の構成要素の第1のセットは、データ処理システム200内に置かれてもよく、間接関数呼び出しターゲット識別器218の構成要素の第2のセットは、例えば、図1のサーバ106などの、第2のデータ処理システム内に置かれてもよい。
【0030】
間接関数呼び出しターゲット識別器218は、登録済みクライアント・デバイスに置かれた、例えば、オペレーティング・システム・カーネル、オペレーティング・システム・レベルのソフトウェア、および同様のものなどの、ソフトウェア内の間接関数呼び出しターゲット識別のプロセスを制御する。結果として、データ処理システム200は、ソフトウェアのセキュリティを向上させるために、データ処理システム200の間接関数呼び出しターゲット識別器218が、改善されたファズ・テスト、脆弱性検出、およびエクスプロイト発見のための間接関数呼び出しターゲットの正確な識別を可能にする専用コンピュータ・システムとして動作する。特に、間接関数呼び出しターゲット識別器218は、間接関数呼び出しターゲット識別器218を有していない現在利用可能な一般的なコンピュータ・システムに匹敵するような専用コンピュータ・システムに、データ処理システム200を変形させる。
【0031】
通信ユニット210は、この例では、図1のネットワーク102などのネットワークを介した、他のコンピュータ、データ処理システム、およびクライアント・デバイスとの通信を提供する。通信ユニット210は、物理通信リンクとワイヤレス通信リンク両方の使用を通じた通信を提供してもよい。物理通信リンクは、例えば、ワイヤ、ケーブル、ユニバーサル・シリアル・バス、または任意の他の物理的技術を利用して、データ処理システム200のための物理通信リンクを確立してもよい。ワイヤレス通信リンクは、例えば、短波、高周波、超高周波、マイクロ波、ワイヤレス・フィデリティ(WiFi(登録商標))、Bluetooth(登録商標)技術、グローバル・システム・フォー・モバイル・コミュニケーションズ(GSM)、符号分割多元接続(CDMA)、第2世代(2G)、第3世代(3G)、第4世代(4G)、4Gロング・ターム・エボリューション(LTE)、LTEアドバンスト、第5世代(5G)、または任意の他のワイヤレス通信技術もしくは標準を利用して、データ処理システム200のためのワイヤレス通信リンクを確立してもよい。
【0032】
入出力ユニット212は、データ処理システム200に接続され得る他のデバイスとのデータの入出力を可能にする。例えば、入出力ユニット212は、キーパッド、キーボード、マウス、マイクロフォン、または他のいくつかの適切な入力デバイス、あるいはその組合せを通じたユーザ入力のための接続を提供してもよい。ディスプレイ214は、ユーザに情報を表示するためのメカニズムを提供し、例えば、ユーザ・インターフェースまたは入力データを通じてユーザがオン・スクリーン選択を行えるようにするためのタッチ・スクリーン機能を含み得る。
【0033】
オペレーティング・システム、アプリケーション、またはプログラム、あるいはその組合せに関する命令は、ストレージ・デバイス216に置かれてもよく、ストレージ・デバイス216は、通信ファブリック202を通じてプロセッサ・ユニット204と通信している。この例証的な例では、命令は、関数形式で永続ストレージ208上にある。これらの命令は、プロセッサ・ユニット204による実行のために、メモリ206にロードされてもよい。異なる実施形態のプロセスは、コンピュータ実装命令を使用して、プロセッサ・ユニット204によって実施されてもよく、コンピュータ実装命令は、メモリ206などのメモリに置かれてもよい。これらのプログラム命令は、プログラム・コード、コンピュータ使用可能プログラム・コード、またはコンピュータ可読プログラム・コードと呼ばれ、プロセッサ・ユニット204のプロセッサによって読み込まれ、実行され得る。プログラム命令は、異なる実施形態では、メモリ206または永続ストレージ208などの、異なる物理コンピュータ可読ストレージ・デバイスに含まれてもよい。
【0034】
プログラム・コード220は、選択的に取外し可能なコンピュータ可読媒体222に関数形式で置かれ、プロセッサ・ユニット204による実行のために、データ処理システム200にロードされるか、転送されてもよい。プログラム・コード220およびコンピュータ可読媒体222は、コンピュータ・プログラム製品224を形成する。1つの例では、コンピュータ可読媒体222は、コンピュータ可読ストレージ媒体226またはコンピュータ可読信号媒体228でよい。
【0035】
これらの例証的な例では、コンピュータ可読ストレージ媒体226は、プログラム・コード220を伝搬または伝送させる媒体ではなく、プログラム・コード220を格納するために使用される物理的なまたは有形のストレージ・デバイスである。コンピュータ可読ストレージ媒体226は、例えば、永続ストレージ208の一部であるハード・ドライブなどのストレージ・デバイスに転送するための、永続ストレージ208の一部であるドライブまたは他のデバイスに挿入または配置された、光または磁気ディスクを含んでもよい。コンピュータ可読ストレージ媒体226はまた、データ処理システム200に接続されたハード・ドライブ、サム・ドライブ、またはフラッシュ・メモリなどの、永続ストレージの形をしていてもよい。
【0036】
代替として、プログラム・コード220は、コンピュータ可読信号媒体228を使用して、データ処理システム200に転送されてもよい。コンピュータ可読信号媒体228は、例えば、プログラム・コード220を収める伝搬データ信号でもよい。例えば、コンピュータ可読信号媒体228は、電磁気信号、光信号、または任意の他の適切なタイプの信号でよい。これらの信号は、ワイヤレス通信リンク、光ファイバ・ケーブル、同軸ケーブル、ワイヤ、または任意の他の適切なタイプの通信リンクなどの、通信リンクを介して伝送され得る。
【0037】
さらに、本明細書で使用されるように、「コンピュータ可読媒体222」は、単数形または複数形であることが可能である。例えば、プログラム・コード220は、単一のストレージ・デバイスまたはシステムの形でコンピュータ可読媒体222に置かれることが可能である。別の例では、プログラム・コード220は、複数のデータ処理システム内に分散されたコンピュータ可読媒体222に置かれることが可能である。言い換えれば、プログラム・コード220内のいくつかの命令は、1つのデータ処理システム内に置かれることが可能であるが、プログラム・コード220内の他の命令は、1つまたは複数の他のデータ処理システム内に置かれることが可能である。例えば、プログラム・コード220の一部は、サーバ・コンピュータのコンピュータ可読媒体222に置かれることが可能であるが、プログラム・コード220の別の部分は、クライアント・コンピュータのセット内にあるコンピュータ可読媒体222に置かれることが可能である。
【0038】
データ処理システム200のために示された異なる構成要素は、異なる実施形態が実装され得る様式に構造的限定を提供することを意図していない。いくつかの例証的な例では、構成要素の1つまたは複数は、別の構成要素に組み込まれるか、そうでなければ、別の構成要素の一部を形成してもよい。例えば、いくつかの例証的な例では、メモリ206またはその一部は、プロセッサ・ユニット204内に組み込まれてもよい。異なる例証的実施形態は、データ処理システム200のために示されたものの他のまたはその代わりの構成要素を含むデータ処理システム内に実装されることが可能である。図2に示された他の構成要素は、示された例証的な例から変化させることができる。異なる実施形態は、プログラム・コード220を実行することができる任意のハードウェア・デバイスまたはシステムを使用して、実装されることが可能である。
【0039】
別の例では、通信ファブリック202を実装するためにバス・システムが使用されてもよく、システム・バスまたは入出力バスなどの、1つまたは複数のバスで構成されてもよい。当然、バス・システムは、バス・システムに取り付けられた異なる構成要素またはデバイスの間のデータ転送を提供する任意の適切なタイプのアーキテクチャを使用して実装され得る。
【0040】
間接関数呼び出しは、関数ポインタとして表されており、実行値に基づく動的な関数選択を可能にするために、例えば、オペレーティング・システム・カーネル、ブラウザ、または同様のものなどの、大きいC/C++プログラムでしばしば使用される。間接関数呼び出しは、実行時にだけ決定されるターゲット関数アドレスを伴う呼び出し命令を使用する。
【0041】
プログラム分析の基礎である正確な制御フロー・グラフを構築するために、間接関数呼び出しターゲットの精密な識別が必要である。間接関数呼び出しターゲットの精密な識別は、プログラム・ファズ・テスト、プログラム脆弱性検出、プログラム・エクスプロイト発見、プログラム挙動分析、および同様のものにとって特に重要である。しかし、現在のコンパイラは、間接関数呼び出しターゲット・アドレスが、実行時に計算された値によって決定されることしか可能でないので、コンパイル時に静的に間接関数呼び出しターゲットを精密に識別することができない。
【0042】
間接呼び出しの潜在的なターゲット関数にほぼ相当する解決策が現在、存在する。1つの現在の解決策は、ポイントツー分析(point-to analysis)を利用して、間接関数呼び出しターゲットを識別する。ポイントツー分析はポインタ分析の一部であり、関数ポインタをその対応する関数アドレスにマッチさせる一般的なアプローチである。しかし、関数ポインタのエイリアシングにより、伝統的なポイントツー分析は、大きいプログラムを分析するために使用されるとき特に、精密ではない。別の現在の解決策は、タイプ分析を利用して、間接関数呼び出しターゲットを識別する。タイプ分析はまた、これがほとんどのケースで適切であり得るので、間接関数呼び出しターゲット識別で使用される。言い換えれば、タイプ分析は、潜在的なターゲット関数のタイプ情報(例えば、特徴)と、呼び出しサイト命令とをマッチさせることによって、間接関数呼び出しターゲットを識別する。プログラム・バイナリ内の呼び出しサイト命令は、直接関数呼び出しまたは間接関数呼び出しのためのものであることが可能である。間接関数呼び出しターゲットを識別するためのさらに別の現在の解決策は、プログラムの動的実行分析であり、実行された直接および間接関数呼び出しターゲットを記録することである。
【0043】
これらの現在の解決策のそれぞれが、間接関数呼び出しターゲットを識別しようとするが、これらの現在の解決策の全てに、正確度または精度についての問題がある。これらの現在の解決策の結果は、例えば、オペレーティング・システム・レベルのソフトウェアなど、大きいプログラムのプログラム分析に使用されるのに十分精密というわけではない。例えば、動的実行分析が偽陽性の結果を導入しないとしても、大きいプログラムの場合、動的実行分析のコード網羅率は通常低い(例えば、0~20%)。これは、ほとんどの関数呼び出しアドレスが動的実行トレース時に網羅されず、ただ1つの関数呼び出しターゲットが関数呼び出しアドレス毎にマッピングされ得るので、偽陰性関数ターゲット率を高くするおそれがある。逆に、タイプ分析およびポイントツー分析は適切であり、これは、タイプ分析およびポイントツー分析が多くの偽陰性関数ターゲット結果を導入するわけではないが、共通の関数特徴によるタイプ分析、および関数ポインタのエイリアシングによるポイントツー分析が依然として、多くの偽陽性関数ターゲット結果を生成する可能性があることを意味する。
【0044】
例証的実施形態は、現在の解決策によって生成される偽陽性関数呼び出しターゲット率および偽陰性関数呼び出しターゲット率を減少させる。例証的実施形態は、タイプ分析およびポイントツー分析アプローチと統合して、これらのアプローチによって生成される偽陽性関数ターゲット率を有意に低減可能であることに留意されたい。具体的には、例証的実施形態は、プログラムの関数呼び出しサイト・モジュールと、関数アドレス取得モジュールとの間の明示的データ依存性を分析することによって、間接関数呼び出しターゲットを識別する。関数呼び出しサイト・モジュールは、関数呼び出しサイト命令が置かれる場所である。関数アドレス取得モジュールは、呼び出される関数のアドレスが置かれる場所である。
【0045】
例証的実施形態は、取得された関数アドレスと、特定の関数呼び出しサイト命令との間の明示的データ依存性を利用して、グラウンド・トゥルース間接関数呼び出しターゲットのセットを生成する。グラウンド・トゥルース間接関数呼び出しターゲットのセットは、間接関数呼び出しターゲットの比較的小さいセットであり、必ず呼び出される。さらに、例証的実施形態は、グラフ・ニューラル・ネットワークによって生成された特徴埋め込みに基づく関数類似性を利用して、間接関数呼び出しターゲットのグラウンド・トゥルース・データセットを拡大し、より複雑なデータ依存性を伴う間接関数呼び出しターゲットを識別する。特徴埋め込みは、関数の特徴のベクトル表現である。これらの複雑なデータ依存性は通常、暗黙的なデータ・フローを伴い、暗黙的なデータ・フローは、明示的データ依存性分析中に見つからず、モジュール依存性グラフに欠けている。モジュール依存性グラフは、プログラム(例えば、オペレーティング・システム・レベルのソフトウェア)内のモジュール(例えば、関数呼び出しサイト・モジュールおよび関数アドレス取得モジュール)間のデータ依存性を示す。モジュール間のデータ依存性は、1つのモジュール内のデータが、別のモジュール内のデータに依存するか、別のモジュール内のデータによって必要とされることを意味する。
【0046】
現在の解決策の結果は、例えば、プログラムの精密な手続き間分析または関数呼び出しグラフ構築など、静的分析に使用されるのに十分正確というわけではない。対照的に、例証的実施形態は、最終的な関数呼び出しターゲット結果を静的分析にとって有益なものにすることによって、より低い偽陰性関数呼び出しターゲット率およびより低い偽陽性関数呼び出しターゲット率の両方を達成する。さらに、例証的実施形態は、間接関数呼び出しターゲット識別の精度を向上させるために、独立して使用されること、または現在の解決策と統合されることが可能である。
【0047】
間接関数呼び出しターゲット識別の正確度を向上させるために、例証的実施形態は、明示的データ依存性分析および類似の間接関数呼び出しターゲット拡大を利用する。例証的実施形態は、明示的データ依存性分析を利用して、モジュール間で関数アドレスを渡すことが可能なプログラムの何らかの明示的データ・フローが存在するかどうかを決定し、したがって、呼び出し命令の位置を提供する関数呼び出しサイトを提供することによって、無効なターゲット関数を取り除くことができる。明示的データ・フローは、プログラム内のデータ・フローが、明示的データ依存性分析を使用して精密にモデル化および追跡可能であることを意味する。関数アドレスは、グローバル変数を共有することによって、または関数呼び出しを通じて、モジュール間で渡されることだけが可能である。したがって、2つのプログラム・モジュールの場合、1つのモジュールが、別のモジュールで定義された、関数を呼び出すか、グローバル変数を使用する場合、これらの2つのモジュールには、データ依存性がある。さらに、関数呼び出しまたはグローバル変数がターゲット関数アドレスを渡すことが可能な場合、1つのモジュール内の間接関数呼び出しターゲットの呼び出しサイトは、ターゲット関数として別のモジュールで定義された関数を使用することができる。例証的実施形態は、この明示的データ依存性分析を使用して、グラウンド・トゥルース間接関数呼び出しターゲットの初期セットを生成する。
【0048】
例証的実施形態は、モジュール依存性グラフに欠けたプログラムの暗黙的な関数アドレスを渡すデータ・フローを含めるように、グラウンド・トゥルース間接関数呼び出しターゲットの初期セットを拡大する。例証的実施形態は、メトリックとして関数類似性を利用して、潜在的な間接関数呼び出しターゲットをランク付けする。関数類似性は、例えば、同じ間接関数呼び出しサイトにマッピングされたターゲット関数が、例えば、関数タイプ、ローカル変数のデータ型、関数呼び出し、手続き内制御フローなどが通常類似しているとの観察に基づく。例証的実施形態は、グラフ・ニューラル・ネットワークを利用して、プログラムの関数の特徴をベクトルとして表す特徴埋め込みを生成する。これらの特徴埋め込みを生成するために、例証的実施形態は、分析される必要があるプログラムの関数呼び出しグラフを最初に構築する。その上、例証的実施形態は、プログラムの関数呼び出しグラフを利用して、グラフ・ニューラル・ネットワークを訓練する。例証的実施形態は、次いで、訓練済みのグラフ・ニューラル・ネットワークを利用して、プログラムの全ての関数についての特徴埋め込みを生成する。グラフ・ニューラル・ネットワークは、グラフ上のデータを処理するために既存のニューラル・ネットワークを拡張する深層学習技法である。グラフ・ニューラル・ネットワークを使用して、グラフ・ニューラル・ネットワーク構造内のノードは、隣のノードから集められた情報を追加する。グラフ・ニューラル・ネットワークの最後の層は、隣のノードから集められたこの追加された情報全てをノードに組み合わせ、ノード特徴の予測または分類を出力する。
【0049】
グラフ・ニューラル・ネットワークの訓練中、例証的実施形態は、各関数のノード特徴として、ローカル変数のデータ型などの他の関数特徴をさらに含むことが可能である。特徴埋め込みに基づいて、例証的実施形態は、異なるプログラム関数の間の類似性をサーチする。例証的実施形態は、定義済みの最小関数類似性閾値を上回る類似性スコアを有する関数を、類似の関数として選択することが可能である。結果として、例証的実施形態は、任意の間接関数呼び出しのためのターゲット関数を自動で決定することが可能である。さらに、間接関数呼び出しターゲットのこの識別は、類似のターゲット関数の終結が識別されるまで複数の反復を伴う、反復プロセスである。
【0050】
結果として、例証的実施形態には、プログラム・セキュリティ分析のためのサーチ空間を減少させる、減少された偽陽性率を有する精密な間接関数呼び出しターゲット識別を伴うプログラムに対応する正確な関数呼び出しグラフを生成することができる。例証的実施形態は、正確な関数呼び出しグラフを利用して、関数特徴を学習するためのグラフ・ニューラル・ネットワークのための訓練データを生成し、プログラム内の正当な実行経路と異常な実行経路とを区別する。例証的実施形態は、プログラムの動的実行分析および明示的データ依存性分析の両方を利用して、間接関数呼び出しターゲットのグラウンド・トゥルース・データセットを生成する。例証的実施形態は、プログラムの関数呼び出しグラフで訓練されたグラフ・ニューラル・ネットワークを使用して、類似の間接関数呼び出しターゲットのセットを含めるように、間接関数呼び出しターゲットのグラウンド・トゥルース・データセットをさらに拡大する。
【0051】
したがって、例証的実施形態は、現在の解決策による偽陽性関数呼び出しターゲット率および偽陰性関数呼び出しターゲット率の生成に伴う技術的問題を克服する1つまたは複数の技術的解決策を提供する。結果として、これらの1つまたは複数の技術的解決策は、プログラム内の間接関数呼び出しターゲットを正確に識別することによって、プログラム・セキュリティ分析の分野における技術的効果および実践的応用を提供する。
【0052】
図3をここで参照すると、例証的実施形態による関数類似性識別プロセスの例を示す図が描写されている。関数類似性識別プロセス300は、図1のサーバ104または図2のデータ処理システム200などのコンピュータに実装されてもよい。
【0053】
この例では、関数類似性識別プロセス300は、コンパイラ302、グラフ・ニューラル・ネットワーク304、およびクラスタリング・アルゴリズム306を含む。コンピュータは、コンパイラ302を利用して、プログラム・ソース・コード308の静的分析を実施する。プログラム・ソース・コード308は、セキュリティ脆弱性について分析されることになる、例えば、オペレーティング・システム・カーネルまたはオペレーティング・システム・レベルのソフトウェアなどの、特定のプログラムのソース・コードを表す。
【0054】
プログラム・ソース・コード308の静的分析に基づいて、コンパイラは、プログラム関数呼び出しグラフ310を生成する。プログラム関数呼び出しグラフ310は、ノードとしてプログラムの関数を、グラフ構造内のノード間のエッジとして関数に対応する関数呼び出しを描くグラフ構造である。さらに、特定の関数に対応するそれぞれの各ノードは、この特定の関数の特徴のリストを含む。
【0055】
コンピュータは、プログラム関数呼び出しグラフ310に含まれる情報を訓練データとして利用して、プログラムのそれぞれの各関数の特徴を識別するようにグラフ・ニューラル・ネットワーク304を訓練する。グラフ・ニューラル・ネットワーク304が訓練されると、コンピュータは、グラフ・ニューラル・ネットワーク304を利用して、関数の特徴埋め込み312を生成する。関数の特徴埋め込み312は、プログラムのそれぞれの各関数の特徴埋め込みのセットを含む。各特徴埋め込みは、対応する関数の特定の特徴のベクトル表現である。
【0056】
グラフ・ニューラル・ネットワーク304が関数の特徴埋め込み312を生成した後、コンピュータは、クラスタリング・アルゴリズム306を利用して、関数の特徴埋め込み312に基づいて類似の関数のクラスタ314を生成する。クラスタリング・アルゴリズム306は、例えば、K平均法クラスタリング・アルゴリズム、密度ベースのクラスタリング・アルゴリズム、分散ベースのクラスタリング・アルゴリズム、重心ベースのクラスタリング・アルゴリズム、または同様のものなどの、任意のタイプのクラスタリング・アルゴリズムでもよい。類似の関数のクラスタ314は、関数の複数の異なるクラスタ(例えば、クラスタ1、クラスタ2、およびクラスタ3)を表し、各クラスタは、類似の関数特徴を有している。類似の特徴を有する関数は、同じ呼び出しサイト命令によって呼び出されることになることに留意されたい。実行されたとき、呼び出しサイト命令は、制御をターゲット関数に移す。
【0057】
図4をここで参照すると、例証的実施形態による間接関数呼び出しターゲット拡大プロセスの例を示す図が描写されている。間接関数呼び出しターゲット拡大プロセス400は、図1のサーバ104または図2のデータ処理システム200などのコンピュータに実装されてもよい。
【0058】
この例では、間接関数呼び出しターゲット拡大プロセス400は、類似の関数のクラスタ402、グラウンド・トゥルース間接関数呼び出しターゲットのセット404、および間接関数呼び出しターゲットの拡大されたセット406を含む。類似の関数のクラスタ402は、例えば、図3の類似の関数のクラスタ314でもよい。コンピュータは、間接関数呼び出しターゲットに関するプログラムのソフトウェア・モジュール間のデータ依存性を識別するプログラムに対応する関数呼び出しグラフに対する明示的データ依存性分析をコンピュータが実施すること、および、間接関数呼び出しターゲット・アドレスを識別するプログラムのバイナリに対する動的実行分析をコンピュータが実施することに基づいて、グラウンド・トゥルース間接関数呼び出しターゲットのセット404を生成する。グラウンド・トゥルース間接関数呼び出しターゲットのセット404は、いくつかの間接関数呼び出しターゲットを表し、セット内の各ターゲット関数は、間接関数呼び出しによって呼び出されることが保証される。
【0059】
コンピュータは、グラウンド・トゥルース間接関数呼び出しターゲットのセット404の特徴に類似の特徴を有する関数を識別するために類似の関数のクラスタ402をサーチする。コンピュータは、類似の特徴を伴う関数が通常、同じ呼び出しサイト命令によって呼び出されるので、グラウンド・トゥルース間接関数呼び出しターゲットのセット404のものと類似の特徴を有するような、サーチで識別された1つまたは複数の関数を用いてグラウンド・トゥルース間接関数呼び出しターゲットのセット404を拡大する。グラウンド・トゥルース間接関数呼び出しターゲットのセット404を、グラウンド・トゥルース間接関数呼び出しターゲットのセット404のものに類似の特徴を有する1つまたは複数の関数と組み合わせることによって、コンピュータは、間接関数呼び出しターゲットの拡大されたセット406を生成する。コンピュータは、間接関数呼び出しターゲットの拡大されたセット406を利用して、プログラムに対して、例えば、ファズ・テスト、脆弱性検出、エクスプロイト発見、プログラム挙動分析、および同様のものを実施し、プログラムのセキュリティ脆弱性および他のセキュリティ・ギャップを識別して、プログラム・セキュリティを向上させる。
【0060】
図5をここで参照すると、例証的実施形態によるソフトウェア内の間接関数呼び出しターゲットを識別するためのプロセスを示すフローチャートが示されている。図5に示されたプロセスは、例えば、図1のサーバ104または図2のデータ処理システム200などのコンピュータに実装されてもよい。例えば、図5に示されたプロセスは、図2の間接関数呼び出しターゲット識別器218に実装されてもよい。
【0061】
プロセスは、コンピュータが、プログラムの間接関数呼び出しターゲットを識別するための入力を受け取るときに始まる(ステップ502)。プログラムは、例えば、関数呼び出しサイト・モジュールおよび関数アドレス取得モジュールなどの、複数のソフトウェア・モジュールを備えるオペレーティング・システム・レベルのソフトウェアでもよい。入力を受け取ったことに応答して、コンピュータは、プログラムのソース・コードを取り出す(ステップ504)。コンピュータは、例えば図1のストレージ108などのストレージ・デバイスから、ソース・コードを取り出してもよい。
【0062】
コンピュータは、プログラムのソース・コードに対して静的分析を実施する(ステップ506)。コンピュータは、例えばコンパイラを利用して、ソース・コードの静的分析を実施してもよい。代替として、コンピュータは、プログラム分析ツールまたは同様のものを利用して、ソース・コードの静的分析を実施してもよい。コンピュータは、プログラムのソフトウェア・モジュール間の明示的データ依存性発見のためにコンパイラを利用する。コンピュータは、プログラムのソース・コードの静的分析に基づくプログラムの関数の特徴を含むプログラムに対応する関数呼び出しグラフを生成する(ステップ508)。
【0063】
コンピュータは、訓練済みのグラフ・ニューラル・ネットワークを形成するために、プログラムの関数呼び出しグラフを使用してプログラムの関数の特徴を識別するようにグラフ・ニューラル・ネットワークを訓練する(ステップ510)。言い換えれば、コンピュータは、類似の関数呼び出しターゲットを含めることによって、類似の関数をサーチするように、関数呼び出しグラフおよび関数特徴に基づいてグラフ・ニューラル・ネットワークを訓練する。コンピュータは、訓練済みのグラフ・ニューラル・ネットワークを使用して、プログラムの関数の特徴に対応する特徴埋め込みを生成する(ステップ512)。コンピュータは、プログラムのそれぞれの各関数の特徴埋め込みのセットを生成する。
【0064】
コンピュータは、類似の関数のクラスタを形成するために、クラスタリング・アルゴリズムを使用して、プログラムの関数の特徴に対応する特徴埋め込みに基づく類似の特徴を伴うプログラムの類似の関数を同じクラスタ内に置く(ステップ514)。コンピュータは、クラスタリング・アルゴリズムを利用して、プログラムの関数の間の関数類似性を決定する。
【0065】
さらに、コンピュータは、間接関数呼び出しターゲットに対応するプログラムのモジュール間のデータ依存性を識別するために、プログラムのソース・コードに対して明示的データ依存性分析を実施する(ステップ516)。さらに、コンピュータは、間接関数呼び出しターゲットを識別するために、プログラムのバイナリ・コードに対して動的実行分析を実施する(ステップ518)。コンピュータは、ソース・コードの明示的データ依存性分析およびプログラムのバイナリ・コードの動的実行分析に基づいて、グラウンド・トゥルース間接関数呼び出しターゲットのセットを生成する(ステップ520)。コンピュータは、ステップ510~514およびステップ516~520を同時にまたは実質的に同時に実施してもよいことに留意されたい。
【0066】
その後、コンピュータは、グラウンド・トゥルース間接関数呼び出しターゲットのセットと類似の特徴を有する類似の関数の1つまたは複数のクラスタを識別するために、類似の関数のクラスタのサーチを実施する(ステップ522)。コンピュータは、次いで、間接関数呼び出しターゲットの拡大されたセットを形成するために、サーチに基づいて、類似の関数の1つまたは複数のクラスタを含めるようにグラウンド・トゥルース間接関数呼び出しターゲットのセットを拡大する(ステップ524)。さらに、コンピュータは、間接関数呼び出しターゲットの拡大されたセットを使用して、プログラムのファズ・テスト、脆弱性検出、またはエクスプロイト発見のうちの少なくとも1つを実施する(ステップ526)。その後、プロセスは終了する。
【0067】
図6をここで参照すると、例証的実施形態によるグラウンド・トゥルース間接関数呼び出しターゲットのセットを拡大するためのプロセスを示すフローチャートが示されている。図6に示されたプロセスは、例えば、図1のサーバ104または図2のデータ処理システム200などのコンピュータに実装されてもよい。例えば、図6に示されたプロセスは、図2の間接関数呼び出しターゲット識別器218に実装されてもよい。
【0068】
プロセスは、コンピュータが、明示的データ依存性分析を使用して、プログラムのソフトウェア・モジュール間で関数アドレスを渡す明示的データ・フローのセットを決定するときに始まる(ステップ602)。さらに、コンピュータは、プログラムの明示的データ依存性分析および動的実行分析の結果から、グラウンド・トゥルース間接関数呼び出しターゲットのセットを生成する(ステップ604)。さらに、コンピュータは、グラフ・ニューラル・ネットワークによって生成された特徴埋め込みに基づいて類似のターゲット関数を識別することによって、グラウンド・トゥルース間接関数呼び出しターゲットのセットを拡大する(ステップ606)。このように、コンピュータは、グラフ・ニューラル・ネットワークを使用して、グラウンド・トゥルース・データセット内で識別された関数に類似の特徴埋め込みを伴うターゲット関数を識別することによって、その複雑なデータ・フローに起因して明示的データ依存性分析および動的実行分析で見落とされたこれらのターゲット関数を識別する。その後、プロセスは終了する。
【0069】
このように、本発明の例証的実施形態は、ソフトウェア内の間接関数呼び出しターゲットを識別するためのコンピュータ実行方法、コンピュータ・システム、およびコンピュータ・プログラム製品を提供する。本発明の様々な実施形態の説明を例証のために提示してきたが、網羅的であること、または、開示された実施形態に限定されることを意図するものではない。多くの変更形態および変形形態が、説明される実施形態の範囲から逸脱することなく、当業者には明らかであろう。本明細書で使用される専門用語は、実施形態の原理、実用的応用、もしくは市場で見つかる技術に対する技術的改善を最もよく説明するように、または、本明細書で開示された実施形態を当業者が理解できるように、選ばれた。
図1
図2
図3
図4
図5
図6
【手続補正書】
【提出日】2024-07-01
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピュータの処理によりソフトウェア内の間接関数呼び出しターゲット識別のための方法であって、
明示的データ依存性分析を使用して、プログラムのソフトウェア・モジュール間で関数アドレスを渡す明示的データ・フローのセットを決定することと、
前記明示的データ依存性分析および前記プログラムの動的実行分析の結果から、間接関数呼び出しターゲットのセットを生成することと、
グラフ・ニューラル・ネットワークによって生成された特徴埋め込みに基づいて類似のターゲット関数を識別することによって、間接関数呼び出しターゲットの前記セットを拡大することと
を含む、方法。
【請求項2】
前記プログラムのソース・コードの静的分析に基づく前記プログラムの関数の特徴を含む前記プログラムに対応する関数呼び出しグラフを生成することと、
前記プログラムの前記関数呼び出しグラフを使用して前記プログラムの前記関数の前記特徴を識別するようにグラフ・ニューラル・ネットワークを訓練することと
をさらに含む、請求項1に記載の方法。
【請求項3】
訓練済みのグラフ・ニューラル・ネットワークを使用して、前記プログラムの関数の特徴に対応する前記特徴埋め込みを生成することと、
前記プログラムの前記関数の前記特徴に対応する前記特徴埋め込みに基づく類似の特徴を伴う前記プログラムの類似の関数を同じクラスタ内に置くことと
をさらに含む、請求項1に記載の方法。
【請求項4】
間接関数呼び出しターゲットに対応する前記プログラムのモジュール間のデータ依存性を識別するために、前記プログラムのソース・コードに対して前記明示的データ依存性分析を実施することと、
間接関数呼び出しターゲットを識別するために、前記プログラムのバイナリに対して前記動的実行分析を実施することと、
前記ソース・コードの前記明示的データ依存性分析および前記プログラムの前記バイナリの前記動的実行分析に基づいて、グラウンド・トゥルース間接関数呼び出しターゲットのセットを生成することと
をさらに含む、請求項1に記載の方法。
【請求項5】
グラウンド・トゥルース間接関数呼び出しターゲットの前記セットを伴う類似の特徴を有する類似の関数の1つまたは複数のクラスタを識別するために、類似の関数のクラスタのサーチを実施することと、
間接関数呼び出しターゲットの拡大されたセットを形成するために、前記サーチに基づいて、類似の関数の前記1つまたは複数のクラスタを含めるためにグラウンド・トゥルース間接関数呼び出しターゲットの前記セットを拡大することと
をさらに含む、請求項4に記載の方法。
【請求項6】
間接関数呼び出しターゲットの前記拡大されたセットを使用して、前記プログラムのファズ・テスト、脆弱性検出、またはエクスプロイト発見のうちの少なくとも1つを実施すること
をさらに含む、請求項5に記載の方法。
【請求項7】
関数類似性が、クラスタリング・アルゴリズムによって決定される、請求項1に記載の方法。
【請求項8】
関数埋め込みのセットが、前記プログラムのそれぞれの各関数のために生成される、請求項1に記載の方法。
【請求項9】
コンパイラまたはプログラム分析ツールのうちの1つが、前記明示的データ依存性分析のために使用され、前記プログラムの関数呼び出しグラフおよび関数特徴に基づいて訓練された前記グラフ・ニューラル・ネットワークが、類似のターゲット関数を含めることによって類似の関数をサーチするために使用される、請求項1に記載の方法。
【請求項10】
ソフトウェア内の間接関数呼び出しターゲット識別のためのコンピュータ・システムであって、
バス・システムと、
前記バス・システムに接続されたストレージ・デバイスであって、プログラム命令を格納する、ストレージ・デバイスと、
前記バス・システムに接続されたプロセッサであって、
明示的データ依存性分析を使用して、プログラムのソフトウェア・モジュール間で関数アドレスを渡す明示的データ・フローのセットを決定すること、
前記明示的データ依存性分析および前記プログラムの動的実行分析の結果から、間接関数呼び出しターゲットのセットを生成すること、ならびに
グラフ・ニューラル・ネットワークによって生成された特徴埋め込みに基づいて類似のターゲット関数を識別することによって、間接関数呼び出しターゲットの前記セットを拡大すること
を行うための前記プログラム命令を実行する、プロセッサと
を備える、コンピュータ・システム。
【請求項11】
前記プロセッサが、
前記プログラムのソース・コードの静的分析に基づく前記プログラムの関数の特徴を含む前記プログラムに対応する関数呼び出しグラフを生成すること、および
前記プログラムの前記関数呼び出しグラフを使用して前記プログラムの前記関数の前記特徴を識別するようにグラフ・ニューラル・ネットワークを訓練すること
を行うための前記プログラム命令をさらに実行する、請求項10に記載のコンピュータ・システム。
【請求項12】
前記プロセッサが、
訓練済みのグラフ・ニューラル・ネットワークを使用して、前記プログラムの関数の特徴に対応する前記特徴埋め込みを生成すること、および
前記プログラムの前記関数の前記特徴に対応する前記特徴埋め込みに基づく類似の特徴を伴う前記プログラムの類似の関数を同じクラスタ内に置くこと
を行うための前記プログラム命令をさらに実行する、請求項10に記載のコンピュータ・システム。
【請求項13】
前記プロセッサが、
間接関数呼び出しターゲットに対応する前記プログラムのモジュール間のデータ依存性を識別するために、前記プログラムのソース・コードに対して前記明示的データ依存性分析を実施すること、
間接関数呼び出しターゲットを識別するために、前記プログラムのバイナリに対して前記動的実行分析を実施すること、ならびに
前記ソース・コードの前記明示的データ依存性分析および前記プログラムの前記バイナリの前記動的実行分析に基づいて、グラウンド・トゥルース間接関数呼び出しターゲットのセットを生成すること
を行うための前記プログラム命令をさらに実行する、請求項10に記載のコンピュータ・システム。
【請求項14】
前記プロセッサが、
グラウンド・トゥルース間接関数呼び出しターゲットの前記セットを伴う類似の特徴を有する類似の関数の1つまたは複数のクラスタを識別するために、類似の関数のクラスタのサーチを実施すること、および
間接関数呼び出しターゲットの拡大されたセットを形成するために、前記サーチに基づいて、類似の関数の前記1つまたは複数のクラスタを含めるためにグラウンド・トゥルース間接関数呼び出しターゲットの前記セットを拡大すること
を行うための前記プログラム命令をさらに実行する、請求項13に記載のコンピュータ・システム。
【請求項15】
ソフトウェア内の間接関数呼び出しターゲット識別のためのコンピュータ・プログラムであって、コンピュータに、請求項1~9のいずれか1項に記載の方法を実施させるように前記コンピュータによって実行可能なコンピュータ・プログラム
【請求項16】
請求項15に記載のコンピュータ・プログラムをコンピュータ可読に格納する記録媒体。
【国際調査報告】