更高水準的供應鏈安全實踐:Alibaba Dragonwell 及其 SLSA 2 級認證

01 前言

計算機科學史上湧了 C/C++、Java、JavaScript、Ruby、Python、Perl 等多種編程語言。每一種語言都有其擅長的領域,其中Java語言憑藉其面向對象、自動內存管理、多線程性能優越等優勢持續處於浪潮之巔。目前市場上存在着大量質量不錯 OpenJDK 的衍生版本可供用戶選擇。它們或者性能卓越,或者針對某些場景做出了優化。但 JDK 作爲基礎軟件,歸根結底軟件的可信任和可用性是最我們最基礎的追求。

02 Alibaba Dragonwell

Alibaba Dragonwell,一款免費的、生產就緒型的 OpenJDK 發行版。阿里巴巴提供長期支持,包括性能增強和安全修復。不同於以往的 OpenJDK。Alibaba Dragonwell 有其特有的五大優勢:

2.1 安全與穩定

Alibaba Dragonwell 與 OpenJDK 社區保持緊密合作,始終保持對社區工作的跟蹤,及時同步上游更新,以保證 Java 應用的安全和穩定。

2.2 性能與效率

Alibaba Dragonwell 的前身是阿里巴巴內部使用的 AJDK。AJDK 作爲阿里巴巴 Java 應用的基石,支撐了阿里幾乎所有的 Java 業務,積累了大量業務場景下驗證過的新技術,這些新技術極大得提高了阿里巴巴Java業務的性能和故障排查效率。AJDK 創新技術,會逐步貢獻到 Dragonwell 沉澱。

2.3 Java SE 標準兼容

Alibaba Dragonwell Standard Edition 完全遵循 Java SE 標準。

2.4 特色功能

Alibaba Dragonwell Extended Edition還具備諸多特色功能,例如 JWarmup、ElasticHeap 等等。這些特性在阿里巴巴內部得到了廣泛應用,解決了很多生產實踐中的痛點,爲阿里巴巴 Java 業務的穩定運行立下了汗馬功勞,可以說是 Alibaba Dragonwell 的獨門武器。

2.5 新技術的快速採用

基於阿里工程實踐,Alibaba Dragonwell 會選擇移植高版本 Java 的重要功能,這些移植功能已經在阿里內部被大規模部署,用戶都可以免費使用,而不用等 OpenJDK 下一個 LTS 版。

隨着 Alibaba Dragonwell 的迭代,越來越多的新特性將會被開源。隨着使用 Alibaba Dragonwell 的 Java 應用日益增多,在源碼和構建工程均開源的情況下,我們如何保證用戶所使用的 Alibaba Dragonwell 確實是出自阿里雲編譯器團隊?如何保證我們的 JDK 在發佈構建過程中沒有被篡改呢?

03 我們爲什麼要做供應鏈安全

軟件供應鏈是在整個軟件開發生命週期 (SDLC) 中涉及應用程序,或是任何方式在其他開發中發揮作用的任何事和物。而 JDK 在 Java 軟件的供應鏈中毫無疑問佔據了核心地位。JDK 是 Java 軟件開發的基礎,它提供了軟件運行環境、調試和編譯的工具以及豐富的 API。如此核心的工件,如果不能保證他的來源可靠,一旦遭到惡意者的篡改並加以傳播,嚴重的後果可想而知,因此供應鏈安全勢在必行!

說起軟件供應鏈安全,首先想到的便是當下較爲火熱的軟件供應鏈安全標準 SLSA。SLSA 是一個標準和控制清單的安全框架,用於防止篡改、提高完整性以及保護項目、業務或企業中的包和基礎設施。藉此軟件生產商使其軟件更安全,消費者可以根據軟件包的安全狀況做出選擇。其旨在爲開發人員和企業提供行業標準、公認且商定的保護和合規級別,任何人都可以採用和使用。用戶可以以此來要求所依賴的軟件是特定的 SLSA 級別,企業也可以此作爲指導原則來加強內部供應鏈。

我們之所以選擇參考 SLSA 來指導我們加強供應鏈,主要因爲它有兩點重要的原則:

  • 軟件供應鏈中任何軟件工件只有在被“受信任的人”的明確審查和批准之後才能進行修改。
  • 軟件工件可以追溯到原始的來源和依賴項。

04 我們是如何做的

最好的合作伙伴之一 Eclipse Adoptium

阿里雲於 2020 年加入 Eclipse Adoptium 社區,是 Eclipse Adoptium 工作組的戰略基石成員,參與 Eclipse Adoptium 社區治理,爲 Java Ecosystem 提供完全兼容的、基於 OpenJDK 的高質量 JDK 發行版。Alibaba Dragonwell 現有的發佈工程大部分都基於 Adoptium 進行了適配和小幅度的開發。當然,我們和社區一直都保持着緊密的合作,對於較爲通用的優化和 Bug 修復我們也都貢獻給了社區。

提升 SLSA 的實踐

Alibaba Dragonwell 已經達到了SLSA v0.1 specification 所描述的 2 級要求。近年來,我們致力於參與 Adoptium 社區的建設,基於 Adoptium 社區開源的設施,我們進行了一定量的改動和適配,最終得以實現 Alibaba Dragonwell 的安全等級提升。發佈流程概況如下圖所示。

SLSA 1 級

等級 1 意味着我們的構建必須完全腳本化/自動化並生成出處。我們在發佈版本中自動生成二進制文件、SBOM(軟件材料清單)文件和校驗文件。以下是等級 1 的達成條件:

  • 構建 - 腳本化的構建

所有構建步驟必須被定義在類似於“build script”的地方。如果有需要手動執行的地方,那隻能是調用構建腳本。我們把 pipeline 流程都完整的定義在了 ci-jenkins-pipelins,下游的構建工程被定義在了 openjdk-build。我們發佈期間需要做的只有填寫對應的參數和觸發工程,然後所有所需的文件都會生成。

  • 出處 - 可用

軟件出處需以消費者接受的格式提供給消費者,且格式應該是符合 SLSA 規定的。但如果有另一種格式,生產者和消費者都同意並且認爲它能滿足所有其他要求,方纔能使用。

我們發佈構建會以 OWASP CycloneDX 格式生成 SBOM 文件,該文件包含了全部的構建信息,包括環境、組件信息、構建指令和參數等。

SLSA 2 級

等級 2 需要我們進行版本管理,以及創建生成經過身份驗證的出處的託管構建服務。我們通過 Github 管理我們的源碼和版本標籤,發佈期間在 jenkins 實例上自動對發佈產物進行了簽名。以下是等級 2 的達成條件:

  • 源碼 - 版本管理

這要求源碼的每筆修改都應在版本控制系統中進行跟蹤,包括記錄更改歷史記錄以及無限期引用此特定的、不可變的提交的方法。

我們在 Github 管理源碼,例如 Dragonwell 8。源碼中的每一筆提交都必須滿足如下的提交格式,否則會被 CI 測試攔截。提交的代碼會經過仔細的審查和具體的 CI 測試,通過審查和驗證之後,每筆提交都會被記錄在歷史記錄中。通過歷史記錄我們能獲取到對應的 Issue 和 Pull Request 地址。每次發佈的時候,我們都會對發佈版本創建標籤,標籤會包含版本號和 dragonwell 版本(extended/standard)。

[<tag>] <One-line description of the patch>
Summary: <detailed description of the change>
Test Plan: <how this patch has been tested>
Reviewed-by: <Github IDs of reviewers>
Issue: <full URL or #github_tag>
  • 構建 - 構建服務

所有的構建都應該以服務的形式,而不是在私人的工作目錄下進行。我們在我們的 Jenkins dragonwell-jenkins 上構建相關文件。所有的文件都會通過 Jenkins 工程上傳 Github、阿里雲 OSS,並且會自動生成相應的容器鏡像,發佈在阿里雲 ACR 倉庫和 DockerHub 倉庫。另外,standard 版本還將會發布在 Adoptium Marketplace。

  • 出處 - 身份認證

消費者可以驗證出處的真實性和完整性。這應該通過來自私鑰的數字簽名來進行,只能由生成出處的服務訪問。GPG 密鑰存儲在阿里巴巴編譯器團隊的 jenkins 實例上,發佈時我們會使用該密鑰進行簽名,用戶也可通過我們的驗證工程 validate-signature,驗證簽名是否屬於我們團隊。

  • 出處 - 服務生成

我們的參數都在工程構建前進行了設置,匿名用戶無執行權限,因而我們的構建不會被注入或者更改不安全的內容。

我們的 SBOM 文件和驗證文件由構建自動生成,GPG 的密鑰存儲在 jenkins 實例上,該密鑰不對外公開。因此,我們的構建服務是安全可控的。

05 未來展望

我們這就結束了嗎?很顯然這並不是,現在只是 Alibaba Dragonwell 邁向更高級別SLSA的開始。在過去的幾年,我們跟 Adoptium 社區有非常緊密的合作。未來我們也將會攜手 Adoptium 社區繼續努力,提升 Alibaba Dragonwell 的產品質量和合規等級。

相關鏈接:

1. SLSA v0.1 specification:

http://slsa.dev/spec/v0.1/levels

2. ci-jenkins-pipelins:

https://github.com/dragonwell-releng/ci-jenkins-pipelines

3. openjdk-build:

https://github.com/dragonwell-releng/openjdk-build

4. OWASP CycloneDX 格式:

https://owasp.org/www-project-cyclonedx

5. dragonwell 8:

https://github.com/alibaba/dragonwell8

6. dragonwell-jenkins:http://ci.dragonwell-jdk.io/

7. DockerHub 倉庫:https://hub.docker.com/r/alibabadragonwell/dragonwell/tags

8. Adoptium Marketplace:https://adoptium.net/marketplace/

9. validate-signature:

http://ci.dragonwell-jdk.io/job/build-scripts/job/release/job/validate-signature/build

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章