01.17 談談.ssh目錄的安全性

熟悉ssh的同學應該都知道.ssh目錄,這個目錄用來保存ssh一些客戶端一些ssh配置、公鑰,公鑰認證的文件。~/.ssh的是一個非常重要的目錄,也是安全隱患點,處理不好該目錄安全設置,對導致嚴重安全問題,讓主機被輕而易舉的被人黑掉。據蟲蟲所知,一些木馬、自動挖礦腳本就藉助該目錄信息自動擴散傳播。本文就給大家介紹~/.ssh/的安全性。


談談.ssh目錄的安全性


.ssh目錄介紹

目錄~/.ssh/是用來存儲SSH客戶端和服務器一些配置文件的位置,這些文件包括:

authorized_keys,SSH服務器默認的公鑰認證文件,服務器通過該文件配置可以使用該用戶認證的用戶證書。SSH證書認證就是客戶端生成證書(私鑰和公鑰對),將公鑰複製到該文件,每行一個證書。複製公鑰時候可以使用ssh-copy-id命令或者直接手動配置authorized_keys文件即可。

id_*,包括id_rsa,id_dsa,id_ed25519,id_ecdsa等是保存在該用戶下的證書私鑰,用戶通過SSH證書認證時候會自動搜索這些私鑰進行認證。

id_*.pub 上述私鑰對應的公鑰,以.pub為後綴。

known_hosts 保存該主機連接過的遠程服務器及其對應的主機公鑰(用來對主機認證),再次連接到遠程服務器如果公鑰相同,則直接連接認證。如果沒有,或者遠程服務器有變化,會提示:

談談.ssh目錄的安全性

需要輸入yes,確認才行。

config 文件用來配置本地ssh連接的一些項目,比如配置主機別名的,可以解決同一主機或者多臺主機使用多個證書,就可以用config配置,比如下面的配置:

談談.ssh目錄的安全性

Host github.com

HostName github.com

User git

IdentityFile ~/.ssh/git/github_id_rsa


Host gitee.com

HostName gitee.com

User git

IdentityFile ~/.ssh/git/gitee_id_rsa


Host chongchong.com

HostName 112.34.6.71

Port 2222

User chongchong

IdentityFile ~/.ssh/id_ecdsa

ForwardX11 yes

Compression yes

TCPKeepAlive yes

前兩個Host配置對github和馬雲使用不同的證書,後面一個Host對一臺主機配置使用非默認的ssh端口、非默認當前用戶以及一些啟用一些ssh配置項目。關於ssh config的配置蟲蟲之前的文章《Linux SSH實用技巧幾則》做過介紹,大家可以參考。

.ssh目錄安全性問題

主要的安全隱患,還是由於對.ssh目錄的安全性認識不夠或者由於管理疏忽,導致該目錄的權限設置有問題。或者將目錄暴露在Web目錄或者git公開倉庫。比如有些Web服務器中的www用戶可以直接訪問該目錄。由於直接將用戶目錄設置成了Web根目錄,而.ssh目錄又是用戶目錄的子目錄所以可以直接訪問。

現在,絕大多數的管理員和開發都知道使用密碼登陸服務是不安全的,因此都會用證書登陸。如果。ssh目錄洩露意味著:

可以直接獲得/.ssh/id_rsa等私鑰;

可以直接知道authorized_keys、known_hosts和config的內容。

證書洩露

id_*文件是最重要級別的個人文件,該文件不允許洩露給第三人,根據不同的證書類型,私鑰文件名可能為了id_dsa(DSA證書已經不是安全,請避免使用),id_rsa(RSA證書,請保證2048位以上),id_ecdsa和id_ed25519,一般來說私鑰文件都會PRIVATE KEY的註釋行,比如:

談談.ssh目錄的安全性


為了避免證書洩露後也能保持安全,建議私鑰都設置證書密碼:

談談.ssh目錄的安全性

以下密鑰沒有密碼,ssh-keygen -y -f id_ecdsa可以直接顯示公鑰

ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBmGXiNwudm3JaGNVERkl013/9OQVR0tfgvcmapONuecVl4EXNE4w0VyZA1ZD2s3hj02x/Y294IwfhExiaDhTyY=

如果設置密碼保護,則會提示輸入密碼:

Enter passphrase:

ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBmGXiNwudm3JaGNVERkl013/9OQVR0tfgvcmapONuecVl4EXNE4w0VyZA1ZD2s3hj02x/Y294IwfhExiaDhTyY=

authorized_keys洩露

就算是私鑰洩露來,如果沒有其他信息,黑客也不知道私鑰能用來連接到哪裡,這就是為啥要把關鍵主機、一般主機以及用於管理git的證書都分別獨立使用的,防止私鑰洩露後導致的問題。但是黑客可以藉助.ssh目錄下的其他文件來獲取更多的信息來精準的利用竊取的私鑰。其中有個文件authorized_keys,前面我提到了,是用來配置可以連接到該主機用戶下的所有的證書公鑰。文件一行一個公鑰,公鑰以ssh-rsa,ssh-dss,ssh-ed25519,ssh-ecdsa開頭,表示不同的證書類型。如果黑客獲取了這些密鑰,可以通過對比證書方式,驗證對應私鑰,然後可以利用私鑰最終攻陷主機。如果攻擊者成功,將會有完整SSH訪問權限,能夠運行任何命令。

known_hosts洩露

如果〜/.ssh /known_hosts洩露,則導致的危險性更大,因為該文件記錄了,該主機私鑰可以連接的遠程主機列表。

根據該文件中的主機名或IP地址,可以直接被用來私鑰來嘗試登陸。很多木馬傳播方式就是利用自動解析該文件獲取IP或者主機自動嘗試登陸。

談談.ssh目錄的安全性

上面是一個挖礦木馬自動傳播部分腳本,從known_hosts獲取傳播目標:

cat /root/.ssh/known_hosts|grep -v ,|awk '{print $1}' > /tmp/.h

cat /root/.ssh/known_hosts|grep ,|awk -F, '{print $1}' >> /tmp/.h

cat /root/.ssh/known_hosts|grep ,|awk -F, '{print $1}' >> /tmp/.h

為了避免這種攻擊,可以設置ssh配置(/etc/ssh/ssh_config)的HashKnownHosts 為yes,則會對相關信息做哈希處理。則該文件條目就會被加密,結果如下:

|1|wlPQdgFoYgYsqG6ae20lYopRLPI=|p61txQKmb+Hn49dsD+v0CNuEKd4= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzhZmG33G/3FG3vm0eDdyX1u++i0ceakIkJNgDxVVy6MpodRrpwqXXQj8/OGT

Iwb4YpRXGuL3236IkGugI9GUgFd00UNjMSMt3pqob4hKsEzADl7YfZeV1X7X0b617nze0otdO7TwDMlQ/5KWUwdUoxg50VfpieTzcOpUN/G4J159iKZ41iSF7o4vI+fYisX8y5rJ1BRbt1HO0Gi7w9HZ8tN0B

0glM6JKyoE8TjvbZAeD9PWIWp9JpG1KTY4yXTV1B1CyvtxjRqTMm8mcb+gSGGvv6mSlWCNxJnlXhp91F2GtmgzKsE3FjcMUfkn3c0+P0bKaR8L3GtbyaXJmtDX4xQ==

其中第二部分wlPQdgFoYgYsqG6ae20lYopRLPI=為hostname加密。

第三部分p61txQKmb+Hn49dsD+v0CNuEKd4=為加密的IP地址。

加密的方法是HMAC-SHA1,而且我們知道IP地址是有限的:四段,每段1-255(2^32)可以群舉,所以可以通過暴力攻擊,計算哈希,對比哈希。有興趣的同學可以嘗試下。

config洩露

SSH客戶端的配置文件通常包含hostname,別名,用戶名,ssh端口,證書位置等信息。如果該文件暴露,可為攻擊者提供更多信息,其危害類似known_hosts。

安全措施

要避免由於.ssh目錄導致的安全問題,首先要設置目錄和文件的權限。比如.ssh目錄要設置為700,所有私鑰文件和config文件要設置為600。

其次,避免將.ssh目錄暴露到Web目錄。

使用代理轉發或ProxyJump。

在Web服務器的配置中添加特殊規則,阻止對/.ssh/目錄的訪問。

最後,避免.ssh配置文件,證書文件暴露到git公共倉庫(github)等。


分享到:


相關文章: