JP6984710B2 - コンピュータ装置およびメモリ管理方法 - Google Patents

コンピュータ装置およびメモリ管理方法 Download PDF

Info

Publication number
JP6984710B2
JP6984710B2 JP2020158010A JP2020158010A JP6984710B2 JP 6984710 B2 JP6984710 B2 JP 6984710B2 JP 2020158010 A JP2020158010 A JP 2020158010A JP 2020158010 A JP2020158010 A JP 2020158010A JP 6984710 B2 JP6984710 B2 JP 6984710B2
Authority
JP
Japan
Prior art keywords
memory
computer device
processor
function call
control flow
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.)
Active
Application number
JP2020158010A
Other languages
English (en)
Other versions
JP2021051745A (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 JP2021051745A publication Critical patent/JP2021051745A/ja
Application granted granted Critical
Publication of JP6984710B2 publication Critical patent/JP6984710B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/142Reconfiguring to eliminate the error
    • G06F11/143Reconfiguring to eliminate the error with loss of software functionality
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1492Generic software techniques for error detection or fault masking by run-time replication performed by the application 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • 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/3668Software testing
    • 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Health & Medical Sciences (AREA)
  • Virology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Description

本開示は、コンピュータ装置、およびコンピュータ装置にてメモリを管理する方法に関する。
多くの脆弱性は、攻撃者がアプリケーションの通常の制御フローを変更することによって悪用され、悪用されたアプリケーションの権限で任意の悪意のあるアクティビティが実行される。制御フローインテグリティ(CFI)は、コンパイルされたバイナリコードの元の制御フローグラフへの変更を禁止するセキュリティメカニズムであり、そのような攻撃の実行を著しく困難にする。
一実施形態によれば、コンピュータ装置はメモリを含む。コンピュータ装置は、プロセスを実行し、そのプロセスのためメモリを管理するように構成された少なくとも1つのプロセッサも含む。プロセッサはさらに、アプリケーションに関連付けられた1つ以上のプログラム命令を実行し、1つ以上のプログラム命令の制御フロー転送に達し、ターゲット制御フローの不遵守に応じて、1つ以上のプログラム命令に関連付けられたコールスタックを展開し、問題のある関数コールを特定し、そして、問題のある関数コールを書き換えるように構成される。書き換えられる関数コールは、メモリ操作境界チェックを含む。
第2実施形態によれば、プロセッサで実行するプロセスのためのメモリ管理方法は、アプリケーションに関連付けられた1つ以上のプログラム命令を実行し、1つ以上のプログラム命令の制御フロー転送に達し、ターゲット制御フローの不遵守に応じて、1つ以上のプログラム命令に関連付けられたコールスタックを展開し、問題のある関数コールを特定し、そして、問題のある関数コールを書き換えることを含み、書き換えられる関数コールは、メモリ操作境界チェックを含む。
第3実施形態によれば、車両内のコンピュータ装置は、メモリと、プロセスを実行し、そのプロセスのためメモリを管理するように構成された少なくとも1つのプロセッサを含む。プロセッサは、アプリケーションに関連付けられた1つ以上のプログラム命令を実行するように構成される。プロセッサはさらに、1つ以上のプログラム命令の制御フロー転送に達し、ターゲット制御フローの不遵守に応じて、1つ以上のプログラム命令に関連付けられたコールスタックを展開し、問題のある関数コールおよびその問題のある関数コールに関連付けられたメモリ内のレジスタのデータサイズ制限を特定し、そして、メモリ操作境界チェックを含む問題のある関数コールを書き換えるように構成される。
本開示の実施形態による、プロセスに割り当てられたメモリの一部のエラーを検出するための例示的なコンピュータシステムの図である。 本開示の実施形態による、例示的なコンピュータ装置の概略ブロック図である。 本開示の実施形態による、制御フローインテグリティ(CFI)強化の例示的な方法のフローチャート300である。
本開示の実施形態が本明細書で説明される。しかしながら、開示された実施形態は単なる例であり、他の実施形態は様々な代替の形態をとることができることを理解されたい。図は必ずしも縮尺どおりではない。特定のコンポーネントの詳細を表示するために、一部の特徴が誇張または最小化され得る。したがって、本明細書で開示される特定の構造および機能の詳細は、限定するものとして解釈されるべきではなく、実施形態を様々に採用することを当業者に教示するための単なる代表的な基礎として解釈されるべきである。当業者が理解するように、図のいずれかを参照して図示および説明される様々な特徴は、明示的に図示または説明されていない実施形態を生み出すように、1つ以上の他の図に示される特徴と組み合わせることができる。図示された特徴の組み合わせは、典型的な用途のための代表的な実施形態を提供する。しかしながら、本開示の教示と矛盾しない特徴の様々な組み合わせおよび変更は、特定の用途または実施のために望ましい可能性がある。
メモリの不正は、たとえばCやC++などの低級言語で記述されたソフトウェアを利用するコンピューティングシステムで発生する可能性がある。これは、このような言語はデフォルトではメモリの読み書きのデータ検証チェックをコンパイルしないためである。例えば、コンパイルされたCコードには、データバッファに割り当てられたメモリ領域外にデータが書き込まれるのを防ぐための検証が含まれていない場合がある。このような範囲外のアクセスは、バッファオーバーフローまたはバッファオーバーランと呼ばれることがある。
プロセスがコンパイル済みコードを実行すると、データのスタックがメモリのブロックとしてプロセスに割り当てられる。実行中のコードによって関数がコールされると、新しいフレームがこのスタックにプッシュされる。新しいフレームには、関数に渡されるパラメータ、関数のローカルデータ変数、関数が完了したときに実行を継続する位置のリターンアドレスが含まれる。関数が完了すると、フレームがスタックから除去され、リターンアドレスがプログラムカウンタに配置されて、プログラムフローが再開される。リターンアドレスは通常、関数がコールされた直後のコンパイル済みコードの命令である。
スタックバッファオーバーフローは、プログラムフローを変更するために使用される特定のタイプのバッファオーバーフローである。例えば、攻撃者は、悪意のあるコードへジャンプするリターンアドレスに上書きされるように形成された、スタック上のローカル変数のバッファオーバーランを設計する可能性がある。これは、攻撃者がどのようにして特定のプログラミング言語に固有のデータ検証の省略を悪用し、コンピューティングシステムで実行されているプログラムの制御フローをハイジャックするかの一例である。
制御フローインテグリティ(CFI)技術は、ある種のメモリ不正を検出するために使用され得るが、応答能力には限界がある。CFIは、最初にコードまたはプログラムで実行可能なすべてのパスをトレースして制御フローグラフ(CFG)を構築し、次に実行時に、プログラムフローが制御フローグラフを遵守することを強制することによって動作する。CFI強制チェックは、コードの制御フローが制御フローグラフから逸脱することを防ぐセキュリティの形式としてコードにおいて実行され、悪用されたアプリケーションから発生する権限で、制御フローを変更し、任意の悪意のあるアクティビティ(例えば、マルウェア、ウイルス、トロイの木馬、スパイウェアなど)を実行する攻撃を行うことを著しく困難にさせる。このように、CFI技術は、コンピュータ環境内の制御転送および/またはプログラムフローを監視し、維持することができる。CFI技術は、照合モニタ(インラインまたは外部)と、その照合モニタを通過し、グランドトゥルースCFIグラフと比較されるコードの関数遷移とを使用し、異常な、または逸脱した動作を判定することができる。CFI技術は、環境放射(例えば、電場や磁場など)、ランダムノイズ、信号エラー、部品の故障などを含む、悪意のないまたは自然の原因から生じる違反を識別する可能性がある。さらに重要なことに、CFI技術は、ユーザが提供した悪意のあるプログラム入力での操作など、意図的な行為から発生する違反を検出することができる。典型的なCFI違反処理は、実行の停止と、新しい状態でのプログラムの再実行をもたらす。ただし、このような処理メカニズムは、脆弱性への敵対的なアクセスを排除することに失敗し、永続的な悪用を許すことにより、さらにシステムの利用可能性を低下させる。
改善されたCFI技術では、プログラムは、やはり初期のCFI強制命令を装備され得る。ただし、CFI違反を検出すると、実行を停止または再開する代わりに、プログラムコールスタックが、障害ポイントから展開され、違反の原因となった問題のある関数を特定することができる。次いで、問題のある関数でオーバーランしたターゲットバッファについて境界チェックを実行する命令を含むように、問題のある関数が変更(つまり、書き換え)され得る。問題のある関数が書き換えられると、以前のプログラムコールスタック状態を使用して、問題のある関数がコールされる以前のポイントから実行が再開され得る。意義深いことに、書き換えられた関数は、境界チェックを含むようになったので、初期の違反につながる異常なデータが別の違反を引き起こすことが防止される。したがって、再開された実行でメモリの不正が防止され、攻撃者はオーバーフローの脆弱性を全うすることができない。このように、単に実行を止めて、アプリケーションの実行を突然停止するのではなく、アプリケーションは修正されて再開され、それにより、攻撃から回復すると同時に、そのポイントで、アプリケーションの将来のエラーや問題を防ぐことができる。
ここで、図1を参照すると、例示的なコンピュータシステム100は、コンピュータ装置110を含む。コンピュータ装置110は、限定されるものではないが、例えば、デスクトップまたはラップトップまたはタブレットコンピュータ、携帯電話、ゲームデバイス、複合現実または仮想現実デバイス、音楽デバイス、テレビ、ナビゲーションデバイス、カメラ、パーソナルデジタルアシスタント(PDA)、ハンドヘルドデバイス、電子制御ユニット、1つ以上の他のデバイスとの有線および/又は無線接続機能を備えた任意の他のコンピュータデバイス、または、ビデオ出力信号を生成可能な任意の他のタイプのコンピュータ化されたデバイスを含む、任意の携帯式または固定式のコンピュータ装置であり得る。
コンピュータ装置110は、メモリ116に格納された命令を実行する中央処理装置(CPU)114を含むことができる。例えば、CPU114は、オペレーティングシステム140および1つ以上のアプリケーション130を実行することができる。オペレーティングシステム140およびアプリケーション130はそれぞれ、プロセス識別子があてがわれ、メモリ116の一部が割り当てられ得る1つ以上のプロセスに関連付けられることができる。
メモリ116は、データおよび/またはコンピュータ実行可能命令を格納するように構成され得る。コンピュータ実行可能命令は、オペレーティングシステム140および/またはアプリケーション130を定義し、および/またはそれらと関連付けることができる。CPU114は、オペレーティングシステム140および/またはアプリケーション130を実行することができる。メモリ116は、コンピュータ装置110にて、アクセス可能な1つ以上のハードウェアメモリデバイスを代表することができる。メモリ116の例は、限定するものではないが、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、テープ、磁気ディスク、光ディスク、揮発性メモリ、不揮発性メモリ、およびそれらの任意の組み合わせなどの、コンピュータによって使用可能なタイプのメモリを含むことができる。メモリ116は、CPU114によって実行されているアプリケーションのローカルバージョンを格納してもよい。図示の例では、メモリ116は、RAM120、ページキャッシュ122、ハードドライブ124、およびネットワークインターフェース126を含む。RAM120は、1つ以上のデュアルインラインメモリモジュール(DIMM)などのハードウェアコンポーネントであり得る。ページキャッシュ122は、ハードドライブ124などの二次ストレージで発生したページを記憶するために使用されるRAM120の一部であってもよい。ハードドライブ124は、任意の二次ストレージを代表することができる。ハードドライブ124は、RAM120よりも大きな容量を持つが、アクセス時間が遅い場合がある。ネットワークインターフェース126は、例えば、ネットワークドライブとしての二次ストレージとして使用されてもよい。
CPU114は、命令を実行する1つ以上のプロセッサを含むことができる。CPU114の例には、限定するものではないが、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、グラフィックスプロセッシングユニット(GPU)、システムオンチップ(SoC)、または、他のプログラム可能なロジックまたはステートマシンを含む、本明細書で説明されるように特別にプログラムされた任意のプロセッサを含むことができる。CPU114は、算術論理ユニット(ALU)、レジスタ、および制御ユニットなどの他の処理コンポーネントを含んでもよい。CPU114は、複数のコアを含んでもよく、複数のスレッドを実行するために、複数のコアを使用して、命令および/またはデータの異なるセットを同時に処理することができてもよい。
オペレーティングシステム140は、メモリ116に格納され、CPU114によって実行可能な命令(アプリケーション130など)を含むことができる。オペレーティングシステム140は、プロセスにメモリを割り当てるためのメモリマネージャ142を含むことができる。例えば、メモリマネージャ142は、仮想メモリシステムを実装してもよい。メモリ116は、限られた容量のRAM120を含むことができる。CPU114によって実行されるプロセスは、RAM120の利用可能な容量よりも多くのメモリを要求することが可能である。ただし、要求されたメモリの大部分は、かなりの時間の間、アイドルのまま(使用できないまま)になる可能性がある。メモリマネージャ142は、仮想メモリを使用して、仮想メモリアドレス146をプロセスに割り当てることにより、メモリに対する要求を満たすことができる。次いで、仮想メモリアドレス146は、RAM120またはページ内の物理メモリアドレスにそれぞれ関連付けられてもよく、それらは、圧縮メモリ164またはハードドライブ124などの他の論理および物理コンポーネントに格納されてもよい。一実施態様では、仮想メモリは、各仮想メモリアドレス146のメモリ内容(たとえば、ポインタ)の位置を記憶するページテーブル144を含むことができる。一実施形態において、ページテーブル144は、メモリエラーまたは不正を検出および訂正するためのメタデータ148も記憶してもよい。例えば、メタデータ148のセットは、ページテーブル144の各仮想メモリアドレス146に関連付けられてもよい。
通知アプリケーションプログラミングインターフェース(API)154または他のタイプのソフトウェアは、プロセスがメモリマネージャ142と通信可能にすることができ、プロセスのためのメモリ管理の一部の特徴を構成する。一実装形態では、メモリマネージャ142は、不正が行われたメモリに関する通知をプロセスまたは関数に提供することができる。例えば、メモリマネージャ142は、不正が行われたメモリが検出されたときに通知を生成することができる。例えば、メモリマネージャ142は、不正が行われたメモリが検出されたこと、またはCFI違反が発生したことを示す例外をスローしてもよい。プロセスは、プロセスが例外を処理しているかどうかを指示してもよい。メモリマネージャ142が、プロセスが例外を処理しているという指示を受け取らない場合、メモリマネージャ142は、例外を処理する方法を決定してもよい(例えば、回復の試み、プロセスの終了、システムのクラッシュ)。通知の別の例として、改変されたデータが訂正されたときに、メモリマネージャ142は通知を生成してもよい。不正が行われたメモリの検出と同様に、一部のプロセスは、修正されたメモリを特定の方法で処理することができる。例えば、プロセスは、メモリマネージャ142が不正が行われたメモリを正常に修正したと信頼するのではなく、データを再生成できる場合がある。他のケースでは、不正が行われたメモリが修正されたときの通知を、プロセスが受け取らないことを選択してもよい。
エラー検出器158は、関数コールがこわれたかどうかを評価するためのソフトウェアまたはハードウェアであり得る。例えば、エラー検出器158は、バッファアクセスがメモリ116内のバッファ容量を超えるかどうかを調べることにより、バッファエラーを認識することができる。エラー検出器158は、エラーが検出されたとき、通知API154に指示を提供することができる。エラー検出器158は、関数コールがプロセスによって要求されたときに関数コールを評価するように構成されてもよい。したがって、エラー検出器158は、プロセスが検証されたデータを受け取っていることを確実にすることができる。追加的に、または代替的に、エラー検出器158は、関数コールがこわれたかどうかを判断するために、関数コールを定期的に評価してもよい。例えば、エラー検出器158は、アイドルプロセスを使用してエラーをチェックしてもよいし、または比較的長時間メモリに存在していた関数を選択してもよい。例えば、バックグラウンドで実行されているアプリケーションについて、アプリケーションをそれらのタイプで識別し、そのアプリケーションの通常のランタイム(例えば、ランタイム閾値)を決定してもよい。通常のランタイムを超えた場合、エラー検出器158は、アプリケーションにエラーが存在する可能性があると判断することができる。例えば、特定のアプリケーションが1分間だけ実行されることが予想され、アプリケーションが、1分を超える時間実行される場合、エラー検出器158は、関数がこわれたと判断することができる。他の例では、監視時にアプリケーションが予期される応答または「ハートビート」を受信しないか判断するために、ウォッチドッグが利用されてもよい。
エラー修正器159は、エラー検出器158によって検出されたときに、こわれた関数コールを修正しようと試みることができる。エラー修正器159は、関数コールのコードを決定論的に変更することができる。例えば、エラー修正器159は、エラーをテストするためにコードを順次修正することができる。例えば、エラー修正器159は、修正すべきコードの各ライン(またはコードのラインのグループ)を分析し、修正されたコードの各ラインをところてん式に、エラーがないかテストしてもよい。次いで、エラー修正器159は、エラー検出器158を使用して、修正された関数コールが元の関数コールと一致するかどうかを評価することができる。
ここで、図2を参照すると、図1と比較して追加のコンポーネントの詳細を含む、実施形態による例示的なコンピュータ装置110が示されている。一例では、コンピュータ装置110は、本明細書で説明されるコンポーネントおよび機能の1つ以上に関連付けられた処理関数を実行するためのプロセッサ48を含むことができる。プロセッサ48は、単一または複数セットのプロセッサ、またはマルチコアプロセッサを含むことができる。さらに、プロセッサ48は、統合処理システムおよび/または分散処理システムとして実現することができる。一実施形態では、例えば、プロセッサ48は、CPU114を含むことができる。
一例では、コンピュータ装置110は、本明細書で説明される機能を実行するためにプロセッサ48によって実行可能な命令を格納するためのメモリ50を含むことができる。一実装形態では、例えば、メモリ50はメモリ116を含むことができる。CPU114は、記載された機能を実行するための特殊な命令を含むこともできる(例えば、制御フロー転送の妥当性/正しさをチェックするために、これらの特殊な命令を呼び出して関数コールを調べる)。これらのチェックは、エラー検出器158の一部として含まれている照合モニタと、オペレーティングシステム140またはアプリケーション130にコンパイルされたインスツルメンテーションとによって実行されてもよい。
さらに、コンピュータ装置110は、本明細書で説明されるハードウェア、ソフトウェア、およびサービスを利用する1以上の関係者との通信を確立し、維持することを提供する通信コンポーネント52を含むことができる。通信コンポーネント52は、コンピュータ装置110のコンポーネント間、ならびにコンピュータ装置110と、通信ネットワークを介して配置されるデバイスおよび/またはコンピュータ装置110とシリアルまたはローカルに接続されたデバイスなどの外部デバイスとの間の通信を伝えることができる。例えば、通信コンポーネント52は、1つ以上のバスを含むことができ、さらに、外部デバイスとインターフェースで接続するように動作可能な、送信機および受信機それぞれと関連付けられる送信チェーンコンポーネントおよび受信チェーンコンポーネントを含むことができる。
さらに、コンピュータ装置110は、本明細書に記載の実施形態と関連して使用される情報、データベース、およびプログラムの大容量記憶を提供する、ハードウェアおよび/またはソフトウェアの任意の適切な組み合わせとすることができるデータストア54を含むことができる。例えば、データストア54は、オペレーティングシステム140および/またはアプリケーション130のためのデータ収納場所であってもよい。データストアは、メモリ116を含んでもよい。
コンピュータ装置110はまた、コンピュータ装置110のユーザから入力を受け取るように動作可能であり、さらに、ユーザへの提示のための出力を生成するように動作可能であるユーザインターフェースコンポーネント56も含むことができる。ユーザインターフェースコンポーネント56は、限定されるものではないが、触覚入力、キーボード、テンキー、マウス、タッチセンシティブディスプレイ、デジタイザ、ナビゲーションキー、ファンクションキー、マイク、音声認識コンポーネント、ユーザから入力を受けることが可能な任意の他の機構、または、それらの任意の組み合わせを含む、1つ以上の入力デバイスを含むことができる。さらに、ユーザインターフェースコンポーネント56は、限定されるものではないが、ディスプレイ、スピーカ、触覚フィードバック機構、プリンタ、ユーザに出力を提示することができる任意の他の機構、またはそれらの任意の組み合わせを含む、1つ以上の出力デバイスを含むことができる。
一実施形態において、ユーザインターフェースコンポーネント56は、オペレーティングシステム140および/またはアプリケーション130の動作に対応するメッセージを送信および/または受信することができる。加えて、プロセッサ48は、オペレーティングシステム140および/またはアプリケーション130を実行することができ、メモリ50またはデータストア54は、それらを格納することができる。
コンピュータ装置110は、車両の内部に配置され得る。例えば、コンピュータ装置110は、ナビゲーションシステム、オーディオヘッドユニット、車両安全システム、および他の車両コンポーネントを含む車両コンピュータシステムの一部であってもよい。そのような例では、コンピュータ装置110は、車両バス(例えば、コントローラエリアネットワーク(CAN、登録商標)バスなど)などの車両通信ネットワークを利用して他の車両コンポーネントとやりとりすることができる。
図3は、本実施形態によるCFI強制の例示的な方法のフローチャート300である。一例において、例示的な方法は、CPU114による実行のために、アプリケーション130または他のコンピュータコード命令をメモリ116にロードするコンピュータ装置110によって実行され得る。
工程301で、コンピュータ装置110はプログラム命令を実行する。プログラム命令は、コンピュータ装置110のCPU114による実行の対象とする任意のタイプのコンパイルされたコードであり得る。例示的な例では、プログラム命令は、メモリの読み取りまたは書き込みに関するデータ検証チェックを欠く、CまたはC++などの低級言語からコンパイルされた命令を含む。コンピュータ装置110は、コンピュータ装置110の起動時に、または新しいアプリケーションをロードするときに、任意の所与のプログラムを実行することができる。コンピュータ装置110は、コードまたは命令に基づいてコードを自動的に実行することができる。別の例では、コードは、ユーザがコードを手動で実行することに基づいて実行されてもよい。そのような例には、プログラムのダブルクリック、コードを実行するための指示のタイピング、タッチインターフェイス上のアプリケーションアイコンへのタッチ、任意の入力デバイスに基づくアイコンの起動、車両機能の起動などが含まれる。他の入力インターフェースも、プログラムを実行するために利用され得る。
工程303において、実行されているコードのプログラムフローは、制御フロー転送に到達する。制御フロー転送は、プログラムの制御をあるコード位置から別のコード位置に転送するプログラム命令のマシンコード命令であり得る。このような命令の例には、プログラムのフローをサブルーチンの位置に転送する(そして、呼び出しに続く命令のアドレスをスタックに保存して、後でリターン命令で使用できるようにする)コール命令、サブルーチンの実行に完了時にスタックに保存された位置に戻すことを可能にするリターン命令、オプションで、1つ以上のテスト条件の充足に基づいて、制御を別の命令位置に転送する条件付きジャンプ命令、条件に係わらず無条件に制御をターゲット位置に転送する無条件ジャンプ命令などが含まれる。
工程305において、システムは、制御フロー転送の宛先命令が有効なターゲットコード命令であるかどうかを判定する。制御フロー転送がプログラムに期待されるものと一致するプログラムフローの転送を試みている(または引き起こしている)場合、ターゲットコード命令は有効であると見做され得る。違反は、環境放射、ランダムノイズ、信号エラーを含む、悪意のないまたは自然の原因、あるいは人為的な原因から生じる可能性がある。または、ユーザによって提供された悪意のあるプログラム入力による操作などの意図的な行為から違反が生じる場合もある。一実施形態では、ターゲットが有効であるかどうかを識別するために、システムは、CFI強制の対象となる様々な関数コールへの鉤を含むことができる。また、システムは、コンピュータ装置110で操作されているコードまたはプログラム命令に由来する通常のプログラムフローを表すCFGモデルを格納してもよい。エラー検出器158は、鉤を利用して、関数コールを傍受し、係属している制御フロー転送の実行から生じるプログラムフローとCFGモデルの通常のプログラムフローとの比較を実行することができる。ただし、ターゲットが有効でない場合、制御は工程307に進む。一例では、ターゲットがCFGモデルと一致する場合、ターゲットは有効であると見做され、制御は工程301に戻って、制御フロー転送命令の実行を進める。例えば、プログラムの実行中、マシンコード命令が制御を転送するときは常に、事前に作成されたCFGによって決定された有効な宛先をターゲットとする。プログラムフローがCFGモデルと一致しない場合、エラー検出器158またはシステムは、制御フロー転送の到達に基づいて違反が発生したか判定することができる。
工程307で、システムはプログラムコールスタックを展開する。一例では、システムは、現在の問題のある関数がコールされた以前は、プログラムの実行が一貫した安定したポイントにあり、スタックが実行中のそのポイントにて損傷を受けていないという仮定に基づいて、プログラムコールスタックから現在のスタックフレームを取り出すことができる。マシンコードの逆アセンブルは、プログラムコールスタックの問題のある関数に対して実行され、内部のメモリ演算子/オペランドが識別される。以下でより詳細に説明するように、問題のある関数コードは、それをそのままにしておき、違反状態が繰り返される危険性があるのとは対照的に、書き換えられ、メモリ不正の脆弱性(つまり、バッファオーバーフロー)を除去することができる。例えば、アプリケーションまたはプログラムは、マシン語からアセンブリ言語に逆アセンブルされ得る。エラー修正器159は、マシン語をアセンブリ言語に逆アセンブルするのに利用され得る。その後、エラー修正器159は、コードのラインを分析して(例えば、個別に、またはそれらをまとめてグループ化して)、メモリの動作およびコードのラインのデータサイズ制限を判定することができる。
工程309で、システムは問題のある関数コードを分析して、データサイズ制限を判定する。例えば、システム(たとえば、エラー検出器158)は、メモリアクセス演算子およびオペランドを識別するために、命令に対してコード分析を実行することができる。また、システム(例えば、エラー検出器158)は、インスタンスが、定義されている変数の境界を示し得るので、変数のインスタンスを特定するために命令に対してコード分析を実行してもよい。1つの可能性として、データサイズの制限は、プログラム命令の静的、動的、またはシンボリック分析によって抽出することができる。一例では、システムは、関数のプログラム実行をエミュレートして、メモリ不正につながるバッファを識別する。別の例において、システムは、データサイズ制限をパラメータ、レジスタ、または即値として含むバッファ初期化コードについてプログラム命令を検索することができる。いくつかの実装形態では、コード分析を実行するために、システムは問題のある関数のマシン命令コードを、一層高度な分析により適したアセンブリ表現または他の表現に逆アセンブルすることができる。
別の例では、マシンコード逆アセンブルは、問題のある関数、および特定された問題のある関数内のメモリ演算子/オペランドに対して実行されてもよい。オペランドはそのインスタンスまでトレースされ、それによってデータサイズの制限を判定する。境界チェックは、これらの判定されたデータサイズ制限に基づいてサイズ比較を実行するマシン命令で構成される。これらの命令は、境界チェック用のスペースを作成するためにシフトするか、さもなければ再配置することにより、既存の命令とインラインに追加される。コードを書き換える理由は、それをそのままにしておき、違反状態が繰り返される危険性があるのとは対照的に、メモリ不正の脆弱性(つまり、バッファオーバーフロー)を削除するためである。このようにして、悪意のある運用環境での、システム全体の信頼性と利用可能性を向上することができる。一例では、エラー修正器159を利用してコードを書き換えて、メモリの不正を削除することができる。
工程311で、システムは、変更されるコード命令を格納するメモリへの書き込み許可を有効化する。多くの実施形態において、実行可能なコードを含むメモリセグメントは、コードが読み取られることを許可するがコードが変更されるのを防ぐために、メモリマネージャ142によって読み取り専用として記録される。書き込みアクセス制限により、プログラム命令が一旦メモリにロードされると、プログラム命令の偶発的または意図的な改ざんまたは変更が防止されるため、これは一般的に有利である。しかしながら、コード命令への書き込みアクセスに対するこの制限は、CFI強制方法によって識別されるランタイムプログラムの改善の実行を妨げる可能性がある。一例では、割り当てられる許可モデルは、書き込みアクセス制限を強制し、コンピューティング装置の操作中に許可の変更を禁止することができる。また、システムは、メモリマネージャ142に、読み取りおよび書き込み両方の許可を、コードを格納するメモリに一時的にマークするように指示することができ、それにより、問題のある関数が識別された場合にコードを書き換えることが可能になる。
工程313で、システムは、データサイズ制限に従うメモリ動作境界チェックを含むように関数を書き換える。書き換えられた関数には、関数のデータバッファへの書き込み操作がバッファのサイズに制限されていることを確認する境界チェックが含まれる。システムは、データバッファのサイズを判定するために違反をトレースすることができる。システムは、書き換えられた関数コールに関連付けられるメモリのデータサイズ制限を分析することにより、書き換えられた関数コールについてデータサイズ制限を減らすことを保証することができる。境界チェックコード命令の生成を支援するために、システム(例えば、エラー修正器159)は、データサイズ制限と、書き換えられるコードを生成するために挿入され得るメモリオペランド位置とを有するコードテンプレートを利用することができる。その後、システムは書き換えられたコードを既存のマシンコードに投入して、今後のCFIエラーを防止する。例えば、既存のコードをシフトするか、さもなければ既存のコードを移動して新しい境界チェック命令用のスペースを作成することにより、新しい命令を既存の命令とインラインに追加することができる。コードを書き換えることにより、メモリ不正の脆弱性(つまり、バッファオーバーフロー)を削除することができる。これにより、違反状態が繰り返される可能性が回避される。このようにして、システム全体の信頼性と利用可能性を向上することができる。データサイズの制限は、問題のある関数コールから初期化までトレースすることができる。例えば、データサイズの制限は、プログラム命令の静的、動的、またはシンボリック分析によって抽出することができる。システム(例えば、エラー検出器158)は、問題のある関数コールを決定し、プログラム命令を逆アセンブルするか、またはプログラムの実行をエミュレートして、メモリの不正につながるバッファを識別することができる。システムは、メモリまたはプログラムの命令内で、パラメータ、レジスタ、または即値としてデータサイズの制限を含むバッファ初期化コードを検索することができる。復元されたデータサイズの制限とメモリオペランドの位置がコードテンプレートに挿入され、修正されたコードが生成される。別の例では、システム(たとえば、エラー修正器159)は、修正されたコードをテストして、元の命令と比較して修正された命令の機能的同等性を検証することができる。システムは、修正されたプログラムに様々なソフトウェアテスト(例えば、ユニットテスト、回帰テスト、統合テスト、形式的検証テスト、ハードウェアインザループテスト、コーディングルールテストなど)を適用し、修正されたコードにエラーがないかどうかを判断するために、エミュレーション環境下で良性または不正な入力で修正されたプログラムを再実行することができる。なんらかのエラーに応じて、システムは修正を変更し(例えば、ランダム変更、遺伝的アルゴリズムなどを使用して)、合格基準が満たされるまでテストを繰り返す。システムは、問題のある関数コールを決定し、プログラム命令を逆アセンブルするか、またはプログラムの実行をエミュレートして、メモリの不正につながるバッファを識別することができる。システムは、メモリまたはプログラムの命令内で、パラメータ、レジスタ、または即値としてデータサイズの制限を含むバッファ初期化コードを検索することができる。復元されたデータサイズの制限とメモリオペランドの位置がコードテンプレートに挿入され、修正されたコードが生成される。システムは、操作を停止するのとは対照的に、実行時の操作中に、関数コールを書き換えることができる。
工程315で、システムは、コード命令を格納するメモリへの書き込み許可を無効にする。これは、メモリマネージャ142によるコードへの書き込みアクセスの防止を再開させ、それによって、偶然にまたは悪意のあるユーザによって、メモリにロードされたコードが書き換えられることを再び防止する。かくして、無効化された書き込み許可にて、権限のないユーザによりコードを修正できなくすることができる。許可が無効化されると、ファイルの作成、ファイルの削除、ファイル名の変更など、メモリまたはストレージのエントリを変更できなくなる。
工程317で、システムはプログラムコールスタックを以前の状態に復元する。例えば、プログラムスタック、プログラムカウンタおよび他のCPUレジスタ、および他のプログラム状態が、問題のある関数が実行される前のプログラム命令の実行と一致する状態にリセットされ得る。工程317の後、制御は工程301に進み、コードの実行を再開する。問題のある関数を書き換えることで、以前のプログラムコールスタック状態を使用して、問題のある関数がコールされる前のポイントから実行を再開することができる。書き換えられた関数は境界チェックを含むので、発生した違反が別の違反を引き起こすことが防止される。従って、再開された実行においてメモリ不正が防止される。このように、単に実行を止めて、アプリケーションの実行を突然停止するのではなく、アプリケーションは修正され回復状態から再開され、それにより、攻撃から回復すると同時に、そのポイントで、アプリケーションの将来のエラーや問題を防ぐことができる。かくして、プログラムは、関数コールがデータサイズ制限に従うメモリ操作の境界チェックを含むように書き換えられた後、修正がなされた関数を伴って、実行を再開することができる。その後、プログラムは、最初から実行を再開する場合があり、それは境界チェックを可能にする。実行は、回復された状態で行われ得る。
例示的な実施形態が上記に説明されているが、これらの実施形態が、特許請求の範囲に包含されるすべての可能な形態を説明することは意図されていない。本明細書で使用される用語は、限定ではなく説明の用語であり、本開示の主旨および範囲から逸脱することなく、様々な変更を行うことが可能であることが理解されよう。前述したように、様々な実施形態の特徴は、明示的に記載されていないか、または図示されていないかもしれない本発明のさらなる実施形態を形成するために組み合わせることができる。種々の実施形態は、1つ以上の所望の特性に関して、他の実施形態または先行技術の実施形態よりも利点を提供するか、または好ましいものであると説明されてきたかもしれないが、当業者であれば、1つ以上の特徴または特性は、特定の用途および実施に依存する所望のシステム全体の属性を達成するために妥協され得ることを認識するであろう。これらの属性は、コスト、強度、耐久性、ライフサイクルコスト、市場性、外観、パッケージング、サイズ、サービス性、重量、製造性、組み立ての容易さなどを含むことができるが、これらに限定されない。このように、任意の実施形態が、1つ以上の特性に関して他の実施形態または先行技術の実施形態よりも望ましくないと記載されている範囲において、これらの実施形態は、本開示の範囲外ではなく、特定の用途にとって望ましいものであり得る。
48:プロセッサ、50:メモリ、52:通信コンポーネント、54:データストア、56:ユーザインターフェースコンポーネント、100:コンピュータシステム、110:コンピュータ装置、114:CPU、116:メモリ、120:RAM、122:ページキャッシュ、124:ハードドライブ、126:ネットワークインターフェース、130:アプリケーション、140:オペレーティングシステム、142:メモリマネージャ、144:ページテーブル、146:仮想メモリアドレス、148:メタデータ、154:通知API、158:エラー検出器、159:エラー修正器、164:圧縮メモリ

Claims (20)

  1. メモリと、
    プロセスを実行し、そのプロセスのためメモリを管理するように構成された少なくとも1つのプロセッサと、を備え、
    少なくとも1つのプロセッサは、
    アプリケーションに関連付けられた1つ以上のプログラム命令を実行し、
    1つ以上のプログラム命令の制御フロー転送に達し、
    ターゲット制御フローの不遵守に応じて、1つ以上のプログラム命令に関連付けられたコールスタックを展開し、
    問題のある関数コールを特定し、そして、
    問題のある関数コールを書き換える、ように構成され、
    書き換えられる関数コールは、メモリ操作境界チェックを含む、コンピュータ装置。
  2. プロセッサは、ターゲット制御フローの不遵守に応じて、メモリへの書き込み許可を有効化するようにさらに構成される、請求項1に記載のコンピュータ装置。
  3. プロセッサは、問題のある関数コールの書き換えに応じて、メモリへの書き込み許可を無効化するようにさらに構成される、請求項2に記載のコンピュータ装置。
  4. プロセスは、ランタイム動作中に発生するように構成される、請求項1に記載のコンピュータ装置。
  5. プロセッサは、問題のある関数コールのデータサイズ制限を判定するようにさらに構成される、請求項1に記載のコンピュータ装置。
  6. メモリ操作境界チェックは、データサイズ制限に関連付けられる、請求項5に記載のコンピュータ装置。
  7. プロセッサで実行するプロセスのためメモリを管理する方法であって、
    メモリに格納され、アプリケーションに関連付けられた1つ以上のプログラム命令を実行すること、
    1つ以上のプログラム命令の制御フロー転送に達すること、
    ターゲット制御フローの不遵守に応じて、1つ以上のプログラム命令に関連付けられたコールスタックを展開すること、
    問題のある関数コールを特定すること、そして、
    問題のある関数コールを書き換えること、を含み、
    書き換えられる関数コールは、メモリ操作境界チェックを含む、方法。
  8. 方法は、プログラムコールスタックを以前の状態に復元するステップをさらに含む請求項7に記載の方法。
  9. 方法は、ターゲット制御フローの不遵守に応じて、前記メモリに対する書き込み許可を有効化するステップをさらに含む、請求項7に記載の方法。
  10. 方法は、問題のある関数コールの書き換えに応じて、前記メモリに対する書き込み許可を無効化するステップをさらに含む、請求項9に記載の方法。
  11. 方法は、ランタイム動作中に行われる、請求項7に記載の方法。
  12. プロセッサは、問題のある関数コールのデータサイズ制限を判定するようにさらに構成される、請求項7に記載の方法。
  13. メモリ操作境界チェックは、データサイズ制限に関連付けられる、請求項12に記載の方法。
  14. メモリと、
    プロセスを実行し、そのプロセスのためメモリを管理するように構成された少なくとも1つのプロセッサと、を備え、
    少なくとも1つのプロセッサは、
    アプリケーションに関連付けられた1つ以上のプログラム命令を実行し、
    1つ以上のプログラム命令の制御フロー転送に達し、
    ターゲット制御フローの不遵守に応じて、1つ以上のプログラム命令に関連付けられたコールスタックを展開し、
    問題のある関数コールおよびその問題のある関数コールに関連付けられたメモリ内のレジスタのデータサイズ制限を特定し、そして、
    問題のある関数コールを書き換えるように構成され、
    書き換えられた関数コールは、メモリ操作境界チェックを含む、車両内のコンピュータ装置。
  15. プロセッサは、プログラムコールスタックを以前の状態に復元するように構成される請求項14に記載のコンピュータ装置。
  16. プロセッサは、ターゲット制御フローの不遵守に応じて、メモリへの書き込み許可を有効化するようにさらに構成される、請求項14に記載のコンピュータ装置。
  17. プロセッサは、問題のある関数コールの書き換えに応じて、メモリへの書き込み許可を無効化するようにさらに構成される、請求項16に記載のコンピュータ装置。
  18. プロセスは、ランタイム動作中に行われるように構成される、請求項14に記載のコンピュータ装置。
  19. プロセッサは、問題のある関数コールのデータサイズ制限を判定するようにさらに構成される、請求項14に記載のコンピュータ装置。
  20. メモリ操作境界チェックは、データサイズ制限に関連付けられる、請求項19に記載のコンピュータ装置。
JP2020158010A 2019-09-23 2020-09-21 コンピュータ装置およびメモリ管理方法 Active JP6984710B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/578,455 2019-09-23
US16/578,455 US11163645B2 (en) 2019-09-23 2019-09-23 Apparatus and method of control flow integrity enforcement utilizing boundary checking

Publications (2)

Publication Number Publication Date
JP2021051745A JP2021051745A (ja) 2021-04-01
JP6984710B2 true JP6984710B2 (ja) 2021-12-22

Family

ID=74846199

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020158010A Active JP6984710B2 (ja) 2019-09-23 2020-09-21 コンピュータ装置およびメモリ管理方法

Country Status (4)

Country Link
US (1) US11163645B2 (ja)
JP (1) JP6984710B2 (ja)
CN (1) CN112541178A (ja)
DE (1) DE102020124498A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3605374A1 (en) * 2018-08-03 2020-02-05 Hewlett-Packard Development Company, L.P. Intrusion resilient applications
US11983094B2 (en) * 2019-12-05 2024-05-14 Microsoft Technology Licensing, Llc Software diagnostic context selection and use
US20220365838A1 (en) * 2021-05-12 2022-11-17 Nxp Usa, Inc. System and method for improved control flow monitoring of processors
US11874740B2 (en) * 2021-12-21 2024-01-16 Dell Products L.P. Techniques for avoiding and reducing data unavailability
WO2024020162A1 (en) * 2022-07-22 2024-01-25 Cisco Technology, Inc. Control flow integrity enforcement for applications running on platforms
WO2024085931A2 (en) * 2022-07-22 2024-04-25 Cisco Technology, Inc. Control flow integrity monitoring for applications running on platforms

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6578094B1 (en) * 2000-03-02 2003-06-10 International Business Machines Corporation Method for preventing buffer overflow attacks
US7017153B2 (en) * 2001-12-13 2006-03-21 Hewlett-Packard Development Company, L.P. Uninstrumenting in-line code instrumentation via stack unwinding and cleanup
US7401234B2 (en) * 2004-03-01 2008-07-15 Freescale Semiconductor, Inc. Autonomous memory checker for runtime security assurance and method therefore
EP1630710B1 (en) * 2004-07-21 2019-11-06 Microsoft Technology Licensing, LLC Containment of worms
JP4643201B2 (ja) * 2004-08-12 2011-03-02 日本電信電話株式会社 バッファオーバーフロー脆弱性分析方法、データ処理装置、分析情報提供装置、分析情報抽出処理用プログラムおよび分析情報提供処理用プログラム
US8510596B1 (en) 2006-02-09 2013-08-13 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
US8924782B2 (en) 2007-01-26 2014-12-30 The Trustees Of Columbia University In The City Of New York Systems, methods, and media for recovering an application from a fault or attack
US20100070678A1 (en) * 2008-09-12 2010-03-18 Vmware, Inc. Saving and Restoring State Information for Virtualized Computer Systems
US9111036B2 (en) * 2010-04-30 2015-08-18 Red Hat, Inc. Preloading unwind data for non-intrusive backtracing
JP5740573B2 (ja) * 2010-05-13 2015-06-24 パナソニックIpマネジメント株式会社 情報処理装置および情報処理方法
US8701088B2 (en) * 2010-05-28 2014-04-15 Red Hat, Inc. Generating backtracing information for software debugging of software programs running on virtual machines
US9471461B2 (en) * 2013-03-27 2016-10-18 Nec Corporation Guarding a monitoring scope and interpreting partial control flow context
US10216934B2 (en) * 2016-07-18 2019-02-26 Crowdstrike, Inc. Inferential exploit attempt detection
WO2018176339A1 (en) * 2017-03-30 2018-10-04 Intel Corporation Methods and apparatus to protect memory from buffer overflow and/or underflow
JP6885226B2 (ja) * 2017-07-03 2021-06-09 株式会社デンソー 電子制御装置
JP6734481B2 (ja) * 2017-07-10 2020-08-05 日本電信電話株式会社 コールスタック取得装置、コールスタック取得方法、および、コールスタック取得プログラム
US10489244B2 (en) 2017-10-03 2019-11-26 Microsoft Technology Licensing, Llc Systems and methods for detecting and correcting memory corruptions in software
US10705850B2 (en) * 2017-10-11 2020-07-07 Microsoft Technology Licensing, Llc Stack frame unwinding for exception handling
US10866869B2 (en) * 2019-01-16 2020-12-15 Vmware, Inc. Method to perform crash and failure recovery for a virtualized checkpoint protected storage system

Also Published As

Publication number Publication date
US11163645B2 (en) 2021-11-02
US20210089400A1 (en) 2021-03-25
DE102020124498A1 (de) 2021-03-25
CN112541178A (zh) 2021-03-23
JP2021051745A (ja) 2021-04-01

Similar Documents

Publication Publication Date Title
JP6984710B2 (ja) コンピュータ装置およびメモリ管理方法
US11748468B2 (en) Dynamic switching between pointer authentication regimes
EP3123311B1 (en) Malicious code protection for computer systems based on process modification
RU2691187C1 (ru) Система и способы аудита виртуальной машины
US20180211046A1 (en) Analysis and control of code flow and data flow
CN107690645B (zh) 使用解释器虚拟机的行为恶意软件检测
JP6370098B2 (ja) 情報処理装置、情報処理監視方法、プログラム、及び記録媒体
US20220335135A1 (en) Vulnerability analysis and reporting for embedded systems
GB2577947A (en) Verifying stack pointer
WO2017147441A1 (en) Sub-execution environment controller
Yang et al. Eavesdropping user credentials via GPU side channels on smartphones
Piromsopa et al. Survey of protections from buffer-overflow attacks
JP2015166952A (ja) 情報処理装置、情報処理監視方法、プログラム、及び記録媒体
Malenko et al. Device driver and system call isolation in embedded devices
US11556645B2 (en) Monitoring control-flow integrity
Zhang et al. DRSA: Debug Register-Based Self-relocating Attack Against Software-Based Remote Authentication

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200921

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210922

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211108

R151 Written notification of patent or utility model registration

Ref document number: 6984710

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151