JP2022502723A - スタック破損のエクスプロイトに対する中間コードファイルにおけるセキュリティ緩和手段の適用 - Google Patents
スタック破損のエクスプロイトに対する中間コードファイルにおけるセキュリティ緩和手段の適用 Download PDFInfo
- Publication number
- JP2022502723A JP2022502723A JP2020558936A JP2020558936A JP2022502723A JP 2022502723 A JP2022502723 A JP 2022502723A JP 2020558936 A JP2020558936 A JP 2020558936A JP 2020558936 A JP2020558936 A JP 2020558936A JP 2022502723 A JP2022502723 A JP 2022502723A
- Authority
- JP
- Japan
- Prior art keywords
- code
- stack
- address
- routines
- intermediate code
- 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.)
- Pending
Links
- 230000000116 mitigating effect Effects 0.000 title description 17
- 238000000034 method Methods 0.000 claims abstract description 74
- 238000010200 validation analysis Methods 0.000 claims abstract description 55
- 230000008859 change Effects 0.000 claims description 25
- 230000006870 function Effects 0.000 claims description 25
- 239000003550 marker Substances 0.000 claims description 23
- 238000012795 verification Methods 0.000 claims description 21
- 238000004590 computer program Methods 0.000 claims description 14
- 230000001052 transient effect Effects 0.000 claims description 9
- 230000002441 reversible effect Effects 0.000 claims description 8
- 238000013507 mapping Methods 0.000 claims description 4
- 239000000543 intermediate Substances 0.000 description 146
- 238000010586 diagram Methods 0.000 description 9
- 230000006399 behavior Effects 0.000 description 8
- 230000002265 prevention Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 238000010276 construction Methods 0.000 description 5
- 230000008569 process Effects 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 238000003780 insertion Methods 0.000 description 4
- 230000037431 insertion Effects 0.000 description 4
- 150000001875 compounds Chemical class 0.000 description 3
- 239000000463 material Substances 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 230000008685 targeting Effects 0.000 description 2
- 241000287231 Serinus Species 0.000 description 1
- 241000287219 Serinus canaria Species 0.000 description 1
- 241000700605 Viruses Species 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 230000021615 conjugation Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- ZXQYGBMAQZUVMI-GCMPRSNUSA-N gamma-cyhalothrin Chemical compound CC1(C)[C@@H](\C=C(/Cl)C(F)(F)F)[C@H]1C(=O)O[C@H](C#N)C1=CC=CC(OC=2C=CC=CC=2)=C1 ZXQYGBMAQZUVMI-GCMPRSNUSA-N 0.000 description 1
- 230000003116 impacting effect Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 238000012950 reanalysis Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000013515 script Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 210000003813 thumb Anatomy 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/51—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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/54—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44589—Program code verification, e.g. Java bytecode verification, proof-carrying code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45508—Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Description
本出願は、2018年10月18日に出願された米国仮特許出願第62/747,150号からの優先権の利益を主張し、その内容は参照によりその全体が本明細書に組み込まれる。
− コンパイラによって生成された1つ以上の中間コードファイルであって、複数のルーチンで構成される中間コードファイルを受信することと、
− 1つ以上のプロセッサによって実行されるそれぞれの実行可能ファイルを生成する前に、1つ以上の中間コードファイルを調整することであって、
* 1つ以上の中間コードファイルのシンボルテーブルを分析して、複数のルーチンのそれぞれを特定することと、
* 複数のルーチンの1つ以上を調整して、それぞれのルーチンで検出されたリターンアドレスのスタックへのプッシュ命令をそれぞれのプロローグコードセグメントに置き換え、それぞれのルーチンで検出された各リターンアドレスのスタックからのポップ命令をそれぞれのエピローグコードセグメントに置き換えることであって、それぞれのプロローグコードセグメントは、リターンアドレスがスタックにプッシュされた後にスタックを変更するように構成され、それぞれのエピローグコードセグメントは、スタックから取得されたリターンアドレスに分岐する前に、それぞれのプロローグコードセグメントによってなされたスタック変更を検証するように構成されている、置き換えることと、
を備える、調整することと、
− 1つ以上の調整された中間コードファイルを出力することと、
を備え、実行時にスタックの変更が検証できない場合、それぞれのエピローグコードセグメントは、1つ以上のプロセッサの1つ以上の事前定義された動作を開始するようにする、方法が提供される。
− コンパイラによって生成された1つ以上の中間コードファイルを受信するためのコード命令であって、中間コードファイルは複数のルーチンを備える、コード命令と、
− 1つ以上のプロセッサによって実行されるそれぞれの実行可能ファイルを生成する前に、1つ以上の中間コードファイルを調整するためのコード命令であって、調整は、
* 1つ以上の中間コードファイルのシンボルテーブルを分析して、複数のルーチンのそれぞれを特定することと、
* 複数のルーチンの1つ以上を調整して、それぞれのルーチンで検出されたリターンアドレスのスタックへのプッシュ命令をそれぞれのプロローグコードセグメントに置き換え、それぞれのルーチンで検出されたそれぞれのリターンアドレスのスタックからのポップ命令をそれぞれのエピローグコードセグメントに置き換えることであって、それぞれのプロローグコードセグメントは、リターンアドレスがスタックにプッシュされた後にスタックを変更するように構成され、それぞれのエピローグコードセグメントは、スタックから取得されたリターンアドレスに分岐する前に、それぞれのプロローグコードセグメントによってなされたスタック変更を検証するように構成されている、置き換えることと、
を備える、コード命令と、
− 1つ以上の調整された中間コードファイルを出力するためのコード命令と、
を備え、実行時に、スタックの変更が検証できない場合には、それぞれのエピローグコードセグメントは、1つ以上のプロセッサに1つ以上の事前定義された動作を開始させる、システムが提供される。
− コンパイラによって生成され、複数のルーチンを備える1つ以上の中間コードファイルを受信することと、
− 1つ以上のプロセッサによって実行されるそれぞれの実行可能ファイルを生成する前に、1つ以上の中間コードファイルを調整することであって、調整は、
* 複数のルーチンのそれぞれの先頭アドレスを特定するために、1つ以上の中間コードファイルのシンボルテーブルを分析することと、
* 複数のルーチンのそれぞれを分析して、それぞれのルーチン内の1つ以上の間接分岐命令を特定することと、
* 複数のルーチンの1つ以上で検出されたそれぞれの間接分岐命令を、それぞれの間接分岐命令が複数のルーチンの1つの先頭を指していることを、それぞれの間接分岐動作を実行する前に検証するように構成されたそれぞれの検証コードセグメントの呼び出しに置き換えることと、
を備える、調整することと、
− 1つ以上の調整された中間コードファイルを出力することと、
を備え、実行時に、間接分岐命令が複数のルーチンの1つの先頭を指していない場合、それぞれの検証コードセグメントは、1つ以上のプロセッサに1つ以上の事前定義された動作を開始させる、コンピュータ実装される方法が提供される。
− コンパイラによって生成され、複数のルーチンを備える1つ以上の中間コードファイルを受信するためのコード命令と、
− 1つ以上のプロセッサによって実行されるそれぞれの実行可能ファイルを生成する前に、1つ以上の中間コードファイルを調整するためのコード命令で、調整は、
* 複数のルーチンのそれぞれの先頭アドレスを特定するために、1つ以上の中間コードファイルのシンボルテーブルを分析することと、
* 複数のルーチンのそれぞれを分析して、それぞれのルーチン内の1つ以上の間接分岐命令を特定することと、
* 複数のルーチンのそれぞれで検出されたそれぞれの間接分岐命令を、それぞれの間接分岐動作を実行する前に、それぞれの間接分岐命令が複数のルーチンの1つの先頭を指していることを検証するように構成されたそれぞれの検証コードセグメントの呼び出しに置き換えることと、
を備える、コード命令と、
− 調整された中間コードファイルを出力するためのコード命令と、
を備え、実行時に、間接分岐命令が複数のルーチンの1つの先頭を指していない場合、それぞれの検証コードセグメントは、1つ以上のプロセッサに1つ以上の事前定義された動作を開始させる、システムが提供される。
− スタックにプッシュされたリターンアドレスを読み出し、可逆的な仕方でリターンアドレスを変更し、変更されたリターンアドレスをスタックにプッシュして戻すように、それぞれのプロローグコードセグメントを設定することと、
− スタックアドレスから変更されたリターンアドレスを読み出し、それぞれのプロローグコードセグメントが行った操作を反転させて、変更されたリターンアドレスからリターンアドレスを復元し、復元したリターンアドレスをスタックにプッシュして戻すように、それぞれのエピローグコードセグメントを構成することと、
によって、可逆的な仕方でリターンアドレスを変更することに基づいている。
− スタック内の隣接する位置に定数値マーカを挿入するように、それぞれのプロローグコードセグメントを設定することと、
− 定数値マーカを検証し、スタックから定数値マーカを除去するように、それぞれのエピローグコードセグメントを設定することと、
によって、プッシュされたリターンアドレスの位置に隣接する位置において、マーカをスタックにプッシュすることに基づいて行われる。
− 複数のルーチンのそれぞれの先頭のアドレスに先行するアドレスで1つ以上の中間コードファイルに一意的なコードを追加することと、
− 間接分岐関数が指すアドレスの前に一意的なコードがあることを検証するように、それぞれの検証コードセグメントを設定することと、
によって適用される。
− 複数のルーチンのそれぞれの先頭アドレスをマッピングするためのデータセットを構築することと、
− 間接分岐関数によって指されるアドレスが、データセット内にマッピングされた複数のルーチンの1つの先頭アドレスと一致することを検証するように、それぞれの検証コードセグメントを構成することと、
によって適用される。
Claims (26)
- コンピュータに実装された方法で、リターンアドレス保護を適用するように調整されたコンパイル済み中間コードファイルを生成する、コンピュータ実装される方法であって、
コンパイラによって生成された少なくとも1つの中間コードファイルであって、複数のルーチンを備える少なくとも1つの中間コードファイルを受信することと、
少なくとも1つのプロセッサによって実行されるそれぞれの実行可能ファイルを生成する前に、前記少なくとも1つの中間コードファイルを調整することであって、前記調整は、
前記少なくとも1つの中間コードファイルのシンボルテーブルを分析して、前記複数のルーチンのそれぞれを特定することと、
前記複数のルーチンの少なくとも1つのルーチンを調整して、前記少なくとも1つのルーチンで検出された、リターンアドレスのスタックへのプッシュ命令をそれぞれのプロローグコードセグメントに置き換えるとともに、前記少なくとも1つのルーチンで検出されたそれぞれのリターンアドレスの前記スタックからのポップ命令をそれぞれのエピローグコードセグメントに置き換えることであって、それぞれの前記プロローグコードセグメントは、前記リターンアドレスが前記スタックにプッシュされた後に前記スタックを変更するように構成され、それぞれの前記エピローグコードセグメントは、前記スタックから取得されたリターンアドレスに分岐する前に、それぞれの前記プロローグコードセグメントによってなされた前記スタックの変更を検証するように構成されている、置き換えることと、
を備える、調整することと、
調整された少なくとも1つの前記中間コードファイルを出力することと、
を備え、
実行時に前記スタックの変更が検証できない場合に、それぞれの前記エピローグコードセグメントは、少なくとも1つのプロセッサに少なくとも1つの事前定義された動作を開始させる、方法。 - 少なくとも1つの中間コードファイルは、オブジェクトファイル、アーカイブファイル、およびバイナリファイルを備えるグループの1つである、請求項1に記載の方法。
- 前記複数のルーチンのそれぞれは、ルーチン、サブルーチン、および関数を備えるグループの1つである、請求項1に記載の方法。
- アドレスの前記スタックへのプッシュ命令が、前記スタックへの少なくとも1つのデータ項目のプッシュに関連付けられている場合、それぞれの前記プロローグコードセグメントは、前記少なくとも1つのデータ項目を前記スタックにプッシュするように構成され、それぞれの前記エピローグコードセグメントは、前記スタックから前記少なくとも1つのデータ項目をポップするように構成されている、請求項1に記載の方法。
- 前記スタックの変更は、可逆的な方法で前記リターンアドレスを変更することに基づき、
前記スタックにプッシュされた前記リターンアドレスを読み取り、可逆的な方法で前記リターンアドレスを変更し、変更された前記リターンアドレスを前記スタックにプッシュして戻すように、それぞれの前記プロローグコードセグメントを構成することと、
スタックアドレスから変更されたリターンアドレスを読み取り、それぞれの前記プロローグコードセグメントが行った操作を逆にして、変更された前記リターンアドレスから前記リターンアドレスを復元し、復元した前記リターンアドレスを前記スタックにプッシュして戻すように、それぞれの前記エピローグコードセグメントを構成することと、
を備える、請求項1に記載の方法。 - 前記リターンアドレスの変更は、それぞれの前記プロローグコードセグメントが前記リターンアドレスをランダムに選択された値でXORするように構成されるとともに、それぞれの前記エピローグコードセグメントが変更された前記リターンアドレスを同一の前記ランダムに選択された値でXORするように構成されるように、前記リターンアドレスの前記ランダムに選択された値によるXOR操作に基づく、請求項5に記載の方法。
- 前記スタックの変更は、
前記スタック内の、プッシュされた前記リターンアドレスの位置に隣接する位置に定数値マーカを挿入するようにそれぞれの前記プロローグコードセグメントを構成することと、
前記定数値マーカを検証し、前記定数値マーカを前記スタックから削除するように、それぞれの前記エピローグコードセグメントを構成することと、
により、前記スタック内の前記隣接する位置にマーカをプッシュすることに基づいて行われる、請求項1の方法。 - 前記定数値マーカは、前記少なくとも1つのプロセッサのすべての起動イベントの間にランダムに選択される、請求項7に記載の方法。
- 前記少なくとも1つの事前定義された動作は、前記少なくとも1つのプロセッサの実行をクラッシュさせることと、前記少なくとも1つのプロセッサの実行を停止することと、前記少なくとも1つのプロセッサに事前定義されたアドレスに分岐させることと、前記少なくとも1つのプロセッサに少なくとも1つの潜在的に悪意のあるコード命令を実行することを阻止させることと、無効なスタック変更の指示を生成することと、を備えるグループの1つである、請求項1に記載の方法。
- それぞれの前記プロローグコードセグメントおよびそれぞれの前記エピローグコードセグメントは、アドレスの前記スタックへのプッシュ命令およびアドレスの前記スタックからのポップ命令のそれぞれを、前記アドレスのプッシュ操作およびポップ操作の間に追加された前記コードセグメントを呼び出すように構成されたトランポリン分岐関数に置き換えることによって、前記少なくとも1つのルーチンに追加されることを特徴とする、請求項1に記載の方法。
- 前記少なくとも1つの中間コードファイルは、追加された前記コードセグメントの追加によって影響を受けた命令およびデータエレメントの少なくとも1つを修正するように調整される、請求項1に記載の方法。
- 前記少なくとも1つの中間コードファイルは、追加されたコードセグメントおよび調整された前記ルーチンのサイズの増加を反映するように、その前記シンボルテーブルを更新するように修正される、請求項11に記載の方法。
- リターンアドレス保護を適用するように調整されたコンパイル済み中間コードファイルを生成するためのシステムであって、
コードを格納するプログラムストアと、
前記プログラムストアに結合され、格納された前記コードを実行する少なくとも1つのプロセッサであって、前記コードは、
コンパイラによって生成された、複数のルーチンを備える少なくとも1つの中間コードファイルを受信するためのコード命令と、
前記少なくとも1つのプロセッサによって実行されるそれぞれの実行可能ファイルを生成する前に、少なくとも1つの中間コードファイルを調整するためのコード命令であって、前記調整は、
前記少なくとも1つの中間コードファイルのシンボルテーブルを分析して、前記複数のルーチンのそれぞれを特定することと、
少なくとも1つの前記ルーチンで検出された、アドレスのスタックへのプッシュ命令をそれぞれのプロローグコードセグメントに置き換えるとともに、少なくとも1つの前記ルーチンで検出されたそれぞれのアドレスのスタックからのポップ命令をそれぞれのエピローグコードセグメントに置き換えるように、前記複数のルーチンの少なくとも1つを調整することであって、それぞれの前記プロローグコードセグメントは、リターンアドレスが前記スタックにプッシュされた後にスタックを変更するように構成され、それぞれの前記エピローグコードセグメントは、前記スタックから取得された前記リターンアドレスに分岐する前に、それぞれの前記プロローグコードセグメントによってなされたスタック変更を検証するように構成されている、調整することと、
を備える、コード命令と、
調整された前記少なくとも1つの中間コードファイルを出力するためのコード命令と。
を備え、実行時に、前記スタックの変更が検証できない場合、それぞれの前記エピローグコードセグメントは、前記少なくとも1つのプロセッサに少なくとも1つの事前定義された動作を開始させる、システム。 - リターンアドレス保護を適用するように調整された少なくとも1つの中間コードファイルから生成されたコンピュータプログラムの実行可能ファイルであって、
非一過性のコンピュータ可読な記憶媒体と、
前記少なくとも1つの中間コードファイルから少なくとも1つのプロセッサによる実行のために生成され、リターンアドレス保護をサポートするように調整された、実行可能ファイルの少なくとも1つの調整されたルーチンの複数のプログラム命令であって、前記少なくとも1つの調整されたルーチンにおいて、アドレスのスタックへのプッシュ命令がそれぞれのプロローグコードセグメントに置き換えられ、それぞれのアドレスのスタックからのポップ命令がそれぞれのエピローグコードセグメントに置き換えられ、それぞれの前記プロローグコードセグメントは、リターンアドレスが前記スタックにプッシュされた後に前記スタックを変更するように構成され、それぞれの前記エピローグコードセグメントは、前記スタックから取得された前記リターンアドレスに分岐する前に、それぞれの前記プロローグコードセグメントによってなされたスタック変更を検証するように構成され、前記スタック変更が検証できない場合、それぞれの前記エピローグコードセグメントは、前記少なくとも1つのプロセッサに、少なくとも1つの所定の動作を開始させる、複数のプログラム命令と、
を備え、前記非一過性のコンピュータ可読な記憶媒体からの前記複数のプログラム命令が、前記少なくとも1つのプロセッサによって実行される、コンピュータプログラムの実行可能ファイル。 - リターン指向プログラミングのエクスプロイトを防ぐように調整されたコンパイル済み中間コードファイルを生成するためのコンピュータ実装される方法であって、
コンパイラによって生成された少なくとも1つの中間コードファイルであって、複数のルーチンを備える少なくとも1つの中間コードファイルを受信することと、
少なくとも1つのプロセッサによって実行されるそれぞれの実行可能ファイルを生成する前に、前記少なくとも1つの中間コードファイルを調整することであって、
前記少なくとも1つの中間コードファイルのシンボルテーブルを分析して、前記複数のルーチンのそれぞれの先頭アドレスを特定することと、
前記複数のルーチンのそれぞれを分析して、前記複数のルーチンの少なくとも1つの中の少なくとも1つの間接分岐命令を特定することと、
前記複数のルーチンの少なくとも1つで検出された前記間接分岐命令のそれぞれが前記複数のルーチンの1つの前記先頭アドレスを指していることを間接分岐動作のそれぞれを実行する前に検証するように構成されたそれぞれの検証コードセグメントの呼び出しで、それぞれの前記間接分岐命令を置き換えることと、
を備える、調整することと、
調整された前記少なくとも1つの中間コードファイルを出力することと、
を備え、実行時に、前記間接分岐命令が前記複数のルーチンの1つの前記先頭アドレスを指していない場合、前記それぞれの検証コードセグメントは、前記少なくとも1つのプロセッサに少なくとも1つの所定の動作を開始させる、
方法。 - 少なくとも1つの前記ルーチンを調整することは、前記間接分岐命令を、それぞれの検証コードセグメントを指す直接分岐命令に置き換えることを備える、請求項15の方法。
- 少なくとも1つの前記ルーチンを調整することは、前記間接分岐命令によって指されるアドレスをスタックにプッシュするための直接分岐命令の前に前記スタックへのプッシュ命令を挿入することをさらに含み、前記スタックからポップされた後にプッシュされた前記アドレスは、前記検証コードセグメントによって検証のために使用される、請求項16に記載の方法。
- 少なくとも1つの前記ルーチンを調整することは、前記間接分岐命令によって指されるアドレスを事前に決定されたレジスタに書き込むための書き込み命令を前記直接分岐命令の前に挿入することをさらに備え、書き込まれた前記アドレスは、前記事前に決定されたレジスタから取得された後に検証コードセグメントによって検証のために使用される、請求項16の方法。
- 少なくとも1つの前記ルーチンを調整することは、前記間接分岐命令によって指されるアドレスを事前定義された変数に書き込むための書き込み命令を前記直接分岐命令の前に挿入することをさらに備え、書き込まれた前記アドレスは、前記事前定義された変数から取得された後に前記検証コードセグメントによって検証のために使用される、請求項16に記載の方法。
- 前記複数のルーチンの1つの前記先頭アドレスを指す前記間接分岐命令の検証は、前記少なくとも1つの中間コードファイル内の前記複数のルーチンのそれぞれに先行する一意的なコードの検証に基づき、前記一意的なコードの検証は、
前記複数のルーチンのそれぞれの前記先頭アドレスに先行するアドレスの前記少なくとも1つの中間コードファイルに前記一意的なコードを追加することと、
間接分岐関数が指すアドレスの前に前記一意的なコードがあることを検証するように、それぞれの前記検証コードセグメントを構成することと、
によって適用される、請求項15に記載の方法。 - 前記複数のルーチンの1つの先頭アドレスを指す前記間接分岐命令の検証は、前記複数のルーチンのそれぞれの先頭アドレスをマッピングしたデータセットに基づいて行われ、前記データセットのマッピングの検証は、
複数のルーチンのそれぞれの前記先頭アドレスをマッピングするための前記データセットを構築することと、
間接分岐関数によって指されるアドレスが、前記データセットにマッピングされた前記複数のルーチンの1つの前記先頭アドレスと一致することを検証するように、それぞれの前記検証コードセグメントを構成することと、
によって適用される、請求項15に記載の方法。 - 前記少なくとも1つの所定の動作は、前記少なくとも1つのプロセッサの実行をクラッシュさせることと、前記少なくとも1つのプロセッサの実行を停止することと、前記少なくとも1つの中間コードファイル内の事前定義されたアドレスに前記少なくとも1つのプロセッサを分岐させることと、前記少なくとも1つのプロセッサが前記少なくとも1つの潜在的に悪意のあるコード命令を実行することを防止することと、前記少なくとも1つの間接分岐命令が前記複数のルーチンの1つの前記先頭アドレスを指していないことの指示を生成することと、を備えるグループの1つである、請求項15に記載の方法。
- 前記少なくとも1つの中間コードファイルは、前記少なくとも1つの間接分岐をそれぞれの検証コードセグメントの呼び出しで置き換えることによって影響を受ける命令およびデータ要素の少なくとも1つを修正するように調整される、請求項15に記載の方法。
- 前記少なくとも1つの中間コードファイルは、前記少なくとも1つの間接分岐の前記それぞれの検証コードセグメントの呼び出しでの置き換えを反映するように、そのシンボルテーブルを更新するように修正される、請求項15に記載の方法。
- リターン指向プログラミングのエクスプロイトを防ぐように調整されたコンパイル済み中間コードファイルを生成するためのシステムであって、
コードを格納するプログラムストアと、
プログラムストアに結合され、格納された前記コードを実行する少なくとも1つのプロセッサであって、前記コードは、
コンパイラによって生成された少なくとも1つの中間コードファイルであって、複数のルーチンを備える少なくとも1つの中間コードファイルを受信するコード命令と、
少なくとも1つのプロセッサによって実行されるそれぞれの実行可能ファイルを生成する前に、前記少なくとも1つの中間コードファイルを調整するコード命令であって、前記調整は、
前記少なくとも1つの中間コードファイルのシンボルテーブルを分析して、前記複数のルーチンのそれぞれの先頭アドレスを特定することと、
前記複数のルーチンのそれぞれを分析して、前記複数のルーチンの少なくとも1つの中の少なくとも1つの間接分岐命令を特定することと、
前記複数のルーチンの少なくとも1つで検出されたそれぞれの間接分岐命令が前記複数のルーチンの1つの前記先頭アドレスを指していることをそれぞれの間接分岐動作を実行する前に検証するように構成されたそれぞれの検証コードセグメントの呼び出しで、それぞれの前記間接分岐命令を置き換えることと、
を備える、調整するコード命令と、
調整された前記少なくとも1つの中間コードファイルを出力するコード命令と、
を備え、実行時に、前記間接分岐命令が前記複数のルーチンの1つの前記先頭アドレスを指していない場合、前記それぞれの検証コードセグメントは、前記少なくとも1つのプロセッサに少なくとも1つの所定の動作を開始させる、
システム。 - リターン指向プログラミングのエクスプロイトを防ぐように調整された、少なくとも1つの中間コードファイルから生成されたコンピュータプログラムの実行可能ファイルであって、
非一過性のコンピュータ可読な記憶媒体と、
リターンアドレス保護をサポートするように調整された、少なくとも1つの中間コードファイルから少なくとも1つのプロセッサによる実行のために生成された実行可能ファイルの複数のルーチンの少なくとも1つの調整されたルーチンの複数のプログラム命令であって、前記少なくとも1つの調整されたルーチンにおいて、それぞれの間接分岐命令は、前記それぞれの間接分岐命令が前記複数のルーチンの1つの先頭アドレスを指していることを検証するように構成されたそれぞれの検証コードセグメントの呼び出しに置き換えられ、前記間接分岐命令が前記複数のルーチンの1つの前記先頭アドレスを指していない場合、前記それぞれの検証コードセグメントは、前記少なくとも1つのプロセッサに少なくとも1つの事前定義された動作を開始させる、複数のプログラム命令と、
を備え、前記非一過性のコンピュータ可読な記憶媒体からの前記複数のプログラム命令は、前記少なくとも1つのプロセッサによって実行される、コンピュータプログラムの実行可能ファイル。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862747150P | 2018-10-18 | 2018-10-18 | |
US62/747,150 | 2018-10-18 | ||
PCT/IL2019/051075 WO2020079676A1 (en) | 2018-10-18 | 2019-10-02 | Applying security mitigation measures for stack corruption exploitation in intermediate code files |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2022502723A true JP2022502723A (ja) | 2022-01-11 |
JPWO2020079676A5 JPWO2020079676A5 (ja) | 2022-10-12 |
Family
ID=70279555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020558936A Pending JP2022502723A (ja) | 2018-10-18 | 2019-10-02 | スタック破損のエクスプロイトに対する中間コードファイルにおけるセキュリティ緩和手段の適用 |
Country Status (5)
Country | Link |
---|---|
US (2) | US11231948B2 (ja) |
EP (1) | EP3867784A4 (ja) |
JP (1) | JP2022502723A (ja) |
IL (1) | IL282388B2 (ja) |
WO (1) | WO2020079676A1 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11157611B2 (en) * | 2018-01-02 | 2021-10-26 | Blackberry Limited | Binary image stack cookie protection |
WO2020079676A1 (en) | 2018-10-18 | 2020-04-23 | Sternum Ltd. | Applying security mitigation measures for stack corruption exploitation in intermediate code files |
US11176060B2 (en) | 2018-10-29 | 2021-11-16 | Sternum Ltd. | Dynamic memory protection |
US20230306110A1 (en) * | 2022-03-08 | 2023-09-28 | Denso Corporation | Dynamic adaptation of memory elements to prevent malicious attacks |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6802056B1 (en) * | 1999-06-30 | 2004-10-05 | Microsoft Corporation | Translation and transformation of heterogeneous programs |
JP2001160080A (ja) * | 1999-12-02 | 2001-06-12 | Nec Corp | オブジェクト指向言語によるシステムのシミュレーション方法、装置及びそのプログラムを記録した記録媒体 |
US7752459B2 (en) | 2001-12-06 | 2010-07-06 | Novell, Inc. | Pointguard: method and system for protecting programs against pointer corruption attacks |
US8042179B2 (en) * | 2003-09-04 | 2011-10-18 | Science Park Corporation | False code execution prevention method, program for the method, and recording medium for recording the program |
JP4806204B2 (ja) * | 2005-03-30 | 2011-11-02 | 株式会社日立国際電気 | 暗号化データ通信システム |
US7913243B2 (en) * | 2005-06-21 | 2011-03-22 | International Business Machines Corporation | Method and system for generating and applying patches to a computer program concurrently with its execution |
US8510596B1 (en) | 2006-02-09 | 2013-08-13 | Virsec Systems, Inc. | System and methods for run time detection and correction of memory corruption |
EP1870829B1 (en) | 2006-06-23 | 2014-12-03 | Microsoft Corporation | Securing software by enforcing data flow integrity |
US7904881B2 (en) * | 2006-07-26 | 2011-03-08 | Intel Corporation | Using a virtual stack for fast and composable stack cutting |
US20090113403A1 (en) * | 2007-09-27 | 2009-04-30 | Microsoft Corporation | Replacing no operations with auxiliary code |
WO2013109233A2 (en) * | 2011-11-03 | 2013-07-25 | Intel Corporation | Method to emulate message signaled interrupts with interrupt data |
US20150007142A1 (en) * | 2012-12-12 | 2015-01-01 | Google Inc. | Branch destination tables |
JP2016534479A (ja) | 2013-09-12 | 2016-11-04 | ヴァーセック・システムズ・インコーポレーテッドVirsec Systems,Inc. | マルウェアのランタイム中の自動検出 |
US9390264B2 (en) | 2014-04-18 | 2016-07-12 | Qualcomm Incorporated | Hardware-based stack control information protection |
US9727729B2 (en) | 2014-06-24 | 2017-08-08 | Virsec Systems, Inc. | Automated code lockdown to reduce attack surface for software |
US9870469B2 (en) * | 2014-09-26 | 2018-01-16 | Mcafee, Inc. | Mitigation of stack corruption exploits |
US9754112B1 (en) * | 2014-11-24 | 2017-09-05 | Bluerisc, Inc. | Detection and healing of vulnerabilities in computer code |
US9569613B2 (en) * | 2014-12-23 | 2017-02-14 | Intel Corporation | Techniques for enforcing control flow integrity using binary translation |
US10289842B2 (en) * | 2015-11-12 | 2019-05-14 | Samsung Electronics Co., Ltd. | Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation |
US10157268B2 (en) * | 2016-09-27 | 2018-12-18 | Microsoft Technology Licensing, Llc | Return flow guard using control stack identified by processor register |
WO2018071450A1 (en) * | 2016-10-11 | 2018-04-19 | Green Hills Software, Inc. | Systems, methods, and devices for vertically integrated instrumentation and trace reconstruction |
US10698668B1 (en) * | 2018-05-29 | 2020-06-30 | Amazon Technologies, Inc. | Custom code transformations during compilation process |
WO2020079676A1 (en) | 2018-10-18 | 2020-04-23 | Sternum Ltd. | Applying security mitigation measures for stack corruption exploitation in intermediate code files |
-
2019
- 2019-10-02 WO PCT/IL2019/051075 patent/WO2020079676A1/en unknown
- 2019-10-02 US US16/590,404 patent/US11231948B2/en active Active
- 2019-10-02 EP EP19873518.5A patent/EP3867784A4/en active Pending
- 2019-10-02 JP JP2020558936A patent/JP2022502723A/ja active Pending
- 2019-10-02 IL IL282388A patent/IL282388B2/en unknown
-
2021
- 2021-12-15 US US17/552,068 patent/US20220107827A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
EP3867784A4 (en) | 2022-07-06 |
IL282388A (en) | 2021-06-30 |
EP3867784A1 (en) | 2021-08-25 |
WO2020079676A1 (en) | 2020-04-23 |
US20220107827A1 (en) | 2022-04-07 |
US20200125378A1 (en) | 2020-04-23 |
IL282388B1 (en) | 2023-09-01 |
US11231948B2 (en) | 2022-01-25 |
IL282388B2 (en) | 2024-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Williams-King et al. | Egalito: Layout-agnostic binary recompilation | |
US10223528B2 (en) | Technologies for deterministic code flow integrity protection | |
US7376970B2 (en) | System and method for proactive computer virus protection | |
JP2022502723A (ja) | スタック破損のエクスプロイトに対する中間コードファイルにおけるセキュリティ緩和手段の適用 | |
JP6837064B2 (ja) | ランタイム生成コードにおける悪意のあるコードの検出のためのシステムおよび方法 | |
US20170372068A1 (en) | Method to identify known compilers functions, libraries and objects inside files and data items containing an executable code | |
US8429637B2 (en) | System and method for conditional expansion obfuscation | |
US20120233601A1 (en) | Recompiling with Generic to Specific Replacement | |
WO2008002350A1 (en) | Securing software by enforcing data flow integrity | |
US20150294114A1 (en) | Application randomization | |
Yadavalli et al. | Raising binaries to llvm ir with mctoll (wip paper) | |
US10762199B2 (en) | Compiler assisted protection against arbitrary code execution | |
IL269897B2 (en) | Implementing control flow correctness verification in code intermediate files | |
US10152592B2 (en) | Compiler assisted protection against arbitrary code execution | |
JP7432523B2 (ja) | 動的メモリ保護 | |
Pappas et al. | Practical software diversification using in-place code randomization | |
EP3147781A1 (en) | Wrapper calls identification | |
Nurmukhametov et al. | Application of compiler transformations against software vulnerabilities exploitation | |
KR20200017120A (ko) | 코스 스프레잉을 이용한 코드 보호 방법 및 시스템 | |
US11687440B2 (en) | Method and device of protecting a first software application to generate a protected software application | |
KR20200017121A (ko) | 원타임 코드를 이용한 코드 보호 방법 및 시스템 | |
US20230418576A1 (en) | Protection, obfuscation, and optimization of binary executables using recompilation | |
Davison et al. | Kevlar: Transitioning helix for research to practice | |
WO2022044021A1 (en) | Exploit prevention based on generation of random chaotic execution context | |
WO2019149630A1 (en) | Method for protecting an executable code |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7426 Effective date: 20220630 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20220630 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20221003 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20221003 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20230914 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20231003 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20231227 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20240305 |