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
أدى انتشار لغة البرمجة Java إلى اعتمادها على نطاق واسع في بنية الحوسبة السحابية. ومع ذلك، تتعرض تطبيقات Java التي تعمل في بيئات سحابية غير موثوقة لهجمات امتيازية متنوعة. يخفف ظهور بيئات التنفيذ الموثوقة (TEE) مثل Intel SGX من هذه المشكلة. تحمي بيئات TEE الكود والبيانات داخل حصون آمنة (enclaves) من الوصول إليها بواسطة برامج غير موثوقة بما في ذلك النواة والمراقب الافتراضي. لاستخدام بيئات TEE بكفاءة، يجب على المطورين تقسيم التطبيقات يدويًا إلى أجزاء موثوقة وغير موثوقة لتقليل حجم الأساس الموثوق به (TCB) وتقليل مخاطر الثغرات الأمنية. تقدم هذه الورقة أداة Montsalvat التي توفر طريقة عملية وبديهية قائمة على التعليقات التوضيحية لتقسيم تطبيقات Java الموجهة نحو الحصون الآمنة. توفر Montsalvat آلية تشبه RMI لضمان الاتصال بين الكائنات، بالإضافة إلى جمع القمامة المتسق عبر مكونات التقسيم.
التهديدات الأمنية: تواجه تطبيقات Java في البيئات السحابية غير الموثوقة تهديدات هجمات امتيازية، بما في ذلك الهجمات على مستوى النواة ومستوى المراقب الافتراضي
متطلبات تقليل TCB: عند استخدام بيئات TEE مثل Intel SGX، يجب تقليل الأساس الموثوق به لتقليل سطح الهجوم
تعقيد التقسيم: يتطلب تقسيم تطبيقات Java يدويًا التعامل مع مشاكل معقدة مثل الاتصال بين الكائنات واتساق جمع القمامة
طريقة التقسيم القائمة على التعليقات التوضيحية: تقدم طريقة عملية وبديهية للتعليقات التوضيحية على مستوى الفئة (@Trusted و @Untrusted و @Neutral) لتقسيم تطبيقات Java
آلية RMI: تصميم آلية اتصال كائنات عبر الحصون تشبه RMI، مع تنفيذ استدعاءات الطرق البعيدة الشفافة من خلال كائنات وكيلة
جمع القمامة الموزع: تنفيذ امتداد GC قائم على المراجع الضعيفة، مما يضمن اتساق تدمير الكائنات بين أكوام الذاكرة الموثوقة وغير الموثوقة
تكامل GraalVM: التكامل العميق مع GraalVM native-image، مع الاستفادة من تحسينات التجميع المسبق (AOT)
تحسن الأداء: تحقيق تحسن أداء كبير في التطبيقات الحقيقية (PalDB 6.6×، GraphChi 2.2×)
الإدخال: كود مصدر تطبيق Java مع تعليقات توضيحية أمنية
الإخراج: صور native image مقسمة موثوقة وغير موثوقة، قابلة للنشر في بيئة Intel SGX
القيود: الحفاظ على دلالات التطبيق الأصلية، ضمان اتصال الكائنات واتساق GC
إنشاء فئات وكيلة لكل فئة موثوقة في وقت التشغيل غير الموثوق
إنشاء فئات وكيلة لكل فئة غير موثوقة في وقت التشغيل الموثوق
تحتفظ فئات الوكيل بتوقيعات الطريقة الأصلية، لكن يتم استبدال أجسام الطريقة باستدعاءات عبر الحصون
حقن طرق الترحيل:
// تحويل الطريقة الأصلية إلى طريقة ترحيل
@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);
}
آلية تعيين الكائنات:
تخصيص قيمة تجزئة فريدة لكل كائن وكيل
الحفاظ على سجل كائنات الوكيل والمرآة
تنفيذ مراجع الكائنات عبر الحصون من خلال قيم التجزئة
// مزامنة GC قائمة على المراجع الضعيفة
WeakReference<ProxyObject> weakRef = new WeakReference<>(proxy);
proxyWeakRefs.add(new ProxyWeakRefEntry(weakRef, proxy.getHash()));
// مساعد GC يتحقق بشكل دوري
if (weakRef.get() == null) {
// تم جمع كائن الوكيل، إخطار الجانب الآخر بتدمير كائن المرآة
notifyMirrorDestruction(hash);
}
تستشهد الورقة بـ 60 مرجعًا ذا صلة، تغطي تقنيات SGX وتطبيقات TEE وأمان Java وتحسينات التجميع وغيرها من المجالات المهمة، مما يوفر أساسًا نظريًا قويًا لهذا البحث.
التقييم الشامل: هذه ورقة بحثية عالية الجودة تحل مشكلة النشر الفعلي لتطبيقات Java في بيئات TEE. التصميم معقول، والتنفيذ كامل، والتجارب شاملة، مع قيمة أكاديمية وعملية ممتازة. على الرغم من وجود مجال للتحسين في نفقات RMI والقابلية للتطبيق، فإنها توفر مرجعًا مهمًا للبحث في المجالات ذات الصلة.