开源软件安全与应对策略探讨--Java 机密计算技术应用实践

简介: 本文主要介绍基于硬件 TEE 的 Java 机密计算安全防护方案。

vcg_VCG211259270554_RF.jpg

(文/阿里云编译器团队)

据统计,90% 以上的应用都在使用第三方软件库,这些软件大部分都是开源的。与此同时,有超过一半的全球 500 强公司都在使用存在漏洞的开源软件。这幅漫画生动的描述了一个大型应用软件的组件架构,它可能建立在一个极其脆弱的开源组件基础之上,这个组件可能是二十年前开发的,且可能已经没有人进行维护了。一旦该组件被发现漏洞并发起攻击,整座应用软件的大厦将轰然倒塌,损失不可估量。

640.png

在日常软件开发中,我们不可避免的需要依赖开源第三方组件,因此要求我们必须认真对待开源软件的潜在安全风险。总体来说,我们需要建立一套完善敏捷的开源软件使用与响应机制。在引入第三方开源组件之前,需要对这些组件进行全面的质量与安全评估,进行漏洞扫描,排除漏洞风险;应用上线后,需要周期性同步漏洞信息,检查是否有新发现的开源组件漏洞报告;一旦发现漏洞,立即升级在线应用,规避漏洞可能引起的攻击,降低在线应用安全风险。建立漏洞快速响应机制是尤其重要的环节,它能最大限度缩短在线应用被漏洞攻击的时间窗口。因此,有必要在应用软件架构设计阶段,充分考虑漏洞响应机制,以应对可能出现的漏洞攻击。

一个比较尴尬的事实是,大部分组织对开源软件的事实态度是: 只求索取,而不贡献。倘若开源软件贡献者长期得不到合理的回报,相信这种活动是不可持续的。只有对开源社区投入适当资源,个人贡献者获得合理的回报,才能促进他们贡献更加优质的开源软件,从源头提升开源软件质量,从而降低漏洞安全风险,形成整个软件生态的良性互动与发展。作为大量使用开源软件的商业性公司,更有责任和义务反馈开源社区。

阿里云基础软件程序语言与编译器团队一直以来受益于开源软件,也积极回馈开源社区。目前为止,本团队在编程语言与编译器领域进行了诸多有益探索与实践。不仅给集团内部业务带来技术红利,同时也积极将这些成果开源,回馈社区。主要内容包括Java虚拟机、编译器、工具与安全,C++协程基础库与LLVM编译器,以及Python&Node.js 等开源贡献

软件本身就具有安全风险属性。一方面,即使经验丰富的程序员,编写的软件也可能存在缺陷,是人就可能犯错;另一方面,不存在某种测试方法可以找出软件中所有潜在的缺陷。加上软件规模越来越大,复杂度呈指数级上升。因此不难推测,我们的应用软件极大概率隐藏着安全漏洞,只是我们暂时不知道它隐藏在哪里。

回顾目前的开源软件漏洞管理机制,不难发现我们的应对模式始终存在滞后性和被动性。假设漏洞是被黑客发现,黑客会偷偷地利用漏洞发起攻击,窃取各种隐私或机密数据,牟取非法利益。大家知道漏洞情报的时候,很可能损失已经发生,这时也只能亡羊补牢了。中间有个攻击时间窗口,是目前的开源软件应用管理机制没办法消除的。

阿里云程序语言与编译器团队提出了一种更加积极的开源软件安全防护实践策略。在介绍该方案之前,让我们先了解下机密计算技术。大家知道数据有三种形态,存储中的数据、传输中的数据和计算中的数据。存储与传输中的数据采用传统加解密技术,能够很好地保证数据安全。但计算中的数据通常是明文的,一旦进程中的依赖组件在运行时发起攻击,可以很容易获取进程内的各种敏感数据,比如私钥和用户敏感信息等。而运行时明文数据恰恰是黑客攻击的主要目标之一。机密计算技术正是为了解决运行时数据安全问题而产生的。

实现机密计算大致可以分为两种技术路线,一种是通过算法实现运行时数据在密态进行计算,比如同态加密或差分隐私计算等,这种方式没有特殊的硬件依赖;另一种是通过芯片提供一个 TEE 可信执行环境,该环境对运行在里面的数据和代码进行特别保护,通过对内存数据进行加密,保证运行时数据的机密性和完整性。在 TEE 外部,攻击者无法恶意窥探和篡改 TEE 内的数据和代码。

本文主要介绍基于硬件 TEE 的 Java 机密计算安全防护方案。首先我们对一个复杂的应用进行功能划分,把涉及到敏感数据和算法的部分抽象成相对独立的功能模块,我们将这个功能模块运行在 TEE 之中。同时确保该功能模块的依赖组件尽量少且质量高,尽量减少该功能模块本身出现漏洞的可能性,降低攻击界面。然后我们将剩下的主功能模块部署在普通执行环境中,这部分业务模块由于涉及到复杂的功能,可能会依赖大量开源软件,发生漏洞并被攻击的可能性也更大。

假设当主业务模块由于漏洞被发起注入攻击时,攻击者试图获取 TEE 内敏感数据,但由于 TEE 的保护,攻击者将无法成功。即便是恶意程序攻破底层组件(内核/hypervisor),试图通过劫持 root 权限获取 TEE 内数据也将不可得,这正是 TEE 可以帮助我们从根本上保证 TEE 数据安全的核心所在。由此可见,通过这种 Partition 的方式,将敏感数据和代码通过 TEE 保护起来,可以有效降低开源组件漏洞所带来的攻击风险,保护敏感数据不被泄漏。

JavaEnclave 是阿里云程序语言与编译器团队研发的一款针对 Java 生态的机密计算编程框架。基于该框架定义的 Host-Enclave Partition 编程模型,可以帮助用户进行高效的 Java 机密计算应用开发,同时提供完善的编译与部署工具链,提升 Java 机密计算开发与构建体验。JavaEnclave 编程框架采用 Java 静态编译技术,将 Enclave 部分的 Java 代码编译成 Native 形式运行在 TEE 环境中。Host 部分按照 Java 传统的编译与部署方式运行,本示意图以阿里云 Dragonwell11 JDK 为例进行说明。

这种静态编译的方式,从语言特性层面增加了 TEE 内业务代码的运行时安全性。静态编译后的 Native 包其逻辑空间是封闭式的,不会动态加载不可预知的 Java 代码;所有的反射调用都需要进行显示配置;只有路径可达的 Java 代码会被最终编译进 Nativ e 包中。这些特性都极大降低了 TEE 内业务的攻击面,进一步提升了 TEE 内业务的安全性。

JavaEnclave 目前已经捐赠给 Apache 社区,成为 Teaclave孵化项目的其中一员,项目名更新为Teaclave Java TEE SDK。希望借助 Apache 社区平台,能够让更多的开发者可以使用 JavaEnclave,从而促进 JavaEnclave 更好地发展。


阿里云程序语言与编译器团队开源项目链接:
(1) Dragonwell8: https://github.com/alibaba/dragonwell8
(2) Dragonwell11: https://github.com/alibaba/dragonwell11
(3) EMT4j: https://github.com/adoptium/emt4j
(4) Jifa: https://github.com/eclipse/jifa


—— 完 ——

加入龙蜥社群


加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。

640 (5).png

相关文章
|
1天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
1天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
1天前
|
Java API
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
|
1天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
1天前
|
IDE Java 开发工具
Java从入门到精通:1.3.1实践编程巩固基础知识
Java从入门到精通:1.3.1实践编程巩固基础知识
|
2天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
18 0
|
2天前
|
Java
Java中的并发编程:理解和应用线程池
【4月更文挑战第23天】在现代的Java应用程序中,性能和资源的有效利用已经成为了一个重要的考量因素。并发编程是提高应用程序性能的关键手段之一,而线程池则是实现高效并发的重要工具。本文将深入探讨Java中的线程池,包括其基本原理、优势、以及如何在实际开发中有效地使用线程池。我们将通过实例和代码片段,帮助读者理解线程池的概念,并学习如何在Java应用中合理地使用线程池。
|
Java 测试技术
Java 中的单元测试和集成测试策略
【4月更文挑战第19天】本文探讨了Java开发中的单元测试和集成测试。单元测试专注于单一类或方法的功能验证,使用测试框架如JUnit,强调独立性、高覆盖率和及时更新测试用例。集成测试则验证模块间交互,通过逐步集成或模拟对象来检测系统整体功能。两者相辅相成,确保软件质量和降低修复成本。
|
7天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
7天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。