2017-08-11 93 views
3

我需要確定用戶的OpenJDK版本是否容易受到特定安全漏洞的影響。例如,在OpenJDK 8u77中發現了CVE-2016-0695,如April 2016 Critical Patch Update中所示。理想情況下,檢測用戶的OpenJDK版本是否容易受到攻擊,就像檢查它是否爲<= 8u77> 8u77並相應地將其標記爲易受攻擊一樣簡單(假設所有以前的版本也易受攻擊且修復程序在下一個版本中得到應用)。不過,這張照片被手動補丁弄糊塗了。檢測OpenJDK的修補版本

如果我理解正確,2016年4月的補丁將自動捆綁到OpenJDK8的下一個版本(本例中爲8u91),但也可用於手動應用。後者可能會成爲一種有吸引力的選擇,以避免在修補安全漏洞時保留Java版本的風險規避用戶。如果用戶手動將修補程序應用於他們的8u77安裝,有什麼方法可以檢測到這種情況嗎?例如,java -version報告的版本號是否更改?還是沒有跡象表明補丁已經被應用?

+0

您是否嘗試過應用修補程序並測試版本字符串? – hardillb

+0

我會,但你需要一個Oracle支持合同來訪問那些(除非他們在其他地方可用?)。 – sevko

+0

@ alex-poole,因爲安全補丁似乎由Oracle發佈/管理並通過他們的「opatch」實用程序進行應用,所以我包含了[tag:oracle]標記,所以我認爲Oracle用戶可以權衡。 ? – sevko

回答

3

如果OpenJDK內部版本來自供應商,供應商可能會發布安全信息。例如,這裏是CVE-2016-0695 security information from Debian。根據某些供應商特定的版本控制方案,此信息通常包含第一個固定軟件包版本。

但是,一般來說,您需要獲取該OpenJDK構建的源代碼,並在需要修復時查看它們。

要找到與特定CVE ID(例如CVE-2016-0695)相對應的補丁程序,在大多數情況下,最簡單的方法是轉至Red Hat Bugzilla跟蹤器(此處爲the flaw bug for CVE-2016-0695),並記下內部Oracle bug數在這裏列出,8138593。然後,你需要檢查相應的OpenJDK的子樹,在這種情況下,爲jdk組件:

hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/jdk 

,並查看歷史記錄相應的承諾,基於Oracle的bug數(8138593):

changeset: 11581:594e8dca337c 
user:  igerasim 
date:  Thu Dec 24 08:42:10 2015 +0300 
summary:  8138593: Make DSA more fair 

提交本身不包含CVE ID(在編寫修訂時通常不可用,所以這是可以理解的),因此需要通過Red Hat錯誤跟蹤器繞行。 (我還沒有看到從Oracle CVE-ID至錯誤號碼映射)。

您可以使用其他的Mercurial命令查看補丁:

hg export 594e8dca337c 

一旦你的補丁,它是一個審查源代碼以檢查它是否已被應用。如果由於某些原因無法獲得源代碼,對於jdk的更改,通常使用javap -c反彙編相關類是足夠的。對於本地代碼,您需要一個不同的反彙編程序(例如objdump -dr)。

+2

要進一步添加到此。應用補丁不會自動更改內部版本號。內部編號是OpenJDK構建過程的工件,其中有許多標誌可在配置階段設置。 –

1

OpenJDK JDK 8更新項目提供源代碼,而不是構建或二進制補丁。每在http://openjdk.java.net/projects/jdk8u/qanda.html

該項目的源代碼的安全補丁將q & A將在JDK四周,他們發佈 在產品從Oracle

同時8更新項目可以提供

它們可用於整合到項目的Mercurial森林中。這些源代碼補丁分別提供,並由用戶手動應用於其他版本,這些源代碼補丁是而不是。一般來說,如果您需要了解是否在第三方構建中應用了特定更改,則需要獲取並比較上游和第三方構建的源代碼和/或其提交歷史記錄。獲取源代碼,提交歷史記錄,修補策略,修補程序版本控制和修補程序時間的機制可能會因第三方與第三方不同而有所不同。

Dalibor主題Java Platform Group @ Oracle的主要產品經理

+0

我的印象是,Oracle提供的二進制補丁可以應用於像opatch這樣的工具。那是不正確的?如果是這樣,那麼結論是修補程序只存在於源代碼形式中,所以我只需要擔心它們在JDK維護者級別(而不是在最終用戶級別)應用,因爲他們很少從自己的JDK構建自己的JDK來源),對嗎? – sevko

+0

由於Oracle不通過OpenJDK社區爲各個OpenJDK 8更新提供可執行的二進制文件,因此沒有實際的二進制文件需要修補。 Dalibor主題Java Platform Group @ Oracle主要產品經理 –