2025-11-20T07:49:14.984146

Montsalvat: Partitioning Java Applications to Minimize the TCB in Intel SGX

Yuhala, Ménétrey, Felber et al.
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
academic

Montsalvat: تقسيم تطبيقات Java لتقليل TCB في Intel SGX

المعلومات الأساسية

  • معرّف الورقة: 2305.00766
  • العنوان: Montsalvat: تقسيم تطبيقات Java لتقليل الأساس الموثوق به (TCB) في 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 (التشفير والأمان)
  • المؤتمر: المؤتمر الدولي الثاني والعشرون للبرمجيات الوسيطة (Middleware 2021)
  • رابط الورقة: https://arxiv.org/abs/2305.00766

الملخص

أدى انتشار لغة البرمجة Java إلى اعتمادها على نطاق واسع في بنية الحوسبة السحابية. ومع ذلك، تتعرض تطبيقات Java التي تعمل في بيئات سحابية غير موثوقة لهجمات امتيازية متنوعة. يخفف ظهور بيئات التنفيذ الموثوقة (TEE) مثل Intel SGX من هذه المشكلة. تحمي بيئات TEE الكود والبيانات داخل حصون آمنة (enclaves) من الوصول إليها بواسطة برامج غير موثوقة بما في ذلك النواة والمراقب الافتراضي. لاستخدام بيئات TEE بكفاءة، يجب على المطورين تقسيم التطبيقات يدويًا إلى أجزاء موثوقة وغير موثوقة لتقليل حجم الأساس الموثوق به (TCB) وتقليل مخاطر الثغرات الأمنية. تقدم هذه الورقة أداة Montsalvat التي توفر طريقة عملية وبديهية قائمة على التعليقات التوضيحية لتقسيم تطبيقات Java الموجهة نحو الحصون الآمنة. توفر Montsalvat آلية تشبه RMI لضمان الاتصال بين الكائنات، بالإضافة إلى جمع القمامة المتسق عبر مكونات التقسيم.

خلفية البحث والدافع

تعريف المشكلة

  1. التهديدات الأمنية: تواجه تطبيقات Java في البيئات السحابية غير الموثوقة تهديدات هجمات امتيازية، بما في ذلك الهجمات على مستوى النواة ومستوى المراقب الافتراضي
  2. متطلبات تقليل TCB: عند استخدام بيئات TEE مثل Intel SGX، يجب تقليل الأساس الموثوق به لتقليل سطح الهجوم
  3. تعقيد التقسيم: يتطلب تقسيم تطبيقات Java يدويًا التعامل مع مشاكل معقدة مثل الاتصال بين الكائنات واتساق جمع القمامة

قيود الحلول الموجودة

  1. حلول التطبيق الكامل: تضع SCONE و Graphene-SGX وغيرها التطبيق بأكمله (بما في ذلك JVM) داخل الحصن، مما يؤدي إلى TCB كبير جدًا (ملايين أسطر الكود)
  2. حلول خاصة بالإطار: VC3 و SecureKeeper وغيرها موجهة فقط لأطر عمل محددة، وتفتقر إلى العمومية
  3. حلول تقسيم Java الموجودة:
    • يتطلب Civet نظام تشغيل مكتبة كامل، لا يزال TCB كبيرًا
    • يتطلب Uranus أدوات تابعة لجهات خارجية للاستدلال على الأقسام الموثوقة، مع تدخل أكبر من المطورين

دافع البحث

تطوير أداة تقسيم تطبيقات Java عامة وآلية قادرة على:

  • توفير طريقة تعليقات توضيحية بديهية على مستوى الفئة
  • تنفيذ اتصال كائنات فعال عبر الحصون
  • ضمان اتساق جمع القمامة الموزع
  • تقليل حجم TCB بشكل كبير

المساهمات الأساسية

  1. طريقة التقسيم القائمة على التعليقات التوضيحية: تقدم طريقة عملية وبديهية للتعليقات التوضيحية على مستوى الفئة (@Trusted و @Untrusted و @Neutral) لتقسيم تطبيقات Java
  2. آلية RMI: تصميم آلية اتصال كائنات عبر الحصون تشبه RMI، مع تنفيذ استدعاءات الطرق البعيدة الشفافة من خلال كائنات وكيلة
  3. جمع القمامة الموزع: تنفيذ امتداد GC قائم على المراجع الضعيفة، مما يضمن اتساق تدمير الكائنات بين أكوام الذاكرة الموثوقة وغير الموثوقة
  4. تكامل GraalVM: التكامل العميق مع GraalVM native-image، مع الاستفادة من تحسينات التجميع المسبق (AOT)
  5. تحسن الأداء: تحقيق تحسن أداء كبير في التطبيقات الحقيقية (PalDB 6.6×، GraphChi 2.2×)

شرح الطريقة

تعريف المهمة

الإدخال: كود مصدر تطبيق Java مع تعليقات توضيحية أمنية الإخراج: صور native image مقسمة موثوقة وغير موثوقة، قابلة للنشر في بيئة Intel SGX القيود: الحفاظ على دلالات التطبيق الأصلية، ضمان اتصال الكائنات واتساق GC

معمارية النظام

يتضمن سير عمل Montsalvat 4 مراحل رئيسية:

1. مرحلة التعليقات التوضيحية للكود

توفير ثلاثة أنواع من التعليقات التوضيحية:

  • @Trusted: يتم إنشاء الفئة ونسخها دائمًا داخل الحصن والعمل عليها
  • @Untrusted: يتم العمل على الفئة ونسخها دائمًا خارج الحصن
  • @Neutral: فئات أداة، يمكن أن توجد نسخ مستقلة متعددة على كلا الجانبين

2. مرحلة تحويل البايت كود

استخدام إطار عمل 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);
}

آلية تعيين الكائنات:

  • تخصيص قيمة تجزئة فريدة لكل كائن وكيل
  • الحفاظ على سجل كائنات الوكيل والمرآة
  • تنفيذ مراجع الكائنات عبر الحصون من خلال قيم التجزئة

3. تقسيم صورة Native Image

الاستفادة من التحليل الثابت لـ GraalVM:

  • صورة موثوقة: تتضمن تطبيقات فئات موثوقة + وكلاء فئات غير موثوقة
  • صورة غير موثوقة: تتضمن تطبيقات فئات غير موثوقة + وكلاء فئات موثوقة
  • يقوم تحليل النقطة تلقائيًا بقص الكود غير القابل للوصول

4. إنشاء تطبيق SGX

  • مكتبة Shim: مكتبة خفيفة الوزن تعترض استدعاءات libc غير المدعومة وتعيد توجيهها إلى وقت التشغيل غير الموثوق
  • إنشاء EDL: إنشاء ملف لغة تعريف الحصن تلقائيًا
  • الربط النهائي: إنشاء تطبيق SGX قابل للتنفيذ

نقاط الابتكار التقني

1. استراتيجية التقسيم على مستوى الفئة

مقارنة بتقسيم على مستوى الطريقة أو البيانات:

  • أكثر توافقًا مع حدس البرمجة الموجهة للكائنات
  • تجنب تحليل تدفق البيانات المعقد
  • حدود التغليف الطبيعية

2. آلية الوكيل الشفافة

  • الحفاظ على نموذج البرمجة الأصلي
  • التعامل التلقائي مع تسلسل/فك تسلسل المعاملات
  • دعم نقل رسوم بيانية كائنات معقدة عبر الحصون

3. تصميم GC الموزع

// مزامنة GC قائمة على المراجع الضعيفة
WeakReference<ProxyObject> weakRef = new WeakReference<>(proxy);
proxyWeakRefs.add(new ProxyWeakRefEntry(weakRef, proxy.getHash()));

// مساعد GC يتحقق بشكل دوري
if (weakRef.get() == null) {
    // تم جمع كائن الوكيل، إخطار الجانب الآخر بتدمير كائن المرآة
    notifyMirrorDestruction(hash);
}

إعداد التجربة

بيئة التجربة

  • الأجهزة: معالج Intel Xeon E3-1270 (3.80 GHz)، 64GB RAM
  • تكوين SGX: 128MB EPC (93.5MB متاح)، أقصى حجم كومة 4GB، مكدس 8MB
  • البرامج: Ubuntu 18.04، SGX SDK v2.11، GraalVM CE v21.0.0
  • خطوط الأساس للمقارنة: SCONE (JVM يعمل داخل الحصن)

مؤشرات التقييم

  • مؤشرات الأداء: وقت تنفيذ التطبيق، زمن الكمون للعمليات
  • تحليل النفقات: نفقات إنشاء كائنات الوكيل، نفقات استدعاء RMI، أداء GC
  • نسبة التسريع: نسبة إلى الخطط غير المقسمة و SCONE

تطبيقات الاختبار

  1. معايير اصطناعية: عمليات مكثفة للمعالج والإدخال/الإخراج
  2. PalDB: متجر مفتاح-قيمة مضمن من LinkedIn
  3. GraphChi: إطار معالجة رسوم بيانية واسعة النطاق (خوارزمية PageRank)
  4. SPECjvm2008: اختبارات Java الدقيقة القياسية

نتائج التجربة

نتائج الأداء الرئيسية

1. تحسن أداء التطبيقات الحقيقية

  • PalDB: تحسن 6.6× مقارنة بـ SCONE (خطة RTWU)، 2.8× (خطة RUTW)
  • GraphChi: تحسن 2.2× مقارنة بـ SCONE
  • SPECjvm2008: تحسن كبير في 5 من 6 اختبارات معيارية (1.38×-2.66×)

2. تحليل نفقات كائنات الوكيل

  • إنشاء كائنات الوكيل أبطأ من الكائنات الملموسة بمقدار 3-4 رتب من حيث الحجم
  • استدعاءات RMI أبطأ من الاستدعاءات المحلية بمقدار 3-4 رتب من حيث الحجم
  • تسلسل المعاملات يزيد النفقات بمقدار 10× (داخل الحصن) إلى 3× (خارج الحصن)

3. تأثير أداء GC

  • GC داخل الحصن أبطأ من خارج الحصن بمقدار رتبة واحدة من حيث الحجم
  • التحقق من اتساق GC: يتم تنظيف كائنات المرآة بشكل صحيح عند تدمير كائنات الوكيل

التجارب الاستئصالية

مقارنة استراتيجيات التقسيم

من خلال اختبارات معيارية اصطناعية لنسب فئات موثوقة مختلفة:

  • عمليات مكثفة للمعالج: نقل المزيد من الفئات خارج الحصن يحسن الأداء بشكل كبير
  • عمليات مكثفة للإدخال/الإخراج: نقل عمليات الإدخال/الإخراج خارج الحصن يحسن الأداء بشكل أكثر وضوحًا

غير مقسم مقابل مقسم مقابل SCONE

في جميع الاختبارات، ترتيب الأداء هو:

  1. التنفيذ الأصلي (بدون SGX) - الأسرع لكن غير آمن
  2. صورة native image مقسمة - توازن بين الأداء والأمان
  3. صورة native image غير مقسمة - أداء متوسطة
  4. SCONE+JVM - الأبطأ لكن التوافقية الأفضل

دراسات الحالة

استراتيجية تقسيم PalDB

@Trusted class DBReader   // حماية عمليات القراءة الحساسة
@Untrusted class DBWriter // نقل عمليات كتابة الإدخال/الإخراج خارج الحصن

تحقق خطة RTWU أداء أفضل لأنها تتجنب تحويلات الحصن المكلفة للكتابة.

استراتيجية تقسيم GraphChi

@Trusted class GraphChiEngine    // حماية منطق الحساب الأساسي
@Untrusted class FastSharder     // عمليات تقسيم الرسم البياني للإدخال/الإخراج

بعد نقل عمليات التقسيم خارج الحصن، تقترب الأداء من الأداء الأصلية.

الأعمال ذات الصلة

حلول الحصن الكامل للتطبيق

  • SCONE و Graphene-SGX و SGX-LKL: توفر توافقية جيدة لكن TCB كبير جدًا
  • Haven: حل تطبيق كامل مبكر

تقسيم خاص بالإطار

  • VC3: تحليل بيانات Hadoop
  • SecureKeeper: امتداد ZooKeeper
  • Opaque: منصة Spark SQL
  • القيود: ينطبق فقط على أطر عمل محددة

حلول التقسيم العام

  • Glamdring: تقسيم تلقائي لـ C/C++، غير قابل للتطبيق على Java
  • Panoply: حل حاويات دقيقة
  • Civet: تقسيم Java لكن يستخدم نظام تشغيل مكتبة كامل
  • Uranus: تعليقات توضيحية على مستوى الطريقة، تتطلب أدوات تابعة لجهات خارجية

الخلاصة والمناقشة

الاستنتاجات الرئيسية

  1. التحقق من الجدوى: استراتيجية التقسيم على مستوى الفئة القائمة على التعليقات التوضيحية عملية وبديهية
  2. المزايا الأداء: التطبيقات المقسمة لها تحسن أداء كبير مقارنة بحلول الحصن الكامل
  3. تقليل TCB: تقليل كبير في قاعدة الكود الموثوق من خلال مكتبة shim بدلاً من نظام تشغيل مكتبة كامل
  4. سهولة التطوير: طريقة التعليقات التوضيحية أكثر بديهية للمطورين

القيود

  1. متطلبات التغليف: افتراض أن جميع الفئات المعلقة مغلفة بشكل صحيح (حقول خاصة)
  2. نفقات RMI: استدعاءات عبر الحصون لا تزال لها نفقات كبيرة، غير مناسبة للسيناريوهات ذات التفاعل المتكرر
  3. اعتماد GraalVM: محدود بنظام بيئة GraalVM
  4. قيود التحليل الثابت: دعم محدود لبعض الميزات الديناميكية

الاتجاهات المستقبلية

  1. استدعاءات بدون تحويل: البحث عن تقنيات لتقليل نفقات RMI المكلفة
  2. دعم عزل متعدد: التوسع إلى بيئات عزل متعددة
  3. تقسيم تلقائي: توصيات تقسيم تلقائية بناءً على التحليل الثابت
  4. دعم بيئات TEE أخرى: التوسع إلى AMD SME و ARM TrustZone

التقييم المتعمق

المزايا

  1. ابتكار قوي: أول اقتراح لاستراتيجية تقسيم تطبيقات Java على مستوى الفئة، التصميم بديهي ومعقول
  2. اكتمال الهندسة: سلسلة أدوات كاملة من التعليقات التوضيحية إلى تطبيق SGX النهائي
  3. أداء ممتازة: عرض تحسن أداء كبير في التطبيقات الحقيقية
  4. قيمة عملية عالية: حل المشكلة الفعلية لنشر تطبيقات Java الآمنة في السحابة

أوجه القصور

  1. النفقات لا تزال كبيرة: نفقات استدعاء RMI لا تزال بمقدار 3-4 رتب من حيث الحجم، مما يحد من السيناريوهات القابلة للتطبيق
  2. شروط الافتراض صارمة: متطلبات تغليف الفئة قد تحد من قابلية تطبيق الكود الموجود
  3. التقييم غير شامل بما فيه الكفاية: نقص التقييم للتطبيقات واسعة النطاق والعاملة لفترات طويلة
  4. تحليل أمني غير كافٍ: تحليل محدود لحماية من التهديدات المتقدمة مثل هجمات القنوات الجانبية

التأثير

  1. المساهمة الأكاديمية: توفير أفكار جديدة لتقسيم تطبيقات اللغات المدارة في بيئات TEE
  2. القيمة العملية: يمكن تطبيقها مباشرة على تعزيز أمان تطبيقات Java السحابية
  3. قابلية التكرار: التزام المؤلفين بفتح المصدر، مما يسهل تكرار البحث والتوسع

السيناريوهات القابلة للتطبيق

  1. خدمات Java السحابية: تطبيقات سحابية تحتاج إلى حماية منطق الأعمال الحساس
  2. منصات تحليل البيانات: أطر عمل تحليل تعالج بيانات حساسة
  3. تطبيقات التكنولوجيا المالية: خدمات مالية تتطلب ضمانات أمان عالية
  4. الحوسبة الحدية للإنترنت من الأشياء: الحساب الآمن في بيئات موارد محدودة

المراجع

تستشهد الورقة بـ 60 مرجعًا ذا صلة، تغطي تقنيات SGX وتطبيقات TEE وأمان Java وتحسينات التجميع وغيرها من المجالات المهمة، مما يوفر أساسًا نظريًا قويًا لهذا البحث.


التقييم الشامل: هذه ورقة بحثية عالية الجودة تحل مشكلة النشر الفعلي لتطبيقات Java في بيئات TEE. التصميم معقول، والتنفيذ كامل، والتجارب شاملة، مع قيمة أكاديمية وعملية ممتازة. على الرغم من وجود مجال للتحسين في نفقات RMI والقابلية للتطبيق، فإنها توفر مرجعًا مهمًا للبحث في المجالات ذات الصلة.