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 защищает код и данные в безопасных анклавах от доступа ненадежного программного обеспечения, включая ядро и гипервизор. Для эффективного использования TEE разработчики должны вручную разделить приложение на доверенные и недоверенные части, чтобы уменьшить размер доверенной вычислительной базы (TCB) и минимизировать риск уязвимостей безопасности. В данной статье предлагается инструмент Montsalvat, который обеспечивает практичный и интуитивный метод разделения на основе аннотаций для приложений Java, ориентированных на безопасные анклавы. Montsalvat предоставляет механизм, подобный RMI, для обеспечения связи между объектами, а также согласованную сборку мусора между разделенными компонентами.
Угрозы безопасности: приложения Java в ненадежных облачных средах сталкиваются с угрозами привилегированных атак, включая атаки на уровне ядра и гипервизора
Требование минимизации TCB: при использовании TEE, таких как Intel SGX, необходимо минимизировать доверенную вычислительную базу для снижения поверхности атаки
Сложность разделения: ручное разделение приложений Java требует обработки сложных проблем, таких как связь между объектами и согласованность сборки мусора
Решения с полным приложением: SCONE, Graphene-SGX и другие размещают все приложение (включая JVM) в анклаве, что приводит к чрезмерно большому TCB (миллионы строк кода)
Решения для конкретных фреймворков: VC3, SecureKeeper и другие применимы только к определенным фреймворкам и не универсальны
Существующие решения для разделения Java:
Civet требует полной LibOS, TCB остается большим
Uranus требует инструментов третьих сторон для определения доверенного раздела, требуя значительного вмешательства разработчика
Метод разделения на основе аннотаций: предложен практичный и интуитивный способ аннотирования на уровне класса (@Trusted, @Untrusted, @Neutral) для разделения приложений Java
Механизм RMI: разработан механизм связи объектов между анклавами, подобный RMI, реализующий прозрачные удаленные вызовы методов через прокси-объекты
Распределенная сборка мусора: реализовано расширение GC на основе слабых ссылок, обеспечивающее согласованность уничтожения объектов между доверенной и недоверенной кучей
Интеграция с GraalVM: глубокая интеграция с GraalVM native-image, использующая AOT-компиляцию для оптимизации производительности
Входные данные: исходный код приложения Java с аннотациями безопасности
Выходные данные: разделенные доверенный и недоверенный native image, готовые к развертыванию в среде Intel SGX
Ограничения: сохранение исходной семантики приложения, обеспечение связи объектов и согласованности GC
Использование фреймворка 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);
}
// Синхронизация GC на основе слабых ссылок
WeakReference<ProxyObject> weakRef = new WeakReference<>(proxy);
proxyWeakRefs.add(new ProxyWeakRefEntry(weakRef, proxy.getHash()));
// Периодическая проверка GC Helper
if (weakRef.get() == null) {
// Прокси-объект был собран, уведомляем другую сторону об уничтожении зеркального объекта
notifyMirrorDestruction(hash);
}
Проверка осуществимости: метод разделения на основе аннотаций на уровне класса осуществим и интуитивен
Преимущества производительности: разделенные приложения показывают значительное улучшение производительности по сравнению с полными решениями для анклава
Снижение TCB: значительное снижение доверенной кодовой базы благодаря использованию shim-библиотеки вместо LibOS
Удобство разработки: способ аннотирования более интуитивен для разработчиков
Статья цитирует 60 связанных работ, охватывающих технологию SGX, приложения TEE, безопасность Java, оптимизацию компиляции и другие важные области, обеспечивая прочную теоретическую основу для данного исследования.
Общая оценка: это высококачественная системная исследовательская работа, решающая практическую проблему развертывания приложений Java в среде TEE. Метод хорошо разработан, реализация полна, эксперименты тщательны, обладает высокой академической ценностью и практической значимостью. Несмотря на возможности улучшения в отношении затрат RMI и применимости, работа предоставляет важный справочный материал для смежных исследований.