1. 程式人生 > >記錄一次大規模linux系統root密碼撞庫的經歷

記錄一次大規模linux系統root密碼撞庫的經歷

在某公司做了一個專案,查詢公司幾十萬臺主機的root密碼是否是弱密碼。

該過程涉及到任務下發,資料處理和上報等過程,這裡不介紹其他模組,只介紹收集部分。

一、怎麼判斷linux主機密碼是否是弱密碼

首先linux下面的密碼儲存在passwd和shadow檔案中,其中passwd檔案儲存賬戶名,shadow檔案儲存密碼hash值,只有root許可權才能看到shadow檔案內容

然後linux下密碼hash格式如下:

$6$wYvk1x5b$YmSYE85080W5okRftVVJgxcmT/qRaJK4e07UkxhnX4gtNy3/hwFPEbpJ9P1G4qqMnWk0eaxuMfoLtnFsfm5HX1

其中黃色部分代表加密方式:

(1)如果密碼不是以$開頭,則密碼是以EDS加密,文字全部為密文(暫時沒有見到)

(2)如果密碼以$1開頭,表示使用MD5加密,加密後是22個字元

(3)如果密碼以$2a開頭,表示使用Blowfish加密(暫時沒有見到)

(4)如果密碼以$5開頭,表示使用SHA256加密,加密後是43個字元

(5)如果密碼以$6開頭,表示使用SHA512加密,加密後是86個字元

綠色部分為使用以$開頭的加密方式加密時使用的salt

藍色標記部分為密碼加密後的密文

根據以上規則提取出使用的加密方式,將弱密碼庫中的密碼使用對應的加密方式加密,然後對比看是否相同,若有相同則可判定該密碼為弱密碼。

二、怎麼收集弱密碼

提取主機的密碼有如下兩種方案:(1)將幾十萬臺主機的密碼hash值全部收集到server端,然後再進行撞庫判斷;(2)將弱密碼庫下發到主機端,在主機端進行撞庫。

首先第一個方案的好處是,收集和計算很方便,壞處是,將大規模的密碼收集到一個地方是非常危險的操作。

第二個方案的好處是,除去了弱密碼聚集在一處的風險,壞處是將弱密碼庫下發在主機端進行計算不方便,而且下發資料量有點大。

我們最終選擇第二個方案,因為我們認為主機密碼的安全級別比較高,而弱密碼庫在公司內部不是很機密。雖然如此,我們在下發弱密碼庫的時候還是將弱密碼庫進行加密處理,在主機端再進行解密判斷,這個過程中,弱密碼庫中的密碼沒有落地,在主機記憶體中完成判斷後刪除,在一定程度上保證了弱密碼庫的安全。

三、大規模主機的相容性

一般資料處理採用python進行處理,但是基於幾十萬臺主機的情況下,Python的版本很可能不一致,比如python的2.和3.版本就不相容,所以在大規模主機上執行Python程式碼時需要先檢查Python的版本,如果版本統一,則可以使用Python,如果版本不統一或者不相容的情況下,則需要考慮其他相容性好的語言,比如,我是用的是shell語言。

四、執行時出現的一個問題

在上線執行時,遇到一個問題,線上測試三臺主機,另外兩臺主機正常產生資料,並上報。只有一個主機沒有產生資料。

後來發現是使用nohup+&後臺方式啟動時,該主機的sudoer檔案中規定不能執行sudo命令,導致執行失敗。注意,在執行該指令碼時,已經是在root許可權下,所以沒有必要再使用sudo。