相對于Windows操作系統(tǒng)來說,Linux系統(tǒng)比較難于滲透和控制,其根本原因來自Linux的安全機制。對Web等應(yīng)用設(shè)置嚴格的最低權(quán)限后,即使入侵者獲取了webshell也因為較難提權(quán)而止步于此。有的入侵者還會分析服務(wù)器上涉及管理員、用戶的密碼信息、密碼習(xí)慣等,通過社會工程學(xué)再次進行攻擊,在運氣好的情況下極有可能獲取服務(wù)器的權(quán)限。因此對Linux服務(wù)器來說,除了設(shè)置嚴格的權(quán)限、及時更新漏洞補丁外還需要設(shè)置一個強健的密碼。本文就Linux操作系統(tǒng)密碼原理、如何破解Linux密碼以及如何設(shè)置安全的密碼進行探討。
1.1Linux密碼原理
1.Linux密碼構(gòu)成
在Linux系統(tǒng)中涉及系統(tǒng)登錄密碼的有兩個重要文件/etc/passwd和etc/shadow,第一個文件記錄用戶信息,第二個是真正保存用戶密碼信息的。在/etc/passwd 中,每一行都表示的是一個用戶的信息;一行有7個段位;每個段位用冒號分割。比如下面是一個Linux系統(tǒng)中的/etc/passwd 的兩行,其格式為username:x:UID:GID:username full:username home:shell type。
第一字段:用戶名(也被稱為登錄名);
第二字段:口令,顯示為x表示其實密碼已被映射到/etc/shadow 文件中;
第三字段:UID ;
第四字段:GID;
第五字段:用戶名全稱,這是可選的,可以不設(shè)置。
第六字段:用戶的家目錄所在位置;
第七字段:用戶所用SHELL的類型,常見為/bin/bash;
/etc/shadow文件是/etc/passwd 的影子文件,這個文件并不由/etc/passwd產(chǎn)生的,這兩個文件應(yīng)該是對應(yīng)互補的;shadow內(nèi)容包括用戶名及被加密的密碼以及其它/etc/passwd 不能包括的信息,比如用戶的有效期限等;這個文件只有root權(quán)限可以讀取和操作。
/etc/shadow 文件的內(nèi)容包括9個段位,每個段位之間用冒號分割。通過研究發(fā)現(xiàn)即使兩個帳號的密碼相同,其密碼加密值也不一樣。其各個字段的含義如下:
第一字段:用戶名(也被稱為登錄名),/etc/shadow中的用戶名和/etc/passwd中的用戶名 是相同的,這樣就把passwd 和shadow中用的用戶記錄聯(lián)系在一起,這個字段是非空的;
第二字段:密碼(已被加密),如果有些用戶在這段是x,表示這個用戶不能登錄到系統(tǒng);這個字段是非空的;
第三字段:上次修改口令的時間。這個時間是從1970年01月01日算起到最近一次修改口令的時間間隔(天數(shù)),您可以通過passwd 來修改用戶的密碼,然后查看/etc/shadow中此字段的變化;
第四字段:兩次修改口令間隔最少的天數(shù),也就是說用戶必須經(jīng)過多少天才能修改其口令。如果設(shè)置為0,則禁用此功能。此項功能用處不是太大,默認值是從/etc/login.defs文件定義中獲取,PASS_MIN_DAYS 中有定義;
第五字段:兩次修改口令間隔最多的天數(shù)。這個能增強管理員管理用戶口令的時效性,應(yīng)該說增強了系統(tǒng)的安全性;系統(tǒng)默認值是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_MAX_DAYS 中定義;
第六字段:提前多少天警告用戶口令將過期。當用戶登錄系統(tǒng)后,系統(tǒng)登錄程序提醒用戶口令將要作廢。系統(tǒng)默認值是在添加用戶時由/etc/login.defs文件定義中獲取,在PASS_WARN_AGE 中定義;
第七字段:在口令過期之后多少天禁用此用戶。此字段表示用戶口令作廢多少天后,系統(tǒng)會禁用此用戶,也就是說系統(tǒng)會不能再讓此用戶登錄,也不會提示用戶過期,完全禁用;
第八字段:用戶過期日期;此字段指定了用戶作廢的天數(shù)(從1970年的1月1日開始的天數(shù)),如果這個字段的值為空,帳號永久可用;
第九字段:保留字段,目前為空,以備將來Linux發(fā)展之用;
例如某系統(tǒng)root帳號在etc/shadow文件中的表現(xiàn)方式為:root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7::: 。
2 Linux密碼文件位置
絕大部分Linux操作系統(tǒng)的密碼文件名稱為shadow,但也有一些特殊的Linux/Unix操作系統(tǒng)的密碼文件名稱為passwd,而且密碼文件所在位置也不一樣。下面是一些Linux常見系統(tǒng)的密碼文件位置:
Linux /etc/shadow
SystemV Release 4.2 /etc/security
SystemV Release 4.0 /etc/shadow
SunOS 5.0 /etc/shadow
SCOUnix / tcb /auth/files/
OSF/1 /etc/passwd
HP-UX /.secure/etc/ passwd
BSD4.x /etc/master.passwd
AIX3 /etc/security/passwd
IRIX5 /etc/shadow
1.2 Linux系統(tǒng)采用的加密算法
1、查看密碼的加密算法
Linux帳戶的密碼加密后存放于/etc/shadow文件中。對于Linux操作系統(tǒng)的密碼采用哪種加密方式,取決于/etc/pam.d/system-auth或者/etc/pam.d/passwd文件定義,通過more /etc/pam.d/system-auth或者authconfig --test | grep hashing命令可以獲取操作系統(tǒng)使用哪種加密算法,目前有sha256、sha512和md5加密算法。
在Red Hat Enterprise Linux Server中,可以通過authconfig --test | grep hashing命令來獲取當前系統(tǒng)帳號的密碼加密算法,如圖1所示。
圖1 獲取Red Hat Enterprise Linux Server系統(tǒng)帳號加密算法
2、 Linux/UNIX采用5種加密算法
Linux/UNIX操作系統(tǒng)目前采用5種加密算法,可以通過加密后的密碼值來識別,主要是通過帳號后面的$X來判斷。頭兩字節(jié)為$1表示MD5加密算法,$2表示使用Blowfish加密算法,$5表示使用SHA-256加密算法,$6表示使用SHA-512加密算法,其余為標準的DES。例如“root:$1$kbIAhX/R$PiLL1U.n6bivtIr4oTi2y0:15377:0:99999:7:::”其加密算法為md5。
1.3 Linux密碼操作
在早期的Linux系統(tǒng)中,/etc/passwd文件含有系統(tǒng)每個用戶的信息,當然,用戶的口令經(jīng)過一定的數(shù)字與邏輯算法后把一個運算結(jié)果(可見字符串)放到了passwd文件中,加密強度并不大。于是,早期黑客們只要拿到/etc/passwd這個文件,系統(tǒng)就已經(jīng)攻入一半了。后來,隨著安全級別的提高,出現(xiàn)了passwd文件中口令單獨加密的情況,密碼加密后的結(jié)果和其他一些輔助信息存到了shadow文件。至于采用何種保存形式和加密算法,可以用/usr/sbin/authconfig程序來設(shè)置。用戶登錄時輸入的口令經(jīng)計算后與/etc/passwd和/etc/shadow中的結(jié)果相比較,符合則允許登錄,否則拒絕登錄。
對于Linux密碼操作主要有增加、刪除和修改,第一次添加用戶時需要設(shè)定一個密碼,修改密碼使用“passwd”,刪除密碼在刪除用戶時系統(tǒng)自動刪除設(shè)置的密碼。讀取密碼加密文件必須具備Root權(quán)限,通過“cat /etc/shadow”命令來讀取shadow文件的內(nèi)容。
查看shadow文件權(quán)限:ls -l /etc/passwd /etc/shadow
passwd username 更改或者設(shè)置username的用戶密碼,例如passwd antian365 表示設(shè)置或者重設(shè)用戶antian365的用戶密碼。
passwd -l antian365 鎖定用戶antian365不能更改密碼
passwd -d antian365 清除antian365用戶密碼;
passwd -S antian365 查詢antian365用戶密碼狀態(tài);
chage -l antian365 查看某個用戶的密碼限期
chage -E 12/30/2016 -m 5 -M 90 -I 30 -W 14 antian365 將密碼期限設(shè)為2016年12月30日。
另外,修改密碼的最短周期為5天,最長周期為90天,密碼過期前14天會發(fā)送消息提醒用戶,過期后帳號會被鎖住30天。
1.4破解Linux密碼
在進行如何安全設(shè)置Linux密碼前,先看看如何破解Linux密碼。Linux使用的是DES(加密函數(shù)式是Crypt)或MD5加密算法,由于計算量之大,它們幾乎很難被逆向破解。DES口令密文是有13個ASCII字符的字符串,而MD5口令密文的啟始字符總是“$1$”,如圖2所示是一臺被攻陷的紅帽系列的Linux。入侵者遠程溢出服務(wù)器后獲得了一個root權(quán)限的登錄界面。
圖2查看當前用戶
如何知道root用戶的密碼呢?入侵者打開了/etc/passwd文件。如圖3所示。
圖3查看etc/passwd文件
看來主機的賬戶是用shadow加密了。繼續(xù)看/etc/shadow的情況。如圖4所示。
圖4獲取加密的密碼字符串
root的冒號后面就是加密后的密碼。開始破解工作吧。
破解Linux口令的工具有很多,如oclhash、John the Ripper、Crack by Alex Muffett和Cracker Jack等等,其中John the Ripper的功能最為強大,速度也最快。將/etc/shadow下載到本地,先使用John the Ripper的簡單模式試一下,但沒有結(jié)果,如圖5所示。
圖5使用john破解密碼
再掛個字典看看。這里用“-w=1.txt”指定字典文件。很快,root密碼出來了,原來是:“bigapple”。如6所示。
圖6成功破解密碼
有了root密碼,以后再進這個服務(wù)器就方便了。
Linux密碼破解主要基于兩種一種是基于字典,將收集到的密碼保存在dic文件中,因此破解成功取決于字典中的密碼。另外一個就是暴力破解,暴力破解取決于計算機的硬件運算能力和密碼設(shè)置的長度和難易程度。
1.5安全設(shè)置linux密碼
1. 設(shè)置密碼過期期限
為了強迫用戶指定足夠強壯的密碼,需修改文件/etc/login.defs中參數(shù)PASS_MIN_LEN(口令最小長度)。同時應(yīng)限制口令使用時間,保證定期更換口令,建議修改參數(shù)PASS_MIN_DAYS(口令使用時間),一般的Linux設(shè)置如圖7所示。
vi /etc/login.defs PASSMAXDAYS 150 PASSMINDAYS 0 PASSWARNAGE 7
以上設(shè)置要求用戶每6個月改變他們的密碼,并且會提前7天提醒用戶密碼快到期了。
圖7修改login.defs參數(shù)
2.設(shè)置加密算法
Linux帳戶的密碼加密后存放于/etc/shadow文件中。對于Red hat Enterprise版本,默認使用MD5算法,這個算法已經(jīng)很不安全。很多經(jīng)典的黑客教程都是教人拿到shadow文件后回去破解出root的密碼,如果能用更難破解的sha算法加密密碼無疑可以提高服務(wù)器的安全性。
# authconfig --test | grep hashing 顯示當前密碼加密算法
# authconfig --passalgo=sha512 --update 設(shè)置使用sha512算法
#authconfig --passalgo=sha256 --update設(shè)置使用sha256算法
最后,所有用戶都需要重新設(shè)置密碼才能生效。可以使用# chage -d 0 userName 強制所有用戶下次登錄修改密碼。對于archlinux架構(gòu)起密碼算法設(shè)置有所不同,可按以下步驟修改:
(1)修改 /etc/pam.d/passwd文件
#%PAM-1.0
#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
#password required pam_unix.so md5 shadow use_authtok
password required pam_unix.so md5 shadow nullok
把最后一行的md5用sha256替換
(2)修改/etc/default/passwd文件
CRYPT=des 改為 CRYPT=sha256
(3)所有用戶重新修改密碼。
3.設(shè)置強悍的密碼
一個強壯的有效的口令應(yīng)當至少有8個字符長,不要取用個人信息(如生日,名字,用戶名,計算機的型號等也盡量不要在密碼中連接電話號碼和2002、2000、888等數(shù)字),普通的英語單詞也不好(因為可用字典攻擊法),口令中最好有一些非字母(如數(shù)字,標點符號,控制字符等),注意盡量不要寫在紙上或計算機中的文件中,選擇口令的一個好方法是將不相關(guān)的字母和數(shù)字或控制字符相連,并組成不少于8位的長度。
獨立設(shè)置服務(wù)器的密碼,服務(wù)器密碼跟其它任何密碼無相關(guān)性,很多公司內(nèi)網(wǎng)喜歡使用公司名稱大小寫,包括一些有規(guī)律的變換。在滲透服務(wù)器時,可以通過社工字典工具生成密碼字典進行暴力破解攻擊。
密碼不在郵件、CMS系統(tǒng)進行傳遞,在有些情況下,黑客會攻擊郵件,通過查看郵件獲取服務(wù)器權(quán)限。
經(jīng)濟允許的情況下,可以結(jié)合硬件進行登錄,比如使用動態(tài)口令盤等。這樣即使黑客獲取了用戶密碼,也因為需要動態(tài)口令需要二次驗證而無法登陸。