Linux系統(tǒng)安全加固防攻擊技術(shù)
一、前言
本系列文檔包括三個(gè)部分,分別是《針對(duì)Linux系統(tǒng)的攻擊》、《Linux系統(tǒng)安全加固》和《Linux系統(tǒng)入侵排查》。編寫這些文檔的目的,是從攻和防的角度分別對(duì)Linux系統(tǒng)相關(guān)的安全技術(shù)進(jìn)行介紹,使初級(jí)水平的網(wǎng)絡(luò)安全從業(yè)者對(duì)Linux操作系統(tǒng)的脆弱性檢查、安全加固、應(yīng)急響應(yīng)等安全服務(wù)工作產(chǎn)生更清晰的認(rèn)識(shí)。
在前面一篇文章《針對(duì)Linux系統(tǒng)的攻擊》中,介紹了攻擊者對(duì)Linux系統(tǒng)可能發(fā)起什么樣的攻擊。本文是系列文檔的第二部分,在本文檔中,針對(duì)這些攻擊行為,給出在CentOS 7系統(tǒng)中進(jìn)行相應(yīng)安全加固的基本步驟和方法。
相關(guān)操作系統(tǒng)及IP地址
操作系統(tǒng) | IP地址 | 作用 |
manjaro | 192.168.242.1 | 宿主機(jī) |
CentOS 7 x64 | 192.168.242.132 | 被安全加固的虛擬機(jī) |
Ubuntu 1804 | 192.168.242.134 | 輔助測(cè)試的虛擬機(jī) |
二、Linux系統(tǒng)安全加固
(一)防口令破解
1. 處理弱口令賬戶
加固要求:
當(dāng)前user1用戶的口令為弱口令,修改該口令,使其符合長(zhǎng)度和復(fù)雜性要求。
加固方法:
passwd user1 //為用戶設(shè)置強(qiáng)壯的口令
驗(yàn)證效果:
重新以u(píng)ser1身份連接到服務(wù)器,以新口令登錄,確定其可成功登錄。
2. 處理與系統(tǒng)運(yùn)行維護(hù)無(wú)關(guān)的賬戶
加固要求:
系統(tǒng)存在與系統(tǒng)運(yùn)行、維護(hù)工作無(wú)關(guān)的賬戶,名為user1,根據(jù)需要,將其鎖定或刪除。
加固方法:
usermod -L user1 //鎖定賬戶
userdel user1 //刪除用戶
驗(yàn)證效果:
查看user1用戶的狀態(tài)
返回“密碼已被鎖定”,說(shuō)明賬戶處于鎖定狀態(tài)。
若返回“未知用戶名”,則user1已被刪除。
3. 限定口令長(zhǎng)度和復(fù)雜度
加固要求:
設(shè)置口令策略,滿足長(zhǎng)度和復(fù)雜度要求。要求長(zhǎng)度8位以上,口令中包含大寫字母、小寫字母、數(shù)字、特殊字符,每種字符至少一個(gè)。
加固方法:
//限制口令最短8位
authconfig --passminlen=8 --update
//限制口令至少包含4種字符
authconfig --passminclass=4 --update
驗(yàn)證效果:
創(chuàng)建測(cè)試用戶,為其設(shè)置不符合長(zhǎng)度和復(fù)雜度要求的口令
系統(tǒng)首先提示口令長(zhǎng)度不夠,之后提示字符類型少于4種。說(shuō)明本項(xiàng)加固成功。
4. 限定口令生存周期
加固要求:
限制口令的最長(zhǎng)使用期限為90天,口令的最短使用期限為3天,口令到期前15天發(fā)出警告。
加固方法:
//編輯文件,修改文件內(nèi)容
vi /etc/login.defs
設(shè)置PASS_MAX_DAYS為90,
設(shè)置PASS_MIN_DAYS為3,
設(shè)置PASS_WARN_AGE為15
保存退出
驗(yàn)證效果:
cat /etc/login.defs | grep '^PASS_' //查看相關(guān)參數(shù)的值
5. 設(shè)置登錄失敗鎖定
加固要求:
用戶遠(yuǎn)程登錄驗(yàn)證連續(xù)超過(guò)5次失敗的,鎖定賬號(hào)30分鐘
加固方法:
//修改配置文件,在#%PAM-1.0的下面,即第二行添加內(nèi)容
vim /etc/pam.d/sshd
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
保存退出
驗(yàn)證效果:
ssh user1@192.168.242.132
故意連續(xù)6次輸入錯(cuò)誤口令,最后輸入正確口令,發(fā)現(xiàn)已經(jīng)無(wú)法登錄。
在服務(wù)器上查看鎖定情況:
說(shuō)明登錄失敗鎖定機(jī)制已經(jīng)生效。
(二)防服務(wù)漏洞
1. 更改ssh服務(wù)端口
加固要求:
更改ssh服務(wù)的監(jiān)聽端口為2222
加固方法:
//編輯配置文件
vi /etc/ssh/sshd_config
取消Port行的注釋,將Port的值從22修改為2222
保存退出
//重啟ssh服務(wù)
systemctl restart sshd
驗(yàn)證效果:
//訪問(wèn)遠(yuǎn)程主機(jī)ssh服務(wù)默認(rèn)的22端口
ssh user1@192.168.242.132
連接被拒絕
//指定訪問(wèn)遠(yuǎn)程主機(jī)的ssh服務(wù)的2222端口
ssh -p 2222 user1@192.168.242.132
允許登錄。說(shuō)明ssh服務(wù)端口修改成功。
2. 限制ssh連接的源地址范圍
加固要求:
只允許192.168.242.0/24網(wǎng)段訪問(wèn)ssh服務(wù)。
加固方法:
//修改配置文件,在末尾加入一行
vi /etc/hosts.deny
sshd:ALL
保存退出
//修改配置文件,在末尾加入一行
vi /etc/hosts.allow
sshd:192.168.242.0/255.255.255.0:allow
保存退出
驗(yàn)證效果:
從其它虛擬機(jī)訪問(wèn)CentOS 7
客戶端地址為192.168.242.134,連接被重置,說(shuō)明ssh客戶端地址限制生效了,加固成功。
3. 禁用不必要的服務(wù)
加固要求:
停止并禁用不需要的服務(wù),如cups,減小系統(tǒng)的受攻擊面。
加固方法:
//停止服務(wù)
systemctl stop cups
//禁用服務(wù)
systemctl disable cups
驗(yàn)證效果:
//查看服務(wù)是否被禁用
systemctl is-enabled cups
//查看服務(wù)當(dāng)前是否正在運(yùn)行
systemctl status cups
若服務(wù)的自啟動(dòng)配置為disabled或masked,服務(wù)的運(yùn)行狀態(tài)為inactive,則加固成功。
4. 啟用selinux
加固要求:
SELinux使用強(qiáng)制訪問(wèn)控制機(jī)制,可最大限度地減小系統(tǒng)中服務(wù)進(jìn)程可訪問(wèn)的資源。要求開啟selinux,設(shè)置工作模式為enforcing,策略為target。
加固方法:
vi /etc/selinux/config //編輯配置文件
設(shè)置
SELINUX=enforcing
SELINUXTYPE=targeted
保存退出,重啟后生效。
驗(yàn)證效果:
sestatus //查看selinux的工作狀態(tài)
SELinux status:enabled
Loaded Policy name:Target
說(shuō)明加固成功。
5. 啟用審計(jì)服務(wù)
加固要求:
啟動(dòng)auditd服務(wù),并設(shè)置為開機(jī)自動(dòng)運(yùn)行。
加固方法:
//手動(dòng)啟動(dòng)服務(wù)
systemctl start auditd
//設(shè)置開機(jī)自動(dòng)運(yùn)行
systemctl enable auditd
驗(yàn)證效果:
//查看auditd服務(wù)狀態(tài)
systemctl status auditd
//查看是否自啟動(dòng)
systemctl is-enabled auditd
若auditd服務(wù)被設(shè)置為自動(dòng)啟動(dòng)且已經(jīng)運(yùn)行,則加固成功。
(三)防權(quán)限提升
1. 管理sudo權(quán)限
加固要求:
當(dāng)前user1用戶被加入到了wheel用戶組,而系統(tǒng)允許wheel組通過(guò)sudo執(zhí)行任何命令,F(xiàn)要求取消user1用戶通過(guò)sudo執(zhí)行任何命令的權(quán)限,只允許sudo執(zhí)行特定的命令。
加固方法:
gpasswd -d user1 wheel //將user1從wheel組中刪除
visudo //編輯配置文件,給予user1通過(guò)sudo執(zhí)行特定命令的權(quán)限
推薦閱讀:《CentOS 7系統(tǒng)配置sudo策略(附sudo提權(quán)演示)》
https://www.freebuf.com/articles/system/243526.html
驗(yàn)證效果:
sudo ls //user1用戶通過(guò)sudo執(zhí)行未授權(quán)的命令
若出現(xiàn)提示,稱用戶不在sudoers文件中,說(shuō)明sudo權(quán)限配置加固成功。
2. 啟用sudo日志
加固要求:
啟用sudo日志。
加固方法:
第一步,創(chuàng)建sudo.log文件
//創(chuàng)建日志文件
touch /var/log/sudo.log
第二步,修改rsyslog配置文件
//在配置文件最后添加一行
vi /etc/rsyslog.conf
local2.debug/var/log/sudo.log //空白處不能用空格鍵,必需用tab鍵
保存退出
//重啟rsyslog服務(wù)
systemctl restart rsyslog
第三步,修改sudo配置文件
visudo //編輯sudo配置
Defaults logfile=/var/log/sudo.log
Defaults loglinelen=0
Defaults !syslog
保存退出
驗(yàn)證效果:
cat /var/log/sudo.log //執(zhí)行sudo命令后查看sudo日志文件
如果產(chǎn)生了日志條目,說(shuō)明配置成功。
3. 管理suid/sgid文件
加固要求:
系統(tǒng)中存在設(shè)置了suid的vim程序(/usr/bin/vim),存在提權(quán)風(fēng)險(xiǎn),要求取消該程序文件的suid權(quán)限。
加固方法:
chmod u-s /usr/bin/vim
驗(yàn)證效果:
ls -l /usr/bin/vim
若文件權(quán)限中沒有suid標(biāo)識(shí)位,說(shuō)明加固成功。
4. 限制su的使用
加固要求:
除了user1用戶之外,其它用戶禁止使用su命令。
加固方法:
vi /etc/pam.d/su //編輯配置文件,加入下面的行
auth required pam_wheel.so use_uid
保存退出
vi /etc/group //編輯配置文件,將user1加入wheel組
wheel:x:10:root,user1
保存退出
驗(yàn)證效果:
以u(píng)ser1用戶之外的普通用戶身份登錄,之后執(zhí)行su命令,若返回“su: 拒絕權(quán)限”,則說(shuō)明加固成功。
5. 設(shè)置嚴(yán)格的umask
加固要求:
將用戶默認(rèn)的umask值設(shè)置為027
加固方法:
編輯/etc/bashrc、/etc/profile、/etc/profile.d/*.sh等文件,將umask參數(shù)的值改為027:
umask=027
驗(yàn)證效果:
創(chuàng)建文件,若文件的權(quán)限為640,則說(shuō)明加固成功。
6. 清除沒有屬主的目錄和文件
加固要求:
查找并處理系統(tǒng)中無(wú)屬主或無(wú)屬組的目錄和文件
加固方法:
第一步,查找無(wú)屬主或無(wú)屬組的目錄/文件
find / \( -nouser -o -nogroup \) -exec ls -al {} \;
第二步,對(duì)查找到的文件進(jìn)行處理,不再使用的文件可刪除,有用的文件可將其屬主或?qū)俳M修改為現(xiàn)有的某個(gè)用戶。
驗(yàn)證效果:
系統(tǒng)中找不到無(wú)屬主或無(wú)屬組的目錄/文件,則加固成功。
7. 注銷時(shí)清除命令歷史
加固要求:
用戶注銷時(shí)清除該用戶的歷史命令
加固方法:
//注銷時(shí)清除root用戶的歷史命令
vi /root/.bash_logout //編輯配置文件,加入下面的命令
echo > /root/.bash_history
保存退出
//注銷時(shí)清除user1用戶的歷史命令
vi /home/user1/.bash_logout //編輯配置文件,加入下面的命令
echo > /home/user1/.bash_history
保存退出
//編輯用戶配置模板,這樣以后創(chuàng)建的用戶在注銷時(shí)也會(huì)刪除歷史命令
vi /etc/skel/.bash_logout //編輯配置文件,加入下面的命令
echo > $HOME/.bash_history
保存退出
驗(yàn)證效果:
注銷用戶,重新登錄,執(zhí)行history命令查看歷史命令,若看不到注銷前的歷史命令,則說(shuō)明加固成功。
8. 禁用coredump
加固要求:
禁用系統(tǒng)的core dump功能
加固方法:
vi /etc/security/limits.conf //編輯配置文件,在文件末尾加入:
* hard core 0
保存退出
vi /etc/sysctl.conf //編輯配置文件,加入下面的內(nèi)容
fs.suid_dumpable = 0
保存退出。重啟后參數(shù)生效
sysctl -w fs.suid_dumpable=0 //參數(shù)立即生效
驗(yàn)證效果:
查看配置文件,確認(rèn)配置。9. 執(zhí)行安全更新
加固要求:
安裝可用的安全更新。
加固方法:
yum update --security //安裝安全更新包
驗(yàn)證效果:
yum check-update --security //檢查安全更新
若返回“No packages needed for security;”,說(shuō)明安全更新已完成。
(四)防木馬后門
1. 部署主機(jī)入侵檢測(cè)軟件
加固要求:
安裝部署AIDE入侵檢測(cè)軟件,并定期檢查文件完整性。
加固方法:
yum install aide //在線安裝AIDE
aide --init //生成包含文件系統(tǒng)中所有文件的數(shù)據(jù)庫(kù)
cp /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz //安裝數(shù)據(jù)庫(kù)
aide -c /etc/aide.conf --check //進(jìn)行完整性檢查
aide -c /etc/aide.conf --limit /bin --check //對(duì)指定目錄進(jìn)行完整性檢查
推薦閱讀:《CentOS 8系統(tǒng)安裝配置AIDE入侵檢測(cè)軟件檢查文件完整性》
https://www.freebuf.com/sectool/265391.html
驗(yàn)證效果:
生成散列數(shù)據(jù)庫(kù)后對(duì)文件進(jìn)行修改,運(yùn)行aide,確認(rèn)其可以檢測(cè)到文件的變化。
2. 開啟網(wǎng)絡(luò)防火墻firewalld
加固要求:
開啟網(wǎng)絡(luò)防火墻,只允許遠(yuǎn)程主機(jī)訪問(wèn)本地的特定端口,如22和80端口。
加固方法:
systemctl start firewalld //啟動(dòng)firewalld服務(wù)
systemctl enable firewalld //設(shè)置服務(wù)開機(jī)自啟
firewall-cmd --add-service=http //允許訪問(wèn)http服務(wù)
firewall-cmd --add-service=http --permanent //持久化(寫入配置文件)
firewall-cmd --add-service=ssh
firewall-cmd --add-service=ssh --permanent
firewall-cmd --remove-service=dhcpv6-client //刪除不需要的服務(wù)
firewall-cmd --remove-service=dhcpv6-client --permanent
firewall-cmd --list-service //查看firewalld允許的服務(wù)
firewall-cmd --list-service --permanent //查看配置文件允許的服務(wù)
推薦閱讀:《CentOS 7系統(tǒng)使用firewalld防火墻創(chuàng)建包過(guò)濾規(guī)則》
https://www.freebuf.com/sectool/237569.html
驗(yàn)證效果:
//查看服務(wù)器本地的firewalld服務(wù)是否設(shè)置為自動(dòng)啟動(dòng)
systemctl is-enabled firewalld
//遠(yuǎn)程掃描服務(wù)器端口
nmap 192.168.242.132
若只開放了22和80端口,說(shuō)明firewalld加固成功。
3. 限制crontab使用者
加固要求:
禁止root之外的用戶以crontab方式運(yùn)行計(jì)劃任務(wù)。
加固方法:
touch /etc/cron.allow && vi /etc/cron.allow //創(chuàng)建并編輯文件
在文件的第一行寫入root,保存退出
驗(yàn)證效果:
普通用戶嘗試創(chuàng)建crontab任務(wù),若無(wú)法創(chuàng)建,則加固成功
(五)防痕跡清除
1. 啟用rsyslog服務(wù)
加固要求:
啟動(dòng)rsyslog服務(wù)并設(shè)置為開機(jī)自動(dòng)運(yùn)行
加固方法:
systemctl enable rsyslog //設(shè)置自動(dòng)啟動(dòng)
systemctl start rsyslog //手動(dòng)啟動(dòng)服務(wù)
驗(yàn)證效果:
logger -p local1.notice "This is a test for rsyslog." //執(zhí)行命令
在/var/log/messages文件中若能可以看到相應(yīng)的日志,說(shuō)明rsyslog服務(wù)工作正常,加固成功。
2. 配置遠(yuǎn)程日志服務(wù)器
加固要求:
配置遠(yuǎn)程rsyslog日志服務(wù)器
加固方法:
vi /etc/rsyslog.conf //編輯配置文件,在末尾加入一行
*.* @192.168.242.1
作用是將全部日志轉(zhuǎn)發(fā)到192.168.242.1的UDP 514端口。
保存退出。
推薦閱讀:《CentOS 7系統(tǒng)配置rsyslog服務(wù)發(fā)送和接收日志》
https://www.freebuf.com/articles/es/246659.html
驗(yàn)證效果:
在日志服務(wù)器192.168.242.1上監(jiān)聽TCP 514端口
tcpdump -i vmnet8 udp port 514
當(dāng)被加固主機(jī)執(zhí)行下面的命令時(shí),192.168.242.1主機(jī)的UDP 514端口將收到一個(gè)包
logger -p local1.notice "This is a test for rsyslog."
目標(biāo)主機(jī)的UDP 514端口收到數(shù)據(jù),說(shuō)明日志服務(wù)器配置成功。
3. 配置NTP時(shí)間同步
加固要求:
定期(每小時(shí)一次)與遠(yuǎn)程N(yùn)TP服務(wù)器(time1.aliyun.com)同步時(shí)間,以保證日志時(shí)間的準(zhǔn)確性。
加固方法:
crontab -u root -e //編輯root賬戶的計(jì)劃任務(wù)
0 1 * * * /usr/sbin/ntpdate time1.aliyun.com
保存退出
驗(yàn)證效果:
crontab -u root -l //查看root的crontab,確保存在ntp更新的指令
/usr/sbin/ntpdate time1.aliyun.com //手工執(zhí)行時(shí)間同步
以上命令若返回成功的結(jié)果,則說(shuō)明加固成功。
4. 加強(qiáng)審計(jì)日志文件權(quán)限
加固要求:
為audit日志文件設(shè)置嚴(yán)格的權(quán)限,避免日志信息被惡意操作
加固方法:
chmod 700 /var/log/audit
chmod 600 /var/log/audit/audit.log
chmod 400 /var/log/audit/audit.log.*
驗(yàn)證效果:
ls -ld /var/log/audit //查看日志目錄權(quán)限
ls -l /var/log/audit //查看日志文件權(quán)限
(六)防物理攻擊
1. bootloader安全配置
加固要求:
要求用戶在系統(tǒng)引導(dǎo)程序執(zhí)行之前輸入boot口令,避免非授權(quán)用戶改變啟動(dòng)參數(shù)或者改變引導(dǎo)分區(qū),從而降低系統(tǒng)安全性被削弱的風(fēng)險(xiǎn)(如在啟動(dòng)時(shí)關(guān)閉selinux、進(jìn)入單用戶模式等)
加固方法:
grub2-setpassword
驗(yàn)證效果:
重啟服務(wù)器,在出現(xiàn)開機(jī)選擇菜單時(shí)按e,若出現(xiàn)輸入用戶名和密碼的提示,則說(shuō)明加固成功。
2. 禁用usb設(shè)備
加固要求:
禁止在服務(wù)器上使用usb存儲(chǔ)設(shè)備,如U盤或移動(dòng)硬盤
加固方法:
第一步,偽安裝
cd /etc/modprobe.d/
touch block_usb.conf && vi block_usb.conf //創(chuàng)建并編輯配置文件,加入一行
install usb-storage /bin/true
保存退出
第二步,轉(zhuǎn)移usb-storage驅(qū)動(dòng)文件
uname -r //查看當(dāng)前使用的內(nèi)核版本
cd /lib/modules/3.10.0-1062.18.1.el7.x86_64/kernel/drivers/usb/storage/
mv usb-storage.ko.xz /root
第三步,對(duì)驅(qū)動(dòng)文件進(jìn)行加密
cd /root
zip -q -r -P biomind usb-storage-driver.zip usb-storage.ko.xz
rm -rf usb-storage.ko.xz
這樣,usb存儲(chǔ)設(shè)備的驅(qū)動(dòng)就無(wú)法使用了。當(dāng)需要使用的時(shí)候,將驅(qū)動(dòng)文件解壓出來(lái),放回到原先的目錄即可。
驗(yàn)證效果:
將USB存儲(chǔ)設(shè)備插入系統(tǒng)后無(wú)法識(shí)別,說(shuō)明加固成功,
三、總結(jié)
針對(duì)上一篇文章介紹的針對(duì)Linux系統(tǒng)的攻擊方法,本文相對(duì)應(yīng)地介紹了在Linux系統(tǒng)進(jìn)行安全加固的方法。應(yīng)定期對(duì)系統(tǒng)進(jìn)行安全加固操作,以最大程度地降低Linux系統(tǒng)自身的脆弱性,減少系統(tǒng)被入侵的風(fēng)險(xiǎn)。在下一篇文章中,將介紹針對(duì)攻擊者的各類攻擊方式所采取的入侵排查方法。