[論文レビュー] Zipper Stack: Shadow Stacks Without Shadow
この論文では、すべてのリターンアドレスを認証するためのメッセージ認証コード(MAC)の連鎖を用いる、軽量で暗号的に安全なリターンアドレス保護メカニズムであるZipper Stackを提案する。各MACを直前のMACにリンクさせることで、唯一最新のMACのみを保護すればよくなる。これにより、メモリ完全アクセスと秘密鍵の知識を持つ強力な攻撃者に対しても強く耐性を示しつつ、FPGAベースのハードウェア支援を備えたRISC-Vアーキテクチャ上で平均1.86%のパフォーマンスオーバーヘッドを達成する。
Return-Oriented Programming (ROP) is a typical attack technique that exploits return addresses to abuse existing code repeatedly. Most of the current return address protecting mechanisms (also known as the Backward-Edge Control-Flow Integrity) work only in limited threat models. For example, the attacker cannot break memory isolation, or the attacker has no knowledge of a secret key or random values. This paper presents a novel, lightweight mechanism protecting return addresses, Zipper Stack, which authenticates all return addresses by a chain structure using cryptographic message authentication codes (MACs). This innovative design can defend against the most powerful attackers who have full control over the program's memory and even know the secret key of the MAC function. This threat model is stronger than the one used in related work. At the same time, it produces low-performance overhead. We implemented Zipper Stack by extending the RISC-V instruction set architecture, and the evaluation on FPGA shows that the performance overhead of Zipper Stack is only 1.86%. Thus, we think Zipper Stack is suitable for actual deployment.
研究の動機と目的
- メモリ隔離や秘密ランダムネスに依存する既存のリターンアドレス保護メカニズムの限界、例えばメモリリークやサイドチャnel攻撃によって回避可能であるという点を解決すること。
- 攻撃者がメモリを完全に制御可能であり、秘密鍵の知識を持つ強力な脅威モデル下でも安全に保てるメカニズムを設計すること。
- 新規な暗号連鎖構造を用いて、リターンアドレスの強力な認証を実現しながら、パフォーマンスオーバーヘッドを最小限に抑えること。
- 既存のバイナリとのバイナリ互換性を実証することで、実用的な展開可能性を確保すること。
提案手法
- Zipper Stackは、各MACが現在のリターンアドレスと直前のMACから計算される暗号的MAC連鎖を用いる。これにより、すべてのリターンアドレス間に依存関係が生じる。
- 連鎖全体のセキュリティは、最新のMACのみを保護すればよいという点に依存しており、以前のMACを改ざんすると連鎖の整合性が破壊される。
- 実行時において、各リターン命令の実行前に最新のMACを検証することで、リターンアドレスを認証する。
- RISC-V命令セットにハードウェア拡張を加え、AES-NIを用いて効率的なMAC計算を実現する。
- MACをメモリに格納しないで、オンザフライで計算することで、メモリアクセスとオーバーヘッドを削減する。
- バイナリ互換性はQEMUを用いて評価され、再コンパイルなしに連鎖構造をサポートするようx86-64命令セットに変更が加えられた。
実験結果
リサーチクエスチョン
- RQ1攻撃者がメモリを完全に制御可能であり、秘密鍵の知識を持つ状況下でも、リターンアドレス保護メカニズムが安全に保てるか。
- RQ2このようなメカニズムが、メモリ隔離や秘密ランダムネスに依存せずに、低いパフォーマンスオーバーヘッドを実現できるか。
- RQ3すべてのリターンアドレスの整合性を保証するために、保護すべき暗号的値が1つだけであるようなシステムを設計可能か。
- RQ4ソフトウェアベースのMAC連鎖実装のパフォーマンスは、ハードウェアベースのShadow Stackと比較してどの程度か。
- RQ5Zipper Stackは、再コンパイルなしに、既存のバイナリにどの程度展開可能か。
主な発見
- FPGAベースのハードウェア支援を備えたRISC-V上で、Zipper Stackは平均1.86%のパフォーマンスオーバーヘッドを達成し、キャッシュ最適化を適用した場合、ハードウェアベースのShadow Stack(2.36%オーバーヘッド)を上回る性能を示した。
- ソフトウェアベースのLLVM実装では、MAC計算ラウンド数に応じて4.75%から21.13%のオーバーヘッドが発生するが、これも先行する暗号的手法と比較して依然として競争力がある。
- バイナリ互換性テストでは、QEMU上でのx86-64バイナリ50個中42個(84%)で互換性を確認した。主な制限要因は、対応していないsetjmp/longjmp呼び出しに起因する。
- MAC連鎖設計により、攻撃者が連鎖全体を改ざんしない限り、正当なリターンアドレスを偽造できないため、強力な脅威モデル下でも安全である。
- セキュリティ分析により、Zipper Stackはリプレイ攻撃、JOP/COOP、ASLRバイパス技術を効果的に抵抗することが確認された。これは、連鎖の整合性が改ざんされていない最新のMACに依存しているためである。
- メモリ隔離に依存しないため、ページ属性の操作や情報漏洩によって破壊される可能性があるShadow Stackよりも、Zipper Stackはより耐性がある。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。