Diffie-Hellman Keys 小於1024問題研究與整理(CVE-2015–4000解決)

Diffie-Hellman Keys 小於1024問題研究與整理(CVE-2015–4000解決)

ZONGRU Li
7 min readApr 19, 2023

對應到dockeriojenkinslts要改JVM設定要用

"JAVA_OPTS"或"JENKINS_JAVA_OPTS"

特別對於JenkinsController的設定要用後者:

LINK

有找到一篇Sonatype的分析文章(LINK),整理的滿好的

可以透過nmap工具來檢測

#安裝nmap:
sudo yum install nmap -y

#範例檢查(需要nmap版本7以上)8443 PORT:
nmap --script ssl-enum-ciphers -p 8443 192.168.2.73

會有類似以下輸出各種TLS版本的(參考LINK)資訊

如上主要就是會有以下這句:

Key exchange (dh 1024) of lower strength than certificate key

另外還有爬到這篇(LINK)有提到可以用openssl工具檢測

#透過openssl工具檢測:
openssl s_client -connect <host>:<port> -msg
#理論上有用到有問題低於1024的DH會有下面圖中的資訊可以對照

#另外java.security若改了一堆設定沒有作用,可能是因為這行是true導致:
security.overridePropertiesFile=true
#上述這行要改成false才能讓其他生效
LINK

其他進階nmap掃多台等應用可以參考(LINK)

#掃多台範例:
nmap 192.192.0.*
#等同:
nmap 192.192.0.0/24

#或把ip或hostname清單檔案target.txt做掃描:
nmap -iL target.txt

#其他還有很多可以上連結範例

另外也有其他進階用法掃使用那些TLS版本腳本參考LINK

另外有很多Web的SSL設定Cipher相關參考可以看Mozilla網站(LINK)

線上協助掃描SSL弱點的網站Qualys(LINK)

下面重頭戲,我自建一個httpsjenkins

#運行指令:
sudo podman run -p 8080:8080 -p 8443:8443 -p 50000:50000 -d -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-https-ver

並開通自己打自己8443

#執行以下:
nmap --script ssl-enum-ciphers -p 8443 35.78.178.188

另外也可以用openssl來看,但是訊息太長,我導入檔案來看

#執行
openssl s_client -connect 35.78.178.188:8443 -msg > check.txt

不過後來沒找到

#執行
openssl s_client -connect 35.78.178.188:8443 -cipher "EDH" | grep "Server Temp Key"
變成只顯示X25519,而不是DH

接著嘗試加入

#執行(多增加JENKINS_JAVA_OPTS設定-Djdk.tls.ephemeralDHKeySize=2048):
sudo podman stop {前一個容器}
sudo podman run -p 8080:8080 -p 8443:8443 -p 50000:50000 --env JENKINS_JAVA_OPTS=-Djdk.tls.ephemeralDHKeySize=2048 -d -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-https-ver

再次透過nmap檢測

#執行
nmap --script ssl-enum-ciphers -p 8443 35.78.178.188
看起來沒有1024了!!!!

接著為了驗證,我嘗試改用JAVA_OPS來給

#執行(驗證改用JAVA_OPTS來設定-Djdk.tls.ephemeralDHKeySize=2048是不是就有問題!?):
sudo podman stop $(sudo podman ps -q)
sudo podman run -p 8080:8080 -p 8443:8443 -p 50000:50000 --env JAVA_OPTS=-Djdk.tls.ephemeralDHKeySize=2048 -d -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts-https-ver
看起來一樣是可以解決問題的!

其對應的serviced的設置位置是要在:

#執行以下確認:
sudo podman generate systemd --new --name {上面容器名稱serene_blackburn}

然後觀察容器內是否真的載入ephemeralDHKeySize設定

#在容器內看env查看JAVA_HOME位置或看WEB:
env

#find指令查找設定檔java.security:
find /opt/java/openjdk/ -name "java.security"

#看看設定檔是否調整:
cat /opt/java/openjdk/conf/security/java.security |grep ephemeralDHKeySize

(可能是因為security.overridePropertiesFile=true)

#實際看到JVM有確實載入ephemeralDHKeySize設定:
jps -lvm

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet