JP7101761B2 - コール・パス依存認証 - Google Patents

コール・パス依存認証 Download PDF

Info

Publication number
JP7101761B2
JP7101761B2 JP2020513784A JP2020513784A JP7101761B2 JP 7101761 B2 JP7101761 B2 JP 7101761B2 JP 2020513784 A JP2020513784 A JP 2020513784A JP 2020513784 A JP2020513784 A JP 2020513784A JP 7101761 B2 JP7101761 B2 JP 7101761B2
Authority
JP
Japan
Prior art keywords
path identifier
value
call path
instruction
authentication 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.)
Active
Application number
JP2020513784A
Other languages
English (en)
Other versions
JP2020533683A (ja
Inventor
ホージー、サイモン
Original Assignee
アーム・リミテッド
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 アーム・リミテッド filed Critical アーム・リミテッド
Publication of JP2020533683A publication Critical patent/JP2020533683A/ja
Application granted granted Critical
Publication of JP7101761B2 publication Critical patent/JP7101761B2/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/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/31User authentication
    • G06F21/42User authentication using separate channels for security data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • 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
    • 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/552Detecting local intrusion or implementing counter-measures involving long-term monitoring or reporting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Exchange Systems With Centralized Control (AREA)
  • Telephone Function (AREA)

Description

本技法、データ処理の分野に関する。
いくつかのデータ処理システムは、攻撃者が処理回路にプログラム・コードの無認可のセクションを実行させようと試行する場合に潜在的な攻撃に対して防御するメカニズムを有することができる。そのような攻撃に対して防御する1つ方法は、予めメモリにインストールされた信頼できるソフトウェアのみが実行され得るように、メモリへの実行可能なコードの書き込みを禁止することであり得る。しかしながら、そのような制限を設けても、潜在的な攻撃はコードの再利用を含むことがあり、この場合、コード内に存在する間接的な分岐命令を妨げることにより、正当に実行可能なコードのスニペットがつなぎ合わされる。例えば、攻撃者が分岐命令のターゲット・アドレスを生成するために使用されるレジスタ内の値を変更する場合、攻撃者は、プロセッサがコードの不適切なポイントに分岐するよう騙すことができ、例えばパスワード・チェック又は認証動作などのセキュリティ的な保護を与えることのできるコードの一定のセクションをバイパスさせる。
Borghoffら、「PRINCE-a low-latency block cipher for pervasive computing applications.」、International Conference on the Theory and Application of Cryptology and Information Security、シュプリンガー、ベルリン、ハイデルベルク、2012年 Jeanら、「Tweaks and keys for block ciphers: the TWEAKEY framework.」、International Conference on the Theory and Application of Cryptology and Information Security、シュプリンガー、ベルリン、ハイデルベルク、2014年 Robert Bedichek、「Some Efficient Architecture Simulation Techniques」、1990年冬季USENIX Conference、53~63頁
少なくともいくつかの実例は、命令を実行するための処理回路と、コール・パス識別子を記憶するためのコール・パス識別子記憶要素であり、ターゲット関数をコールするためのコール命令に応答して、処理回路は、コール・パス識別子記憶要素に記憶される更新されたコール・パス識別子を生成するために、コール・パス識別子を関数リターン・アドレスで置換するように構成される、コール・パス識別子記憶要素とを備え、第1のソース値を特定する認証コード生成命令に応答して、処理回路は第1のソース値及び少なくとも1つの修飾子値(modifier value)に依存する認証コードを生成するように構成され、以前に生成された認証コードに関連付けられる第2のソース値を特定する認証コード・チェック命令に応答して、処理回路は以前に生成された認証コードが、第2のソース値及び少なくとも1つの修飾子値に依存する期待される認証コードと一致するかどうかをチェックし、以前に生成された認証コードと期待される認証コードとの間に不一致が検出される場合はエラー・ハンドリング応答をトリガするように構成され、認証コード生成命令のうちの少なくとも1つの変形、及び認証コード・チェック命令のうちの少なくとも1つの変形について、前記少なくとも1つの修飾子値はコール・パス識別子記憶要素に記憶されるコール・パス識別子に依存する値を含む、装置を提供する。
少なくともいくつかの実例は、ターゲット関数のコールに応答して、コール・パス識別子記憶要素に記憶される更新されたコール・パス識別子を生成するために、コール・パス識別子記憶要素に記憶されるコール・パス識別子を関数リターン・アドレスと置換することと、第1のソース値及び少なくとも1つの修飾子値に応じて認証コードを生成するために第1のソース値に対して認証コード生成演算を実施することと、以前に生成された認証コードが、第2のソース値及び少なくとも1つの修飾子値に依存する期待される認証コードと一致するかどうかをチェックし、以前に生成された認証コードと期待される認証コードとの間に不一致が検出される場合はエラー・ハンドリング応答をトリガするために、以前に生成された認証コードに関連付けられる第2のソース値に対して認証コード・チェック演算を実施することとを含み、認証コード生成演算のうちの少なくとも1つの変形、及び認証コード・チェック演算のうちの少なくとも1つの変形について、前記少なくとも1つの修飾子値はコール・パス識別子記憶要素に記憶されるコール・パス識別子に依存する値を含む、データ処理方法を提供する。
少なくともいくつかの実例は、上述の方法を実施するためのデータ処理装置を制御するための、コンピュータ・プログラムを提供する。コンピュータ・プログラムは記録媒体に記憶することができる。記録媒体は非一時的な記録媒体であってもよい。
少なくともいくつかの実例は、命令を実行するための命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、命令実行環境において命令の実行を制御するための処理プログラム・ロジックと、コール・パス識別子を記憶するためのコール・パス識別子データ構造であり、ターゲット関数をコールするためのコール命令に応答して、処理プログラム・ロジックはホスト・データ処理装置が、コール・パス識別子データ構造に記憶される更新されたコール・パス識別子を生成するために、コール・パス識別子を関数リターン・アドレスで置換するように制御するように構成される、コール・パス識別子データ構造とを備え、第1のソース値を特定する認証コード生成命令に応答して、処理プログラム・ロジックはホスト・データ処理装置が、第1のソース値及び少なくとも1つの修飾子値に依存する認証コードを生成するように制御するように構成され、以前に生成された認証コードに関連付けられる第2のソース値を特定する認証コード・チェック命令に応答して、処理プログラム・ロジックはホスト・データ処理装置が、以前に生成された認証コードが、第2のソース値及び少なくとも1つの修飾子値に依存する期待される認証コードと一致するかどうかをチェックし、以前に生成された認証コードと期待される認証コードとの間に不一致が検出される場合はエラー・ハンドリング応答をトリガするように、制御するように構成され、認証コード生成命令のうちの少なくとも1つの変形、及び認証コード・チェック命令のうちの少なくとも1つの変形について、前記少なくとも1つの修飾子値はコール・パス識別子データ構造に記憶されるコール・パス識別子に依存する値を含む、コンピュータ・プログラムを提供する。
命令実行環境を提供するためのホスト・データ処理装置を制御するためのコンピュータ・プログラムは、記録媒体に記録することができる。記録媒体は非一時的な記録媒体であってもよい。
本技法のさらなる態様、特徴及び利点は、添付の図面と併せて読まれる実例の以下の説明から明らかとなろう。
データ処理装置の実例を概略的に示す図である。 コール・パス識別子の使用の図である。 認証コード生成命令の実例の図である。 認証コード・チェック命令の実例の図である。 修飾子値がコール・パス識別子に依存する認証コード生成命令の実例の図である。 修飾子値がコール・パス識別子に依存する認証コード・チェック命令の実例の図である。 モード表示値が修飾子値の選択を制御する認証コード生成命令の実例の図である。 モード表示値が修飾子値の選択を制御する認証コード・チェック命令の実例の図である。 コール・パス識別子の保存命令の実例の図である。 コール・パス識別子のリストア命令の実例の図である。 コール・パス識別子置換命令の実例を示す。 関数コールに応答してコール・パス識別子を置換する方法を図示する流れ図である。 関数リターンに応答してコール・パス識別子の置換を反転させる方法を図示する流れ図である。 認証コード生成命令を処理する方法を図示する流れ図である。 認証コード・チェック命令を処理する方法を図示する流れ図である。 使用され得るシミュレータ実装形態の図である。
装置は、命令を実行するための処理回路と、コール・パス識別子を記憶するためのコール・パス識別子記憶要素とを有する。ターゲット関数をコールするためのコール命令に応答して、処理回路はコール・パス識別子記憶要素に記憶される更新されたコール・パス識別子を生成するために、コール・パス識別子を関数リターン・アドレスと置換することができる。第1のソース値を特定する認証コード生成命令に応答して、処理回路は第1のソース値及び少なくとも1つの修飾子値に依存する認証コードを生成するように構成される。以前に生成された認証コードに関連付けられる第2のソース値を特定する認証コード・チェック命令に応答して、処理回路は以前に生成された認証コードが第2のソース値及び少なくとも1つの修飾子値に依存する期待される認証コードと一致するかどうかをチェックすることができる。処理回路は、以前に生成された認証コードと期待される認証コードとの間に不一致が検出される場合はエラー・ハンドリング応答をトリガすることができる。認証コード生成命令のうちの少なくとも1つの変形、及び認証コード・チェック命令のうちの少なくとも1つの変形について、前記少なくとも1つの修飾子値はコール・パス識別子記憶要素に記憶されるコール・パス識別子に依存する値を含む。
これは、コード再利用攻撃に対する防御のための技法を提供する。コール・パス識別子は、プログラム内で実行の現在のポイントにつながる関数コールの履歴の記録を提供する。認証コード生成命令は、分岐アドレスを生成するためのベースとして使用される値が生成されるプログラム内のポイントにおいて使用することができ、第1のソース値及び修飾子値に依存する認証コードを生成することにより、これは修飾子値に関連付けられるいくつかのプログラムのコンテキストに結び付けることができる。コール・パス識別子を認証コード生成命令の少なくとも1つの変形についての修飾子値として使用することにより、これはソース値の使用をプログラム内の特定のポイントに結び付けるより強力な手段を提供することができるが、それは同一の関数がプログラムを通じて取られる異なるルートでコールされたとしても、コール・パス識別子は実行の現在のポイントにつながる関数コールの履歴に応じて異なる値を取ることができ、したがって一定の関数コールがバイパスされているケースか、又はプログラム内の特定の場所に異なるルートが取られているケースかを特定することができるからである。したがって、ソース値が使用される必要がある時点では、認証コード・チェック命令はその値を第2のソース値として指定することができ、その第2のソース値について以前に生成された認証コードを、第2のソース値及び少なくとも1つの修飾子値に依存する期待される認証コードに対してチェックすることができ、それによって、以前に生成された認証コードと期待される認証コードとが一致しない場合、エラー・ハンドリング応答をトリガすることができる。ひいては、コール・パス識別子を、認証コードを生成するための修飾子として使用することにより、これは攻撃者がコードの一部で正当であり得るデータ値をコードの異なる部分へ代入することをより難しいものとすることができる。
いくつかの実例において、コール・パス識別子に依存する値は単純にコール・パス識別子そのものであり得る。ひいては、コール・パス識別子に応じた修飾子を使用する認証コードの生成及びチェック命令の変形は、コール・パス識別子記憶要素に記憶されたコール・パス識別子に直接適用することができる。
しかしながら、いくつかの他の実例において、コール・パス識別子に依存する値は、コール・パス識別子の暗号化されたバージョンを含むことができる。コール・パス識別子が予測され得る機会を減らすことにより、また総当たり攻撃(brute-force attack)で攻撃者がコール・パス識別子を推測しようとするために必要とする置換の回数を減らすことを可能にするコール・パス識別子についてのサイド・チャネル情報が露見するリスクを減らすことにより、これはさらなるセキュリティを与えることができる。
いくつかの実例の実装形態において、認証コード生成命令のすべてのバージョンはコール・パス識別子に依存する認証コードを生成することができる。同様に、認証コード・チェック命令のすべてのバージョンは、コール・パス識別子に依存する値を含む少なくとも1つの修飾子値を使用することができる。
しかしながら、他の実例においては、異なる修飾子値を使用することができる認証コードの生成及びチェック命令の異なる変形が提供されていてもよい。
例えば、認証コード生成命令の第1の変形、及び認証コード・チェック命令の第1の変形は、コール・パス識別子とさらなる修飾子値との両方を含む複数の修飾子値を使用することができる。例えば、さらなる修飾子値はスタック・ポインタを含むことができる。認証コードが生成される値の使用を、コール・パス識別子の所与の値及びスタック・ポインタの所与の値に関連付けられるプログラム・コード内の特定の部分に制限することにより、これはさらなるセキュリティを与えることができる。
やはり、認証コード生成命令の第2の変形及び認証コード・チェック命令の第2の変形が提供され得、その場合少なくとも1つの修飾子値はコール・パス識別子に依存するが、認証コード生成/チェック命令の少なくとも1つの他の変形について使用することができるさらなる修飾子値には依存しない値を含む。例えば、第2の変形について、コール・パス識別子に依存する値は使用される修飾子のみであってもよい。
認証コード生成命令のさらなる変形、及び認証コード・チェック命令のさらなる変形は、少なくとも1つの修飾子値がコール・パス識別子に依存しない場合も実装することができる。したがって、認証コードの生成及びチェック命令の異なるバージョンを提供して、プログラマ又はコンパイラが、所与のソース値の使用を特定のプログラムのコンテキストに結び付ける程度を選択できるようにすることができる。例えば、いくつかのシナリオにおいて、一連の関数コールが実行されているプログラムの対応する部分につながり得る複数の異なるルートがある場合でも、値が正しく認証されることが望ましい場合があり、この場合、異なる関数コールの履歴が呼び出されても認証がなお続くことができるよう、コール・パス識別子以外の修飾子を使用するさらなる変形を選択することが好ましい場合がある。プログラムが正常に実行されている際、関数コールのより予測可能なフローがある場合のプログラムの他の部分について、コール・パス識別子に依存する修飾子を使用する認証コード生成命令の変形を使用することにより、セキュリティを向上させることができる。
認証コード生成命令又は認証コード・チェック命令の異なる変形は、様々な方法で区別することができる。一実例において、認証コード生成命令のそれぞれの変形は異なるオペコードを有することができる。代替的に、異なる変形は同一のオペコードを共有することができるが、認証コード生成命令のどの変形が使用されるかを指定する命令デコード中の別のフィールドを有してもよい(例えば、使用する修飾子値のタイプを特定する修飾子フィールド)。同様に、認証コード・チェック命令の変形は、それらのオペコードによって、又は命令エンコード中のさらなるフィールドによって区別することができる。
しかしながら、他の実例において、モード記憶要素に記憶されるモード表示値を使用して認証コード生成命令の変形か、又は認証コード・チェック命令の変形かを区別することができる。例えば、モード表示値が第1の値を有している際、認証コード生成命令又は認証コード・チェック命令が実行されている場合、少なくとも1つの修飾子値はコール・パス識別子に依存する値を含むことができる。モード表示値が第2の値を有している場合、認証コード生成/チェック命令は、少なくとも1つの修飾子値がコール・パス識別子に依存しない状態で実行することができる。これは、認証コード生成命令の2つ以上の変形又は認証コード・チェック命令の2つ以上の変形を表すための、複数の命令エンコードを割り当てる必要性を回避することができる。代わりに、認証コード生成命令のすべての形態(ソース値それ自身を特定するビット以外)について、単一のエンコードを使用することができる。同様に、第2のソース値を特定するビット以外の認証コード・チェック命令のすべての変形について、同一のエンコードを使用することができる。これは、他のタイプの動作を示すために命令の他のエンコードを空間フリーにしておき、より効率的な命令セット・アーキテクチャのエンコードを提供する。認証コード生成/チェック命令を実行する前に、後続の認証コード生成/チェック命令を制御するために必要であれば別の命令がモード表示値を変えて、所望の修飾子値を使用することができる。
認証コードは、認証コード生成命令により第1のソース値として指定されるあらゆる値について生成することができる。しかしながら、第1のソース値がメモリ・アドレスを含むケースにおいては、これを使用することは特に有用であり得る。これにより、異なるアドレスがアドレス・レジスタに代入されるコードの再利用に対して、保護されるべき分岐ターゲット・アドレスを生成するために、メモリ・アドレスに依拠する後続の分岐命令が可能となる。認証コードを使用してアドレスを保護するべく、認証コード生成命令は、アドレスが初めに生成された時点で、又はそのアドレスを使用することができるプログラム・コンテキストに到達した時点で実行することができ、次いで認証コード・チェック命令はアドレスが後続の分岐命令によって使用されようとした時点で実行することができる。
認証コードは、生成されると、あらゆる方法で対応するソース値に関連付けることができる。例えば、認証コードは、異なるレジスタに記憶される第1のソース値とともに、さらなるレジスタに記憶することができる。
しかしながら、第1のソース値がメモリ・アドレスを含む場合、これは処理回路が、メモリ・アドレスからのビットのサブセットを生成された認証コードで置き換えることにより、認証コードをアドレスに関連付けるために特に有用であり得る。いくつかの実例において、ビットのサブセットはメモリ・アドレスの最下位ビットの一定数を含むことができる。例えば、アドレスが2つのアドレス境界の一定のべき乗にアラインされていることが既知である場合、そのアドレスの最下位ビットのいくつかがゼロであり得ることを期待することができるため、これらは情報の欠落なしに認証コードで置き換えることができる。代替的に、メモリ・アドレスの置き換えられたサブセット・ビットは、最上位ビットのいくつか、又はメモリ・アドレス内の一定のしきい値ビットよりも上位であるビットであってもよい。これは、プロセッサ・アーキテクチャは一定ビット数(例えば、64ビット)のアドレスをサポートすることができるが、実際に現実世界のデータ処理デバイスにおいては、64ビットのアドレス空間全体が使用されることが見込まれるような大容量のメモリ記憶装置を伴うデバイスはまだ必要ないという事実を利用することができる。したがって、物理アドレスが64ビットを有することができても、実用においては少ないビット数のみが実際には使用され、最上位ビットのいくつかがゼロに対応している場合がある。例えば現在実装されているプロセッサでは、48ビットの物理アドレス空間が使用され、それによりアドレスの上位16ビットが常にゼロであることが、比較的一般的であり得る。48ビットのアドレス空間はなお、今日のニーズには十分な256テラバイトのメモリを与えるが、命令セット・アーキテクチャはさらなる拡張の余地を与えるために64ビットのアドレスを実装してある。ひいては、実際には使用されないいくつかの上位ビットがあるため、これらのビットを認証コードで置き換えることができる(認証コードはアドレスの上端でこれらの未使用ビットのあらゆるサブセットに挿入することができる)。
メモリ・アドレスのどの特定のビットが認証コードで置き換えられるかに関わらず、認証コードが失われたり改竄されたりすることを回避するように認証コードがメモリ・アドレスとともに保持されることを確実にすることについて、これは便利なメカニズムを提供する。メモリ・アドレスの異なる記憶要素へのあらゆる転送は、アドレスが引き続き使用される場合その認証コードがなお存在できるように、この時やはり対応する認証コードを本質的に転送することになる。認証コード・チェック命令に応答して、処理回路は次いで関連するメモリ・アドレスのビットのサブセットから認証コードを抽出し、読み出された認証コードと期待される認証コードとの間に不一致があればエラー・ハンドリング応答をトリガすることができる。抽出された認証コードと期待される認証コードとの間に一致があれば、認証コード・チェック命令に応答して、処理回路は、メモリ・アドレスをあらゆる後続の分岐又は他の命令用に実際に使用する前に、対応するビットのサブセットを何らかのデフォルト値(すべてゼロなど)にリセットすることにより認証コードをクリアすることができる。
不一致の認証コードに応答してトリガされた例外ハンドリング応答は実装形態ごとに異なっていてもよい。場合によっては、エラー・ハンドリング応答は例外条件を伝達することを含むことができる。この時、例外ハンドラは検出された認証失敗に応答するよう処理回路をトリガすることができる。例えば、例外は処理の現在のスレッドを破棄させることができるか、又は検出された潜在的なセキュリティ違反を取り扱うために、処理をオペレーティング・システム又は他のスーパバイザ的なコードに向けさせることができる。
しかしながら、第2のソース値がメモリ・アドレスを含む場合、エラー・ハンドリング応答の形態の1つはそのメモリ・アドレスを無効なアドレスに変えることを含む。例えば、上で議論したようなメモリ・アドレス内のビットのサブセットが生成された認証コードで置き換えられるケース(メモリ・アドレスのすべてのビットが、実際にはメモリ・アドレスの現実のビットを表すために使用されないため)では、エラー・ハンドリング応答は、メモリ・アドレスのそれらの未使用のビットのサブセットを、有効なメモリ・アドレスでは通常これらの未使用ビットに見られるデフォルトの値以外の何らかの値に設定することを含む。例えば、アドレスがXビットを有しているが、有効アドレスにはYビット(Y<X)だけが使用される場合、上位X-Yビットの1つ又は複数を、無効なアドレスを表わすために非ゼロ値に設定することができる。処理装置に設ける必要のある追加されるエラー・ハンドリング機能性の量を減らすことができるため、この手法は有用であり得る。典型的には、処理装置は、無効なメモリ・アドレスに分岐するよう試行がある場合、又は無効なメモリ・アドレスに対してロード若しくはストア演算を実施する場合、メモリ・フォールトを扱うために既に例外を有していてもよい。したがって、不一致な認証コードが生成される際メモリ・アドレスを無効なアドレスに変えることによって、エラーは認証コード・チェック命令に応答して明示的にフラグを立てられる必要はないが、アドレスがロード/ストア演算、又は分岐に引き続き使用される場合、無効なアドレスへのアクセスによりメモリ・フォールトがトリガされるため、事実上エラーを特定することができる。例えば、メモリ保護ユニット又はメモリ管理ユニットに関連付けられるメカニズムをトリガする既存のメモリ・フォールトは、認証コードが不一致の場合に認証コード・チェック命令から得られる無効なアドレスに基づいてフォールトを生成するために使用することができる。
コール命令に応答してコール・パス識別子を関数リターン・アドレスと置換するために使用される置換関数は、可逆の置換関数であり得る。したがって、ターゲット関数から以前の処理へのリターンをトリガするための関数リターン命令に応答して、処理回路はコール・パス識別子記憶要素に記憶されるコール・パス識別子及び関数リターン・アドレスに対して逆置換関数を実施して、コール・パス識別子記憶要素に記憶される更新されたコール・パス識別子を生成することができる。ひいては、これはコール・パス値が、一定の関数をコールする直前、且つその関数からリターンした直後に一致するよう期待されることを意味することになり、それにより、一定の条件関数がその間実行されているかどうかにかかわらずシステムはプログラム・コード内の現在の位置の一貫した表現を有することができる。これにより、認証コード生成/チェック命令を使用してソース値の認証を可能にする、より信頼できる方法が与えられ得る。
様々な関数が置換関数として使用することができるが、場合によっては、少なくとも1つのコール・パス置換キーに依拠する暗号関数を使用することができる。ひいては、処理回路は、コール・パス置換キーに応じて実施される暗号関数を使用してコール・パス識別子を関数リターン・アドレスと置換するように構成することができる。例えば、コール・パス置換関数はブロック暗号であることができる。暗号法的に強力な関数の使用は、攻撃者によるコール・パス識別子の偽造のリスクを減らすために有用であり得る。代替的に、巡回冗長チェック関数などの暗号キーに依存しないコール・パス置換関数が使用されてもよい。
同様に、認証コードの生成は、暗号関数が認証キー値に依存する場合は、第1のソース値及び少なくとも1つの修飾子値に対して実施される暗号関数に基づくこともできる。認証コード・チェック命令に応答して期待される認証コードを生成するために実施される関数はまた暗号関数に依存してもよい。認証キー値はコール・パス置換キーと同一であってもよいが、コール・パス置換キー及び認証キーそれぞれとは異なるキーを使用することによってセキュリティを向上することができる。場合によっては、認証コード生成命令の複数のバージョンが与えられてもよく、それにより利用可能な複数の認証キー値のセットから異なる認証キー値を選択することが可能になる。例えば、1つの認証コード生成命令が、命令データのアクセス又は分岐のために使用されるアドレスについて認証コードを生成するために与えられてもよく、認証コードがデータ・アクセスのポインタ用に生成される場合、認証コード生成命令の異なる変形が異なる認証キー値を選択することができる。したがって、一般的に認証コード生成命令のいくつかのプロパティは、どの認証キー値を使用するかを選択することができる。同様に、認証コード・チェック命令もまた認証キーとは異なる値を選択するための異なるバージョンを有することができる。
コール・パス識別子保存命令は、処理回路がコール・パス識別子に依存する値をデータ・ストアに(例えば、スタック・データ構造に)保存するようトリガするために与えられてもよい。対応するコール・パス識別子リストア命令に応答して、処理回路はデータ・ストアから読み出した値に応じて、値をコール・パス識別子記憶要素にリストアすることができる。これにより、コール・パス識別子の以前の値を保存してリストアすることが可能となり、有効なコードのエントリ・ポイントにつながり得る複数の代替的な関数コールのシーケンスがあっても、コール・パス識別子の一定の値は認証コードを使用して以前に認証された値の一貫性のある認証を確実にするために、やはりリストアすることができる。
さらなるセキュリティを与えるため、コール・パス識別子保存命令に応答して、データ・ストアに保存されたコール・パス識別子のバージョンはコール・パス識別子の暗号化されたバージョンであってもよく、コール・パス識別子リストア命令に応答して、データ・ストアから読み出した値を復号化して、復号化された値をコール・パス識別子記憶要素に記憶するために、復号化を適用することができる。これは、攻撃者がコール・パス置換(ハッシュ)関数を推測又は導出できるような機会を減らすために、メモリへの実際のコール・パス識別子が露見することを回避している。
いくつかの実例において、関数コールに応答してコール・パス識別子を置換することに加えて、コール・パス識別子記憶要素に記憶される更新されたコール・パス識別子を生成するために、処理回路がコール・パス識別子をコール・パス識別子置換命令によって指定されるソース・オペランドと置換するようトリガするさらなるコール・パス識別子置換命令を実装することができる。これにより、実際には関数コールが1つも実施されなくても、関数コールが実施されたかのようにコール・パス識別子を置換することができる。これは、プログラム・コードが、ある一連の関数コールについてのコール・パス識別子の期待される値を、実際に対応する関数コードを実行する必要とせずに、素早く計算できるようにする。セキュリティを与えるため、いくつかの実例において、コール・パス識別子置換命令の正常な実行が、処理回路がしきい値特権レベル以上である一定の特権レベルで動作している時に制限されることがある。コール・パス識別子置換命令が、現在の特権レベルがしきい値の特権レベルより低い時に実行される場合、コール・パス識別子の正常な実行が妨げられることがある(例えば、コール・パス識別子置換命令を無視することにより、又は例外をトリガすることにより)。同様に、実際には関数リターンが実施されない場合でも関数リターンをシミュレートするために、逆置換命令によって指定されるリターン・アドレスに基づいて逆置換を適用するための対応するコール・パス識別子逆置換命令が与えられてもよい。
いくつかの実例において、上で議論した技法はハードウェアに実装することもできる。例えば、ハードウェア記憶要素がコール・パス識別子記憶要素として設けられてもよく、ターゲット関数のコールに応答して、ハードウェアに実装される回路論理を使用してコール・パス識別子を置換することができる。データ処理システムは、認証コードの生成及びチェック命令をサポートするための命令デコーダを有することができる。したがって、これらの命令に応答して、命令デコーダは認証コードをそれぞれ生成及びチェックするために、処理回路が対応する動作を実施するよう制御することができる。
しかしながら、他の実例において、そのような動作は、コール・パス識別子置換、並びに認証コードの生成及びチェックをサポートするハードウェア要素を有していないことがある汎用コンピュータで実行されるプログラム・コードを使用してソフトウェアで制御され得る。したがって、場合によっては、コンピュータ・プログラムは、データ処理装置を制御して、ターゲット関数のコールに応答してコール・パス識別子置換を実施するように、また認証コードの生成及びチェック動作を実施するように設けることができる。
別の実例において、コール・パス識別子置換、並びに認証コードの生成及びチェックの特徴をサポートするハードウェアを、それ自身が有する必要のないホスト・データ処理装置上での実行用のコンピュータ・プログラムを備えるシミュレータが設けられてもよい。シミュレータ・プログラムはこれらの特徴を有するプロセッサをエミュレートするため、必要とされるハードウェア特徴を有していないホスト・データ処理装置上で実行する場合でも、そのようなハードウェア実装プロセッサ上で実行するよう意図されているプログラム・コードがやはり正確に機能することができる。したがって、コンピュータ・プログラムはホスト・データ処理装置を制御して、命令の実行のための命令実行環境を提供するために設けられてもよく、この場合、処理プログラム・ロジックが命令実行環境内で命令の実行を制御する。コンピュータ・プログラムは、コール・パス識別子を記憶するためのコール・パス識別子データ構造と、コール・パス識別子データ構造に記憶される更新されたコール・パス識別子を生成するために、コール・パス識別子を関数リターン・アドレスで置換することによってターゲット関数をコールするためのコール命令に応答する処理プログラム・ロジックと、を提供することができる。同様に、認証コード生成命令に応答して、処理プログラム・ロジックはホスト・データ処理装置を制御して認証コードを生成し、認証コード・チェック命令に応答して、処理プログラム・ロジックはホスト・データ処理装置を制御して以前に生成された認証コードが期待される認証コードと一致するかどうかをチェックして、不一致が検出されるとエラー・ハンドリング応答をトリガする。やはり、認証コード生成命令又は認証コード・チェック命令の少なくとも1つの変形について、修飾子値はコール・パス識別子に応じた値を含む。
図1はデータ処理動作を実行するための処理ロジック4を備えるデータ処理装置2の実例を図示している。例えば、処理ロジックは様々なタイプの処理動作を実行するための実行ユニットを含むことができる。実行ユニットは例えば、加算、乗算、AND、ORなどの算術若しくは論理演算を実行するための算術/論理ユニット(ALU:arithmetic/logic unit)、浮動小数点オペランドに対して浮動小数点演算を実施するための浮動小数点ユニット、又は複数のデータ要素を含むベクトル・オペランドに対してベクトル処理を実施するためのベクトル処理ユニットを含むことができる。アーキテクチャ・レジスタのセット6は、処理ロジックによって実行される命令用のオペランドを格納するために、また実行された命令の結果を記憶するために設けられる。命令デコーダ8は命令ハッシュ10からフェッチされた命令をデコードし、処理ロジック4又はデータ処理装置の他の要素(ロード・ストア・ユニット12、又は暗号化/復号化エンジン14など)を制御するための制御信号を生成し、デコードされた命令によって表される演算を実施する。ロード・ストア・ユニット12は、データ・ハッシュ16若しくはメモリ18からのデータ値をアーキテクチャ・レジスタ6にロードするためのロード演算を、又はアーキテクチャ・レジスタ6からのデータ値をデータ・ハッシュ16若しくはメモリ18にストアするためのストア演算を実施するために設けられる。メモリ管理ユニット20はロード/ストア演算用に使用されるアドレスについて、アドレス変換を実施するために設けられる。メモリ管理ユニット20はメモリ18からページ・テーブルの部分をキャッシュするためのトランスレーション・ルックアサイド・バッファ(TLB:translation lookaside buffer)を含むことができ、TLBはアドレス空間の異なる部分に使用されるアドレス・マッピングを定義し、またアドレス空間の一定のページが読み出し可能か、若しくは書き込み可能かどうかのパーミッション設定、又は処理回路4のどの特権レベルが特定のページにアクセスできるかの設定、などのアクセス・パーミッションを定義している。
暗号化/復号化エンジン14は、データを暗号化若しくは復号化するために、又は暗号ハッシュ関数を適用するために、データ値に対して暗号アルゴリズムを実施するために設けられ、キー・ストレージ22に記憶される暗号キーに依存する。暗号アルゴリズムは、アーキテクチャ・レジスタ6から読み出された一般的なデータ値に、又はコール・パス識別子記憶要素24(CSHレジスタ)に記憶されたコール・パス識別子(又はコール・スタック・ハッシュ)に適用することができる。暗号化/復号化エンジン14によって使用されるキーは、セッションごとに生成される乱数キーであってもよく、それによって攻撃者は1つのセッションで暗号化された又はハッシュされたものを別のセッション中で正確に再利用することができない。
図2は、コール・パス識別子(CSH)の使用を図示している。アーキテクチャ・レジスタ6とは違って、CSHレジスタ24はプロセッサ・コアによって維持される隠しレジスタであり、設計上ソフトウェアには可視ではない。図2に示すように、CSHは、関数コールがあると、その関数をコールしたコール命令のリターン・アドレスに基づいて置換され、その以前の値にリターンするために、同一の関数リターン・アドレスを使用して関数リターンで逆に置換される。したがって、CSHは、その関数のコールにつながった一連の関数コールのコンテキスト内で現在処理されている関数を表現するシグネチャとして作用する。
例えば、図2において、関数がリンク付き分岐(BL:branch-with-link)命令を使用してコールされ、それに応じて関数リターン・アドレスがアーキテクチャ・レジスタ6内のリンク・レジスタ30に記憶される。関数リターン・アドレスは例えば関数コール分岐命令それ自身に続く次の命令のアドレスにセットすることができる。またBL命令に応答して、プログラム実行の現在点を示しているプログラム・カウンタ・レジスタ32が、実行される関数コードの開始に対応して分岐ターゲット・アドレスに更新される。分岐ターゲット・アドレスはBL命令のエンコードにより、又はレジスタ内で指定することができる。
関数コール命令BLに応答して、暗号化/復号化エンジン14はコール・スタック・ハッシュ24の現在の値を関数リターン・アドレス及び暗号キー・ストレージ22から読み出したコール・スタック・ハッシュ・キーで置換し、その結果を値としてCSHレジスタ24に書き戻す。
最初にコールされた関数(関数A)内でさらなる関数コール命令(リンク付き分岐命令BL)に遭遇すると、この関数コールに応答して、さらなる関数Bをコールするプロセスの一部として、CSHは再度第2の関数コールに対応するコール命令の関数リターン・アドレス、及び置換キーで置換される。置換は、関数Bのコールから得られる更新されたコール・スタック・ハッシュが、関数Bが関数A内からコールされる際、関数Bが異なる関数からコールされている場合とは異なる値を持つようなものであってもよい(例えば、関数Aのコールに応答して実施される初期の置換が省略され、次いで関数Bのコールが異なる結果を導くような場合)。暗号キーにアクセスすることなくコール・スタック・ハッシュの値を推測することを計算機科学的に実行不可能にするために十分なビット数を有する暗号ハッシュ関数を使用することにより、これはコードの現在の場所、及びその場所に到達するために使用された過去の関数コールの履歴を特定するための強力な技法を提供する。
CSHをハッシュ化するために使用される置換関数は可逆の関数であるため、置換関数の所与の繰り返しは、対応する逆置換関数を実行することにより元に戻すことができる。所与の関数からリターンする際、関数コールに使用したのと同一の置換キー及びリンク・レジスタ30から読み出した関数リターン・アドレスを使用して、コール・スタック・ハッシュ24の現在の値に逆置換関数を適用することができる。関数のネストをサポートするために、次にネストされる関数がコールされる前にソフトウェアによってリンク・レジスタ30の内容をスタックに保存することができ、それにより後続の関数コール命令(BL)に応答してリンク・レジスタを新しい関数の関数リターン・アドレスで上書きすることができる。同様に、ネストされた関数について関数リターンを実行する前に、ソフトウェアは以前の値をスタックからリンク・レジスタにリストアするための命令を含むことができる。さらにネストされる関数をコールしない関数については、リンク・レジスタのそのような保存/リストアは必要とされない。ひいては、関数Bからリターンする時でさえ、関数Aに関連付けられるリターン・アドレスの以前の値は、リンク・レジスタ30にリストアすることができ、それぞれの関数のリターンにおいて、コール・スタック・ハッシュの置換は逆の置換を適用することによってアンワインドすることができる。したがって、ソフトウェアがネストされる関数コールについて正確にリンク・レジスタの保存/リストアを扱うとすれば、関数Aにリターンする際コール・スタック・ハッシュは関数Bがコールされる前に有していたのと同一の値を有することになり、バックグラウンド処理にリターンする際、コール・スタック・ハッシュは関数Aがコールされる前に有していたのと同一の値にリターンする。攻撃者が、リンク・レジスタ30内のリターン・アドレスを変えることによりコードの異なる場所にコードを分岐させようと騙す試行をする場合、これは関数のコールの前後でコール・スタック・ハッシュの不一致につながることがあり、以下で議論するような認証動作の失敗につながり、ひいては攻撃を検出することができる。
例えば、CSH置換関数は64ビットのtweakを伴う128ビットのブロック暗号であることができる。リターン・アドレスがtweakとして使用される。
巡回冗長チェック(CRC:cyclic redundancy check)アルゴリズムに基づくCSH置換関数の別の実例を、以下に示す。
1: uint32_t call(uint32_t crc, uint32_t new_lr) {
2: crc ^= new_lr
3: for (int i = 0; i < 32; i++)
4: crc = (crc & 1) ? (crc >> 1) ^ POLY : (crc >> 1);
5: return crc;
6: }
アルゴリズムはCRC(crc)の以前の値、及び関数リターン・アドレス(例えば、リンク・レジスタ値-new_lr)を使って2つの入力のハッシュを返す(この実例においてはハッシュ化を実施するために暗号キーは必要とされていない)。2行目で、crcの以前の値は、新しいリンク・レジスタの値を使用して排他的OR演算(XOR)される。当業者であれば理解することであるが、XOR演算は可逆である。換言すれば、A XOR B XOR Bは、Aを返す。3行目及び4行目は、多項式(POLY:polynominal)を使用して「XOR除算」を実施しながらcrcのビットを通じて繰り返す。5行目で返される終了結果が多項式を使用する「XOR除算」演算の剰余に対応すると考えると、出力は多項式よりも小さくなることが理解されよう。それに応じて、小さな多項式が使用される場合には衝突(2つの入力が同一の出力を有している)が発生する機会が多い。適切な多項式を選択するタスクが当業者にとって知られることになろう。
この実例に対応する逆置換関数は次の通りである。
1: uint32_t ret(uint32_t crc, uint32_t new_pc) {
2: for (int i = 0; i < 32; i++)
3: crc = (crc & 0x80000000) ? (crc << 1) ^ RPOLY : (crc << 1);
4: crc ^= new_pc;
5: return crc;
6: }
関数への入力はcrc及びnew_pcであり、new_pcは関数コールのリターン後の新しいプログラム・カウンタである(すなわち代替的に、関数コールのリターン直前のリンク・レジスタの値である)。アルゴリズムの2行目及び3行目はcrcのビットを通じて繰り返す。それぞれの繰り返しにおいて、そのビットが「1」であると考えられる場合、左シフトが起こり、結果はRPOLYとXOR演算されるか、そうでなければ左シフトが起こる。これが済むと、4行目で終了結果がnew_pcとXOR演算され、結果を与える。値RPOLYは、POLYの導関数であり、最初にCRCを形成するために使用される。特に、RPOLYは1ビット左にシフトするPOLYの結果である。
上の実装形態におけるPOLYは最下位ビットを無視しており、またRPOLYは最上位ビットを無視している。したがって、形式1abcdef1の多項式について、POLYは「1abcdef」であり、RPOLYは「abcdef1」である。換言すると、32ビットの多項式については、次の通りである。
RPOLY = (POLY * 2 + 1) & 0xffffffff;
これらは、関数リターン・アドレスに基づいてコール・スタック識別子をハッシュ化するために使用することができる関数のいくつかの実例に過ぎないことが理解されよう。他の関数もやはり使用することができる。
図3Aは認証コード生成命令PACに応答して実施される認証コード生成演算の実例を図示している。PAC命令は第1のソース・オペランドsrc1を指定している。ソース・オペランドはあらゆる値であってもよいが、認証コード生成演算をアドレス・ポインタに適用することが特に有用であり得る。ソース・オペランドは一定のビット数Xを含むアドレスを指定することができるが、実際にはそれらのビットのうち一定のビット数Yのみが有効アドレス用に使用され得る(例えば、Xは64であってもよく、Yは48であってもよい)。したがって、アドレスの上位X-Yビットが、デフォルトでゼロにセットされることになる。
認証コード生成命令PACに応答して、ソース・オペランドは暗号化/復号化エンジン14に通過することができ、暗号キー・ストレージ22から読み出した暗号キー及び少なくとも1つの修飾子値に基づいて、第1のソース値に認証コード生成関数40を適用することができる。得られる認証コード(PAC)は、ポインタ・アドレスの未使用の上位ビットに挿入されて、命令の結果を生成する。結果は、例えば、ソース・オペランドを格納していた同一のレジスタに書き戻すことができる。認証コード生成関数40は、使用された関数又は暗号キーを知らずには特定のアドレスに関連付けられる認証コードを推測することが計算機科学的に実行不可能にするために、暗号ハッシュ関数を使用することができる。
図3Bは、第2のソース・オペランドsrc2を指定する対応する認証コード・チェック命令AUTを示している。第2のソース・オペランドは、図3Aで示されるPAC命令に応答して認証コードPACをその上位ビットに挿入することにより以前に認証されているポインタ・アドレスであることが期待されるが、攻撃者がポインタを変更してあれば、認証コードが有効でないことがある。認証チェック命令に応答して、命令デコーダ8は処理ロジック4及び暗号化/復号化エンジン14を制御して、コードが生成された時に使用されたものに対応する暗号キー及び修飾子値を使用して、同一の認証コード生成関数40を第2のソース・オペランド(認証コードPACを除く)のアドレス・ビットに適用する。次いで、期待される認証コードPAC’は、第2のソース・オペランドsrc2の上位ビットから抽出された以前に生成された認証コードPACと比較され、期待される認証コードと以前に生成された認証コードとが一致するかどうかが判断される。もし一致していれば、処理を継続することができるが、期待されるコードと以前に生成されたコードとの間に不一致があれば、エラー・ハンドリング応答がトリガされ、例えば、例外をトリガするか、又はソース・レジスタの上位ビットを無効なアドレスに対応する値に設定し、それによってそのアドレスへの後続のアクセスが、MMU20がページ・テーブル内でアドレスがマッピングされていない無効なアドレスへのアクセスによるメモリ・フォールトをトリガするようにトリガすることになる。
図3A及び図3Bの認証コードの生成及びチェック命令を使用することによって、これはポインタを認証させることができ、そのため攻撃者が無認可のポインタをインジェクションし、コードがそのポインタによって特定される場所に成功裏に分岐させることをより困難なものにすることができる。暗号関数を認証コード生成関数40として使用することにより、これは総当たり攻撃が特定のアドレスに関連付けられる認証コードを推測することを困難なものにすることができる。認証コード生成命令PACはポインタ・アドレスが生成された時点でコードに含めることができ、また認証コード・チェック命令AUTはアドレスが実際に使用される時に後で含められて、そのアドレスに実際に分岐する前に認証コードをダブルチェックする。
認証コード生成関数40は実装形態ごとに異なっていてもよい。例えば、Borghoffら、「PRINCE-a low-latency block cipher for pervasive computing applications.」、International Conference on the Theory and Application of Cryptology and Information Security、シュプリンガー、ベルリン、ハイデルベルク、2012年は、ブロック暗号を提案している。Jeanら、「Tweaks and keys for block ciphers: the TWEAKEY framework.」、International Conference on the Theory and Application of Cryptology and Information Security、シュプリンガー、ベルリン、ハイデルベルク、2014年は、暗号化されるメッセージ及び暗号キーに加えて第2の入力に依存することができるよう暗号をtweakableにするTWEAKEYフレームワークを説明している。したがって、一実例において、認証コード生成関数は、TWEAKEYフレームワークに基づいて修飾子値を第2の入力として使用してtweakableに変更されたPRINCE暗号を含むことができる。特許請求の範囲内に留まりながらも、PRINCE-TWEAKEY暗号にはさらなる変更がなされ得ることが理解されよう。また、他の実例において、セキュリティと所与のシステム実装に必要とされるハードウェア/ソフトウェアの実装コストとのバランスに応じて、全く異なる暗号法の暗号が認証コード生成関数40として使用することができる。
PAC及びAUT命令の異なる変形が、認証コードを生成するために使用される暗号関数にtweakを与える修飾子値の異なる形態を使用することができる。これを活用することで、使用される修飾子値が、プログラム・コードの特定の領域に特有な値であるようにし、攻撃者がプログラム・コードの一部から認証されたポインタを正しく読み取り、それらを後で、プログラム・コード内で再利用してプログラムのその特定の部分について有効な遷移とは期待されない特定のポインタ・アドレスに分岐させるようにすることができる機会を減らすことができる。
例えば、いくつかの変形例において、修飾子値はアーキテクチャ・レジスタ6内のスタック・ポインタ・レジスタ34の内容に対応することができ、これは図2で示されるようなネストされる関数コールの間に保存/リストアされる関数リターン・アドレスを与えるリンク・レジスタ値などの一時変数を格納するためのメモリ18内のスタックの場所を示している。例えば、コンテキストが特権レベル同士の間でスイッチ又は遷移するのに応答してスタック・ポインタ・レジスタ34を更新することができ(又は、ハードウェアに実装されるいくつかのスタック・ポインタ・レジスタの中で、どのレジスタが現在アクティブなスタック・ポインタを提供するために参照されるか、は変わってもよい)、そのためスタック・ポインタを修飾子値として使用することにより、これはポインタの正しい認証をプログラム内の特定のコンテキストに制限することができる。
図4A及び図4Bは、修飾子値がCSHレジスタ24に維持されているコール・スタック・ハッシュに依存するPAC及びAUT命令の別の変形例を図示している。これらの実例において、修飾子は暗号化/復号化エンジン14によって生成されたコール・スタック・ハッシュの暗号化されたバージョンを含んでいる。CSHを暗号化するために使用される暗号化キーは認証コード生成関数40に使用される暗号キーとは異なるキーであってもよい。図2に示すように、暗号化キーはコール・スタック・ハッシュの置換用の暗号化キーと同一であることができる。代替的に、ポインタの認証の目的でコール・スタック・ハッシュ24を暗号化する際の暗号化キーは、関数コールに対するコール・スタック・ハッシュの通常の置換に使用されるキーとは異なっていてもよい。一般的に、コール・スタック・ハッシュを認証コード生成関数40用に使用される修飾子を生成するためのベースとして使用する命令の変形を与えることにより、これは一定のアドレス・ポインタの使用をプログラム・コードの特定の部分に制限するための強力な技法を提供する。プログラム・コード内で処理を特定の関数に到達させる多様なルートがあるため、コール・スタック・ハッシュを認証コード生成関数用の修飾子として使用して、スタック・ポインタによって使用されるコードの特定の領域をより詳細にピンポイントすることが可能になり、特にプログラム内のスタック・ポインタについての潜在的な値の数はコール・スタック・ハッシュ24についての潜在的な値の数よりもより限定される傾向にあるからである。これによって、攻撃者がスタック・ポインタ34を変更するか、又はスタック・ポインタを同一のスタック深さにおいて他の関数からキャプチャすることができたとしても、攻撃者が認証されたポインタを1つの関数のコンテキストから別のものに代入することがより困難なものにすることができる。
図4A及び図4Bの実例において、コール・スタック・ハッシュは使用される唯一の修飾子であるが、命令のいくつかの変形について複数の修飾子を使用することもまた可能であり、それによってコール・スタック・ハッシュをスタック・ポインタ34などのさらなる修飾子とともに使用することができる。
図5A及び図5Bは、アーキテクチャ状態6にあるステータス・レジスタ38内に格納されるモード・ビット60を使用してどのタイプの修飾子をPAC及びAUT命令に使用するかを制御する実例を示している。例えば、モード・ビットが第1の値(例えば、1)を有している場合、暗号化されたコール・スタック・ハッシュが修飾子として使用され、モード・ビットがゼロの場合はスタック・ポインタ34などの別の修飾子が使用される。それ以外は、命令は図3Aから図4Bまでの実例と同じようにふるまう。
図6Aに示すように、命令デコーダ8によってデコードされたCSH保存命令に応答して、コール・スタック・ハッシュの現在の値はCSHレジスタ24からメモリ18(例えば、スタック・ストレージ構造内に)に保存することができる。メモリに保存されるCSHのバージョンは、コール・スタック・ハッシュ・キーに基づいて暗号化/復号化エンジン14によって生成される暗号化されたバージョンであってもよい。これは生のコール・スタック・ハッシュの露見を回避する。同様に、図6Bに示すように、コール・スタック・ハッシュ・リストア命令は以前に保存したコール・スタック・ハッシュをスタック又はメモリ内の他の場所から読み出し、暗号化/復号化エンジン14によって復号し、それからCSHレジスタ24にリストアするようにトリガすることができる。
図7に示すように、命令デコーダ8はまた、ソース・オペランドop1を指定し、処理ロジック4及び暗号化/復号化エンジン14を制御して、コール・スタック・ハッシュ置換関数又は逆置換関数を、暗号キー・ストレージ22から読み出されたコール・スタック・ハッシュ・キーを使用して指定されたソース・オペランドop1に適用するために、コール・スタック・ハッシュ置換命令又はコール・スタック・ハッシュ逆置換命令をサポートして、コール・スタック・ハッシュ・レジスタ24に格納し戻される更新されたコール・スタック・ハッシュ値を生成することができる。ソース・オペランドop1はアーキテクチャ状態6における汎用アーキテクチャ・レジスタのうちの1つから読み出すことができる。この命令により、プログラム・コードが関数のコール及び関数のリターンをシミュレートすることができるが、これはそのような関数から得られると期待される対応するコール・スタック・ハッシュを取得するためである。場合によっては、コール・スタック・ハッシュの置換又は逆置換命令は、プロセッサの一定の特権レベルでの実行のみに制限することができる。
図8は関数コールを扱う方法を図示する流れ図である。ステップ100において、処理ロジック4がある関数の処理に分岐するようトリガするために、関数コール命令が実行される。場合によっては、関数コール命令は、その関数に通過するよう引数を指定することができる。関数コール命令は、関数の処理が完了した後に処理がリターンするべき関数リターン・アドレスを指定することができるか、又はより一般的には関数リターン・アドレスはデフォルトで関数コール命令に続く次の命令のアドレスに設定されていてもよい。ステップ104において、関数コール用の関数リターン・アドレスがリンク・レジスタ30に格納され、以前の内容を上書きする。リンク・レジスタ30の以前の内容が保持される必要がある場合(例えば、処理が既に以前にコールされた関数内にあり、次の関数コールがその以前にコールされた関数内のネストされた関数のものであるので)、ソフトウェアは関数コール命令を実行する前にリンク・レジスタの内容をスタックに保存するための命令を実行することができる。ステップ106において、暗号化/復号化エンジン14はコール・スタック・ハッシュ・レジスタ24をリンク・レジスタの新しい内容及び暗号キー・ストレージ22から読み出されたコール・スタック・ハッシュ暗号化キーで置換し、CSHレジスタ24に格納し戻される新しい値CSH’を生成する。ステップ108において、プログラム・カウンタ・レジスタ32は関数コールのターゲット・アドレスに基づいて更新され、処理ロジック4が関数のターゲット・アドレスによって特定される命令の処理に分岐するように制御する。そして、関数内で処理が続く。
図9は関数の処理からのリターンを処理する方法を示している。ステップ110において、関数リターン・命令が実行される(任意選択で、適当な関数リターン・アドレスをスタックからリンク・レジスタ30にリストアするための命令の実行に続いて)。ステップ112において、暗号化/復号化エンジン40は逆置換を図8のステップ106で実施される置換関数に適用し、コール・スタック・ハッシュ24の現在の値を、現在の関数がコールされる前に有していた値に戻すよう変形する。逆置換関数がコール・スタック値24、リンク・レジスタ30の現在の内容(その関数用の関数リターン・アドレスを与える)及びストレージ22から読み出されたコール・スタック・ハッシュ・キーに適用され、その結果をCSHレジスタ24に書き込む。ステップ114において、プログラム・カウンタ32はリンク・レジスタ内で表されるアドレスに分岐するように更新される。
図10は、認証コード生成命令を処理する方法を示している。ステップ120において、第1のソース・オペランドを指定する認証コード生成命令が実行される。ステップ122において、認証コード生成命令の変形が特定され、どの修飾子値を使用するか判断する。すなわち、認証コード生成命令のデコードの間、デコーダ8は処理ロジック内の処理経路をアクティブ化して適当な修飾子を選択する制御信号を提供することができる。代替的に、ステータス・レジスタ38内のモード値が使用される修飾子の変形を示してもよい。変形に応じて、ステップ124、126、及び128のうちの1つが実施され、暗号化されたコール・スタック・ハッシュ値(ステップ124)、スタック・ポインタ34などの別の修飾子値(ステップ126)、又は暗号化されたコール・スタック・ハッシュの関数及び別の修飾子値(ステップ128)として、修飾子を決定する。場合によっては、修飾子は暗号化されたコール・スタック・ハッシュ又は他の修飾子に対応する絶対値でなくてもよく、これらの値から導出される何らかの関数であることができる。どの修飾子が選択されるかに関わらず、ステップ130において暗号化エンジン14は認証コード生成関数を、命令、選択された修飾子、及び認証コード生成暗号化キーによって指定されるソース値に適用する。得られる認証コードはステップ132においてソース値に関連付けられる(例えば上で議論したように、ソース・アドレスの上位ビットを認証コードで置き換ることにより)。
図11は、認証コード・チェック命令を処理する方法を示す流れ図である。ステップ140において、第2のソース・オペランドを指定する認証コード・チェック命令が実行される。ステップ142において、図10のステップ122と同じ方法で命令の修飾子変形が特定される。どの変形が与えられるかに応じて、ステップ144、146、148それぞれにおいて修飾子は、暗号化されたコール・スタック・ハッシュの関数、スタック・ポインタなどの別の修飾子値の関数、又は暗号化されたコール・スタック・ハッシュ及び他の修飾子値の両方の関数のうちの1つに決定される。ステップ150において、どの修飾子が使用されるかに関わらず、図10のステップ130に対応する関数を使用して選択された修飾子に基づいて、期待される認証コードPAC’が生成される。ステップ152において、処理ロジック4は、生成された期待される認証コードPAC’が、命令の第2のソース・オペランドsrc2に関連付けられた以前に生成された認証コードPACと一致するかどうかを判断する(例えば上で議論したように、PACはアドレスの上位ビットから抽出される)。認証コードと一致しないケースにおいては、エラー・ハンドリング応答がステップ154においてトリガされる。ステップ156においてコードが一致する場合、認証コードは第2のソース値から、例えば、上位のアドレス・ビットをゼロにクリアすることにより除去され、次いでステップ158において第2のソース値を使用するあらゆる後続の演算を続行することができる。
要するに、プロセッサ・コアによって隠しレジスタを維持することができ、それぞれの関数コールに対してそのコールのリターン・アドレスに基づいて置換され、同一のアドレスを使用してリターンに対して逆に置換され、その以前の値に戻る。コール及びリターンについてのリターン・アドレスが値について一致している限り、レジスタは関数内で安定であり、それをコールした処理のコンテキストにおいてその関数を表すシグネチャとして作用する。関数コールと関数リターンとの間に見られるリターン・アドレスのバージョンに不一致がある場合、置換は不正確な結果を与え、すべての後続の置換が不正確になり得る(これは、例えば、攻撃者が関数の処理の間にリターン・アドレスを変更することにより意図されたプログラム・フローを覆そうと試行することを検出するために使用することができる)。アプリケーション・レベルの関数コールと、スーパバイザ的なコードの関数コールの両方を、コール・スタック・ハッシュに統合することができる。コール・スタック置換関数は64ビットのtweakを伴う128ビットのブロック暗号であることができる。リターン・アドレスはtweakとして使用され、コール・スタック・ハッシュは必要に応じて暗号化/復号化に与えられ、コール・スタック・ハッシュ・レジスタに書き戻される。カーネル(オペレーティング・システム)は暗号化キーを準備してそれをアプリケーションから隠しておく。
ソフトウェアからの要求があれば(上で議論したように認証コード生成命令を実行することにより)、コール・スタック・レジスタの内容を暗号法的な方法でソフトウェア用の引数(認証コード生成命令の第1のソース・オペランド)と合わせることができる。例えば、引数はスタック・ポインタ又は関数リターン・アドレスであり得る。これらの値がプログラムの後方のポイントにおける使用のためにリロードされる際、これらは結合されたシグネチャに対して認証することができる。関与する値のあらゆるもの(保存されたポインタ、スタック・ポインタ又は関数シグネチャ)が変更されると、認証が失敗することになり、アプリケーションが失敗するようにポインタを使用不能にすることができる。
コール・スタック・ハッシュ(CSH)を読み出すためのソフトウェア・アクセス、及びそれを別のパラメータに結合することは、転送用(読み出し又は書き込み)の2つのスカラ・レジスタ、及びtweak用に3つ目を指定するソフトウェア命令を通じて行うことができる。CSH値はコール及びリターンに関する同一のブロック暗号を通じて、しかし命令アクセスに特に使用される代替キーを使用して与えることができる。このキーはやはりカーネルによって設定され、秘密にしておくことができる。このインターフェースは、スレッドの切り替え用などにCSHを保存/リストアするために、またいくつかの実装形態においては、認証コード生成/チェック命令用の修飾子値を抽出するためにも使用される。異なるキーの使用は、アプリケーション・ソフトウェアがこのインターフェースを使用して偽のコールをハッシュ内に又はハッシュからワインドさせようとする可能性に対して防御する。
別の命令によって、あたかもコール又はリターンによるものかのように、しかし、リターン・アドレスを指定するレジスタ・オペランドを使用して、コール・スタック・ハッシュを置換することができる。これらの命令は、ソフトウェアにより直接にCSHへの変更を可能する。この命令はカーネルの特権を要求するよう制限することができるか、代替的に、追加的なソフトウェア・パラメータをCSHに一時的に統合するために、アプリケーション・ソフトウェアに利用可能なままであってもよい(例えば、スレッドの切り替えの間、保存されたレジスタを検証する)。CSH置換又は逆置換命令は上述の代替キーを使用することができる。カーネルは計算の間、一時的に代替キーをコールキーに一致するように設定することができる。これによってカーネルが実行時に外部データに基づいて素早くCSHの期待される値を計算することができる。
図1は、コール・スタック・ハッシュの生成、並びに認証コードの生成及びチェックをサポートするためのハードウェア・リソースを有するデータ処理装置の実例を示している。例えば、これらのハードウェア・リソースは、命令デコーダ8、コール・スタック・ハッシュ・レジスタ24、及び暗号化/復号化エンジン14を含むことができる。しかしながら、図8~図11に示される方法はまた汎用プロセッサ上で実行する汎用のソフトウェアを使用して実装することもできる。
図12は使用され得るシミュレータ実装形態を図示している。先に説明された実施例は考慮される技法をサポートする特定の処理ハードウェアを動作させるための装置及び方法の点で本発明を実装している一方、本明細書で説明される実施例にしたがっており、コンピュータ・プログラムの使用を通じて実装される命令実行環境を提供することも可能である。そのようなコンピュータ・プログラムは、それらがハードウェア・アーキテクチャのソフトウェアベースの実装形態を提供する限りにおいて、しばしばシミュレータと称される。シミュレータ・コンピュータ・プログラムの種類としては、エミュレータ、仮想マシン、モデル、及びダイナミック・バイナリ変換器を含むバイナリ変換器が挙げられる。典型的には、シミュレータ実装形態は、任意選択でホスト・オペレーティングシステム220を実行させ、シミュレータ・プログラム210をサポートする、ホスト・プロセッサ230上で実行することができる。いくつかの構成において、ハードウェアと提供される命令実行環境との間に複数のシミュレーションのレイヤ、及び/又は同一のホスト・プロセッサ上に設けられる複数の別個の命令実行環境があってもよい。歴史的には、適度な速度で実行するシミュレータ実装形態を提供するためにはパワーのあるプロセッサが要求されてきたが、そのような手法は一定の状況下で正当化されてもよく、例えば互換性又は再利用目的のために別のプロセッサにとってネイティブなコードを実行する所望がある場合などである。例えば、シミュレータ実装形態は、ホスト・プロセッサ・ハードウェアによってサポートされていない追加的な機能性を伴う命令実行環境を提供すること、又は典型的には異なるハードウェア・アーキテクチャに関連付けられる命令実行環境を提供することができる。シミュレーションの概略はRobert Bedichek、「Some Efficient Architecture Simulation Techniques」、1990年冬季USENIX Conference、53~63頁に示されている。
実施例が特定のハードウェア構築物又は特徴を参照して以前に説明されてきた範囲で、シミュレートされる実施例において等価な機能性が適切なソフトウェア構築物又は特徴によって提供され得る。例えば、特定の回路がコンピュータ・プログラム・ロジックとしてシミュレートされる実施例に実装されてもよい。同様に、レジスタ又はハッシュなどのメモリ・ハードウェアが、ソフトウェア・データ構造体としてシミュレートされた実施例に実装されてもよい。以前に説明された実施例において参照されるハードウェア要素の1つ又は複数がホスト・ハードウェアに存在する構成(例えば、ホスト・プロセッサ230)において、いくつかのシミュレートされる実施例は適切であればホスト・ハードウェアを利用することができる。
シミュレータ・プログラム210はコンピュータ可読記憶媒体(非一時的媒体であってもよい)に記憶することができ、ターゲット・コード200(アプリケーション、オペレーティング・システム、及びハイパーバイザを含み得る)にプログラム・インターフェース(命令実行環境)を提供するが、ターゲット・コード200はシミュレータ・プログラム210によってモデリングされるハードウェア・アーキテクチャのアプリケーション・プログラム・インターフェースと同一のものである。したがって、上述の関数コール命令及び認証コード生成/チェック命令を含むターゲット・コード200のプログラム命令は、命令実行環境内からシミュレータ・プログラム210を使用して実行することができ、それによって、上で議論した装置2のハードウェア特徴を実際には有していないホスト・コンピュータ230がこれらの特徴をエミュレートすることができる。
本出願において、語句「するように構成される」は、装置の要素が定義される動作を実行することができる構成を有することを意味するために使用される。この文脈において、「構成」はハードウェア又はソフトウェアの内部接続の、配置又はやり方を意味する。例えば、装置は定義される動作を提供する専用のハードウェアを有してもよく、又はプロセッサ若しくは他の処理デバイスは機能を実施するためにプログラムされてもよい。「するように構成される」は、定義される動作を提供するために装置要素がいかなるやり方でも変えられる必要があることを含意するものではない。
本発明の図示的な実施例を本明細書において添付の図面を参照して詳細に説明してきたが、本発明はこれらの正確な実施例に限定されず、当業者により添付の特許請求の範囲によって定義されるような本発明の範囲及び精神を逸脱することなく、その様々な変形及び修正がそこになされ得ることを理解されたい。

Claims (20)

  1. 命令を実行するための処理回路と、
    コール・パス識別子を記憶するためのコール・パス識別子記憶要素であり、ターゲット関数をコールするためのコール命令に応答して、前記処理回路は、前記コール・パス識別子記憶要素に記憶される更新されたコール・パス識別子を生成するために、前記コール・パス識別子を関数リターン・アドレスで置換するように構成される、コール・パス識別子記憶要素と
    を備え、
    第1のソース値を特定する認証コード生成命令に応答して、前記処理回路は前記第1のソース値及び少なくとも1つの修飾子値に依存する認証コードを生成するように構成され、
    以前に生成された認証コードに関連付けられる第2のソース値を特定する認証コード・チェック命令に応答して、前記処理回路は前記以前に生成された認証コードが、前記第2のソース値及び少なくとも1つの修飾子値に依存する期待される認証コードと一致するかどうかをチェックし、前記以前に生成された認証コードと前記期待される認証コードとの間に不一致が検出される場合はエラー・ハンドリング応答をトリガするように構成され、
    前記認証コード生成命令のうちの少なくとも1つの変形、及び前記認証コード・チェック命令のうちの少なくとも1つの変形について、前記少なくとも1つの修飾子値は、前記コール・パス識別子記憶要素に記憶される前記コール・パス識別子に依存する値を含む、装置。
  2. 前記コール・パス識別子に依存する前記値は、前記コール・パス識別子の暗号化されたバージョンを含む、請求項1に記載の装置。
  3. 前記認証コード生成命令の第1の変形及び前記認証コード・チェック命令の第1の変形について、前記少なくとも1つの修飾子値は、前記コール・パス識別子に依存する前記値及びさらなる修飾子値を含む、請求項1又は2に記載の装置。
  4. 前記さらなる修飾子値はスタック・ポインタを含む、請求項3に記載の装置。
  5. 前記認証コード生成命令の第2の変形及び前記認証コード・チェック命令の第2の変形について、前記少なくとも1つの修飾子値は、前記コール・パス識別子に依存する前記値を含み、前記認証コード生成命令の少なくとも1つの他の変形及び前記認証コード・チェック命令の少なくとも1つの他の変形についての前記少なくとも1つの修飾子値の1つとして使用されるさらなる修飾子値には依存しない、請求項1から4までのいずれかに記載の装置。
  6. 前記認証コード生成命令のさらなる変形及び前記認証コード・チェック命令のさらなる変形について、前記少なくとも1つの修飾子値は前記コール・パス識別子に依存しない、請求項1から5までのいずれかに記載の装置。
  7. モード表示値を記憶するためのモード記憶要素を備え、
    前記モード表示値が第1の値を有する場合に実行される認証コード生成命令又は認証コード・チェック命令について、前記少なくとも1つの修飾子値は、前記コール・パス識別子に依存する前記値を含み、
    前記モード表示値が第2の値を有する場合に実行される認証コード生成命令又は認証コード・チェック命令について、前記少なくとも1つの修飾子値は、前記コール・パス識別子に依存しない、
    請求項1から6までのいずれかに記載の装置。
  8. 前記第1のソース値はメモリ・アドレスを含み、前記認証コード生成命令に応答して、前記処理回路は、前記メモリ・アドレスのビットのサブセットを前記生成された認証コードで置き換えるように構成される、請求項1から7までのいずれかに記載の装置。
  9. 前記第2のソース値はメモリ・アドレスを含み、前記エラー・ハンドリング応答は前記メモリ・アドレスを無効なアドレスに変えることを含む、請求項1から8までのいずれかに記載の装置。
  10. 前記エラー・ハンドリング応答は例外条件を伝達することを含む、請求項1から9までのいずれかに記載の装置。
  11. 前記コール命令に応答して、前記処理回路は、可逆の置換関数を使用して前記コール・パス識別子を前記関数リターン・アドレスで置換するように構成され、
    前記ターゲット関数から以前の処理へのリターンをトリガするための関数リターン命令に応答して、前記処理回路は、前記コール・パス識別子記憶要素に記憶される更新されたコール・パス識別子を生成するために、前記コール・パス識別子記憶要素に記憶される前記コール・パス識別子及び前記関数リターン・アドレスに対する逆置換関数を実施するように構成される、
    請求項1から10までのいずれかに記載の装置。
  12. 前記処理回路は、前記第1のソース値及び前記少なくとも1つの修飾子値に対して暗号関数を実施することにより前記認証コードを生成するように構成され、前記暗号関数は認証キー値に依存している、
    請求項1から11までのいずれかに記載の装置。
  13. 前記処理回路は、前記認証コード生成命令のプロパティに応じて複数の認証キー値の中から前記認証キー値を選択するように構成される、請求項12に記載の装置。
  14. コール・パス識別子保存命令に応答して、前記処理回路は、前記コール・パス識別子に依存する値をデータ・ストアに保存するように構成され、
    コール・パス識別子リストア命令に応答して、前記処理回路は、前記データ・ストアから読み出した値に応じて前記コール・パス識別子記憶要素に値をリストアするように構成される、
    請求項1から13までのいずれかに記載の装置。
  15. 前記コール・パス識別子保存命令に応答して、前記処理回路は、前記コール・パス識別子の暗号化されたバージョンを前記データ・ストアに保存するように構成され、
    前記コール・パス識別子リストア命令に応答して、前記処理回路は、前記データ・ストアから読み出した前記値を復号化して、前記復号化された値を前記コール・パス識別子記憶要素に記憶するように構成される、
    請求項14に記載の装置。
  16. 前記コール命令以外のコール・パス識別子置換命令に応答して、前記処理回路は、前記コール・パス識別子記憶要素に記憶される更新されたコール・パス識別子を生成するために、前記コール・パス識別子を、前記コール・パス識別子置換命令によって指定されるソース・オペランドと置換するように構成される、
    請求項1から15までのいずれかに記載の装置。
  17. 前記処理回路は、複数の特権レベルのうちの1つにおいて動作するように構成され、
    前記処理回路は、前記処理回路の現在の特権レベルがしきい値特権レベルよりも低い場合、前記コール・パス識別子置換命令の正常な実行を妨げるように構成される、
    請求項16に記載の装置。
  18. ターゲット関数のコールに応答して、コール・パス識別子記憶要素に記憶される更新されたコール・パス識別子を生成するために、前記コール・パス識別子記憶要素に記憶されるコール・パス識別子を関数リターン・アドレスと置換することと、
    第1のソース値及び少なくとも1つの修飾子値に応じて認証コードを生成するために、前記第1のソース値に対して認証コード生成演算を実施することと、
    以前に生成された認証コードが、第2のソース値及び少なくとも1つの修飾子値に依存する期待される認証コードと一致するかどうかをチェックし、前記以前に生成された認証コードと前記期待される認証コードとの間に不一致が検出される場合はエラー・ハンドリング応答をトリガするために、前記以前に生成された認証コードに関連付けられる前記第2のソース値に対して認証コード・チェック演算を実施することと
    を含み、
    前記認証コード生成演算のうちの少なくとも1つの変形、及び前記認証コード・チェック演算のうちの少なくとも1つの変形について、前記少なくとも1つの修飾子値は、前記コール・パス識別子記憶要素に記憶される前記コール・パス識別子に依存する値を含む、データ処理方法。
  19. 請求項18に記載の方法を実施するためのデータ処理装置を制御するための、コンピュータ・プログラム。
  20. 命令を実行するための命令実行環境を提供するようにホスト・データ処理装置を制御するためのコンピュータ・プログラムであって、
    前記命令実行環境において前記命令の実行を制御するための処理プログラム・ロジックと、
    コール・パス識別子を記憶するためのコール・パス識別子データ構造であり、ターゲット関数をコールするためのコール命令に応答して、前記処理プログラム・ロジックは、前記コール・パス識別子データ構造に記憶される更新されたコール・パス識別子を生成するために前記コール・パス識別子を関数リターン・アドレスで置換するように前記ホスト・データ処理装置を制御するように構成される、コール・パス識別子データ構造と
    を備え、
    第1のソース値を特定する認証コード生成命令に応答して、前記処理プログラム・ロジックは、前記第1のソース値及び少なくとも1つの修飾子値に依存する認証コードを生成するように前記ホスト・データ処理装置を制御するように構成され、
    以前に生成された認証コードに関連付けられる第2のソース値を特定する認証コード・チェック命令に応答して、前記処理プログラム・ロジックは、前記以前に生成された認証コードが、前記第2のソース値及び少なくとも1つの修飾子値に依存する期待される認証コードと一致するかどうかをチェックし、前記以前に生成された認証コードと前記期待される認証コードとの間に不一致が検出される場合はエラー・ハンドリング応答をトリガするように前記ホスト・データ処理装置を制御するように構成され、
    前記認証コード生成命令のうちの少なくとも1つの変形、及び前記認証コード・チェック命令のうちの少なくとも1つの変形について、前記少なくとも1つの修飾子値は、前記コール・パス識別子データ構造に記憶される前記コール・パス識別子に依存する値を含む、
    コンピュータ・プログラム。
JP2020513784A 2017-09-15 2018-08-13 コール・パス依存認証 Active JP7101761B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/705,605 2017-09-15
US15/705,605 US10740452B2 (en) 2017-09-15 2017-09-15 Call path dependent authentication
PCT/GB2018/052293 WO2019053396A1 (en) 2017-09-15 2018-08-13 AUTHENTICATION DEPENDING ON A CALL PATH

Publications (2)

Publication Number Publication Date
JP2020533683A JP2020533683A (ja) 2020-11-19
JP7101761B2 true JP7101761B2 (ja) 2022-07-15

Family

ID=63364085

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020513784A Active JP7101761B2 (ja) 2017-09-15 2018-08-13 コール・パス依存認証

Country Status (7)

Country Link
US (1) US10740452B2 (ja)
EP (1) EP3682362B1 (ja)
JP (1) JP7101761B2 (ja)
KR (1) KR102558104B1 (ja)
CN (1) CN111052115B (ja)
IL (1) IL272691B2 (ja)
WO (1) WO2019053396A1 (ja)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11860996B1 (en) * 2018-04-06 2024-01-02 Apple Inc. Security concepts for web frameworks
US11269786B2 (en) * 2018-07-25 2022-03-08 Intel Corporation Memory data protection based on authenticated encryption
FR3094107B1 (fr) * 2019-03-21 2021-02-26 Commissariat Energie Atomique Procédé d'exécution d'un code binaire d'une fonction sécurisée par un microprocesseur
FR3095869B1 (fr) * 2019-05-09 2021-04-09 Commissariat Energie Atomique Procédé d'exécution d'un code binaire d'une fonction sécurisée par un microprocesseur
US11403430B2 (en) * 2019-06-11 2022-08-02 At&T Intellectual Property I, L.P. Secure CPU architecture using encryption of return addresses
FR3098319A1 (fr) 2019-07-05 2021-01-08 Commissariat à l'énergie atomique et aux énergies alternatives Procédé d'exécution d'un code binaire d'une fonction sécurisée par un microprocesseur
US11687646B2 (en) * 2019-08-15 2023-06-27 Dellfer, Inc. Forensic data collection and analysis utilizing function call stacks
WO2021034753A2 (en) * 2019-08-16 2021-02-25 The Regents Of The University Of Michigan Thwarting control plane attacks with displaced and dilated address spaces
US11263316B2 (en) 2019-08-20 2022-03-01 Irdeto B.V. Securing software routines
US10831884B1 (en) * 2019-09-16 2020-11-10 International Business Machines Corporation Nested function pointer calls
CN111191203A (zh) * 2020-01-02 2020-05-22 北京字节跳动网络技术有限公司 身份验证方法及装置
US11714676B2 (en) * 2020-01-03 2023-08-01 International Business Machines Corporation Software-directed value profiling with hardware-based guarded storage facility
GB2597249B (en) * 2020-07-16 2022-12-21 Advanced Risc Mach Ltd Authentication code generation/checking instructions
CN111953497B (zh) * 2020-08-06 2023-07-14 山东云海国创云计算装备产业创新中心有限公司 一种基于hmac算法的消息认证码生成装置及方法
US11354474B2 (en) * 2020-08-31 2022-06-07 Beijing Baidu Netcom Science And Technology Co., Ltd. Method, apparatus and computer storage medium for authenticating chip
US20220191020A1 (en) * 2020-12-16 2022-06-16 International Business Machines Corporation Hardware support for software pointer authentification in a computing system
US20220206825A1 (en) * 2020-12-26 2022-06-30 Intel Corporation Memory-independent and scalable state component initialization for a processor
FR3120718B1 (fr) 2021-03-09 2023-02-10 Commissariat Energie Atomique Procédé d’exécution d’un programme d’ordinateur par un appareil électronique
WO2023127314A1 (ja) * 2021-12-28 2023-07-06 ソニーセミコンダクタソリューションズ株式会社 情報処理装置および情報処理方法
JP2023101334A (ja) * 2022-01-07 2023-07-20 ソニーセミコンダクタソリューションズ株式会社 情報処理装置および情報処理方法
CN117251165B (zh) * 2023-08-24 2024-06-25 上海合芯数字科技有限公司 Buildroot编译方法、装置、终端及介质
US11941262B1 (en) * 2023-10-31 2024-03-26 Massood Kamalpour Systems and methods for digital data management including creation of storage location with storage access ID

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090144309A1 (en) 2007-11-30 2009-06-04 Cabrera Escandell Marco A Method and apparatus for verifying a suspect return pointer in a stack
US20140096245A1 (en) 2012-09-28 2014-04-03 Stephen A. Fischer Protection Against Return Oriented Programming Attacks
US20160094552A1 (en) 2014-09-26 2016-03-31 David M. Durham Creating stack position dependent cryptographic return address to mitigate return oriented programming attacks
JP2017536612A (ja) 2014-10-17 2017-12-07 クアルコム,インコーポレイテッド ハードウェアフロー制御のためのコードポインタ認証

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08249206A (ja) * 1995-03-13 1996-09-27 Toshiba Corp スタック領域破壊検出機能付き計算機
US6651171B1 (en) * 1999-04-06 2003-11-18 Microsoft Corporation Secure execution of program code
US7401330B2 (en) 2003-12-11 2008-07-15 Hewlett-Packard Development Company, L.P. Cloning programming code
US20060143454A1 (en) * 2004-05-27 2006-06-29 Silverbrook Research Pty Ltd Storage of multiple keys in memory
US7469362B2 (en) 2005-04-15 2008-12-23 Microsoft Corporation Using a call stack hash to record the state of a process
US7987450B2 (en) 2005-12-19 2011-07-26 International Business Machines Corporation Stack-based problem identification for a software component
US8880901B2 (en) * 2006-05-25 2014-11-04 Red Hat, Inc. Secure address handling in a processor
US8370821B2 (en) 2007-08-21 2013-02-05 International Business Machines Corporation Method for enabling profile-based call site tailor-ing using profile gathering of cloned functions
US9015835B2 (en) 2013-06-23 2015-04-21 Intel Corporation Systems and methods for procedure return address verification
GB2516999B (en) 2014-01-31 2015-07-22 Imagination Tech Ltd An improved return stack buffer
US9390264B2 (en) * 2014-04-18 2016-07-12 Qualcomm Incorporated Hardware-based stack control information protection
US9992352B2 (en) 2014-11-01 2018-06-05 Somos, Inc. Toll-free telecommunications and data management platform
US9672351B2 (en) * 2015-02-02 2017-06-06 Qualcomm Incorporated Authenticated control stacks
US20160381050A1 (en) 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090144309A1 (en) 2007-11-30 2009-06-04 Cabrera Escandell Marco A Method and apparatus for verifying a suspect return pointer in a stack
US20140096245A1 (en) 2012-09-28 2014-04-03 Stephen A. Fischer Protection Against Return Oriented Programming Attacks
US20160094552A1 (en) 2014-09-26 2016-03-31 David M. Durham Creating stack position dependent cryptographic return address to mitigate return oriented programming attacks
JP2017536612A (ja) 2014-10-17 2017-12-07 クアルコム,インコーポレイテッド ハードウェアフロー制御のためのコードポインタ認証

Also Published As

Publication number Publication date
IL272691B2 (en) 2023-07-01
KR102558104B1 (ko) 2023-07-21
US20190087566A1 (en) 2019-03-21
IL272691A (en) 2020-04-30
US10740452B2 (en) 2020-08-11
EP3682362A1 (en) 2020-07-22
EP3682362B1 (en) 2021-09-29
WO2019053396A1 (en) 2019-03-21
IL272691B1 (en) 2023-03-01
JP2020533683A (ja) 2020-11-19
KR20200051694A (ko) 2020-05-13
CN111052115B (zh) 2023-09-05
CN111052115A (zh) 2020-04-21

Similar Documents

Publication Publication Date Title
JP7101761B2 (ja) コール・パス依存認証
KR101457355B1 (ko) 보안 애플리케이션 실행을 제공하는 방법 및 장치
US10237059B2 (en) Diversified instruction set processing to enhance security
US8782435B1 (en) System and method for validating program execution at run-time using control flow signatures
CN107077562B (zh) 用于动态控制代码执行的计算机实现的方法和系统
US10268601B2 (en) Timely randomized memory protection
KR102266342B1 (ko) 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치
US20230018585A1 (en) Updating encrypted security context in stack pointers for exception handling and tight bounding of on-stack arguments
Averbuch et al. Truly-protect: An efficient VM-based software protection
US11947663B2 (en) Control flow protection based on phantom addressing
Shi et al. Towards the issues in architectural support for protection of software execution
Milenković et al. Using instruction block signatures to counter code injection attacks
Lin et al. Control-flow carrying code
JP6068325B2 (ja) セキュアなアプリケーションの実行を提供するプロセッサ
Schilling et al. SecWalk: Protecting page table walks against fault attacks
KR102430335B1 (ko) 가상화 코드의 난독화를 강화하는 방법 및 그 장치
JP6777288B2 (ja) プロセッサ
WO2024028565A1 (en) No-operation-compatible instruction
JP6480403B2 (ja) 装置
de Clercq Hardware-supported software and control flow integrity
Shi et al. Attacks and risk analysis for hardware supported software copy protection systems
JP6085320B2 (ja) プロセッサ、プログラム、システム及び方法
Milenkovic et al. An efficient runtime instruction block verification for secure embedded systems
GB2622065A (en) Counter integrity tree
Dwoskin et al. SP Processor Architecture Reference Manual

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210806

TRDD Decision of grant or rejection written
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220525

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220610

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220705

R150 Certificate of patent or registration of utility model

Ref document number: 7101761

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150