安全老是相對的,再安全的服務器也有可能遭受到攻擊。一名安全運維人員,要把握的原則是:儘可能作好系統安全防禦,修復全部已知的危險行爲,同時,在系統遭受攻擊後可以迅速有效的處理攻擊行爲,最大限度的下降攻擊對系統產生的影響。mysql
系統遭受攻擊並不可怕,可怕的是面對攻擊一籌莫展,下面將詳細介紹在服務器遭受攻擊後的通常處理思路。sql
全部的攻擊都來自於網絡,所以,在得知系統正遭受黑客的攻擊後,首先要作的就是斷開服務器的網絡鏈接,這樣除了能切斷攻擊來源之處,也能保護服務器所在網絡的其餘主機。安全
能夠經過分析系統日誌或登陸日誌文件,查看可疑信息,同時也要查看系統都打開了那些端口,運行那些進程,並經過這些進程分析那些是能夠的程序。這個過程要根據經驗和綜合判斷能力進行追查和分析。bash
既然系統遭到入侵,那麼緣由是多方面的,肯能是系統漏洞,也多是程序漏洞,必定要查清楚是那個緣由致使的,而且還要查清楚遭到攻擊的途徑,找到攻擊源,由於只有知道了遭受攻擊的緣由和途徑,才能在刪除攻擊源的同時進行漏洞修復。服務器
在服務器遭受攻擊後,須要馬上備份服務器上的用戶數據,同時也要查看這些數據中手否隱藏着攻擊源。若是攻擊源在用戶數據中,必定要完全刪除,而後講用戶數據備份到一個安全的地方。網絡
永遠不要認爲本身能完全清除攻擊源,由於沒有人能比黑客更瞭解攻擊程序,在服務器遭到攻擊後,最安全也最簡單的方法就是從新安裝系統,由於大部分攻擊程序都會衣服在系統文件或者內核中,因此從新安裝系統才能完全清除攻擊源。session
在發現系統漏洞或者應用程序漏洞後,首先要作的就是修復系統漏洞活着更改程序BUG,只有將程序的漏洞修復完畢才能正式在服務器上運行。運維
將備份的數據從新複製到新安裝的服務器上,而後開啓服務器,最後將服務器的網絡鏈接開啓,對外提供服務。ssh
在發現服務器遭受攻擊後,首先要切斷網絡鏈接,可是在有些狀況下,好比沒法立刻切斷網絡鏈接時,就必須登陸系統查看是否有可疑用戶,若是有可疑用戶登陸了系統,那麼須要立刻將這個用戶鎖定,而後中斷此用戶的遠程鏈接。socket
經過root用戶登陸,而後執行「w」命令便可列出全部登陸過系統的用戶,經過這個輸出能夠檢查是否有可疑或者不熟悉的用戶登陸,同事還能夠根據用戶名以及用戶登陸的源地址和他們正在運行的程序來判斷他們是否爲非法用戶。
一旦發現可疑用戶,就要立刻將其鎖定,執行以下操做(注:當前系統沒有可疑用戶,以下舉例講root更換成能夠用戶):
[root@iZm5e1zj4mlgc24i43avl0Z ~]# passwd -l xxxx
鎖定以後,有可能採用戶還處於登陸狀態,所以還要將此用戶踢下線,根據上面"w"命令的輸出,便可得到此用戶登陸進行的pid值,操做以下:
[root@iZm5e1zj4mlgc24i43avl0Z ~]# ps -ef |grep @pts/1 xxxx 16820 16288 0 10:33 pts/2 00:00:00 grep --color=auto @pts/2 root 16819 16287 0 10:33 pts/1 00:00:00 grep --color=auto @pts/1 [root@iZm5e1zj4mlgc24i43avl0Z ~]# kill -9 16820
這樣就將可疑用戶xxxx從線上踢下去了。若是此用戶再次試圖登陸,此時他已經沒法登陸了。
last命令記錄着全部用戶登陸系統的日誌,能夠用來查找非受權用戶的登陸事件,而last命令的輸出結果來源於/var/log/wtmp文件,稍有經驗的入侵者都會刪掉/var/log/watmp以清除本身行蹤,但仍是會在此文件中露出蛛絲馬跡的。
查看系統日誌是查找攻擊源最好的方法,可查看的系統日誌有/var/log/messages、/var/log/secure等,這兩個日誌文件能夠記錄軟件的運行狀態以及遠程用戶的登陸狀態,還能夠查看每一個用戶目錄下的.bash_history文件,特別是/root目錄下的.bash_history文件,這個文件中記錄着用戶執行的全部歷史命令。
檢查可疑進程的命令不少,例如ps、top等,可是有時候只知道進程的名稱沒法得知路徑,此時能夠經過以下方式查看。
首先經過pidof命令查找正在運行的進程pid,例如,要查找sshd進程的pid,執行以下命令:
[root@iZm5e1zj4mlgc24i43avl0Z ~]# pidof sshd 16285 1635
而後進入內存目錄,查看對應pid目錄下exe文件信息:
[root@iZm5e1zj4mlgc24i43avl0Z ~]# ls -al /proc/16285/exe lrwxrwxrwx 1 root root 0 Jul 31 09:25 /proc/16285/exe -> /usr/sbin/sshd
這樣就找到了進程對應的完整執行路徑。若是還有查看文件的句柄,能夠查看以下目錄:
[root@iZm5e1zj4mlgc24i43avl0Z ~]# ls -al /proc/16285/fd total 0 dr-x------ 2 root root 0 Jul 31 09:25 . dr-xr-xr-x 9 root root 0 Jul 31 09:25 .. lrwx------ 1 root root 64 Jul 31 09:25 0 -> /dev/null lrwx------ 1 root root 64 Jul 31 09:25 1 -> /dev/null lrwx------ 1 root root 64 Jul 31 09:25 12 -> /dev/ptmx lrwx------ 1 root root 64 Jul 31 09:25 13 -> /dev/ptmx lrwx------ 1 root root 64 Jul 31 09:25 2 -> /dev/null lrwx------ 1 root root 64 Jul 31 09:25 3 -> socket:[2337471] lrwx------ 1 root root 64 Jul 31 09:25 4 -> socket:[2337933] lr-x------ 1 root root 64 Jul 31 09:25 5 -> pipe:[2337936] l-wx------ 1 root root 64 Jul 31 09:25 6 -> /run/systemd/sessions/499.ref l-wx------ 1 root root 64 Jul 31 09:25 7 -> pipe:[2337936] lrwx------ 1 root root 64 Jul 31 09:25 8 -> /dev/ptmx
經過這種方式基本能夠找到任何進程的完整執行信息,此外還有不少相似的命令能夠幫助系統運維人員查找可疑進程。例如,能夠經過制定端口或者tcp、udp協議找到進程pid,進而找到相關進程。
有些時候,攻擊者的程序隱藏很深,例如rootkit後門程序,在這種狀況下ps、top、netstat等命令也可能已經被替換,若是在經過系統自身的命令去檢查可疑進程就變得絕不可信,此時,就須要藉助於第三方工具來檢查系統可疑程序,如chkrootkit、RKHunter等工具,經過這些工具能夠很方便地發現系統唄替換或篡改的程序。
檢查文件屬性是否發生變化是驗證文件無缺性最簡單、最直接的方法,例如,能夠檢查被入侵服務器上/bin/ls文件的大小是否與正常系統上此文件的大小相同,以驗證文件是否被替換,可是這種方法比較低級。此時能夠藉助與Linux下的RPM工具來完成驗證,操做以下:
[root@iZm5e1zj4mlgc24i43avl0Z ~]# rpm -Va missing /home .....UG.. /opt S.5....T. c /etc/ssh/sshd_config missing /var/run/wpa_supplicant S.5....T. c /etc/profile S.5....T. c /etc/sysconfig/authconfig ....L.... c /etc/pam.d/fingerprint-auth ....L.... c /etc/pam.d/password-auth ....L.... c /etc/pam.d/postlogin ....L.... c /etc/pam.d/smartcard-auth ....L.... c /etc/pam.d/system-auth S.5....T. c /etc/security/limits.conf S.5....T. /usr/bin/ps SM5....T. c /etc/yum.repos.d/epel.repo S.5....T. c /etc/rc.d/rc.local missing /var/lib/mysql S.5....T. c /etc/sysctl.conf S.5....T. /usr/lib/systemd/system/ntpd.service S.5....T. /usr/sbin/ntpd S.5....T. /bin/netstat S.5....T. c /etc/salt/minion SM5....T. c /etc/yum.repos.d/CentOS-Base.repo missing c /etc/yum.repos.d/CentOS-CR.repo missing c /etc/yum.repos.d/CentOS-Debuginfo.repo missing c /etc/yum.repos.d/CentOS-Media.repo missing c /etc/yum.repos.d/CentOS-Sources.repo missing c /etc/yum.repos.d/CentOS-Vault.repo missing c /etc/yum.repos.d/CentOS-fasttrack.repo
對於輸出中每一個標記的含義介紹以下:
若是在輸入結果中有「M」標記出現,那麼對應的文件可能已經遭到篡改或替換,此時能夠經過卸載這個RPM包從新安裝來清除受攻擊的文件。
不過這個命令有個侷限性,那就是隻能檢查經過RPM包方式安裝的全部文件,對於經過非RPM包方式安裝的文件就無能爲力了。同時,若是RPM工具也遭到替換,就不能使用這種方法了,此時能夠從正常的系統上覆制一個RPM工具進行檢測。固然,對文件系統的檢查也能夠經過chkrootkit、RKHunter這兩個工具來完成,上面介紹的命令或工具能夠做爲輔助或者補充