The popularity of the Java programming language has led to its wide adoption in cloud computing infrastructures. However, Java applications running in untrusted clouds are vulnerable to various forms of privileged attacks. The emergence of trusted execution environments (TEEs) such as Intel SGX mitigates this problem. TEEs protect code and data in secure enclaves inaccessible to untrusted software, including the kernel and hypervisors. To efficiently use TEEs, developers must manually partition their applications into trusted and untrusted parts, in order to reduce the size of the trusted computing base (TCB) and minimise the risks of security vulnerabilities. However, partitioning applications poses two important challenges: (i) ensuring efficient object communication between the partitioned components, and (ii) ensuring the consistency of garbage collection between the parts, especially with memory-managed languages such as Java. We present Montsalvat, a tool which provides a practical and intuitive annotation-based partitioning approach for Java applications destined for secure enclaves. Montsalvat provides an RMI-like mechanism to ensure inter-object communication, as well as consistent garbage collection across the partitioned components. We implement Montsalvat with GraalVM native-image, a tool for compiling Java applications ahead-of-time into standalone native executables that do not require a JVM at runtime. Our extensive evaluation with micro- and macro-benchmarks shows our partitioning approach to boost performance in real-world applications
論文ID : 2305.00766タイトル : Montsalvat: Partitioning Java Applications to Minimize the TCB in Intel SGX著者 : Peterson Yuhala, Jämes Ménétrey, Pascal Felber, Valerio Schiavoni, Alain Tchana, Gaël Thomas, Hugo Guiroux, Jean-Pierre Lozi分類 : cs.CR (暗号化とセキュリティ)発表会議 : 第22回国際ミドルウェア会議 (Middleware 2021)論文リンク : https://arxiv.org/abs/2305.00766 Javaプログラミング言語の普及により、クラウドコンピューティングインフラストラクチャでの採用が広がっています。しかし、信頼できないクラウド環境で実行されるJavaアプリケーションは、様々な特権攻撃に対して脆弱です。Intel SGXなどの信頼実行環境(TEE)の出現は、この問題を緩和しています。TEEはセキュアエンクレーブ内のコードとデータを保護し、カーネルやハイパーバイザーを含む信頼できないソフトウェアからのアクセスを防止します。TEEを効率的に使用するには、開発者がアプリケーションを信頼できる部分と信頼できない部分に手動で分割し、信頼できる計算基盤(TCB)のサイズを削減し、セキュリティ脆弱性のリスクを最小化する必要があります。本論文では、セキュアエンクレーブを対象としたJavaアプリケーションに対して、実用的で直感的なアノテーションベースの分割方法を提供するMontsalvatツールを提案します。Montsalvatはオブジェクト間通信を確保するRMI様メカニズムと、分割されたコンポーネント間の一貫したガベージコレクションを提供します。
セキュリティ脅威 : Javaアプリケーションは信頼できないクラウド環境において、カーネルレベルおよびハイパーバイザーレベルの攻撃を含む特権攻撃の脅威に直面していますTCB最小化の必要性 : Intel SGXなどのTEEを使用する際、攻撃面を削減するために信頼できる計算基盤を最小化する必要があります分割の複雑性 : Javaアプリケーションの手動分割には、オブジェクト通信とガベージコレクション一貫性などの複雑な問題への対処が必要です完全なアプリケーション方式 : SCONE、Graphene-SGXなどは、アプリケーション全体(JVMを含む)をエンクレーブに配置するため、TCBが過度に大きくなります(数百万行のコード)フレームワーク固有の方式 : VC3、SecureKeeperなどは特定のフレームワークのみを対象とし、汎用性に欠けます既存のJava分割方式 :
Civetは完全なLibOSを必要とし、TCBは依然として大きいままです Uranusは信頼できる分割を推論するために第三者ツールを必要とし、開発者の介入が多くなります 以下の機能を備えた、汎用的で自動化されたJavaアプリケーション分割ツールを開発することです:
直感的なクラスレベルのアノテーション方式を提供する 効率的なエンクレーブ間オブジェクト通信を実装する 分散ガベージコレクション一貫性を確保する TCBサイズを大幅に削減する アノテーションベースの分割方法 : Javaアプリケーションを分割するための実用的で直感的なクラスレベルのアノテーション方式(@Trusted、@Untrusted、@Neutral)を提案しましたRMIメカニズム : プロキシオブジェクトを通じて透過的なリモートメソッド呼び出しを実現するエンクレーブ間オブジェクト通信メカニズムを設計しました分散ガベージコレクション : 弱参照ベースのGC拡張を実装し、信頼できるヒープと信頼できないヒープ間のオブジェクト破棄の一貫性を確保しましたGraalVM統合 : GraalVM native-imageとの深い統合により、AOTコンパイルによるパフォーマンス最適化を活用しましたパフォーマンス向上 : 実際のアプリケーションで顕著なパフォーマンス向上を実現しました(PalDB 6.6倍、GraphChi 2.2倍)入力 : セキュリティアノテーション付きのJavaアプリケーションソースコード
出力 : Intel SGX環境にデプロイ可能な分割されたネイティブイメージ(信頼できる部分と信頼できない部分)
制約 : 元のアプリケーションセマンティクスを保持し、オブジェクト通信とGC一貫性を確保する
Montsalvatのワークフローは4つの主要なステージで構成されています:
3つのアノテーションタイプを提供します:
@Trusted: クラスおよびそのインスタンスは常にエンクレーブ内で作成・操作されます@Untrusted: クラスおよびそのインスタンスは常にエンクレーブ外で操作されます@Neutral: ユーティリティクラスで、両側に独立した複数のコピーが存在できますJavassistフレームワークを使用してバイトコード変換を実行します:
プロキシクラスの生成 :
信頼できない実行時の各信頼できるクラスに対してプロキシクラスを生成します 信頼できる実行時の各信頼できないクラスに対してプロキシクラスを生成します プロキシクラスは元のメソッドシグネチャを保持しますが、メソッド本体はエンクレーブ間呼び出しに置き換えられます リレーメソッドの注入 :
// 元のメソッドはリレーメソッドに変換されます
@CEntryPoint
public static void relayAccount(Isolate ctx, int hash,
CCharPointer buf, int b) {
String s = deserialize(buf);
Account mirror = new Account(s, b);
mirrorProxyRegistry.add(hash, mirror);
}
オブジェクトマッピングメカニズム :
各プロキシオブジェクトに一意のハッシュ値を割り当てます プロキシ-ミラーオブジェクトレジストリを保持します ハッシュ値を通じてエンクレーブ間のオブジェクト参照を実装します GraalVMの静的分析を活用します:
信頼できるイメージ : 信頼できるクラスの具体的な実装 + 信頼できないクラスのプロキシを含みます信頼できないイメージ : 信頼できないクラスの具体的な実装 + 信頼できるクラスのプロキシを含みますポイント-トゥ分析により到達不可能なコードを自動的に削除します Shimライブラリ : サポートされていないlibc呼び出しをインターセプトし、信頼できない実行時にリレーする軽量ライブラリですEDL生成 : エンクレーブ定義言語ファイルを自動生成します最終リンク : 実行可能なSGXアプリケーションを生成しますメソッドレベルまたはデータレベルの分割と比較して:
オブジェクト指向プログラミングの直感に更に適合しています 複雑なデータフロー分析を回避します 自然なカプセル化境界を提供します 元のプログラミングモデルを保持します パラメータのシリアライゼーション/デシリアライゼーションを自動的に処理します 複雑なオブジェクトグラフのエンクレーブ間転送をサポートします // 弱参照ベースのGC同期
WeakReference<ProxyObject> weakRef = new WeakReference<>(proxy);
proxyWeakRefs.add(new ProxyWeakRefEntry(weakRef, proxy.getHash()));
// GCヘルパーが定期的にチェック
if (weakRef.get() == null) {
// プロキシオブジェクトがGCされたため、
// 対側にミラーオブジェクトの破棄を通知します
notifyMirrorDestruction(hash);
}
ハードウェア : Intel Xeon E3-1270 CPU (3.80 GHz)、64GB RAMSGX設定 : 128MB EPC (93.5MB利用可能)、最大ヒープ4GB、スタック8MBソフトウェア : Ubuntu 18.04、SGX SDK v2.11、GraalVM CE v21.0.0比較ベースライン : SCONE (JVMがエンクレーブ内で実行)パフォーマンス指標 : アプリケーション実行時間、操作レイテンシオーバーヘッド分析 : プロキシオブジェクト作成オーバーヘッド、RMI呼び出しオーバーヘッド、GCパフォーマンス高速化比 : 未分割およびSCONE方式との相対的なパフォーマンス向上合成ベンチマーク : CPU集約型およびI/O集約型の操作PalDB : LinkedInの組み込みキー値ストアGraphChi : 大規模グラフ処理フレームワーク(PageRankアルゴリズム)SPECjvm2008 : 標準JavaマイクロベンチマークテストPalDB : SCONEと比較して6.6倍の向上(RTWU方式)、2.8倍(RUTW方式)GraphChi : SCONEと比較して2.2倍の向上SPECjvm2008 : 6つのベンチマークテストのうち5つで顕著な向上(1.38倍~2.66倍)プロキシオブジェクト作成は具体的なオブジェクトより3~4桁遅い RMI呼び出しはローカル呼び出しより3~4桁遅い シリアライズされたパラメータは10倍(エンクレーブ内)から3倍(エンクレーブ外)のオーバーヘッドを追加します エンクレーブ内のGCはエンクレーブ外より1桁遅い GC一貫性検証: プロキシオブジェクトが破棄されるとミラーオブジェクトが正しくクリーンアップされます 合成ベンチマークテストを通じて異なる信頼できるクラスの比率を検証:
CPU集約型 : より多くのクラスをエンクレーブ外に移動するとパフォーマンス向上が顕著ですI/O集約型 : I/O操作をエンクレーブ外に移動するとパフォーマンス向上がより明らかですすべてのテストにおいて、パフォーマンスの順序は以下の通りです:
ネイティブ実行(SGXなし) - 最速ですが安全ではありません 分割後のネイティブイメージ - パフォーマンスとセキュリティのバランス 未分割のネイティブイメージ - 中程度のパフォーマンス SCONE+JVM - 最も遅いですが互換性が最も良好です @Trusted class DBReader // 機密読み取り操作を保護
@Untrusted class DBWriter // I/O書き込み操作をエンクレーブ外に移動
RTWU方式は高価な書き込み操作のエンクレーブ転換を回避するため、パフォーマンスがより優れています。
@Trusted class GraphChiEngine // コア計算ロジックを保護
@Untrusted class FastSharder // グラフシャーディングI/O操作
シャーディング操作をエンクレーブ外に移動した後、ほぼネイティブパフォーマンスに近づきます。
SCONE、Graphene-SGX、SGX-LKL : 優れた互換性を提供しますがTCBが過度に大きいですHaven : 初期の完全なアプリケーション方式VC3 : Hadoopデータ分析SecureKeeper : ZooKeeper拡張Opaque : Spark SQLプラットフォーム制限事項: 特定のフレームワークのみに適用可能 Glamdring : C/C++自動分割、Javaには適用不可Panoply : マイクロコンテナ方式Civet : Java分割ですが完全なLibOSを使用Uranus : メソッドレベルのアノテーション、第三者ツールが必要実現可能性の検証 : アノテーションベースのクラスレベル分割方式は実現可能で直感的ですパフォーマンス上の利点 : 分割されたアプリケーションは完全なエンクレーブ方式と比較して顕著なパフォーマンス向上を示しますTCB削減 : Shimライブラリを通じてLibOSではなく信頼できるコードベースを大幅に削減します開発者フレンドリー : アノテーション方式は開発者にとってより直感的ですカプセル化要件 : すべてのアノテーション付きクラスが正しくカプセル化されている(プライベートフィールド)ことを前提としていますRMIオーバーヘッド : エンクレーブ間呼び出しは依然として顕著なオーバーヘッドがあり、頻繁な相互作用シナリオには適していませんGraalVM依存 : GraalVMエコシステムに限定されます静的分析の制限 : 特定の動的機能のサポートが限定的ですゼロコピー呼び出し : 高価なRMIを削減する技術の研究複数隔離サポート : 複数のisolate環境への拡張自動分割 : 静的分析に基づく自動分割推奨他のTEEサポート : AMD SME、ARM TrustZoneへの拡張革新性が高い : クラスレベルのJavaアプリケーション分割方式を初めて提案し、設計は直感的で合理的ですエンジニアリングが完全 : アノテーションから最終的なSGXアプリケーションまでの完全なツールチェーンパフォーマンスが優れている : 実際のアプリケーションで顕著なパフォーマンス向上を示します実用的価値が高い : Javaアプリケーションの安全なクラウドデプロイメントという実際の問題を解決しますオーバーヘッドが依然として大きい : RMI呼び出しのオーバーヘッドは依然として3~4桁あり、適用可能なシナリオを制限します前提条件が厳格 : クラスカプセル化の要件により、既存コードの適用性が制限される可能性があります評価が十分ではない : 大規模で長期実行されるアプリケーションの評価が不足していますセキュリティ分析が不十分 : サイドチャネル攻撃などの高度な脅威への防御分析が限定的です学術的貢献 : TEE環境下のマネージド言語アプリケーション分割に新しい視点を提供します実用的価値 : Javaクラウドアプリケーションのセキュリティ強化に直接適用可能です再現可能性 : 著者がオープンソース化を約束しており、研究の再現と拡張が容易ですクラウドJavaサービス : 機密ビジネスロジックを保護する必要があるクラウドアプリケーションデータ分析プラットフォーム : 機密データを処理する分析フレームワークフィンテックアプリケーション : 高度なセキュリティ保証が必要な金融サービスIoTエッジコンピューティング : リソース制約環境でのセキュアな計算本論文はSGX技術、TEEアプリケーション、Javaセキュリティ、コンパイル最適化など複数の分野の重要な研究を含む60篇の関連文献を引用しており、本研究に堅実な理論的基礎を提供しています。
総合評価 : これは高品質なシステム研究論文であり、TEE環境下でのJavaアプリケーションの実際のデプロイメント問題を解決しています。方法設計は合理的で、実装は完全で、実験は十分であり、優れた学術的価値と実用的意義を持っています。RMIオーバーヘッドと適用性の面でまだ改善の余地がありますが、関連分野の研究に重要な参考資料を提供しています。