Skip to main content
QUICK REVIEW

[論文レビュー] PAC it up: Towards Pointer Integrity using ARM Pointer Authentication

Hans Liljestrand, Thomas Nyman|arXiv (Cornell University)|Nov 22, 2018
Security and Verification in Computing参考文献 36被引用数 34
ひとこと要約

本論文は、ARMポインタ認証(PA)を活用して、コードポインタおよびデータポインタの両方のポインタ整合性を強制するコンパイラインストルメンテーションフレームワークPARTSを提示する。この手法により、コントロールフローオンリエイド攻撃およびデータ指向攻撃に対する保護が著しく向上する。ポインタ署名とランタイム型安全の組み合わせにより、低パフォーマンスオーバーヘッド(コードおよびリターンポインタ署名では0.5%未塔、nbench-byteにおけるデータポインタ署名では19.5%)で強固なセキュリティ保証を達成しており、完全精確な静的CFIを上回る性能を示している。

ABSTRACT

Run-time attacks against programs written in memory-unsafe programming languages (e.g., C and C++) remain a prominent threat against computer systems. The prevalence of techniques like return-oriented programming (ROP) in attacking real-world systems has prompted major processor manufacturers to design hardware-based countermeasures against specific classes of run-time attacks. An example is the recently added support for pointer authentication (PA) in the ARMv8-A processor architecture, commonly used in devices like smartphones. PA is a low-cost technique to authenticate pointers so as to resist memory vulnerabilities. It has been shown to enable practical protection against memory vulnerabilities that corrupt return addresses or function pointers. However, so far, PA has received very little attention as a general purpose protection mechanism to harden software against various classes of memory attacks. In this paper, we use PA to build novel defenses against various classes of run-time attacks, including the first PA-based mechanism for data pointer integrity. We present PARTS, an instrumentation framework that integrates our PA-based defenses into the LLVM compiler and the GNU/Linux operating system and show, via systematic evaluation, that PARTS provides better protection than current solutions at a reasonable performance overhead

研究の動機と目的

  • C や C++ のようなメモリ安全でない言語におけるランタイム攻撃の増加する脅威に対処すること。
  • ARMv8-A ポインタ認証(PA)がリターンアドレス保護を超えて一般用途の防御メカニズムとしての可能性を有するかを調査すること。
  • すべてのポインタタイプ(データポインタを含む)の整合性を強制する実用的で効率的かつ安全なフレームワークを設計・実装すること。
  • 実世界のワークロードにおけるPAベースの防御のセキュリティとパフォーマンスのトレードオフを評価すること。
  • PAベースの保護をメインストリームのコンパイラおよびオペレーティングシステムに統合可能にするための手段を提供すること。

提案手法

  • 暗号的MAC(PAC)を用いて、すべてのコードポインタおよびデータポインタを認証するポインタ署名スキームを設計し、改ざんを防止すること。
  • ポインタの代替攻撃を制限するために、ランタイム型安全を導入し、型に整合するポインタのみが使用可能であることを保証すること。
  • LLVMおよびGNU/Linuxに統合されたコンパイラインストルメンテーションフレームワークであるPARTSを構築し、コンパイル時にPAベースの保護を自動的に適用すること。
  • リターンアドレス、関数ポインタ、データポインタにPACをインストルメントして、偽装されたポインタの使用を検出・防止すること。
  • 任意のデータブロックに対する認証キャニスターおよび整合性チェックをサポートするため、pacga命令を活用すること。
  • PAキーの設定を高レベルの例外レベル(EL2/EL3)でトラップすることで、特権昇格攻撃を防ぐキーマネジメント戦略を設計すること。

実験結果

リサーチクエスチョン

  • RQ1ARMポインタ認証は、リターンアドレス保護を超えて、すべてのポインタタイプを保護するために効果的に拡張可能か?
  • RQ2パフォーマンスと実用性を維持しつつ、PAを用いてポインタ再利用攻撃をどのように緩和できるか?
  • RQ3PAを用いてデータポインタを保護した場合のパフォーマンスオーバーヘッドはどの程度で、実世界の展開に耐えうるか?
  • RQ4ランタイム型安全とPAの組み合わせは、既存のCFIやシャロウスタックソリューションよりも強固な保証を提供できるか?
  • RQ5PAベースの保護は、共有ライブラリやレガシーコードを含む、既存のソフトウェアスタックにどのように統合できるか?

主な発見

  • PARTSは、コードポインタおよびリターンアドレス署名において平均0.5%未満のパフォーマンスオーバーヘッドを達成しており、高い効率性を示している。
  • nbench-byteベンチマークにおけるデータポインタ署名では平均19.5%のオーバーヘッドが発生するが、これはセキュリティが重要なアプリケーションにとって許容可能である。
  • 外部プロセスからの偽装ポインタ値を防止できるため、完全精確な静的CFIよりも強固なセキュリティ保証をPARTSが提供している。
  • ポインタ署名とランタイム型安全の組み合わせは、コントロールフロー攻撃およびデータ指向プログラミング(DOP)攻撃の両方に対して効果的に防御する。
  • PARTSはポインタ再利用攻撃に対して耐性があり、攻撃が成功するには、同じプロセス内での同じ関数からの同一のスタックポインタ値が必須となる。
  • PACラッパーおよびアノテーションを介して、レガシーコードとの統合をサポートしており、非インストルメンテッドコードとの安全な相互運用性を実現している。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。