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

40次阅读

共计 2745 个字符,预计需要花费 7 分钟才能阅读完成。

据统计,90% 以上的利用都在应用第三方软件库,这些软件大部分都是开源的。与此同时,有超过一半的寰球 500 强公司都在应用存在破绽的开源软件。这幅漫画活泼的形容了一个大型应用软件的组件架构,它可能建设在一个极其软弱的开源组件根底之上,这个组件可能是二十年前开发的,且可能曾经没有人进行保护了。一旦该组件被发现破绽并发动攻打,整座应用软件的大厦将轰然倒塌,损失不可估量。

在日常软件开发中,咱们不可避免的须要依赖开源第三方组件,因而要求咱们必须认真对待开源软件的潜在平安危险。总体来说,咱们须要建设一套欠缺麻利的开源软件应用与响应机制。在引入第三方开源组件之前,须要对这些组件进行全面的品质与平安评估,进行破绽扫描,排除破绽危险;利用上线后,须要周期性同步破绽信息,查看是否有新发现的开源组件破绽报告;一旦发现破绽,立刻降级在线利用,躲避破绽可能引起的攻打,升高在线利用平安危险。建设破绽疾速响应机制是尤其重要的环节,它能最大限度缩短在线利用被破绽攻打的工夫窗口。因而,有必要在应用软件架构设计阶段,充分考虑破绽响应机制,以应答可能呈现的破绽攻打。

一个比拟难堪的事实是,大部分组织对开源软件的事实态度是: 只求索取,而不奉献。假使开源软件贡献者长期得不到正当的回报,置信这种流动是不可继续的。只有对开源社区投入适当资源,集体贡献者取得正当的回报,能力促成他们奉献更加优质的开源软件,从源头晋升开源软件品质,从而升高破绽平安危险,造成整个软件生态的良性互动与倒退。作为大量应用开源软件的商业性公司,更有责任和任务反馈开源社区。

阿里云根底软件程序语言与编译器团队始终以来受害于开源软件,也踊跃回馈开源社区。目前为止,本团队在编程语言与编译器畛域进行了诸多无益摸索与实际。不仅给团体外部业务带来技术红利,同时也踊跃将这些成绩开源,回馈社区。次要内容包含 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/dr…
(2) Dragonwell11: https://github.com/alibaba/dr…
(3) EMT4j: https://github.com/adoptium/e…
(4) Jifa: https://github.com/eclipse/jifa

文 / 阿里云编译器团队

原文链接
本文为阿里云原创内容,未经容许不得转载。

正文完
 0