[論文レビュー] SplittingSecrets: A Compiler-Based Defense for Preventing Data Memory-Dependent Prefetcher Side-Channels
SplittingSecrets は、データメモリ依存プリフェッチャ(DMP)サイドチャネルを分割した秘密を固定プレフィックスでメモリに分割することで抑止する、LLVM上で実装されたARM64向けのコンパイラベースツールで、libsodium を用いて評価。
Traditional side-channels take advantage of secrets being used as inputs to unsafe instructions, used for memory accesses, or used in control flow decisions. Constant-time programming, which restricts such code patterns, has been widely adopted as a defense against these vulnerabilities. However, new hardware optimizations in the form of Data Memory-dependent Prefetchers (DMP) present in Apple, Intel, and ARM CPUs have shown such defenses are not sufficient. These prefetchers, unlike classical prefetchers, use the content of memory as well as the trace of prior accesses to determine prefetch targets. An adversary abusing such a prefetcher has been shown to be able to mount attacks leaking data-at-rest; data that is never used by the program, even speculatively, in an unsafe manner. In response, this paper introduces SplittingSecrets, a compiler-based tool that can harden software libraries against side-channels arising from DMPs. SplittingSecrets's approach avoids reasoning about the complex internals of different DMPs and instead relies on one key aspect of all DMPs: activation requires data to resemble addresses. To prevent secret data from leaking, SplittingSecrets transforms memory operations to ensure that secrets are never stored in memory in a manner resembling an address, thereby avoiding DMP activation on those secrets. Rather than disable a DMP entirely, SplittingSecrets can provide targeted hardening for only specific secrets entirely in software. We have implemented SplittingSecrets using LLVM, supporting both source-level memory operations and those generated by the compiler backend for the AArch64 architecture, We have analyzed the performance overhead involved in safeguarding secrets from DMP-induced attacks using common primitives in libsodium, a popular cryptographic library when built for Apple M-series CPUs.
研究の動機と目的
- 従来の一定時間防御を回避するデータメモリ依存プリフェッチャ(DMP)サイドチャネルに動機づけ、対処する。
- シークレットが DMP ページウォークに参加しないよう、コンパイラベースの変換を提案する。
- ARM64向けに LLVM でアプローチを実装し、暗号ライブラリの性能オーバーヘッドを評価する。
- 特権的なハードウェア変更を必要とせず、既知の DMP対応CPU 上で動作するソフトウェアのみの防御を提供する。
提案手法
- 64ビット語句の固定非一致のハイハーフを前置して、秘密が有効な DMP ページウォークをトリガーできないメモリ位置に格納することで、メモリストア/ロードを変換する。
- 秘密を32ビットのチャンクに分割し、追加割り当てメモリの恒久的なプレフィックスと交互に格納する。
- ポインタのア upper-bit タグを用いた動的追跡で、ソースまたはコンパイラ生成のメモリ操作で秘密メモリを注釈・追跡する。
- 秘密の追加メモリを割り当て・マッピングし、秘密の追跡とアクセスチェックを処理するランタイムを提供する。
- ソースレベルの操作には LLVM IR で、AArch64 バックエンドには MIR で変換を適用し、スタック・ヒープ・グローバル秘密に対応する。
- 大規模なユニットテストと libsodium を用いた検証で正確性を確保し、変換後データが DMP ページウォークに参加できないことを保証してセキュリティを確保する。

実験結果
リサーチクエスチョン
- RQ1コンパイラベースのメモリ変換がアーキテクチャ間でデータメモリ依存のプリフェッチャサイドチャネルを防げるか。
- RQ2SplittingSecrets アプローチが DMPトリガー漏洩を防ぎつつプログラムセマンティクスを保つ程度の有効性。
- RQ3DMPサイドチャネルからの保護に伴う性能/メモリオーバーヘッドはどの程度か。
- RQ4プレフィックスを回転させる、または秘密断片サイズを調整することで方法は異なる DMP 実装に適応できるか。
主な発見
- このツールは ARM64 用に LLVM 上で実装され、暗号ライブラリを対象としている。
- 秘密データは32ビットのチャンクに分割され、ページウォークを防ぐ固定プレフィックスとともに格納される。
- 秘密のための追加メモリを割り当て、ランタイムが秘密の場所を追跡して正しい読み書きを可能にする。
- このアプローチはクロスプラットフォーム性を想定し、プレフィックスを変更することでさまざまな DMP 設計に適応可能。
- libsodium での評価は、ハードウェア変更なしのソフトウェアのみの防御の実現可能性を示している。

より良い研究を、今すぐ始めましょう
論文設計から論文執筆まで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。