Linux 主機弱點掃描發現兩個低風險:「SSH 伺服器 CBC 模式加密已啟用」和「SSH 弱金鑰交換演算法已啟用」,本篇來示範如何解決。
首先先查詢本機作為 SSH 伺服器端支援的加密算法:
如果執行時出現 no hostkeys available -- exiting 錯誤訊息,很可能是因為權限不足,請確認是否有使用 sudo 或是有管理員權限:
也有可能是因為 SSH 伺服器沒有可以使用的主機金鑰(Host Key),可以使用以下指令重新產生:
正常執行應該會列出所有的加密算法:
接下來就是將不需要的加密算法停用,也就是在設定檔中正面表列出允許的算法。
修改 SSH 設定檔:
在檔案中的最後一行加入以下內容,開頭是 Ciphers ,後面接上允許的算法,使用逗號區隔,中間不可以有空格:
儲存檔案後重啟 ssh 服務:
再次檢查允許的算法,就會發現只剩下剛剛正面表列的算法了:
使用指令列出算法:
這裡只要注意 kexalgorithms 即可。
一樣修改 SSH 設定檔:
在檔案中的最後一行加入以下內容,開頭是 KexAlgorithms ,後面接上允許的算法,使用逗號區隔,中間不可以有空格:
儲存檔案後重啟 ssh 服務:
再次檢查允許的算法,沒有 sha1 相關的算法即可:
使用正面表列出來的算法如 aes256-ctr 則可以使用 ssh 連入:
註:請自行替換 ssh 語法,例如使用者名稱, IP 和指定 PORT
在一開始使用以下指令來指定使用 diffie-hellman-group1-sha1 應該會可以連入 ssh ,在設定檔的 KexAlgorithms 中未列出(停用)後則會出現警告訊息,表示不支援此算法:
SSH 伺服器 CBC 模式加密已啟用
要解決這個風險就是將 CBC 加密禁用。首先先查詢本機作為 SSH 伺服器端支援的加密算法:
sudo sshd -T | grep ciphers
如果執行時出現 no hostkeys available -- exiting 錯誤訊息,很可能是因為權限不足,請確認是否有使用 sudo 或是有管理員權限:
sudo sshd -T | grep ciphers
sshd: no hostkeys available -- exiting.
也有可能是因為 SSH 伺服器沒有可以使用的主機金鑰(Host Key),可以使用以下指令重新產生:
sudo ssh-keygen -A
正常執行應該會列出所有的加密算法:
sudo sshd -T | grep ciphers
ciphers chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
接下來就是將不需要的加密算法停用,也就是在設定檔中正面表列出允許的算法。
修改 SSH 設定檔:
sudo vim /etc/ssh/sshd_config
在檔案中的最後一行加入以下內容,開頭是 Ciphers ,後面接上允許的算法,使用逗號區隔,中間不可以有空格:
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
儲存檔案後重啟 ssh 服務:
sudo systemctl restart sshd
再次檢查允許的算法,就會發現只剩下剛剛正面表列的算法了:
sudo sshd -T | grep ciphers
ciphers aes128-ctr,aes192-ctr,aes256-ctr
SSH 弱金鑰交換演算法已啟用
要修正這個低風險一樣是禁用不安全的算法,這裡需要禁用所有 sha1 相關的。使用指令列出算法:
sudo sshd -T | grep kexalgorithms
gssapikexalgorithms gss-group14-sha256-,gss-group16-sha512-,gss-nistp256-sha256-,gss-curve25519-sha256-,gss-group14-sha1-,gss-gex-sha1-
kexalgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,sntrup761x25519-sha512@openssh.com,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
這裡只要注意 kexalgorithms 即可。
一樣修改 SSH 設定檔:
sudo vim /etc/ssh/sshd_config
在檔案中的最後一行加入以下內容,開頭是 KexAlgorithms ,後面接上允許的算法,使用逗號區隔,中間不可以有空格:
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,sntrup761x25519-sha512@openssh.com,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256
儲存檔案後重啟 ssh 服務:
sudo systemctl restart sshd
再次檢查允許的算法,沒有 sha1 相關的算法即可:
sudo sshd -T | grep kexalgorithms
gssapikexalgorithms gss-group14-sha256-,gss-group16-sha512-,gss-nistp256-sha256-,gss-curve25519-sha256-,gss-group14-sha1-,gss-gex-sha1-
kexalgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,sntrup761x25519-sha512@openssh.com,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256
使用 SSH 連線來驗證是否支援加密算法
這裡還有一個方式可以驗證,指定使用的算法連入主機,如果可以連線就代表可以使用此算法。CBC 加密
在一開始使用以下指令來指定使用 aes128-cbc (或其他未禁用的算法) 應該會可以使用 ssh 連入,停用後則會出現警告訊息,表示不支援此算法:
ssh -v -c aes128-cbc root@localhost
使用正面表列出來的算法如 aes256-ctr 則可以使用 ssh 連入:
ssh -v -c aes256-ctr root@localhost
註:請自行替換 ssh 語法,例如使用者名稱, IP 和指定 PORT
SSH 弱金鑰交換演算法 (sha1)
在一開始使用以下指令來指定使用 diffie-hellman-group1-sha1 應該會可以連入 ssh ,在設定檔的 KexAlgorithms 中未列出(停用)後則會出現警告訊息,表示不支援此算法:
ssh -v -oKexAlgorithms=diffie-hellman-group1-sha1 root@localhost
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com