當一個入侵者進入了你的系統並且種植了木馬,通常會想辦法來隱蔽這個木馬(除了木馬自身的一些隱蔽特性外,他會盡量給你檢查系統的過程設置障礙),通常入侵者會修改一些文件,比如管理員通常用ps -aux來查看系統進程,那么入侵者很可能用自己經過修改的ps程序來替換掉你系統上的ps程序,以使用ps命令查不到正在運行的木馬程序。如果入侵者發現管理員正在運行crontab作業,也有可能替換掉crontab程序等等。所以由此可以看出對於系統文件或是關鍵文件的檢查是很必要的。目前就系統完整性檢查的工具用的比較多的有兩款: Tripwire和AIDE,前者是一款商業軟件,后者是一款免費的但功能也很強大的工具。
AIDE(Advanced Intrusion Detection Environment)
高級入侵檢測環境)是一個入侵檢測工具,主要用途是檢查文件的完整性,審計計算機上的那些文件被更改過了。
AIDE能夠構造一個指定文件的數據庫,它使用aide.conf作為其配置文件。 AIDE數據庫能夠保存文件的各種屬性,包括:權限(permission)、索引節點序號(inode number)、所屬用戶(user)、所屬用戶組(group)、文件大小、最后修改時間(mtime)、創建時間(ctime)、最后訪問時間(atime)、增加的大小以及連接數。 AIDE還能夠使用下列算法:sha1、 md5、 rmd160、 tiger,以密文形式建立每個文件的校驗碼或散列號。
這個數據庫不應該保存那些經常變動的文件信息,例如:日志文件、郵件、 /proc文件系統、用戶起始目錄以及臨時目錄
安裝AIDE工具
yum -y install aide
修改配置文件:
vim /etc/aide.conf
注1:!/usr/src/ 表示忽略這個文件的檢查
注2:往下還有很多,這里不做一一贅述
初始化默認的AIDE的庫
首先,您必須創建一個數據庫,以便執行將來的檢查。在機器插入網絡之前,應在安裝操作系統和應用程序后立即執行此操作。您可以通過發出命令來完成此操作 aide --init
。這將創建一個數據庫,其中包含您在配置文件中選擇的所有文件。現在應將新創建的數據庫移動到安全位置,例如只讀介質。您還應該將配置文件和AIDE二進制文件,最好是手冊頁和本手冊放在該介質上。請記住編輯配置文件,以便從該只讀介質中讀取輸入數據庫。配置文件不應保留在目標計算機上。攻擊者可以讀取配置文件並對其進行更改,如果他確實改變了配置文件,他可以將他的rootkit放在AIDE不檢查的地方。因此,只有在檢查期間才能訪問只讀媒體。
現在你已經准備好了。您現在可以檢查文件的完整性。這可以通過給出命令來完成 aide --check
。AIDE現在讀取數據庫並將其與磁盤上找到的文件進行比較。AIDE可能會發現您可能不期望的地方發生變化。例如,tty設備通常會更改所有者和權限。您可能希望閱讀長報告,由您決定。但是我們大多數人沒有時間或傾向於每天讀取大量垃圾,因此您應該修改配置文件以僅包含不應更改的某些文件的文件和屬性。但請記住,你不應該忽視太多,因為這會讓你受到攻擊。入侵者可能會將他/她/它/他們的根工具包放在您完全忽略的目錄中。一個很好的例子是/ var / spool / lp或類似的東西。這是lp守護程序存儲其臨時文件的位置。但是你不應該完全忽略它。您應該只忽略lp守護程序不斷創建的文件格式。並記住在regexp結束時使用$ -sign。這會阻止某人創建一個被忽略的目錄及其內容。
現在您已經修剪了配置文件,您應該更新數據庫。這可以通過以下方式完成: aide --update
update命令也與check相同,但它會創建一個新數據庫。現在,此數據庫應與新配置文件一起放在該只讀介質上。只要有必要,應重復檢查,修剪,更新周期。我建議偶爾檢查一下配置文件。“一會兒”的定義取決於你的偏執狂。有些人可能希望每次檢查后每天都這樣做。有些人可能想每周做一次。
數據庫中通常存在一些偏差。我的意思是漂移是創建新文件,編輯應用程序的配置文件,大量的小變化堆積,直到報告變得不可讀。這可以通過偶爾更新數據庫來避免。我自己每天都在運行更新。但是,我幾乎不經常更換輸入數據庫。替換輸入數據庫應始終是手動操作。這不應該是自動化的。
還有另一種方法可以做到這一點。這種方法可能適用於擁有大量機器助手的人。您可以aide --init
在所有主機上運行 ,並將生成的數據庫移動到中央主機,您可以在其中比較不同版本的數據庫。 aide --compare
這樣可以釋放受監視計算機上的資源。
報錯:因為沒有aide.db.gz文件,此時還不能對文件進行監控
解決:
實戰1
vim /etc/aide.conf
例子:TEST=p+u+g+s+md5 #定義監控規則
監控data下的file1 file2 file3
/data/ TEST
!/data/ file3 #不監控data下的fie3文件
aide --init 保存新定義的監控規則到aide的數據庫中(/var/lib/adie)
或者aide --update
未創建data目錄時及下面的文件時:
創建完data目錄時及下面的文件時:
加入到定時任務中,每天凌晨4點半執行一次
echo "30 4 * * * root /usr/sbin/aide --check" >> /etc/crontab
啟用安全(高質量)密碼策略
以下命令將啟用SHA512而不是使用MD5:
authconfig --passalgo=sha512 —update
/etc/security/pwquality.conf
pwquality.conf 提供了一種配置默認密碼質量要求的方法系統密碼。此文件由libpwquality庫和使用的實用程序讀取
這個庫用於檢查和生成密碼。
該文件具有非常簡單的name = value格式,可能以#字符開頭的注釋。行的開頭,行的末尾和=符號周圍的空格是忽略。
sed -i 's/# difok/difok/' /etc/security/pwquality.conf
sed -i 's/# minlen = 9/minlen = 14/' /etc/security/pwquality.conf
sed -i 's/# dcredit/dcredit/' /etc/security/pwquality.conf
sed -i 's/# ucredit/ucredit/' /etc/security/pwquality.conf
sed -i 's/# lcredit/lcredit/' /etc/security/pwquality.conf
sed -i 's/# ocredit/ocredit/' /etc/security/pwquality.conf
sed -i 's/# minclass = 0/minclass = 4/' /etc/security/pwquality.conf
sed -i 's/# maxrepeat = 0/maxrepeat = 3/' /etc/security/pwquality.conf
sed -i 's/# maxclassrepeat = 0/maxclassrepeat = 3/' /etc/security/pwquality.conf
sed -i 's/# gecoscheck = 0/gecoscheck = 1/' /etc/security/pwquality.conf
各參數解釋:
difok
新密碼中不得出現的字符數
密碼。(默認5)
minlen
新密碼的最小可接受大小(如果未禁用信用,則加一這是默認值)。(參見pam_pwquality(8)。)
不能設置為低於的值6.(默認9)
dcredit
新密碼中包含數字的最大功勞。如果小於0就是
新密碼中的最小位數。(默認1)
ucredit
新密碼中包含大寫字符的最大功勞。如果少
它是0,它是新密碼中最小的大寫字符數。
(默認1)
lcredit
在新密碼中使用小寫字符的最大功勞。如果少
小於0是新密碼中的最小小寫字符數。
默認1)
ocredit
在新密碼中包含其他字符的最大功勞。如果不到0它是新密碼中其他字符的最小數量。(默認1)
minclass
新密碼所需的最小字符數(數字,大寫,小寫,其他)。(默認為0)
maxrepeat
新密碼中允許的最大相同連續字符數。如果值為0,則禁用檢查。(默認為0)
maxsequence
新密碼中單調字符序列的最大長度。
例子
這種序列的'12345'或'fedcb'。請注意,大多數此類密碼不會通過簡單檢查,除非序列只是一小部分密碼。如果值為0則禁用檢查。(默認為0)
maxclassrepeat
新的同一類中允許的最大連續字符數密碼。如果值為0,則禁用檢查。(默認為0)
gecoscheck
如果非零,請檢查GECOS字段中是否包含長於3個字符的單詞用戶的passwd條目包含在新密碼中。
檢查是如果值為0,則禁用。(默認值為0)
badwords
空格分隔的單詞列表,不得包含在密碼中。
這些是cracklib字典檢查的附加單詞。
此設置也可以應用程序用來模擬gecos檢查不是的用戶帳戶創造了。
DICTPATH
cracklib詞典的路徑。 默認是使用cracklib默認值。
查看密碼的加密算法
Linux帳戶的密碼加密后存放於/etc/shadow文件中。對於Linux操作系統的密碼采用哪種加密方式,取決於/etc/pam.d/system-auth或者/etc/pam.d/passwd文件定義
在 Red Hat 中,可以通過authconfig --test | grep hashing命令來獲取當前系統帳號的密碼加密算法,如圖1所示
最后,所有用戶都需要重新設置密碼才能生效。可以使用 chage -d 0 userName 強制所有用戶下次登錄修改密碼(如下)
for i in `cat /etc/passwd|grep -v "nologin"|grep "bash"|awk -F ':' '{print $1}'`;do chage -d 0 $i;done
我再以 lisi 用戶登錄時:
Linux/UNIX采用5種加密算法
Linux/UNIX操作系統目前采用5種加密算法,可以通過加密后的密碼值來識別,主要是通過帳號后面的$X來判斷。頭兩字節為$1表示MD5加密算法,$2表示使用Blowfish加密算法,$5表示使用SHA-256加密算法,$6表示使用SHA-512加密算法,其余為標准的DES。例如“zhangsan:$6$VESIBDzs$lhigbyEgn/ee7.Unrt1dDoB49jv7x9tWodivRNqXfN9SpIWTq/og1POH5GZnlPkDdah/YlPK/EVBKEKWKSo1C0:17918:0:99999:7:::”其加密算法為SHA-512。
Linux密碼操作
在早期的Linux系統中,/etc/passwd文件含有系統每個用戶的信息,當然,用戶的口令經過一定的數字與邏輯算法后把一個運算結果(可見字符串)放到了passwd文件中,加密強度並不大。於是,早期黑客們只要拿到/etc/passwd這個文件,系統就已經攻入一半了。后來,隨着安全級別的提高,出現了passwd文件中口令單獨加密的情況,密碼加密后的結果和其他一些輔助信息存到了shadow文件。至於采用何種保存形式和加密算法,可以用/usr/sbin/authconfig程序來設置。用戶登錄時輸入的口令經計算后與/etc/passwd和/etc/shadow中的結果相比較,符合則允許登錄,否則拒絕登錄。
對於Linux密碼操作主要有增加、刪除和修改,第一次添加用戶時需要設定一個密碼,修改密碼使用“passwd”,刪除密碼在刪除用戶時系統自動刪除設置的密碼。讀取密碼加密文件必須具備Root權限,通過“cat /etc/shadow”命令來讀取shadow文件的內容。
破解Linux密碼
在進行如何安全設置Linux密碼前,先看看如何破解Linux密碼。Linux使用的是DES(加密函數式是Crypt)或MD5加密算法,由於計算量之大,它們幾乎很難被逆向破解。
DES口令密文是有13個ASCII字符的字符串,而MD5口令密文的啟始字符總是“$1$”
如何知道root用戶的密碼呢?入侵者打開了/etc/shadow文件
root的冒號后面就是加密后的密碼。開始破解工作吧。
破解Linux口令的工具有很多,如oclhash、John the Ripper、Crack by Alex Muffett和Cracker Jack等等,其中John the Ripper的功能最為強大,速度也最快。將/etc/shadow下載到本地,先使用John the Ripper的簡單模式試一下,但沒有結果
注:該文檔是以centos7.4.1708,內核:3.10.0-693.el7.x86_64
wget https://www.openwall.com/john/j/john-1.8.0.tar.gz
tar -zxvf john-1.8.0.tar.gz -C /usr/local/
cd /usr/local/john-1.8.0/src/
make
make clean SYSTEM #其中SYSTEM是適當的制造目標。或者,如果未列出您的系統就使用下一條命令
make clean generic
cd ../run/
./john --test
./john #查看john的可用參數
--single “單一裂縫”模式
--wordlist=FILE --stdin wordlist模式,從FILE或stdin讀取單詞
--rules 為wordlist模式啟用字錯誤規則
--incremental[=MODE] “增量”模式[使用部分模式]
--external=MODE 外部模式或字濾波器
--stdout[=LENGTH] 只輸出候選密碼[cut LENGTH]
--restore[=NAME] 恢復中斷的會話[稱為NAME]
--session=NAME 為NAME提供一個新會話
--status[=NAME] 會話的打印狀態[稱為NAME]
--make-charset=FILE 制作一個字符集,FILE將被覆蓋
--show 顯示破解的密碼
--test[=TIME] 運行每個TIME秒的測試和基准測試
--users=[-]LOGIN|UID[,..] [不]僅加載此(這些)用戶
--groups=[-]GID[,..] 僅加載此(這些)組的用戶[not]
--shells=[-]SHELL[,..] 僅用[out]這個(這些)shell加載用戶
--salts=[-]N 只加載[out]至少N個密碼的鹽
--save-memory=LEVEL 啟用內存保存,級別為1..3
--node=MIN[-MAX]/TOTAL 此節點的數字范圍超出TOTAL計數
--fork=N fork N進程
--format=NAME 制哈希類型名稱:descrypt /bsdicrypt/md5crypt/bcrypt/LM/AFS/tripcode/dummy
開始破解:
將passwd和shadow這2個文件合並,並指定默認的字典(如下圖):
解決:
make linux-x86-64 #將上面編譯時的make clean generic換成make linux-x86-64重新編譯即可
破解:
OK 成功破解~!~!~
這里是弱密碼,如果是未知的密碼就得看字典怎么樣了,時間也會相對來說長一點 && 機器性能 && 心理學 等等....
我試着添加了個用戶,並賦予新用戶復雜一點的密碼就卡這里了(如下圖):
試着在password.lst中添加新用戶的密碼:
Linux密碼破解主要基於兩種一種是基於字典,將收集到的密碼保存在dic文件中,因此破解成功取決於字典中的密碼。
另外一個就是暴力破解,暴力破解取決於計算機的硬件運算能力和密碼設置的長度和難易程度。
安全/etc/login.defs Pasword政策
每個會話的最大密碼登錄嘗試次數:
Sysctl安全
/etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.tcp_max_syn_backlog = 1280
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_timestamps = 0
拒絕所有TCP Wrappers
TCP包裝器可以提供一種快速簡便的方法來控制對鏈接到它們的應用程序的訪問。TCP Wrapper感知應用程序的示例是sshd和portmap。
以下命令阻止除SSH之外的所有命
echo "ALL:ALL" >> /etc/hosts.deny
echo "sshd:ALL" >> /etc/hosts.allow
啟用SSH警告橫幅
/etc/issue
1、服務器禁止PING
echo "echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all" >> /etc/rc.d/rc.local
2、防止IP欺騙
echo -e "order bind,hosts\nmulti off\nnospoof on"> /etc/host.conf
防止非授權用戶獲得權限
#!/bin/bash
jia(){
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
chattr +i /etc/services
}
jian(){
chattr -i /etc/passwd
chattr -i /etc/shadow
chattr -i /etc/group
chattr -i /etc/gshadow
chattr -i /etc/services
}
read -p "您想刪除用戶還是添加用戶(1:添加,2:刪除): " xz
if [ $xz == 1 ];then
read -p "請輸入你要添加的用戶: " NAME
jian
useradd $NAME
echo "123456"| passwd --stdin $NAME
if [ $? -eq 0 ];then
echo -e "原始密碼為: \033[31m123456\033[0m"
else
echo "$NAME 用戶的初始化密碼未成功定義"
fi
jia
elif [ $xz == 2 ];then
read -p "請輸入你要刪除的用戶: " NAME1
jian
userdel -r $NAME1
if [ $? -eq 0 ];then
echo "$NAME1 用戶已刪除"
else
echo "在刪除 $NAME1 時出了點問題"
fi
jia
else
echo "請輸入數字1或者數字2..."
fi
歡迎加入QQ群一起討論Linux、開源等技術