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

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

▶ マイクロソフト テクノロジー ライセンシング,エルエルシーの特許一覧

特表2024-521135コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用
<>
  • 特表-コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用 図1
  • 特表-コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用 図2
  • 特表-コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用 図3
  • 特表-コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用 図4
  • 特表-コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用 図5
  • 特表-コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用 図6
  • 特表-コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用 図7
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-05-28
(54)【発明の名称】コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用
(51)【国際特許分類】
   G06F 11/34 20060101AFI20240521BHJP
   G06F 11/36 20060101ALI20240521BHJP
【FI】
G06F11/34
G06F11/36 136
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023572175
(86)(22)【出願日】2022-05-02
(85)【翻訳文提出日】2024-01-05
(86)【国際出願番号】 US2022072044
(87)【国際公開番号】W WO2022246359
(87)【国際公開日】2022-11-24
(31)【優先権主張番号】LU500189
(32)【優先日】2021-05-21
(33)【優先権主張国・地域又は機関】LU
(81)【指定国・地域】
(71)【出願人】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100118902
【弁理士】
【氏名又は名称】山本 修
(74)【代理人】
【識別番号】100106208
【弁理士】
【氏名又は名称】宮前 徹
(74)【代理人】
【識別番号】100196508
【弁理士】
【氏名又は名称】松尾 淳一
(72)【発明者】
【氏名】モーラ,ジョーディ
【テーマコード(参考)】
5B042
【Fターム(参考)】
5B042MC40
(57)【要約】
コード実行ログデータにペイロードデータが含まれるのを防ぐためにエントロピーを使用すること。いくつかの実施形態は、コード実行ログデータに関連付けられるペイロードデータアイテムが、所定のエントロピー閾値を超えるエントロピーを有すると判定し、ペイロードデータアイテムと相互作用した特定の実行可能コードを識別する。いくつかの実施形態は、次いで、特定の実行可能コードの実行記録にペイロードデータアイテムが含まれるのを除外する予防アクションを行う。予防アクションの例には、ペイロードデータアイテムがコンピュータシステムからエクスポートされるのを防止すること、ペイロードデータアイテムがコード実行ログデータに含まれるのを防止すること、および特定の実行可能コードを参照してペイロードデータアイテムをブロックリストに追加することが含まれる。
【特許請求の範囲】
【請求項1】
コード実行ログデータにペイロードデータが含まれるのを防止するための、プロセッサ(101)を含むコンピュータシステム(101)で実装される方法(600)であって、
コード実行ログデータに関連付けられるペイロードデータアイテムが、所定のエントロピー閾値を超えるエントロピーを有すると判定するステップ(203)と、
前記ペイロードデータアイテムと相互作用した特定の実行可能コードを識別するステップ(204)と、
前記特定の実行可能コードの実行記録に前記ペイロードデータアイテムが含まれるのを除外する予防アクションを行うステップ(206)と
を含む方法。
【請求項2】
請求項1に記載の方法であって、前記ペイロードデータアイテムが前記所定のエントロピー閾値を超えるエントロピーを有すると判定するステップは、前記ペイロードデータアイテムが前記所定のエントロピー閾値を超える固有エントロピーを有すると判定するステップ(203a)を含む、方法。
【請求項3】
請求項2に記載の方法であって、前記ペイロードデータアイテムが前記所定のエントロピー閾値を超える固有エントロピーを有すると判定するステップは、
前記ペイロードデータアイテム内のエントロピーのビット数と、前記ペイロードデータアイテム内の総ビット数との比を計算するステップと、
前記ペイロードデータアイテムの圧縮性を計算するステップと
のうちの少なくとも一方を含む、方法。
【請求項4】
請求項1に記載の方法であって、前記ペイロードデータアイテムが前記所定のエントロピー閾値を超えるエントロピーを有すると判定するステップは、前記ペイロードデータアイテムが前記所定のエントロピー閾値を超える文脈エントロピーを有すると判定するステップ(203b)を含み、前記文脈エントロピーは、複数の関連するコード実行ログから識別された複数の関連するペイロードデータアイテムに関する、方法。
【請求項5】
請求項1から4のいずれか一項に記載の方法であって、前記ペイロードデータアイテムと相互作用した前記特定の実行可能コードを識別するステップは、前記ペイロードデータアイテムを消費した実行可能コードを識別するステップを含む、方法。
【請求項6】
請求項1から4のいずれか一項に記載の方法であって、前記ペイロードデータアイテムと相互作用した前記特定の実行可能コードを識別するステップは、前記ペイロードデータアイテムを生成した実行可能コードを識別するステップを含む、方法。
【請求項7】
請求項1から6のいずれか一項に記載の方法であって、前記ペイロードデータアイテムと相互作用した前記特定の実行可能コードを識別するステップは、特定の実行可能命令を識別するステップを含む、方法。
【請求項8】
請求項1から6のいずれか一項に記載の方法であって、前記ペイロードデータアイテムと相互作用した前記特定の実行可能コードを識別するステップは、特定の関数を識別するステップを含む、方法。
【請求項9】
請求項1から8のいずれか一項に記載の方法であって、前記予防アクションは、前記ペイロードデータアイテムが前記コンピュータシステムからエクスポートされるのを防止するステップを含む、方法。
【請求項10】
請求項1から9のいずれか一項に記載の方法であって、前記予防アクションは、前記ペイロードデータアイテムが前記コード実行ログデータに含まれるのを防止するステップを含む、方法。
【請求項11】
請求項10に記載の方法であって、前記ペイロードデータアイテムが前記コード実行ログデータに含まれるのを防止するステップは、前記コード実行ログデータ内の前記ペイロードデータアイテムを、(i)代替データと、(ii)前記ペイロードデータに対する1つまたは複数の制約と、(iii)前記特定の実行可能コードに関するコードフローオーバーライドとのうちの1つまたは複数で置き換えるステップを含む、方法。
【請求項12】
請求項1から8のいずれか一項に記載の方法であって、前記予防アクションは、前記特定の実行可能コードを参照して前記ペイロードデータアイテムをブロックリスト(114)に追加するステップを含み、前記ブロックリストは、後で生成されるコード実行ログデータに前記ペイロードデータアイテムが含まれるのを防止するように構造化される、方法。
【請求項13】
請求項1から12のいずれか一項に記載の方法であって、前記ペイロードデータアイテムが前記所定のエントロピー閾値を超えるエントロピーを有すると判定するステップは、前記特定の実行可能コードへの参照に少なくとも基づいて、ブロックリスト(114)から前記ペイロードデータアイテムを識別するステップを含む、方法。
【請求項14】
請求項1から13のいずれか一項に記載の方法であって、前記ペイロードデータアイテムが前記所定のエントロピー閾値を超えるエントロピーを有すると判定するステップは、前記コード実行ログデータの後処理中に前記ペイロードデータアイテムを識別するステップを含む、方法。
【請求項15】
請求項1から14のいずれか一項に記載の方法であって、ペイロードデータアイテムの追加インスタンスまたはその派生物が別の実行可能コードの別の実行記録に含まれるのを除外するために過渡的に適用される方法。
【発明の詳細な説明】
【技術分野】
【0001】
[001]本開示は、個人識別情報(PII)、暗号鍵、およびパスワードなどの機密ペイロードデータが、再生可能な実行トレースおよび他の実行ログに含まれるのを防止するシステム、方法、およびデバイスに関する。
【背景技術】
【0002】
[002]望ましくないソフトウェア挙動/障害を追跡して修正することは、ソフトウェア開発の中核的な活動である。望ましくないソフトウェア挙動には、実行クラッシュ、ランタイム例外、遅い実行パフォーマンス、不正なデータ結果、データ破損など、多くのものが含まれることがある。望ましくないソフトウェア挙動は、データ入力、ユーザ入力、競合状態(例えば共有リソースへのアクセス時)など様々な要因によってトリガされる。様々なトリガを仮定して、望ましくないソフトウェア挙動はまれであり、一見ランダムに見えることが多く、再現するのが非常に難しい。そのため、所与の望ましくないソフトウェア挙動を開発者が識別するのは非常に時間がかかり困難であることが多い。望ましくないソフトウェア挙動が識別されても、その根本原因を決定するのに再び時間がかかり困難であることが多い。
【0003】
[003]開発者は、様々な手法を使用して、望ましくないソフトウェア挙動を識別し、次いで、望ましくないソフトウェア挙動を引き起こすアプリケーションのコード内の1つまたは複数の場所を識別する。例えば、開発者は、アプリケーションのコードの様々な部分を様々な入力に対してテストすることがよくある(単体テストなど)。別の例として、開発者は、(例えば、ブレークポイント/ウォッチポイントを設定することや、コードが実行されるときにコードラインなどをステップ実行することによって)デバッガでのアプリケーションのコードの実行について推論することが多い。別の例として、開発者はプロファイラでコード実行挙動(例えば、タイミング、カバレッジなど)を観察することがよくある。別の例として、開発者は診断コード(例えばトレースステートメント)をアプリケーションのコードに挿入することがよくある。これらの各アクティビティは、対象アプリケーションに含まれる診断コードによって生成されるイベントログなどのコード実行ログによって支援される。
【0004】
[004]従来の診断ツール(例えばデバッガやプロファイラなど)は「ライブ」順方向実行コードで動作しているが、新しい形の診断ツールにより、「履歴」デバッグ(「タイムトラベル」または「リバース」デバッグとも呼ばれる)が可能になり、実行可能なコンピュータプログラムの実行コンテキスト(例えばプロセスやスレッドなど)の少なくとも一部が、1つまたは複数のトレースファイル(すなわち実行トレース)を含むコード実行ログに記録される。いくつかのトレース技法を使用して、実行トレースは、「ビット精度」履歴実行トレースデータを含む。これにより、トレースされた実行コンテキストの任意の記録された部分を、個々の命令(例えばマシンコード命令や中間言語コード命令など)の粒度まで仮想的に(例えばエミュレーションを介して)「再生」できる。したがって、ビット精度トレースデータを使用して、診断ツールにより、開発者は、「ライブ」順方向実行に限定される従来のデバッグとは対照的に、実行可能プログラムの記録された以前の実行について推論することができる。例えば、再生可能な実行トレースを使用して、一部の履歴デバッガは、例えば、順方向と逆方向との両方のブレークポイント/ウォッチポイントを可能する、またはコードを順方向と逆方向との両方でステップ実行できるようにするユーザエクスペリエンスを提供する。一方、一部の履歴プロファイラは、以前に実行されたコードからコード実行挙動(例えばタイミングやカバレッジ)を導出することができる。
【0005】
[005]再生可能な実行トレースは、記録された各命令へのあらゆる入力およびそこからのあらゆる出力を明示的にまたは暗黙的に含む。したがって、再生可能な実行トレースは、トレースされたコードによって消費または生成されたすべてのデータを含む。トレースされたコードがPII、暗号鍵、パスワードなどの機密データアイテムを消費または生成するとき、そのトレースされたコードの実行トレースは、これらの機密データアイテムも含む。アプリケーションの診断コードによって生成されるイベントログなど、それほど厳密ではない形式のコード実行ログも、機密データアイテムを含むことがある。
【発明の概要】
【0006】
[006]本明細書で述べる少なくともいくつかの実施形態は、コード実行ログデータにペイロードデータが含まれるのを防止するためにエントロピー分析を使用することによってデータセキュリティを向上させる。これらの実施形態は、特定のデータアイテムを機密データアイテム(例えば、PII、暗号鍵、パスワードなど)とみなすべきであることを効率的にかつ確実に判定することができるという技術的課題に対処する。これらの実施形態は、機密データアイテムが、機密性の低いデータアイテム(例えば環境変数や数学的定数など)と比較したときに比較的高いエントロピーを有する傾向があるという本発明者の観察に基づいている。いくつかの実施形態では、データアイテムのエントロピーは、固有に(すなわち、データアイテムの全長に対するエントロピーのビット数の比を見ることによって)、および/または文脈的に(すなわち、他のコード実行ログデータセット内のデータアイテムの値と比較したときの、あるコード実行ログデータセット内の所与のデータアイテムの値の一意性を決定することによって)考慮される。機密データアイテムが比較的高いエントロピーを有することを認識して、これらの実施形態は、高エントロピーのデータアイテムを識別し、再生可能な実行トレースやイベントログなどのコード実行ログデータにそれらのデータアイテムが含まれるのを除外する。
【0007】
[007]いくつかの実施形態では、コード実行ログデータから高エントロピーデータアイテムを除外することは、コード実行ログデータを介して機密データアイテムが不用意に露出されるのを防止することによって、データセキュリティを促進する技術的効果を有する。さらに、高エントロピーデータアイテムをコード実行ログデータから除外することで、容易に圧縮可能でないことが多い高エントロピーデータの除去を含めてデータの一部を除去することによって、コード実行ログデータのサイズが減少され、これは、コンピューティングリソースを節約するという追加の技術的効果を有する。例えば、コード実行ログデータのサイズを減少させることで、そのログデータを分析するときに処理リソースが節約され、コード実行ログデータを記憶および転送するために必要とされるストレージおよびネットワークリソースが節約される。
【0008】
[008]上記のことに従って、いくつかの実施形態では、方法、システム、およびコンピュータ製品が、コード実行ログデータにペイロードデータが含まれるのを防止するためにエントロピーを使用することを対象とする。これらの実施形態は、コード実行ログデータに関連付けられたペイロードデータアイテムが、所定のエントロピー閾値を超えるエントロピーを有すると判定する。ペイロードデータアイテムが所定のエントロピー閾値を超えるエントロピーを有するという判定に基づいて、これらの実施形態は、ペイロードデータアイテムと相互作用した特定の実行可能コードを識別する。次いで、これらの実施形態は、特定の実行可能コードの実行記録にペイロードデータアイテムが含まれるのを除外する予防アクションを行う。
【0009】
[009]本明細書で述べる少なくともいくつかの追加または代替の実施形態は、ペイロードデータ自体の分析に依拠しないいくつかの形態の実行トレース分析(例えば、コードおよび/またはデータフロー分析、メモリ局所性分析、メモリアクセスパターン分析、キャッシュ使用量分析、競合状態分析、バッファオーバーフロー分析、従来のデバッグなど)を行う能力を損なうことなく、実行トレースから最大ですべてのペイロードデータを除去することによって、データセキュリティを向上させる。例えば、いくつかの実施形態は、実行トレースを処理してペイロードデータアイテムを識別する。識別されたペイロードデータアイテムごとに、いくつかの実施形態は、データアイテムと相互作用したコードの実行がデータアイテムに課した制約を決定し、実行トレース内のデータアイテムの値をそれらの制約を維持する情報で置き換える。いくつかの実施形態では、この情報は、実行可能コード自体、データアイテムのメモリアドレス、および/またはコードフローを保存するように構造化されたデータ(例えば、データアイテムに関する置換値、データアイテムに関する有効値の仕様、従うべきコードパスの命令など)を含む。
【0010】
[010]いくつかの実施形態は、実行トレースからペイロードデータを除外することは、実行トレースを介して機密データアイテムが不用意に露出されるのを防止することによって、データセキュリティを促進する技術的効果を有する。さらに、いくつかの実施形態では、実行トレースからペイロードデータを除外することで、それらの実行トレースの圧縮率を大幅に増加させることができる。いずれにせよ、実行トレースからペイロードデータを除外することで、実行トレースのサイズを大幅に減少させることができ、これは、コンピューティングリソースを節約するという追加の技術的効果を有する。例えば、実行トレースのサイズを減少させることで、それらの実行トレースを分析するときに処理リソースが節約され、実行トレースを記憶および転送するときに必要とされるストレージとネットワークリソースが節約される。
【0011】
[011]上記のことに従って、いくつかの実施形態では、方法、システム、およびコンピュータ製品が、実行トレースからペイロードデータを除去することを対象とする。これらの実施形態は、実行トレース内のペイロードデータアイテムを識別し、ペイロードデータアイテムと相互作用した特定の実行可能コードを識別する。ペイロードデータアイテムおよび特定の実行可能コードに基づいて、これらの実施形態は、特定の実行可能コードの実行がペイロードデータアイテムに課している1つまたは複数の制約を決定し、次いで、実行トレース内のペイロードデータアイテムの値を1つまたは複数の制約を維持する情報で置き換える。様々な実施形態において、1つまたは複数の制約は、特定の実行可能コードのバイト、ペイロードデータアイテムに対応するメモリアドレス、またはコードフローを保存するように構造化されたデータのうちの1つまたは複数を含み、1つまたは複数の制約を維持する情報は、特定の実行可能コードのバイト、ペイロードデータアイテムに対応するメモリアドレス、またはコードフローを保存するように構造化されたデータのうちの1つまたは複数を含む。
【0012】
[012]この概要は、発明を実施するための形態の項で以下にさらに述べる一部の概念を簡略化した形で紹介するために提供される。この概要は、特許請求される主題の主要な特徴または本質的な特徴を識別することを意図されたものではなく、また、特許請求される主題の範囲を決定する際の補助として使用されることを意図されたものでもない。
【0013】
[013]本発明の上記および他の利点および特徴をどのように得ることができるかの方法を述べるために、簡単に上述した本発明のより特定的な説明を、添付図面に示されるその特定の実施形態を参照して行う。これらの図面は本発明の典型的な実施形態のみを示しており、したがって本発明の範囲を限定するものとみなされるべきではないという理解のもとで、添付図面を使用して本発明をさらに具体的にかつ詳細に記述して説明する。
【図面の簡単な説明】
【0014】
図1】[014]コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用、または実行トレースからのペイロードデータの除去のうちの1つまたは複数を容易にする例示的なコンピューティング環境を示す図である。
図2】[015]コード実行ログデータにペイロードデータが含まれるのを防止するためにエントロピーを使用するように構成されたデバッグコンポーネントの追加の詳細を示す図である。
図3】[016]実行トレースからペイロードデータを除去するように構成されたデバッグコンポーネントの詳細を示す図である。
図4】[017]図1のコンピュータシステムが1つまたは複数のネットワークを介して1つまたは複数の他のコンピュータシステムに接続される例示的なコンピューティング環境を示す図である。
図5】[018]実行トレースの一例を示す図である。
図6】[019]コード実行ログデータにペイロードデータが含まれるのを防止するためにエントロピーを使用するための例示的な方法の流れ図である。
図7】[020]実行トレースからペイロードデータを除去するための例示的な方法の流れ図を示す図である。
【発明を実施するための形態】
【0015】
[021]言及したように、本明細書で述べる少なくともいくつかの実施形態は、(i)コード実行ログデータ(実行トレースまたはイベントログなど)にペイロードデータが含まれるのを防ぐためにエントロピーを使用するための実施形態、または(ii)実行トレースからペイロードデータを除去するための実施形態のうちの1つまたは複数を対象とする。いずれの実施形態も、データセキュリティを促進し、コード実行ログデータ/実行トレースのサイズを減少させると共に、特定のデータアイテムが機密データアイテムであるとみなされるべきであることを効率的にかつ確実に決定するという技術的課題に対処する。
【0016】
[022]いくつかの実施形態では、本明細書での実施形態によって使用される実行トレースは、様々な履歴デバッグ技術のうちの1つまたは複数によって生成される。一般に、履歴デバッグ技術は、実行コンテキスト(例えばプロセスやスレッドなど)の状態を、対応する実行可能なコンピュータプログラムのコードが実行されるときに様々な時点で記録または再構築して、その実行コンテキストをその実行状態から少なくとも部分的に再生できるようにする。その仮想実行の忠実度は、利用可能なトレースされた実行状態によって異なる。
【0017】
[023]一例では、本明細書でタイムトラベルデバッグと呼ぶいくつかのクラスの履歴デバッグ技術は、実行コンテキストのビット精度トレースを継続的に記録する。このビット精度トレースを後で使用して、実行コンテキストの以前の実行を、個々のコード命令の忠実度に至るまで忠実に再生することができる。例えば、ビット精度トレースは、実行コンテキストの以前の実行における少なくとも1時点に関する初期プロセッサ状態を再現するのに十分な情報を、その時点以降に実行されたときに実行可能命令によって読み取られたデータ値(例えば、メモリ読取値)と共に、(例えば、プロセッサレジスタのスナップショットを記録することによって)記録する。次いでこのビット精度トレースを使用して、記録された読取値を命令に提供することに基づいて、それらの実行可能命令の実行(初期プロセッサ状態から始めて)を再生することができる。
【0018】
[024]本明細書で分岐トレースデバッグと呼ぶ別のクラスの履歴デバッグ技術は、プロセッサ分岐トレースを含む(すなわち、分岐が行われたか否かの記録を含む)ダンプまたはスナップショット(例えばクラッシュダンプ)からの逆算に基づいて、実行コンテキストの状態の少なくとも一部を再構築することに依拠する。これらの技術は、このダンプまたはスナップショットからの値(例えばメモリおよびレジスタ)から始まり、分岐トレースを使用して、コード実行フローを少なくとも部分的に決定し、実行コンテキストの一部として実行されたコード命令を繰り返し順方向および逆方向で再生して、コード命令によって使用される中間データ値(例えばレジスタおよびメモリ)を、それらの値が定常状態に達するまで再構築する。これらの技術は、どれだけ遡ってデータ値を再構築することができるか、および再構築することができるデータ値の数が制限されることがある。それにもかかわらず、再構築された履歴実行データを履歴デバッグに使用することができる。
【0019】
[025]本明細書で再生およびスナップショットデバッグと呼ぶさらに別のクラスの履歴デバッグ技術は、実行中に実行コンテキストのメモリスペースおよびプロセッサレジスタの完全なスナップショットを定期的に記録する。実行コンテキストが、実行コンテキスト自体のメモリ以外のソース、または非決定的ソースからのデータに依拠する場合、いくつかの実施形態では、これらの技術は、スナップショットと共にそのようなデータも記録する。これらの技術は、次にスナップショット内のデータを使用して、スナップショット間で実行可能プログラムのコードの実行を再生する。
【0020】
[026]図1は、コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用、または実行トレースからのペイロードデータの除去のうちの1つまたは複数を容易にする例示的なコンピューティング環境100を示す。図示されているように、コンピューティング環境100は、プロセッサ102(または複数のプロセッサ)を含むコンピュータシステム101(例えば、専用または汎用コンピューティングデバイス)を含む。図示されているように、プロセッサ102に加えて、コンピュータシステム101は、システムメモリ103、永続ストレージ104、および場合によってはネットワークデバイス105(または複数のネットワークデバイス)も含み、これらは、少なくとも1つの通信バス106を使用して、互いにおよびプロセッサ102に通信可能に結合される。
【0021】
[027]本発明の範囲内の実施形態は、コンピュータ実行可能命令および/またはデータ構造を搬送または記憶するための物理媒体および他のコンピュータ可読媒体を含むことができる。そのようなコンピュータ可読媒体は、汎用または専用コンピュータシステムによってアクセスできる任意の利用可能な媒体でよい。コンピュータ実行可能命令および/またはデータ構造を記憶するコンピュータ可読媒体は、コンピュータ記憶媒体である。コンピュータ実行可能命令および/またはデータ構造を搬送するコンピュータ可読媒体は、伝送媒体である。したがって、限定ではなく例として、本発明の実施形態は、少なくとも2つの明確に異なる種類のコンピュータ可読媒体、すなわちコンピュータ記憶媒体と伝送媒体とを備えることができる。
【0022】
[028]コンピュータ記憶媒体は、コンピュータ実行可能命令および/またはデータ構造を記憶する物理記憶媒体(例えば、システムメモリ103および/または永続ストレージ104)である。物理的な記憶媒体は、RAM、ROM、EEPROM、ソリッドステートドライブ(「SSD」)、フラッシュメモリ、相変化メモリ(「PCM」)、光ディスクストレージ、磁気ディスク記憶装置もしくは他の磁気記憶デバイスなどのコンピュータハードウェア、または任意の他のハードウェア記憶デバイスを含み、それを使用して、コンピュータ実行可能命令またはデータ構造の形式でプログラムコードを記憶することができ、プログラムコードは、本発明の開示される機能を実装するために汎用または専用コンピュータシステムによってアクセスおよび実行することができる。
【0023】
[029]伝送媒体は、ネットワークおよび/またはデータリンクを含むことができ、ネットワークおよび/またはデータリンクは、コンピュータ実行可能命令またはデータ構造の形式でプログラムコードを搬送するために使用することができ、汎用または専用コンピュータによってアクセスすることができる。「ネットワーク」は、コンピュータシステムおよび/またはモジュールおよび/または他の電子デバイス間での電子データの移送を可能にする1つまたは複数のデータリンクとして定義される。情報がネットワーク(例えばネットワークデバイス105)または別の通信接続(有線、無線、または有線と無線との組合せのいずれか)を介してコンピュータシステムに転送または提供されるとき、コンピュータシステムは、その接続を伝送媒体とみなすことができる。上記の組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
【0024】
[030]さらに、様々なコンピュータシステムコンポーネントに達すると、コンピュータ実行可能命令またはデータ構造の形式でのプログラムコードは、伝送媒体からコンピュータ記憶媒体に(またはその逆に)自動的に転送されることがある。例えば、ネットワークまたはデータリンクを介して受信されたコンピュータ実行可能命令またはデータ構造を、ネットワークインターフェースモジュール(図示せず)内のRAMにバッファし、次いで、最終的にコンピュータシステムのRAM(例えばシステムメモリ103)および/またはコンピュータシステムでの低揮発性コンピュータ記憶媒体(例えば永続ストレージ104)に転送することができる。したがって、コンピュータ記憶媒体は、さらに(または主に)伝送媒体を利用するコンピュータシステムコンポーネントに含めることができることを理解されたい。
【0025】
[031]コンピュータ実行可能命令は、例えば、1つまたは複数のプロセッサで実行されるときに汎用コンピュータシステム、専用コンピュータシステム、または専用処理デバイスに特定の機能または機能のグループを実行させる命令およびデータを含む。コンピュータ実行可能命令は、例えば、マシンコード命令(例えば、バイナリ)、アセンブリ言語などの中間フォーマット命令、またはさらにはソースコードでよい。
【0026】
[032]パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、メッセージプロセッサ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な家庭用電化製品、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、携帯電話、PDA、タブレット、ポケットベル、ルータ、スイッチなどを含む多くのタイプのコンピュータシステム構成と共にネットワークコンピューティング環境で本発明を実施することができることを当業者は理解されよう。本発明は、ネットワークを介して(有線データリンク、無線データリンク、または有線データリンクと無線データリンクとの組合せのいずれかによって)リンクされたローカルコンピュータシステムとリモートコンピュータシステムとがどちらもタスクを実行する分散システム環境で実施することもできる。したがって、分散システム環境では、コンピュータシステムは、複数の構成コンピュータシステムを含むことがある。分散システム環境では、プログラムモジュールは、ローカルメモリ記憶デバイスとリモートメモリ記憶デバイスとの両方に位置されることがある。
【0027】
[033]また、本発明をクラウドコンピューティング環境で実施することができることを当業者は理解されよう。クラウドコンピューティング環境は分散型であり得るが、これは必須ではない。分散型の場合、クラウドコンピューティング環境は、組織内で国際的に分散される、および/または複数の組織にまたがって所有されたコンポーネントを有することがある。本明細書および以下の特許請求の範囲では、「クラウドコンピューティング」は、構成可能なコンピューティングリソース(例えば、ネットワーク、サーバ、ストレージ、アプリケーション、およびサービス)の共有プールへのオンデマンドネットワークアクセスを可能にするためのモデルとして定義される。「クラウドコンピューティング」の定義は、適切に展開されたときにそのようなモデルから得ることができる他の多くの利点のいずれにも限定されない。
【0028】
[034]クラウドコンピューティングモデルは、オンデマンドセルフサービス、ブロードネットワークアクセス、リソースプーリング、迅速な弾力性、計測可能なサービスなどの様々な特性から構成することができる。クラウドコンピューティングモデルは、例えば、Software as a Service(「SaaS」)、Platform as a Service(「PaaS」)、およびInfrastructure as a Service(「IaaS」)などの様々なサービスモデルの形式であってもよい。クラウドコンピューティングモデルは、プライベートクラウド、コミュニティクラウド、パブリッククラウド、ハイブリッドクラウドなどの様々な展開モデルを使用して展開することもできる。
【0029】
[035]クラウドコンピューティング環境などのいくつかの実施形態は、それぞれが1つまたは複数の仮想マシンを実行することができる1つまたは複数のホストを含むシステムを備えることができる。動作中、仮想マシンは動作中のコンピューティングシステムをエミュレートし、オペレーティングシステムおよび場合によっては1つまたは複数の他のアプリケーションをサポートする。いくつかの実施形態では、各ホストは、仮想マシンの観点から抽象化された物理リソースを使用して仮想マシンのための仮想リソースをエミュレートするハイパーバイザを含む。ハイパーバイザは、仮想マシン間の適切な分離も提供する。したがって、任意の所与の仮想マシンの観点から、仮想マシンが物理リソースの外観(例えば仮想リソース)とインターフェースしているだけであっても、ハイパーバイザは、仮想マシンが物理リソースとインターフェースしているかのような錯覚を与える。物理リソースの例には、処理能力、メモリ、ディスクスペース、ネットワーク帯域幅、メディアドライブなどが含まれる。
【0030】
[036]図1に示されるように、いくつかの実施形態では、プロセッサ102は、例えば、処理ユニット107(または複数の処理ユニット)およびメモリキャッシュ108(または複数のメモリキャッシュ)を含む。各処理ユニット107(例えば、プロセッサコア)は、複数の実行ユニット107bのうちの少なくとも1つにマシンコード命令をロードして実行する。これらのマシンコード命令の実行中、命令は、一時記憶場所としてレジスタ107aを使用することができ、メモリキャッシュ108を介してシステムメモリ103内の様々な場所に読み書きすることができる。各処理ユニット107は、プロセッサ命令セットアーキテクチャ(ISA)によって定義されるマシンコード命令を実行する。各プロセッサ102の特定のISAは、プロセッサ製造元およびプロセッサモデルに基づいて異なることがある。一般的なISAには、INTEL, INC.のIA-64およびIA-32アーキテクチャ、ADVANCED MICRO DEVICES, INC.のAMD64アーキテクチャ、ARM HOLDINGS, PLCの様々なAdvanced RISC Machine(「ARM」)アーキテクチャが含まれるが、他のISAも多数存在し、本発明によって使用することができる。一般に理解されているように、マシンコード命令は、プロセッサによって実行可能な、外部(すなわちプロセッサの外)から見えるコードの最小単位である。
【0031】
[037]レジスタ107aは、プロセッサ102のISAに基づいて定義されるハードウェア記憶場所である。レジスタ107aは、それらの命令が実行ユニット107bで実行されるときに、マシンコード命令または処理ユニット107から読み取られる、および/またはそこに書き込まれる。レジスタ107aは一般に、マシンコード命令を実行するための入力として使用するためにメモリキャッシュ108からフェッチされた値を記憶するため、マシンコード命令を実行した結果を記憶するため、プログラム命令カウントを記憶するため、スレッドスタックのメンテナンスをサポートするためなどに使用される。いくつかの実施形態では、レジスタ107aは、マシンコード命令を実行することによって引き起こされる何らかの状態変化を信号通知するため(例えば、算術演算が繰り上げやゼロ結果などであったかどうかを示すため)に使用される「フラグ」を含む。いくつかの実施形態では、レジスタ107aは、1つまたは複数の制御レジスタ(例えば、プロセッサ動作の異なる側面を制御するために使用される)、および/または他のプロセッサモデル固有レジスタ(MSR)を含む。
【0032】
[038]メモリキャッシュ108は、処理ユニット107によるマシンコード命令の実行中に、システムメモリ103のブロックを一時的にキャッシュする。いくつかの実装形態では、メモリキャッシュ108は、アプリケーションコードを記憶するシステムメモリ103の部分をキャッシュする1つまたは複数の「コード」部分と、アプリケーションランタイムデータを記憶するシステムメモリ103の部分をキャッシュする1つまたは複数の「データ」部分とを含む。処理ユニット107が、メモリキャッシュ108にまだ記憶されていないデータ(例えばコードまたはアプリケーションランタイムデータ)を要求した場合、次いで処理ユニット107は「キャッシュミス」を開始し、1つまたは複数のデータブロックがシステムメモリ103からフェッチされ、メモリキャッシュ108に流入される。その際、場合により、メモリキャッシュ108にすでに記憶されている何らかの他のデータを置き換えてシステムメモリ103に「追い出す」。
【0033】
[039]図示されているように、永続ストレージ104は、コンピュータ実行可能命令、および/または実行可能なソフトウェアコンポーネントを表すデータ構造を記憶する。それに対応して、プロセッサ102でのこのソフトウェアの実行中、これらのコンピュータ実行可能命令および/またはデータ構造の1つまたは複数の部分がシステムメモリ103にロードされる。例えば、永続ストレージ104は、デバッグコンポーネント109に対応するコンピュータ実行可能命令および/またはデータ構造を記憶するものとして示され、さらに場合によっては、トレーサコンポーネント110、エミュレーションコンポーネント111、または(1つまたは複数の)アプリケーション112のうちの1つまたは複数に対応するコンピュータ実行可能命令および/またはデータ構造を記憶するものとして示されている。いくつかの実施形態では、永続ストレージ104は、再生可能な実行トレース113(例えば、上述した履歴デバッグ技術のうちの1つまたは複数を使用してトレーサコンポーネント110によって生成される)や、デバッグコンポーネント109によって生成および/または使用される(1つまたは複数の)ブロックリスト114などのデータも記憶する。
【0034】
[040]いくつかの実施形態では、デバッグコンポーネント109の指示の下で、トレーサコンポーネント110は、アプリケーション112の実行を、1つまたは複数の再生可能な実行トレース113に記録または「トレース」する。いくつかの実施形態では、トレーサコンポーネント110は、アプリケーション112の実行が、プロセッサ102上での直接の「ライブ」実行である場合、管理されたランタイムによるプロセッサ102上での「ライブ」実行であるとき、および/またはエミュレーションコンポーネント111を介するエミュレートされた実行であるとき、その実行を記録する。したがって、図1はまた、いくつかの実施形態では、デバッグコンポーネント109およびトレーサコンポーネント110がシステムメモリ103(すなわち、デバッグコンポーネント109’およびトレーサコンポーネント110’)にロードされることを示す。トレーサコンポーネント110’と再生可能な実行トレース113’との間の矢印は、トレーサコンポーネント110’がトレースデータを1つまたは複数の再生可能な実行トレース113’に記録し、次いでこれを1つまたは複数の再生可能な実行トレース113として永続ストレージ104に永続記憶することができることを示す。
【0035】
[041]図5は、実行トレースの一例を示す。特に、図5は、複数のデータストリーム(すなわち、データストリーム501a~501n)を含む実行トレース500を示す。いくつかの実施形態では、各データストリームは、アプリケーション112から実行された異なるスレッドなど、異なる実行コンテキストの実行を表す。一例では、データストリーム501aは、アプリケーション112の第1のスレッドの実行を記録し、データストリーム501nは、アプリケーション112の第nのスレッドを記録する。図示されているように、データストリーム501aは、複数のデータパケット502を含む。データパケット502のそれぞれにログ記録される特定のデータは異なることがあるので、これらのデータパケットは、異なるサイズを有するものとして示されている。いくつかの実施形態では、タイムトラベルデバッグ技術を使用するとき、データパケット502のうちの1つまたは複数は、アプリケーション112のこの第1のスレッドの一部として実行された1つまたは複数の実行可能命令への入力(例えばレジスタ値やメモリ値など)を記録する。いくつかの実施形態では、メモリ値は、メモリキャッシュ108への流入として、および/またはキャッシュされていない読取値として取得される。いくつかの実施形態では、データストリーム501aは、1つまたは複数のキーフレーム(例えばキーフレーム503aおよび503b)も含み、各キーフレームが、キーフレームの時点から始めて順方向に、スレッドの以前の実行を再生できるようにするのに十分な情報(例えば、レジスタおよび/またはメモリ値のスナップショットなど)をキャプチャする。
【0036】
[042]いくつかの実施形態では、実行トレースは、実行された実際のコードも含む。したがって、図5では、各データパケット502が、データ入力部分504(白い部分)およびコード部分505(網掛け部分)を含むものとして示されている。いくつかの実施形態では、各データパケット502のコード部分505は、存在する場合には、対応するデータ入力に基づいて実行される実行可能命令を含む。しかし、他の実施形態では、実行トレースは、実行された実際のコードを省略し、代わりに、実行可能コードへの個別のアクセス(例えばアプリケーション112のコピー)を有することに依拠する。これらの他の実施形態では、各データパケットは、アプリケーションバイナリイメージ内の適切な実行可能命令へのアドレスまたはオフセットを指定する。図示されていないが、実行トレース500は、コード実行の出力のうちの1つまたは複数を記憶するデータストリームを含むことが可能である。データパケットの異なるデータ入力およびコード部分の使用は例示にすぎず、複数のデータパケットの使用などの様々な方法で同じデータを記憶することもできることに留意されたい。
【0037】
[043]複数のデータストリームがある場合、いくつかの実施形態では、これらのデータストリームは、シーケンスイベントを含むことがある。各シーケンスイベントは、スレッドなどの様々な実行コンテキストにわたって順序付け可能なイベントの発生を記録する。一例では、シーケンスイベントは、スレッドによって共有されるメモリへのアクセスなど、スレッド間の相互作用に対応する。したがって、例えば、第1のデータストリーム(例えばデータストリーム501a)にトレースされる第1のスレッドが同期変数に書き込む場合、第1のシーケンスイベントがそのデータストリーム(例えばデータストリーム501a)に記録される。その後、第2のデータストリーム(例えばデータストリーム501n)にトレースされる第2のスレッドがその同期変数から読み取る場合、第2のシーケンスイベントがそのデータストリーム(例えばデータストリーム501n)に記録される。これらのシーケンスイベントは、本来的に順序付けされる。例えば、いくつかの実施形態では、各シーケンスイベントは単調増加する値に関連付けられ、単調増加する値は、シーケンスイベント間の全体の順序を定義する。一例では、第1のデータストリームに記録された第1のシーケンスイベントには値1が与えられ、第2のデータストリームに記録された第2のシーケンスイベントには値2が与えられ、以下同様である。
【0038】
[044]いくつかの実施形態では、デバッグコンポーネント109の指示の下で、エミュレーションコンポーネント111は、再生可能な実行トレース113の1つから取得された実行状態データに基づいて、アプリケーション112などの実行可能エンティティのコードの実行をエミュレートする。したがって、図1は、いくつかの実施形態では、デバッグコンポーネント109およびエミュレーションコンポーネント111がシステムメモリ103(すなわちデバッグコンポーネント109’およびエミュレーションコンポーネント111’)にロードされ、アプリケーション112の実行がエミュレーションコンポーネント111’(すなわち、アプリケーション112’)内でエミュレートされることを示す。
【0039】
[045]いくつかの実施形態では、コンピュータシステム101は、ネットワーク化されたコンピューティング環境の一部であり、コンピュータシステム101は、(例えばネットワークデバイス105を使用して)1つまたは複数のリモートコンピュータシステムに接続され、各リモートコンピュータシステムは、対応するデバッグコンポーネント、対応するトレーサコンポーネント、または対応するエミュレーションコンポーネントの1つまたは複数を含む。例えば、図4は、例示的なコンピューティング環境400を示し、(1つまたは複数の)ネットワーク401を介して(1つまたは複数の)リモートコンピュータシステム(リモートコンピュータシステム402a~リモートコンピュータシステム402nなど)に接続されているものとして図1のコンピュータシステム101を示す。一実施形態では、コンピュータシステム101は、それぞれがトレーサコンポーネントを含む1つまたは複数のリモートコンピュータシステムからネットワーク401を介して1つまたは複数の再生可能な実行トレース113を受信する(例えば、コンピュータシステム101でのデバッグコンポーネント109によるそれらのトレースの分析のために)。別の実施形態では、コンピュータシステム101は、トレーサコンポーネント110を使用して1つまたは複数の再生可能な実行トレース113を記録し、それらのトレースを、1つまたは複数のデバッグコンポーネントまたはエミュレーションコンポーネントをそれぞれ含む1つまたは複数のリモートコンピュータシステムにネットワーク401を介して送信する(例えば、リモートコンピュータシステムによるそれらのトレースの分析のため)。いくつかの実施形態では、コンピュータシステム101はまた、ネットワーク401を介して、1つまたは複数のリモートコンピュータシステムとの間でブロックリスト114を送受信する。
【0040】
[046]いくつかの実施形態では、デバッグコンポーネント109、トレーサコンポーネント110、および/またはエミュレーションコンポーネント111は、それぞれ独立したコンポーネントまたはアプリケーションであるが、他の実施形態では、それらは同じアプリケーションに代替的に統合される(デバッグスイートなど)、または別のソフトウェアコンポーネント(オペレーティングシステムコンポーネント、ハイパーバイザ、クラウドファブリックなど)に統合されることに留意されたい。したがって、本発明をコンピュータシステム101を含むクラウドコンピューティング環境で実施することもできることを当業者は理解されよう。例えば、いくつかの実施形態では、これらのコンポーネントは、ユーザのローカルコンピュータで実行される1つまたは複数のソフトウェアアプリケーションの形を取るが、他の実施形態では、クラウドコンピューティング環境によって提供されるサービスの形を取る。
【0041】
[047]いくつかの実施形態では、デバッグコンポーネント109は、アプリケーション112の以前の実行の分析の一部として、1つまたは複数の再生可能な実行トレース113を消費するツール(例えば、デバッガ、プロファイラ、クラウドサービスなど)である。ここで図2および6に関連してより詳細に説明するように、いくつかの実施形態では、デバッグコンポーネント109は、再生可能な実行トレース113などのコード実行ログデータにペイロードデータが含まれるのを防止するためにエントロピー分析を使用するための機能を提供する。追加または代替として、図3および7に関連してより詳細に説明するように、いくつかの実施形態では、デバッグコンポーネント109は、再生可能な実行トレース113からペイロードデータを除去するための機能を提供する。
I.コード実行ログデータにペイロードデータが含まれるのを防止するためのエントロピーの使用
[048]デバッグコンポーネント109のいくつかの実施形態が、コード実行ログデータにペイロードデータが含まれるのを防止するためにエントロピー分析を使用するための機能を提供することは上で述べた。これらの実施形態は、機密データアイテム(例えば、PII、暗号鍵、パスワードなど)が高エントロピーを有する傾向があるという観察を活用することによって、機密データアイテムをプログラムによって識別することが非常に困難であり得るという課題に対処する。この観察を使用して、これらの実施形態は、実行可能な命令や関数などへの入出力などの高エントロピーのデータアイテムを識別し、再生可能な実行トレースやイベントログなどのコード実行ログデータにそれらのデータアイテムが含まれるのを除外する。
【0042】
[049]本明細書で使用するとき、データアイテムの固有および/または文脈エントロピーが所定の閾値を満たすとき、データアイテムは「高いエントロピー」を有するとみなされる。いくつかの実施形態では、データアイテム内のエントロピーのビット数とデータアイテム内の総ビット数との比が所定の閾値を超える場合、データアイテムは、高い固有エントロピー(したがって高いエントロピー)を有するとみなされる。一例では、暗号鍵およびパスワードは、鍵/パスワードの総文字数に対して比較的多くの一意の文字を含む傾向があるため、固有エントロピーが高くなる傾向がある。逆に、自然言語テキストは、テキスト内の総文字数に対して比較的少数の一意の文字を含む傾向があるため、固有エントロピーが低くなる傾向がある。特に、高い固有エントロピーを有するデータアイテムは、低い固有エントロピーを有するデータアイテムと比較したとき、比較的低い内部文字反復を有し、したがって、高い固有エントロピーを有するデータアイテムは、高い固有エントロピーを有するデータアイテムと比較したとき、低い圧縮率を有する。逆に、低い固有エントロピーを有するデータアイテムは、高い固有エントロピーを有するデータアイテムと比較したとき、比較的高い内部文字反復を有し、したがって、低い固有エントロピーを有するデータアイテムは、低い固有エントロピーを有するデータアイテムと比較したとき、高い圧縮率を有する。したがって、いくつかの実施形態では、データアイテムが低い固有エントロピーを有するとみなされるか高い固有エントロピーを有するとみなされるかを決定するために、データアイテムの圧縮率が使用される。
【0043】
[050]いくつかの実施形態では、データアイテムの特定の値が出現する回数と、実行トレースのコレクション内でデータアイテムが現れる総回数との比が所定の閾値未満であるとき、またはデータアイテムの特定の値が出現するトレースの数と、実行トレースのコレクション内のトレースの総数との比が所定の閾値未満であるとき、データアイテムは高い文脈エントロピー(したがって高いエントロピー)を有するとみなされる。一例では、社会保障番号は、高い文脈エントロピーを有する傾向がある。これは、多数のコンピュータシステムにわたって収集された大きなデータコレクションを仮定して、所与の社会保障番号がめったに出現しない傾向があるからである。逆に、州名は、低い文脈エントロピーを有する傾向がある。これは、多数のコンピュータシステムにわたって収集された大きなデータコレクションを仮定して、所与の州名が頻繁に出現する傾向があるからである。
【0044】
[051]いくつかの実施形態では、コード実行ログデータを生成するコンピュータシステムは、コード実行ログデータに高エントロピーデータが含まれるのを除外するためのアクションを行う。一例では、コンピュータシステム101でのトレーサコンポーネント110による1つまたは複数の再生可能な実行トレース113の生成中、コンピュータシステム101でのデバッグコンポーネント109は、ブロックリスト114および/または固有エントロピー分析を使用して、高エントロピーペイロードデータアイテムを識別し、それらのペイロードデータアイテムをそれらのトレースから除外する。別の例では、コンピュータシステム101でのデバッグコンポーネント109によって生成された1つまたは複数の再生可能な実行トレース113の後処理中、コンピュータシステム101でのデバッグコンポーネント109は、ブロックリスト114および/または固有エントロピー分析を使用して、高エントロピーペイロードデータアイテムを識別し、それらのペイロードデータアイテムをそれらのトレースから除外する。いずれにせよ、高エントロピーペイロードデータアイテムは、ログデータがコンピュータシステム101から(例えばリモートコンピュータシステム402aに)エクスポートされる前に、コード実行ログデータから除外される。
【0045】
[052]他の実施形態では、コード実行ログデータのコレクションを処理するコンピュータシステムは、ブロックリスト114内の高エントロピーデータと相互作用するコードを識別することによって、およびそのブロックリスト114を1つまたは複数のリモートコンピュータシステムに送信することによって、将来のコレクションに高エントロピーデータが含まれるのを除外するためのアクションを行う。これらの実施形態では、このコンピュータシステムは、高エントロピーデータアイテムを識別するために使用されたコード実行ログデータのコレクションから高エントロピーデータアイテムを除去することもできる。一例では、コンピュータシステム101でのデバッグコンポーネント109が、複数のリモートコンピュータシステムから受信されたアプリケーション112の複数の再生可能な実行トレース113を処理する間、デバッグコンポーネント109は、固有エントロピー分析および/または文脈エントロピー分析を使用して、この複数の実行トレース内の高エントロピーペイロードデータアイテムを識別する。次いで、デバッグコンポーネント109は、それらのデータアイテムと相互作用したコードへの参照に基づいて、それらのデータアイテムをブロックリスト114(またはシステムメモリ103内のブロックリスト114’)に追加し、このブロックリスト114をリモートコンピュータシステムに配布して、それらのリモートコンピュータシステムから収集される将来の実行トレースにそれらのデータアイテムが含まれるのを防止する。いくつかの実施形態では、デバッグコンポーネント109はまた、これらの高エントロピーペイロードデータアイテムを複数の実行トレースから除去する。
【0046】
[053]これらの概念をさらに実証するために、図2は、コード実行ログデータにペイロードデータが含まれるのを防止するためにエントロピーを使用するように構成されたデバッグコンポーネント201の一例200(例えば、デバッグコンポーネント109の一実施形態)を示し、コード実行ログデータにペイロードデータが含まれるのを防止するためにエントロピーを使用するように動作するコンポーネント(例えば、ログデータ相互作用コンポーネント202、高エントロピーペイロード識別コンポーネント203、コード相互作用コンポーネント204、ブロックリスト相互作用コンポーネント205、予防アクションコンポーネント206、エクスポートコンポーネント207など)を含む。サブコンポーネントを含むデバッグコンポーネント201の図示されるコンポーネントは、本明細書で述べる様々な実施形態に従ってデバッグコンポーネント201が実装または利用することができる様々な機能を表す。しかし、図示されたコンポーネント(それらのアイデンティティ、サブコンポーネント、および配置を含む)は、本明細書で述べるデバッグコンポーネント201の様々な実施形態を説明するための補助として提示されているにすぎず、これらのコンポーネントは、本明細書で述べるデバッグコンポーネント201の様々な実施形態またはその特定の機能をソフトウェアおよび/またはハードウェアが実装する方法について限定しないことを理解されたい。
【0047】
[054]デバッグコンポーネント201を図6に関連して述べる。図6は、コード実行ログデータにペイロードデータが含まれるのを防止するためにエントロピーを使用するための方法600の流れ図を示す。したがって、以下の論述では、方法および方法操作に言及する。方法操作は、特定の順序で論じられることがあり、または特定の順序で行われるものとして流れ図に示されることがあるが、特に指定されている場合を除き、またはある操作が、その操作が実施される前に完了した別の操作に依存しているため順序が必要とされる場合を除き、特定の順序は必要とされない。いくつかの実施形態では、方法600を実装するための命令は、コンピュータシステム(例えばコンピュータシステム101)に方法600を実施させるためにプロセッサ(例えばプロセッサ102)によって実行可能なハードウェア記憶デバイス(例えば永続ストレージ104)に記憶されているコンピュータ実行可能命令(例えばデバッグコンポーネント201)として符号化される。
【0048】
[055]ログデータ相互作用コンポーネント202は、コード実行ログデータ、例えば再生可能な実行トレース113、またはイベントログなどの他のコード実行ログと相互作用する。図示されているように、様々な実装形態において、ログデータ相互作用コンポーネント202は、ログデータアクセスコンポーネント202a(すなわち、永続ストレージ104に記憶されている再生可能な実行トレース113などの既存のコード実行ログデータにアクセスするため)、ログデータ生成コンポーネント202b(すなわち、再生可能な実行トレース113などのコード実行ログデータを生成するため)、またはログデータ修正コンポーネント202c(すなわち、永続ストレージ104に記憶されている再生可能な実行トレース113などの既存のコード実行ログデータを修正するため)の1つまたは複数を含む。ログデータ相互作用コンポーネント202によって作用されるコード実行ログデータのタイプは異なることがあるが、いくつかの実施形態では、コード実行ログデータは、再生可能な実行トレース113の1つなど、再生可能な実行トレースである。
【0049】
[056]高エントロピーペイロード識別コンポーネント203は、(例えばトレーサコンポーネント110による)コード実行ログデータの生成に関連して、またはコード実行ログデータの後処理に関連して、高エントロピーペイロードデータアイテムを識別する。コード相互作用コンポーネント204は、高エントロピーペイロードデータアイテムと、実行されたコードとの相互作用を分析することによって、またはブロックリスト114を調べることによって、高エントロピーペイロードデータアイテムと相互作用したコードを識別する。
【0050】
[057]図6を見ると、方法600は、コード実行ログデータに関連付けられた高エントロピーペイロードデータアイテムを識別する操作601と、高エントロピーペイロードデータアイテムと相互作用した特定のコードを識別する操作602とを含む。操作601と操作602とは、操作間で任意の特定の順序を有さずに示されている。いくつかの実施形態では、まず操作601が、高エントロピーペイロードデータアイテムを識別し、次いで操作602が、高エントロピーペイロードデータアイテムと相互作用した特定のコードを識別する。他の実施形態では、操作が、ブロックリスト114から高エントロピーペイロードデータアイテムと相互作用した特定のコードを識別し、次いで操作601が、特定のコードが相互作用したアイテムとして高エントロピーペイロードデータアイテムを識別する。
【0051】
[058]いくつかの実施形態では、操作601は、コード実行ログデータに関連付けられたペイロードデータアイテムが、所定のエントロピー閾値を超えるエントロピーを有すると判定することを含む。いくつかの実施形態では、操作602は、ペイロードデータアイテムと相互作用した特定の実行可能コードを識別することを含む。いくつかの実施形態では、操作601および操作602は、PII、暗号鍵、パスワードなどの機密データであり得るペイロードデータを、そのペイロードデータと相互作用したコードと共に識別するという技術的効果を有する。特に、操作601で、機密データであり得るペイロードデータを識別し、操作602で、機密データと相互作用したコードを識別することにより、この高エントロピーペイロードデータをコード実行ログデータから除外できるようにすることにより、データセキュリティを向上させることができる。
【0052】
[059]図示されているように、高エントロピーペイロード識別コンポーネント203は、所与のデータアイテムに関する計算されたエントロピーが「高エントロピー」であるとみなされるのがどんな場合であるかを定義する閾値203cを含む。固有および文脈エントロピーの議論に鑑みて理解されるように、いくつかの実施形態では、これらの閾値203cは比に基づく。
【0053】
[060]これも図示されているように、いくつかの実施形態では、高エントロピーペイロード識別コンポーネント203は、固有エントロピーコンポーネント203aを含む。いくつかの実施形態では、固有エントロピーコンポーネント203aは、その固有エントロピーに基づいてペイロードデータを分析する。したがって、操作601のいくつかの実施形態では、ペイロードデータアイテムが所定のエントロピー閾値を超えるエントロピーを有すると判定することは、ペイロードデータアイテムが所定のエントロピー閾値を超える固有エントロピーを有すると判定することを含む。
【0054】
[061]論じたように、データアイテム内のエントロピーのビット数とデータアイテム内の総ビット数との比が所定の閾値(すなわち閾値203c)を超える場合、データアイテムは、高い固有エントロピー(したがって高いエントロピー)を有する。したがって、操作601のいくつかの実施形態では、ペイロードデータアイテムが所定のエントロピー閾値を超える固有エントロピーを有すると判定することは、ペイロードデータアイテム内のエントロピーのビット数と、ペイロードデータアイテム内の総ビット数との比を計算することを含む。これも論じたように、いくつかの実施形態では、データアイテムが低い固有エントロピーを有するか(すなわち、比較的高い圧縮率を有するとき)、高い固有エントロピーを有するか(すなわち、比較的低い圧縮率を有するとき)を決定するために、データアイテムの圧縮率が使用される。したがって、操作601のいくつかの実施形態では、ペイロードデータアイテムが所定のエントロピー閾値を超える固有エントロピーを有すると判定することは、ペイロードデータアイテムの圧縮率を計算することを含む。
【0055】
[062]これも図示されているように、いくつかの実施形態では、高エントロピーペイロード識別コンポーネント203は、文脈エントロピーコンポーネント203bを含む。いくつかの実施形態では、文脈エントロピーコンポーネント203bは、その文脈エントロピーに基づいてペイロードデータを分析する。いくつかの実施形態では、データアイテムの特定の値が出現する回数と、実行トレースのコレクション内でデータアイテムが現れる総回数との比が所定の閾値(すなわち閾値203c)未満であるとき、データアイテムは高い文脈エントロピー(したがって高いエントロピー)を有する。他の実施形態では、データアイテムの特定の値が出現するトレースの数と、実行トレースのコレクション内でのトレースの総数との比が所定の閾値(すなわち閾値203c)未満であるとき、データアイテムは高い文脈エントロピー(したがって高いエントロピー)を有する。したがって、操作601のいくつかの実施形態では、ペイロードデータアイテムが所定のエントロピー閾値を超えるエントロピーを有すると判定することは、ペイロードデータアイテムが所定のエントロピー閾値を超える文脈エントロピーを有すると判定することを含み、文脈エントロピーは、複数の関連するコード実行ログから識別された複数の関連するペイロードデータアイテムに関する。
【0056】
[063]いくつかの実施形態では、操作601で高エントロピーペイロードデータアイテムを識別するとき、高エントロピーペイロード識別コンポーネント203は、ブロックリスト相互作用コンポーネント205を利用して、ネットワーク401を介してリモートコンピュータシステムから受信されたブロックリストなどブロックリスト114からの既知の高エントロピーペイロードデータを識別する。論じたように、いくつかの実施形態では、ブロックリスト114は、データアイテムを消費または生成したコードなど、データアイテムと相互作用したコードを参照して高エントロピーデータアイテムを識別する。したがって、操作601のいくつかの実施形態では、ペイロードデータアイテムが所定のエントロピー閾値を超えるエントロピーを有すると判定することは、ペイロードデータアイテムと相互作用した(操作602で識別された)特定の実行可能コードへの参照に少なくとも基づいて、ブロックリストからペイロードデータアイテムを識別することを含む。
【0057】
[064]いくつかの実施形態では、高エントロピーペイロード識別コンポーネント203は、例えば、コード実行ログデータを生成したコンピュータシステムによって、またはコード実行ログデータを別のコンピュータシステムから受信するコンピュータシステムによって、コード実行ログデータの後処理中に動作する。したがって、操作601のいくつかの実施形態では、ペイロードデータアイテムが所定のエントロピー閾値を超えるエントロピーを有すると判定することが、コード実行ログデータの後処理中にペイロードデータアイテムを識別することを含む。他の実施形態では、高エントロピーペイロード識別コンポーネント203は、トレーサコンポーネント110によるトレース記録中など、コード実行ログデータの生成中に動作する。したがって、操作601のいくつかの実施形態では、ペイロードデータアイテムが所定のエントロピー閾値を超えるエントロピーを有すると判定することが、コード実行ログデータの生成中にペイロードデータアイテムを識別することを含む。
【0058】
[065]上で論じたように、操作602で、コード相互作用コンポーネント204は、ペイロードデータアイテムと相互作用した特定の実行可能コードを識別する。様々な実施形態において、この相互作用は、ペイロードデータアイテムの消費(操作602で、ペイロードデータアイテムと相互作用した特定の実行可能コードを識別することが、ペイロードデータアイテムを消費した実行可能コードを識別することを含む)、またはペイロードデータアイテムの生成(操作602で、ペイロードデータアイテムと相互作用した特定の実行可能コードを識別することが、ペイロードデータアイテムを生成した実行可能コードを識別することを含む)でよい。コード相互作用コンポーネント204が実行可能コードを識別する粒度は、例えば、命令レベル(操作602で、ペイロードデータアイテムと相互作用した特定の実行可能コードを識別することが、特定の実行可能命令を識別することを含む)や機能レベル(操作602で、ペイロードデータアイテムと相互作用した特定の実行可能コードを識別することが、特定の機能を識別することを含む)などで変化し得る。
【0059】
[066]予防アクションコンポーネント206は、(例えばエクスポートコンポーネント207による)ペイロードデータのエクスポートを防止するため、ペイロードデータアイテムがコード実行ログデータに含まれるのを防止するため、および/またはペイロードデータアイテムをブロックリストに追加するための予防アクションを行う。図6を見ると、方法600は、特定のコードの実行の記録から高エントロピーペイロードデータアイテムを除外するアクションを行う操作603を含む。いくつかの実施形態では、操作603は、特定の実行可能コードの実行の記録にペイロードデータアイテムが含まれるのを除外する予防アクションを行うことを含む。
【0060】
[067]上述したように、いくつかの実施形態では、予防アクションコンポーネント206は、ペイロードデータのエクスポートを防止する予防アクションを行う。したがって、図6に示されるように、いくつかの実施形態では、操作603は、ペイロードデータアイテムのエクスポートを防止する操作603aを含み、操作603での予防アクションは、ペイロードデータアイテムがコンピュータシステムからエクスポートされるのを防止することを含む。例えば、いくつかの実施形態では、予防アクションコンポーネント206は、コード実行ログデータがエクスポートコンポーネント207によってリモートコンピュータシステムにエクスポートされるときに、コード実行ログデータから高エントロピーペイロードデータアイテム(操作601で高エントロピーペイロード識別コンポーネント203によって識別される)を除去する。
【0061】
[068]上述したように、いくつかの実施形態では、予防アクションコンポーネント206は、ペイロードデータアイテムがコード実行ログデータに含まれるのを防止する予防アクションを行う。したがって、図6に示されるように、追加または代替実施形態では、操作603は、コード実行ログデータにペイロードデータアイテムが含まれるのを防止する操作603bを含み、操作603での予防アクションは、コード実行ログデータにペイロードデータアイテムが含まれるのを防止することを含む。例えば、いくつかの実施形態では、予防アクションコンポーネント206は、現在生成されているコード実行ログデータに高エントロピーデータアイテム(操作601で高エントロピーペイロード識別コンポーネント203によって識別される)が含まれるのを防止し、および/またはそれらの高エントロピーデータアイテムを既存のコード実行ログデータから除去する。
【0062】
[069]様々な実施形態において、ペイロードデータアイテムがコード実行ログデータに含まれるのを防止することは、コード実行ログデータ内のペイロードデータアイテムを、(i)代替データ、(ii)ペイロードデータアイテムに対する1つまたは複数の制約、または(iii)特定の実行可能コードに関するコードフローオーバーライドのうちの1つまたは複数で置き換えることを含む。これらの技法は、実行トレースからのペイロードデータの除去を達成するための方法を述べる図3および7に関連してより詳細に論じる。
【0063】
[070]上述したように、いくつかの実施形態では、予防アクションコンポーネント206は、ペイロードデータアイテムをブロックリストに追加する予防アクションを行う。したがって、図6に示されるように、追加または代替実施形態では、操作603は、ペイロードデータアイテムをブロックリストに追加する操作603cを含み、操作603での予防アクションは、特定の実行可能コードを参照してペイロードデータアイテムをブロックリストに追加することを含み、ブロックリストは、後で生成されるコード実行ログデータにペイロードデータアイテムが含まれるのを防止するように構造化される。例えば、いくつかの実施形態では、予防アクションコンポーネント206は、ブロックリスト相互作用コンポーネント205を使用して、それらのデータアイテムと相互作用する(操作602でのコード相互作用コンポーネント204によって識別された)コードを参照して、高エントロピーデータアイテム(操作601で高エントロピーペイロード識別コンポーネント203によって識別される)をブロックリスト114に追加する。したがって、操作603aは、まだ生成されていないコード実行ログデータに高エントロピーデータアイテムが含まれるのを防止する効果を有する。
【0064】
[071]いくつかの実施形態では、デバッグコンポーネント201は、コード実行ログデータにペイロードデータが含まれるのを防止するときに過渡的に動作し、したがって、高エントロピーペイロードデータ(派生物を含む)の複数のインスタンスがコード実行ログデータに含まれるのを除外される。例えば、いくつかの実施形態では、高エントロピーペイロード識別コンポーネント203は、特定の機能の第1のパラメータのデータが高エントロピー値であると判定したとき、同様にそのデータ(またはそのコピー/派生物)とも相互作用する任意の追加のコード位置も識別する。次いで、予防アクションコンポーネント206は、これらの識別されたコード位置それぞれに関して予防アクションを行って、コード実行ログデータにこのデータが含まれるのを除外する。例えば、第1のパラメータ(またはその派生物)が後で文字列として画面に印刷される場合、いくつかの実施形態では、高エントロピーペイロード識別コンポーネント203は、この文字列ペイロードを印刷する、およびその文字列ペイロードをクリアするコードを識別する。いくつかの実施形態では、記録されたコードパスに印刷ルーチンがない場合でさえ、これが当てはまる。したがって、いくつかの実施形態では、デバッグコンポーネント201は、コード実行ログデータから高エントロピーペイロードデータ(その派生物を含む)のすべてのインスタンスを過渡的に除外するように動作する。したがって、方法600のいくつかの実施形態では、方法600は、ペイロードデータアイテムの追加インスタンスまたはその派生物が別の実行可能コードの別の実行記録に含まれるのを除外するために過渡的に適用される。
【0065】
[072]いくつかの実施形態では、ペイロードデータアイテムがエクスポートコンポーネント207によってエクスポートされるのが防止され、コード実行ログデータに含まれるのが防止され、および/またはコード実行ログデータから除去されたとしても、いくつかの実施形態では、予防アクションコンポーネント206は、これらのペイロードデータアイテムを(例えば永続ストレージ104に)個別に保持すると共に、場合によってはそれらのデータ時間を暗号化または他の方法で保護する。いくつかの実施形態では、この保持により、必要が生じた場合には、それらのデータ時間を後で提供して、コード実行ログデータの分析を容易にすることができる。したがって、方法600のいくつかの実施形態では、ペイロードデータアイテムは、コード実行ログデータとは別にコンピュータシステムに保持される。
【0066】
[073]特に、例えば、操作603aでペイロードデータアイテムのエクスポートを防止することによって、操作603bでコード実行ログデータにペイロードデータアイテムが含まれるのを防止することによって、または操作603cでペイロードデータアイテムをブロックリストに追加することによって、高エントロピーデータをコード実行記録から除外することにより、コード実行ログデータから高エントロピーデータを除外してデータセキュリティを向上させることができる。これには、コード実行ログデータを介して機密データアイテムが不用意に露出されるのを防ぐという技術的効果がある。さらに、高エントロピーペイロードデータアイテムをコード実行記録から除外することで、再生可能な実行トレース113など容易に圧縮可能でないことが多い高エントロピーデータの除去を含めてデータの一部を除去することによって、コード実行ログデータのサイズが減少され、これは、コンピューティングリソースを節約するという追加の技術的効果を有する。例えば、再生可能な実行トレース113のサイズを減少させることで、それらのトレースを分析するときの処理リソースが節約され、それらのトレースを記憶および転送するために必要とされるストレージおよびネットワークリソースが節約される。
II. 実行トレースからのペイロードデータの除去
[074]デバッグコンポーネント109のいくつかの実施形態が、追加または代替として、再生可能な実行トレース113からペイロードデータを除去するための機能を提供することは前述した。これらの実施形態は、コードおよび/またはデータフロー分析、メモリ局所性分析、メモリアクセスパターン分析、キャッシュ使用量分析、競合状態分析、バッファオーバーフロー分析、従来のデバッグなど、多くの形式の実行トレース分析にペイロードデータが頻繁に実質的に寄与していないという認識に基づいている。実行トレースからこのペイロードデータを除去することによって、これらの実施形態は、データセキュリティを改良し(すなわちそのようなデータ実行トレースを除去することによって)、またトレースファイルサイズを大幅に削減する。
【0067】
[075]概念上、これらの実施形態は、実行トレースを、実行された各命令へのすべての入力およびすべての出力(すなわちペイロードデータ)を明示的または本来的にキャプチャするものから、実行された実際のコード、そのコードをそのように実行させた原因に関する情報、およびメモリアクセスパターン(すなわちアクセスされるメモリアドレス)を含むものに変換する。特に、これらの実施形態は、実行トレースを処理して、実行可能な命令や関数などへの入力およびそれらからの出力など、ペイロードデータアイテムを識別する。識別されたペイロードデータアイテムごとに、これらの実施形態は、ペイロードデータアイテムと相互作用したコードの実行がペイロードデータアイテムに課した制約を決定する。次いで、これらの実施形態は、実行トレース内のペイロードデータアイテムの値を、それらの制約を維持する情報に置き換える。いくつかの実施形態では、この情報は、ペイロードデータアイテムと相互作用した実際の実行可能コード、ペイロードデータアイテムのメモリアドレス、および/またはペイロードデータアイテムによって影響を及ぼされるコードフローを保存するように構造化されたデータ(例えば、コードフローを保存するペイロードデータアイテムに関する置換値、コードフローを保存するデータアイテムに関する有効値の仕様、従うべきコードパスの命令など)を含む。
【0068】
[076]これらの概念をさらに実証するために、図3は、実行トレースからペイロードデータを除去するように動作するコンポーネント(例えば、トレース相互作用コンポーネント302、ペイロード識別コンポーネント303、コード相互作用コンポーネント304、制約識別コンポーネント305、ペイロード置換コンポーネント306など)を含む、実行トレースからペイロードデータを除去するように構成されたデバッグコンポーネント301(例えばデバッグコンポーネント109の一実施形態)の一例300を示す。サブコンポーネントを含むデバッグコンポーネント301の図示されるコンポーネントは、本明細書で述べる様々な実施形態に従ってデバッグコンポーネント301が実装または利用することができる様々な機能を表す。しかし、図示されたコンポーネント(それらのアイデンティティ、サブコンポーネント、および配置を含む)は、本明細書で述べるデバッグコンポーネント301の様々な実施形態を説明するための補助として提示されているにすぎず、これらのコンポーネントは、本明細書で述べるデバッグコンポーネント301の様々な実施形態またはその特定の機能をソフトウェアおよび/またはハードウェアが実装する方法について限定しないことを理解されたい。
【0069】
[077]デバッグコンポーネント301を図7に関連して述べる。図7は、実行トレースからペイロードデータを除去するための方法700の流れ図を示す。したがって、以下の論述では、方法および方法操作に言及する。方法操作は、特定の順序で論じられることがあり、または特定の順序で行われるものとして流れ図に示されることがあるが、特に指定されている場合を除き、またはある操作が、その操作が実施される前に完了した別の操作に依存しているため順序が必要とされる場合を除き、特定の順序は必要とされない。いくつかの実施形態では、方法700を実装するための命令は、コンピュータシステム(例えばコンピュータシステム101)に方法700を実施させるためにプロセッサ(例えばプロセッサ102)によって実行可能なハードウェア記憶デバイス(例えば永続ストレージ104)に記憶されているコンピュータ実行可能命令(例えばデバッグコンポーネント301)として符号化される。
【0070】
[078]トレース相互作用コンポーネント302は、再生可能な実行トレース113などの実行トレースと相互作用する。図示されているように、トレース相互作用コンポーネント302は、トレースアクセスコンポーネント302a(すなわち、既存の実行トレースにアクセスするため)、およびトレース修正コンポーネント302b(すなわち、既存の実行トレースを修正するため)を含む。
【0071】
[079]ペイロード識別コンポーネント303は、トレースアクセスコンポーネント302aによってアクセスされた実行トレースからペイロードアイテムを識別する。いくつかの実施形態では、ペイロード識別コンポーネント303は、コード命令、関数、モジュールなどへの入力およびそこからの出力を識別する。いくつかの実施形態では、ペイロード識別コンポーネント303は、各ペイロードアイテムに対応するメモリアドレス(またはさらには、ある範囲のメモリアドレス)も識別する。いくつかの実施形態では、ペイロード識別コンポーネント303は、変数名、構造名、クラス名など、各ペイロードアイテムに関する名前またはラベルも識別する。図7を参照すると、方法700は、実行トレースからペイロードデータアイテムを識別する操作701を含む。いくつかの実施形態では、操作701は、トレース相互作用コンポーネント302によってアクセスされる再生可能な実行トレース113の1つの中にあるペイロードデータアイテムを識別することを含む。
【0072】
[080]コード相互作用コンポーネント304は、ペイロード識別コンポーネント303によって識別された各ペイロードデータアイテムと相互作用したコードを識別する。前述したように、ペイロード識別コンポーネント303は、コード命令、関数、モジュールなどへの入力およびそこからの出力を識別する。したがって、コード相互作用コンポーネント304は、これらの命令、関数、モジュールなどのコードを識別する。いくつかの実施形態では、コード相互作用コンポーネント304はさらに、このコードがどのメモリアドレスからアクセスされたかを識別する。図7を見ると、方法700は、ペイロードデータアイテムと相互作用した特定のコードを識別する操作702を含む。いくつかの実施形態では、操作702は、操作701でペイロード識別コンポーネント303によって識別されたペイロードデータアイテムと相互作用した特定の実行可能コードを識別することを含む。
【0073】
[081]操作701および操作702の例では、実行トレースは、以下のような文字列コピー関数の実行を記録する。
【0074】
【数1】
ここで、*srcによって指し示されるメモリアドレスから始まるメモリブロックに記憶されている文字に、以下のような文字列「Sample」が記憶されていると仮定する。
【0075】
【表1】
このとき、strcpy()関数の実行後、これらの同じ文字が、*destによって指し示されるメモリの別のブロックにコピーされる。例として、この実行トレースを処理するとき、ペイロード識別コンポーネント303は、whileループの反復ごとに、「Sample」文字列の文字の1つを、それらのペイロードアイテムに関する対応するメモリアドレスと共に、分岐命令への入力(例えば、whileに対応する)、メモリロード命令への入力、およびメモリ記憶命令への入力として識別する。これに対応して、コード相互作用コンポーネント304は、これらの命令を、これらのペイロードデータアイテムと相互作用したコードとして、そのコードに関する対応するメモリアドレスと共に識別する。
【0076】
[082]制約識別コンポーネント305は、コード相互作用コンポーネント304によって識別されたコードの実行がペイロード識別コンポーネント303によって識別されたペイロードに課す制約を識別する。図7を見ると、方法700は、特定のコードの実行がペイロードデータアイテムに課した制約を決定する操作703を含む。いくつかの実施形態では、操作703は、ペイロードデータアイテムおよび特定の実行可能コードに基づいて、特定の実行可能コードの実行がペイロードデータアイテムに課す1つまたは複数の制約を決定することを含む。
【0077】
[083]図示されているように、いくつかの実施形態では、制約識別コンポーネント305は、コードバイトコンポーネント305aを備える。理解されるように、ペイロードデータと相互作用する実際のコードは、コード入力としてのそのペイロードデータに対する固有の制約である。したがって、いくつかの実施形態では、コードバイトコンポーネント305aは、実行トレースに含めるために、実行されたコードの実際のバイトを識別する。いくつかの実施形態では、コードバイトコンポーネント305aは、コード相互作用コンポーネント304によって識別されたコードメモリアドレスに記憶されているデータに基づいて、これらのコードバイトを識別する。図7に示されるように、いくつかの実施形態では、操作703は、コードバイトを識別する操作703aを含む。したがって、操作703のいくつかの実施形態では、1つまたは複数の制約は、特定の実行可能コードの1つまたは複数のバイトを含む。一例では、上記のstrcpy()の例で動作するとき、コードバイトコンポーネント305aは、strcpy()関数の実際のコードを識別する。
【0078】
[084]これも図示されているように、いくつかの実施形態では、制約識別コンポーネント305は、メモリアドレスコンポーネント305bを備える。理解されるように、実行可能コードがペイロードデータにアクセスした場所が、そのペイロードデータに対する場所の制約を課す。したがって、いくつかの実施形態では、メモリアドレスコンポーネント305bは、実行トレースに含めるために、ペイロードデータアイテムがアクセスされたメモリアドレスを識別する。図7に示されるように、いくつかの実施形態では、操作703は、メモリアドレスを識別する操作703bを含む。したがって、操作703のいくつかの実施形態では、1つまたは複数の制約は、ペイロードデータアイテムに対応するメモリアドレスを含む。一例では、上記のstrcpy()の例で動作するとき、メモリアドレスコンポーネント305bは、srcおよびdest文字列内の各文字のメモリアドレスを識別する。
【0079】
[085]これも図示されているように、いくつかの実施形態では、制約識別コンポーネント305は、コードフローコンポーネント305cを備える。理解されるように、ペイロードデータとの相互作用により生じるコードフローは、同じコードフローを保存するペイロードデータの取り得る値に制約を課す。したがって、いくつかの実施形態では、コードフローコンポーネント305cは、実行トレースに含めるために、ペイロードデータに対するコードフロー制約を識別する。図7に示されるように、いくつかの実施形態では、操作703は、コードフローを保存するように構造化されたデータを識別する操作703cを含む。したがって、操作703のいくつかの実施形態では、1つまたは複数の制約は、コードフローを保存するように構造化されたデータを含む。
【0080】
[086]いくつかの実施形態では、コードフローコンポーネント305cは、ペイロードデータアイテムに関する置換値の形でコードフローを保存するように構造化されたデータを識別し、置換値は、ペイロードデータアイテムの元の値を置き換えるときに適切なコードフローを保存する値である。したがって、いくつかの実施形態では、操作703cは、ペイロードデータアイテムに関する置換値を含み、置換値は、コードフローを保存するように構造化される。
【0081】
[087]いくつかの実施形態では、コードフローコンポーネント305cは、ランダム値生成に基づいてこの置換値を選択し、操作703cは、ランダム値生成に基づいて置換値を識別することを含む。いくつかの実施形態では、コードフローコンポーネント305cがランダム値に基づいて置換値を選択するとき、コードフローコンポーネント305cは、(例えば擬似ランダム値生成技法を使用して)ペイロードデータアイテムに適切なデータサイズのランダム値を生成し、次いで、ランダムに生成されたその値がペイロードデータアイテムの値として使用された場合にコードフローを保存するかどうかをチェックする。コードフローを保存する場合、コードフローコンポーネント305cは、そのランダムに生成された値を置換値として選択する。コードフローを保存しない場合、コードフローコンポーネント305cは、コードフローを保存する値が識別されるまで、新しいランダム値を生成してチェックする。特に、いくつかの実施形態では、コードフローコンポーネント305cは、ペイロードデータアイテムの元の値と同一のランダム値の生成を可能にする。一例では、上記のstrcpy()の例で動作するとき、コードフローコンポーネント305cは、「Sample」文字列の各英字に対して異なるランダムな1バイト値を生成する。ここで、非ヌルバイト(例えば0×0以外のバイト)はコードフローを保存する。
【0082】
[088]追加または代替実施形態では、コードフローコンポーネント305cは、利用可能な置換値のセットからの検索に基づいてこの置換値を選択し、操作703cは、利用可能な置換値のセットからの検索に基づいて置換値を識別することを含む。いくつかの実施形態では、コードフローコンポーネント305cが、検索に基づいて置換値を選択するとき、コードフローコンポーネント305cは、利用可能な置換値の所定のセットから1つの値を選択し、次いで、その値が、ペイロードデータアイテムの値として使用された場合にコードフローを保存するか否かをチェックする。コードフローを保存する場合、コードフローコンポーネント305cは、その選択された値を置換値として選択する。コードフローを保存しない場合、コードフローコンポーネント305cは、コードフローを保存する値が識別されるまで、セットからの他の値を選択しチェックする。特に、いくつかの実施形態では、コードフローコンポーネント305cは、ペイロードデータアイテムの元の値と同一の値の選択を可能にする。いくつかの実施形態では、利用可能な置換値のセットには、それらの値の多くのインスタンスを含む実行トレースの圧縮性を促進する値(例えば、0×0、0×A、0×Fなど)が投入される。一例では、上記のstrcpy()の例で動作するとき、コードフローコンポーネント305cは、利用可能な値のセットから、文字列の各文字に関して利用可能な1バイト値を生成する。ここで、0×Aや0×Fなど任意の非ヌルバイトはコードフローを保存する。
【0083】
[089]追加または代替実施形態では、コードフローコンポーネント305cは、少なくともペイロードデータアイテムのハッシュの計算に基づいてこの置換値を選択し、操作703cは、ペイロードデータアイテムのハッシュの計算に基づいて置換値を生成することを含む。いくつかの実施形態では、コードフローコンポーネント305cは、生成されたハッシュが、ペイロードデータアイテムの置換値として使用された場合、およびそうであるならばコードフローコンポーネント305cがそのハッシュを置換値として選択した場合にコードフローを保存するかどうかをチェックする。したがって、操作703cのいくつかの実施形態では、実行トレース内のペイロードデータアイテムの値を1つまたは複数の制約を維持する情報で置き換えることは、ペイロードデータアイテムの値をハッシュで置き換えることを含む。いくつかの実施形態では、生成されたハッシュが、ペイロードデータアイテムの置換値として使用される場合にコードフローを保存しない場合、コードフローコンポーネント305cは、本明細書で論じる他の置換値選択技法(例えば、ランダムに生成された値、利用可能な置換値のセットから選択された値など)の1つを使用し、その置換値をハッシュでタグ付けする。したがって、操作703cのいくつかの実施形態では、実行トレース内のペイロードデータアイテムの値を1つまたは複数の制約を維持する情報で置き換えることは、置換値をハッシュでタグ付けすることを含む。一例では、上記のstrcpy()の例で動作するとき、コードフローコンポーネント305cは、文字列の各英字のハッシュを生成する。ここで、これらのハッシュは非ヌルであり、したがってコードフローを保存し、文字列の各英字のための置換として使用される。
【0084】
[090]いくつかの実施形態では、コードフローコンポーネント305cがハッシュに基づいて置換値を選択するとき、コードフローコンポーネント305cは、単独で、またはソルトと組み合わせて、ペイロードデータアイテムの値をハッシュする。したがって、操作703cのいくつかの実施形態では、ペイロードデータアイテムのハッシュを計算することは、ペイロードデータアイテムにソルトを適用することを含む。いくつかの実施形態では、コードフローコンポーネント305cは、特定のバグまたは欠陥を分析するなどの共通の目的に関して分析されているトレースのセット内の値をハッシュするとき、同じソルトを使用する。このようにして、同じ値を有するペイロードは、このトレースのセット全体にわたって同じハッシュで置き換えられ(または少なくともタグ付けされ)、したがって分析中に互いに関連付けることができる。しかし、他のトレースセットに関して異なるソルトが使用される場合、異なるソルトが使用されるときには異なるハッシュを有するので、すべてのトレースにわたるペイロードの全体的な難読化が保たれる。
【0085】
[091]追加または代替実施形態では、コードフローコンポーネント305cは、(例えばブール充足可能性問題(SAT)技法を使用して)制約ソルバの実行に基づいてこの置換値を選択し、操作703cは、少なくとも特定の実行可能コードに対する制約ソルバの実行に基づいて置換値を識別することを含む。いくつかの実施形態では、コードフローコンポーネント305cが制約ソルバに基づいて置換値を選択するとき、コードフローコンポーネント305cは、制約ソルバを使用して、ペイロードデータアイテムと相互作用したコードを分析する。一例では、上記のstrcpy()の例で動作するとき、コードフローコンポーネント305cは、whileループを構成するコードに対して制約ソルバを実行する。
【0086】
[092]いくつかの実施形態では、コードフローコンポーネント305cは、ペイロードデータアイテムに関する1つまたは複数の有効な値のセットの仕様の形でコードフローを保存するように構造化されたデータを識別する。したがって、操作703cのいくつかの実施形態では、コードフローを保存するように構造化されたデータは、ペイロードデータアイテムに関する1つまたは複数の有効な値のセットの仕様を含む。1つまたは複数の有効な値のセットの仕様は、値の範囲(例えば、1~10)、値のセット(例えば、1、2、4、8、および10)、フラグ(例えば、ゼロまたは非ゼロ)、境界値(例えば、7未満)など様々な形を取ることができる。一例では、上記のstrcpy()の例で動作するとき、コードフローコンポーネント305cは、「Sample」文字列の各英字を非ヌル文字で置き換えることができることを指定する。
【0087】
[093]いくつかの実施形態では、コードフローコンポーネント305cは、従うべきコードパスの命令の形式でコードフローを保存するように構造化されたデータを識別する。したがって、操作703cのいくつかの実施形態では、コードフローを保存するように構造化されたデータは、特定の実行可能コード内で従うべきコードパスの命令を含む。従うべきコードパスの命令は、例えば、制御ステートメントのどの分岐を選択すべきかについての指示や、ステートメントが真または偽と評価されるべきかについての指示などを含むことができる。一例では、上記のstrcpy()の例で動作するとき、「Sample」文字列の各英字に関して、コードフローコンポーネント305cは、whileループを継続すべきであることを示し、ヌル終端文字に関しては、whileループを終了すべきであることを示す。理解されるように、従うべきコードパスの命令を指定することによって、関連するペイロードデータをトレースから完全に省くことができる。
【0088】
[094]ペイロード置換コンポーネント306は、操作703において制約識別コンポーネント305によって識別された制約に基づいて、ペイロードデータ置換を実行する。図7を参照すると、方法700は、制約を維持する情報でペイロードデータアイテムを置き換える操作704を含む。いくつかの実施形態では、操作704は、実行トレース内のペイロードデータアイテムの値を、1つまたは複数の制約を維持する情報で置き換えることを含む。
【0089】
[095]論じたように、いくつかの実施形態では、1つまたは複数の制約は、ペイロードデータと相互作用する実際のコード(コードバイトコンポーネント305a)を含む。それに対応して、いくつかの実施形態では、ペイロード置換コンポーネント306は、少なくともペイロードデータと相互作用したコードバイトを実行トレースにログ記録するコードバイトコンポーネント306aを備える。したがって、操作704のいくつかの実施形態では、1つまたは複数の制約を維持する情報は、特定の実行可能コードの1つまたは複数のバイトを含む。したがって、図示されているように、いくつかの実施形態では、操作704は、コードバイトをログ記録する操作704aを含む。いくつかの実施形態では、操作704aは、実行可能コードへのアクセスを可能にして実行トレース分析を容易にするという技術的効果を有する。
【0090】
[096]論じたように、いくつかの実施形態では、1つまたは複数の制約は、ペイロードデータと相互作用する実際のコード(コードバイトコンポーネント305a)を含む。それに対応して、いくつかの実施形態では、ペイロード置換コンポーネント306は、少なくともペイロードデータに対応するメモリアドレスをログ記録するメモリアドレスコンポーネント306bを備える。したがって、操作704のいくつかの実施形態では、1つまたは複数の制約を維持する情報は、メモリアドレスを含む。したがって、図示されているように、いくつかの実施形態では、操作704は、メモリアドレスをログ記録する操作704bを含む。いくつかの実施形態では、操作704bは、元のペイロードデータが存在しなくても、メモリ使用量の分析(例えば、コードおよび/またはデータフロー分析、メモリ局所性分析、メモリアクセスパターン分析、キャッシュ使用量分析、競合状態分析、バッファオーバーフロー分析、従来のデバッグなど)を可能にする技術的効果を有する。
【0091】
[097]論じたように、いくつかの実施形態では、1つまたは複数の制約は、ペイロードデータとの相互作用から生じるコードフローを含む(コードフローコンポーネント305c)。それに対応して、いくつかの実施形態では、ペイロード置換コンポーネント306は、少なくともコードフローを保存するように構造化されたデータをログ記録するコードフローコンポーネント306cを備える。したがって、操作704のいくつかの実施形態では、1つまたは複数の制約を維持する情報は、コードフローを保存するように構造化されたデータを含み、コードフローは、例として、ペイロードデータアイテムに関する置換値、または特定の実行可能コード内で従うべきコードパスの命令を含むことができる。したがって、図示されているように、いくつかの実施形態では、操作704は、コードフローを保存するように構造化されたデータをログ記録する操作704cを含む。いくつかの実施形態では、操作704cは、実行トレース内の場合によっては機密のデータを、コードフローを保存するように構造化されたデータで置き換えるという技術的効果を有し、これはデータセキュリティを促進する。さらに、置換データが元のペイロードデータよりも小さいとき、および/または置換データが圧縮可能なデータパターンを有するとき、操作704は、トレースファイルサイズを減少する技術的効果を有する。したがって、処理、記憶、および転送するデータが少なくなるので、トレース分析、記憶、および転送の効率(必要な処理能力、計算時間、ストレージリソース、およびネットワーク利用率の観点から)が向上される。
【0092】
[098]いくつかの実施形態では、デバッグコンポーネント201と同様に、デバッグコンポーネント301は、ペイロードデータを再生可能な実行トレース113から除去/置き換えるときに過渡的に動作し、そのペイロードデータ(派生物を含む)の複数のインスタンスが再生可能な実行トレース113から除去/置換されるようにする。例えば、上述したstrcpy()関数が、以下を含むToLower()関数であるとする。
【0093】
【数2】
このとき、いくつかの実施形態では、コード相互作用コンポーネント304はまた、このToLower()関数(またはその一部)を、*srcによって指し示される文字列と相互作用するコードとして識別し、制約識別コンポーネント305は、(例えば、ここでも大文字である文字「S」に関する置換値を選択し、任意の他の非ヌルの小文字である「a」、「m」、「p」、「l」、および「e」文字に関する置換値を選択することによって)ToLower()関数内の「if」ステートメントへの適切な数のヒットをここでも引き起こす文字列の値に対する制約を識別する。したがって、方法700のいくつかの実施形態では、方法700は、実行トレース内のペイロードデータアイテム追加インスタンスまたはその派生物を、1つまたは複数の制約を維持する情報で置き換えるために過渡的に適用される。
【0094】
[099]したがって、本明細書での少なくともいくつかの実施形態は、実行トレースからペイロードデータを除去するように動作し、これは、実行トレースを介して機密データアイテムが不用意に露出されることを防止することによって、データセキュリティを促進する技術的効果を有する。さらに、実行トレースからペイロードデータを除外することで、それらの実行トレースの圧縮率を大幅に増加させることができる。いずれにせよ、ペイロードデータを実行トレースから除外することで、実行トレースのサイズを大幅に減少させることができ、これは、コンピューティングリソースを節約するという追加の技術的効果を有する。例えば、実行トレースのサイズを減少させることで、それらの実行トレースを分析するときに処理リソースが節約され、実行トレースを記憶および転送するときに必要とされるストレージおよびネットワークリソースも節約される。
【0095】
[100]本開示では、コード実行ログデータにペイロードデータが含まれるのを防止するためにエントロピー分析を使用する実施形態、および再生可能な実行トレースからペイロードデータを除去するための実施形態について論じた。これら2つの実施形態は、単独で実施することも、組み合わせて実施することもできることに留意されたい。例えば、エントロピー分析の実施形態について論じたときに、ペイロードデータアイテムがコード実行ログデータに含まれるのを防止することは、ペイロードデータアイテムを、代替データ、ペイロードデータアイテムに対する制約、またはコードフローオーバーライドのうちの1つまたは複数で置き換えることを含むことができると述べた。特に、これらの防止技法は、ペイロードデータ除去の実施形態に関連してさらに開示される。さらに、ペイロードデータ除去の実施形態は、除去すべきペイロードデータアイテムを識別し、いくつかの実装形態では、ペイロードデータアイテムは、少なくとも部分的にエントロピー分析に基づいて識別される。
【0096】
[101]主題を、構造的特徴および/または方法論的操作に特有の言葉で説明してきたが、添付の特許請求の範囲で定義される主題は、上記の特徴もしくは上記の操作、または上記の操作順序に必ずしも限定されないことを理解されたい。むしろ、上記の特徴および操作は、特許請求の範囲を実施する例示的な形態として開示される。
【0097】
[102]本発明は、その本質的な特徴から逸脱することなく、他の特定の形態で具現化することもできる。記載した実施形態は、あらゆる点において、限定としてではなく例示としてのみ考慮されるべきである。したがって、本発明の範囲は、前述の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲の均等物の意味および範囲内にあるすべての変更は、その範囲内に包含されるものとする。添付の特許請求の範囲で要素を導入するとき、冠詞「a」、「an」、「the」、および「said」は、要素が1つまたは複数の存在することを意味することを意図されている。「備える」、「含む」、および「有する」という用語は包括的であることを意図されており、列挙された要素以外の追加の要素が存在し得ることを意味する。特に指定のない限り、「セット」、「スーパーセット」、および「サブセット」という用語は空のセットを除外することを意図されており、したがって「セット」は、空でないセットとして定義され、「スーパーセット」は、空でないスーパーセットとして定義され、「サブセット」は、空でないサブセットとして定義される。特に指定のない限り、「サブセット」という用語は、そのスーパーセット全体を除外する(すなわち、スーパーセットは、サブセットに含まれない少なくとも1つのアイテムを含む)。特に指定しない限り、「スーパーセット」は、少なくとも1つの追加要素を含むことができ、「サブセット」は、少なくとも1つの要素を除外することができる。
図1
図2
図3
図4
図5
図6
図7
【国際調査報告】